このトピックでは、攻撃統計に含まれる攻撃タイプについて説明し、対応するソリューションを提供します。
概要
次の表に、すべての攻撃タイプとそのカテゴリを示します。
| カテゴリ | 攻撃タイプ |
|---|---|
| インジェクション攻撃 | JNDI インジェクション、SQL インジェクション、コマンドインジェクション、XXE、XSS、EL インジェクション、エンジンインジェクション、JSTL ファイルインクルード |
| デシリアライゼーションとクラスローディング | デシリアライゼーション攻撃、悪意のあるクラスローディング、悪意のある Bean バインディング |
| RASP バイパス技術 | JNI インジェクション、悪意のあるリフレクション呼び出し、スレッドインジェクション、悪意のある Attach API |
| ファイルシステム攻撃 | 任意のファイル読み取り、悪意のあるファイルの読み書き、悪意のあるファイルアップロード、任意のファイル削除、ディレクトリトラバーサル |
| ネットワークベースの攻撃 | SSRF、悪意のある DNS クエリ、安全でないプロトコルの使用 |
| 永続化技術 | メモリ ホース インジェクション |
| 認証情報に対する攻撃 | 脆弱なデータベースパスワード |
インジェクション攻撃
JNDI インジェクション
説明
Java Naming and Directory Interface (JNDI) インジェクションは、攻撃者が制御できる URL を使用してアプリケーションが JNDI ルックアップを実行する際に発生します。攻撃者は、サーバーを誘導して悪意のあるエンドポイントにクエリを実行させます。これにより、サーバーは悪意のあるクラスをロードし、攻撃者は任意のコードを実行できるようになります。
ソリューション
脆弱性がサードパーティコンポーネントに起因する場合、コンポーネントを最新のパッチ適用済みバージョンにアップグレードしてください。
脆弱性が自作の JNDI クエリコードに起因する場合、クエリ URL を制限し、安全でないプロトコルでのルックアップを禁止してください。
SQL インジェクション
説明
SQL インジェクションは、攻撃者が Web リクエストのクエリ文字列やフォーム入力に悪意のある SQL 文を挿入する際に発生します。サーバーは挿入された SQL 文を実行し、攻撃者はデータベース内のデータにアクセスできるようになります。
ソリューション
SQL インジェクションは、SQL 文の文字列連結によって引き起こされます。パラメータ化クエリ (プリペアドステートメント) を使用して、入力パラメーターをプリコンパイルしてください。パラメータ化クエリが実現不可能な場合は、ホワイトリストまたはブラックリストによる検証を適用して、連結されるパラメーターを制限してください。
コマンドインジェクション
説明
コマンドインジェクションは、攻撃者がサーバー上で任意のシステムコマンドを実行できる脆弱性です。ほとんどの場合、コマンドインジェクションは、Web シェルや、ユーザー入力をシステムコマンド関数に渡す安全でないサーバー側のコードに起因します。
ソリューション
コマンドが実行される場所を特定します:
コマンド実行が Web シェルによって引き起こされた場合は、直ちに Web シェルを削除してください。
コマンド実行が正規のサーバー機能の一部である場合は、ホワイトリストによる制限を適用して、実行可能なコマンドを限定してください。
XXE
説明
XML 外部実体参照 (XXE) インジェクションは、XML パーサーが外部実体を参照する XML ドキュメントを処理する際に発生します。攻撃者は、悪意のある XML コンテンツを作成して、任意のファイル読み取り、コマンドインジェクション、または内部ネットワーク攻撃を実行できます。
ソリューション
アプリケーションが XML ドキュメントを解析する際に外部実体を解決する必要があるかどうかを確認してください。外部実体が必要ない場合は、XML パーサーの設定で無効にしてください。
XSS
説明
クロスサイトスクリプティング (XSS) は、攻撃者が Web サイトに悪意のあるスクリプトを挿入する際に発生します。挿入されたスクリプトは、影響を受けるページを訪れたユーザーのブラウザで実行されます。
ソリューション
HTML インジェクション攻撃と同様に、XSS 攻撃では攻撃者が Web ページに HTML コードを挿入できます。XSS 攻撃からアプリケーションを保護するには、厳格な入力値検証と出力エンコーディングを適用します:
入力データをフィルタリングする: 次の文字とパターンをチェックします:
'、"、<、>、on*、script、およびiframe。フォームフィールド、Cookie の値、HTTP リクエストヘッダーなど、すべてのユーザー入力ソースを検証します。データプロパティを検証する: すべての入力データの型、フォーマット、長さ、範囲、および内容をチェックします。
多層防御を適用する: クライアント側とサーバー側の両方で入力値検証とフィルタリングを実行します。
出力データをエンコードする: Web ページにレンダリングする前に、入力データを HTML エンティティやエスケープされた JavaScript などの安全な表現に変換します。データベース内の値は、Web サイト上で複数回表示されることがあります。入力値が保存時にエンコードされていても、表示前にすべての出力値を検証し、エンコードしてください。
Expression Language (EL) インジェクション
説明
Expression Language は、データクエリや動的処理などのランタイム機能を提供します。多くの Expression Language は、Java メソッドの呼び出しなどの高度な操作もサポートしています。式のコンテンツが制限されていない場合、攻撃者は式を変更して任意のコードを実行できます。
ソリューション
式の内容を厳密に制限し、Java 関数の呼び出しを無効にしてください。
脆弱性がサードパーティコンポーネントに起因する場合、コンポーネントを最新のパッチ適用済みバージョンにアップグレードしてください。
エンジンインジェクション
説明
Java は、さまざまなサードパーティの JavaScript エンジン (Rhino や Nashorn など) やテンプレートエンジン (Apache Velocity や FreeMarker など) をサポートしています。これらのエンジンは通常、Java メソッドの呼び出しなどの高度な機能を提供します。エンジンへの入力が制限されていない場合、攻撃者はエンジンが実行する悪意のあるコンテンツを注入し、結果として任意のコード実行につながる可能性があります。
ソリューション
スクリプトエンジンやテンプレートエンジンに渡されるコンテンツを厳密に制限してください。エンジンコンテキスト内での Java 関数の呼び出しを無効にしてください。
脆弱性がサードパーティコンポーネントに起因する場合、コンポーネントを最新のパッチ適用済みバージョンにアップグレードしてください。
JSTL ファイルインクルード
説明
JavaServer Pages Standard Tag Library (JSTL) は、JSP アプリケーションの共通のコア機能をカプセル化する JSP タグのコレクションです。ユーザーが制御可能なパラメーターが入力値検証なしで JSTL 式に直接連結されると、攻撃者は悪意のあるペイロードを作成し、任意のファイル読み取りや Server-Side Request Forgery (SSRF) につなげることができます。
ソリューション
ユーザーが制御可能なパラメーターを JSTL 式に直接連結しないでください。連結が必要な場合は、パラメーター値に厳格なホワイトリスト検証を適用してください。
デシリアライゼーションとクラスローディング
デシリアライゼーション攻撃
説明
Java のデシリアライゼーションは、バイトシーケンスを Java オブジェクトに復元します。デシリアライズされたオブジェクトに悪用可能なコードが含まれている場合、攻撃者はオブジェクトのメンバー変数を操作して、デシリアライゼーションプロセス中に悪意のある操作を実行できます。
ソリューション
脆弱なコンポーネントを最新のパッチ適用済みバージョンにアップグレードしてください。
パッチ適用済みのバージョンが利用できない場合は、影響を受けるデシリアライゼーション機能を一時的に無効にしてください。
悪意のあるクラスローディング
説明
ゼロデイエクスプロイトや Web シェルは、悪意のある Java クラスのロードに依存しています。悪意のあるクラスがロードされると、攻撃者はそれを初期化してコード実行権限を取得し、さらなる悪意のある操作を実行できます。
ソリューション
悪意のあるクラスが Web シェルを介してロードされた場合は、直ちに Web シェルを削除してください。
悪意のあるクラスがフレームワークの脆弱性によってロードされた場合は、フレームワークを最新のパッチ適用済みバージョンにアップグレードしてください。
悪意のある Bean バインディング
説明
一部の Java フレームワークは、ランタイムでの自動的な Bean プロパティのバインディングをサポートしています。バインド可能な Bean プロパティの型が制限されていない場合、攻撃者は機密プロパティの値を変更して、アプリケーションの動作を妨害したり、任意のコードを実行したりできます。
ソリューション
バインド可能な Bean プロパティの型を制限してください。
classやクラスローダーのプロパティなど、機密プロパティの変更を防止してください。脆弱性がサードパーティコンポーネントに起因する場合、コンポーネントを最新のパッチ適用済みバージョンにアップグレードしてください。
RASP バイパス技術
JNI インジェクション
説明
Java Native Interface (JNI) インジェクションは、Runtime Application Self-Protection (RASP) をバイパスするために使用される一般的な技術です。攻撃者がコード実行権限を取得した後、JNI 関数を使用して外部の悪意のある動的リンクライブラリを呼び出すことができます。これにより、Java レイヤーのセキュリティ保護をバイパスし、悪意のある行為を隠蔽します。
ソリューション
ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の原因を特定し、コード実行権限を制限してください。
悪意のあるリフレクション呼び出し
説明
RASP の自己保護モジュールは、攻撃者が Java リフレクションを使用してランタイム時に RASP の内部データを変更することを防ぎます。
ソリューション
ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の原因を特定し、コード実行権限を制限してください。
スレッドインジェクション
説明
スレッドインジェクションは、RASP をバイパスするために使用される一般的な技術です。攻撃者がコード実行権限を取得した後、新しいスレッドを作成して RASP が監視する実行コンテキストから脱出することができます。これにより、RASP の防御能力が低下します。
ソリューション
ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の原因を特定し、コード実行権限を制限してください。
悪意のある Attach API
説明
Attach API は、実行中のアプリケーションのバイトコードを動的に変更できる Java 技術です。攻撃者はこの技術を使用して、エージェント型のメモリ常駐型マルウェア (メモリ馬) を注入することができます。この攻撃手法は非常に巧妙です。
ソリューション
ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の原因を特定し、コード実行権限を制限してください。
ファイルシステム攻撃
任意のファイル読み取り
説明
Web サイトのファイルダウンロードまたは読み取り機能が、絶対パスまたはディレクトリトラバーサルによるファイルアクセスを許可している場合、攻撃者はこの脆弱性を悪用して機密ファイルを読み取り、機密情報を取得できます。
ソリューション
ファイルの読み取り操作が期待どおりに機能することを確認してください。異常な動作が検出された場合は、関連するコードを確認し、./ や ../ などのパストラバーサルシーケンスをブロックするためのブラックリスト制限を適用してください。
悪意のあるファイルの読み書き
説明
Java は、ファイルの読み書き操作のために RandomAccessFile クラスを提供します。ファイルパスとファイルコンテンツが適切に検証されていない場合、攻撃者は機密性の高いシステムファイルを読み取ったり、サーバーにトロイの木馬ファイルを書き込んだりする可能性があります。
ソリューション
ファイルの読み書き操作が期待どおりに機能することを確認してください。異常な動作が検出された場合は、関連するコードを確認し、機密パスへのアクセスをブロックするためのブラックリスト制限を適用してください。
悪意のあるファイルアップロード
説明
Web サイトのファイルアップロード機能がアップロード可能なファイルの種類を制限していない場合、攻撃者は JSP Web シェルなどの実行可能ファイルをアップロードして、サーバー上で昇格された権限を取得できます。
ソリューション
アップロード可能なファイルの種類を制限してください。JSP ファイルなどの実行権限を持つファイルのアップロードを禁止してください。
任意のファイル削除
説明
Web サイトのファイル削除機能が、絶対パスまたはディレクトリトラバーサルによるファイル削除を許可しており、ファイルパスが適切に検証されていない場合、攻撃者はこの脆弱性を悪用して重要なファイルを削除したり、機密情報を取得したりできます。
ソリューション
ファイル削除機能が期待どおりに機能することを確認してください。異常な動作が検出された場合は、関連するコードを確認し、./ や ../ などのパストラバーサルシーケンスをブロックするためのブラックリスト制限を適用してください。
ディレクトリトラバーサル
説明
ディレクトリトラバーサルは、設定の不備により Web サイトのディレクトリ構造を任意に閲覧できる場合に発生します。これにより、攻撃者が Web サイトをさらに侵害するために使用できる機密情報が漏洩する可能性があります。
ソリューション
ディレクトリへのアクセスが期待どおりに機能することを確認してください。異常な動作が検出された場合は、関連するコードを確認し、./ や ../ などのトラバーサルシーケンスをブロックするためのブラックリスト制限を適用してください。
ネットワークベースの攻撃
SSRF
説明
Server-Side Request Forgery (SSRF) は、攻撃者がサーバー側のアプリケーションを誘導して、任意の宛先に HTTP リクエストを送信させることができる脆弱性です。攻撃者は SSRF を使用して、インターネットから直接到達できない内部システムにアクセスできます。
ソリューション
SSRF は、サーバーがユーザーから提供された入力パラメーターに基づいてリクエストを送信する際に発生します。パラメーター値を検証し、許可された宛先に対してホワイトリスト制限を適用してください。
悪意のある DNS クエリ
説明
攻撃者は複数の方法で DNS クエリを悪用できます。攻撃者は DNS プロトコルを使用して内部ネットワークから機密データを抜き出す (DNS トンネリング) ことがあります。また、攻撃者は DNS クエリを使用して、SSRF や JNDI インジェクションなどの内部システムの脆弱性を探索することもあります。
ソリューション
悪意のある DNS クエリは、サーバーがユーザー制御のパラメーターに基づいてリクエストを送信する際に発生します。パラメーター値を検証し、ホワイトリスト制限を適用してください。
安全でないプロトコルの使用
説明
サーバーがアクセスする URL がユーザー制御可能であり、アプリケーションが URL プロトコルを制限していない場合、攻撃者は file:// や netdoc:// などの安全でないプロトコルを使用して、サーバー上の機密ファイルを読み取ることができます。
ソリューション
アプリケーションが使用を許可する URL プロトコルを制限してください。HTTP や HTTPS などの信頼できるプロトコルのみを許可してください。
永続化技術
メモリーホース注入
説明
メモリ常駐型マルウェア (メモリ馬) は、新しいファイルレスのトロイの木馬技術です。攻撃者は悪意のあるコードをアプリケーションのメモリ空間に直接注入するため、トロイの木馬はディスクにファイルを書き込むことなく動作できます。この技術は、Web Application Firewall (WAF) やホストベースの検知メカニズムをバイパスできます。
ソリューション
ご利用のサーバーにコード実行の脆弱性が存在する可能性があります。脆弱性の原因を特定し、コード実行権限を制限してください。
認証情報に対する攻撃
脆弱なデータベースパスワード
説明
データベースが脆弱なパスワードを使用している場合、攻撃者はブルートフォース攻撃によってパスワードを取得できます。その後、攻撃者はデータベースにアクセスしてデータを盗んだり、権限を昇格させてシステムレベルの権限を取得したりできます。
ソリューション
すべてのデータベースアカウントに、強力で複雑なパスワードを使用してください。