상세 컨텐츠

본문 제목

Trojan.Android.JSCoinMiner 분석보고서

악성코드 분석 리포트

by 알약(Alyac) 2019. 7. 4. 18:35

본문


안녕하세요? 이스트시큐리티 시큐리티대응센터(이하 ESRC)입니다.


최근 비트코인을 비롯한 암호화폐의 가격이 전반적으로 상승세에 있습니다. 이런 암호화폐의 가격 상승에 발맞추어 관련 악성코드가 증가 추세를 보이고 있습니다


모바일 기기를 타겟으로 하는 암호화폐 악성앱은 크게 3가지로 분류할 수 있습니다


첫번째는 클리퍼로 피해자의 클립보드를 감시하다가 암호화폐의 지갑주소가 감지 되면 이를 공격자의 지갑주소로 변경하는 공격을 수행 합니다


두번째는 월렛으로 위장하는 악성앱입니다. 월렛은 암호화폐를 저장하는 지갑이며 악성앱은 이런 월렛으로 위장하여 유포됩니다. 월렛으로 위장한 악성앱을 설치한 피해자가 자신의 지갑 주소 생성을 시도하면 공격자의 지갑 주소를 반환합니다. 이를 모르는 피해자가 공격자의 지갑으로 암호화폐를 입금하도록 유도하는 것입니다


세번째는 피해자의 모바일 기기에서 직접 암호화폐를 채굴하는 크립토재킹 악성앱입니다. 악성앱은 게임앱등으로 위장하여 유포되며 이를 설치하게 되면 백그라운드에서 암호화폐를 채굴하게 됩니다. 본 분석 보고서에서는 자바스크립트를 활용한 크립토재킹 악성앱을 분석하도록 하겠습니다.


분석대상 악성앱은 모네로 암호화폐 채굴 용 자바스크립트를 백그라운드에서 구동 시킵니다. 이 스크립트는 CoinHive라는 업체에서 제공하는 스크립트로 본래의 용도는 웹사이트 운영자에게 암호화폐 채굴을 통한 부가 수입을 올릴 수 있도록 하는 것입니다. 즉 새로운 수익 창출원이 되기를 기대한 것입니다. 그러나 기대와 달리 해당 스크립트는 악성코드 제작자들의 새로운 수익 창출원이 되었습니다.


CoinHive의 운영 방식은 암호화폐 채굴용 스크립트를 웹사이트 운영자에게 제공하고 이를 웹서버에 설치하면 사이트 방문자들의 PC나 모방일 기기에서 암호화폐를 채굴하게 됩니다. 이렇게 채굴된 암호화폐는 사이트 운영자의 수익이 되는 구조로 운영이 됩니다. 악성코드 제작자들은 이 스크립트를 웹사이트가 아닌 악성앱에 심어 피해자의 모바일 기기에서 실행하여 암호화페를 획득하는 것입니다


암호화폐를 스크립트 코드로 채굴 한다면 성능이 따라주지 않아 문제가 될 것으로 생각 할 수 있습니다. 그러나 CoinHive의 스크립트는 웹 환경의 제한된 성능을 고려하여 웹 어셈블리라는 언어를 사용하여 작성되었습니다. 웹 어셈블리는 웹 환경이 가지는 성능 제한을 극복하기 위한 프로젝트로 자바스크립트 같은 웹 언어보다 월등한 성능을 내도록 고안된 언어입니다. 따라서 네이티브 언어(예 : C, C++등) 수준의 성능보다는 못하더라도 기기의 성능을 최대한 활용하여 암호화폐 채굴을 할 수 있습니다.

 

본 분석보고서에서는 크립토재킹 악성앱인 'Trojan.Android.JSCoinMiner'를 상세 분석 하고자 합니다.


악성코드 상세분석

 

다음 그림은 'Trojan.Android.JSCoinMiner' 실행 시 채굴 코드가 동작하는 과정을 시계열로 보여 주고 있습니다.


[그림 1] 채굴 코드 실행 과정



그림 1에서 알 수 있듯이 채굴 코드는 게임 실행 동안에만 동작하도록 제작 되어 있습니다. 이렇게 하면 기기의 성능 변화가 없기에 피해자가 악성앱으로 의심하기 더욱 어렵게 됩니다.


Trojan.Android.JSCoinMiner로 탐지되는 다양한 변종 중에는 앱이 종료 되어도 백그라운드에서 지속적으로 채굴하는 악성앱도 있으며 실행 후 악성앱의 Icon을 제거하고 채굴을 하는 악성앱도 있습니다. Icon이 제거되면 피해자가 앱을 닫은 후 재실행을 할 수 없게 되고 제거하기 전까지 백그라운드에서 암호화폐를 채굴하게 됩니다.



 

[그림 2] 악성앱 실행 화면


Trojan.Android.JSCoinMiner가 실행 되면 일반적인 게임앱과 같이 동작을 합니다. 그림2는 악성앱의 실행 시 화면으로 일반적인 게임 화면으로 보입니다. 게임을 구동 시켜보면 매우 단순하게 동작하지만 보상이라는 미끼로 피해자가 지속적으로 게임 실행을 유지하도록 제작 되었습니다


[그림 3] 앱 실행 시 CoinHive 초기화 코드



악성앱을 실행 하면 채굴용 코드를 초기화 합니다. 이후 그림 4와 같은 정상적인 게임코드를 실행 시킵니다.


[그림 4] 실제 게임 코드의 일부


게임 코드가 실행 될 때 채굴용 코드도 동작을 하게 되면 그림 5와 같이 WebView를 통하여 engine.html을 실행 시키게 됩니다.  



[그림 5] 채굴 용 스크립트 실행 코드


engine.html min.js코드를 실행 시키게 됩니다. 그림 6engine.html 코드의 일부입니다.



[그림 6] engine.html 코드의 일부



그림 6에서 보이듯이 채굴용 스크립트를 실행 합니다.

 

다음 그림 7은 스크립트 내에 있는 채굴 서버의 주소 리스트 중 일부입니다.


[그림 7] 서버 주로 리스트



위 서버의 주소 중에서 랜덤하게 선택된 주소록 접속을 한 후 문제를 받아오고 결과를 전송하게 됩니다.


[그림 8] 서버의 응답 데이터를 처리하는 코드



그림 8은 서버에서 내려주는 여러 명령을 처리하는 코드로 문제를 받거나 클라이언트의 인증 결과 등을 처리합니다.

[그림 9] 서버에서 받은 문제 처리를 위한 스레드 할당



그림 8의 코드에서 받은 문제를 그림 9의 코드를 통하여 계산할 스레드를 생성 하게 됩니다.


[그림 10] 문제를 계산하는 코드


그림 10은 받은 문제를 계산 하는 코드입니다. 목표 해쉬가 나올 때까지 계산을 수행하는 단순한 코드 입니다.


[그림 11] 해결된 문제의 결과를 전송하는 코드


해결된 문제는 다시 서버로 전송합니다.


[그림 12] 웹 어셈블리의 라이브러리 목록


그림 12는 스크립트의 성능 한계를 상쇄하기 위해 사용되는 웹 어셈블리의 라이브러리 목록입니다




결론

 

이번에 분석한 'Trojan.Android.JSCoinMiner' 악성앱은 크립토재킹 공격을 수행하는 악성앱 입니다


암호화폐의 가치가 더 상승 할지 아니면 하락 할 지는 알 수 없습니다. 그러나 공격자들의 수익이 될 수 있는 한 암호화폐를 노리는 악성코드들은 지속적으로 제작되어 공격이 이어질 것임은 분명해 보입니다


따라서 이런 악성앱들에 효과적으로 대응하기 위해서는 사용자의 보안의식 재고와 함께 알약M과 같은 신뢰 할 수 있는 백신의 사용이 필요합니다. 그리고 문자나 SNS 등의 링크를 통한 앱 설치 시에도 주의가 필요합니다.





현재 알약M에서는 해당 앱을 “Trojan.Android.JSCoinMiner” 탐지명으로 진단하고 있습니다.


관련글 더보기

댓글 영역