脆弱性調査にBing AI Chatを活用してみた

# **概要**

- システムで使用しているDockerイメージで検出された脆弱性に関する内容の理解と対応検討のために生成AI(Bing AI Chat)を活用してみた

# 背景

- 検出された脆弱性について調査する際に、脆弱性について理解をしたり、対策を検討するために複数のサイトを見る、大体英語の場合が多いので翻訳する、出典を確認しつつ整理する…といったことを毎回しているが、これまんま生成AIでできるんじゃないか？と思いつく。
- ちょっと前にBingでGPT-4が使えるという記事([えっ、まだChatGPT使ってんの？ Bingは無料でGPT-4使えますよ！ #AI - Qiita](https://qiita.com/takao-takass/items/16a7052a4a0e857b7c90))も見ていたので、脆弱性について調べるだけならシステム上の情報漏洩も存在しないし、ということで気軽に試してみた。

## 脆弱性検出～対応の大まかな流れ

大体以下のような流れで脆弱性検出～対応までを行っている。このうち2の調査に関して生成AI(Bing AI Chat)を使用してみた。

1. システム内で使用しているDockerイメージに脆弱性があるかをチェックする
2. 検出された脆弱性について脆弱性データベースなどで調査する
    - どのような脆弱性か
    - 何のパッケージに含まれた脆弱性か
    - 脆弱性に対応するバージョンは存在するか
3. 調査した情報とシステムの実態を突き合わせて対応を検討する
    - 脆弱性によるシステム上のリスクは存在するか
        - 無視できるリスクかどうか
    - 脆弱性に対応することによる動作への影響や修正にかかる工数と対応しないリスクのどちらが大きいか。
        - リスクが許容できる範囲なら対応しないも一つの手
        - もちろん重大度、緊急度が高いリスクならどれだけ大変でもやらなくてはいけない

## Bing AI Chatの特徴

今回使用したBing AI Chatの特徴とメリットはだいたい以下の通り

- 特徴
    - 無料で利用可能
    - microsoft edgeからチャット形式で利用できる
        - 一日の回答回数制限、一回のトピックでの会話数制限あり。
            - Microsoftアカウントに未ログイン…1トピックごとに会話は10まで
            - Microsoftアカウントでログイン中…1トピックごとに会話は30まで
    - 現在はgoogle chromeやFirefoxでも使用できる(制限あり)
    - 言語モデルはGPT-4
        - ただし学習データや処理機能がChatGPTと異なりマイクロソフト独自のものになっている…らしい
            - 違いの参考：[https://ja.wikipedia.org/wiki/Bing_AI_Chat Opens in new window or tab](https://ja.wikipedia.org/wiki/Bing_AI_Chat)
- メリット
    - 脆弱性に関する最新の情報を検索できる
    - 返答内容の出典が記載されるので、自身でも確認できる
    - GPT-4を使用しており最新の機能が使える

## プロンプトについて

対応性の検討に必要な情報をまず考え、その後にそれを答えてくれそうなプロンプトをいくつか考えてみた。なおプロンプトについては雰囲気で作成してとりあえず使ってみた代物なので、もっと良い書き方はあると思われる。

- 対応性の検討に知りたい情報
    - 必要と思われる情報。大体この辺があればシステムの実態と突き合わせることができそう。
        - 脆弱性についての概要
        - 脆弱性が存在するライブラリ(パッケージ)はどのようなものか
        - どのような悪用の仕方があるか
        - どのような影響があるか(CVSS v3スコアも併せて)
        - 具体的な対応策(アップデートなど)はあるか
- 実際に使用したプロンプト
    - あなたはセキュリティの専門家です。以下このトピック中は専門家として回答してください。”CVE-XXX”の脆弱性が“パッケージ名”に存在しています。脆弱性の要約と対策を教えてください。
    - “パッケージ名”とはなんですか？
    - 具体的にはどのようにこの脆弱性を悪用することができますか？もしくはexploitは存在しますか？
    - “CVE-XXX”について”CVSS v3”の表で教えてください。また各指標の説明も併せてしてください
    - “XXX”に現在パッケージ”YYY”がインストールされています。このとき脆弱性”CVE-XXX”に対策するためにはどうすればいいですか？

## 実際に使用してみた結果

- 会話のスタイルは”より厳密に”を使用
- 実際のチャット画面
![bing_chat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247825/278243c9-a15d-332c-de94-4af79b92958f.png)



- プロンプトと回答例は以下の通り
![example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247825/0ff24ad5-633a-a1a3-a054-582acfaa32a8.png)


# **使用した感想など**

- 複数サイトの検索、要約の作成をまとめてやってくれるので、情報の収集、整理には非常に活用できる。出典元も記載されるため自分でも確認可能。そのため、脆弱性に関して検索で得られる情報は基本これでいい気がする。
    - ただし以下のような問題点は存在
        - 応答が遅いこともある
        - なぜか同じ聞き方をしているのに応答が変わることがある
            - 例：CVSS v3の表の記載内容…あるCVEではベーススコアだけが載せられ、別のCVEでは詳細な評価項目の記載がある
        - 出典があるからといって回答が正しいとは限らないので確認は必ず必要
            - 聞き方によっては違う脆弱性の内容を引っ張ってきたりした
- システム内において該当の脆弱性がどの程度危険か、対応が必要があるか、などはシステムに対する理解が必要だが、ここも生成AIに読み込ませれば対応はしてくれるかもしれない(ただし機密情報の取り扱いには注意が必要)

## まとめ

- 脆弱性の対応を検討する際には、”脆弱性とその脆弱性が存在するパッケージ”に対する知識と、”該当のライブラリが使用されているシステム”に関する理解が必要。少なくとも前者に関しては生成AIで大体カバーできそうなことがわかった。
- 後者に関しても内部で生成AI構築してうまいこと読み込ませれば、前者と合わせてある程度勝手に脆弱性対応の検討を行うことができるようになるのではないだろうかと思ったりする

## その他

- 別の生成AIでも同様のことができるか試してみた結果
- Google Bard
    - 特徴
        - Google独自のLLM(PaLM 2)を使用している
        - とにかく応答が早い
        - 会話数に制限がない
        - googleアカウントへのログインが必要
        - まだ試験運用中
    - 使用結果
        - 出典が記載されない →　正確性の確認ができない
        - 試しに何個かCVEを確認してみたら明らかに違うのを引っ張ってきた
        - なぜか答えられない回答があったりする
            - この辺りは聞き方を変えればうまくいくかもしれない
    - 結論
        - 現状はまだ使用するには早そうかも