상세 컨텐츠

본문 제목

[알약 악성코드 분석리포트] Trojan.Android.KRBanker

악성코드 분석 리포트

by 알약(Alyac) 2014. 6. 2. 11:33

본문

Trojan.Android.KRBanker -ALYac Division Malware Research


한국의 스마트폰 보급률은 73%에 달합니다. 이는 국민 10명중 7명이 스마트폰을 사용하고 있다는 이야기입니다. 폭발적인 스마트폰 성장세에 발맞춰, 악성앱 또한 폭발적인 증가세를 기록하고 있습니다.


악성앱 중 현재 국내에서 가장 위협적인 악성앱은 문자메시지로 유포되고 있는 스미싱(SMS + Phising의 합성어)앱입니다. 스미싱 메시지는 신뢰할 수 있는 사람이나 기업에서 보내는 메시지로 가장하고 있어, 무심코 URL을 클릭하는 등 메시지에 반응하면 금전적으로 손실을 입거나, 민감한 금융정보를 도난 당하게 됩니다.


‘Trojan.Android.KRBanker’는 사용자의 금융정보 탈취를 목적으로 하는 악성앱으로, 대표적인 스미싱앱입니다. 초기의 스미싱앱이 소액 결제를 목적으로 했다면, Trojan.Android.KRBanker는 사용자의 금융정보를 탈취하여, 금융자산을 노린다는 점이 특징입니다.



악성코드 순서도


다음 순서도는 앱이 설치되어 최초로 실행되었을 경우의 코드 흐름을 보여주고 있습니다. 각 클래스 별 역할이 나뉘어져 있으며, 에뮬레이터 등에서 실행을 회피하기 위한 코드도 존재합니다.




악성코드 상세 분석


1. APK 분석


- 파일 정보
A. 파일 이름 : korean.apk
B. MD5 : 133*****6C2D0E730FE2***
C. 패키지 명 : com.google.android.ebk.hana.PscIntheintee
D. 주요 퍼미션
  RECEIVE_SMS : SMS 수신 시 알림을 받음
  SEND_SMS : SMS를 전송 할 수 있음
  WRITE_SMS : 메시지함의 메시지 수정 가능
  READ_CONTACTS : 연락처 읽기 가능
  CALL_PHONE : 사용자의 조작 없이 앱 스스로 전화 가능
  PROCESS_OUTGOING_CALLS : 전화 발신 시 앱에서 번호 참조 및 리다이렉션 또는 종료 가능
  WRITE_CALL_LOG : 전화 기록을 수정 가능

- 유포경로
악성앱은 아래 [그림 1]과 같이 스미싱 메시지를 통하여 유포된다. 메시지의 내용은 수신자가 흥미를 느낄 수 있는 내용을 포함하며, 메시지의 말미에 악성앱 다운 경로를 심어놓은 URL을 노출하여 공격자가 만든 웹페이지에 접근하도록 유도합니다.
 

[그림 1] 스미싱 문자 메시지
 
SMS 메시지의 특성상 URL을 짧게 표시했습니다. 이로써 공격 웹페이지가 사용자에게 노출되지 않는 효과를 낼 수 있습니다. 공격자는 자신의 위치를 추적하기 어렵게 함과 동시에 유포지의 생존성을 높이기 위해 클라우드 스토리지를 적극 활용하는 추세입니다. 따라서 공격자는 악성앱의 유포를 위하여 별도의 서버를 운영하지 않아도 됩니다.


[그림 2] 악성앱 유포 경로

사용자가 공격자의 웹페이지에 도달하게 되면, 유포중인 악성앱의 설치를 시도합니다.

- 행위
해당 악성앱은 다음의 행위들을 수행합니다.
A. 기기관리자 등록
B. 연락처 수집
C. C&C 수행
D. SMS, 연락처등 정보 탈취
E. 기기 정보 탈취
F. 서버 IP 재설정
G. 아이콘 은닉
H. 발신전화 방해
I. 앱 다운로드
J. 뱅킹앱 설치
K. SMS 전파


2. 설치 및 코드 흐름
 
설치
위 [그림 1]에서 SMS에 존재하는 링크를 사용자가 클릭하면 아래 ①과 같이 브라우저로 연결되어 APK를 자동으로 내려 받습니다. 그리고 사용자는 ②와 같이 다운로드가 완료되었다는 알림을 받습니다. 이 후, 해당 메시지를 클릭하여 앱 설치를 진행합니다.


사용자가 악성앱 설치를 시작하면 ③, ④와 같은 화면을 볼 수 있습니다. 이러한 화면들은 정상적인 앱 설치 과정에서도 볼 수 있는 것으로, 아이콘과 이름만으로는 악성앱이라고 판단하기 어려운 점이 특징입니다.


⑤와 같이 앱 설치가 완료되면 사용자는 ‘열기’ 버튼으로 앱을 활성화시킵니다. 이 때 악성앱은 ⑥과 같이 관리자 권한을 활성화 시키려 시도합니다. 최근 스미싱 앱들은 모두 기기관리자 권한을 활성화 시키는 코드를 포함하며, 사용자가 스스로 관리자 권한 설정을 바꾸기 어렵도록 관리자 권한 설정 페이지에서 자신의 설정을 숨기고 있습니다. ⑦은 스마트폰의 설정 화면에서 보여지는 기기관리자 등록 목록이며, 이 목록에 악성앱이 보이지 않는 것을 확인할 수 있습니다.


악성앱 설치가 완료되면 ⑧와 같이 아이콘이 생성됩니다. 이 후, 해당 악성앱은 아이콘을 숨기는 코드를 구동시켜 ⑨와 같이 아이콘을 변경시킵니다. 변경된 아이콘을 클릭하면 설치되지 않은 앱이라는 팝업이 생성됩니다.


위의 과정들을 통하여 악성앱이 설치되며, ⑩과 같이 앱 관리에서 설치된 앱을 확인할 수 있지만 제거할 수는 없습니다.


이러한 악성앱은 모바일 백신이나 숨겨진 기기관리자 권한을 찾아서 해제해주는 툴 등을 이용하여 제거할 수 있습니다.

데이터 탈취 내역
데이터 탈취는 다음과 같이 세 부분으로 나뉘어져 수행됩니다. 

- 앱의 최초 실행 시 수행되는 코드
스마트폰 정보
  A. 스마트폰 모델
  B. 안드로이드 버전
  C. 통신사
  D. IMSI(휴대폰의 SIM에 저장된 가입자 고유 번호)
  E. IMEI(단말기 고유 일련번호)
  F. 설치된 뱅킹앱

- 서비스로 등록되어 주기적으로 수행되는 코드
스마트폰 정보
연락처

- SMS 수신 시 수행되는 코드
공격자의 명령
  A. SMS 내역
SMS 수신
  A. 스마트폰 번호
  B. SMS 내역



3. 코드 상세 분석
발신전화 방해
다음 코드는 발신 전화가 감지되면 통화 종료 및 통화 기록을 삭제하는 코드입니다.


앱 다운로드
아래 코드는 앱 실행 시 우선 실행되는 초기화 클래스에 의해 실행되며, 스마트폰에 설치된 뱅킹앱을 조사하여 해당 뱅킹앱을 대체할 수 있는 앱을 내려 받는 코드입니다.


뱅킹앱 설치
아래 내용은 스마트폰 정보를 서버로 전송 후, 앱을 내려 받는 것과 관련된 코드입니다. 이 후, 내려 받은 앱을 설치합니다.


SMS 전파
아래 코드는 공격자의 명령에 따라 동작하는 코드입니다. SMS로 명령을 받으며 사용자의 연락처에 있는 번호로 SMS 문자를 보냅니다. 해당 문자의 내용은 공격자가 서버를 통하여 스마트폰으로 전송됩니다.


연락처 수집
매니페스트 파일에 서비스로 등록된 ContactsService는 핸드폰에 저장되어 있는 연락처 정보를 얻어내어 localContacts 에 저장합니다. 이 후, 연락처에 대한 질의가 올 때마다 핸드폰에 저장되어 있는 연락처 정보를 전달하는 역할을 수행합니다.


SMS, 연락처 등 정보 탈취
사용자가 수신 받은 문자를 서버로 전송합니다. SmsService.class가 인스턴스화 되면 smsReceiver 클래스를 리시버로 등록합니다.


smsReceiver 클래스는 수신된 문자 메시지를 서버로 전송합니다. 핸드폰에서 얻을 수 있는 정보는 WebServiceUtil 클래스를 이용하여 서버로 전송되며, WebServiceUtil 클래스에서 서버로 전송하는 정보는 아래와 같습니다.

A. 공인인증서 업로드
인증서 업로드 기능은 코드만 존재하며 동작하지 않습니다. 인증서 수집 코드 또한 존재하지 않습니다.


B. 파일정보 업로드
인증서 업로드 기능과 마찬가지로 업로드 기능 코드만 존재합니다.


C. 핸드폰 정보 업로드


D. 핸드폰 녹음 정보 업로드
인증서 업로드와 마찬가지로 업로드 기능 코드만 존재하며, 동작하지 않습니다. 


E. 연락처 업로드


F. 통화 녹음 파일 업로드
통화를 녹음하는 코드가 존재하지 않으며, 업로드 기능 또한 코드만 존재합니다.


기기 정보 탈취(ClientService$7)
기기 정보 탈취는 ClientService 클래스에서 이루어지며, AppContetx에 저장된 값을 얻어와 서버로 전송합니다.


기기관리자 등록 및 활성화
기기관리자는 안드로이드 OS의 바탕이 되는 리눅스와는 무관한 권한으로, 안드로이드 OS 상에서만 다음과 같은 권한들을 요청하여 가질 수 있습니다.
 
- 스마트폰을 락 상태로 전환
- 스마트폰의 락 비밀번호 변경
- 스마트폰의 초기화
- 권한을 부여 받은 앱의 삭제 불가

다음 그림을 보면 기기관리자를 요청하는 매니페스트가 보입니다. 그러나 기기관리자 권한을 요청하기 위해 설정하는 리시버 내에 Action 항목이 없다는 것을 알 수 있습니다. 이는 안드로이드의 취약점을 이용하는 것으로, 기기관리자 권한 설정 시 스마트폰의 설정에서 기기관리자 권한을 사용하는 앱을 확인하는 것과 활성화 여부를 변경할 수 있습니다. 그러나 그림과 같이 액션없이 등록 될 경우, 기기관리자 권한은 가지고 있되 설정에서는 확인 할 수 없기 때문에 사용자가 악성앱의 기기관리자 권한을 해제할 수 없습니다.


아이콘 은닉
앱이 실행되면 메인 액티비티에서 앱의 아이콘을 숨기도록 합니다. 이렇게 되면 사용자가 해당앱을 삭제하기 어려워집니다.


C&C 수행
초기 스미싱 앱들은 C&C가 없거나, 있다고 해도 기능이 많지 않았습니다. 그러나 최근 스미싱앱들은 대부분 C&C 코드를 가지고 있습니다. 또한, 기능도 갈수록 확장되고 정교해지는 추세입니다. Korean.apk 앱도 이러한 C&C를 수행하며, SMS를 통해 명령을 전달받아 수행하고 있습니다. 다음은 SMS의 명령어입니다.

A. cmd_forward_phone_number
수신한 SMS 내용에 발신자 전화번호를 첨부해서 발신자 번호로 돌려 보냅니다.


B. cmd_get_phone_number
C&C 서버로 현재 스마트폰의 번호와 이전에 저장되어 있던 폰의 번호를 함께 전송합니다.

C. cmd_update_ip
C&C 서버 IP를 전달받은 IP로 변경한 후 설정 파일에 저장합니다. 그리고 clientservice 를 재구동합니다.
 
D. cmd_phone_intercept
발신 전화를 방해합니다. 전화를 강제로 종료하고 통화 기록을 삭제합니다.

E. cmd_sms_intercept
SMS를 저장한 후, 특정 시점에 서버로 전송합니다.

F. cmd_start_bank
뱅킹앱을 다운로드 및 재설치하는 코드를 동작시킵니다.

G. cmd_send_sms
연락처에 있는 번호로 SMS를 전송합니다. 또한, SMS수신 시 명령이 아닌 설정에 “smsIntercept”가 설정되어 있을 경우 SMS를 로컬에 저장합니다.


서버 IP 재설정
서버의 IP를 SMS로 받아 다음의 코드를 호출합니다. 새로운 서버 주소는 설정 파일에 저장 후, 앱에 적용합니다.


다음 코드는 서버에 질의하는 모든 URI를 생성하는 코드로, 주소를 일괄적으로 적용시킬 수 있도록 구성되어 있습니다.



악성코드 분석 결론

위에서 보았듯이, Trojan.Android.KRBanker 악성앱은 사용자의 개인정보 및 스마트폰 기기정보 등을 수집하고, 스마트폰에 설치되어 있는 뱅킹앱을 조사하여 정상 뱅킹앱을 가짜 뱅킹앱(악성앱)으로 사용자 모르게 변경합니다. 변경된 악성앱은 스마트폰에 저장되어 있는 공인인증서 등의 금융정보를 탈취하여 공격자의 서버로 전송하고, 이를 악용하여 사용자의 금융자산을 갈취합니다.

이러한 악성앱은 설치 후 초기 코드가 구동되는 것만으로도 대부분의 개인정보를 탈취할 수 있습니다. 이 후, 공격자의 명령에 의해 추가적인 개인정보 탈취가 일어납니다. 따라서 사용자는 앱 설치 시 각별히 주의를 기울이고, 앱의 악성 여부를 미리 인지할 수 있도록 관련 대응방안을 참고하여 예방하는 것이 무엇보다 중요합니다.


악성코드 대응방안

Troan.Android.KRBanker과 같은 악성앱의 설치를 막으려면 다음과 같은 조치를 취하여야 합니다.

1. 스미싱을 진단할 수 있는 앱 사용
2. 백신을 사용하여 주기적으로 검사
3. 다운받은 파일 설치 전 백신 검사
4. ‘알 수 없는 소스’ 옵션 비 활성화(정상 마켓을 통한 앱 설치 권장)
5. 루팅, 탈옥 등 스마트폰의 구조를 임의로 변경하지 않기



관련글 더보기

댓글 영역