security Centerのアプリケーションセキュリティ機能は、ランタイムアプリケーション自己保護 (RASP) テクノロジに基づいて開発されています。 この機能は、実行中のアプリケーションを保護できます。 アプリケーションセキュリティ機能を使用するために、アプリケーションコードを変更する必要はありません。 保護するアプリケーションに関連するプロセスにアプリケーションセキュリティエージェントをインストールするだけです。 この機能は、ほとんどの未知の脆弱性を悪用することによって起動される攻撃からアプリケーションを保護します。

アプリケーションセキュリティのしくみ

security Centerのアプリケーションセキュリティ機能は、Alibaba CloudのRASPテクノロジーに基づいて開発されています。 RASP技術は、アプリケーションの実行中に攻撃を検知し、自己防衛を行うことができます。RASPはアプリケーションに組み込まれており、アプリケーションと他のシステムとの間の相互作用をリアルタイムで監視するための重要な機能をフックします。 アプリケーションで疑わしい動作が発生すると、RASPはコンテキストに基づいて攻撃を識別してブロックします。 アプリケーションセキュリティ機能は、Javaアプリケーションでのみ使用できます。

制限事項

アプリケーションセキュリティ機能はパブリックプレビュー中です。 Security CenterのAdvanced、Enterprise、Ultimateエディションのみがこの機能をサポートしています。 これらのエディションを使用しない場合は、この機能を使用する前に、Security CenterをAdvanced、Enterprise、またはUltimateエディションにアップグレードする必要があります。 Security Centerの購入とアップグレードの詳細については、「セキュリティセンターの購入Security Centerのアップグレードとダウングレード」をご参照ください。

前提条件

アプリケーションセキュリティ機能の設定と有効化

ステップ1: アプリケーションを追加する

  1. Security Centerコンソールにログインします。 左側のナビゲーションウィンドウで、[リスク管理] > [アプリケーションセキュリティ] を選択します。
  2. [アプリケーションセキュリティ] ページで、[設定] タブをクリックします。
  3. [新しいアプリケーション] をクリックします。 表示されるダイアログボックスで、追加するアプリケーションの名前と注釈を入力し、[OK] をクリックします。

    After you add an application, the default policy is applied to the application. デフォルトの保護モードはMonitorです。 [操作] 列の [保護戦略] をクリックすると、デフォルトポリシーに関する情報が表示されます。 デフォルトポリシーを使用しない場合は、次の手順を実行してデフォルトポリシーを変更できます。

    1. [設定] タブのアプリケーションリストで、アプリケーションを見つけ、[操作] 列の [保護戦略] をクリックします。
    2. [保護戦略] パネルでパラメーターを変更し、[OK] をクリックします。
      パラメーター 説明
      保護モード
      • Monitor: 攻撃を監視します。 アプリケーションの実行は影響を受けません。 攻撃が検出されると、アラートが生成されます。 このアラートの処理方法[モニター] です。
      • ブロック: アプリケーションに対する攻撃を監視およびブロックし、リスクの高い操作を監視します。 攻撃がブロックされると、アラートが生成されます。 For this alert, Processing method is Block.
      • 無効化: アプリケーションのアプリケーションセキュリティ機能を無効にします。 攻撃は監視またはブロックされません。
      検出タイムアウト 攻撃検出の最大期間。 有効な値: 1 ~ 60000 単位:ミリ秒。 デフォルト値:300。 指定された期間に達すると、検出ロジックが完了していなくても、元のビジネスロジックが続行されます。 We recommend that you use the default value.
      ソースIP判断方法

      ソースIPアドレスを取得するメソッド。 [デフォルト] を選択した場合、送信元IPアドレスを記録する標準リクエストヘッダーの値に基づいて送信元IPアドレスが取得されます。 ソースIPアドレスを記録する標準リクエストヘッダーには、X-Real-IP、True-Client-IP、およびX-Forwarded-Forが含まれます。

      [ヘッダーを定義する値から取得] を選択した場合、システムはカスタムヘッダーの値に基づいて送信元IPアドレスを優先的に取得します。 システムがカスタムヘッダーの値に基づいてソースIPアドレスを取得できない場合、値Defaultが有効になります。
      検出タイプ 検出する攻撃の種類。 デフォルト設定のままにすることを推奨します。 デフォルト設定を維持するには、[すべての選択] を選択します。 詳細については、「攻撃タイプ」をご参照ください。

手順2: アプリケーションまたはコンテナのアプリケーションセキュリティ機能を有効にする

  1. [設定] タブのアプリケーションリストで、アプリケーションを見つけ、[操作] 列の [アクセス管理] をクリックします。
  2. 表示されるパネルで、[アクセスガイド] または [コンテナーの追加] タブをクリックします。 次に、タブに記載されている手順を実行して、RASPエージェントをインストールし、アプリケーションまたはコンテナーを再起動します。
    または、[レコードのプッシュ] タブの [エージェントのプッシュ] をクリックして、アプリケーションが実行されているサーバーにRASPエージェントをプッシュし、サーバーにエージェントをインストールすることもできます。
    次のリストは、RASPエージェントの互換性を示しています。
    • JDK: JDKのバージョンは6以降である必要があります。
    • Middleware server: エージェントは、ミドルウェアの種類やバージョンについて、特に要求していない。 サポートされているミドルウェアには、Tomcat、Spring Boot、JBoos、WildFly、Jetty、Resin、Oracle WebLogic Server、WebSphere Application Server、WebSphere Liberty、Netty、GlassFish、および中国のベンダーによって開発されたミドルウェアが含まれますが、これらに限定されません。
    • オペレーティングシステム: Linux、Windows、およびmacOSのタイプのオペレーティングシステムがサポートされています。
    アプリケーションまたはコンテナを再起動する前に、アプリケーションまたはコンテナのランタイム環境に基づいて関連する展開を完了する必要があります。
    次の表に、さまざまなランタイム環境でのデプロイのパラメーター設定を示します。 パラメーターは、アプリケーションを手動でデプロイするために使用されるJVMパラメーターを指します。 アプリケーションのミドルウェアが表に記載されていない場合は、Alibaba Cloudテクニカルサポートに連絡することを チケットを起票できます。
    ランタイム環境 パラメーター設定
    Linux上のTomcat

    次の設定を {TOMCAT_HOME}/bin/setenv.shファイルに追加します。

    JAVA_OPTS="$JAVA_OPTS -javaagent:/{user.workspace}/rasp/rasp.jar"

    Tomcatバージョンがsetenv.sh設定ファイルをサポートしていない場合は、{TOMCAT_HOME}/bin/catalina.shファイルを開き、上記の設定をJAVA_OPTSに追加します。

    WindowsのTomcat
    次の設定を {TOMCAT_HOME}/bin/catalina.batファイルに追加します。
    "JAVA_OPTS=% JAVA_OPTS % -javaagent:/{user.workspace}/rasp/rasp.jar" 
    上記の設定が有効にならない場合は、次の設定を {TOMCAT_HOME}/bin/catalina.batファイルに追加します。
    "CATALINA_OPTS=-javaagent:/{user.workspace}/rasp/rasp.jar" を設定する
    桟橋
    次の設定を {JETTY_HOME}/start.ini設定ファイルに追加します。
    -- exec -javaagent:/{user.workspace}/rasp/rasp.jar
    Spring Boot -javaagentパラメーターをSpring Bootプロセスの起動コマンドに追加します。
    java -javaagent:/{user.workspace}/rasp/rasp.jar

    アプリケーションまたはコンテナを保護するためにアプリケーションセキュリティ機能を使用したくない場合は、RASPエージェントをアンインストールできます。 RASPエージェントをアンインストールするには、[アンインストールガイド] タブに記載されている手順を実行します。

アラートの表示

  1. Security Centerコンソールにログインします。 左側のナビゲーションウィンドウで、[リスク管理] > [アプリケーションセキュリティ] を選択します。
  2. [アプリケーションセキュリティ] ページで、[アラート] タブをクリックして、アラートに関する情報を表示します。

    [アラート] タブのドーナツチャートには、アプリケーションのアプリケーションセキュリティ機能が有効になった後のアプリケーションの動作と、アプリケーションに対する攻撃の統計が表示されます。 ページ下部のリストには、各攻撃の詳細が表示されます。 詳細には、攻撃の種類、URL、動作データ、および処理方法が含まれます。

    • アプリケーションの動作の統計を表示する

      [適用される動作統計] セクションには、アプリケーションセキュリティ機能によって監視されるアプリケーションの動作と動作タイプが表示されます。 動作タイプは、通常の動作と攻撃です。

    • 攻撃統計の表示

      [攻撃統計] セクションには、アプリケーションセキュリティ機能によって検出された攻撃と攻撃の種類が表示されます。

    • 攻撃の詳細を表示

      アプリケーションセキュリティページの下部にあるリストには、各攻撃の詳細が表示されます。 リストでは、各攻撃の時間、種類、URL、動作データ、および処理方法を表示できます。 攻撃の詳細を表示することもできます。 攻撃の詳細を表示するには、攻撃を見つけて、[操作] 列の [表示] をクリックします。 詳細 パネルで、脆弱性の詳細、要求の詳細、サーバーの詳細などの詳細を表示します。

攻撃タイプ

次の表は、アプリケーションセキュリティ機能が検知できる攻撃の種類と、それぞれの攻撃を防御するための解決策を説明したものです。

攻撃タイプ 説明 対応策
JNIインジェクション Java Native Interface (JNI) インジェクションは、RASPテクノロジをバイパスする一般的な方法です。 攻撃者がコードを実行する権限を取得した後、攻撃者はJNI関数を使用して外部の悪意のあるダイナミックリンクライブラリを呼び出すことができます。 これにより、攻撃者はJavaレイヤーのセキュリティ保護を回避し、特定の悪意のある動作を隠すことができます。 サーバーにコード実行の脆弱性がある可能性があります。 脆弱性の場所を確認し、コードを実行する権限を制限します。
SQL インジェクション SQLインジェクション攻撃は、SQLステートメントをwebリクエストまたはwebフォームのクエリ文字列に挿入し、サーバーにSQLステートメントを実行させます。 攻撃者は、webフォームにSQL文を挿入することで、セキュリティの脆弱性が存在するwebサイトのデータを取得できます。 SQLインジェクションは、SQL文を連結することによって発生します。 入力パラメーターをプリコンパイルするか、ホワイトリストとブラックリストを使用して連結パラメーターを制限します。
XXEインジェクション XXEインジェクションは、XML外部エンティティインジェクションの略です。 XMLファイルが外部エンティティを参照する場合、攻撃者は悪意のあるコンテンツを構築して、任意のファイル読み取り、コマンド実行、および内部ネットワーク攻撃を引き起こす可能性があります。 アプリケーションがXMLファイルを解析するときに外部エンティティを読み込む必要があるかどうかを確認します。 そうでない場合は、XML解析構成で外部エンティティを無効にします。
悪意のあるDNSクエリ 攻撃者は複数のメソッドを使用して、悪意のあるDNS (Domain Name System) クエリを悪用できます。 攻撃者は、DNSプロトコルを使用して機密情報を内部ネットワークから持ち出す可能性があります。また、攻撃者はDNSプロトコルを利用して、内部ネットワークシステムにSSRF(Server-Side Request Forgery)やJNDI(Java Naming and Directory Interface)などの脆弱性が存在するかどうかを確認することができます。 悪意のあるDNSクエリは、ユーザー制御パラメーターに対するサーバー要求によって発生します。 パラメーター設定を確認し、ホワイトリストを設定します。
Malicious reflection call RASPの自己保護モジュールは、攻撃者が実行中にリフレクションを使用してRASPデータを変更することを禁止します。 サーバーにコード実行の脆弱性がある可能性があります。 脆弱性の場所を確認し、コードを実行する権限を制限します。
SSRF SSRFは、攻撃者がサーバー側のアプリケーションにHTTPリクエストを実行させることにより、webサイトの内部システムを攻撃することを可能にするwebの脆弱性です。 SSRFは、入力パラメータに対するサーバ要求によって引き起こされる。 パラメーター設定を確認し、ホワイトリストを設定します。
悪意のあるファイルの読み取りと書き込み Javaは、ファイルの読み取りおよび書き込み操作用のRandomAccessFileクラスを提供します。 このクラスを使用してファイルの読み書きを行っても、ファイルパスやファイルの内容を制限しない場合、攻撃者が機密性の高いシステムファイルを読み取ったり、トロイの木馬ファイルをアップロードしたりする可能性があります。 期待どおりにファイルを読み取り、アップロードできるかどうかを確認します。 例外が発生した場合は、関数コードを確認してブラックリストを設定します。
悪意のあるファイルのアップロード Webサイトで提供されるファイルアップロード機能では、ファイルの種類が制限されていない場合、攻撃者はトロイの木馬ファイルをアップロードすることでサーバーに対するより高い権限を取得する可能性があります。 これは深刻な害を引き起こします。 アップロードできるファイルの種類を制限し、実行権限を持つJakarta Server Pages (JSP) ファイルなどのファイルのアップロードを禁止します。
コマンド実行 コマンド実行の脆弱性により、攻撃者はサーバー上で任意のシステムコマンドを実行できます。 ほとんどの場合、リモートコマンドの実行は、Webシェルまたはサーバーの危険なコードによって引き起こされます。 コマンドの実行場所を確認してください。 コマンドの実行がWebシェルによって引き起こされる場合は、Webシェルを適時に削除します。 コマンドを実行してサーバーに通常の機能を実装する場合は、実行できるコマンドを制限するようにホワイトリストを設定します。
ディレクトリトラバーサル ウェブサイトのディレクトリは、ウェブサイトの構成上の欠陥のために任意に閲覧される可能性がある。 これにより、プライバシー情報が開示される。 攻撃者は、開示された情報を使用してWebサイトを攻撃できます。 Webサイトディレクトリが期待どおりに移動できるかどうかを確認します。 例外が発生した場合は、関数コードを確認し、「. /」や「 .. /」などの関連コマンドを制限するようにブラックリストを設定します。
メモリーホース注射 メモリーホースは、新しいトロイの木馬の技術です。 攻撃者は、何らかの特殊な技術的手段でトロイの木馬をメモリに注入し、Webアプリケーションファイアウォール(WAF)やホスト防御の検知を効果的に回避することができます。 サーバーにコード実行の脆弱性がある可能性があります。 脆弱性の場所を確認し、コードを実行する権限を制限します。
任意ファイルの読み取り ウェブサイトが提供するファイルのダウンロードや読み込み機能において、絶対パスやディレクトリトラバーサル文字を使用してファイルの読み込みやダウンロードを行い、ファイルパスが制限されていない場合、攻撃者はこの脆弱性を利用して機密情報を取得し、サーバーを攻撃することが可能です。 Check whether you can read files as expected. 例外が発生した場合は、関数コードを確認し、"./" や "../" などの入力パラメーターを制限するようにブラックリストを設定します。
弱いデータベースパスワード データベースパスワードが弱い場合、攻撃者はブルートフォース攻撃を開始することでパスワードを取得できます。 その後、攻撃者はデータベースからデータを盗み、システム権限を取得できます。 より複雑なパスワードを使用してください。
スレッド注入 スレッド注入は、RASP技術をバイパスする一般的な方法です。 攻撃者がコードを実行する権限を取得した場合、攻撃者はスレッドを作成してRASPにランタイム環境のコンテキストを失わせる可能性があります。 この場合、RASPの防御能力が損なわれる。 サーバーにコード実行の脆弱性がある可能性があります。 脆弱性の場所を確認し、コードを実行する権限を制限します。
悪意のあるアタッチAPI Attach APIは、実行中のアプリケーションのバイトコードを動的に変更するために使用できるJava技術です。攻撃者は、この技術を利用して、エージェント型のメモリホースを注入することができます。この方法は非常に欺瞞的です。 サーバーにコード実行の脆弱性がある可能性があります。 脆弱性の場所を確認し、コードを実行する権限を制限します。
JNDIインジェクション アプリケーションがJNDIクエリを開始したが、クエリURLが攻撃者によって制御されている場合、攻撃者は、アプリケーションが実行されているサーバーに悪意のあるリンクのクエリを実行させ、悪意のあるクラスをロードさせる可能性があります。 これにより、サーバー上で任意のコードが実行されます。
  • この脆弱性がサードパーティのコンポーネントによって引き起こされる場合は、できるだけ早い機会にコンポーネントをアップグレードする必要があります。
  • この脆弱性がJNDIクエリの自己記述コードによって引き起こされる場合は、安全でないプロトコルでのクエリを禁止するようにクエリURLを制限する必要があります。
安全でないプロトコルの使用 サーバーがアクセスするURLがユーザー制御可能で、URLプロトコルがアプリケーションで制限されていない場合、攻撃者はFileやNetDocなどの安全でないプロトコルを介してサーバー上の機密ファイルを読み取る可能性があります。 URLプロトコルを制限します。
デシリアル化攻撃 Java逆シリアル化は、一連のバイトをJavaオブジェクトに復元するプロセスです。 Javaオブジェクトに高いリスクを引き起こす可能性のあるコードが含まれている場合、攻撃者はJavaオブジェクトのメンバー変数を制御して、非シリアル化プロセス中に攻撃を開始できます。
  • 最も早い機会に脆弱性が検出されたコンポーネントをアップグレードします。
  • 脆弱性が修正されたコンポーネントの公式バージョンがリリースされていない場合は、一時的に逆シリアル化を無効にします。

よくある質問

アプリケーションセキュリティ機能によって保護できるアプリケーションの種類は何ですか?

アプリケーションセキュリティ機能によって保護できるのは、Javaアプリケーションだけです。

アプリケーションのセキュリティ機能はアプリケーションの実行に影響しますか?

アプリケーションのセキュリティ機能により、パフォーマンス、互換性、安定性を適切に制御できるため、実行中のアプリケーションへの影響はほとんど無視できます。 実際のテストでは、CPUオーバーヘッドは1% 未満、メモリオーバーヘッドは30 MB未満、応答時間 (RT) は1 ms未満です。 アプリケーションセキュリティ機能では、Monitor、Block、Disableの保護モードと、ソフトヒューズ機構を提供します。これにより、実行中のアプリケーションへの干渉を最小限に抑えることができます。

アプリケーションセキュリティ機能を使用してアプリケーションを保護するにはどうすればよいですか?

アプリケーションセキュリティ機能は、トラフィック特性に基づく従来の検出技術よりも、攻撃検出に対する偽陽性率を低くする。 アプリケーションセキュリティ機能によって検出された攻撃を重視することを推奨します。 アプリケーションのアプリケーションセキュリティ機能を有効にすると、デフォルトで保護モードとしてMonitorが選択されます。 アプリケーションが一定期間安定して実行された後、保護モードをMonitorからBlockに変更できます。

アプリケーションセキュリティページに攻撃データが表示されないのはなぜですか。

この問題は、以下の理由により発生する可能性があります。
  • アプリケーションは、アプリケーションセキュリティ機能によって保護されていません。 アプリケーションの [操作] 列の [アクセス管理] をクリックし、関連ガイドに従ってアプリケーションに関連するプロセスにRASPエージェントをインストールした後、プロセスを再起動しないか、一部のプロセスのみを再起動します。
  • 実際の攻撃は検出されません。 アプリケーションセキュリティ機能は、従来のファイアウォールとは異なり、実際の攻撃のみを記録します。従来のファイアウォールは、パケット内の悪意のある攻撃特性の存在が検出されると攻撃を報告する。 ただし、悪意のある攻撃特性の存在は、実際の攻撃を示すものではありません。 たとえば、PHPの脆弱性を悪用する攻撃要求は、Java環境では効果がありません。 実際の攻撃が検出された場合、攻撃者は外部防御を突破し、アプリケーションの内部環境に侵入して危険な操作を実行する可能性があります。 アプリケーションは、多数の実際の攻撃を有していない可能性がある。 ただし、実際の攻撃が検出された場合は、攻撃を傍受するか、脆弱性をタイムリーに修正する必要があります。