2018.10.08

강은성의 보안 아키텍트 | 블록체인과 보안(2)

강은성 | CIO KR
지난 칼럼에서는 블록체인을 활용하는 입장에서 블록체인이 제공하는 보안특성을 기밀성, 무결성, 가용성이라는 전통적인 보안의 목적에 따라 검토하였다. 이번 칼럼에서는 블록체인 자체의 보안성에 관해 살펴보고자 한다.

기술적인 측면에서 블록체인의 합의 네트워크(프로토콜)는 컴퓨터공학에서 오랫동안 다뤄왔던 분산시스템(또는 분산 알고리즘)의 일종이다. (물론 블록체인에는 분산시스템 개념만으로는 담을 수 없는 훨씬 더 큰 의미가 있다. 이에 관해서는 다음에 다룬다.) 분산시스템에서는 각 노드에서 다양한 장애(또는 고장) 문제를 해결하기 위해 장애허용(Fault Tolerant) 분산시스템을 설계해 왔는데, 블록체인에서의 합의 프로토콜은 이와 유사하다. 블록체인에서는 참여하는 노드들의 합의에 의해 블록이 생성되는데, ‘비잔틴 장군 문제’와 같이 블록체인 네트워크 안에 악의적인 노드(범행자)가 있어도 합의가 제대로 작동할 수 있도록 합의 프로토콜이 만들어져야 한다.

따라서 블록체인에서 방어해야 할 주요 공격 중의 하나가 시빌 공격(sybil attack)이다. 즉 범행자가 개방형(Public) 블록체인에서 합의에 의미있는 수만큼 가짜 노드들을 만들어낼 수 있다면, 그래서 합의 기제의 51%를 차지할 수 있다면, 실질적인 노드 참여자들이 아니라 범행자의 의도대로 사실과 다른 합의 결과를 만들 수 있다. 이른바 ‘51% 공격’이다. 블록체인의 장점이라고 여겨졌던 무결성이 깨진다. 그래서 작업증명(Proof of Work: PoW) 방식에서는 비트코인의 약 10분 동안의 작업과 같은 적절한 수준의 작업을 한 노드만 합의에 참여할 수 있게 하여 그에 대한 컴퓨팅 파워(hash power) 비용을 지불하게 함으로써 sybil attack을 차단하고자 한다. 지분증명(Proof of Stake) 방식에서는 일정한 양의 토큰 자산을 갖고 있어야 합의에 참여할 수 있게 함으로써 이를 차단하려고 한다. 개방형 블록체인이라면 어떠한 방식이든지 sybil attack을 차단하기 위한 기제를 갖고 있다.

최근 몇 개의 개방형 블록체인에서 51% 공격이 성공하였다. 지난 5월에 Bitcoin Gold(BTG)에 대한 51% 공격을 통하여 이중지불이 성공해서 한 거래소가 약 200억 원의 피해를 입었다는 기사가 나왔다 (정우혁, “비트코인 골드 51% 공격에 대해서”, 2018.06.05). 작업증명 방식에서 일정 기간 51% 해시파워를 확보하는 데 드는 비용과 그것을 통해 얻을 수 있는 이익 사이에 후자가 충분히 의미가 있다면 이러한 사건이 발생할 수 있다는 것이 입증된 사례다. 기술적인 취약점이 있다면 이보다 더 적은 비용으로 가능하기 때문에 다양한 방식의 51% 공격이 실제 일어나고 있다. (코인데스크, “불가능하다던 ‘51% 공격’이 점점 늘어나는 이유”, 2018.07.04)

분산시스템과 마찬가지로 블록체인 네트워크에서도 safety와 liveness가 존재한다. 즉 블록체인이 계속 생성되기 위해서는, 특정 시기에 모든 노드가 같은 값을 갖는 safety의 요건과, 어떠한 일이 있다 하더라도 블록체인이 계속 유지되는 liveness의 요건이 지속적으로 충족되어야 하기 때문이다 (safety와 liveness의 간단하고도 탁월한 설명은 Victor Bushkov, “Safety and Liveness Properties in Distributed Algorithms”, 2014.06.12를 참고하기 바란다). 악의적인 노드나 외부 공격에 의해 이러한 조건이 충족되지 않으면 블록체인에 포함된 각 노드와 그것의 통신 체계인 P2P 네트워크가 살아있다 하더라도 블록체인이 중단될 수 있다. 블록체인의 가용성에 문제가 발생한다.

 

<그림> 블록체인 계층구조의 예 



이더리움 이후 나온 거의 모든 블록체인 플랫폼에서는 스마트계약을 지원한다. 스마트계약을 통해 토큰을 송신하는 경우 스마트계약 프로그램의 오류나 취약점으로 인해 금액을 전혀 다른 사용자에게 송금하는 경우가 발생할 수 있다. 대표적으로 알려져 있는 것이 ‘DAO 사건'이다. 이더리움 상의 스마트계약 프로젝트로서 탈중앙화자율조직(DAO: Decentralized Autonomous Organization)이라는 야심찬 이름이 붙은 DAO 토큰은 2016년 5월 당시 기준으로 ICO를 통해 약 2천억 원의 거금을 모금하였다. 그런데 이더를 낸 참여자들에게 환불하는 소스코드에 재귀호출 취약점이 있어서 같은 해 6월에 이를 악용한 범행자가 243만 이더(약 750억 원)를 이체해 갔고, 결국 이 프로젝트는 문을 닫았다. (DAO 취약점 공격에 대한 상세한 분석은 Phil Daian, "Analysis of the DAO exploit", 2016.06.18을 참고하기 바란다)

올해 6월에 메인넷이 시작된 이오스(EOS)에서는 스마트계약 플랫폼에서 원격코드 실행 취약점이 발견되었다. 스마트계약이 노드에 올라가면 해당 노드의 스마트계약 플랫폼에서 이를 해석하여 실행하는데, 이 때 범행자가 업로드한 악성 스마트계약이 실행되면 해당 노드의 루트 권한을 획득할 수 있어서 범행자가 원격에서 해당 노드를 완전히 통제할 수 있게 된다는 것이다. 심각도가 최상인 보안취약점이다. 모든 노드에 같은 블록이 생성되고 동일한 스마트계약이 모든 노드에서 실행되는 블록체인의 특성상 한 노드를 장악하면 악성코드를 배포하여 블록체인 네트워크상의 모든 노드에 대한 장악이 가능하게 된다. (이에 대한 상세한 분석은 Yuki Chen, Zhiniang Peng, "EOS Node Remote Code Execution Vulnerability", 2018.05.29를 참고하기 바란다.)

블록체인 역시 컴퓨터에서 작동하는 소프트웨어에 의해 작동한다. 따라서 일반 소프트웨어처럼 보안취약점이 있을 수 있다. 개방형 블록체인 프로젝트는 소스가 공개되지 않으면 사기(scam)로 인식되기 십상이다. 보안 측면에서 오픈소스는 양날의 칼이다. 과거 리눅스 옹호자들은 공개된 소스에 취약점이 있으면 (관심있는) 누군가가 이를 발견하여 신고(공개)하고 참여 개발자들이 이를 신속하게 고치기 때문에 리눅스가 유닉스보다 보안성이 좋다고 주장하였다. 그런데 실상은 반대였다. 특정한 소프트웨어를 목표로 하는 범행자들은 공개된 소스를 심도있게 분석하지만 거기에서 취약점을 찾아내어 패치를 내는 개발자들은 그리 많지 않았다. 보완이 필요한 지점이다.


개방형 블록체인 소프트웨어가 일반 소프트웨어와 가장 크게 다른 점은 참여자의 자산을 다룬다는 것이다. 블록체인에서 보안이 더 강조되어야 할 이유다. 대규모 ICO를 한 프로젝트일수록 더욱 블록체인의 보안 강화에 힘써야 한다. 출시 직전에 하는 모의해킹에 머무르지 말고 제품보안 생명주기(Secure Product Lifecycle)와 같이 기획, 개발, 운영의 제품의 모든 단계에서 보안활동체계를 수립함으로써 보안취약점을 최소화하고, 취약점이 신고•공개될 경우 이를 신속하게 처리할 수 있어야 한다. 또한 블록체인 플랫폼 프로젝트들은 오픈소스 프로젝트에 많은 개발자들이 참여하도록 노력할 필요가 있다. 보안을 위해서도 반드시 필요한 일이다.

*강은성 대표는 보안전문업체 연구소장과 시큐리티대응센터장을 거치고, 인터넷 포털회사에서 최고보안책임자(CSO)를 역임한 국내 최고의 보안전문가다. CISO Lab을 설립하여 보안컨설팅과 보안교육을 진행하였고, 지금은 암호화폐 개발업체인 블록체인오에스의 CISO로 일하고 있다. 저서로 IT시큐리티(한울, 2009)와 CxO가 알아야 할 정보보안(한빛미디어, 2015)가 있다. ciokr@idg.co.kr
 
2018.10.08

강은성의 보안 아키텍트 | 블록체인과 보안(2)

강은성 | CIO KR
지난 칼럼에서는 블록체인을 활용하는 입장에서 블록체인이 제공하는 보안특성을 기밀성, 무결성, 가용성이라는 전통적인 보안의 목적에 따라 검토하였다. 이번 칼럼에서는 블록체인 자체의 보안성에 관해 살펴보고자 한다.

기술적인 측면에서 블록체인의 합의 네트워크(프로토콜)는 컴퓨터공학에서 오랫동안 다뤄왔던 분산시스템(또는 분산 알고리즘)의 일종이다. (물론 블록체인에는 분산시스템 개념만으로는 담을 수 없는 훨씬 더 큰 의미가 있다. 이에 관해서는 다음에 다룬다.) 분산시스템에서는 각 노드에서 다양한 장애(또는 고장) 문제를 해결하기 위해 장애허용(Fault Tolerant) 분산시스템을 설계해 왔는데, 블록체인에서의 합의 프로토콜은 이와 유사하다. 블록체인에서는 참여하는 노드들의 합의에 의해 블록이 생성되는데, ‘비잔틴 장군 문제’와 같이 블록체인 네트워크 안에 악의적인 노드(범행자)가 있어도 합의가 제대로 작동할 수 있도록 합의 프로토콜이 만들어져야 한다.

따라서 블록체인에서 방어해야 할 주요 공격 중의 하나가 시빌 공격(sybil attack)이다. 즉 범행자가 개방형(Public) 블록체인에서 합의에 의미있는 수만큼 가짜 노드들을 만들어낼 수 있다면, 그래서 합의 기제의 51%를 차지할 수 있다면, 실질적인 노드 참여자들이 아니라 범행자의 의도대로 사실과 다른 합의 결과를 만들 수 있다. 이른바 ‘51% 공격’이다. 블록체인의 장점이라고 여겨졌던 무결성이 깨진다. 그래서 작업증명(Proof of Work: PoW) 방식에서는 비트코인의 약 10분 동안의 작업과 같은 적절한 수준의 작업을 한 노드만 합의에 참여할 수 있게 하여 그에 대한 컴퓨팅 파워(hash power) 비용을 지불하게 함으로써 sybil attack을 차단하고자 한다. 지분증명(Proof of Stake) 방식에서는 일정한 양의 토큰 자산을 갖고 있어야 합의에 참여할 수 있게 함으로써 이를 차단하려고 한다. 개방형 블록체인이라면 어떠한 방식이든지 sybil attack을 차단하기 위한 기제를 갖고 있다.

최근 몇 개의 개방형 블록체인에서 51% 공격이 성공하였다. 지난 5월에 Bitcoin Gold(BTG)에 대한 51% 공격을 통하여 이중지불이 성공해서 한 거래소가 약 200억 원의 피해를 입었다는 기사가 나왔다 (정우혁, “비트코인 골드 51% 공격에 대해서”, 2018.06.05). 작업증명 방식에서 일정 기간 51% 해시파워를 확보하는 데 드는 비용과 그것을 통해 얻을 수 있는 이익 사이에 후자가 충분히 의미가 있다면 이러한 사건이 발생할 수 있다는 것이 입증된 사례다. 기술적인 취약점이 있다면 이보다 더 적은 비용으로 가능하기 때문에 다양한 방식의 51% 공격이 실제 일어나고 있다. (코인데스크, “불가능하다던 ‘51% 공격’이 점점 늘어나는 이유”, 2018.07.04)

분산시스템과 마찬가지로 블록체인 네트워크에서도 safety와 liveness가 존재한다. 즉 블록체인이 계속 생성되기 위해서는, 특정 시기에 모든 노드가 같은 값을 갖는 safety의 요건과, 어떠한 일이 있다 하더라도 블록체인이 계속 유지되는 liveness의 요건이 지속적으로 충족되어야 하기 때문이다 (safety와 liveness의 간단하고도 탁월한 설명은 Victor Bushkov, “Safety and Liveness Properties in Distributed Algorithms”, 2014.06.12를 참고하기 바란다). 악의적인 노드나 외부 공격에 의해 이러한 조건이 충족되지 않으면 블록체인에 포함된 각 노드와 그것의 통신 체계인 P2P 네트워크가 살아있다 하더라도 블록체인이 중단될 수 있다. 블록체인의 가용성에 문제가 발생한다.

 

<그림> 블록체인 계층구조의 예 



이더리움 이후 나온 거의 모든 블록체인 플랫폼에서는 스마트계약을 지원한다. 스마트계약을 통해 토큰을 송신하는 경우 스마트계약 프로그램의 오류나 취약점으로 인해 금액을 전혀 다른 사용자에게 송금하는 경우가 발생할 수 있다. 대표적으로 알려져 있는 것이 ‘DAO 사건'이다. 이더리움 상의 스마트계약 프로젝트로서 탈중앙화자율조직(DAO: Decentralized Autonomous Organization)이라는 야심찬 이름이 붙은 DAO 토큰은 2016년 5월 당시 기준으로 ICO를 통해 약 2천억 원의 거금을 모금하였다. 그런데 이더를 낸 참여자들에게 환불하는 소스코드에 재귀호출 취약점이 있어서 같은 해 6월에 이를 악용한 범행자가 243만 이더(약 750억 원)를 이체해 갔고, 결국 이 프로젝트는 문을 닫았다. (DAO 취약점 공격에 대한 상세한 분석은 Phil Daian, "Analysis of the DAO exploit", 2016.06.18을 참고하기 바란다)

올해 6월에 메인넷이 시작된 이오스(EOS)에서는 스마트계약 플랫폼에서 원격코드 실행 취약점이 발견되었다. 스마트계약이 노드에 올라가면 해당 노드의 스마트계약 플랫폼에서 이를 해석하여 실행하는데, 이 때 범행자가 업로드한 악성 스마트계약이 실행되면 해당 노드의 루트 권한을 획득할 수 있어서 범행자가 원격에서 해당 노드를 완전히 통제할 수 있게 된다는 것이다. 심각도가 최상인 보안취약점이다. 모든 노드에 같은 블록이 생성되고 동일한 스마트계약이 모든 노드에서 실행되는 블록체인의 특성상 한 노드를 장악하면 악성코드를 배포하여 블록체인 네트워크상의 모든 노드에 대한 장악이 가능하게 된다. (이에 대한 상세한 분석은 Yuki Chen, Zhiniang Peng, "EOS Node Remote Code Execution Vulnerability", 2018.05.29를 참고하기 바란다.)

블록체인 역시 컴퓨터에서 작동하는 소프트웨어에 의해 작동한다. 따라서 일반 소프트웨어처럼 보안취약점이 있을 수 있다. 개방형 블록체인 프로젝트는 소스가 공개되지 않으면 사기(scam)로 인식되기 십상이다. 보안 측면에서 오픈소스는 양날의 칼이다. 과거 리눅스 옹호자들은 공개된 소스에 취약점이 있으면 (관심있는) 누군가가 이를 발견하여 신고(공개)하고 참여 개발자들이 이를 신속하게 고치기 때문에 리눅스가 유닉스보다 보안성이 좋다고 주장하였다. 그런데 실상은 반대였다. 특정한 소프트웨어를 목표로 하는 범행자들은 공개된 소스를 심도있게 분석하지만 거기에서 취약점을 찾아내어 패치를 내는 개발자들은 그리 많지 않았다. 보완이 필요한 지점이다.


개방형 블록체인 소프트웨어가 일반 소프트웨어와 가장 크게 다른 점은 참여자의 자산을 다룬다는 것이다. 블록체인에서 보안이 더 강조되어야 할 이유다. 대규모 ICO를 한 프로젝트일수록 더욱 블록체인의 보안 강화에 힘써야 한다. 출시 직전에 하는 모의해킹에 머무르지 말고 제품보안 생명주기(Secure Product Lifecycle)와 같이 기획, 개발, 운영의 제품의 모든 단계에서 보안활동체계를 수립함으로써 보안취약점을 최소화하고, 취약점이 신고•공개될 경우 이를 신속하게 처리할 수 있어야 한다. 또한 블록체인 플랫폼 프로젝트들은 오픈소스 프로젝트에 많은 개발자들이 참여하도록 노력할 필요가 있다. 보안을 위해서도 반드시 필요한 일이다.

*강은성 대표는 보안전문업체 연구소장과 시큐리티대응센터장을 거치고, 인터넷 포털회사에서 최고보안책임자(CSO)를 역임한 국내 최고의 보안전문가다. CISO Lab을 설립하여 보안컨설팅과 보안교육을 진행하였고, 지금은 암호화폐 개발업체인 블록체인오에스의 CISO로 일하고 있다. 저서로 IT시큐리티(한울, 2009)와 CxO가 알아야 할 정보보안(한빛미디어, 2015)가 있다. ciokr@idg.co.kr
 
X