こんにちは、ほたかっち です。今回はハッキングできる環境を構築していきたいと思います。
※第三者に同意や許可なく攻撃をしないでください。
今回はWSL(Windows Subsystem for Linux)を使って Kali Linux を仮想化して使っていきたいと思います。
ハッキングの練習にはTryHackMeというサイトを使います。
WSLとKali Linuxのインストール
# 管理者で実行する
wsl --install
これでWSLをインストールすることができました。
wsl.exe --install -d kali-linux
これでKali Linuxをインストールすることができました。
Kali Linuxの設定
インストールが完了するとスタートメニューにKali Linuxが追加されるので、そちらからインストールしたディストリビューションに接続します。
起動するとユーザーとパスワードを設定します。
Kali Linuxが開きました。
だけどまだハッキングはできません。
ここでパッケージをインストールします。
sudo apt install -y kali-linux-default kali-tools-top10
インストール中にいくつか確認ダイアログが出てきました。
すべてNoで最後にstandaloneを選択してください。
TryHackMeのネットワークにVPN接続する
VPNの設定ファイルをダウンロードします。
Windows側でブラウザを起動し、TryHackMeのサイトにログインして、以下のページにアクセスします。
https://tryhackme.com/manage-account/access-open-vpn
ここではOpenVPNを使っていきたいと思います。
VPNの設定ファイルを格納するために任意のディレクトリを作成します。
mkdir ~/vpn
Windows側でダウンロードした設定ファイルを Kali で作成したディレクトリに移動します。
mv /mnt/c/Users/{Windowsユーザー名}/Downloads/{TryHackMeユーザー名}.ovpn ~/vpn
ターミナルで Kali を起動したら、以下のコマンドを実行します。
sudo openvpn ~/vpn/{TryHackMeユーザー名}.ovpn
ただこれでは一度閉じてしまうと自動的に接続してくれません。
そこで次のコマンドを実行します。
お手持ちの .ovpn 設定ファイルを、必ず /etc/openvpn/client.conf という名前・場所に置きます(拡張子は .conf である必要があります)。
sudo cp /path/to/yourfile.ovpn /etc/openvpn/client.conf
sudo chmod 600 /etc/openvpn/client.conf
Kaliには openvpn@.service というsystemdテンプレートが同梱されていて、/etc/openvpn/<名前>.conf を置くだけで openvpn@<名前> として管理できます。
# 今すぐ起動
sudo systemctl start openvpn@client
# 起動時に自動起動する設定
sudo systemctl enable openvpn@client
# 有効化と起動を同時に行う場合
sudo systemctl enable --now openvpn@client
# 状態確認
sudo systemctl status openvpn@client
# ログ確認
sudo journalctl -xeu openvpn@client.service --no-pager | tail -50
enable は「次回起動時から自動的に立ち上がる設定」をするだけで、今すぐの接続開始にはなりません。今すぐ繋がりたい場合は start(または enable --now)が必要です。
サービス側にRuntimeDirectoryを設定します。tmpfilesの定義に依存せず、サービス起動ごとに必ず /run/openvpn を用意させる方法です。
sudo mkdir -p /etc/systemd/system/openvpn@client.service.d
sudo tee /etc/systemd/system/openvpn@client.service.d/override.conf > /dev/null <<'EOF'
[Service]
RuntimeDirectory=openvpn
RuntimeDirectoryMode=0710
EOF
sudo systemctl daemon-reload
sudo systemctl reset-failed openvpn@client.service
sudo systemctl restart openvpn@client.service
SSHの設定
OpenVPNを通じてssh接続しようとすると接続できませんでした。
使っているうちに知りました
428バイトの小さいセグメントは問題なく届くのに、1244バイトの少し大きいセグメントは何度再送しても永久に届かない、という現象が出ました。これは単なる一時的なパケットロスではなく、特定サイズ以上のパケットが経路上のどこかで確実に破棄されている状態です。
原因は、OpenVPNがこの1244バイトのTCPペイロード(+ヘッダで約1284バイト)を暗号化・カプセル化すると、UDPパケットとして約1330〜1360バイト程度になり、これが実際の物理インターフェース(eth0、MTU 1280)を超えてフラグメンテーションが必要になるためです。以前試したiptablesの--set-mss 1150は、実はサーバーからクライアントへの受信サイズを制限する設定であって、クライアント自身が送信するセグメントサイズには効いていませんでした(実際、クランプ後も1244バイトで送信されているのがキャプチャからも分かります)。
echo "tun-mtu 1200" | sudo tee -a /etc/openvpn/client.conf
sudo bash -c 'cat >> /etc/openvpn/client.conf << EOF
pull-filter ignore "tun-mtu"
pull-filter ignore "link-mtu"
EOF'
sudo systemctl restart openvpn@client
これで安定して接続できます。
TryHackMeの使い方
- やってみたいルームを選びます。
- Start AttackBoxをクリックします。
- するとIPアドレスなどが出てくるので始められます。
以上でハッキングを始める環境を構築することができました。
最後まで見ていただきありがとうございます。