요즘 안드로이드 봇넷에 관한 연구가 외국에서 활발히 이루어지고 있으며 이와 관련된 악성 앱 또한 많이 발견되고 있는 상황이다. 이러한 상황을 어느정도 파악해 보고자 이렇게 악성 앱 분석을 시도하게 되었다.


지금부터 분석 할 악성 앱은 리팩(RePackage) 된 악성 앱이며, 사용자의 스마트폰 정보를 프리미엄 번호로 메시지 전송을 시도하며 또 원격에 있는 C&C 서버와 통신하는 악성 앱 봇이다.


[android.dds.com-STiNiTER.apk]

Main에 해당하는 apk 파일이며 해당 파일을 압축해제 한 후 디컴파일 하여 보면 몇가지의 패키지 파일들이 나오는데 원본 앱과 비교하여 보면 com.gamebox.service 패키지가 원본 앱에 없다는 것을 확인 할 수 있다.

com.gamebox.service 패키지(이하 악성패키지)는 해당 apk 파일의 Main 클래스의 onCreate() 메소드가 호출되면서 자동으로 호출된다.


[그림 1 - 악성 패키지 호출]


OnCreate() 메소드는 액티비티가 생성되면 자동적으로 시스템이 호출하는 메소드이어서 앱이 실행되면 자동으로 실행되는 메소드라고 생각하면 된다. 결국 앱 실행과 동시에 악성 패키지가 서비스로서 실행되게 된다.


일단 악성 패키지는 아래처럼 어떠한 것들을 어떠한 경로에 복사하는 일을 수행한다.


[그림 2 - 악성 앱 복사 수행 루틴]


if문 바로 아래의 출력문을 보면 rootstate 라는 문자열이 보이는데 해당 문자열만 봐도 해당 루틴이 root 권한으로 실행 된다는 것을 알 수 있다. 바로 이 루틴 밑에는 복사한 악성 앱들을 777(rwxrwxrwx) 권한으로 변경하는 루틴이 위치한다.


[그림 3 - 권한 변경 수행 루틴]


권한 변경 도중 쓰레드를 실행하는데 이 쓰레드는 start 파일을 실행시키는 쓰레드이다.

또 맨 마지막 코드를 보면 initr 파일도 실행시키는 것을 볼 수 있다.


[그림 4 - thread1]


위 코드가 thread1 부분의 코드이며, [그림 4]에서 보듯이 start파일을 실행시키고 있다.

파일의 후반부를 가면 OnCreate() 메소드가 존재하는데 이 루틴에서는 감염 스마트폰의 정보와 보낼 번호등이 설정되고 또 복사될 악성앱이름, 경로등이 설정 된다.


[그림 5 - 여러가지 정보 설정]


스마트폰의 여러 정보들을 수집하여 xml 데이터로 만들고, 또 복사할 앱을 바이너리 모드로 열어 그 데이터를 저장하며 복사 할 위치를 지정하고 있다. 해당 앱들은 모두 resource/raw 디렉토리에 들어있다.


위 apk 파일에서 start 파일과 initr 파일을 실행 시키는 것을 볼 수 있었다. 이번에는 start 파일을 한번 살펴보자.


[start]

해당 파일은 ELF 포맷의 파일로 특별한 악성행위는 하지 않으면 log 파일을 생성/Open 하고 파일이 정상적으로 생성되었다면 Keeper라는 파일을 실행시킨다.


[그림 6 - start 파일 흐름]


이번에는 initr 파일을 살펴보자.


[initr]

해당 파일 또한 ELF 포맷의 파일이며, 여러가지의 파일들의 권한을 설정해준다. 아래는 어떤 파일을 어떤 권한으로 설정하여 주는지 목록화 한 것이다.


 - /data/googleservice.apk - 644

 - /data/unlock.apk - 644

 - /data/googlemessage.apk -644

 - /system/bin/android.info - 777

 - /system/bin/keeper - 4711

 - /system/bin/ts - 4711

 - /system/bin/sh - 4755


해당 악성앱은 앞서 말했듯이 루트권한으로 동작한다. 그러므로 keeper, ts 그리고 쉘인 sh는 루트권한으로 실행되게끔 권한이 설정된 것이다.


이번에는 start 파일에서 실행시킨 keeper 파일을 살펴보자.


[keeper]

해당 파일도 ELF 포맷의 파일이며, ts 파일의 소유자와 권한등을 설정하고 ts 파일을 실행시키는 기능을 수행한다.


[그림 7 - 권한 설정 및 실행 루틴]


[그림 7]을 보면 system() 함수를 이용해 권한 설정 및 ts 파일을 실행 하는 것을 볼 수 있다.


이번에는 keeper 파일이 실행시킨 ts 파일을 살펴보자.


[ts]

해당 파일은 ELF 포맷의 파일로 실질적인 악성 행위를 하는 앱들을 설치하고, C&C 서버와 통신하는 기능을 수행한다. 또 C&C서버와 여러가지 파일을 주고 받는다.


[그림 8 - 악성 앱 설치]


 * 참고 : 악성 앱 설치하기 전  /system/etc의 권한을 777로 변경한다.


[그림 8]은 adb 명령을 이용하여 3개의 악성 앱을 설치하는 명령어들이다.

조금만 더 문자열들을 검색해보면 HTTP 헤더 패킷들이 보인다.


[그림 9 - HTTP 헤더 패킷]


그리고 헤더 패킷 이후로 보면 통신 대상이 되는 C&C 서버 4곳의 주소가 나온다.


[그림 10 - C&C 서버 목록]


해당 C&C 서버들은 아직까지 운영되고 있는 것을 확인하였다.


[그림 11 - 운영되고 있는 C&C 서버]


C&C 서버와 주고 받는 여러가지 파일들은 아래와 같다.


 - ReportDownStatus.do

 - GetPackage.do

 - GetRequestInterval.do

 - HeartBeat.do

 - ReportPushMessageStatus.do


이번에는 ts 파일이 설치하는 악성 앱 3가지에 대해서 알아보자.


[악성 앱 3가지]

일단 googlemessage.apk 파일부터 알아보자. 이름에서도 알수 있듯이 메시지에 관련된 앱이다. 압축해제 후 디컴파일을 수행하여 원본코드를 보면 정말 간단하다.


[그림 12 - 메시지 전송 루틴]


OnCreate() 메소드가 호출되면 설정되어 있는 프리미엄 번호로 sendTextMessage() 메소드를 통해 메시지를 전송한다.


이번에는 googleservice.apk를 살펴보도록 하자. 해당 앱은 악성 패키지가 사용자에 의해 삭제되어 해당 스마트폰이 봇넷에서 빠졌을 때 봇의 기능은 하지 못하더라도 과금유발 기능은 하게끔 제작되어 있다. 또 서비스 이름이 사용자에게 친숙한 GoogleUpdateService이어서 사용자가 삭제하지 않을 확률이 높아 악성 앱이 지워지지 않을 확률이 높다.


[그림 13 - run() 메소드 루틴]


[그림 14 - OnCreate() 메소드 루틴]


OnCreate() 메소드를 보면 악성 앱에 대한 루틴은 없지만 메시지 전송 설정 루틴은 존재하는 것을 볼 수 있다.


마지막으로 unlock.apk 파일을 살펴보자.

해당 파일은 스마트폰의 화면잠금/절전모드를 변경하는 앱이다. 절전모드를 변경하여 감염 스마트폰의 전원을 급격히 소모하게 하려는 의도가 엿보인다.



[그림 15 - Unlock.apk]


클래스의 확장 속성을 보면 BroadcastReceiver이다. 앱에서 어떠한 이벤트가 발생하면 그것을 감지하는 속성인데 OnReceivce() 메소드를 보면 어떤 앱에서 메시지를 전달 받게 되면 화면잠금을 해제하고 새로운 절전모드를 설정한다.


 * 참고 : 새로운 절전모드로 264835462의 숫자를 사용하는데 이는 ACQUIRE_CAUSES_WAKEUP(268435456) + SCREEN_DIM_WAKE_LOCK(6)의 합이다. ACQUIRE_CAUSES_WAKEUP는 CPU를 ON 상태로 만들고 화면을 어둡게 만들며 키보드 레이아웃을 끄는 플래그이고, SCREEN_DIM_WAKE_LOCK는 어플에서 어떤 이벤트가 발생하면 화면과 키보드 레이아웃을 켜주는 플래그로 결국 BroadcastReceiver의 OnReceive() 메소드로 인해 스마트폰은 계속 화면이 켜져있는 상태가 될 것이다.


해당 악성 앱의 흐름을 살펴보면 [그림 16]과 같다.



[그림 16 - 악성 앱의 실행 흐름도]


 * 참고 : 이미지를 클릭하면 원본 이미지 크기로 보입니다.

+ Recent posts