0x001 스미싱 앱 분석
어느날 갑자기 문자메시지가 왔다. 뭔가해서 봤더니 스미싱 문자였다. 공짜로 악성코드를 분석할 기회가 생겨 바로 분석을 하기로 했다.
(그림1) 어느날 우연히 받은 스미싱 SMS
해당 링크에 안드로이드 User-Agent로 위조한 후 접속하면 다음과 같은 링크가 뜬다.
안드로이드 User-Agent는 넥서스 4로 위조했다.
(그림2) User-Agent를 위조한 후 접속한 피싱사이트
접속하면 다음과 같은 웹사이트가 나온다. CNC서버의 php 로직을 테스트해본 결과, 스미싱을 당한 본인의 전화번호를 입력해야한다. 수차례 다른번호를 입력해봤지만 작동하지 않았다. 아래의 패킷은 다운로드 받을 때의 패킷이다.
(그림3-폼에 맞게 전화번호를 입력함)
(그림4-패킷2)
필자의 전화번호를 입력하면 특정 주소로 리디렉션된다. 그 후 자동으로 apk파일과 조잡한 수준의 경고문이 뜬다.
(그림5-다운로드패킷)
(그림6-조잡한경고문)
Virustotal에 업로드한 후 확실히 악성행위를 하는 악성코드인지 분석하도록 하였다. 결과는 다음과 같았다.
그 후 JD-GUI와 웹사이트에 있는 자바 디컴파일러(http://www.javadecompilers.com/)를 이용하여 디컴파일했다. JD-GUI는 몇몇 메소드를 정확하게 디컴파일하지 못해서 다른 디컴파일러를 사용하였다. 결과는 만족스러웠다. 아래 설명할 소스코드들은 CFR, JADX을 사용해서 디컴파일 하였다. 해당 악성코드는 다음과같은 파일구조를 가지고있다.
(그림7-악성코드 클래스들)
MainActivity에선 앱 내에 파일 생성을 가능하게 해서 Victim 의 ID, SMS_BlockState, TEL_BlockState, 공격자 CNC 서버의 주소를 담고있는 Server_URL을 담도록 한다. doRegisterUser로 현재 Victim의 전화번호, 통신사정보를 가져와서 CNC 서버의 주소와 php의 파라미터로 대입하며 HttpUtils의 requestData2를 호출한다. 그 뒤 Victim의 전화번호를 request하고 서버로부터 JSON 형태로 얻어온 response를 리턴한다. 그런 후 백그라운드에서 악성행위를 하는 PreodicService를 수행하게끔 하며, 메인 액티비티로 관리자 권한을 얻도록하는 RegDPMActivity를 수행하게 한다. 권한을 얻고나면 액티비티는 사라지며, 백그라운드에서 작동하게 된다.
(그림8-메인액티비티)
(그림9-doRegisterUser)
(그림10-requestData2 (1))
(그림11-requestData2 (2))
그런다음 doScanNet을 호출하는데, 이 메소드에서는 서버로부터 적절한 응답을 받았다면, JSON 오브젝트를 얻어서 문자메시지, 전화관련하여 상태를 세팅하고 doScanNet을 계속해서 부른다.
(그림12-doScanNet (1))
(그림13-doScanNet (2))
이러한 작업을 백그라운드에서 작업하게 하고 표상적으로는 관리자 권한을 요구하는 것처럼 다음과같은 액티비티를 보여준다.
사용자에게 액티비티는 다음 화면으로 보여진다.
(그림14-액티비티: 권한 요청)
(그림15-그림 14의 소스코드)
권한을 만약 성공적으로 얻는다면 공격자는 onReceive라는 함수를 통해 CNC서버와 다시한번 더 통신을 수행하는 것으로 보인다. 문자메시지를 하나 더 보낸 후, Victim의 번호를 가져와 URL Encode를 수행하고 로그를 찍는다. (해당 행동또한 캡처했어야 했는데 필자가 다시 시도해보았을 땐 CNC서버가 이미 죽어있었다....)
(그림16-onReceive)
그 뒤부터 공격자는 Victim의 휴대전화로부터 전화 송수신을 캐치하거나, 연락처를 SQLite 형태로 저장한 뒤 외부 파일DB에저장하거나, SMS 문자메시지를 캐치해올 수 있게된다.
(그림17-CallStateReceiver)
(그림18-CallStateListner)
(그림19-contacts)
만약 Victim이 공격자가 유도한 사이트에 대해 정보를 입력하고 앱을 설치한다면, 공격자는 공격에 성공한 것이다. 다시말해 공격자는 Androrat과 같은 공격툴을 통하여 Victim의 모바일 디바이스에 대한 제어권을 얻을 수 있을 것이다.