검수요청.png검수요청.png

이클립스 공격

위키원
(이클립스공격에서 넘어옴)
이동: 둘러보기, 검색

이클립스 공격(eclipse attack)은 한 개의 노드를 대상으로 하는 네트워크 공격으로, 특정 노드가 정직한 노드로부터 정보를 수신받는 것을 막기 위해 다수의 노드가 악의적으로 네트워크를 독점하는 것이다. 다수의 노드는 허위 전송 내역이 담긴 블록을 타겟 노드에 전파하여 블록체인에 대한 노드의 보기를 모호하게 함으로써 이중지불 공격을 가능하게 한다.

개요[편집]

블록체인 네트워크의 노드들은 서로 다른 노드들과 통신을 하며 각자의 장부 내역을 검증한다. 이때 특정 노드가 통신하는 다수의 노드가 악의적인 의도를 가지고 있다면, 해당 노드에 대한 이클립스 공격이 가능하다. 공격자가 허위전송 내역을 담은 블록을 마치 다수에게 확인받은 것처럼 위장하여 타겟 노드에 전파한 다음 이중지불 공격을 할 수 있다. 라우팅 테이블(Routing table)을 공격하는 방법이기 때문에 routing-table poisoning이라고도 불린다.[1]

공격 효과[편집]

  • 엔지니어링 블록 레이스(Engineering block races) : 두 명의 채굴자가 동시에 한 블록을 발견한다. 이클립스 공격은 공격자가 피해자들로부터 채굴된 블록의 발견을 숨겼다가 경쟁 블록이 발견되면 숨긴 블록을 원래대로 할 수 있기 때문에 채굴자들이 고아 블록(Orphan Blocks)에 대한 채굴자들의 필요없었던 채굴 노력을 의미한다.
  • 마이닝 파워 분할(Splitting mining power) : 악의적인 공격자가 51%의 공격을 쉽게 개시하기 위해 악의적인 공격자가 네트워크에서 이클립스 채굴자를 제거하고 활성 채굴자의 양을 줄일 수 있다.
  • N-확인 이중 지출(N-confirmation double spend) : 대부분의 판매자는 이중 지불 공격을 방지하기 위해 상품을 출시하기 전에 블록이 확인될 때까지 기다린다. 그러나, 많은 채굴자가 이탈 된 경우, 이탈한 가맹점에 대해 이중 지출 공격을 시작할 수 있다. 공격자는 자신의 거래를 이클립스 채굴자에게 제시할 수 있으며, 자신의 거래를 원장에 추가할 수 있다. 이 상태는 더 넓은 네트워크에서 분리되어 제거되었으므로 더 잘 알 수 없는 판매자에게 보인다. 판매자가 상호 물품을 공격자에게 보내면 이클립스 채굴자 장부가 폐기되고 판매자는 빈손으로 남게 된다.

막는 방법[편집]

  • 무작위 노드 선택 : 이더리움(Ethereum)의 문제 중 하나는 카뎀리아(Kademlia)의 사용이다. 카뎀리아는 노드의 새로운 연결 검색을 무작위화하지 않기 때문에 공격자가 피해자가 선택할 노드를 만들 수 있다. 이 선택을 네트워크 전체에 분산된 피어(peer)와 무작위로 선택하면 공격자가 대상을 지정하기 위해 만들어야 하는 노드를 추측하기가 더 어려워진다.
  • IP 주소/컴퓨터당 노드 수 제한 : 마커스 등의 논문에서 확인된 가장 큰 결점 중 하나였으며 가장 다루기 쉬운 결점 중 하나였다.
  • 정보 저장소 : 노드는 다른 노드에 대한 정보를 다른 노드와 마주치는 대로 저장한다. 노드가 떠나고 네트워크에 다시 합류한 후 이 정보를 계속 액세스하면 다른 노드를 찾기 전에 일부 합법적인 피어가 연결되도록 할 수 있다.
  • 연결 수 늘리기 : 네트워크 속도가 느려질 수 있으므로 무한대 수는 아니지만, 더 많은 연결이 허용될수록 노드가 합법적인 사용자에게 연결된 가능성이 커진다.

이더리움의 취약점[편집]

이더리움이 이클립스 공격에 취약했던 근본적인 원인은 카뎀리아 프로토콜에서 거리는 노드의 ID를 기준으로 계산되며, 이는 네트워크 내의 모든 노드의 ID가 동일한 값으로 알려져야 한다는 것을 의미한다. 이것이 카뎀리아가 주장한 효율을 끌어낼 수 있는 유일한 방법이다. 그러나 문제는 분산된 환경에서 각 노드가 서로의 ID에 동의할 수 있는 방법이 없다는 점이다. 그러므로 연결을 요청하는 노드는 공개키를 제공해야 한다. 공개키는 Keccak 해싱 프로세스를 거치고 이것이 ID가 된다. 이는 모든 노드가 자체 ID를 정의한다는 것을 의미한다. 결과적으로, 한 시스템은 많은 노드 ID를 만들 수 있고 악의적인 공격자는 한 시스템을 사용하여 공격을 수행하기 위해 많은 노드인 척 할 수 있다. 이를 방지하려면 IP주소와 노드 ID를 함께 기억해야 한다.[2]

비트코인의 취약점 및 대책[편집]

이클립스 공격 취약점[편집]

  • 노드는 최근 타임 스탬프를 사용하여 시도한 버킷에서 IP 주소를 선택하므로, 공격자가 시도된 버킷 주소의 작은 부분을 소유하더라도 공격자가 선택될 확률을 높인다. 공격자는 공격 시간을 늘려 기회를 증가시킬 수 있다.
  • 주소 버킷이 채워질 때마다 주소 중 하나가 임의로 제거된다. 제거된 주소는 임의적이므로 공격자의 IP가 버킷에서 제거되면 이를 반복적으로 노드에 보내서 삽입할 수 있다.

이클립스 공격 대책[편집]

  • 시도한 테이블에서 IP 주소를 임의로 선택하면 최근에 연결된 경우에도 공격자 피어를 선택할 가능성이 줄어든다. 피어 선택이 무작위화되면 공격에 많은 시간을 투자한 후에도 공격자가 성공하지 못한다.
  • 결정적 접근 방식을 사용하여 피어의 주소를 고정 슬롯에 삽입하면 공격자의 주소가 버킷에서 제거된 후 다른 슬롯에 삽입될 가능성이 줄어든다. 결정적인 삽입은 반복적인 주소 삽입이 공격에 가치를 더하지 않도록 한다.

봇넷을 이용한 실험[편집]

  • 시도된 버킷 슬롯에 정직한 노드의 주소를 채움으로써 최악의 시나리오가 만들어졌다. 5시간 동안 총 4,600개의 IP주소로 공격이 수행되었다. 시도된 버킷 슬롯은 처음에는 정직한 노드의 주소로 채워졌지만 98.8%는 공격 후 공격자의 주소로 교체되었다. 이 공격의 성공률을 100%였다.
  • 시도한 주소 슬롯 중 7%만이 합법적인 주소로 채워진 라이브 비트코인 노드에 대한 공격이 이루어졌다. IP주소 400개로 공격해 1시간만 공격에 투입한 것으로 시물레이션했다. 시도한 테이블은 공격 후 약 57%의 공격자 주소로 채워졌다. 이 공격은 84%의 성공률을 보였다.[3]

각주[편집]

  1. goupadmin, 〈What is an Eclipse Attack?〉, 《RadixDLT》, 2018-06-07
  2. 김승우, 〈Ethereum and Eclipse Attack〉, 《미디엄》, 2018-05-29
  3. Packt, 〈What can Blockchain developers learn from Eclipse Attacks in a Bitcoin network – Koshik Raj〉, 《Packt》, 2019-04-11

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 이클립스 공격 문서는 보안에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.