Aikido

Aikido ZenによるNodeJS向けゼロデイ攻撃対策

執筆者
Timo Kössler

TLDR: 

ソフトウェアベンダーに未知の脆弱性を悪用する0-day攻撃は、重大なサイバー脅威をもたらします。従来のWebアプリケーションファイアウォール(WAF)は、これらの攻撃を防ぐには不十分な場合が多く、頻繁なパッチ適用が必要です。Runtime Application Self Protection (RASP)は、書かれたルールに依存せず、ネイティブな統合を通じてアプリケーションの動作を積極的に監視することで、異なるアプローチを取り、0-Dayに対する保護を強化します。 

NodeJS向けにAikido Zenを構築する際の目的は、開発者が既存のアプリに後付けで適合させ、SQLインジェクション、シェルインジェクション、パストラバーサル、SSRFといった一般的なインジェクション攻撃からデフォルトで保護できるようにすることでした。開発者は自身のコードのミスだけでなく、使用しているライブラリの未知の欠陥からも保護されるべきです。

その有効性を評価するため、Zenを多数のCVEに対して評価しました。このホワイトペーパーでは、そのアプローチ、有効性の評価、およびトレードオフと制限について説明します。この論文のために、チームは17件のゼロデイ脆弱性を特定し、そのうち11件は特定のエクスプロイトに関する事前知識なしにZenによってブロックされました。

はじめに

WAFは常に0-day攻撃に対する最後の希望でした。それらは、「Zero-day attack」の期間中(下図参照)に0-day攻撃を捕捉するために、運と繰り返し現れるパターンに依存していました。脆弱性が公開されて初めて(t0)、WAFルールを更新して新しい攻撃を阻止することができます。 

By Libicki et al. - (英語) (2015) The Defender’s Dilemma: Charting a Course Toward Cybersecurity, Rand Corporation ISBN: 978-0-8330-8911-3., パブリックドメイン, https://commons.wikimedia.org/w/index.php?curid=147095222

WAFは、アプリケーションに到達する前に、受信接続データ(ヘッダー、ボディなど)を検査します。疑わしいパターン(SQLインジェクション、パストラバーサルなど)がないかデータをスキャンし、疑わしいデータをブロックまたは削除します。効果的ではありますが、System Weaknessの研究で示されているように、多くの誤検知を生成する傾向があります。

 10,000人の顧客がいる場合、最良のソリューションであっても、そのうち56人をブロックしてしまう可能性があります。 

Aikido Zenは、Webアプリケーションセキュリティに対して根本的に異なるアプローチを採用しています。シグネチャと既知のパターンのみに依存するのではなく、より深いアプリケーションレベルで攻撃行動を理解し、軽減することに焦点を当てています。 

Aikido Zenのアプローチ

重要なリソースへのアクセスや操作を試みる時点で悪意のある活動を監視・傍受することに焦点を当てることで、Aikido Zenは、基盤システムと相互作用する際にのみ攻撃をブロックする戦略を採用し、誤検知の大幅な削減を実現しています。 

これは、基盤となる環境とのさまざまな種類のインタラクションを精査するシステムを実装することで達成されます。これらには以下が含まれます:

  • データベースインタラクション: SQLおよびNoSQLの両方のデータベースライブラリへの呼び出しを監視することで、不正なクエリ、データ流出の試み、またはインジェクション攻撃の検出が可能になります。これらのデータベース呼び出しの内容と構造を分析することにより、悪意のあるアクティビティが損害を引き起こす前に特定され、ブロックされます。

  • 外部呼び出し: HTTP、HTTPS、またはその他のプロトコルを介して行われる外部呼び出しを監視することで、コマンド&コントロールサーバーとの通信、マルウェアのダウンロード、またはデータの流出の試みを明らかにすることができます。これらの呼び出しの内容と宛先を検査することにより、悪意のあるトラフィックを特定し、ブロックすることができます。

  • ファイルシステムアクセスとシェル実行: ファイルシステムアクセスを監視することで、機密ファイルの読み取り、書き込み、変更、または悪意のあるコードの実行の試みを検出できます。これらのアクセスに関わるファイルパス、パーミッション、および操作を分析することにより、不正なアクティビティを特定し、ブロックすることができます。

  • Server-Side Request Forgery (SSRF) 攻撃の試み: SSRF攻撃は壊滅的であり、攻撃者はサーバーの信頼を悪用して内部リソースにアクセスしたり、サーバーに代わって外部サービスと対話したりすることができます。サーバーから発信される内部リクエストの宛先と性質を綿密に監視することで、ZenはSSRF攻撃をブロックすることができます。

基盤となるシステムとのこれらの重要なインタラクションポイントに焦点を当てることで、Zenのアプローチは、合法的なアクティビティを妨害する可能性のある誤検知の数を最小限に抑えながら、より正確で効果的な攻撃の検出とブロックを可能にします。この戦略はまた、攻撃の性質と標的に関する貴重な洞察を提供し、全体的なセキュリティ体制の改善に利用できます。

研究

継続的な取り組みとして、Aikido Zenチームは最近発見された脆弱性に対してテストを実行し、Aikido Zenの有効性を測定しています。チームは新しいゼロデイを特定し、再現可能なテスト環境を作成し、成功したペイロードインジェクションで脆弱性を検証した後、Aikido Zenをインストールして攻撃がブロックされることを確認します。 

この論文のために、チームは17の脆弱性を特定しました。そのうち11はZenによってブロックされ、6はさまざまな理由でブロックされませんでした。 

私たちの研究結果は以下に記載されており、再現に必要なすべてのテスト環境、エクスプロイト、およびリソースはオープンソース化されています。

ブロック済み

CVE ID 影響を受けるソフトウェア タイプ
CVE-2014-3744 npm:st パストラバーサル
CVE-2015-1369 npm:sequelize SQL Injection
CVE-2019-15597 npm:node-dfs シェルインジェクション
CVE-2020-7687 npm:fast-http パストラバーサル
CVE-2020-7765 npm:@firebase/util プロトタイプ汚染
CVE-2020-8116 npm:dot-prop プロトタイプ汚染
CVE-2020-26301 npm:ssh2 シェルインジェクション
CVE-2023-31719 npm:@frangoteam/fuxao SQL Injection
CVE-2024-24806 libuv (Node.jsで使用) SSRF
CVE-2024-39338 npm:axios SSRF
CVE-2024-53900 npm:mongoose JSコードインジェクション
CVE-2025-23084 Node.js パストラバーサル
CVE-2025-25975 npm:parse-git-config プロトタイプ汚染
CVE-2025-25977 npm:canvg プロトタイプ汚染
CVE-2025-27152 npm:axios SSRF
CVE-2025-28269 npm:js-object-utilities プロトタイプ汚染
CVE-2025-32020 npm:crud-query-parser SQL Injection

ブロックされていません

CVE 影響を受けるソフトウェア タイプ 理由
CVE-2014-9682 dns-sync コマンドインジェクション サポートされていない古いShellJSバージョンを使用しています。新しいバージョンはZenでサポートされています。
CVE-2015-1369 sequelize SQL Injection 当初は検出されませんでしたが、バージョン1.7.0で修正されました。
CVE-2024-21511 mysql2 コードインジェクション Node.jsのAsyncContextにおける問題により、ユーザー入力の追跡が困難になっています。
CVE-2024-56198 path-sanitizer パストラバーサル 変更により、危険なペイロードをユーザー入力まで遡って追跡することができません。
CVE-2025-1302 jsonpath-plus リモートコード実行 V8に組み込まれたセキュリティメカニズムにより、evalを計測するとその動作が変わってしまいます。
将来的には、異なるアプローチでこの問題を解決する予定です。
CVE-2024-42352 @nuxt/icon SSRF このパッケージはまだサポートされていません。

Aikidoは、新しいフレームワークサポートと強化されたアルゴリズムにより、Aikido Zenのゼロデイ保護を継続的に研究し、拡大しています。

継続的な保護のために、パフォーマンスへの影響を最小限(5%以下)に抑えることが主要な原則です。これにより、リソースを大量に消費する特定の保護アルゴリズム(リクエスト時間を2倍から10倍に増加させる可能性のあるもの)をすぐに実装することはできませんが、現在、代替の効率的なアプローチを積極的に開発しています。

Aikido Zenは、コードスキャン、APIテスト、その他の堅牢なセキュリティ機能といったAikidoの包括的なリアクティブコンポーネントを補完する、*追加の*保護層と考えることができます。

まとめ

Aikido Zenは、Webアプリケーションセキュリティにおける大きなブレークスルーです。攻撃行動に集中し、最先端技術を活用することで、継続的なパッチ適用を必要とせずにゼロデイ攻撃に対する強力な保護を提供します。脅威の状況が変化する中で、Aikido ZenはWebアプリケーションの継続的なセキュリティを確保するための潜在的なソリューションを提供します。

共有:

https://www.aikido.dev/blog/zero-day-nodejs

脅威ニュースをサブスクライブ

今日から無料で始めましょう。

無料で始める
CC不要

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です | スキャン結果は32秒で表示されます。