Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ChatGPT APIでセキュリティニュースを要約するシステムを作ってみた

Sh1n0g1
March 30, 2023

ChatGPT APIでセキュリティニュースを要約するシステムを作ってみた

ChatGPTのAPIを用いて、セキュリティニュースを分類し、カテゴリに合わせて情報を抽出して、サマリを作るシステムを開発しました。その試行錯誤を含む開発記録です。

Sh1n0g1

March 30, 2023
Tweet

Other Decks in Programming

Transcript

  1. ChatGPT APIでセキュリティニュー
    スを要約するシステムを作ってみた
    SH1N0G1

    View Slide

  2. 動機
     セキュリティリサーチャーはインプットをするのが大変
     ニュース、SNSなど情報過多な社会から自分が深堀しなければならないも
    のを取捨選択しなければならない
     これをChatGPTで解決しよう!!
     ニュースのサマリを作らせて、深堀の必要性の判断材料にする

    View Slide

  3. WebUIのChatGPTで試す
     Bleeping Computerの記事で試す
     北朝鮮のAPT43というグループが2018年からアメリカを攻撃しているという記事
    以下はWebサイトをま
    るまるコピペ
    https://www.bleepingcomputer.com/news/security/newly-exposed-apt43-hacking-group-targeting-us-orgs-since-2018/

    View Slide

  4. 結果
    優秀! だけどこれだけだと芸
    がないな。。

    View Slide

  5. ニュースを見る観点
     ニュースによって知りたい観点が変わる
     攻撃キャンペーン
     攻撃者(国など)、被害者(産業など)、攻撃手法、利用されたマルウェア、
    脆弱性
     インシデント
     被害者、影響範囲、被害額、攻撃のサマリ
     脆弱性
     影響を受けるソフトウェア、重大度、PoCがあるか など

    View Slide

  6. アイディア
     ChatGPTでニュース記事を分類する
     カテゴリに応じて要約する内容を変える
     結果をJSONで保存し、WebUIで読めるようにする
    一瞬でできそう!

    View Slide

  7. 計画
    ニュースサイト
    ニュースまとめ君
    Chat GPT API
    ④要約した結果をJSONで保存

    View Slide

  8. Pythonで実装
     RSSは feedparserを使って取得
     HTMLはrequestsで取得
     あとは openai ライブラリでChatGPTとやり取り

    View Slide

  9. つまずきポイント① CDN
     記事の取得ができない
    ニュースサイト
    ニュースまとめ君
    Cloud Flare
    403 エラー
    CloudFlare様ぁぁぁ

    View Slide

  10. CDN問題の解決
     Selenium + Chromeを利用
    ニュースサイト
    ニュースまとめ君
    Cloud Flare
    Seleniumはブラウザの動作を制御するためのモジュールで、ページ遷移、クリックなどの動作をPythonで行える

    View Slide

  11. つまづきポイント② トークン
     ChatGPTのトークン数超過
     GPT3.5では4096トークンまでが送信可能である
     日本語の場合は1文字1トークンらしい?
    ニュースサイト
    ニュースまとめ君
    This model's maximum
    context length is 4097
    tokens. However, you
    requested 20258 tokens
    命令 HTML
    意訳:なに2万トークンの文章送ってきてんだ!!
    おめーが使えるのは4097トークンまでじゃぼけぇ
    ( ゚∀゚)・∵. グハッ!!
    https://platform.openai.com/tokenizerでトークン数を調べられる

    View Slide

  12. つまづきポイント② トークン
    このHTMLからニュース記事を抜き取ってください。
    このニュースを分類してください
    ・脆弱性
    ・インシデント
    ・その他
    脆弱性の記事は〇〇という特徴があって…
    インシデントの特徴は〇〇という特徴があって…
    上記の特徴に当てはまらない場合は「その他」と分類して
    ください。
    分類に応じて以下のフォーマットでニュースを要約してく
    ださい。
    日本語で回答してください。
    -------------
    脆弱性のフォーマット
    (中略)
    -------------
    -------------
    インシデントのフォーマット
    (中略)
    -------------









    href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,500,7
    00,900&display=swap' rel='stylesheet preload' type='text/css'
    as="style">
    href="https://www.bleepstatic.com/js/redesign/bootstrap/css/bootstrap.
    min.css" rel="stylesheet preload" type="text/css" media="all"
    as="style">
    href="https://www.bleepstatic.com/css/redesign/main.css?v=03.08.23.1"
    rel="stylesheet preload" type="text/css" media="all" as="style">
    rel="stylesheet preload" type="text/css" media="screen"
    as="style">href="https://www.bleepstatic.com/css/redesign/news.css"
    rel="stylesheet preload" type="text/css" as="style"
    media="screen,print">
    href="https://www.bleepstatic.com/js/redesign/jquery-3.5.1.min.js"
    as="script">

    View Slide

  13. トークン超過の解決①HTMLからテキ
    ストを抽出する
    # Newly exposed APT43 hacking group targeting US orgs since
    2018
    By
    ###### Bill Toulas
    * March 28, 2023
    * 11:00 AM
    * 0
    A new North Korean hacking group has been revealed to be
    targeting government
    organizations, academics, and think tanks in the United States,
    Europe, Japan,
    and South Korea for the past five years.
    The moderately-sophisticated threat actor is tracked as
    'APT43' and is seen
    engaging in espionage and financially-motivated cybercrime
    operations that
    help fund its activities.
    Mandiant analysts who disclosed the activities of APT43 for
    the first time
    assess with high confidence that the threat actors are state-
    sponsored,

    Newly exposed APT43 hacking group targeting US orgs since
    2018


    By href="https://www.bleepingcomputer.com/author/bill-toulas/"
    class="author">itemtype="https://schema.org/Person">Bill
    Toulas


    March 28, 2023
    11:00 AM
    0



    src="https://www.bleepstatic.com/content/hl-
    images/2021/11/29/North__Korea__flag.jpg" width="1600">
    A new North Korean hacking group has been revealed to be
    targeting government organizations, academics, and think tanks in
    the United States, Europe, Japan, and South Korea for the past five
    years.
    Pythonの
    Html2textライブラリを
    利用

    View Slide

  14. トークン超過の解決②命令を分割する
    ニュースサイト
    ニュースまとめ君
    Chat GPT API
    ⑤要約した結果をJSONで保存
    一度に分類と要約を依頼するのではなく、一つずつ依頼
    ③HTMLからテ
    キストを抽出

    View Slide

  15. トークン超過の解決③命令を〇〇せよ
    調にする
     文字数を削減しつつ命令を伝える
     以下のフォーマットに従って記事から情報を抽出してください
    ⇒ 次のフォーマットに従って情報を抽出せよ
     日本語で回答してください。
    ⇒ 日本語で答えよ

    View Slide

  16. β版完成
     ローカルで動作するものができたので、公開サーバに移行。
     Cronで自動的に実行されるようにした
     以降、動作イメージ

    View Slide

  17. インシデントカテゴリのまとめ
    https://www.bleepingcomputer.com/news/security/winter-vivern-hackers-
    exploit-zimbra-flaw-to-steal-nato-emails/

    View Slide

  18. 脆弱性カテゴリのまとめ
    https://www.bleepingcomputer.com/news/security/qnap-warns-
    customers-to-patch-linux-sudo-flaw-in-nas-devices/

    View Slide

  19. その他カテゴリのまとめ
    https://www.bleepingcomputer.com/news/microsoft
    /microsoft-defender-mistakenly-tagging-urls-as-
    malicious/

    View Slide

  20. 新たに判明した問題点
     CDN 再び
     ChatGPTに対する命令(プロンプト)の問題
     想定外の分類がされてしまう
     英語で返ってくる
     トークン超過

    View Slide

  21. CDN再び
    CloudFlare様ぁぁぁ
    128.199.246.216
    (shino.club)では何
    も悪いことしたこと
    ないのに😢
    本番サーバで実行するとRSSを取るところでこける
    IPレベルでブロックされているので、違うサーバに移行して無事動作した
    長年のマルウェアシミュレータ開
    発でレピュテーションが最悪に
    なった男の末路

    View Slide

  22. 想定外の分類がされてしまう
     Windows 11でKB5023774のパッチを当てると「Red Dead
    Redemption2」というゲームが起動しなくなるニュース
    インシデントとして分類される。
    期待してたのは「その他」
    まあ、ある意味インシ
    デントではあるけど。。
    https://www.bleepingcomputer.com/news/microsoft/windows-11-kb5023774-update-
    causes-red-dead-redemption-2-launch-issues/

    View Slide

  23. 英語で返ってくる
     日本語で答えてと言っているのに英語で答えてくる
    めっさ英語だし、箇条
    書きになってないし。。

    View Slide

  24. トークン超過
     長すぎる記事はどうしてもトークンを超過してしまう
     英文だと1万1千文字あたりが限界
     記事の最後のほうは大事なことが載っていない想定でカットする予定

    View Slide

  25. 最終的なプロンプト 分類
    Categorize the news article into these categories.
    - vulnerability
    - incident
    - Other
    If the contents are about attack scenario, categorize as Incident.
    If the contents contain both Vulnerability and Incident, answer "vulnerability
    and incident".
    If the contents does not belong to neither vulnerability or incident,
    categorize as other.
    You can only answer [vulnerability|incident|vulnerability and incident|other]
    分類結果に応じてPythonで条件分岐をするため、揺らぎが少ない英語で命令することにした

    View Slide

  26. 最終的なプロンプト(インシデント)
    ニュース記事から情報を抽出して、以下のフォーマットを埋めよ。
    答えはすべて日本語で。
    --------------------
    被害状況

    事件発生日[事件が発生した日付|不明]
    被害者名[被害者|不明]
    被害サマリ[被害の一行サマリ]
    被害額[被害額]

    攻撃者

    攻撃者名[攻撃者名|不明]
    攻撃手法サマリ[攻撃手法の1行サマリ|不明]
    マルウェア[攻撃で利用されたマルウェアの名称|不明]
    脆弱性[攻撃で利用された脆弱性|不明]

    --------------------
    被害額が記事に見当たらない場合は、予想して算出せよ。
    その際は被害額の横に(予想)を付け加えること。
    被害サマリには漏洩した情報も含めること。
    攻撃者が不明な場合は国籍などの特徴を書くこと。
    マルウェアはすべてを列挙すること。
    WebでそのままレンダリングできるようにHTMLで出力
    するようにした

    View Slide

  27. 最終的なプロンプト(脆弱性)
    ニュース記事を以下のフォーマットに沿って情報を抽出せよ。
    日本語で答えよ。
    HTMLのtable、tr、th、tdを使え。
    --------------------
    脆弱性

    CVE[CVE番号|なし]
    影響を受ける製品[製品名]
    脆弱性サマリ[一行サマリ]
    重大度[高|中|低|なし|不明]
    RCE[有|無|不明]
    攻撃観測[有|無|不明]
    PoC公開[有|無|不明]

    --------------------
    PoCはProof of Conceptの略で脆弱性を突くためのコードが公開されているかを意味する。
    RCEはRemote Code Executionの意味である。
    WebでそのままレンダリングできるようにHTMLで出力
    するようにした

    View Slide

  28. 最終的なプロンプト(その他)
    以下の記事を箇条書き5点で日本語でまとめ、htmlのol、liタグを出力せよ。

    View Slide

  29. 感想と今後の展望
     やっぱりChatGPTはすごい(語彙力
     プロンプトはかなりノウハウがかなり必要で試行錯誤が求められる
     同じ命令を出しても毎回答えが変わるため、再現性がなく、複数回実行して、統計を取るのが重要
     今後の展望
     プロンプトの改良
     分類の精度を上げる
     ChatGPTにフォーマットを徹底的に順守させる
     拡張
     セキュリティサイトの追加
     RSS非対応サイトへの対応
     カテゴリの追加)
     GPT-4のAPI解放(25000トークンまで使えるようになるらしい)
     WebUIの改善
     一般公開
     プロンプトの改良記事の公開
    みんなもAPIで遊ぼうぜ

    View Slide

  30. 参考文献
    おすすめChatGPT開発記事
     IIJ様のBlog
     Azure OpenAI Serviceに触れてみる – ポンコツダ・ヴィンチ チャットボットの
    制作 https://eng-blog.iij.ad.jp/archives/18386
     ChatGPTでチャットボットを作る-OpenAI純正APIの利用 https://eng-
    blog.iij.ad.jp/archives/18518

    View Slide

  31. 最後までありがとうございました。

    View Slide