[ 만능 악성 APK 분석 후기 ]
1. 현황
최근 보이스피싱을 통한 피해가 나날이 증가하고 있다. 경찰청 통계자료에 의하면 2020년까지의 보이스피싱 범죄 피해액이 2조 1376만 원이다. 또한 최근 뉴스 기사를 통해 몸캠 피싱 피해를 확인할 수 있다. 몸캠 피싱을 통해 피해자 511명에게서 22억 원을 갈취한 범죄 사건, 자살한 소녀의 핸드폰에 몸캠 피싱을 통한 피해 흔적 등 다수 “몸캠피싱”을 통한 기사들이 보도되고 있다.
블로그를 통해 악성 APK 분석 기법과 위험성, 예방 안을 전달함으로써 피해자 발생률을 줄이는 데 도움이 되고자 글을 남긴다.
2. 분석 기법
1) 악성 앱 검증 서비스
다수 회사에서 APK 시그니처와 패턴 분석을 기반으로 악성 앱 검증을 수행한다. Virustotal 악성 앱 검증 사이트 등을 이용하여 각 회사의 악성 앱 판별 결과를 확인할 수 있다.
2) 정적 분석
APK 파일은 압축파일 형태로 Java 코드가 컴파일된 파일인 DEX, C, C++ 코드가 컴파일된 so 라이브러리, 리소스, APK 서명 관련 파일로 구성된다. 컴파일된 파일을 이용자가 알아보기 쉬운 코드로 변환해주는 디컴파일 도구들(Androguard, Apktool, jadx-gui, JEB, IDA 등)을 이용하여 로직 분석을 진행할 수 있다.
3) 동적 분석
공격자는 네트워크 프로토콜, 배포한 APK를 통해 악성 행위를 한다. Packet Capture, Proxy 도구를 이용해 공격자와 피해 자간 송수신 내용을 확인할 수 있고 Hooking, Debugging, Smali Code Inejction을 통해 실시간 앱 동작 확인, 변조가 가능하다.
-
Packet Capture
Packet Capture Tool인 tcpdump를 이용해 스마트폰에서 이용하는 OSI 2계층부터 7계층까지의 프로토콜 패킷을 확인할 수 있다. tcpdump는 libpcap 라이브러리를 통해 통신 담당 드라이버(Network Interface Controller Driver)에 Packet이 전달되기 전 복사하여 이용자에게 나타내므로 기기간 전 통신 데이터 확인이 가능하다.
Proxy Tool인 Fiddler, Burp suite를 이용해 스마트폰에서 이용되는 HTTP/HTTPS/WebSocket 프로토콜에 대한 패킷 확인이 가능하다. 윈도우 환경에서는 Windows 인터넷 API를 이용해 HTTP 프로토콜 통신내용을 캡처한다. 안드로이드에서 윈도우 환경에서 실행된 Fiddler, Burpsuite Proxy Server로 접속하도록 설정하여 Fiddler, Burpsuite HTTP Protocol Packet을 확인할 수 있다. Fiddler는 HTTP/HTTPS/WEBSocket 프로토콜만을 지원하기 때문에 TCP 통신에 대한 패킷 확인이 불가하나 Burp suite는 NoPE 플러그인 설치를 통해 TCP 통신 내용들도 확인할 수 있다.
-
Hooking
Hooking Tool인 Frida를 통해 동적으로 송수신되는 값을 확인한다. frida는 동적 라이브러리를 프로세스에 삽입한다. 후킹 대상 Application Process에 삽입된 Library는 Process 메모리 전부 접근 및 변조 가능하다
-
Debugging
Debugging Tool인 JEB, Netbeans, IDA를 통해 동적으로 전달되는 변수 값을 확인한다. 최고 권한(root)으로 디버거를 실행할 경우, ptrace 시스템콜을 이용해 so 라이브러리 디버깅이 가능하며, JPDA(Java Platform Debugger Architecture)를 통해 DVM(Dalvik Virtual Machine)에서 실행 가능한 파일(dex) 디버깅이 가능하다.
-
Smali Code Injection
Smali Code Injection을 통해 동적으로 변수 값을 확인한다. 컴파일 중 자바코드가 바이트코드(Smali)로 변환된다. 디컴파일 도구를 통해 Smali 코드로 복원한 후, 의도한 로직의 바이트코드 삽입한 후 리패키징하여 실행 로직 변조가 가능하다.
3. 분석결과
1) 악성 앱 검증 서비스 분석 결과
공격자가 전송한 LiveTalk.apk는 74개 중 8개의 회사가 악성 앱이라는 결과를 나타냈다. 이용자의 동의 없이 중요 정보를 추출하는 악성 앱으로 판단하고 있으나, 공격자가 앱 실행 도중 피해자 스마트폰에 전달되는 APK 파일은 전 회사가 정상 앱으로 판단하고 있다.
2) 정적 분석을 통한 악성 앱 분석 결과
공격자는 배포한 APK와 실행 도중 전달한 APK를 이용해 공격 대상의 정보를 추출하고 이용자의 인가 없이 스마트폰을 조종한다.
-
정보 추출 코드 목록
가. 전화번호 목록
연락처 정보 접근을 위해 설정된 권한 및 코드
<uses-permission android:name="android.permission.READ_CONTACTS"/>
나. 위치
위치 정보 접근을 위해 설정된 권한 및 코드
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
다. 문자 내용
문자 내용 접근을 위해 설정된 권한 및 코드
<uses-permission android:name="android.permission.READ_SMS"/>
라. 통화 목록
통화 기록 접근을 위해 설정된 권한 및 코드
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
마. 온라인 계정 ID
안드로이드 기기에 등록된 계정 ID, 이용 서비스 정보 접근을 위해 설정된 권한 및 코드
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
바. Wifi MAC Address, SSID
Wifi Mac Address, Wifi 명 확인을 위해 설정된 권한 및 코드
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
사. Device 정보 전달
안드로이드 기기 정보 접근을 위한 권한 및 코드
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
아. 파일
기기 내 파일 내용 읽기를 위한 권한 및 코드
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
-
악성 행위 코드 목록
가. 피해자 핸드폰 시스템 명령어 실행
공격자가 전달한 명령어 실행 후 결과 반환 코드
나. 공격자가 전달한 번호로 전화
공격자가 전달한 전화번호로 발신을 위한 권한 및 코드
<uses-permission android:name="android.permission.CALL_PHONE"/>
다. 녹음
녹음 후 저장을 위한 권한 및 코드
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
라. 사진 촬영
카메라 사진 촬영 및 저장을 위한 권한 및 코드
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>
마. 파일 삭제, 암호화 후 제거
파일 삭제, 암호화를 위한 권한 및 코드
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
파일 제거
파일 암호화 (key “scream”+”공격자가 전송한 문자열”)
바. 지속적인 앱 실행
지속적인 악성 앱 실행을 위한 재부팅 후 자동 실행 및 앱 유휴 상태에서도 지속적인 실행을 위한 권한 및 코드
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
사. 배경화면 변경
공격자가 전송한 파일을 복호화한 후 배경화면으로 설정에 필요한 권한 및 코드
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
아. 소켓 통신
소켓 통신을 이용한 명령어 실행, 개인 정보 추출을 위한 내용 송수신 코드
자. DexFile 로드
파일 다운로드 후 DexFile 로드 및 실행 코드
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3) 동적 분석을 통한 악성 앱 분석 결과
공격자는 C&C서버로부터 DEX 파일 전송 후 실행하여 개인정보를 탈취하는 것을 확인할 수 있었다.
-
공격지 정보
가. Debugging
JEB Debugging 도구를 통해 확인한 공격자의 Socket통신 Server, Port
- 통신 호스트 : 182.80.222.92
- 통신 포트 : 4455
-
송수신 데이터
가. Smali Code Injection
Smali Code Injection을 통해 로그로 출력된 송수신 Data
- 로드 클래스명 : plugens.angel.plugnes.terminal
- 소켓 통신을 통해 전달되는 APK
Smali Code Injection을 통해 파일 제거 로직 차단 후 확보한 APK 파일 목록
나. tcpdump
tcpdump를 이용해 확인한 피해자 정보 전송 Packet Data
- 디바이스 기기 : Samsung S10
- 안드로이드 OS 버전 : Pie
- 설치된 어플리케이션 UUID : 5184e43e4-6245-e64f-54sd-69ff9e76d8f
4. 결론
분석한 악성 앱은 단순히 몸캠피싱을 위한 앱이 아니라 피해자의 스마트폰에 명령어 실행, 존재하는 파일, 정보 탈취, 랜섬웨어도 가능하다. 앱이 설치되고 나면, 스마트폰은 공격자의 손에 들어가는 것과 다름없다. 사전 예방을 통해 안전하게 개인정보를 보호하자.
스마트폰에 백신을 설치하자. 백신은 악성 앱 제거, 실행을 차단해준다.
출처가 불분명한 앱은 다운로드 하지 말자. 구글플레이에 등록된 앱들은 보안 검증을 받은 앱들이다.
음란 영상 통화를 하지 말자. 매력적인 이성은 우리에게 처음부터 신체를 노출하지 않는다.
김지현, 홍순빈, 오진영, “[The W]2030 노리는 보이스피싱… ‘알바’, ‘몸캠’으로 낚는다”, <머니투데이>, 2021.05.02, [https://news.mt.co.kr/mtview.php?no=2021050209122253595](https://news.mt.co.kr/mtview.php?no=2021050209122253595)*머니투데이>
신정은, “집콕족 노린 ‘몸캠 피싱’ 주의보…피해액만 22억”,
최선을, “‘몸캠피싱’ 협박 당한 중학생, 아파트 옥상서 떨어져 숨져”, <서울신문>, 2021.05.31, [https://www.seoul.co.kr/news/newsView.php?id=20210531500185](https://www.seoul.co.kr/news/newsView.php?id=20210531500185)서울신문>