機械学習を利用して、Webサイトが抱えるクロスサイトスクリプティング(XSS)の脆弱性を自動検出する技術が登場した。Webサイト側でXSSへの対策を施していても、それをかいくぐって攻撃するパターンまで見つけてくれる。2017年9月上旬に開催されたイベント「PyCon JP 2017 in Tokyo」で、三井物産セキュアディレクションの高江洲勲(たかえすいさお)セキュリティエンジニアが発表した。

発表を行う高江洲勲氏
発表を行う高江洲勲氏
[画像のクリックで拡大表示]

 高江洲氏は趣味で機械学習を勉強しており、せっかくだから本業のセキュリティに生かせないかと考えた。背景にはセキュリティ技術者の圧倒的な人材不足がある。機械で脆弱性を検出できるようになれば、これまでセキュリティエンジニアの職人技に大きく依存していたセキュリティ診断を自動化できる。

 最初からすべての脆弱性を検出できるようにするのは大変なので、とりあえずXSSに対象を絞ることにした。XSSは、悪意のあるユーザーがWebサイトに送るデータにスクリプトを埋め込むことで、そのスクリプトが実行されてしまう脆弱性。こうしたXSSの脆弱性を自動的に発見してくれる「SAIVS」(Spider Artificial Intelligence Vulnerability Scanner)というシステムを開発した。現在はベータ版だという。

 SAIVSは「Webサイトのクローリング」と「脆弱性の検出」の二つの能力を持つ。必要に応じてログインなどを自動的に行ってWebサイトをクローリングし、それぞれのWebページに脆弱性がないかどうかを検査する。

 検出できるXSSの脆弱性は、ユーザーが入力したデータをそのまま表示するような単純なものだけではない。Webサイトが、「<」や「>」などの文字を他の文字に置き換えたりscriptタグを無効化したりするような防御機構を備えていても、それをかいくぐってXSSを可能にする攻撃パターンを自動的に見つけてくれる。

 例えば、scriptタグが無効化されている場合は、scriptタグを使わずにスクリプトを埋め込める「input要素のonmouseout属性」などを悪用した攻撃が可能だ。従来は、こうした「防御機構をかいくぐる攻撃パターン」を認識するにはセキュリティエンジニアのノウハウが必要だった。SAIVSでは、こうした攻撃パターンであっても自動的に見つけてくれる。

機械に文法を学習させる

 そのためには、まずSAIVSがHTMLやJavaScriptの文法を理解する必要がある。そこで、「LSTM」(Long-Short Term Memory)という機械学習の手法を使って文法を学習させた。LSTMは動画や音声といった時系列データの学習に適したアルゴリズム。文字の流れを時間とみなすと、文章やプログラムも時系列データとして扱える。