OS コマンド インジェクションとは

OS コマンド インジェクションとは

インジェクション攻撃は、多くのコマンドやコードを簡単に実行できるため、ハッカーがシステムを攻撃する最も一般的な方法の 1 つです。OS コマンド インジェクションは、注意が必要なインジェクション攻撃の 1 つです。これは、システム、データベース、および Web アプリケーションの管理者が非常に真剣に受け止めるべき脆弱性を悪用します。

では、OS コマンド インジェクション攻撃とは何でしょうか。

OS コマンド インジェクションの定義

OS コマンド インジェクションは、脆弱なオペレーティング システム、プログラム、アプリケーション、データベース、またはプラグインを悪用して、悪意のある攻撃者が任意のコマンドを実行できるようにします。これは、システム コマンドを実行するために system ()exec( )などのシェル関数を呼び出すときにアプリケーションが使用するパラメーターを適切に検証およびサニタイズできない場合に発生します。

OS コマンド インジェクションの検出と悪用をよりよく理解するには、この問題を 3 つの主要なカテゴリに分けて調べると役立ちます。

1.直接コマンドインジェクション

これを攻撃者の観点から考えてみましょう。サイバー攻撃者は、アプリケーションが特定のシステム コマンドを実行していることを発見します。彼らは、予想される引数の一部として悪意のあるコマンドを入力します。その後、アプリケーションは元のコマンドを実行し、続いて悪意のあるコマンドを実行します。

攻撃者は、このような脆弱性を見つけるためにさまざまなアプローチを採用しています。これに対抗する最も簡単な方法は、オペレーティング システムを常に最新の状態に保つことです。これは、有能な IT チームと協力して行うことができます。攻撃者がコードを直接挿入する可能性があり、損害は予測できないため、システムの脆弱性を引き起こす可能性のあるすべてのアプリとプログラムを避ける必要があります。

2. 間接的なコマンド インジェクション

コードプログラミングpc

間接コマンド インジェクションの場合、攻撃者はコードやコマンドをシステムに直接入力しません。このために、彼らはシステム内の脆弱なアプリケーションまたはプログラムを使用します。この脆弱性により、攻撃者とオペレーティング システムの間にブリッジが作成されます。攻撃者は、この通信を利用して、ターゲット上で悪意のあるコードやコマンドを実行することを目指します。

攻撃者は一連のテストを実行してこの脆弱性を特定し、ソフトウェアがファイルや環境変数などの外部ソースからのデータを使用してシステム コマンドを呼び出していることを発見します。その後、攻撃者は外部ソースのコンテンツを変更するため、悪意のあるコマンドが含まれるようになります。これは、元のアプリケーションの命令と一緒に実行されます。

直接的なコマンド インジェクションと間接的なコマンド インジェクションの主な違いは、攻撃者がアプリケーションを使用してオペレーティング システムと通信することです。しかし、注射の 2 つの形式が与える可能性のある損傷に実際の違いはないため、両方に対処する必要があります。そのため、ネットワーク内のプログラムが信頼でき、必要なものであることを確認する必要があります。信頼できないアプリをデバイスに保存しないでください。

3. ブラインド コマンド インジェクション

OS コマンド インジェクションのもう 1 つのタイプは、ブラインド コマンド インジェクションです。これは、アプリケーションが HTTP 応答でコマンドからの出力を返さないことを意味します。攻撃者は、時間遅延や出力ルーティングなどのさまざまな手法を使用して、この脆弱性を悪用します。

Web サイトを検索していて、URL の「/?search=id」の値が検索ごとに変化するとします。ここでの id 値は、ユーザー ページ、製品写真のアドレス、またはサイト上の任意のページです。攻撃者は、id 値を変更することで異なる結果を得ることができます。手動で行うのは難しいですが、これには Burp Suite のようなツールがあります。その後、攻撃者はページの奇妙な点に気付きます。ID 値が返される可能性があります。結果は表示されませんでしたが、Web サイトの応答は 200 でした。これは、すべてが正常であることを示しています。このような場合、攻撃者はブラインド コマンド インジェクションを使用できます。

時間遅延などのテクニックは特に便利です。開いたページは空白になるため、応答はありませんが、特定の文字が存在する場合にのみページをロードする時間遅延に基づいて、データベースに保存されているものに関する情報を収集できる場合があります. これは手作業で行うには時間がかかりすぎますが、多くのツールで攻撃を自動化できます。

攻撃シナリオの例

コード プログラミング攻撃の例

上記のすべてを例を通して確認してみましょう。商品の在庫があるかどうかをユーザーが確認できるショッピング アプリがあるとします。以下のような URL を使用して、このすべての情報にアクセスしましょう。

example_unsafe_store.com/stockStatus?productID=245&storeID=

アプリケーションは古いレコードを照会する必要があるため、製品 ID と店舗 ID をシェル コマンド (「stockstat.pl 245 38」など) に引数として渡すことを想像してください。開発者がコマンド インジェクションに対して何のアクションも取らなければ、攻撃者は目的のコマンドを実行するための入力を送信できます。

& echo this_a_harmful_command &

このエントリが productID パラメータにある場合、アプリケーションによって実行されるコマンドは次のようになります。

stockstat.pl & echo this_a_harmful_command & 38

echo コマンドは、コマンド インジェクションを検出するだけでなく、指定された文字列が出力に表示されることを確認するための便利な方法です。「&」文字はシェル コマンドの区切り文字であるため、実行されるのは 3 つの個別のコマンドであり、次々に実行されます。その結果、ユーザーに返される出力は次のようになります。

Error -productID not found
this_a_harmful_command
38: command not found

ここで、「stockstat.pl」ファイルは、予期した引数なしでコマンドを実行したため、エラー メッセージが返されました。その後、攻撃者が挿入した echo コマンドが実行され、攻撃者は自分が入力した式を画面に表示しました。元の引数「38」は、エラーを引き起こすコマンドとして実行されました。

OS コマンド インジェクションから保護する方法

コマンド インジェクションは強力で有害な攻撃ベクトルですが、回避するためのいくつかの秘訣があります。OS コマンド インジェクション攻撃の背後にある理論的根拠は、アプリケーションを使用して特定のオペレーティング システム コマンドを実行することです。これが起こらないようにする必要があります。考慮すべき問題がいくつかあります。

  1. アプリケーションにアクセスできる人がコードを実行できないようにする必要があります。
  2. アプリケーションにアクセスできる人が、構文式を使用してサーバーにリクエストを送信できないようにする必要があります。
  3. アクセス権を持つユーザーが要求するフレーズを暗号化する必要があります。

各項目を 1 つずつ見ていきましょう。最初の問題に対する適切な解決策は、ホワイトリスト方式を使用して、アプリケーション層に到達した人が特定のコードや要求を実行できないようにすることです。あなたが特定しない人は、コードを実行できません。

2 番目の解決策は、コマンドで使用される一部のテキスト式を受け入れないようにすることです。ユーザーは数値のみを入力できます。これをホワイトリスト方式と一緒に適用すると、より安全なシステムが得られます.

3つ目は、入力文字やスペースなどの構文パラメータの暗号化についてです。その結果、ホワイトリスト方式、入力の構文チェック、および入力の暗号化により、OS コマンド インジェクションから保護されるはずです。

インジェクション攻撃は日々進化

OS コマンド、SQL、SSI、XPath など、攻撃手法の異なるインジェクション手法は多数あります。それぞれを防止しようとするのは容易ではありません。これらの攻撃はすべて日々進化しており、開発者が見落としていた小さな脆弱性を利用していることに注意してください。そのため、常に最新の状態に保ち、サイバーセキュリティの世界における現在の開発を注意深く追跡することが重要です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です