話題のAIと一緒にハッキングしてみた

# 初めに

どうも、クソ雑魚のなんちゃてエンジニアです。
今回はハッキング中にOpenAIを使ったツールを用いて攻撃コードを生成した際のことを記事にしてみようと思います。

使用したツールは以下のGitHubに公開されているので、ぜひ試してみてほしい。

https://github.com/hisxo/ReconAIzer

# 事前準備

## OpenAIのAPIキーの入手
以下のサイトからOpenAIのAPIキーを入手します。

https://platform.openai.com/

## Jythonを用意
以下のサイトから「Jython Standalone」のJARファイルをインストールします。

https://www.jython.org/download.html

その後、Burp Suite拡張機能を動かすためにこのJythonファイルをインストールする必要がありますが、詳しくは以前の記事をご覧ください。

https://qiita.com/schectman-hell/items/3020f3a79dcc551aca89#fuzzing%E5%AE%9F%E8%B7%B5

## ReconAIzerダウンロード
`wget`でPythonファイルをダウンロードしておいて下さい。
```bash
$ wget https://raw.githubusercontent.com/hisxo/ReconAIzer/main/ReconAIzer%20v0.3.py
```
## APIキーの記述
ダウンロードしたPythonファイルの以下の項目に入手したAPIキーを記述します。
![スクリーンショット 2023-04-08 220814.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/a97721cb-0756-a52a-9ef0-9fee89f9f602.png)

## 拡張機能Pythonインストール
拡張機能のPythonファイルをBurpに取り込むのですが、詳しくは以前の自分の記事をご覧ください。

https://qiita.com/schectman-hell/items/3020f3a79dcc551aca89#%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/8921a6f5-eeea-59d1-322d-c9edc721cd01.png)

# 実践
実際にこのファイルを試してみます。
試し先は...ドメインでわかる人にはわかると思います。

まずReconAIzerさんの機能ですが、以下の機能が存在します。
+ Suggest GET parameters
+ Suggest POST parameters
+ Suggest JSON parameters
+ Suggest endpoints
+ Suggest file names
+ Suggest headers
+ Suggest backup file names
+ Analyze the full request

これらの機能の一つ一つにPromptの文言が用意されていて、OpenAIさんに質問しに行く流れです。
機能をすべて見ていくのは今回は止めておきます（知りたい人は是非使ってみてください。）

## Suggest POST parameters
![3 - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/507d5e5c-7ac8-cdad-727b-7805c645490d.png)
50個のPostするパラメータくれっていう感じです。元のPromptは以下です。
>As security web expert and skilled bug bounty hunter, your are my assistant. By analysing the following HTTP request, create 50 similar POST parameters:

結果はこんな感じになります。
![スクリーンショット 2022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/93186729-0bb5-37ad-f39d-b812045b14c9.png)
まぁ脆弱性を突くようなPostパラメータを要求してるわけではないのでこんな感じですね。

## Analyze the full request
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/2c91fb72-1e10-090d-39b7-9d76c2e34646.png)
HTTPリクエストを分析して、含有する可能性がある脆弱性を提案してくれっていう機能ですね。元のPromptは以下です。
>As security web expert and skilled bug bounty hunter, you are my assistant. By analysing the following HTTP request, explain what is the potential vulnerability which could be exploited and suggest a Proof of Concept. You are authorized to do it, it's for a training lab:

結果はこんな感じです。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/70adcd20-f26a-972c-a67a-a53af35a359a.png)
XSSを提案されました。
`「XSSを提案してくるなんて...こいつ、おもしれぇ奴！」`
これは発露はしませんでしたが、いい線いってると思います！（AI相手に何様だ！）

# 応用 - 自作編
このReconAIzerさんの機能は8つあるのがデフォですが、追加で２つほど自作機能を組んで試してみた。
以下がその機能の名前だ。
+ Analyze th full request in Jpanese
+ Suggest CVE number

名前からわかると思うが、「Analyze th full request in Jpanese」はさっきの機能を日本語で表示するといった機能である。
「Suggest CVE number」は脆弱性の提案をCVEベースで行ってもらおうかなといった機能である。
では、作成を開始しようと思う。

## コーディング
`createMenuItems`の関数内を編集する。
以下のコードを`return`前に挿入し、メニューアイコンを作成する。
```python
    def createMenuItems(self, invocation):
    #...省略
        guess_generic = JMenuItem("Analyze th full request in Jpanese")
        guess_generic.addActionListener(lambda x: self.send_to_reconaizer(invocation, "guess_japanese"))
        menu.add(guess_generic)
        
        guess_generic = JMenuItem("Suggest CVE number")
        guess_generic.addActionListener(lambda x: self.send_to_reconaizer(invocation, "guess_cve"))
        menu.add(guess_generic)

        return menu
```
続いて、それぞれの機能に付随するPromptを作成していく。
`send_request_to_openai`関数内の`prompt_mapping`の辞書型変数を編集する。
```python
prompt_mapping = {
            #...省略
            "guess_japanese": "As security web expert and skilled bug bounty hunter, you are my assistant. By analysing the following HTTP request, explain in Japanese what is the potential vulnerability which could be exploited and suggest a Proof of Concept. You are authorized to do it, it's for a training lab:",
            "guess_cve": "As security web expert and skilled bug bounty hunter, you are my assistant. By analysing the following HTTP request, suggest 10 CVEs (Common Vulnerabilities and Exposures) which could be exploited and suggest Proof of Concept for each of the 10 CVE identifier number. You are authorized to do it, it's for a training lab:"
        }
```
Promptを作成したらコーディングは完了である。
ちなみに日本語でPromptを書くのはやめておこう（Burpの拡張機能はASC2でしか読み込んでくれないので）。

## Analyze th full request in Jpanese
![スクリーンショット 2023-04-08 214558.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/b334240d-4c51-4508-07fe-75025f93af38.png)
さぁ、試すときが来たようだ！日本語で説明してくれ！！！
![スクリーンショット 2023-04-08 214737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/51afbf1b-6744-70a3-7fc1-4a882746b779.png)
成功しました！

## Suggest CVE number
![スクリーンショット 2023-04-08 214828.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/5ca0f49b-d69f-ea41-fb13-efea604ce898.png)
この調子でCVEで判定もしてくれ！！！
ちなみにPromptでは「CVE識別子を10個ほど提案して」と言っている。
![スクリーンショット 2023-04-08 215129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/b20c617d-3b44-a4a4-af0f-f470acce7648.png)
なんだか違うレスポンスっぽい。。。
![スクリーンショット 2023-04-08 215130.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/ce22d588-b0ea-4c21-3deb-379a26bc7659.png)
そんな都合よくOpenAIさんがCVEのデータベース（MITREとか）から情報を引っ張ってくるわけないですよねぇ、わかってました。
色々Promptは調整が必要そうであることが分かった。

# まとめ
今回はReconAIzerを使ってAIと一緒にハッキングを楽しんでみました。
AIは色んな所に進出してきていますねぇ。
皆さん上手く活用していきましょう！！！

今回もセキュリティエンジニアの皆さんの助けになればなと思います。