이클립스 공격이란 무엇인가?
이클립스 공격의 정의
이클립스 공격(Eclipse Attack)은 공격자가 다수의 노드를 장악하여 특정 노드를 외부로부터 가리고 블록체인의 네트워크로부터 고립시키는 공격 방식입니다.
블록체인 네트워크에서 노드들은 서로 다른 노드들과 거래 내역을 주고받으며 확인합니다. 하지만 블록체인 네트워크의 대역폭 제한으로 인해 각 노드는 수많은 노드와 동시에 연결할 수 없습니다. 그래서 인접한 몇몇 노드 집합과 연결합니다. 이때 만약 특정 노드와 연결된 다수의 노드를 공격자가 장악한다면 어떻게 될까요?
공격자는 이클립스 공격을 통해 해당 노드를 고립시켜 해당 노드가 정상적인 노드로부터 블록 정보를 수신하는 것을 막습니다. 그리고 마치 다수의 노드에게 확인받은 것처럼 허위 거래 내역을 전송하여 해당 노드의 해시파워를 낭비하게 하거나 허위 블록으로 거래를 수행하도록 함으로써 이중지불 공격을 가능하게 합니다.
이클립스 공격의 결과
이클립스 공격을 통해 다음과 같은 결과가 발생할 수 있습니다.
① 엔지니어링 블록 레이스(Engineering Block Races)
블록 레이스란 블록체인 네트워크의 노드들이 블록을 생성하는 경쟁을 의미합니다. 이클립스 공격에서는 공격자와 공격 대상 노드가 동시에 블록을 채굴한 경우 공격 대상 노드가 채굴한 블록을 네트워크에서 숨김으로써 해당 블록을 고아 블록(Orphan Blocks)으로 만들어 공격자가 채굴한 블록이 블록체인 네트워크에 올라가도록 만들 수 있습니다.
② 마이닝 파워 분할(Splitting Mining Power)
이클립스 공격을 받은 노드는 블록체인 네트워크와 단절되었기 때문에 해당 노드의 마이닝 파워를 낭비시키고 네트워크에서 제거할 수 있습니다. 공격자는 여러 노드에 대한 이클립스 공격을 통해 네트워크 전체의 마이닝 파워를 줄이고 보다 수월하게 51% 공격을 개시할 수 있습니다.
③ N-확인 이중 지불(N-Confirmation Double Spending)
공격자는 공격 대상 노드를 격리시킨 후 공격자의 노드가 생성한 허위의 거래 내역을 공격 대상 노드에게 전송하여 블록체인에 블록을 추가하도록 만들 수 있습니다. 결국 공격 대상 노드들은 공격자의 허위의 거래 내역이 기재된 블록이 확인받는 것을 보고 디지털자산을 제공하게 되지만, 허위 거래 내역이므로 거래 대가를 지급받을 수 없게 됩니다.
이클립스 공격에 대처하는 방법
다행히 아직까지 이클립스 공격을 통한 심각한 피해는 발생하지 않았습니다. 하지만 블록체인 네트워크의 특성상 이클립스 공격에 의한 위험이 존재합니다. 때문에 비트코인, 이더리움을 비롯한 블록체인 네트워크들은 이클립스 공격 취약점을 분석하여 이클립스 공격 가능성을 최소화하기 위한 대책을 마련하기 위해 노력하고 있습니다.
① 무작위 노드 선택(Random Node Selection)
이클립스 공격은 블록체인 네트워크상에서 노드가 자신 주변의 노드를 선택하여 연결한다는 점을 이용합니다. 따라서 자신이 장악한 다수의 노드를 특정 노드와 연결하는 방법으로 공격 대상을 선택할 수 있습니다. 하지만 각 노드가 네트워크 전체에 분산된 무작위의 노드와 연결되도록 만든다면 공격자는 특정 노드를 공격 대상으로 삼기 어렵게 됩니다.
② 정보 저장
노드가 다른 노드에 관한 정보를 저장하도록 함으로써 특정 노드가 네트워크를 떠났다가 재접속했을 때, 이전에 연결한 적이 있는 정상적인 노드와 연결되도록 할 수 있습니다.
③ 연결 수 늘리기
하나의 노드에 연결된 노드의 개수를 늘리면 노드가 정상적인 노드와 연결될 가능성이 커집니다. 또한, 공격자가 특정 노드를 네트워크상에서 고립시키기 어렵게 됩니다.
④ IP 주소 / 컴퓨터당 노드 수 제한
하나의 IP 주소 또는 컴퓨터가 가질 수 있는 노드의 수를 제한합니다. 이 경우 공격자가 이클립스 공격을 실행하기에 충분한 수의 노드를 확보하기 어렵게 됩니다.