check 3d gpu
바로가기
왼쪽 메뉴로 이동
본문으로 이동

[긴급] EOS 노드 원격코드 실행 취약점 발견...국내 EOS 관련 프로젝트시 주의

2018년 05월 30일(수)
공유하기

구글+구글+ 카카오톡카카오톡 카스카스 라인라인 밴드밴드 URL복사URL복사

URL 복사

아래의 URL을 길게 누르면 복사하실수 있습니다.

- EOS 기반으로 개발되고 있는 프로젝트 있다면 반드시 패치된 버전 사용해야

▲ EOS 노드 원격코드 실행 취약점 POC 영상. 치후 360 제공. [데일리시큐]
▲ EOS 노드 원격코드 실행 취약점 POC 영상. 치후 360 제공. [데일리시큐]
가상화폐 등급표에서 이더리움과 함께 최고등급인 B등급을 받은 EOS(이오스). 이더리움보다 더 빠른 처리속도로 해외 뿐만아니라 한국에서도 EOS 블록체인 기반 앱들이 만들어지고 있다. 하지만 최근 중국 치후360에서 EOS 노드의 원격 코드 실행 취약점을 발견했고 EOS 측에서도 이를 인정하고 패치를 준비중이다. 한국에서 EOS 플랫폼을 기반으로 프로젝트를 진행하는 사업이 있다면 각별한 주의를 기울여야 할 상황이다.

치후 360 불칸팀(Qihoo 360 Vulcan Team) 유키 첸(Yuki Chen)과 치후 360 코어 시큐리티팀(Core Security)의 치니앙 팽(Zhiniang Peng) 연구원은 데일리시큐와 인터뷰를 통해 "지난 5월 11일 오픈소스 스마트컨트랙트 플랫폼(smart contract platform)인 EOS에서 WASM(webassembly) 파일을 파싱할때 발생하는 out-of-bound write 취약점을 발견했다. 이후 5월 28일 해당 취약점을 이용해 EOS 슈퍼 노드(Super Node)에 대한 완전한 통제권을 획득하는 익스플로잇 개발과 테스트를 완료했다"고 밝혔다.

EOS.IO(https://github.com/EOSIO/eos)는 개발자들이 블록체인 인프라 구조를 만들어 활용할 수 있도록하는 소프트웨어다. 이를 이용해 멀티노드 테스트 네트워크 운영과 애플리케이션 개발을 할 수 있다. 그리고 EOSIO는 Amazon, CentOS, Fedora, Mint, Ubuntu, MacOS 등의 OS를 지원한다.

이오스소프트웨어(EOS.IO)는 Block.one에서 2016년 개발을 시작해 2017년 5월에 발표된 오픈소스 소프트웨어로, 마이크로소프트 마블렛츨리(Bletchley)나 IBM의 하이퍼렛저패브릭(Hyperledger Fabric)과 같은 블록체인 아키텍처 중 하나이다. IBM은 클라우드 기반의 기업용 블록체인 서비스인 IBM 블록체인을 2017년 출시하기도 했다.

이번 취약점이 발견된 코드는 아래와 같다.

https://github.com/EOSIO/eos/blob/master/libraries/chain/webassembly/binaryen.cpp

binaryen.cpp 라인78, binaryen_runtime::instantiate_module 함수에서 out-of-bound write취약점이 발생한다.

assert(offset + segment.data.size() <= module->table.initial);

for (size_t i = 0; i != segment.data.size(); ++i) {

table[offset + i] = segment.data[i];

}

공격자가 이 취약점을 이용하기 위해서는 악의적인 스마트 컨트렉트를 노드서버에 업로드할 수 있어야 한다. 또 이 노드 서버가 그 컨트렉트를 파싱하면 악의적인 공격코드가 서버에서 실행되고 서버를 장악할 수 있게 된다.

치후 360 연구원이 블로그에 제공한 동영상을 보면 공격자는 취약점을 이용해 루트(root) 권한을 획득하고 있다. 이는 노드 서버를 완전히 통제할 수 있다는 것을 의미한다. 테스트에 사용된 시스템은 64-bits Ubuntu(우분투)이다.

공격자는 노드서버를 장악한 후 악의적인 컨트렉트를 새로운 블록에 적용시켜 EOS 네트워크의 전체 노드를 추가로 장악할 수 있게 된다.

5월 29일, 이 코드는 다음과 같이 패치되었다.

FC_assert(offset + segment.data.size() <= module->table.initial);

for (size_t i = 0; i != segment.data.size(); ++i) {

table[offset + i] = segment.data[i];

}

그러나 이번 취약점을 발견한 유키 첸은 "32-bit 시스템에서는 완벽하게 패치가 되지 않아 offset + segment.data.size()가 integer overflow를 야기할 수 있다. 그러나 이는 64-bit 시스템에서는 문제가 되지 않는다"라며 "이 보안취약점은 개발팀이 제3의 코드를 충분한 보안체크없이 차용해 사용한데 기인한 것으로 보인다. OEM 방식의 취약점 코드 copy-paste와 써드파티 코드의 합법적 및 불법적 재사용에 대해 진지하게 고민할 필요가 있다"고 밝혔다.

현재 취약한 버전의 EOS 기반으로 개발된 서비스와 블록체인 애플리케이션에 대한 보안점검이 필요한 상황이다. 그리고 EOS 기반으로 개발되고 있는 프로젝트가 있다면 반드시 패치된 버전을 사용해야 한다.

이번 취약점과 관련된 세부 기술적 내용은 아래 치후 360 블로그를 참고하면 된다.

-http://blogs.360.cn/blog/eos-node-remote-code-execution-vulnerability

★정보보안 대표 미디어 데일리시큐!★


길민권 기자 mkgil@dailysecu.com

전체선택후 복사하여 주세요. 닫기