암호화폐 해킹의 역사

 

비트코인과 다른 암호화폐는 분산 특성이 있기 때문에, 투명하고 안전하게 보호된다고들 한다. 하지만 암호화폐 해킹으로 돈을 잃어버린 이들에게는 이 말이 통하지 않는다.

 

 

지금까지 암호화폐 시장에서 일어난 가장 큰 재앙은 20142월에 마운틴 곡스 거래소가 해킹당해 당시 가치로 45천만 달러가 넘는 비트코인이 도난당하는 일이 일어났다. 당시 마운틴 곡스는 최대 거래소로서, 거래의 70%를 처리했었지만, 해킹 사건이후 파산의 길을 걸어야 했다.

 

 

 

두 번째로 큰 사건은 20168월 비트피넥스 거래소에서 일어났다. 당시 가치로 72백만 달러에 달하는 120,000 비트코인이 털린 것이다.

 

 

 

유감스럽게도, 해커들이 비트코인만 노린 것이 아니었다. 다른 암호화계도 해킹에 취약했던 것으로 드러났다.

올해 7월에는 소프트웨어 유출로 인해 3,200만 달러 상당의 이더가 보안되지 않은 지갑에서 도난당했다.

 

 

 

그리고 이번 주 테더는 31 백만 달러 상당의 USDT 토큰이 자사의 재무 지갑에서 승인되지 않고 옮겨져, 승인되지 않은 디지털 지갑으로 보내졌다는 사실을 발견했다. 자금 이동이 동결되었고, 테더에서는 도난 사건이 처음에 어떻게 발생했는지 조사하고 있다.

 

 

암호화폐는 아직 젊은 시장이며, 알려지지 않은 것들이 많기 때문에, 다음 공격을 예측하는 것은 불가능하다. 때문에 암호화폐를 보유하고 있다면, 보안 수준으로 최고 수준으로 업데이트하고, 모범 보안 사례들을 활용해 코인을 안전하게 보호할 필요가 있다.

 

[출처] https://steemit.com/kr/@pius.pius/22w6ve

잇단 해킹 공격 받은 이더리움, 도약 위해 보완해야 할 점은?




중국 한 연구원 "스크립트 언어 설계 간략화, 스마트계약 코드 사전 검증 필요'

가상화폐 이더리움 지갑 패리티(Parity)의 내부 결함으로 3,200만 달러 규모의 이더(ETH)가 유실되는 사고가 지난 20일 발생했다.


패리티 내 다중서명(multi-sig) 스마트계약(Smart Contract)의 허점이 문제였는데, 다른 가상화폐 지갑의 경우 아직 유사한 취약점이 발견되지 않고 있다. 스마트계약이란 특정 조건이 만족되면 프로그래밍을 통해 계약 내용(거래 등)이 자동으로 실행되는 것을 말한다. 이는 비트코인과 차별화된 이더리움만의 대표적 특징이다.


21일 중국 쑤닝금융연구원(蘇寧金融研究院)은 최근 이더리움 사태에 대한 심층 분석과 함께 앞으로의 방향을 제시했다.

쑤닝금융연구원에 따르면 해커들은 패리티 내 ‘initMultiowned’와 ‘initDayLimit’이라는 두 개의 스마트계약을 반복 호출한 것으로 알려졌다. 이 두 초기화 코드는 원칙상 단 한번의 호출만이 가능하나, 코드 실행 시 제한을 걸어두지 않아 같은 액수의 인출이 반복적으로 이뤄지는 사고가 발생했다는 것이다. 패리티는 현재 이더리움 시장에서 가장 광범위하게 사용되는 지갑 중 하나이다.


이번 사건은 2016년 6월에 발생한 DAO 해킹 사건과 유사하다. 당시에도 이번과 마찬가지로 스마트계약의 코드 결함으로 인해 5천만 달러어치(현재 가치 7억 달러 상당)의 이더가 도난 당했다.


DAO 사건 이후 이더리움의 창시자 비탈리크 부테린(Vitalik Buterin)은 이더리움 블록체인의 하드포크(user-activated hard fork, UAHF)식 업그레이드를 통해 해커들이 가로챈 이더 거래 기록을 롤백(roll back), 즉 처음으로 되돌리자고 제안하였다. 그의 의견은 이더리움 채굴자 대다수의 지지를 얻어 실행에 옮겨졌고, 일부 반대 세력이 기존 시스템을 고집하면서 이더리움클래식(ETC)이 탄생했다. 블록체인이 둘로 나뉜 것이다.


그러나 이번 패리티 사건 이후, 비탈리크는 “도난 액수가 크지 않아 지난번과 같이 하드포크를 통한 롤백은 고려하고 있지 않다”고 밝혔다. 덕분에 사건 발생 이후에도 이더리움 가격이 폭락하는 사태는 벌어지지 않았으며, 현재까지 220달러 선을 유지하고 있다.


◆ 튜링 완전성으로 비트코인과 차별화된 이더리움

이더리움은 지난 2014년 세상에 처음 모습을 드러낸 뒤 비트코인에 이어 2대 가상화폐 자리에 올랐다.

이더리움은 비트코인의 블록체인 기술을 한 단계 진화시켜 글로벌 공유가 가능한 컴퓨팅 플랫폼과 '튜링 완전성'(Turing Completeness)을 갖춘 가상 머신 EVM을 만들었다.


이더리움은 이를 통해 한층 유연하고 안전하며 다채로운 기능의 블록체인을 구현하고자 했다. 튜링 완전성이란 튜링기계와 동일한 수준의 계산 능력을 갖췄다는 뜻으로, 이더리움에서는 일반 컴퓨터에서 실행 가능한 거의 모든 프로그래밍이 가능하다는 것을 의미한다.


쑤닝금융연구원에 따르면 비트코인은 애초에 디지털 현금 시스템을 만드는 데 그 목적이 있었기 때문에 내부 스크립트 언어도 송금거래 전용으로 설계되었다. 이 때 거래의 안전성을 확보하기 위해 튜링 완전성은 포기했다(점프나 순환 명령 미포함). 때문에 비트코인은 전세계적 공유가 가능한 가상화폐 장부에 불과하며, 컴퓨팅 플랫폼은 아니다.


반면 이더리움은 다종 프로그래밍 언어가 내장된 블록체인을 구현하였다. 각각의 언어 모두가 튜링 완전성을 갖추고 있으며, 조건부 분기, 순환, 점프, 함수호출 등 복잡한 연산이 가능하다. 때문에 이론적으로 이더리움의 블록체인에서는 어떠한 응용 프로그램도 만들 수 있다.


구체적으로 말해, 이더리움 블록체인 안에서 프로그래머는 필요에 따라 이더리움에서 지원하는 프로그래밍 언어로 자유롭게 코딩해 응용프로그램을 만들 수 있다. 새로운 응용 프로그램을 생성하기 위해 독립된 블록체인을 따로 구성할 필요도 없다. 이것이 스마트계약의 가장 큰 장점이며, 스마트계약 코드는 블록체인에 공개된 이후 중간 매개 없이 자동 실행이 가능하다.

현재 이더리움에서 블록체인 상의 스마트계약은 수 백 종에 이르며, 패리티와 DAO 역시 그 중 하나다.


◆ 이더리움과 블록체인 자체적 결함은 없어

쑤닝금융연구원은 이번 패리티 사건과 지난 DAO 사건은 규모 면에서 차이가 있지만 문제의 본질은 같다고 말한다.

연구원의 분석에 따르면 최근 스마트계약 사용량이 증가하면서 코드 역시 갈수록 복잡해지고 있다.

스마트계약은 일반 계약과 마찬가지로 사전에 충분한 검증이 없으면 실행 과정에서 허점이 발생할 가능성이 높은데, 이것이 해커들에게 발견되면 손실은 그만큼 커질 수밖에 없다.

그러나 이 취약점은 결코 이더리움 블록체인 자체에서 기인한 것이 아니므로 유저들은 이더리움과 블록체인의 안전성에 대해 의심할 필요가 없다는 것이 연구원 측의 주장이다.

쑤닝금융연구원은 “같은 맥락으로 이번 사건은 블록체인의 응용 전망에 그다지 큰 타격을 주지 않을 것으로 보인다”고 내다봤다. 그러면서 “앞으로 유사한 사건이 재발할지라도 그것이 블록체인 기술의 종말을 의미하지는 않는다”고 덧붙였다.


◆ 이더리움, 앞으로 어떻게 해야 하는가?

쑤닝금융연구원은 “블록체인 관계자들은 이번 사건을 교훈 삼아 비슷한 사고가 재발하지 않도록 해야 할 것”이라고 말했다. 그런 의미에서 이더리움이 앞으로 다음 네 가지 측면에 유의할 필요가 있다고 주장했다.


첫째, 블록체인의 스크립트 언어를 보다 간략히 설계할 필요가 있다. 튜링완전성을 일부 희생시켜서라도 안전성을 높여야 한다는 말이다. 비트코인은 애초 설계에서 튜링완전성을 배제한 데다가 스크립트 명령을 다수 삭제한 덕에 높은 안전성을 유지하고 있다. 2009년 탄생 이래 8년의 시간이 흐르는 동안 무수한 해커들의 공격이 있었지만 블록체인이나 스크립트 내부적 결함에 의한 자금 손실은 단 한 차례도 없었다.


사실 기능의 다양성과 안전성은 어느 정도 상호대립적일 수밖에 없다. 두 마리 토끼를 다 잡을 수는 없다는 말이다. 때문에 안전을 위해서는 취사선택을 통해 최소한의 명령을 사용하는 것이 좋다는 의견이다.

또한 스마트계약 가상머신에도 샌드박스(Sand Box, 보호된 영역 안에서 프로그램을 작동시키는 보안 소프트웨어) 등의 수단을 도입해 호출 명령을 엄격하게 제한해야 한다.


둘째, 스마트계약 코드에 대한 철저한 사전검증이 이루어져야 한다. 스마트계약은 현실 세계의 계약과 마찬가지로 다층적이고 엄격한 검증을 거쳐야 하며 코드 검사나 안전성 테스트는 물론 전문가 검증도 도입해야 할 것이다.

로직이 복잡하고 액수가 큰 계약의 경우 수학적 증명을 통해 불확실성을 낮춰야 할 것이다.


셋째, 스마트계약에 관여하는 프로그래머들의 교육을 강화할 필요가 있다. 스마트계약의 프로그래밍 언어는 겉보기에 기존 언어와 별 차이가 없어 보이지만 사실은 완전히 새로운 범주에 속한다.

공정거래나 신용과 같은 개념 역시 프로그래밍에 포함시킬 필요가 있다. 이를 위해 프로그래머들에 대한 트레이닝을 강화할 필요가 있으며, 안전성은 높이고 실수는 줄여야 한다.


마지막으로 조금씩 신중하게 실행해야 한다. 스마트계약 응용 시 단계별 전략을 마련해야 한다. 간단한 것에서 복잡한 것으로, 일부에서 전면으로 차츰 확대해야 하며 계약 액수도 한번에 거액을 설정하는 것이 아니라 서서히 늘려야 한다. 그렇게 되면 중간에 문제가 생기더라도 손실이 크지 않을 것이다.


[출처] 글로벌경제신문 - http://www.getnews.co.kr/view.php?ud=20170721203929632ce57b4c6d6_16

 

+ Recent posts

티스토리 친구하기