This post is also available in: English (英語)
概要
コードインジェクションは攻撃者がよく使う攻撃手法のひとつで、脆弱なアプリケーション経由で被害コンピュータに任意のコードを実行させるものです。2021年にはOpen Web Application Security Project (OWASP)がコードインジェクションをWebアプリケーションのセキュリティリスクTop 10の3位に位置づけています。
このように、コードインジェクションはエクスプロイトにしょっちゅう使われているので、ネットワークトラフィックの異常(主にURIパスやヘッダー文字列などの異常)の特定にも、パターンマッチによるシグネチャがよく使われています。ただインジェクションの形式はいろいろなうえ、単純なインジェクションであっても余計な文字列を追加するだけであっさりシグネチャベースのソリューションを回避できてしまいます。したがってシグネチャベースのソリューションだと、共通脆弱性識別子(CVE)の概念実証(PoC: Proof of Concept)コードが変われば検出できなくなることもすくなくありません。そこで本稿は、深層学習モデルを使うことで、従来型シグネチャを回避してくる攻撃への耐性を高め、対応可能な範囲 (カバレッジ) をより柔軟にする方法を見ていきます。
パロアルトネットワークスの次世代ファイアウォール(NGFW)シリーズをお使いのお客様は、Advanced Threat Preventionの侵入防止機能を含むクラウド配信型のセキュリティサービスや、WildFireを通じ、これらの種類の攻撃からの保護を受けています。
関連するUnit 42のトピック | SQL injection, command injection, deep learning |
目次
侵入防止システム(IPS)のシグネチャでは不十分な理由
ゼロデイエクスプロイト検出の事例研究
事例1: コマンドインジェクションの検出
事例2: SQLインジェクションの検出
機械学習テストの結果
結論
追加リソース
侵入防止システム(IPS)のシグネチャでは不十分な理由: 機械学習のもたらす恩恵
IPS (Intrusion Prevention System: 侵入防止システム)シグネチャは長らく実効性の高い対サイバー攻撃ソリューションでした。IPSは事前に定義したシグネチャにもとづいて既知の脅威を正確に検知でき、誤検知がほとんど発生しません。ただしIPSルールの作成には特定の脆弱性の概念実証(PoC)や技術分析が必要なので、未知の、つまりそれに関する知識が存在していないような攻撃をIPSシグネチャで検知するのは容易ではありません。たとえばリモートコード実行のエクスプロイトは脆弱なURI/パラメータと悪意のあるペイロードによる細工がされているケースが多いので、脅威を確実に検知したければ、それら両方を特定する必要があります。ところがゼロデイ攻撃の場合、その両方が不明だったり難読化されていたりするので、必要なIPSシグネチャカバレッジを確保しづらいのです。私たちの経験では脅威リサーチャーは以下のような問題によく突き当たります。
- 偽陰性(FN: False Negative、すり抜け)。亜種やゼロデイによる攻撃は毎日発生しているが、IPSの場合事前に攻撃の詳細を把握しきれないため、カバレッジが完全にはならない。
- 偽陽性(FP: False Positive、誤認)。亜種やゼロデイによる攻撃に対応するために条件を緩めた汎用ルールを作成すると、どうしても誤認のリスクが生じてしまう。
- 遅延。脆弱性の公表からセキュリティベンダーによる対策提供と顧客によるセキュリティパッチ適用までの間にタイムラグが生じる。このタイムラグが攻撃者にエンドユーザーを攻撃するスキを与えてしまう。
こうした問題はIPSシグネチャの性質上やむをえないのですが、機械学習技術でこれらの欠点を補うことはできます。私たちは機械学習モデルに実際のゼロデイと良性トラフィックとを学習をさせて、リモートコード実行やSQLインジェクションなどの一般的な攻撃に対応するようにしました。本稿で紹介する弊社の最近の研究からは、これらのモデルがゼロデイのエクスプロイト検出に非常に有効であることがわかりました。これらのモデルは従来のIPS手法と比較してより堅牢で迅速な対応が可能でした。
以下のセクションでは、これら機械学習モデルをエクスプロイト検出モジュールに組み込んだ方法、その効果、事例研究、得られた知見を共有します。
ゼロデイエクスプロイト検出の事例研究
事例1: コマンドインジェクションの検出
コマンドインジェクションは長らくネットワークセキュリティにおける主要な脅威です。コマンドインジェクションの脆弱性は、悪用が容易で、与える影響が大きいことから、とくにパッチが遅れると被害組織に甚大な損害を与えかねません。昨年は、Log4ShellやSpringShellなどのよく利用されているソフトウェアの脆弱性により、何億ものJavaベースサーバーとWebアプリケーションが危険にさらされました。一方、セキュリティベンダーは元のエクスプロイトから派生して進化しつづける攻撃パターンに対応するためのIPSシグネチャ更新に追われ、追いつ追われつのハラハラする状況が続きました。いまなお難読化された攻撃試行は続いています。
特定のパスやパラメータを含む脆弱性については、URIと疑わしいペイロードで攻撃を正確にフィルタリングできることが多いので、IPSシグネチャを使用するのがよいでしょう。ただしHTTPプロトコルの性質上、重大な脆弱性のエクスプロイトなかには柔軟に対応できるものもあります。たとえばLog4Shellの脆弱性は、あらゆる種類のユーザー入力でトリガー可能ですし、HTTPのエンコード方式は複雑なので、一部だけエンコードしたり、エンコードをミックスしたりすれば、通常の検知を回避できます。そうしたケースでは、機械学習手法でより正確に異常のあるトラフィックを特定し、過去に見た悪意のあるサンプルペイロードの知識にもとづいて、しかるべき判定が行えます。
私たちはおおよそTCN (Temporal Convolutional Networks 時系列データに対するCNN)の学術的先行研究にもとづいた最先端の深層学習技術を使い、畳み込みニューラルネットワーク(CNN)を学習させました。入力が可変長の場合、RNN (Recurrent Neural Network)やLSTM (Long Short-Term Memory)ネットワークのようなリカレントモデル構造が適することが示唆されますが、単純な畳み込みアーキテクチャの性能がリカレントモデルを凌ぐ場合も多いことが研究によって示されています。私たちのモデルは、コマンドインジェクションのエクスプロイトにおいて、一般化に適した共通パターンを学習すると同時に、誤検出を避けられるだけの十分な特異性も保ちます。以下のセクションで、コマンドインジェクションエクスプロイトの事例研究と、私たちの新たな機械学習モデルがどのようにしてそれらを正確に検出できるかを説明します。
1. Atlassian Confluenceの脆弱性 (CVE-2022-26134)
Atlassian Confluenceは企業向けのWebベースWikiツールで、チームのコラボレーションやナレッジの共有を効率化してくれます。最近のリモートコード実行の脆弱性CVE-2022-26134は、Confluenceのバージョン1.3.0-7.4.17、7.13.0-7.13.7、7.14.0-7.14.3、7.15.0-7.15.2、7.16.0-7.16.4、7.17.0-7.17.4、7.18.0-7.18.1を対象としており、この脆弱性を利用するCerberランサムウェアによる攻撃の成功を私たちは観測してきました。
この脆弱性では、悪意のあるものもふくめ、任意のコマンドをペイロードに挿入してさまざまな活動を行えます。私たちの機械学習モデルは、アプリケーションのコンテキストが完全にはわかっていなくても、良性の活動と悪性の活動を容易に区別し、さまざまなコマンドを使う攻撃をブロック可能です。
2. 未知のIoTゼロデイ攻撃
実トラフィックを処理していると、社内の脅威ハンティング リサーチ プラットフォームからアラートがあがることがあります。誤検知をフィルタリングした後に残るこの手の検知は、通常はゼロデイ攻撃の捕捉を意味します。たとえば、2022年4月29日には、図2に示すようなHTTPリクエストが確認されました。
このトラフィックの捕捉後まもなくコマンド&コントロール(C2)サーバーがオフラインとなったのでエクスプロイトやペイロードの詳細の確認がむずかしいのですが、弊社の脅威インテリジェンスからは、特定のMIPSベースのスマートデバイスを標的とする、それまで知られていなかった攻撃に起因するものとみられています。
従来のIPS技術ではこうした攻撃は見落とされかねません。この特定の脆弱なURIやパラメータはそれまでに観測されたことがないので、要求されたデータが良いものか怪しいものかの判定がむずかしいのです。この特定の事例では、デフォルト設定のIPSはアラートをあげませんでしたが、機械学習モデルが高い信頼度スコアで攻撃識別に成功しました。
3. Tenda AC18ルーターの脆弱性 (CVE-2022-31446)
Tenda AC18ルーターにはリモートコード実行の脆弱性があり、攻撃者はデバイス上で任意のコマンドを実行できます。この脆弱性の公表後まもなく、パロアルトネットワークスのリサーチャーはこの特定CVEを標的とするエクスプロイトを実地で観測しています(図3参照)。
前述のゼロデイIoT攻撃同様、従来型IPSソリューションには生来的な制約があって、こうした攻撃の検知は不得手です。ただしここでも、機械学習モデルは高い信頼度スコアでエクスプロイトを検出しています。機械学習モデルは、POSTのボディのリクエストが非常に疑わしいことを特定し、図3に示すIPアドレスとそれに相関する悪意のあるサンプルをさらに調査する必要があることを示しています。
事例研究2: SQLインジェクションの検出
SQLインジェクションも、ネットワークセキュリティでは悪名高い、対応のむずかしい脅威です。この種の攻撃では、脆弱性を悪用してSQLクエリが改ざんされ、悪意のあるコードが注入(インジェクト)されます。SQLインジェクションは、基盤データベースシステム上での情報改ざん、機密データ漏えい、不正コマンド実行を引き起こすおそれがあります。SQLインジェクションの脆弱性は深刻な影響を及ぼしかねないので、ネットワーク側での迅速検出とゼロデイエクスプロイト対策が組織の資産保護にはかかせません。
残念ながら従来型IPSシステムにはこの種のタスクへの対応がむずかしくなっています。時間的な制約があること、技術的専門知識が必要とされることがその理由です。従来型システムで、たとえばCVE-2022-0332やCVE-2022-34265を狙うエクスプロイトに対応する場合、カスタマイズしたシグネチャを適切に構成し、それらをテストして、ゼロデイSQLエクスプロイトに対応せねばなりません。さらに悪いことに、攻撃者はsqlmapなど入手の容易なハッキングツールでSQLインジェクションのエクスプロイトを生成でき、これらをIPSシグネチャでカバーするのは至難の業です。この場合、機械学習ソリューションでは、さまざまなSQLインジェクションのエクスプロイトをカバーする厳選された特徴を調べ、悪意のあるSQLインジェクションペイロードを良性トラフィックから効率よく分類できます。以下の脆弱性の事例研究は、今回開発された機械学習ソリューションの有効性と効率を実証しています。
1. Moodleの脆弱性 (CVE-2022-0332)
Moodleは3億人以上ユーザーのいる無料のオープンソース学習管理システムです。このMoodleのバージョン3.11から3.11.4は、server.phpファイルに脆弱性(CVE-2022-0332)があります。ユーザー入力のサニタイズ処理が行われておらず、UNION演算子を使うと意図しないデータの照会を許してしまいます。脆弱なバージョンのMoodleに以下のペイロードが与えられた場合、sqlite_version()関数がSQLiteエンジンのバージョンを問い合わせ、それをユーザに返します。機械学習ソリューションは、UNIONとSELECTに関連するSQLインジェクションのコードスニペットを捕捉して効率よく特徴を抽出し、CVE-2022-0332のエクスプロイトを柔軟に検出できます。
デコード後のCVE-2022-0332のPoCは図5のようになります。
2. Djangoの脆弱性 (CVE-2022-34265)
DjangoはWebサイト構築に広く使われているフレームワークで、InstagramやDisqus、Pinterestなどでも使われています。CVE-2022-34265はこのDjangoフレームワークに影響する問題で、Trunc()関数、Extract()関数のパラメータ値のチェックが適切に行われておらず、意図せぬSQL文の実行につながるおそれがあります。CVE-2022-34265のPoCを2つ、図6と図7に示します。どちらのペイロードにも、ブーリアンベースのインジェクションのサブペイロードの後、スタッククエリベースのインジェクションのサブペイロードが使われています。ペイロードが定義済みSQL文に付加されると、セミコロンで分割された最初の文はor 1=1なので常に真となります。2番目の文はプログラムを5秒スリープさせるものなので、ブラウザ側で5秒の待ち時間が発生することになります。フロントエンドの5秒の遅延はSQL文の実行に成功したことを示すもの、つまりSQLインジェクション脆弱性の存在を示すものとなります。機械学習ソリューションでは、SQLインジェクションのor 1=1文のようなパターンを効果的に検出でき、これら脆弱性のエクスプロイト防止に有効です。
3. sqlmapの生成するエクスプロイト
sqlmapはペネトレーションテスト(侵入テスト)やSQLインジェクション問題の検出・悪用に使われているオープンソースツールです。このツールにはSQLインジェクション脆弱性のエクスプロイト作業工程を自動化する機能があり、正当な目的にも使えるものの、攻撃者にも悪用される場合があります。
図8はsqlmapで生成したSQLインジェクションのPoCです。これをデコードするとand 1043=1043というスニペットが確認できますが、これはブラインドSQLのエクスプロイトでよく使われるパターンです。攻撃者はこの文を使ってWebサービスやデータベースシステムの脆弱性を探り当てることができます。このパターンはor 1=1 (CVE-2022-34265の説明参照)に似ていますが、「and」の後ろの文が常に真でさえあればよく、sqlmapはポリモーフィックにSQLインジェクションのエクスプロイトコードを生成できます。
このようなパターンをIPSシグネチャで検出するのは難しいでしょう。従来型シグネチャだとand 1=1という単一ケースにしかマッチしない可能性がありますが、機械学習ソリューションの場合は1=1に類似するすべてのケースに特化した特徴を使ってエクスプロイトに適切に対応できます。
機械学習テストの結果
ゼロデイ攻撃を検知するため、私たちは2つの機械学習モデルに学習をさせました。ひとつはSQLインジェクション攻撃を検知するモデル、もうひとつはコマンドインジェクション攻撃を検知するモデルです。これらのモデルを検知に用いることで生じる悪影響を最小限に抑えるため、私たちは誤検知率(false positive rate)の低さを優先しました。学習は両モデルともHTTPのGETリクエストとPOSTのリクエストで行いました。これらデータセットの作成には複数のソースを組み合わせています。これらのソースにはツールで生成した悪意のあるトラフィック、ライブトラフィック、内部IPSデータセットなどがふくまれます。
SQLインジェクション攻撃検出モデルは、SQLクエリを含む115万件の良性サンプルと150万件の悪性サンプルから、0.02%の誤検出率と、90%の真陽性率を達成しました。
コマンドインジェクション攻撃検出モデルは、Web検索とコマンドインジェクションの可能性のあるものを含む100万件の良性サンプルと220万件の悪性サンプルから、0.011%の誤検出率と92%の真陽性率を達成しました。
これらのモデルによる検知は非常に有用といえるでしょう。新たなゼロデイ攻撃に対する保護を提供できますし、従来型IPSシグネチャを回避するような小さな修正に対する耐性もあります。
結論
コマンドインジェクション攻撃やSQLインジェクション攻撃は今後もWebアプリケーションに影響を与える最も一般的で最も懸念される脅威のひとつでしょう。従来型のシグネチャベースソリューションは、既知のものから変更されていないエクスプロイトには有効ですが、その亜種は検出できないことが多く、ちょっと気の利く攻撃者ならコードを多少修正するだけでこうしたソリューションを回避できてしまいます。
日々進化するこれらの脅威に対抗するため、私たちはコンテキストベースの深層学習モデルを開発しましたが、これらは注目度の高い最新の攻撃の検知にも有効であることが実証されました。今回開発したモデルはAtlassian Confluenceの脆弱性、Moodleの脆弱性、Djangoの脆弱性など、ゼロデイのエクスプロイトをうまく検出できましたし、こうした柔軟な検知が、進化しつづけるマルウェアへの包括的防御に不可欠であることが証明されました。
パロアルトネットワークスの次世代ファイアウォール (NGFW)は、インラインソリューションとクラウドソリューションを組み合わせてお客様を保護しています。弊社の従来型IPSソリューションは、SQLインジェクションやコマンドインジェクションをふくむ、大多数の既存エクスプロイトに対し、これまで同様に有効です。本稿で紹介した機械学習モデルは、これらのIPSシグネチャにとどまらない、さらに強固な保護機能を提供できる可能性を秘めています。
追加リソース
OWASP Top 10
A03:2021 – インジェクション
sqlmap
An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling (シーケンスモデリング用の一般畳み込みニューラルネットワークとリカレントニューラルネットワークの経験的評価)
2022-11-18 08:25 JST: 2022-11-08 PST の英語版の更新を反映 (古くなった情報を記載した1文を削除)