すべてのプロダクト
Search
ドキュメントセンター

Security Center:アプリケーション保護とは

最終更新日:Jun 04, 2026

Application Protection は RASP (Runtime Application Self-Protection) 技術に基づいています。アプリケーションのランタイムで攻撃を検出しブロックすることで、コードを変更することなく堅牢な防御を提供します。ご利用のホストまたはコンテナに RASP プローブをデプロイするだけで、未知の脆弱性を悪用する攻撃、メモリシェルインジェクション、およびその他の高度な脅威から保護できます。

仕組み

Application Protection は RASP 技術を使用して、アプリケーションの内部からその動作を監視します。アプリケーション層でクリティカル関数をフックすることにより、アプリケーションと他のシステムとの間の相互作用をリアルタイムで監視します。不審な動作が検出されると、システムは現在の実行コンテキストを分析して攻撃を特定し、ブロックします。

これにより、ご利用のホスト上の Web プロセスを、アプリケーションの脆弱性、ゼロデイ脆弱性、メモリシェル攻撃から保護します。

シナリオと利点

  • 内部アプリケーションのセキュリティ確保:RASP はトラフィックの送信元ではなく、アプリケーションの動作に焦点を当て、ノースサウスおよび East-West の両方の脅威から防御します。アプリケーションプロセスと並行して実行され、アプリケーション資産の最後の防御線として機能します。

  • 複雑なエンコーディングと暗号化されたトラフィックの処理:RASP はアプリケーションのコンテキストを完全に可視化します。リクエストがどのように変換されても、アプリケーションが実行するアクションは一貫しているため、RASP は ID と動作が一致しない場合に異常を検出できます。暗号化されたトラフィックを監査できないネットワーク境界デバイスとは異なり、RASP はアプリケーション内部から復号された完全なリクエストデータを取得します。

  • 低い誤検知率と偽陰性率、ゼロデイ脆弱性からの防御:RASP はアプリケーション内のクリティカルな関数操作から得られるデータを分析し、実際には実行できない攻撃を無視することで、誤検知と偽陰性の両方を削減します。ゼロデイ脆弱性に対しては、攻撃がどのように侵入し、どのようなステルス技術が使用されても、クリティカル関数の実行パスをバイパスすることはできないため、RASP は効果的にそれを遮断できます。

  • 攻撃の追跡と脆弱性の特定:RASP は、元の攻撃ペイロード、コードの呼び出しスタックなど、詳細な攻撃チェーンをセキュリティチームと開発者に提供し、脆弱性の特定、再現、修正を容易にします。

  • 低い運用コスト:コンソールから簡単にデプロイでき、特定のルールを維持または更新する必要はありません。

前提条件と制限事項

Application Protection は、Java、PHP、および Node.js アプリケーションをサポートしています。Alibaba Cloud Elastic Compute Service (ECS) インスタンス、サードパーティのクラウドプロバイダーのサーバー、および Security Center エージェントがインストールされているオンプレミスの IDC サーバーで動作します。

以下のオペレーティングシステムがサポートされています:

オペレーティングシステム

サポートされるオペレーティングシステム

Windows (64 ビット)

  • Windows Server 2025

  • Windows Server 2022

  • Windows Server 2019

  • Windows Server 2016

  • Windows Server 2012

  • Windows Server 2008

  • Windows 11

  • Windows 10

Linux (64 ビット)

  • Alibaba Cloud Linux

  • AlmaLinux

  • Anolis OS

  • CentOS 6, 7, 8

  • CentOS Stream

  • Debian 8 以降

  • Gentoo

  • OpenSUSE

  • RHEL 6, 7, 8, 9

  • Rocky Linux

  • SUSE Linux Enterprise Server

  • Ubuntu 14.04 以降

  • NeoKylin V7, Kylin V10

  • TencentOS

  • Oracle Linux 7, 8, 9

  • openEuler 20.03, 22.03

  • EulerOS

  • Amazon Linux 2, 2023

サポートされる機能

攻撃の検出 (Java アプリケーション)

次の表に、Application Protection が検出および遮断できる攻撃タイプと、関連する保護の推奨事項を示します。

攻撃タイプ

説明

推奨事項

JNI インジェクション

JNI インジェクションは、一般的な RASP バイパス技術です。攻撃者がコード実行権限を取得すると、Java Native Interface (JNI) 関数を使用して外部の悪意のある共有ライブラリを呼び出し、Java レベルのセキュリティ保護をバイパスして悪意のある行為を隠蔽することができます。

ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の場所を確認し、コード実行機能を制限してください。

SQL インジェクション

SQL インジェクション攻撃は、ページリクエストや Web フォームのクエリ文字列に SQL コマンドを挿入し、サーバーに任意の SQL ステートメントを実行させることで機能します。攻撃者は Web フォームを悪用して、脆弱な Web サイトからデータを抽出することができます。

SQL インジェクションは、SQL ステートメントの連結によって引き起こされます。可能な限りプリペアドステートメントを使用して入力パラメーターを処理するか、許可リストと拒否リストを使用してパラメーターの連結を制限してください。

XXE

XML 外部実体参照 (XXE) インジェクション攻撃は、XML パーサが外部エンティティ参照を処理する際に発生します。攻撃者は悪意のある XML コンテンツを作成して、任意のファイル読み取り、コマンド実行、および内部ネットワーク攻撃を実現することができます。

アプリケーションが XML を解析する際に外部エンティティをロードする必要があるかどうかを確認してください。不要な場合は、XML 解析設定で外部エンティティを無効にしてください。

悪意のある DNS クエリ

悪意のある DNS クエリは、複数の方法で悪用される可能性があります。攻撃者は DNS プロトコルを使用して内部ネットワークの制限をバイパスし、機密データを漏洩させたり、SSRF や JNDI インジェクションなどの脆弱性を探るために内部システムを探索したりする場合があります。

悪意のある DNS クエリは、サーバーがユーザー制御のパラメーターにリクエストを送信する際にトリガーされます。パラメーターを確認し、許可リストを使用して制限してください。

悪意のあるリフレクション呼び出し

これは RASP の自己保護モジュールであり、攻撃者がリフレクションを介して RASP のランタイムデータを変更するのを防ぎます。

ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の場所を確認し、コード実行機能を制限してください。

悪意のあるアウトバウンド接続

SSRF (サーバーサイドリクエストフォージェリ) は、攻撃者がサーバーが開始するリクエストを作成して内部システムを標的にする脆弱性です。

SSRF の脆弱性を修正するには、サーバーリクエストが到達できるターゲットアドレスの範囲を制限します。許可リストを使用して安全な内部リソースへのアクセスのみを許可し、不要なアウトバウンドネットワークアクセスを無効にしてください。

悪意のあるファイルの読み書き

Java の `RandomAccessFile` クラスは、ファイルの読み書き操作に使用されます。このクラスを使用する際にファイルパスと内容が制限されていない場合、攻撃者は機密性の高いシステムファイルを読み取ったり、悪意のあるトロイの木馬ファイルをアップロードしたりする可能性があります。

ファイルの読み取りおよびアップロード操作が正常であるか確認してください。異常な場合は、機能コードを確認し、拒否リストを使用して操作を制限してください。

悪意のあるファイルのアップロード

Web サイトのファイルアップロード機能がファイルタイプを制限していない場合、攻撃者は悪意のあるトロイの木馬ファイルをアップロードして、より広範なサーバーアクセス権を取得し、深刻な被害を引き起こす可能性があります。

アップロードできるファイルの種類を制限し、JSP などの実行権限を持つファイルを禁止してください。

コマンド実行

コマンド実行の脆弱性は、サーバーがユーザーが実行できるコマンドをフィルタリングせず、任意のシステムコマンドの実行を許可する場合に発生します。

リモートコマンド実行は、多くの場合、Webshel​​l やサーバー上の危険なコードによって引き起こされます。Webshel​​l は速やかに削除してください。それが通常のサーバー機能である場合は、許可リストを使用して実行可能なコマンドを制限してください。

ディレクトリトラバーサル

Web サイトの設定の弱点により、任意のディレクトリの閲覧が許可され、攻撃者が悪用できるプライバシー侵害につながる可能性があります。

ディレクトリトラバーサル操作が正常であるか確認してください。異常な場合は、機能コードを確認し、拒否リストを使用して「./」や「../」などの関連コマンドを制限してください。

メモリシェルインジェクション

メモリシェルは、攻撃者が特別な方法でサーバーメモリにトロイの木馬を注入する新しいマルウェア技術であり、WAF やホストベースの防御を効果的にバイパスします。

ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の場所を確認し、コード実行機能を制限してください。

任意のファイル読み取り

Web サイトのファイルダウンロードおよび読み取り機能が、ファイルパスに制限を設けずに絶対パスやディレクトリトラバーサル文字を使用している場合、攻撃者は機密情報を取得してサーバーを攻撃することができます。

ファイルの読み取り操作が正常であるか確認してください。異常な場合は、機能コードを確認し、拒否リストを使用して「./」や「../」などの入力パラメーターを制限してください。

スレッドインジェクション

スレッドインジェクションは、一般的な RASP バイパス技術です。攻撃者がコード実行権限を取得すると、新しいスレッドを作成して RASP がランタイム環境のコンテキストを失う原因となり、RASP の防御能力に影響を与えます。

ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の場所を確認し、コード実行機能を制限してください。

悪意のあるアタッチ

Attach API は、ランタイムでバイトコードを動的に変更するために Java が提供する技術です。攻撃者はしばしばこれを使用して、高いステルス性を持つエージェント型のメモリシェルを注入します。

ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の場所を確認し、コード実行機能を制限してください。

JNDI インジェクション

アプリケーションが JNDI ルックアップを実行する際、ルックアップ URL が攻撃者によって制御可能な場合、攻撃者はサーバーに悪意のあるリンクをクエリさせ、サーバーに悪意のあるクラスをロードさせて任意のコード実行を達成することができます。

  • 脆弱性がサードパーティのコンポーネントに起因する場合、速やかにコンポーネントのバージョンをアップグレードしてください。

  • カスタムの JNDI ルックアップコードに起因する場合、クエリ可能な URL を制限し、危険なプロトコルを禁止してください。

危険なプロトコルの使用

サーバーがアクセス可能な URL がユーザー制御可能であり、アプリケーションがプロトコルを制限していない場合、攻撃者は file や netdoc などの危険なプロトコルを使用してサーバー上の機密ファイルを読み取る可能性があります。

URL がアクセスできるプロトコルを制限してください。

逆シリアル化攻撃

Java の逆シリアル化は、文字列を Java オブジェクトに復元するプロセスです。生成されたオブジェクトに高リスクのコードが含まれている場合、攻撃者は逆シリアル化中のメンバー変数の制御を悪用して悪意のある攻撃を実行する可能性があります。

  • 脆弱なコンポーネントのバージョンを速やかにアップグレードしてください。

  • ベンダーがパッチ適用済みのバージョンをリリースしていない場合は、一時的にその機能を無効にしてください。

任意のファイル削除

Web サイトのファイル削除機能がファイルパスを制限していない場合、攻撃者は絶対パスやディレクトリトラバーサル文字を使用して任意のファイルを削除し、サーバーを危険にさらす可能性があります。

ファイル削除操作が正常であるか確認してください。異常な場合は、機能コードを確認し、拒否リストを使用して「./」や「../」などの入力パラメーターを制限してください。

式インジェクション

式コンポーネントは、ランタイムデータのクエリや処理など、豊富な機能を提供します。しかし、多くの式コンポーネントは関数呼び出しなどの高権限操作もサポートしています。制限がなく、攻撃者が制御可能な場合、攻撃者は式の評価を通じて任意のコードを実行することができます。

式の評価に入るものを厳密に制限し、ほとんどの Java 関数呼び出しをブロックしてください。サードパーティのコンポーネントの脆弱性が原因である場合は、速やかにコンポーネントのバージョンをアップグレードしてください。

エンジンインジェクション

Java は多くのサードパーティ製エンジンコンポーネント (Rhino、Nashorn JS エンジン、Velocity、FreeMarker テンプレートエンジンなど) をサポートしています。これらのエンジンは通常、関数呼び出しなどの高権限操作を提供します。制限がなく、攻撃者が制御可能な場合、攻撃者はエンジンを通じて任意のコードを実行することができます。

エンジンファイルに入るものを厳密に制限し、ほとんどの Java 関数呼び出しをブロックしてください。サードパーティのコンポーネントの脆弱性が原因である場合は、速やかにコンポーネントのバージョンをアップグレードしてください。

悪意のある Beans バインディング

一部の Java フレームワークは、ランタイムでの Beans パラメーターバインディングをサポートしています。バインド可能な Beans の種類が制限されていない場合、攻撃者は機密性の高い Beans の値を変更することで、アプリケーションの動作を妨害したり、任意のコード実行を達成したりする可能性があります。

バインド可能な Beans の種類を制限し、Class や ClassLoader 型に類似した Beans の値の変更を禁止してください。サードパーティのコンポーネントの脆弱性が原因である場合は、速やかにコンポーネントのバージョンをアップグレードしてください。

悪意のあるクラスのロード

多くのゼロデイエクスプロイトや Webshel​​l は、悪意のあるクラスのロードに依存しています。悪意のあるクラスがロードされると、攻撃者はクラスの初期化を通じてコード実行権限を取得し、さらなる悪意のある操作を可能にします。

  • 悪意のあるクラスのロードが Webshel​​l によって制御されている場合は、速やかに Webshel​​l を削除してください。

  • 悪意のあるクラスのロードがフレームワークによって引き起こされている場合は、速やかにフレームワークのバージョンをアップグレードしてください。

JSTL 任意ファイルインクルード

JSTL (JSP Standard Tag Library) は、JSP アプリケーションの共通のコア機能をカプセル化する JSP タグのコレクションです。ユーザー制御可能なパラメーターが制限なしに直接 JSTL タグに連結されると、攻撃者は特別な攻撃スクリプトを作成して、任意のファイル読み取りや SSRF 攻撃を達成することができます。

ユーザー制御可能なパラメーターを直接 JSTL タグに連結することは避けてください。必要な場合は、パラメーターの内容に厳密な許可リスト制御を適用してください。

攻撃の検出 (PHP アプリケーション)

攻撃タイプ

説明

推奨事項

悪意のあるファイルインクルード

PHP のファイルインクルード脆弱性は、攻撃者が入力を操作して任意のファイルをインクルードし実行することを可能にする一般的なセキュリティ問題です。これらの脆弱性は通常、include()require()include_once()、または require_once() 関数を使用する際に発生します。

ユーザーが入力したファイルパスを検証および制限し、アプリケーションディレクトリ内の事前定義されたファイルのみを許可して、攻撃者が悪意のあるパスを注入するのを防ぎます。

悪意のあるアウトバウンド接続

SSRF (サーバーサイドリクエストフォージェリ) は、攻撃者がサーバーが開始するリクエストを作成して内部システムを標的にする脆弱性です。

SSRF の脆弱性を修正するには、サーバーリクエストが到達できるターゲットアドレスの範囲を制限します。許可リストを使用して安全な内部リソースへのアクセスのみを許可し、不要なアウトバウンドネットワークアクセスを無効にしてください。

逆シリアル化

PHP の逆シリアル化脆弱性は、攻撃者がシリアル化されたデータを操作して任意の関数を実行できる深刻なセキュリティ問題です。これは通常、unserialize() 関数を使用する際に発生します。

信頼できないデータを直接逆シリアル化することは避けてください。json_decode() やその他の安全な代替手段を使用するか、必要な場合は逆シリアル化されたデータソースを厳密に検証およびフィルタリングしてください。

コールバック関数の実行

PHP のコールバック関数、例えば array_map()array_filter() は、そのパラメーターが外部から制御可能になると危険になり、攻撃者に任意の関数を実行してシステム全体を制御する能力を与える可能性があります。

PHP コールバック関数の乱用を防ぐため、array_map()array_filter()、および同様の関数に渡されるコールバック関数名がユーザー入力によって制御されないようにし、許可されたすべてのコールバック関数を許可リストで検証してください。

悪意のあるファイルの読み書き

ファイルの読み書き関数がファイルパスや内容に制限なく呼び出されると、攻撃者は機密性の高いシステムファイルを読み取ったり、悪意のあるトロイの木馬ファイルをアップロードしたりする可能性があります。

ファイル関連のセキュリティ脆弱性を防ぐため、ファイルパスを厳密に検証および制限して、事前定義されたディレクトリへのアクセスのみを許可し、ファイルの内容に対してセキュリティチェックを実行して悪意のあるコードのアップロードを防ぎます。

任意のコード実行

任意のコード実行脆弱性により、攻撃者はサーバー上で任意のコードスニペットを実行し、制御権を奪ったり、機密データを読み取ったり変更したりする可能性があります。これは通常、プログラムがユーザー入力を十分に検証せず、悪意のあるコードの注入を許してしまう場合に発生します。悪用に成功すると、データ漏えい、Web サイトの改ざん、またはマルウェアのインストールにつながる可能性があります。

厳密な入力検証と出力エンコーディングを使用してください。eval()include()、および同様の関数を使用してユーザー入力を直接処理することは避け、すべてのライブラリとフレームワークを最新の状態に保ってください。

任意のファイル読み取り

ファイル読み取りインターフェイスで適切なフィルタリングと制限が行われていない場合、攻撃者は絶対パスやディレクトリトラバーサル文字を使用してファイルを読み取り、ダウンロードし、機密情報を取得してサーバーを攻撃することができます。

ファイル読み取りインターフェイスに厳密な入力検証とパス制限を実装して、許可リストに登録されたファイルのみがアクセスできるようにし、拒否リストを使用して「./」や「../」などの入力パラメーターを制限してください。

任意のファイル削除

ファイル削除インターフェイスで適切なファイルパス制限が行われていない場合、攻撃者は絶対パスやディレクトリトラバーサル文字を使用して任意のファイルを削除し、サーバーを攻撃することができます。

ファイル削除インターフェイスに厳密な入力検証とパス制限を実装して、検証済みのファイルのみが削除できるようにし、拒否リストを使用して「./」や「../」などの入力パラメーターを制限してください。

コマンド実行

コマンド実行脆弱性により、攻撃者はオペレーティングシステムのコマンドやコードをバックエンドサーバーにリモートで注入し、バックエンドシステムの制御権を奪うことができます。

すべてのユーザー入力を検証およびフィルタリングしてください。未処理の入力を使用してオペレーティングシステムのコマンドを構築することは避け、可能な場合は安全な API を使用してシステムコマンドの実行を置き換えてください。

ディレクトリトラバーサル

Web サイトの設定の弱点により、任意のディレクトリの閲覧が許可され、攻撃者が悪用できるプライバシー侵害につながる可能性があります。

適切なサーバー権限設定と .htaccess などのファイルを使用してディレクトリへのアクセスを制限し、機密ディレクトリが許可されていないユーザーによって閲覧されないようにしてください。

悪意のあるファイルのアップロード

ファイルアップロード機能がファイルタイプを制限していない場合、攻撃者は悪意のあるトロイの木馬ファイルをアップロードして、より広範なサーバーアクセス権を取得し、深刻な被害を引き起こす可能性があります。

アップロードされるファイルの種類を厳密に制限および検証し、安全なファイルタイプのみを許可し、.php などの実行可能なファイル拡張子をブロックし、サーバー側でファイルの内容を再チェックして安全性を確保してください。

攻撃の検出 (Node.js アプリケーション)

次の表に、Application Protection が Node.js アプリケーションに対して検出および遮断できる攻撃タイプと、関連する保護の推奨事項を示します。

攻撃タイプ

説明

推奨事項

コマンド実行

コマンド実行脆弱性により、攻撃者はオペレーティングシステムのコマンドやコードをバックエンドサーバーにリモートで注入し、バックエンドシステムの制御権を奪うことができます。

execspawn、および同様の関数を使用してユーザー制御可能な入力を実行することは避けてください。必要な場合は、許可リストを使用して実行可能なコマンドを制限してください。

悪意のあるファイルの読み書き

ファイルの読み書き関数がファイルパスや内容に制限なく呼び出されると、攻撃者は機密性の高いシステムファイルを読み取ったり、悪意のあるトロイの木馬ファイルをアップロードしたりする可能性があります。

ファイルパスを厳密に検証および制限して、事前定義されたディレクトリへのアクセスのみを許可し、ファイルの内容に対してセキュリティチェックを実行してください。

任意のファイル読み取り

ファイル読み取りインターフェイスで適切なフィルタリングと制限が行われていない場合、攻撃者は絶対パスやディレクトリトラバーサル文字を使用してファイルを読み取り、ダウンロードし、機密情報を取得してサーバーを攻撃することができます。

ファイル読み取りインターフェイスに厳密な入力検証とパス制限を実装して、許可リストに登録されたファイルのみがアクセスできるようにし、拒否リストを使用して「./」や「../」などの入力パラメーターを制限してください。

任意のファイル書き込み

アプリケーションが書き込まれるファイルのタイプ、サイズ、内容を適切に検証および制限していない場合、攻撃者はこれを悪用してターゲットシステムの指定された場所に悪意のあるファイルを書き込み、悪意のあるスクリプトやトロイの木馬を仕掛けることができます。これにより、サーバーが完全に侵害される可能性があります。

  • すべてのファイル書き込みパスを正規化し、検証してください。path.resolve または realpath を使用して、ターゲットがアプリケーションで許可されたディレクトリ内にあることを確認してください。

  • ユーザー入力を完全なファイルパスとして直接使用しないでください。サーバーが生成したファイル名と固定ディレクトリを使用することを推奨します。

  • システムディレクトリ、ユーザーの起動スクリプト、SSH 設定、cron ジョブ、systemd ユニット、パッケージマネージャ設定、およびアプリケーションのキーファイルへの書き込みを禁止してください。

  • コンテナおよび本番環境では、読み取り専用のルートファイルシステム、最小限のファイル権限、および隔離された一時ディレクトリを使用してください。

  • アップロード、エクスポート、およびキャッシュ機能については、ビジネスタイプごとに拡張子、サイズ、およびディレクトリの許可リストを設定し、監査ログを保持してください。

任意のファイル削除

ファイル削除インターフェイスで適切なファイルパス制限が行われていない場合、攻撃者は絶対パスやディレクトリトラバーサル文字を使用して任意のファイルを削除することができます。

ファイル削除インターフェイスに厳密な入力検証とパス制限を実装して、検証済みのファイルのみが削除できるようにし、拒否リストを使用して「./」や「../」などの入力パラメーターを制限してください。

悪意のあるファイルリンク

アプリケーションがファイルリンクを作成する際にターゲットパスとリンクオブジェクトを適切に検証しない場合、攻撃者はソフトリンクやハードリンクを使用して保護されたファイルをアクセス可能な場所にマッピングし、アクセス制御をバイパスして機密性の高いシステムファイルを読み取り、変更、または破壊する可能性があります。

外部入力がリンクターゲットやリンクパスを直接制御することを許可しないでください。リンク元とターゲットの両方に対して、正規化、実パス検証、およびディレクトリ許可リストのチェックを実行してください。アップロード、一時、および展開ディレクトリで lstat を使用してシンボリックリンクを特定してください。高リスクのディレクトリには独立した低権限ユーザーを使用し、アプリケーションプロセスがシステム設定、認証情報ディレクトリ、およびホストマウントディレクトリへの読み書きアクセス権を持たないようにしてください。

悪意のあるアウトバウンド接続

SSRF (サーバーサイドリクエストフォージェリ) は、攻撃者がサーバーが開始するリクエストを作成して内部システムを標的にする脆弱性です。

SSRF の脆弱性を修正するには、サーバーリクエストが到達できるターゲットアドレスの範囲を制限します。許可リストを使用して安全な内部リソースへのアクセスのみを許可し、不要なアウトバウンドネットワークアクセスを無効にしてください。

悪意のあるプロセス作成

Node.js の fork() は、JS ファイルを実行する新しい Node プロセスを作成するために使用できます。アプリケーションが呼び出しシナリオ、実行ロジック、または入力パラメーターを厳密に制限しない場合、攻撃者はこの機能を使用して悪意のあるサブプロセスを作成し、不正な操作を実行したり、スクリプトのロードやコマンド実行を通じてサーバーをさらに侵害したりする可能性があります。

ユーザー入力が fork() のモジュールパスと起動パラメーターを直接決定しないようにしてください。フォーク可能なスクリプトには、固定の列挙またはサーバー側の許可リストを使用してください。起動前に絶対パスを使用してスクリプトを解決し、信頼できるアプリケーションディレクトリ内にあることを確認してください。パラメーターとして渡すのはビジネスフィールドのみとし、シェルフラグメント、ファイルパス、インタープリター引数、または環境変数のオーバーライドは渡さないでください。サブプロセスには最小権限、隔離された作業ディレクトリ、および制限された環境変数を使用してください。ユーザータスクの実行が必要なシナリオでは、任意のローカルスクリプトを動的にロードするのではなく、制限されたワーカー、キュー、またはサンドボックスを使用することを推奨します。

悪意のあるプロセスバインディング

Node.js の process.binding() は、内部の低レベルモジュールにアクセスするために使用できます。アプリケーションがこのような呼び出しを制限しない場合、攻撃者はこの機能を使用して低レベルのインターフェイスにアクセスし、上位層のセキュリティ制御をバイパスし、予期しない操作を実行して、機密情報の漏洩、権限の乱用、またはさらなるシステムのエクスプロイトにつながる可能性があります。

ビジネスコード、プラグイン、テンプレート、またはスクリプト実行環境で process.binding および process._linkedBinding を公開しないでください。これらのインターフェイスに外部パラメーターを渡すことを禁止してください。プラグイン、ルール、テンプレート、または Agent Skills をサポートするアプリケーションでは、サンドボックス内で高リスクの process 機能を削除またはフリーズしてください。本番環境で RASP プロセスバインディングのフックとアラートを有効にしてください。依存パッケージにおける直接的なネイティブバインディング呼び出しの必要性を評価し、呼び出し元を制限してください。高リスクのランタイム環境には、コンテナ隔離、最小権限ユーザー、およびシステムコール/ネットワークアクセスの制限を使用してください。

悪意のある MCP 呼び出し

AI エージェントのシナリオでは、MCP (Model Context Protocol) を使用して外部のリソース、サービス、または機能にアクセスできます。アプリケーションが MCP サービスの呼び出し範囲、リクエストパラメーター、および返り値を厳密に検証しない場合、攻撃者はエージェントを誘導して悪意のある MCP 呼び出しを行わせ、機密データにアクセスしたり、高リスクな操作を実行したり、信頼できないサービスと対話したりする可能性があります。

MCP サーバーを外部の信頼できないコンポーネントとして扱ってください。固定バージョンと制御された設定を持つ信頼できるソースへの接続のみを許可してください。MCP ツール名、サーバー名、パラメーター、URL、作業ディレクトリ、および起動コマンドの許可リストを確立してください。ファイルを変更したり、コマンドを実行したり、ネットワークにアクセスしたり、認証情報を読み取ったりするツールについては、手動確認またはより高いリスクレベルのポリシーを有効にしてください。本番キーを MCP サーバーに直接公開しないでください。MCP サーバーは隔離されたコンテナまたは低権限のアカウントで実行してください。OAuth メタデータ、リモート URL、およびツールの返り値に対して、フォーマット検証、URL セキュリティ検証、および監査記録を実行してください。ツール呼び出しによって生成される基盤となる child_processfshttp、および net の動作は、引き続き RASP によって遮断されるべきです。

悪意のあるツール呼び出し

AI エージェントのシナリオでは、ツールを使用して外部操作を実行したり、サードパーティの機能を呼び出したりできます。アプリケーションが利用可能なツールの範囲、呼び出しパラメーター、および実行結果を効果的に制限しない場合、攻撃者はプロンプトインジェクションや巧妙に作成された悪意のある入力を使用して、エージェントを誘導して高リスクなツールを呼び出させ、不正な操作を実行したり、機密リソースにアクセスしたり、ホストや業務システムのセキュリティに影響を与えたりする可能性があります。

ツールの権限は最小権限の原則に基づいて設計してください。高リスクなツールはデフォルトで拒否し、ビジネスシナリオに基づいて明示的に承認してください。ツールをリスクレベル (読み取り専用、書き込み、ネットワーク、コマンド実行) に分類してください。書き込み、コマンド実行、およびアウトバウンドのツールには、確認またはポリシーの承認を要求してください。コマンドテンプレート、アクセス可能なディレクトリ、許可されたドメイン、許可された HTTP メソッドなど、各ツールパラメーターに強力な検証と許可リストの制約を適用してください。ツールの結果は信頼できない入力として扱い、LLM コンテキストに入る前にプロンプトインジェクションと機密データの検出を実行してください。ツール名、パラメーター、呼び出しチェーン、runId/toolCallId、および結果の要約の監査記録を保持してください。機密ファイルの読み取り後にアウトバウンド接続を行う、またはコマンド実行後に起動項目を書き込むなどの危険なシーケンスを検出した場合は、ブロックまたはアラートをエスカレーションしてください。

アプリケーションの脆弱性防御

Application Protection は、アプリケーションの脆弱性、ゼロデイ脆弱性、メモリシェル攻撃に対して効果的に防御できます。脆弱性防御の原則を次の図に示します。アプリケーションの脆弱性インシデント対応中に、RASP の攻撃保護機能を活用することで、攻撃を迅速にブロックし、アプリケーションの脆弱性を修正するための時間を稼ぐことができます。Application Protection は、リスク源の迅速な特定と影響範囲の判断にも役立ちます。アプリケーションの脆弱性の詳細については、「脆弱性の管理」をご参照ください。

image

アプリケーションの脆弱性をすぐに修正できない場合は、まずアプリケーションプロセスを RASP に接続して保護することができます。次の手順は、脆弱性が検出されたアプリケーションに RASP 保護を追加する方法を示しています。

  1. Security Center コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、リスクガバナンス > 脆弱性管理 を選択します。コンソール左上で、保護対象のアセットが所在するリージョンを選択します:Chinese Mainland または Outside Chinese Mainland

  3. アプリケーションの脆弱性 タブでは、RASP はリアルタイム保護をサポートします タグが付いた脆弱性は、アプリケーション保護でサポートされています。対応する脆弱性の「操作」列で すぐに保護する をクリックします。

    image.png

  4. Access Management パネルで、Application Group Name ドロップダウンから接続するアプリケーショングループを選択し、対応するアセットを選択してから 確認する をクリックします。

    必要なアプリケーショングループが存在しない場合は、ドロップダウンで アプリケーショングループの作成 をクリックし、アプリケーショングループ名を入力して OK をクリックすると、迅速にアプリケーショングループを作成できます。ここで作成されたアプリケーショングループの Protection Mode保護 であり、保護ポリシーグループGroup Name です。

    脆弱性が検出されたアプリケーションが Application Protection に接続された後、脆弱性詳細ページの Unhandled Vulnerabilities リストでは、アプリケーションの脆弱性に対する脆弱性スキャンが完了した後にのみ、サーバーの 操作 列が Protected と表示されます。

アプリケーションの行動分析

アプリケーションの行動分析機能は、接続されたアプリケーションの行動データをリアルタイムで監視、収集、分析し、レポートと視覚的な表示を生成します。これにより、アプリケーションの攻撃と防御の詳細を理解し、システムのセキュリティを強化することができます。詳細については、「アプリケーションの行動分析」をご参照ください。

メモリシェル防御 (Java アプリケーションのみ)

Application Protection の RASP 技術は、メモリデータを分析することでメモリシェルをリアルタイムで検出し、メモリシェルの注入および実行プロセスを遮断することをサポートします。詳細については、「メモリ常駐型マルウェア防御」をご参照ください。

弱点検出 (Java アプリケーションのみ)

次の表に、Application Protection が検出できるアプリケーションの弱点タイプと、関連する修正の推奨事項を示します。

弱点タイプ

リスクレベル

説明

推奨事項

安全でない Fastjson 設定

アプリケーションの Fastjson で逆シリアル化が有効になっており、攻撃者によってリモートコード実行を達成される可能性があります。不要な場合はこの機能を無効にしてください。

Fastjson の safemode を true に設定するか、autotype を false に設定してください。

安全でない log4j 設定

log4j コンポーネントでルックアップ機能が有効になっており、攻撃者が JNDI インジェクションを悪用してリモートコード実行につながる可能性があります。

log4j を最新バージョンにアップグレードするか、JAR パッケージから org/apache/logging/log4j/core/lookup/JndiLookup.class ファイルを削除してください。

安全でない起動パラメーター

攻撃者が JDWP デバッグポートにアクセスできる場合、この機能を通じて任意のコードを実行し、リモートコード実行を引き起こす可能性があります。

そのようなシナリオが不要な場合は、JDWP ポートを閉じるか、JDWP ポートをパブリックネットワークに公開しないようにしてください。JDWP ポートが有効になっている常駐アプリケーションには注意してください。

Shiro の脆弱なキー

Shiro は脆弱な暗号鍵を使用しており、攻撃者がこれを解読してさらなる逆シリアル化攻撃を行い、リモートコード実行につながる可能性があります。

アプリケーションの Shiro 暗号鍵を速やかに更新してください。

安全でない JMX 設定

JMX リモートアクセスが十分な認証なしで有効になっています。攻撃者がアプリケーションの JMX サービスにリモート接続し、コマンド実行を達成する可能性があります。

リモート JMX 接続を無効にするか、安全な認証情報を使用してください。

安全でない Rhino 設定

Rhino フレームワークには危険なプロパティが含まれており、攻撃者がリモートコード実行を悪用する可能性があります。

Rhino を最新バージョンにアップグレードし、SafeStandardObjects を使用して Rhino コンテキストを定義し、JavaScript エンジンが Java コードを呼び出すのを防ぎます。

以下は、SafeStandardObjects を使用して Rhino コンテキストを定義する例です:

 package com.aliyun.sample;

  import org.mozilla.javascript.Context;
  import org.mozilla.javascript.Scriptable;

  public class RhinoSecurityExample {
      public static void main(String[] args) {
          Context ctx = Context.enter();
          // Scriptable scope = ctx.initStandardObjects(); // 安全ではありません
          Scriptable scope = ctx.initSafeStandardObjects(); // 安全です
          ctx.setOptimizationLevel(-1);
          String str = "var test={};";
          str += "test.call=function(){return 'Successful!';};";
          str += "test.call()";  // Java の呼び出しではなく、JavaScript の結果のみを返します
          try {
              // JavaScript コードを渡して実行します
              Object result = ctx.evaluateString(scope, str, "", 1, null);
              System.out.println("JavaScript execution result: " + result);
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              Context.exit();
          }
      }
  }

安全でない Spring 設定

Spring Actuator で特定のエンドポイント (heapDump、env、restart、refresh、trace、jolokia、h2-console など) が有効になっており、機密情報の漏洩やリモートコード実行を引き起こす可能性があります。

特別なシナリオで必要とされない場合は、これらの機能を無効にしてください。

脆弱なログイン認証情報

アプリケーションには脆弱なログインパスワードがあり、攻撃者がブルートフォース攻撃でシステムにアクセスし、機密情報を取得したり、サーバーへのアクセス権を得たりする可能性があります。

アプリケーションのパスワードを速やかに複雑なパスワードに変更してください。

安全でない JNDI 設定

アプリケーションには安全でない useCodebaseOnly/rmi-trustURLCodebase/ldap-trustURLCodebase パラメーター設定があり、JNDI インジェクションに対して脆弱である可能性があります。

JDK を最新バージョンにアップグレードしてください。アップグレードできない場合は、アプリケーションの起動時に次の起動パラメーターを追加してください:

-Djava.rmi.server.useCodebaseOnly=true -Dcom.sun.jndi.rmi.object.trustURLCodebase=false -Dcom.sun.jndi.ldap.object.trustURLCodebase=false

安全でない XML エンティティ設定

XML 外部エンティティ解析が有効になっており、アプリケーションが XXE 攻撃にさらされる可能性があります。

特別なシナリオで必要とされない場合は、外部エンティティを無効にしてください。

データベースの脆弱なパスワード

アプリケーションは脆弱なパスワードを使用してデータベースに接続しており、攻撃者がこれを悪用してデータベースに接続し、機密情報の漏洩やリモートコード実行を引き起こす可能性があります。

データベース接続パスワードを速やかに複雑なパスワードに変更してください。