攻撃者心理が知りたくてペネトレーションテスト学習環境を整えた話

# はじめに
毎日ニュースサイトやSNSでセキュリティ関連の情報を目にしますが、取捨選択に悩むことが多々あります。セキュリティ製品を売る立場の方が発信している情報や、攻撃として使われることは少なさそうな非常にマニアックな脆弱性情報もありますし。

- 認証画面にランダムな文字列で攻撃をしかけるのは効率が悪いので、rockyou.txtやどこかで漏れた認証情報のリストで攻撃をしかける
- なので、守る側としては流通している辞書の内容や漏洩した認証情報のニュースには要注意

みたいな攻撃者心理に寄り添ったディフェンスができたら良いなと思っています。

# ペネトレーションテストにトライ
攻撃者心理を解説したレポートや本を読むのも良いですが、ITは模擬環境で比較的簡単に攻撃を体験できるので、手を動かして学習を進めることにしました。後々[OSCP](https://www.offensive-security.com/pwk-oscp/)もチャレンジできたら良いかなと。

[Hack The Box](https://www.hackthebox.com/)が無料利用枠のある良さげなペネトレーションテスト学習サービスのようなので、ペネトレーションテスター向けに各種ツールがプリインストールされているKali LinuxをVirtual Boxで動かして、VERY EASYから解いていきました。

# 学習環境を整えるにあたって気をつけたこと
ペネトレーションテスト用のツールをあれこれローカルに落としてきて実行するので、どこかで不正なプログラムを踏む前提で設計しました。
- ホストマシンとゲストマシンはネットワークレベルで論理的に分離し別々にFWを設定
- ゲストマシンには機微な情報を一切保存しない
    - 主要なSaaSツールにもログインしない

# 端末購入
ゲスト、ホストともにメモリ8GBはないと苦しいので、16GBのマシンを用意することからはじめました。残念ながらメインマシンはメモリスロットが1つでDDR3しか対応していない骨董品なので笑、これを機に16GB載せたマシンに買い替えました。

リソース使う処理はサーバーでやるべきだと思うので、どうしても手元の端末でスペック上げるのに抵抗あるんですよね。

# ホストマシン
## OSの選択
- Macはスペックに対してハード価格が高い
- WindowsはCLIの便利ツールが少ない
    - そもそもコマンド覚えるのも面倒...
- LinuxはCLIツールが充実してるし、プロモーション費用もりもりのOS代がかからない

ということでいつも通りLinuxを選択してUbuntu LTSをインストールしました。

デスクトップ用途のLinuxって一時期ブームになりましたが、ネイティブアプリが弱いよねってことで下火になりましたね。SaaSツールが充実した現代なら、改めて一般向けに普及する余地がある気がします。ライセンス費用・端末費用削減という視点から、エンタープライズ利用もありかと。

※以前、[Linux版のZoomでグリーンバックなしのバーチャル背景が使えないことへの回避策](https://qiita.com/___q/items/8fed45ef8137e96af19a)をポストしましたが、[Zoom5.7.6 (31792.0820)](https://support.zoom.us/hc/ja/articles/205759689-Linux-%E5%90%91%E3%81%91%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%8E%E3%83%BC%E3%83%88#:~:text=%E3%82%B0%E3%83%AA%E3%83%BC%E3%83%B3%E3%83%90%E3%83%83%E3%82%AF%E3%81%AA%E3%81%97%E3%81%A7%E3%81%AE%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E8%83%8C%E6%99%AF%E7%94%BB%E5%83%8F%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%20%2D%20Linux)で無事にサポートされたようです！

## Iptablesの設定
```text:Host Machine Iptablesルール抜粋
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
```
v4,v6ともに基本はオールDROPでOUTPUTだけ必要なものを個別に開けるようにしました。細かいルールは割愛。

## VirtualBoxのインストール
久しぶりにインストールして3つはまりました。
1. Secure Bootが有効なマシンへのインストール
[こちら](https://freefielder.jp/blog/2019/09/secure-boot-ubuntu-vbox.html)を参考に新しいMOKを登録
2. VT-xエラー
[こちら](https://www.shangtian.tokyo/entry/2018/08/07/103736)を参考にBIOSでCPU仮想化を有効化
3. USB機器の対応
[公式ドキュメント](https://www.virtualbox.org/manual/ch02.html#install-linux-vboxusers:~:text=VM%20VirtualBox%E2%80%9D.-,2.4.2.%C2%A0The%20vboxuser%20Group,-The%20installer%20creates)にしたがってvboxuserにホストOSのユーザーを追加

# ゲストマシン
## OSの選択
ペネトレーションテストをやるなら各種ツールがプリインストールされてる[Kali Linux](https://www.kali.org/)一択かなと。

## OSインストール
ISOからインストールするのは時間がかかって面倒なので[公式が配布しているVirtualBox用のイメージ](https://www.kali.org/get-kali/#kali-virtual-machines)をデプロイしました。
- user / pass が kali / kali という非常に脆弱な設定なので変更
- keyboardがUSレイアウトなのでJapaneseに変更
- timezoneがUS/EasternなのでAsia/Tokyoに変更
    - レポート書いたりログ調査するのに時刻が手元とずれてると面倒なので

## Iptablesの設定
```text:Guest Machine Iptablesルール抜粋
# 基本設定
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# INPUTの必要なものを許可
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
```

調査系ツールを使うのにOUTPUTでいちいちポートを開けるのは面倒なので、ガバッと開けてます。

## VirtualBoxのアダプター
ホストのIptablesには影響されず、ゲストはOUTPUTを開けておきたいので[Bridged](https://qiita.com/feifo/items/0fde474005589afcff68#bridged)をあてました。

# 終わりに
パズル感覚で気長にマシン攻略しつつ「攻撃者だったらこういうのはおいしいと思うから、こうやって守ろう」という感覚を養っていきたいと思います。

# 参考サイト
[OSCP](https://www.offensive-security.com/pwk-oscp/)
[Hack The Box](https://www.hackthebox.com/)
[Kali Linux](https://www.kali.org/)
[Oracle VM VirtualBox](https://www.virtualbox.org/)
[Secure BootなUbuntu 18.04にVirtualBox 6.0をインストール。もうそんなに難しくない。](https://freefielder.jp/blog/2019/09/secure-boot-ubuntu-vbox.html)。
[VirtualBoxでエラー　VT-x is disabled in the BIOS for all CPU modes](https://www.shangtian.tokyo/entry/2018/08/07/103736)
[VirtualBoxのネットワーク設定を絵で説明する](https://qiita.com/feifo/items/0fde474005589afcff68)