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のトークン数超過  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でトークン数を調べられる
  2. つまづきポイント② トークン このHTMLからニュース記事を抜き取ってください。 このニュースを分類してください ・脆弱性 ・インシデント ・その他 脆弱性の記事は〇〇という特徴があって… インシデントの特徴は〇〇という特徴があって… 上記の特徴に当てはまらない場合は「その他」と分類して

    ください。 分類に応じて以下のフォーマットでニュースを要約してく ださい。 日本語で回答してください。 ------------- 脆弱性のフォーマット (中略) ------------- ------------- インシデントのフォーマット (中略) ------------- ・ ・ ・ <!doctype html> <html lang="en-us"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link 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"> <link href="https://www.bleepstatic.com/js/redesign/bootstrap/css/bootstrap. min.css" rel="stylesheet preload" type="text/css" media="all" as="style"> <link href="https://www.bleepstatic.com/css/redesign/main.css?v=03.08.23.1" rel="stylesheet preload" type="text/css" media="all" as="style"> <link href="https://www.bleepstatic.com/css/redesign/home.css" rel="stylesheet preload" type="text/css" media="screen" as="style"><link href="https://www.bleepstatic.com/css/redesign/news.css" rel="stylesheet preload" type="text/css" as="style" media="screen,print"> <link rel="preload" href="https://www.bleepstatic.com/js/redesign/jquery-3.5.1.min.js" as="script"> <link rel="preload 命令が長い HTMLだから本文も長い
  3. トークン超過の解決①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, <article><div class="article_section"> <h1>Newly exposed APT43 hacking group targeting US orgs since 2018</h1> <div class="cz-news-story-title-section"> <div class="cz-news-title-left-area"> By <h6><a rel="author" href="https://www.bleepingcomputer.com/author/bill-toulas/" class="author"><span itemprop="author" itemscope itemtype="https://schema.org/Person"><span itemprop="name">Bill Toulas</span></span></a></h6> </div> <meta itemprop="articleSection" content="Security"><div class="cz- news-title-right-area"> <ul><li class="cz-news-date">March 28, 2023</li> <li class="cz-news-time">11:00 AM</li> <li class="cz-news-comment"><a href="#comment_form">0</a></li> </ul></div> </div> <div class="articleBody"> <p style="text-align:center"><img alt="North Korea" height="900" src="https://www.bleepstatic.com/content/hl- images/2021/11/29/North__Korea__flag.jpg" width="1600"></p> <p>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.</p> Pythonの Html2textライブラリを 利用
  4. 最終的なプロンプト 分類 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で条件分岐をするため、揺らぎが少ない英語で命令することにした
  5. 最終的なプロンプト(インシデント) ニュース記事から情報を抽出して、以下のフォーマットを埋めよ。 答えはすべて日本語で。 -------------------- <h4>被害状況</h4> <table class="w3-table-all"> <tr><th style="min-width:150px">事件発生日</th><td>[事件が発生した日付|不明]</td></tr> <tr><th>被害者名</th><td>[被害者|不明]</td></tr>

    <tr><th>被害サマリ</th><td>[被害の一行サマリ]</td></tr> <tr><th>被害額</th><td>[被害額]</td></tr> </table> <h4>攻撃者</h4> <table class="w3-table-all"> <tr><th style="min-width:150px">攻撃者名</th><td>[攻撃者名|不明]</td></tr> <tr><th>攻撃手法サマリ</th><td>[攻撃手法の1行サマリ|不明]</td></tr> <tr><th>マルウェア</th><td>[攻撃で利用されたマルウェアの名称|不明]</td></tr> <tr><th>脆弱性</th><td>[攻撃で利用された脆弱性|不明]</td></tr> </table> -------------------- 被害額が記事に見当たらない場合は、予想して算出せよ。 その際は被害額の横に(予想)を付け加えること。 被害サマリには漏洩した情報も含めること。 攻撃者が不明な場合は国籍などの特徴を書くこと。 マルウェアはすべてを列挙すること。 WebでそのままレンダリングできるようにHTMLで出力 するようにした
  6. 最終的なプロンプト(脆弱性) ニュース記事を以下のフォーマットに沿って情報を抽出せよ。 日本語で答えよ。 HTMLのtable、tr、th、tdを使え。 -------------------- <h4>脆弱性</h4> <table class="w3-table-all"> <tr><th>CVE</th><td>[CVE番号|なし]</td></tr> <tr><th>影響を受ける製品</th><td>[製品名]</td></tr>

    <tr><th>脆弱性サマリ</th><td>[一行サマリ]</td></tr> <tr><th>重大度</th><td>[高|中|低|なし|不明]</td></tr> <tr><th>RCE</th><td>[有|無|不明]</td></tr> <tr><th>攻撃観測</th><td>[有|無|不明]</td></tr> <tr><th>PoC公開</th><td>[有|無|不明]</td></tr> </table> -------------------- PoCはProof of Conceptの略で脆弱性を突くためのコードが公開されているかを意味する。 RCEはRemote Code Executionの意味である。 WebでそのままレンダリングできるようにHTMLで出力 するようにした
  7. 感想と今後の展望  やっぱりChatGPTはすごい(語彙力  プロンプトはかなりノウハウがかなり必要で試行錯誤が求められる  同じ命令を出しても毎回答えが変わるため、再現性がなく、複数回実行して、統計を取るのが重要  今後の展望 

    プロンプトの改良  分類の精度を上げる  ChatGPTにフォーマットを徹底的に順守させる  拡張  セキュリティサイトの追加  RSS非対応サイトへの対応  カテゴリの追加)  GPT-4のAPI解放(25000トークンまで使えるようになるらしい)  WebUIの改善  一般公開  プロンプトの改良記事の公開 みんなもAPIで遊ぼうぜ
  8. 参考文献 おすすめ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