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のアップグレードとダウングレード」をご参照ください。
前提条件
- アプリケーションセキュリティ機能を構成するサーバー上のSecurity Centerエージェントがオンラインです。 詳細については、「サーバーのセキュリティステータスの表示」および「エージェントのトラブルシューティング機能を使用する」をご参照ください。
- RAMユーザーが使用されている場合、AliyunYundunWAFFullAccessおよびAliyunYundunSASFullAccessポリシーはRAMユーザーにアタッチされます。 RAMユーザーに権限を付与する方法の詳細については、「RAM ユーザーへの権限付与」をご参照ください。
アプリケーションセキュリティ機能の設定と有効化
ステップ1: アプリケーションを追加する
手順2: アプリケーションまたはコンテナのアプリケーションセキュリティ機能を有効にする
アラートの表示
攻撃タイプ
次の表は、アプリケーションセキュリティ機能が検知できる攻撃の種類と、それぞれの攻撃を防御するための解決策を説明したものです。
攻撃タイプ | 説明 | 対応策 |
---|---|---|
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が攻撃者によって制御されている場合、攻撃者は、アプリケーションが実行されているサーバーに悪意のあるリンクのクエリを実行させ、悪意のあるクラスをロードさせる可能性があります。 これにより、サーバー上で任意のコードが実行されます。 |
|
安全でないプロトコルの使用 | サーバーがアクセスする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環境では効果がありません。 実際の攻撃が検出された場合、攻撃者は外部防御を突破し、アプリケーションの内部環境に侵入して危険な操作を実行する可能性があります。 アプリケーションは、多数の実際の攻撃を有していない可能性がある。 ただし、実際の攻撃が検出された場合は、攻撃を傍受するか、脆弱性をタイムリーに修正する必要があります。