KOROMOON

착한 사마리아인이 되고 싶습니다.

11/30/2018

Event-Stream 라이브러리 3.3.6 버전 해킹 사고 분석


( 1 ) 사고 정보

11월 26일 자로 npm 보안팀에서 인기있는 npm 패키지 중 하나인 Event-Stream 라이브러리에 비트코인 악성코드 삽입 관련 사건을 기재함.
Event-Stream 라이브러리는 스트림 관련 작업을 보다 쉽게 할 수 있도록 고안된 자바스크립트 패키지 툴킷으로 일주일에 약 2백만 번의 다운로드 횟수를 기록하고 있음.

Event-Stream 라이브러리가 Bitcoin 지갑 응용 프로그램에 저장된 자금을 훔치도록 되어 있는 악성 코드가 삽입되었으며 복잡한 난독화로 인해 약 3달 간 이슈화되지 않음.
기존 제작자가 시간과 흥미가 없다는 이유로 약 3개월 전에 Right9ctrl 이라는 프로그래머에게 개발권을 넘겼으며 Right9ctrl 은 Flatmap-Stream 라이브러리 0.1.1 버전에 대한 새로운 종속성을 포함하는 Event-Stream 라이브러리 3.3.6 버전을 출시했고 Flatmap-Stream 라이브러리 안에 Copay 응용 프로그램(비트코인지갑)을 타겟으로한 악성코드가 포함되어 있음.

트위터, 깃허브 및 해커뉴스 사용자에 따르면 악성코드는 비트코인 결제 플랫폼 BitPay 에서 개발한 데스크톱 및 모바일 지갑 응용프로그램인 Copay 의 소스코드에서 사용되기 전까지는 휴면 상태로 유지됨.
그러나 악성코드가 감염되어 Copay 지갑 응용프로그램의 악성코드 버전에 포함되면 개인키를 비롯한 사용자의 지갑 정보를 훔쳐 copayapi.host:8080 도메인으로 보냄.

Copay 팀은 5.0.1~5.1.0 사이의 모든 버전이 공식적으로 감염된 것으로 보이므로 사용자들에게 5.2.0 버전으로 업데이트하라고 경고함.
또한 npmjs.com 자바스크립트 패키지 저장소 관리자는 사이트에서 Flatmap-Stream 라이브러리를 사이트에서 내려 프로젝트에서 접근할 수 없도록 했음.
악성 Event-Stream v3.3.6 도 npmjs.com 에서 삭제되었지만 현재 후속 버전을 배포하므로 Event-Stream 라이브러리는 계속 사용할 수 있음.

이 두 라이브러리를 사용하는 프로젝트 관리자는 종속성 트리를 사용 가능한 최신 버전으로 업데이트할 것을 권고함.



( 2 ) 공격 코드 내용

1. index.min.js 실행
flatmap-stream 라이브러리에 index.js 파일과 index.min.js 파일이 존재하지만 index.min.js 에만 축소화된 공격 코드가 포함되어 있음.
해당 공격코드는 require("./test/data")문자열을 hex 인코딩하여 공격 페이로드를 은폐시킴.


< index.min.js 공격 코드 >

2. test/data.js 실행
index.min.js 실행된 후 test/data.js 실행되며 data 변수에 AES 방식으로 암호화된 공격 페이로드가 들어 있음.
AES 암호화 키를 process.env.npm_package_description 참조하는데 지갑 응용프로그램인 Copay 이 실행되지 않는 한 공격 코드가 실행되지 않으며 해독할 수 없게 되어 있음.


< test_data.js 공격 코드 >

3. 공격 페이로드 실행
복호화된 공격 페이로드는 아래와 같으며 Bitcoin 지갑의 인증 정보를 판독하여 외부 서버로 전송함.


< 초기 페이로드 >


< 복호화된 페이로드 일부 >

다운로드 링크(암호 : koromoon1004) :
https://drive.google.com/file/d/1HucoVanYhQKwZIJjQUKrvQqEQA-YDmn4/view?usp=sharing



( 3 ) 대응 방안

1. 패치 업데이트 및 롤백
Event-Stream 라이브러리 최신 버전(4.x)으로 업데이트 또는 또는 안전한 버전으로 알려진 Event-Stream 라이브러리 3.3.4 버전으로 롤백

2. 관련 악성 도메인 차단
copayapi[.]host



( 4 ) 참고 사이트

https://github.com/dominictarr/event-stream/issues/116
http://www.dailysecu.com/?mod=news&act=articleView&idxno=42179
https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident
https://qiita.com/azs/items/b15bc456bee3a7892950
https://github.com/bitpay/copay/issues/9346



============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기