포스팅 내용

악성코드 분석 리포트

Android.Riskware.CoinMiner 악성코드 분석 보고서

안녕하세요? 이스트시큐리티입니다.


가상화폐 시세의 급등과 함께 채굴 기능이 있는 앱들이 등장하고 있습니다. 이러한 채굴 기능은 안드로이드 공식 마켓인 구글 플레이스토어의 정상 앱에서 발견되고 있으며, 해당 개발자가 정상 앱의 새로운 버전을 배포할 때 마이너를 추가하여 배포한다. 문제는 이를 사용자들에게 고지하지 않는 것입니다.


기기의 웹 브라우저를 활용한 마이너와 so 파일을 활용한 마이너가 주를 이루고 있습니다. 특히, so 파일을 활용하는 마이너는 "피닉스 코인"을 채굴하며 기기의 화면이 꺼져 있고 충전 중일 때만 채굴을 하여 사용자가 쉽게 알아차리기 어렵습니다.


본 분석 보고서에서는 so 파일을 활용한 마이너를 상세 분석 하고자 합니다.



악성코드 상세 분석


[그림 1] 정상앱 속의 채굴


해당 악성코드는 기기의 배경화면을 꾸밀 수 있도록 고가 브랜드의 자동차 사진을 제공하며 구글 플레이스토어에 정상앱으로서 등록되어 있었습니다. 


사용자에게 고지하지 않고 가상화폐 피닉스 코인을 채굴하고, 이를 oxothuk.mooo.com 네트워크 마이닝풀의 지갑으로 전송합니다. 특히, 구글 플레이스토어의 보안 정책을 피하기 위해서 오픈소스로 공개된 코드로 so파일을 제작하고 가상화페를 채굴합니다.

 

[그림 2] 서비스와 리시버


KGService, LGWorkingService 2개의 서비스를 통하여 채굴에 필요한 기능을 실행하며 기기의 화면이 꺼진 상태에서 채굴을 진행하다가 기기의 화면이 켜지면 서비스는 종료됩니다. 이때, ResponceReceiver 리시버를 통해서 기기의 상태를 감시하여 화면이 꺼지면 채굴을 다시 시작합니다.



[그림 3] 오픈소스로 공개되어있는 마이너


명령어에 따라서 다양한 종류의 코인을 채굴할 수 있는 코드가 오픈소스로 공개되어있고 이를 so 파일로 제작하여 채굴에 활용합니다.






[그림 4] 기기의 채굴 조건


채굴을 하기 위한 조건으로 기기의 화면꺼짐, 배터리양, 충전중 여부, 절전모드 방지, 네트워크 환경 유무 등 5가지 조건을 확인합니다.


[그림 5] 쓰레드 개수에 따른 배터리 조건


CPU를 최대한 활용하여 채굴량을 늘리기 위해서 쓰레드를 이용합니다. 최대 3개까지 동시에 여러 개를 실행하는데 실행 개수에 따라서 필요한 배터리의 조건을 달리하고 있습니다.


[그림 6] 배터리 소비량에 따른 채굴량 조절


배터리 소비량과 온도를 실시간으로 측정하여서 CPU를 조절하고 채굴량을 늘리고 줄입니다.



 [그림 7] 마이닝 중복 확인


기기의 외부 저장소에 해당 앱의 패키지명이 적힌 파일을 저장하여 제작자가 만든 채굴앱이 동시에 같은 기기에서 실행되지 않도록 합니다. “/sdcard/Notifications/kgservice.dat” 경로에 “com.yrchkor.newwallpapers” 패키지명이 저장됩니다. 그러나, Manifest에 외부 저장소에 관한 권한이 없어서 실제로 생성되지 않습니다.

 


[그림 8] CPU 관련 파일


“/proc/stat” 파일을 통해서 Cpu 사용률을 확인합니다.

  






[그림 9] 마이닝 풀 주소


마이닝 풀 주소를 받기 위해서 처음 “www. scan-words.com”으로 접속을 하면 “oxothuk.mooo.com”으로 리다이렉트되고 Base64로 인코딩된 마이닝 풀 관련 정보를 받아옵니다. 이때, 마이닝 풀 관련 정보를 받지 못하면 앱 내부의 하드코딩된 값을 이용합니다.




[그림 10] 디코딩 된 정보


마이닝 풀을 사용하기 위해서 Base64로 인코딩 된 정보를 디코딩합니다. “~” 문자를 기준으로 나뉘며 서버, 포트, 사용자명, 사용자암호, 인터넷 프로토콜, 마이닝 프로토콜, 활성화키 순서로 기록되어 있습니다.




[그림 11] 마이닝 풀 접속


네트워크 마이닝풀 이용을 위해서 “oxothuk.mooo.com”과 통신합니다.



 

[그림 12] 마이닝 풀 사이트


“oxothuk.mooo.com” 사이트에 4233포트의 android-cpuminer/2.5.1 neoscrypt가 가장 많은 마이닝을 하고 있는데 이는 지속적으로 채굴이 진행되고 있음을 알 수 있습니다.


 






[그림 13] 마이닝 명령어


그림 6의 디코딩 된 여러가지 정보를 조합하여 마이닝 시작 명령어를 만들고 이를 인자로하여 네이티브 함수 startMiner를 실행합니다. 명령어는 “minered -a neoscrypt -o stratum+tcp://neoscrypt.mine.zpool.ca:4233 -O 3HzFfXkYuNeEqBcg7MmEBQ7K1jYSiua1Jm:d=0.0001 --activationkey=d1a9088e9a89 --suggestdiff=4 -t 4” 입니다.



[그림 14]  ARM 및 NEON


“Libminersdk-neondetect.so” 파일을 통해서 ARM 프로세서, NEON가능 여부를 확인합니다. NEON은 마이닝 성능을 향상시켜줍니다.


[그림 15] CPU 사용율


가상화폐를 채굴할 때 기기의 CPU사용율이 10%에서 85%로 증가합니다.


[그림 16] 로그 정보


로그정보를 활용하여 채굴행위와 관련된 서비스가 실행되는지, 몇 개의 cpu를 쓰는지, 채굴 난이도 등등의 기기가 채굴에 어떻게 사용되는지 알 수 있습니다.




결론


가상화폐의 시세급등으로 사용자의 동의없이 가상화폐를 채굴하는 앱들이 등장하고 있습니다. 실제로 가상화폐 채굴 자체는 문제가 되지 않으나, 가상화폐를 채굴함으로서 기기와 배터리의 성능저하 등으로 사용자에게 피해를 입힙니다. 특히, 위 앱은 안드로이드의 공식 마켓인 구글 플레이스토어를 통해서 배포 되었습니다.


구글 플레이스토어에서는 지속적으로 보안을 강화하고 있지만 이를 우회하여 사용자에게 피해를 끼치는 앱들이 지속적으로 등록되고 있습니다. 이러한, 악성행위로부터 자신의 기기를 보호하기 위해서는 비공식 마켓에서의 다운은 절대 금물이며, 안드로이드 백신을 설치하여 수시로 기기의 보안을 확인해야 합니다.




티스토리 방명록 작성
name password homepage