"퍼블릭 블록체인·스마트컨트랙트도 취약점 존재"

중국 치후360 레드팀 연구원들, POC2018서 공격기법 소개·시연

컴퓨팅입력 :2018/11/14 11:20    수정: 2018/11/15 08:43

"이더리움과 이오스(EOS) 블록체인도 공격당할 수 있다. 코드상 취약점이 존재한다. 퍼블릭 블록체인의 프로그램 실행 프로세스를 보고 어떤 코드가 언제 실행될지 알아야 한다. 스마트컨트랙트 역시 수백라인의 코드 하나하나를 인내심 갖고 살펴봐야 한다."

중국 치후360 레드팀 보안연구원들이 최근 이더리움과 이오스, 두 유명 블록체인 네트워크의 노드와 스마트컨트랙트 코드상 취약점이 존재하며 이를 통해 공격자가 네트워크 장애를 일으키거나 암호화폐를 탈취할 수 있다고 경고했다. 지난주 'POC2018' 발표 내용이다.

현장에서 치후360 레드팀 소속 보안연구원 리지아펑(Jiafeng Li)과 펑주어통(Zuotong Feng)은 '퍼블릭 블록체인과 스마트컨트랙트 취약점 이용방법'이라는 주제 발표를 통해 퍼블릭 블록체인의 노드와 블록체인 기반 스마트컨트랙트 취약점을 소개하고 공격과정을 시연했다.

중국 인터넷보안회사 치후360 레드팀 소속 보안연구원들이 해킹보안컨퍼런스 POC2018에서 이더리움과 이오스 블록체인 노드와 스마트컨트랙트 취약점을 발견하고 악용기법을 시연했다. [사진=Pixabay]

연구원들의 발표자료에 따르면 블록체인 소프트웨어 취약점 중 90% 이상을 입력검증 및 표현 취약점, 코드품질 문제, 보안기능, 3가지 유형이 차지했다. 33%를 차지한 입력검증 및 표현 취약점은 버퍼오버플로, xss, 인젝션공격 등을 포함한 유형이다. 30% 비중의 코드품질 문제는 사용되지 않는 지역변수와 널포인터 역참조같은 유형이다. 29%로 나타난 보안기능 관련 취약점 유형은 덮어쓰기 접근(override access)이나 안전하지 않은(unsafe) 난수 사용 등을 포함한 유형이었다.

■ 이더리움·이오스 노드 취약점과 악용 시나리오

먼저 리지아펑 연구원의 발표로 이더리움 노드 중 가장 널리 쓰이는 게드(Geth)의 취약점이 소개됐다. 게드는 구글 프로그래밍 언어 '고(Go)'를 이더리움 프로토콜로 구현한 것으로, 그 이름은 '고 이더리움(Go Ethereum)'을 줄인 것이다. 그는 '이더리움 네트워크 노드 3분의 2가 게드 기반'이란 통계를 인용해 이 취약점의 파급력이 큼을 시사했다.

설명에 따르면, 게드로 구동되는 노드에 경량 클라이언트를 지원하려면 라이트이더리움서브프로토콜(LES)을 적용해야 한다. LES적용 후 LES클라이언트가 LES서버로부터 블록헤더를 요청시, 클라이언트에서 서버측에서 해석하는 '겟블록헤더' 메시지를 보낸다.

게드 소스코드 중 이 블록헤더 메시지의 정수 데이터값 처리 부분에 허점이 있었다. 공격자가 이를 통해 허용범위내 최대치(0xffffffffffffffff)를 할당한 메시지를 보내면, 받는 쪽에 인덱스가 범위를 벗어나게(index out of range) 하는 오류를 유도해, 노드 동작을 방해할 수 있다.

치후360 레드팀 리지아펑 연구원이 제시한 블록체인 소프트웨어 취약점 유형별 분포.

이어 이오스 스마트컨트랙트 코드 작성에 쓰이는 이오스 노드용 웹어셈블리 라이브러리의 취약점이 소개됐다. 웹어셈블리는 C나 C++같은 프로그래밍언어 소스코드를 효율적인 자바스크립트 형식으로 변환해 처리할 수 있는 규격이다.

설명에 따르면 웹어셈블리 라이브러리 중 binaryen.cpp 파일 중 웹어셈블리 바이너리파일(WASM)로부터 오프셋과 데이터사이즈(segment.data.size())를 읽는 모듈 초기화 함수 코드에 메모리 버퍼 오퍼플로를 유도할 수 있는 취약점이 있었다.

치후360 레드팀의 POC2018 발표자료 일부.

취약점을 악용하면 원격코드실행(RCE) 공격이 가능해진다. 과정은 이렇다. 공격자는 먼저 자신의 이오스 노드에 악의적 스마트컨트랙트를 올린다. 여기에 취약점의 실마리인 오프셋 값(0xffffffff)을 부여한다. 다음으로 앞서 제시된 메모리 버퍼 오버플로 취약점을 통해 표적 노드에 공격코드를 입력한다.

이 취약점은 이오스 블록체인 네트워크에 참가한 노드가 유효하지 않은 값을 제공하는 악의적인 스마트컨트랙트에 악용되게 만들 수 있다. 공격자는 자기가 의도한 노드의 메모리 위치에 데이터를 입력하고 궁극적으로 노드의 제어권을 빼앗을 수 있다. 수퍼노드의 개인키가 탈취될 경우 새로운 블록의 내용이 제어되고 그게 악의적 스마트컨트랙트에 반영될 수도 있다.

리 연구원은 "이 취약점 공격이 성공할 경우 익스플로잇을 통해 리버스셸(reverse shell, 원격 클라이언트에서 서버 포트를 통해 실행하는 명령창)을 시작할 수 있다"며 "이 문제는 우리가 이오스 팀에 연락해 현재 수정됐다"고 설명했다.

■ 이더리움 솔리디티 스마트컨트랙트 취약점으로 암호화폐 탈취 가능

이어 펑주어통 연구원이 이더리움 스마트컨트랙트 코드 자체의 취약점 발생 사례를 소개했다. 제대로 코딩이 안 된 스마트컨트랙트가 계좌 잔액을 탈취당하거나 서비스거부(DoS) 상태에 빠질 수 있다는 내용이었다.

이더리움 스마트컨트랙트는 솔리디티(Solidity)라는 언어의 프로그래밍을 통해 작성된다. 스마트컨트랙트의 코드는 각 실행 단계마다 '가스(Gas)'라는 처리비용을 지불한다. 충분한 가스가 있으면 스마트컨트랙트 코드가 제대로 실행되고, 없으면 코드 실행이 롤백(rollback)한다.

치후360 레드팀의 POC2018 발표자료 일부. 이더리움 스마트컨트랙트의 송금함수 동작 특성을 악용한 공격시나리오를 설명하고 있다.

2016년 7월 'DAO'라는 스마트컨트랙트가 공격을 당했다. 공격자가 이더리움 코인 360만달러치를 탈취했다. 당시 가치로는 7천만달러, 현재는 7억5천만달러에 달하는 암호화폐가 도난당한 것이었다. 당시 이 도난사건을 이더리움 블록체인에 그대로 반영할지를 두고 커뮤니티의 견해가 엇갈렸다. 결국 하드포크 방식을 통해 하나였던 이더리움 네트워크가 '이더리움클래식(ETC)'과 '이더리움(ETH)'으로 나뉘었다.

펑 연구원에 따르면 이더리움 하드포크를 야기한 암호화폐 도난사건에서 악용된 취약점이 스마트컨트랙트 재진입성(reentrancy) 취약점이다. 이는 솔리디티 코드에서 스마트컨트랙트간 송금을 처리하는 송금함수(transfer())의 동작특성을 이용한다.

송금함수는 스마트컨트랙트 실행에 필요한 가스가 남아있는지 확인하고 부족할 경우 지정된 계좌로부터 출금을 시도할 때 쓰인다. 그런데 잔액이 없어질 때까지 콜백 함수로 재인출을 유도당할 수 있다. 이를 악용한 공격 시나리오는 다음과 같다.

정상 계정 A와 연결된 표적 스마트컨트랙트가 만들어진다. 정상 계정 B가 이 스마트컨트랙트의 실행에 필요한 암호화폐(가령 50이더)를 예치한다. 이후 공격자 계정 C가 공격용 스마트컨트랙트를 만들고 여기에 최소한의 동작을 위한 소액의 암호화폐(2이더)를 예치한다.

치후360 레드팀의 POC2018 발표자료 일부. 공격 스마트컨트랙트를 만들어 DoS를 유발함으로써 계좌 소진과 실행불능을 유도하는 과정을 제시하고 있다.

이제 공격용 스마트컨트랙트는 소액의 암호화폐를 표적 스마트컨트랙트에 예치하고, 그 일부(1이더)를 다시 인출한다. 이 때 표적 스마트컨트랙트는, 공격용 스마트컨트랙트가 요청한 인출금액(1이더)를 송금한 뒤 콜백함수를 실행, 50이더가 바닥날 때까지 1이더를 재송금한다.

3가지 스마트컨트랙트 공격 기법이 추가로 소개됐다. 첫째는 콜(Call(), delegatecall(), callcode()) 함수 악용, 둘째는 값의 범위가 0부터 2의 256승-1까지인 기본 부호없는 정수(uint8)의 범위초과를 유도하는 '산술오버플로(Arithmetic overflow)', 셋째는 송금함수 폴백으로 표적 스마트컨트랙트에 비정상동작을 유도하는 DoS였다.

펑 연구원은 이 3가지 방식으로도 공격자가 정상 계정의 솔리디티로 짠 스마트컨트랙트의 관리자 권한(admin)을 빼앗아 악의적 데이터를 입력하거나 계좌 잔액을 탈취할 수 있다고 지적했다.

앞서 블록체인 노드를 공격하는 기법을 소개한 리지아펑 연구원은 치후360 보안연구조직 레드팀의 수석정보보안 엔지니어였다.

그는 마무리 발언으로 "퍼블릭블록체인 중 이더리움과 이오스 노드를 공격할 수 있는 취약점, 스마트컨트랙트를 공격할 수 있는 취약점과 그에 따른 콜 함수, 산술오버플로, DoS 문제가 발생할 수 있다는 점을 소개했다"며 "퍼블릭 체인은 노드상의 프로그램 실행 프로세스를 살펴서 언제 그 코드와 우리 코드가 실행될지 알아야 하고, 스마트컨트랙트 또한 코드 하나하나를 인내심을 갖고 살펴봐야 한다"고 강조했다.

리 연구원과 함께 발표를 진행한 펑주어통 연구원은 치후360 레드팀 소속이면서 중국 충칭우전대학교 학생이다. 이들은 발표 소개문에서 "블록체인의 경제적 가치가 커지면서 공격자가 다양한 수법을 동원해 이익을 얻으려는 추세"라고 강조하기도 했다.

관련기사

두 연구원이 속한 치후360은 중국의 대형 온라인 보안 소프트웨어 회사로 안티바이러스 등 보안 제품과 웹브라우저를 개발, 공급하고 있다. 지난해 상하이 증시에 상장했고 연매출 122억4천만위안(약 2조원)에 달하는 매출을 거뒀다고 올해 4월 공시했다.

이들의 발표가 진행된 POC는 국내외 유명 해커가 발표자로 참가해 제로데이 취약점 정보를 포함한 최신 해킹기술 발표와 시연을 진행하는 국제해킹보안컨퍼런스다. 올해 13회를 맞은 POC2018은 지난 8일과 9일 2일간 서울 양재동 더케이호텔에서 해킹대회를 포함한 부대행사와 함께 진행됐다.