최근 스미싱 악성코드가 범람하고 있다. 그래서 간단히 정리해보았다. 작성할 애플리케이션하고 더 쓸 내용이 있었는데 중간에 일에 치여서 까먹어 생략하고... 그 외 실력 안되는건 어쩔 수 없는 것이기에 후일을 기약하면서 넘어가고...  현재 쓴 내용에서 일부에서 아마 내가 뭔가를 잘못 알고 있거나, 틀렸을 내용이 있을 가능성이 높으니 참조.



1. 휴대폰 정보 탈취(소액 결제) - Ahnlab : Android-Trojan/SMSstealer  ESET : Android/SMForw.K 형태





아마 요 악성앱이 다수를 차지할 것으로 보인다. 해당 모바일 악성코드의 경우 CJ대한통운 및 한진택배를 사칭해서 유포하고 있다. 참고로 한진택배를 사칭하는 스미싱 사이트의 경우 원래 다른 악성코드가 유포가 되었으나 최근에는 이와 같은 형태의 악성코드가 유포하고 있다.



getPackageManager().setComponentEnabledSetting(getComponentName(), 2, 1);


setComponentEnabledSetting에서 두번째 인자값 2는 아래의 의미를 가진다.


int COMPONENT_ENABLED_STATE_DISABLED


Flag for setApplicationEnabledSetting(String, int, int) and setComponentEnabledSetting(ComponentName, int, int): This component or application has been explicitly disabled, regardless of what it has specified in its manifest.


그리고 세번째 1은 아래의 의미를 가진다. DONT_KILL_APP


Flag parameter for setComponentEnabledSetting(android.content.ComponentName, int, int) to indicate that you don't want to kill the app containing the component. Be careful when you set this since changing component states can make the containing application's behavior unpredictable.


간단히 적자면 설치한 앱 아이콘을 숨긴다.


그리고 getSharedPreferenes을 이용해 "pref'라는 이름의 설정값(좀 어색한데)을 불러온다. 참고로 이 기능은 안드로이드 애플리케이션에서 설정 값(자동 로그인, 푸쉬 알림 기능 등...)을 저장할 때 유용하게 사용한다.


불러온 뒤에 Int형으로 ID에 0을, SMS_BlockState, TEL_BlockState에 false, Server_URl에는 HttpUtils.URL(이런 형태는 주로 static) 값을 세팅한다.





doRegisterUser는 휴대폰 번호와 통신 사업망 정보를 AsyncTask(클래스 내에서 백그라운드 작업용 클래스로 쓰임)을 이용해 C&C로 전송한다. 뭐 자바 컴파일러에서는 execute를 통해 백그라운드 클래스 내부에서 실행되는 requestData2 메소드가 깨져서 나오기에 그 이상은 생략. 그리고 PreodicService.class를 서비스로 실행하는데 진짜 중요한 메소드(doScanNet)이 깨져서 나오기에 이 또한 생략한다.



뭐 이건 RegDPMActivity.class 부분인데 선동과 날조로 사용자에게 승부를 걸어서 기기관리자 권한을 얻으려는 사악한 음모를 보여준다.




뭐 짤린 내용을 퍼즐 맞춰보면 아래와 같이 /data/data/plxfgrb.ckdeggr.view/ 폴더에 contacts.db라는 파일을 생성하고,  contats 테이블을 하나 만들고 Insert를 통해 수집한 정보를 삽입하고 C&C로 전송하는 동작이 깔끔하게 보였으면 좋겠는데 깨져서 나오니 여기까지만 작성한다.  참고로 /data/data/는 권한이 있어야 접근 가능하다.



 String str = "CREATE TABLE IF NOT EXISTS " + this.mTableName + "(" + "cnt_id integer PRIMARY KEY," + "cnt_name text," + "cnt_phone text," + "cnt_mail text," + "cnt_block INTEGER);";




Field Name

 cnt_id

cnt_name 

cnt_phone

cnt_mail 

 cnt_block

 Data Type

 integer

 text(String)

 text(String)

 text(String)

 Integer




2. (난독화 기법 이용인데 1번과 기능 동일) ESET-NOD32 a variant of Android/Packed.TencentProtect.B potentially unsafe



이건 좀 짜증나는 케이스인데 StubCode에서 일종의 복호화를 진행한 뒤 악성앱으로 넘어가는 구조로 보여지는데 1번과 동일하다. 자세히 보고 싶은데 내공이 없어서 이건 생략한다.



아마 요런 식인것 같다.


http://tech.meituan.com/mt-android-auto-split-dex.html




3. 금융 정보 탈취형 : 최근 국내 웹 사이트 해킹을 통해 스미싱 악성코드가 유포 중이다. 우선 먼저 확인된 도메인은 extrative.com이다. 해당 사이트의 경우 아래와 같이 118.168.98.199으로 연결하는 스크립트가 삽입이 되어져 있다.




그리고 두번째로 확인된 사이트는 winbiz.co.kr이다. 2016년 7월 29일 밤 늦게 시작되어 대량으로 유포 중으로 보인다.(오전 2시경 스크립트 삭제) 아무튼 이전과 동일한 방법으로 상단에 스크립트를 삽입하였고, 가짜 CJ대한통운 사이트로 연결하여 악성앱을 다운받도록 유도한다. 






허접하게 살펴보자.


MainActivity의 onCreate




installReport 메소드를 통해 KEY_IS_INSTALL(isInstall)의 Boolean Type의 값을 체크한다. 만일 false인 경우 그대로 종료하고 그렇지 않으면 InstallReportAsyncTask.execute 메소드를 호출하여 백그라운드 상에서 작업을 한다.



그리고 InstallReportAsyncTask에서 http://hhh.89398383.tk/co.php으로 휴대폰 타입(KT...)과 함께 C&C로 정보를 전송하며, 정상적으로 http 연결이 이루어졌을 경우 bool 값을 true로 바꾸고, NPKI 폴더를 탐색하여 압축한 뒤 파일을 C&C로 업로드한다. 그리고 인텐트를 통해 CoreService.class 서비스를 실행한다.



AsyncTask가 종료될 시점에 onPostExecute 메소드에서 KEY_IS_INSTALL 변수 값을 조건에 맞게끔 변경한다. 그리고 다시 이 앱을 실행했을 경우 조건에 맞다면 웹뷰로 악성 사이트를 보여줄 것이다.





잠시 CoreService.class는 다음으로 미루고, MainActivity의 OnCreate 뒷부분을 잠깐 얘기하자면 activeManager() 메소드에서는 기기관리자 권한을 획득한다.(스샷은 안 찍음)


그리고 config 클래스의 SERVER_HOST 값이 존재한다면 아래의 사이트를 웹뷰를 통해 보여준다. 하지만 config.SERVER_HOST는 현재 빈 값 즉 ""으로 저장되어져 있으며, 추후 CoreService.class에서 저장할 예정이기에 처음 애플리케이션을 실행한 이들에게는 보이지 않을 것이다.















CoreService.class에서는 http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=2890464538에서 IP 값을 파싱하고, 파싱한 값을 Config_SERVER_HOST에 저장한다. 그리고 상기 웹 사이트를 웹뷰로 보여주는 인텐트를 실행한다.




그리고 LockService.class 서비스를 실행한다. 그리고 LockService에서는 onStartCommand에서 LockTask 클래스의 객체를 만들고, 그 객체를 스케줄에 등록하여 실행한다.




LockTask에서는 캘린더 값을 이용해 조건을 만족할 경우 ShowService.class를 서비스를 실행한다. 그리고 최상위 액티비티를 얻는 로직도 보이는데 이 부분은 테스트 중인 것으로 보여진다.(계속 테스트 중인듯)



그 이상은 AlertBuilder를 통해서 일종의 Alert 내지는 Dialog 창을 띄우는 것도 있던데 귀찮아서 생략. 아무튼 결론은 사용자의 번호 수집과 더불어 NPKI 폴더 내 파일 수집 및 웹뷰를 통해 악성 사이트로 연결을 유도해 금융정보 탈취를 한다는 점이다. 




'국내 악성코드 정보' 카테고리의 다른 글

VPN 제공 업체로 위장  (2) 2016.08.08
불법 선물거래 사이트  (2) 2016.08.04
최근 스미싱 악성코드 정리  (2) 2016.07.30
인터파크에 왠 랜섬웨어?  (1) 2016.07.28
Huorong  (1) 2016.07.27
인터파크 개인정보 유출  (0) 2016.07.26
Posted by Ec0nomist

댓글을 달아 주세요

  1. 비밀댓글입니다

    2016.11.18 02:43 [ ADDR : EDIT/ DEL : REPLY ]
  2. 최정

    관리자의 승인을 기다리고 있는 댓글입니다

    2017.01.06 04:49 [ ADDR : EDIT/ DEL : REPLY ]