アプリケーション保護機能は、ランタイムアプリケーション自己保護(RASP)技術を活用して、アプリケーションの実行時における攻撃を検出し、防御します。コードの変更は不要です。アプリケーションが稼働するホストまたはコンテナ環境に RASP エージェントをデプロイするだけで、未知の脆弱性を悪用するほとんどの攻撃手法に対して堅牢なセキュリティ保護を実現できます。
仕組み
アプリケーション保護は RASP 技術を用いて、アプリケーション内の重要な関数にフックし、アプリケーションが他のシステムとリアルタイムでどのように連携しているかを監視します。不審な動作を検知すると、現在の実行コンテキストに基づき、攻撃を特定・ブロックします。これにより、Web アプリケーションに対するアプリケーション脆弱性、ゼロデイ脆弱性、およびインメモリ Web シェル攻撃を効果的に防御できます。
適用範囲とメリット
アプリケーション内部のセキュリティ強化:トラフィックの発信元ではなく、アプリケーションの動作そのものに焦点を当てることで、ノースサウスおよび East-West の両方の脅威に対応します。アプリケーション起動時に自動的に有効化され、デフォルトでアプリケーションを安全に保つ「最後の防衛線」となります。
複雑なエンコーディングや暗号化トラフィックへの対応:RASP はアプリケーション全体の実行コンテキストを可視化できます。リクエストがいかに難読化されていても、アプリケーションが最終的に実行する処理は変わりません。ID および動作が一致しない場合、RASP は異常を検知します。ネットワーク周辺機器では暗号化トラフィックを検査できないのに対し、RASP はアプリケーション内部から完全に復号されたリクエストデータにアクセス可能です。
誤検知および偽陰性が少ないゼロデイ脆弱性への防御:RASP はアプリケーション内部の重要な関数が処理するデータを分析し、実行不可能な攻撃は無視します。これにより、誤検知および偽陰性が大幅に削減されます。ゼロデイ脆弱性においても、攻撃の入り口や手法がどれほど巧妙であっても、攻撃者は重要な関数の実行を回避できません。このため、RASP はこれらの攻撃を確実に遮断できます。
攻撃元の追跡、脆弱性の特定、および修正支援:RASP は、オリジナルの攻撃ペイロードおよびコードの呼び出しスタックを含む詳細な攻撃チェーンをセキュリティチームおよび開発チームに提供します。これにより、脆弱性の特定、再現、および修正が容易になります。
運用オーバーヘッドが小さい:デプロイメントは非常にシンプルで、コンソール経由でアプリケーションを接続するだけです。ルールのメンテナンスや更新は一切不要です。
制限事項
本機能は Java および PHP アプリケーションのみをサポートします。Alibaba Cloud Elastic Compute Service (ECS) インスタンス、第三者のクラウドサーバー、および Security Center エージェントがインストール済みのオンプレミスサーバーでご利用いただけます。サポート対象のオペレーティングシステムは、以下の表をご参照ください。
オペレーティングシステムの種類 | サポート対象のオペレーティングシステム |
Windows(64 ビット) |
|
Linux(64 ビット) |
|
機能
攻撃検出(Java アプリケーション)
以下の表には、アプリケーション保護が検出およびブロック可能な攻撃タイプと、推奨される防御策を示します。
攻撃タイプ | 説明 | 防御策の推奨事項 |
JNI インジェクション | JNI インジェクションは、ランタイムアプリケーション自己保護(RASP)をバイパスする一般的な手法です。コード実行権限を取得した攻撃者は、Java Native Interface(JNI)関数を用いて悪意のあるダイナミックリンクライブラリを読み込み、Java レイヤーのセキュリティ保護を回避し、悪意のある行為を隠蔽します。 | サーバーにコード実行脆弱性が存在する可能性があります。脆弱な箇所を特定し、コード実行機能を制限してください。 |
SQL インジェクション | SQL インジェクションは、ページリクエストまたは Web フォームのクエリ文字列に SQL コマンドを挿入し、サーバーが任意の SQL ステートメントを実行するよう誘導する攻撃です。攻撃者は、Web フォームに SQL ステートメントを入力することで、脆弱なウェブサイトからデータを抽出できます。 | SQL インジェクションは、通常 SQL ステートメント内の文字列連結によって引き起こされます。可能な限り、入力パラメーターに対してプリコンパイル済みステートメントを使用してください。あるいは、ホワイトリストまたはブラックリストを用いてパラメーターの連結を制限してください。 |
XXE | XML 外部エンティティ(XXE)インジェクションは、XML パーサーが外部エンティティを処理する際に発生します。攻撃者はこれを悪用して任意のファイルを読み取ったり、コマンドを実行したり、内部ネットワークへの攻撃を開始したりできます。 | XML 解析時に外部エンティティの読み込みが必要かどうかを確認してください。必要でない場合は、XML パーサーの構成で外部エンティティの処理を無効化してください。 |
悪意のある DNS クエリ | 悪意のある DNS クエリは、複数の方法で悪用されます。攻撃者は DNS プロトコルを用いて内部ネットワークの制限をバイパスし、機密情報を流出させることができます。また、DNS クエリを用いて、サーバーサイドリクエストフォージェリ(SSRF)や JNDI インジェクションなどの脆弱性を内部システムに対して探査することも可能です。 | 悪意のある DNS クエリは、サーバーがユーザー制御型パラメーターへリクエストを送信する際に発生します。これらのパラメーターをレビューし、ホワイトリストを用いて制限してください。 |
悪意のあるリフレクティブ呼び出し | RASP 自己保護モジュールは、リフレクションを介して RASP 実行時データを攻撃者が改変することをブロックします。 | サーバーにコード実行脆弱性が存在する可能性があります。脆弱な箇所を特定し、コード実行機能を制限してください。 |
悪意のあるアウトバウンド接続 | サーバーサイドリクエストフォージェリ(SSRF)により、攻撃者はサーバーから内部システムへの攻撃を偽装したリクエストを送信できます。 | SSRF の緩和策として、サーバーが初期化するリクエストのターゲットアドレス範囲を制限してください。ホワイトリストを用いて、信頼できる内部リソースへのアクセスのみを許可します。不要な外部ネットワークアクセスは無効化してください。 |
悪意のあるファイル読み取りおよび書き込み | Java はファイル I/O 操作のために RandomAccessFile クラスを提供しています。ファイルパスやコンテンツが適切に検証されていない場合、攻撃者は機密のシステムファイルを読み取ったり、マルウェアをアップロードしたりできます。 | ファイルの読み取りおよびアップロードが期待通りに動作することを検証してください。異常が発生した場合は、関連する関数コードを調査し、ブラックリストによる制限を適用してください。 |
悪意のあるファイルアップロード | Web サイトがアップロードされるファイルの種類を制限していない場合、攻撃者はマルウェアをアップロードしてサーバーの特権を昇格させ、重大な被害を引き起こす可能性があります。 | 許可されるファイルの種類を制限してください。JSP などの実行可能ファイルのアップロードをブロックしてください。 |
コマンド実行 | コマンド実行脆弱性は、サーバーがユーザー提供のコマンドをフィルター処理しないために発生し、ユーザーが任意のシステムコマンドを実行できるようになります。 | リモートコマンド実行は、多くの場合 Web シェルや不適切なサーバーコードに起因します。コマンドが実行される箇所を特定してください。Web シェルは直ちに削除してください。機能が正当である場合は、ホワイトリストを用いて許可されるコマンドを制限してください。 |
ディレクトリトラバーサル | Web サイトの誤った設定により、Web サイトのディレクトリを制限なく閲覧できるようになり、非公開情報を漏洩させる可能性があります。攻撃者はこの情報を用いてさらに攻撃を展開できます。 | ディレクトリトラバーサル操作が期待通りに動作することを検証してください。異常が発生した場合は、関連する関数コードを調査し、./ や ../ などの危険なパターンをブラックリストで制限してください。 |
インメモリ Web シェル注入 | インメモリ Web シェルは新しいタイプのマルウェアです。攻撃者は専門的な手法を用いて、WAF やホストベースの防御を回避するために直接メモリに注入します。 | サーバーにコード実行脆弱性が存在する可能性があります。脆弱な箇所を特定し、コード実行機能を制限してください。 |
任意のファイル読み取り | Web サイトが絶対パスやディレクトリトラバーサル文字を用いたファイルダウンロードまたは読み取りを許可し、ファイルパスの検証を行っていない場合、攻撃者は機密情報を取得し、サーバーを侵害できます。 | ファイル読み取りが期待通りに動作することを検証してください。異常が発生した場合は、関連する関数コードを調査し、./ や ../ などの入力パラメーターをブラックリストで制限してください。 |
スレッド注入 | スレッド注入は、RASP をバイパスする一般的な手法です。コード実行権限を取得した攻撃者は、新しいスレッドを作成して RASP の実行時コンテキストを妨害し、保護機能を弱めます。 | サーバーにコード実行脆弱性が存在する可能性があります。脆弱な箇所を特定し、コード実行機能を制限してください。 |
悪意のある添付 | Java Attach API は、実行時に動的なバイトコード変更を可能にします。攻撃者はこれを頻繁に用いて、エージェント形式のインメモリ Web シェルを注入し、検出を極めて回避しやすくなります。 | サーバーにコード実行脆弱性が存在する可能性があります。脆弱な箇所を特定し、コード実行機能を制限してください。 |
JNDI インジェクション | JNDI ルックアップ中に、攻撃者がルックアップ URL を制御できる場合、サーバーに悪意のあるクラスの取得および読み込みを強制し、任意のコード実行を可能にします。 |
|
危険なプロトコルの使用 | サーバーがユーザー制御型 URL にアクセスし、使用するプロトコルを制限していない場合、攻撃者は file や netdoc などの危険なプロトコルを用いて機密ファイルを読み取ることができます。 | URL で許可されるプロトコルを制限してください。 |
デシリアライズ攻撃 | Java のデシリアライズは、シリアル化された文字列から Java オブジェクトを再構築します。再構築されたオブジェクトに高リスクのコードが含まれている場合、攻撃者はデシリアライズ中のメンバー変数を操作して悪意のある動作をトリガーできます。 |
|
任意のファイル削除 | Web サイトのファイル削除インターフェイスがファイルパスを検証していない場合、攻撃者は絶対パスやディレクトリトラバーサル文字を用いて任意のファイルを削除し、サーバーを侵害できます。 | ファイル削除が期待通りに動作することを検証してください。異常が発生した場合は、関連する関数コードを調査し、./ や ../ などの入力パラメーターをブラックリストで制限してください。 |
式インジェクション | 式ライブラリは、実行時データの照会および処理など、豊富な機能を提供します。ただし、多くのライブラリは関数呼び出しといった高権限の操作もサポートしています。適切な制限が行われず、かつ攻撃者が式の内容を制御できる場合、任意のコードを実行できます。 | 式の入力を厳密に制限してください。ほとんどの Java 関数呼び出しをブロックしてください。問題がサードパーティ製コンポーネントに起因する場合は、直ちにパッチ適用済みのバージョンへアップグレードしてください。 |
エンジンインジェクション | Java には Rhino や Nashorn(JavaScript エンジン)、Velocity や FreeMarker(テンプレートエンジン)など、多数のサードパーティ製エンジンが存在します。これらは多くの場合、関数呼び出しといった高権限の操作をサポートしています。制限が行われず、かつ攻撃者がエンジンの入力を制御できる場合、任意のコードを実行できます。 | エンジンの入力を厳密に制限してください。ほとんどの Java 関数呼び出しをブロックしてください。問題がサードパーティ製コンポーネントに起因する場合は、直ちにパッチ適用済みのバージョンへアップグレードしてください。 |
悪意のある Beans 結合 | 一部の Java フレームワークは、実行時の Beans をリクエストパラメーターに結合する機能をサポートしています。Beans の種類が制限されていない場合、攻撃者は機密の Beans を改変してアプリケーションの動作を妨害したり、任意のコードを実行したりできます。 | 結合可能な Beans の種類を制限してください。Class や ClassLoader などの機密タイプへの改変をブロックしてください。問題がサードパーティ製コンポーネントに起因する場合は、直ちにパッチ適用済みのバージョンへアップグレードしてください。 |
悪意のあるクラス読み込み | 多くのゼロデイエクスプロイトおよび Web シェルは、悪意のあるクラス読み込みに依存しています。一度読み込まれると、攻撃者はクラス初期化時にコード実行権限を取得し、さらなる悪意のある行為を実行できます。 |
|
JSTL による任意のファイル包含 | JavaServer Pages Standard Tag Library(JSTL)は、共通のアプリケーションロジックをカプセル化した JSP タグのコレクションです。ユーザー制御型パラメーターが検証なしに JSTL タグに直接連結される場合、攻撃者は悪意のあるスクリプトを作成して任意のファイルを読み取ったり、SSRF 攻撃を開始したりできます。 | ユーザー制御型パラメーターを JSTL タグに直接連結しないでください。やむを得ず連結する場合は、パラメーターの内容に対して厳格なホワイトリスト検証を実施してください。 |
攻撃検出(PHP アプリケーション)
攻撃タイプ | 説明 | 防御策の推奨事項 |
悪意のあるファイル包含 | PHP のファイル包含脆弱性は、一般的なセキュリティ脆弱性です。攻撃者は入力の操作により、任意のファイルを包含および実行できます。この脆弱性は、 | ユーザー提供のファイルパスを検証および制限してください。攻撃者が悪意のあるパスを挿入できないよう、アプリケーションディレクトリ内の事前定義済みファイルのみを許可してください。 |
悪意のあるアウトバウンド接続 | サーバーサイドリクエストフォージェリ(SSRF)により、攻撃者はサーバーから内部システムへの攻撃を偽装したリクエストを送信できます。 | SSRF を修正するため、サーバーが初期化するリクエストのターゲットアドレス範囲を制限してください。ホワイトリストを用いて、信頼できる内部リソースへのアクセスのみを許可します。不要なアウトバウンドネットワークアクセスは無効化してください。 |
デシリアライズ | PHP のデシリアライズ脆弱性は、重大なセキュリティ問題です。攻撃者はシリアル化されたデータを操作することで、任意の関数を実行できます。この脆弱性は、 | 信頼できないデータを直接デシリアライズしないでください。 |
コールバック関数の実行 | PHP のコールバック関数には、 | PHP のコールバック関数の乱用を防止するため、 |
悪意のあるファイル読み取り/書き込み | ファイル読み取り/書き込み関数がファイルパスまたはコンテンツを制限していない場合、攻撃者は機密のシステムファイルを読み取ったり、マルウェアをアップロードしたりできます。 | ファイル読み取り/書き込み脆弱性を防止するため、ファイルパスを厳密に検証および制限してください。事前定義済みのディレクトリへのアクセスのみを許可します。アップロード前にファイルのコンテンツをスキャンし、悪意のあるコードを検出してください。 |
任意のコード実行 | 任意のコード実行脆弱性は重大です。攻撃者はサーバー上で任意のコードを実行でき、完全制御、機密データの読み取りまたは改変、データの漏洩、Web サイトの改ざん、マルウェアのインストールなどが可能になります。これは通常、アプリケーションがユーザー入力を適切に検証しなかったために発生し、攻撃者が悪意のあるコードを注入できる状態となります。 | 厳密な入力検証および出力エンコーディングを用いてください。 |
任意のファイル読み取り | ファイル読み取りインターフェイスにフィルターおよびパス制限がない場合、攻撃者は絶対パスやディレクトリトラバーサルシーケンス(例:../)を用いてファイルを読み取りおよびダウンロードできます。これにより機密情報が漏洩し、さらなる攻撃が可能になります。 | ファイル読み取りインターフェイスに厳密な入力検証およびパス制限を適用してください。ホワイトリストで検証済みのファイルへのアクセスのみを許可します。./ や ../ などの危険な入力パターンをブラックリストでブロックしてください。 |
任意のファイル削除 | ファイル削除インターフェイスにパス制限がない場合、攻撃者は絶対パスやディレクトリトラバーサルシーケンスを用いて任意のファイルを削除できます。これによりサーバーが損傷する可能性があります。 | ファイル削除インターフェイスに厳密な入力検証およびパス制限を適用してください。検証済みのファイルのみを削除できるようにしてください。./ や ../ などの危険な入力パターンをブラックリストでブロックしてください。 |
コマンド実行 | コマンド実行脆弱性により、攻撃者はオペレーティングシステムのコマンドまたはコードをバックエンドサーバーに直接注入し、完全制御を獲得できます。 | すべてのユーザー入力を厳密に検証およびフィルターしてください。未処理の入力から直接 OS コマンドを構築しないでください。可能な限り、システムコマンド実行の代わりに安全な API を使用してください。 |
ディレクトリトラバーサル | 不適切な Web サイト設定により、攻撃者が Web サイトのディレクトリを自由に閲覧できるようになり、非公開情報の漏洩やさらなる攻撃を招く可能性があります。 | 適切なサーバー権限を設定し、 |
悪意のあるファイルアップロード | ファイルアップロード機能がファイルの種類を制限していない場合、攻撃者はマルウェアをアップロードしてより高い権限を獲得し、重大な被害を引き起こす可能性があります。 | アップロードされるファイルの種類を厳密に制限および検証してください。安全なファイル拡張子のみを許可してください。.php などの実行可能拡張子をブロックしてください。サーバー側でファイルのコンテンツを再チェックし、安全性を確認してください。 |
アプリケーション脆弱性の防御
アプリケーション保護は、アプリケーション脆弱性、ゼロデイエクスプロイト、およびインメモリ Web シェルに対して効果的に防御します(下図参照)。緊急対応時には、RASP が攻撃を迅速にブロックすることで、脆弱性の修正に必要な時間を確保できます。また、リスクの発生源および影響範囲を迅速に特定するのに役立ちます。詳細については、「脆弱性の表示および対応」をご参照ください。
アプリケーション脆弱性を即座に修正できない場合、アプリケーションプロセスを RASP に接続して保護できます。検出済みの脆弱性を持つアプリケーションに RASP 保護を追加するには、以下の手順を実行してください。
Security Center コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。コンソールの左上隅で、資産が配置されているリージョンを選択します:Chinese Mainland または Outside Chinese Mainland。
[アプリケーションの脆弱性]タブで、[RASP はリアルタイム保護をサポートします]タグが付いた脆弱性は、アプリケーション保護によって保護されています。[操作]列で[すぐに保護する]をクリックします。

「アプリケーション保護アクセス」パネルで、Application Group Name ドロップダウンリストから対象のアプリケーショングループを選択し、関連するアセットを選択して、確認する をクリックします。
必要なアプリケーショングループが存在しない場合、ドロップダウンリストから [アプリケーショングループの作成] をクリックし、名前を入力してから OK をクリックできます。デフォルトでは、[防止モード] は [ブロック] に設定され、[保護ポリシーグループ] は [通常実行グループ] に設定されます。
脆弱性が検出されたアプリケーションをアプリケーション保護に接続し、脆弱性スキャンを 1 回完了すると、脆弱性の詳細ページの [未処理の脆弱性] リストにあるサーバーのステータスが Protected に変わります。
アプリケーション動作分析
アプリケーション動作分析機能は、接続されたアプリケーションをリアルタイムで監視し、動作データを収集・分析して、可視化を含むレポートを生成します。これにより、攻撃および防御の詳細を把握し、システムのセキュリティを強化できます。詳細については、「アプリケーション動作分析」をご参照ください。
インメモリ Web シェル防御(Java アプリケーションのみ)
アプリケーション保護は RASP を用いて、メモリデータをリアルタイムで分析し、インメモリ Web シェルを検出し、その注入および実行をブロックします。詳細については、「インメモリ Web シェル防御」をご参照ください。
弱点検出(Java アプリケーションのみ)
以下の表には、アプリケーション保護が検出可能なアプリケーションの弱点と、是正措置に関するアドバイスを示します。
弱点の種類 | リスクレベル | 説明 | 是正措置のアドバイス |
不適切な Fastjson 構成 | 重大 | アプリケーションで Fastjson のデシリアライズが有効になっています。攻撃者はこれを悪用してリモートコマンド実行を達成できます。絶対に必要でない限り、無効化してください。 | Fastjson の safemode を true に、または autotype を false に設定してください。 |
不適切な log4j 構成 | 重大 | log4j コンポーネントで lookup が有効になっています。攻撃者はこれを悪用して JNDI インジェクションを実行し、リモートコード実行を引き起こす可能性があります。 | log4j を最新バージョンへアップグレードするか、JAR ファイルから org/apache/logging/log4j/core/lookup/JndiLookup.class を削除してください。 |
不適切な起動パラメーター | 重大 | 攻撃者が JDWP デバッグポートにアクセスできる場合、任意のコードを実行し、リモートコード実行を引き起こす可能性があります。 | 必要でない限り、JDWP ポートを閉じるか、パブリックネットワーク上への公開を避けてください。JDWP が有効になっていないことを確認するため、常駐アプリケーションを監視してください。 |
弱い Shiro キー | 重大 | Shiro アプリケーションで弱い暗号鍵が使用されています。攻撃者はこれをクラックしてデシリアライズ攻撃を実行し、リモートコード実行を達成できます。 | アプリケーション内の Shiro 暗号鍵を直ちに更新してください。 |
不適切な JMX 構成 | 中 | 弱い認証でリモート JMX 接続が有効になっています。攻撃者はリモートから接続してコマンドを実行する可能性があります。 | リモート JMX 接続を無効化するか、強力な認証パスワードを使用してください。 |
不適切な Rhino 構成 | 中 | Rhino フレームワークには、攻撃者がリモートコード実行を実行するために悪用できる危険なプロパティが含まれています。 | まず、rhino を最新バージョンへアップグレードしてください。次に、SafeStandardObjects を用いて Rhino コンテキストを定義し、JavaScript エンジンが Java コードを呼び出すことを防止してください。 SafeStandardObjects を用いて Rhino コンテキストを定義する例を以下に示します。 |
不適切な Spring 構成 | 中 | Spring Actuator で heapDump、env、restart、refresh、trace、jolokia、h2-console などのエンドポイントが有効になっています。これにより、機密情報の漏洩やリモートコード実行が可能になる可能性があります。 | 必要でない限り、これらのエンドポイントを無効化してください。 |
弱いログイン認証情報 | 中 | アプリケーションで弱いログインパスワードが使用されています。攻撃者はブルートフォース攻撃を用いてシステムにアクセスし、機密データを盗むか、サーバーの制御を獲得する可能性があります。 | アプリケーションのパスワードを直ちに強力なものに変更してください。 |
不適切な JNDI 構成 | 低 | アプリケーションで useCodebaseOnly、rmi-trustURLCodebase、ldap-trustURLCodebase の不適切な設定が使用されており、JNDI インジェクションのリスクがあります。 | JDK を最新バージョンへアップグレードしてください。アップグレードができない場合は、アプリケーション起動時に以下の起動パラメーターを追加してください: |
不適切な XML エンティティ構成 | 低リスク | XML 外部エンティティの解析が有効になっており、XXE 攻撃にさらされる可能性があります。 | 必要でない限り、外部エンティティの使用を避けてください。 |
弱いデータベースパスワード | 低 | アプリケーションで弱いパスワードを用いてデータベースに接続しています。攻撃者はこれを用いてデータベースにアクセスし、機密データを漏洩させたり、リモートコマンド実行を達成したりする可能性があります。 | データベース接続パスワードを直ちに強力なものに変更してください。 |