Webセキュリティ脆弱性診断機能をRAGで精度向上させてみた
目次[非表示]
はじめに
こんにちは。株式会社divxのエンジニア、関口です。
ChatGPTやMicrosoft Copilotの生成AIやノーコードの台頭の恩恵を受けることで、これまで以上にWebアプリケーション開発の学習コストや開発の手間をおさえながら開発ができる時代になっています。
一方で、開発が手軽になるほど、セキュリティ対策がおろそかになっていたり、どのような対策を講じるべきか分からないと悩む方も多いのではないでしょうか。
Webアプリケーション開発では、個人情報などの機密情報を扱うケースが多く、セキュリティ対策が不十分だと大きな被害につながる可能性があります。本記事では、以下の内容について解説します。
- Webアプリケーション開発にセキュリティ対策が必要な理由
- RAG(Retrieval-Augmented Generation)を活用してWebセキュリティ脆弱性診断の検出精度を向上させた事例
RAGの具体的な活用方法に興味がある方は、ぜひご一読ください。
Webアプリケーション開発にセキュリティ対策が必要な理由
国立研究開発法人情報通信研究機構(NICT)の調査によると、サイバー攻撃の数はこの10年で約100倍に増加しています。
【参考URL:https://www.nict.go.jp/press/2024/02/13-1.html】
サイバー攻撃の年間総観測パケット数は年々増加しており、2018年には約2,121億に達しました。これは、2017年の約1,504億から1.4倍以上の増加にあたります。また、2008年の22.9億と比較すると、この10年間で約100倍に拡大しています。
近年、サイバー攻撃の主な標的はWebサーバやWebアプリケーションの脆弱性となっています。特に、Webサイト上で動作するWebアプリケーションの脆弱性を狙った攻撃は、通常のファイアウォールだけでは防ぐことが困難です。こうした攻撃には、以下のような手法があります。
サイバー攻撃の種類 |
内容 |
サイトの改ざん |
Webアプリケーションが不正アクセスにより改ざんされると、ユーザーの個人情報や機密データが漏洩するリスクがあります。例えば、攻撃者が不正なスクリプトを仕込むことで、ユーザーがログイン時に入力する認証情報やパスワードが攻撃者に送信される恐れもあります。 |
マルウェア感染 |
悪意のあるソフトがシステムに入り込み、データを破壊したり盗んだりします。例えば、企業の内部管理システムを提供するWebアプリケーションがランサムウェアに感染した場合、重要な業務データが暗号化され、復旧のために身代金を要求される可能性があります。 |
DoS攻撃・DDoS攻撃 |
攻撃サイトに大量のアクセスが集中し、一時的に利用できなくなります。これにより、復旧にかかる時間とコストが大幅に増加する可能性があります。 |
必要なセキュリティ対策
具体的にどのような対策が望ましいのでしょうか。以下のセキュリティ対策をすることで、より安全で安心なWebサイトの運用につながります。
セキュリティ診断の種類 |
内容 |
---|---|
脆弱性診断 |
ファイアウォールやIPS(侵入検知システム)などのネットワークデバイスや、アプリケーション層の脆弱性を検査するサービスです。例えば既知の脆弱性に対する対処法を提供したり、リスクの度合いに応じて対処の優先順位を提示したりします。 |
改ざん検知 |
マルウェアや詐欺サイトの埋め込みなど、万が一Webサイトが改ざんされた場合にすぐさま検知するサービスです。不正が検知された際は、自動的にメンテナンス画面に切り替わるような機能をそなえたものもあります。 |
WAF(Web Application Firewall) |
Webサイト上のアプリケーションに特化したファイアウォールです。アプリケーションへの通信をリアルタイムに解析・検査し、設定に基づいて不正な通信・攻撃を通さずに、通常のファイアウォールでは対処できないような、アプリケーションの脆弱性を狙った攻撃に対して有効な防御壁です。 |
AIを活用したWebセキュリティ脆弱性診断機能の活用事例
では、ここで一つ事例を紹介したいと思います。社内で工数管理のシステムを内製化しているのですが、セキュリティを担保する取り組みの一つとしてAIを活用したWebセキュリティ脆弱性診断機能 (AIコードレビュー)を利用してます。
開発チームはアジャイル型の体制を採用しており、柔軟性を持ってプロジェクトを進められるよう取り組んでいます。アジャイル開発ではアップデートの頻度が多い為、人手によるセキュリティ診断ではそれに伴うコストが増加してしまいますし、スピード感が出ません。これに対し、AIを活用した脆弱性診断機能を利用すれば、小規模な改修のたびに人手を挟むことなく、迅速に診断を完了させられるという利点があります。
この機能ではソースコード一式をスキャンし、脆弱性のあるコードを検知することができます。検出された脆弱性や改善点をレポート形式で出力したので、その診断結果の一部を紹介したいと思います。
検出した脆弱性に加え、そのリスクについても説明し、さらに検出率や診断結果の概要をサマリとしてレポートにまとめています。これにより、脆弱性の内容を把握するだけでなく、全体的な脆弱性の状況を一目で確認できるようになっています。
PythonのTyperライブラリを使い、python scan ファイル名のようなコマンドを実行することで、対象ファイルやディレクトリのコードを診断できます。診断対象のファイルやディレクトリ名を入力するだけで、脆弱性診断できる手軽さを可能にしました。
さらに、対象ファイルやディレクトリのコード診断時に、プログレスバーを表示する機能を追加しました。これにより、診断対象のファイル数をリアルタイムで把握しつつ、診断にかかる時間の計測も可能になりました。
開発段階で脆弱性の検知精度で課題がみつかる
この脆弱性診断機能の開発初期段階では、LLMのみを活用し、指定したプロンプトに基づき対象のファイルやディレクトリ内のコードを診断していました。しかし、プロンプトを工夫しても、脆弱性とはあまり関係のない指摘が出力されたり、脆弱性の検出精度に課題が残っていました。
本来、脆弱性に特化した診断結果を出力させたいという意図に反して、以下のようなパフォーマンスの最適化に関する結果が出力されるようなこともありました。
セキュリティ脆弱性診断の検出精度をRAGで向上させてみた
脆弱性の検出精度を評価するため、目視で判断が容易な脆弱性を含むコードサンプルを集めた既存のリポジトリを活用しました。
検証の過程では、正確性を向上させる目的でパラメータやプロンプトの調整を試みましたが、脆弱性の検出精度の向上は期待したほど達成できませんでした。そこで、RAGを活用し、脆弱性に特化したチューニングを行うことを検討しました。脆弱性に特化した情報を参照し、精度向上を図りました。
以下は、具体的なシステム処理の流れを図示したものです。
- ユーザーの質問を元に関連性のあるデータをベクトルストアから検索し取得
- 質問と取得したデータを埋め込んだプロンプトを作成
- LLMに問い合わせ
- 脆弱性診断結果を出力
このプロセスにより、脆弱性診断の精度を向上させることが可能となりました。
脆弱性に関係のない情報を排除し、脆弱性に特化した診断結果を出力することができました。
たとえばはXSSの情報をベクトルデータベースに登録したところ、XSSに関連する情報を参照していることが確認できました。
上記の脆弱性診断結果で指摘されているように、XSS攻撃対策としてhtml_safeメソッドを使用する場合には注意が必要です。そのため、開発の初期段階からhtml_safeメソッドの使用に注意しつつ、XSS対策を意識した開発を進めることができました。
また、社内限定のシステムであっても、悪意のある入力を防ぐために、フォーム入力に対して長さや内容の制約を設けるバリデーションが必要です。たとえば、MySQLではRailsのstring型がデフォルトで255文字の制限があるため、この制限を超える入力があると、文字数オーバーにより入力した値が保存できず、エラーが発生する可能性があります。
今回、文字数制限に関するバリデーションを追加することで、データベースに値が保存されないといった問題を未然に防ぐことができました!
【参考URL:https://github.com/yeswehack/vulnerable-code-snippets?tab=readme-ov-file#programming-languages 】
AIを活用した脆弱性診断に興味を持った方へ
ChatGPTやMicrosoft Copilotの生成AIやノーコードの台頭の恩恵を受けることで、Webアプリケーション開発がしやすい時代になりましたが、セキュリティ対策がおろそかになっているままで構築・運用してしまうと、個人情報などの機密情報をはじめとする重要な情報の漏えいや不正利用の引き金となり、大きな被害につながる恐れがあります。
まずは構築時から対策をしっかりと行い、セキュリティを意識した開発を継続的に行うことが重要です。
今回ご紹介したAIを活用したソースコードの脆弱性診断を活用することで、手軽にかつコストを抑えながらWebアプリケーションのセキュリティを強化することが可能です。
DIVXのWebアプリケーションのセキュリティ診断やAIコードレビューにご関心のある方は、ぜひこちらのURLからお気軽にお問い合わせください!
【 お問い合わせ先:https://www.divx.co.jp/lp/security 】
参考文献
NICT-情報通信研究機構 NICTER観測レポート2023の公開|2024年|NICT-情報通信研究機構
安全なウェブサイトの作り方 - 1.1 SQLインジェクション
Webサイトのセキュリティ対策が必要な理由
RAG の精度を向上させる Advanced RAG on AWS の道標