보안자료

악성코드 분석보고서

매월 발행되는 악성코드 분석보고서를 통해 최신 보안 위협과 그에 대한 대응 방안을 확인할 수 있습니다.

악성코드분석보고서

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

2016-12-31

Trojan.Android.FakeApp


Trojan.Android.FakeApp 악성 앱은 알약 안드로이드와 카카오 사이트를 사칭하는 형태로 유포되고 있었습니다. PC에서 PC 웹 브라우져로 해당 URL을 접속할 경우 정상적인 카카오 사이트로 리다이렉트하지만, 아래 그림과 같이 공격 대상인 모바일을 타깃으로 모바일 웹 브라우져의 User-Agent가 확인된 경우에는 웹 브라우져 오류인 것처럼 사용자를 속여 해당 악성 앱 설치를 유도합니다.


[그림 1] 사용자에게 악성 앱 설치 유도를 위한 경고 창


본 악성 앱은 실행 시 앱의 아이콘을 숨기고 서비스 형태로 악의적인 행위를 수행하며, 감염된 기기의 사용자 개인정보, 기기정보들을 탈취하는 행위를 합니다. 이번 분석 보고서는 알약 안드로이드 사칭 앱에 대한 탈취 내용을 상세 분석하였습니다.

 [그림 2] 알약 안드로이드 사칭 악성 앱



악성코드 상세 분석


AndroidManifest.xml을 분석하면, 이 악성 앱은 아래 그림 3과 같은 권한을 요구합니다.


[그림 3] 악성 앱이 요구하는 권한

- 네트워크 사용 권한 (INTERNET)

- 계정 목록의 엑세스 권한 (GET_ACCOUNTS)

- 폰 상태 정보 읽기 권한 (READ_PHONE_STATE)

- Wi-Fi 네트워크 상태 정보 엑세스 권한 (ACCESS_WIFI_STATE)

- Wi-Fi 네트워크 상태 변경 권한 (CHANGE_WIFI_STATE)

- SMS 수신 권한 (RECEIVE_SMS)

- SMS 보내기 권한 (SEND_SMS)

- SMS 읽기 권한 (READ_SMS)

- SMS 쓰기 권한 (WRITE_SMS)

- 전화 수신 관련 권한 (CALL_PHONE)

- 전화 발신 관련 권한 (PROCESS_OUTGOING_CALLS)

- 오디오 녹음 관련 권한 (RECORD_AUDIO)

- 부팅 완료 시, 브로드캐스트를 받을 수 있게 하는 권한 (RECEIVE_BOOT_COMPLETED)

- 외부 저장소 사용 권한 (WRITE_EXTERNAL_STORAGE)

- 네트워크 상태 정보 엑세스 권한 (ACCESS_NETWORK_STATE)

- 태스크 정보 관련 엑세스 권한 GET_TASKS

- GPS 관련 권한 (ACCESS_FINE_LOCATION)

- GPS 관련 권한 (ACCESS_COARSE_LOCATION)

- 전원 관련 권한 (WAKE_LOCK)

- 앱 팝업 관련 권한 (SYSTEM_ALERT_WINDOW)


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


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


주로 수행하는 악성 행위는 사용자에게 기기관리자 권한을 요구하는 것이며, 사용자의 개인 정보 및 기기 정보, 통화 녹취 및 위치 정보를 탈취하는 행위를 수행합니다. 아래 그림 5는 이와 같은 악성 행위의 클래스 구조를 설명하고 있습니다.


[그림 5] 악성 앱의 악성 행위에 대한 클래스 구조


최초 엔트리포인트인 onCreate()에서 IsServiceRunning()을 실행하게 되면, 실제 악성 행위를 수행하는 클래스인 kakaotalkkeyprotect를 서비스로 수행합니다. 아래 그림 6은 최초 엔트리포인트인 onCreate()의 코드 부분을 나타냅니다.


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


kakaotalkkeyprotect 클래스에서는 서비스 시작 시, 악성 행위를 수행하기 위해 각각의 메소드를 호출합니다.


[그림 7] kakaotalkkeyprotect 클래스의 onStart() 메소드


첫 번째 GetAccountInfo() 메소드에서는 해당 기기의 사양들을 탈취하는 행위를 수행하고, 이를 로컬 저장소에 텍스트 파일 형태로 정보를 저장합니다. 해당 코드는 아래 그림 8과 같습니다.


[그림 8] 기기 사양 탈취 코드


다음으로 getUserInfo() 메소드에서는 구글 계정의 토큰 정보와 ID, 패스워드를 탈취하는 행위를 수행하며, 이를 로컬 저장소에 텍스트 파일 형태로 정보를 저장합니다.


[그림 9] 구글 계정 탈취 코드


마지막으로 updateInfo() 메소드에서는 기기 정보들을 탈취하는 행위를 수행하고, 로컬 저장소에 텍스트 파일 형태로 정보를 저장합니다.


[그림 10] 기기 정보 탈취 코드


아래 그림 11에서는 각각의 탈취된 정보들이 로컬 저장소에 아래의 파일명으로 텍스트 파일 형태로 저장되는 것을 확인할 수 있습니다.


[그림 11] 탈취 정보 저장 코드


악성 앱이 설치된 해당 로컬 저장소에서 files 디렉토리 내부의 user.txt 파일을 확인해보면, 그림 12과 같이 해당 탈취된 정보는 텍스트 파일 형태로 저장되는 것을 확인할 수 있습니다.


[그림 12] 탈취된 정보에 대한 텍스트 파일 저장 정보


저장된 파일들은 다음과 같이 C&C 서버로 전송되며, 그림 13과 같이 C&C 서버로 전송되는 주소로 전송합니다.


[그림 13] 저장된 파일들을 다음의 C&C 서버로 전송하는 코드


실제 해당 전송 내역을 분석해보면 그림 14처럼 해당 C&C서버에 POST 방식으로 통신하며, C&C 서버에 로컬 저장소에 저장된 user.txt 파일을 전송하는 것을 확인할 수 있습니다.


[그림 14] POST 방식으로 해당 정보를 전송


또한, 본 악성 앱은 해당 C&C서버에 접속하여 2차 악성 앱을 다운로드하는 행위를 수행합니다.


[그림 15] 2차 악성 앱 다운로드 행위 코드


다만, 분석 시점에서는 해당 C&C 서버에서의 추가 다운로드는 막힌 상태라 추가적인 앱 분석은 불가능했습니다.


[그림 16] 2차 악성 앱 다운로드 C&C 접속 행위 패킷 정보


이 악성 앱은 리시버를 이용하여 주기적으로 기기의 통화 목록과 SMS 정보 탈취, 그리고 통화 시 해당 통화 내용을 녹취하는 행위도 수행합니다. 아래 그림 17처럼 ErrorReportReceiver 클래스에서 통화 녹취와 SMS 정보 탈취 행위를 수행하려는 퍼미션들과 파일명들을 확인할 수 있었습니다.


[그림 17] SMS 탈취 및 통화 녹취


아래 그림 18처럼 탈취된 통화 목록은 files 디렉토리의 phonecall.txt 파일 형태로 저장되며, 저장 결과는 그림 18에서 나타난 바와 같은 형식으로 저장되는 것을 확인할 수 있습니다.


[그림 18] 통화 내역 탈취


[그림 19] 통화 내역 저장


마지막으로, 이 악성 앱은 실행 시키는 것과 동시에 앱의 생존성 확보를 위해 기기 관리자 활성화를 사용자에게 요구합니다. 


[그림 20] 기기 관리자 활성화 권한 요구 코드


[그림 21] 사용자에게 기기 관리자 활성화 요구 화면



결론


해당 악성 앱은 일반적으로 많이 사용되는 알약 안드로이드 및 카카오 사이트를 사칭하여 사용자에게 설치를 유도하는 형태로 유포되고 있었습니다. 설치와 동시에 기기의 많은 정보들이 탈취되어 C&C 서버로 전송되는 것을 확인할 수 있었습니다. 때문에 사용자들은 앱을 설치할 때 출처가 불분명한 앱은 주의를 기울이고, 되도록이면 구글 플레이 스토어를 통하여 정상적인 절차로 앱을 다운로드 받으시기를 권장 드립니다.


  


알약 안드로이드에서는 현재 해당 악성코드를 Trojan.Android.Fakeapp 탐지명으로 탐지하고 있으며, 다음 그림과 같이 치료가 가능합니다. 신종 악성코드에 대비하기 위해서는 알약 안드로이드 DB를 항상 최신으로 유지하는 것이 안전한 방법 중 하나일 것입니다.


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


웨스트코스트랩/한국산업기술시험원 /OPSWAT/국정원/ICSA/바이러스 블러틴
사이트맵 메뉴 닫기