포스팅 내용

악성코드 분석 리포트

[악성코드 분석리포트] Trojan.Android.SmsSpy

Trojan.Android.SmsSpy


악성코드에 대한 난독화 기술이 날로 진화하고 있습니다. 기존 난독화 기술 중 하나인 APKProtect의 경우, Dex 파일 내부의 바이너리 변조를 통해 코드의 일부를 난독화시켜 디컴파일이 불가능하도록 만드는 수준이었습니다. 그러나 현재는 Dex 파일 자체를 암호화하고 이를 래핑(Wrapping)한 후, 다시 리패키징하여 디컴파일 자체를 무력화시키는 양상까지 보이고 있습니다.


‘Bangcle 앱 실딩 솔루션’은 APK 내부 Dex 파일을 암호화하고 이를 리패키징한 형태의 솔루션입니다. Bangcle은 모바일 앱 보호를 위한 안티 리버스 엔지니어링 및 데이터 도용 방지 목적으로 서비스되는 보안 솔루션이지만, 이 악성 앱은 Bangcle 앱 실딩 기술을 이용하여 Dex 파일 자체를 암호화한 뒤 이를 스미싱 형태로 유포합니다. 또한, 해당 악성 앱은 기존 Trojan.Android.SmsSpy 악성 앱들이 수행하고 있는 행위와 유사한 방식으로 사용자의 정보를 탈취합니다.



이번 분석 보고서에서는 Bangcle 암호화 기법의 복호화 방법에 대한 소개와 해당 앱에 대한 악성 행위를 분석하도록 하겠습니다.



악성파일 분석


Bangcle 앱 실딩 분석


분석 대상 악성 앱의 최초 엔트리포인트 코드는 MainApplication이며, 이는 메니페스트를 통하여 확인할 수 있습니다.


[그림 1] 메니페스트 (엔트리포인트 클래스 위치)


또한, 실제 악성 행위를 하는 Dex 파일은 암호화된 형태로 Assets 폴더 내에 저장되어 있으며, 최종적으론 Assets 폴더 내의 bangcle_clesses.jar 파일을 복호화하여 악성 행위를 수행하게 됩니다. 

최초 엔트리포인트인 onCreate()에서 Util.runAll()을 실행하게 되면, 해당 악성코드는 암호화된 Classes.jar 파일을 복사하여 복호화한 뒤, Dex를 메모리에 올리는 작업을 수행합니다. 아래 그림 2는 최초 엔트리포인트인 onCreate()의 코드 부분을 나타냅니다.


[그림 2] 엔트리포인트 클래스의 최초 onCreate() 코드


Util.runAll()가 호출되면 암호화된 classes.jar 파일과 JNI Library 파일 복사 및 자식 프로세스가 생성됩니다.


[그림 3] Util.runAll() 수행 코드


또한, 복호화를 위해 이 악성코드가 JNI Library를 로드하는 것을 ACall 클래스에서 확인할 수 있습니다.


[그림 4] NI Library 파일을 로드하기 위한 ACall 클래스의 Static 영역 코드


최종적으로, 복호화된 Dex 파일은 Util.runPkg()에서 MyClassLoader 클래스를 통해 수행되며, 실제 악성 행위를 수행하는 Dex는 다음과 같은 흐름으로 실행됩니다.


[그림 5] 복호화된 Dex 파일을 로드하는 코드


앞서 설명 드린 것처럼 실질적인 악성 행위를 하는 Dex 파일이 복호화되어 메모리에 올라간 것을 확인해 보았고, 이 메모리 덤프를 활용하여 복호화된 Dex 파일을 추출했습니다. 아래 그림 6은 이와 같은 과정을 도식화한 그림입니다.


[그림 6] 실제 악성 행위 Dex 파일 복호화 과정


메모리 덤프를 활용하여 덤프된 바이너리 파일을 분석하면, 아래 그림 7과 같이 Dex 파일의 Magic Number를 확인할 수 있습니다. 이를 Dex 포맷 형식으로 수정하면 실제 악성 행위를 수행하는 Dex 파일의 디컴파일이 가능하게 됩니다. 


[그림 7] 메모리 덤프를 활용한 바이너리 파일 분석


메모리 덤프를 이용하여 복호화된 Dex 파일을 디컴파일하면, 다음 그림8과 같은 기존의 Bangcle을 이용한 리패키징 Class 구조와 다른 형태를 확인할 수 있습니다. 


[그림 8] 기존 Bancle Dex 파일과 언래핑(Unwrapping)하여, 복호화한 Dex Class 구조 비교


복호화된 Dex 파일의 최초 엔트리포인트 코드는 MainActivity이며, 이는 메니페스트를 통하여 확인할 수 있습니다.


[그림 9] 메니페스트 (엔트리포인트 클래스 위치)


주로 수행하는 악성 행위에는 사용자에 대한 기기관리자 권한 요구, 사용자의 개인 정보 및 기기 정보, 사진 파일 , 통화 녹취 및 위치 정보를 탈취하는 행위가 포함됩니다. 아래 그림 10은 이와 같은 악성 행위의 흐름도를 설명하고 있습니다.



[그림 10] 악성앱의 악성행위 흐름도


최초 엔트리포인트인 onCreate()에서는 각각의 악성 행위를 위한 Service와 기기관리자 권한을 요구하는 Activity를 수행합니다.


[그림 11] 엔트리포인트 클래스의 최초 onCreate() 코드


최초 실행을 하면 각각의 Service와 Activity를 수행하게 되는데, RegDPMActivity는 해당 앱의 생존성을 높이기 위해 사용자에게 기기관리자 권한을 요구합니다.


[그림 12] 기기관리자 권한 해제 시도 시 수행되는 코드


MainActivity에서 각각의 Service가 실행 되면, 다음과 같이 탈취한 각각의 정보를 주기적으로 유출지로 전송합니다. PreodicService의 경우 사용자 개인 정보 및 기기 정보를 탈취하며, 그림 13은 탈취 정보를 유출지로 전송하는 코드입니다.


[그림 13] PreodicService의 개인 정보 탈취 및 전송 행위


TappingService는 사용자의 통화를 녹취하는 행위를 수행합니다. 해당 녹취 파일은 3gp 포맷으로 저장되며 저장된 녹취 파일은 PreodicService에서 주기적으로 유출지로 전송되게 됩니다.


[그림 14] 사용자 통화 내용 녹취를 수행하는 코드


GSPTrackingService는 기기의 GPS 정보를 탈취하며, 이를 http 프로토콜을 이용하여 실시간으로 전송합니다. 


[그림 15] 실시간 GPS 전송 행위

결론


기존 악성 앱들은 APKProtect와 같은 Dex 포맷의 바이너리 형태를 난독화하여 일부 코드를 디컴파일할 수 없는 형태로 유포되었습니다. 하지만 Bangcle과 같은 Dex 파일 자체를 암호화하여 래핑하는 기술이 발전함에 따라, 코드 분석 자체를 어렵게 하는 요인들이 증가하고 있는 추세라고 볼 수 있습니다. 그러므로 이와 같은 패킹 및 난독화 기술에 대한 동향 파악과 사전 연구를 지속해야 하며, 이를 바탕으로 향후 새로운 패킹 및 난독화 기술이 적용된 신종 악성코드에 대하여 기민하게 대응할 수 있도록 주의를 기울여야 합니다.


대응방안


알약 안드로이드에서는 이와 같이 난독화된 악성 앱들에 대하여 치료가 가능하며, 알약 안드로이드의 대응 기능은 다음의 그림과 같은 프로세스로 치료 절차가 진행됩니다.


 

[그림 16] 악성 앱 탐지 화면


위 그림 16와 같이 해당 악성 앱의 행위가 감지 되면 메인 검사 창을 구동하여 검사를 진행하며, 다음 그림 17과 같이 악성 앱의 진단명과 치료 과정을 통해 악성 앱을 제거할 수 있습니다. 계속해서 등장하는 신종 악성코드에 대비하기 위해 알약 안드로이드 DB는 항상 최신으로 유지하는 것이 안전한 방법일 것입니다.


  

[그림 17] 악성 앱 치료 진행 화면


※ 관련 내용은 알약 보안동향보고서 7월호에서도 확인하실 수 있습니다. 

  1. 2016.08.19 19:38  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 알약(Alyac) 2016.08.22 09:13 신고  수정/삭제

      안녕하세요. 알약입니다. 죄송하지만 말씀하신 내용만으로는 증상 구현이 어렵습니다. ㅠㅠ 재시도해도 같은 증상이 반복되시는 건가요? 관련 스샷이나, 해당 파일 샘플이 있으시다면, 앱 내 [문의하기] 또는 m_alyac@estsoft.com으로 보내주시길 부탁 드립니다. 저희가 확인 후 좀 더 정확한 답변을 드리도록 하겠습니다. 감사합니다.

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