비트코인 코어 노드 해킹을 통한 개인키 탈취 및 지갑 해킹

in bitcoin •  5 years ago 
  • VI Relaed Aisa

본 게시물은 비트코인 코어와 생태계의 취약점을 찾아내기 위한 순수한 의도로 연구중에 작성되었으며, 가상 운영체제 또는 물리적 운영체제를 통해 실제 해킹을 시도하여 제3자에게 피해를 가하거나 또는 손상을 입히는 행위를 하지 않았음을 미리 고지합니다.

  1. 비트코인 개인키는 자신만이 알고 있거나 컴퓨터 내 지갑에 저장 또는 인터넷 관리 프로그램, 페이퍼 월렛 등으로 저장되어 있을 것이다. 해당하는 개인키를 알면 그에 해당하는 공개키에 저장된 비트코인을 옮길 수 있다.

  2. 비트코인 개인키에 할당되는 공개키는 개인키 그 자체로 만들어지는 것이 아니라, 개인키를 secp256k1 표준에 정의된 타원 곡선과 상수 집합을 사용해 공개키를 연산하고, 이 연산된 공개키를 SHA-256, RIPEMD-160 암호화 방식으로 해싱한뒤 Base58Check 인코딩 처리를 하여 주소를 생성한다. 단방향 연산 방식으로 만들어지기에 공개키만을 사용해 복호화하여 해당 공개키의 쌍인 개인키를 찾아내기란 현재의 개인 데스크탑의 연산 성능으로는 해독이 불가능하다.

  3. 때문에 현재로서 존재하는 '비트코인 해킹' 방식은 중앙화된 거래소의 서버 또는 데이터베이스를 해킹하여 사용자 또는 시스템의 주요 정보를 탈취하여 비트코인을 훔치는 것이 대부분이다.

  4. 비트코인 네트워크는 지갑, 채굴자, 풀 블록체인, 네트워크 라우팅 4가지의 형태로 나뉘어진 노드들을 통해 구성되어 분산화된 시스템을 구축한다. 즉, 중앙에서 통제·운영·관리가 이루어지는 것이 아닌 각각의 노드들의 데이터 교환을 통해 전체 네트워크를 구성하고 유효성을 검증한다.

여기서 한가지 의문이 들었다. "비트코인 네트워크 내 '노드'들은 해커의 공격으로부터 안전할 수 있을까,
정말 중앙화된 운영관리 시스템(예:거래소) 내 비트코인만이 해킹으로부터 취약한것일까" 하는 의문이었다.
비트코인 노드는 다음과같은 4가지의 분류로 구분된다.

  1. Reference Client [모든 노드를 포함한 완전한 네트워크의 형태. 비트코인 코어가 이에 해당한다.]
  2. Full Blockchain Node [네트워크 라우팅 기능과 풀 블록체인 데이터를 가진 형태]
  3. Solo Miner [풀 블록체인, 네트워크라우팅 기능과 10분간의 유효거래 블록을 생성하고 메인체인에 연결을 담당]
  4. SPV [단순 거래와 유효성 검증만 가능한 노드]

위 4가지의 노드중 물리적 운영체제 또는 시스템 내 지갑이 존재할 가능성이 100%에 해당하는 노드는
Reference Client와 SPV가 있으며 풀 블록체인과 연결된 노드는 Reference Client 하나뿐이지만, 다른 노드들의 경우에도 별도로 지갑 어플리케이션이나 개인키를 텍스트 자료로 보관해둘 수 있는 가능성이 있기에 지갑은 모두 존재한다는 가정 하에 다음과 같은 해킹 기법을 생각해내게 되었다.

<< 비트코인 코어 노드의 IP로 세션 하이재킹하여 권한상승 공격을 통해 시스템을 장악하고 개인키를 탈취한다. >>

준비물 : 비트코인 코어, 와이어샤크, Mobaxterm, VM(가상머신)

1번사진.png

비트코인 코어를 통해 피어 노드를 확인하면, 블록 데이터를 경유하는 노드들의 IP가 나온다. 먼저 알아두어야 할 것은, 비트코인 코어 풀 노드들의 IP 포트는 8333번 포트(P2P)로 오픈되어 있다. 8333번 포트로 열려있는 풀 노드 또는 SPV 노드 대상은 컴퓨터 내에 비트코인 지갑이 존재할 가능성이 매우 높으며, 이러한 노드를 공격 대상으로 지정한다.

접근 대상(노드) : 4x.14x.19x.16x:8333 (노드 ID : 1)

2번 사진.png

Moba X Term 을 사용해 SSH 세션 접속을 시도해보았다. 로그인 아이디에 'Owner' 사용자 이름을 넣어본 결과 해당 사용자가 있음을 확인할 수 있었다. 비밀번호를 입력해보았으나 3회 이상 실패하자 세션 접속이 거부당해 연결이 차단되었다. 이것을 통해 해당 노드 IP가 SSH 접속을 위한 포트가 오픈되어 있음을 확인할 수 있었다.

피어는 해당 노드와 브로드 캐스팅하기 위해 동적 DNS Seed 서버를 통해 활성된 노드들의 IP를 자동으로 얻어오며. DNS 시드 노드는 블록 데이터베이스를 저장하고 있는 다른 노드들의 주소 즉, 공격 대상인 4x.14x.19x.16x:8333과 같은 노드들의 정보를 피어에게 제공한다.

3번 사진.png

만약 위 노드 IP의 모든 포트가 열려있을 경우 중간자 공격(MITM)이 가능해진다.
해당 노드 IP의 패킷을 와이어샤크를 통해 감청한다. 비트코인 노드 IP의 포트인 8333 포트는 TCP를 통해 구성되는 P2P 프로토콜로 와이어 샤크에서 피어와 노드간의 패킷을 조회할 수 있다.

4번 사진.png

해당 노드 IP의 패킷을 와이어 샤크를 통해 감청한 후, 해당 노드 IP의 서버에 브라우저를 통해 접근하자 리눅스 서버가 설치되어 있는 것을 확인할 수 있었다. 또한 와이어샤크를 통해 공격 대상 4x.14x.19x.16x:8333 의 데이터 통신 정보를 수집할 수 있었다.

5번 사진.png

단정할 수 없지만, 대부분의 비트코인 마이닝 풀은 리눅스 서버를 통해 돌아가는것을 토대로 해당 노드 IP가 리눅스 서버가 설치되어 있다는 것을 감안했을때 해당 노드는 Reference Client일 확률이 존재하며 만약 그러할 시, 지갑은 해당 노드 IP의 물리적 운영체제 공간에 100% 존재한다.

결론 : 비트코인과 개인키, 시스템 그 자체는 해킹할 수가 없으나. '비트코인' 혹은 '블록체인' 의 가치는 해당 네트워크를 구성하는 노드들이 얼마나 많은가, 얼마나 많은 구성원이 커뮤니티를 구축하여 생태계를 조성하는가에 달려있다. 고로, 비트코인 네트워크를 구성하는 '노드' 들이 해커들에게 털려 모두 박살이 난다면 비트코인 생태계는 무너질것이며 탈 중앙화적 철학에 관계없이 교환 수단으로서의 가치를 상실하게 될 것이다.

87127012_809774492838398_4138852038018596864_o.jpg

비트코인 코어가 19.0.1 버전으로 업데이트 된 이후, 익명 노드의 점유율이 폭등하여 전체 노드 점유율중 17%이상 차지하고 있다. 업데이트 전의 점유율은 2%로, 많이 낮았지만 현재는 익명 노드가 증가하여 전체 네트워크의 보안에 많은 기여를 하고 있음을 알 수 있다. 하지만, 아직 많은 노드들은 퍼블릭 네트워크에 존재하며 보안에 취약하다.

87445929_809774539505060_6846718301263888384_o.jpg

비트코인 코어 19.0.1 버전이 차지하고 있는 노드 점유율은 전체 점유율 중 24.16%로 아직 70% 이상의 노드가 이전버전의 코어를 경유해 네트워크에 기여하고 있다.

위 공격 타겟의 노드 IP에 대해 보안이 없다면, 해당 노드 IP를 타겟으로 무차별 대입공격 또는 세션 하이재킹을 통해 노드의 시스템을 장악하고 개인키를 탈취하거나 채굴되는 비트코인을 다른 지갑으로 송금하는 일도 비일비재하게 생겨날 것이다. 아니, 어쩌면 지금까지 비일비재하게 일어났을지도 모를 일이다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!