Command Injection Vulnerability

OS command injection(シェルインジェクションとも呼ばれます)は、攻撃者がアプリケーションを実行しているサーバー上で任意のオペレーティングシステム(OS)コマンドを実行し、通常はアプリケーションとそのすべてのデータを完全に侵害することを可能にするwebセキュリティの脆弱性です。

Webアプリケーションがシステムコマンドを実行する必要があるのはなぜですか?

webアプリケーションは、基になるホストオペレーティングシステムおよびファイルシステムと通信するために、オペレーティングシステ これは、システムコマンドの実行、別のプログラミング言語で記述されたアプリケーションの起動、またはシェル、python、perl、またはPHPスクリプトの実行に行 Windows、Unix、Linuxなどのオペレーティングシステムでは、シェルコマンドとして他のスクリプトに渡されるコマンドを実行できる関数が使用できます。 この機能は非常に便利ですが、誤って使用すると危険になる可能性があり、この記事で説明するように、webアプリケーションのセキュリティ上の問題

Webアプリケーションでシステムコマンドを使用するときに注意すべき理由

脆弱なアプリケーションでコマンドインジェクションの脆弱性を悪用することにより、攻撃者は追加のコマンドを追加したり、独自のオペレーティングシステムコマンドを挿入したりすることができます。 これは、コマンドインジェクション攻撃中に、攻撃者がwebサーバーのホストオペレーティングシステムを簡単に完全に制御できることを意味します。 したがって、開発者は、webアプリケーションを開発するときに、これらの関数のいずれかにユーザー入力を渡す方法に非常に注意する必要があります。

コマンドインジェクションの脆弱性の例

このコマンドインジェクションの脆弱性の例では、ping機能を使用しています。 ユーザ入力からシステムのpingコマンドにIPアドレスを渡す共通の機能を持つ脆弱なアプリケーションを想像してみてください。 したがって、ユーザー入力が127.0.0.1の場合、ホストオペレーティングシステムで次のコマンドが実行されます:

ping -c 5 127.0.0.1

脆弱なwebアプリケーションを扱っているため、pingコマンドから抜け出すか、攻撃者に有用な情報を返すエラーを引き起こす可能性があ その後、攻撃者はこの機能を使用して、自分の任意のコマンドを実行できます。 追加のシステムコマンドを追加する例は次のようになります。

ping -c 5 127.0.0.1; id

上記の例では、最初にpingコマンドが実行され、その直後にidコマンドが実行 したがって、ページ上のコマンド出力は次のようになります:

OSコマンドインジェクション攻撃中に、攻撃者はエラーベースの攻撃を設定することもできます。 たとえば、この場合のコードインジェクションは、通常次のようになります。

ping -c 5 "$(id)"

上記のコードインジェクションは、次のような応答を返します。

ping: unknown host uid=0(root) gid=0(root) groups=0(root)

システムコマンドインジェクションの脆弱性を防ぐ方法

攻撃者が脆弱なwebアプリケーションを悪用し、オペレーティングシステムコマンドに特殊文字を挿入するのを防ぐためには、一般的にシステムコールを避けるようにしてください。可能であれば。 いずれの場合も、絶対に必要な場合を除き、あらゆる種類のユーザー入力を避けてください。 WebアプリケーションコードがXSSやSQLインジェクションを含む他の影響の大きい脆弱性に対して脆弱でないようにするには、入力検証が常に必須です。

また、言語の設定ファイルでこの機能を無効にする必要がない場合は、攻撃者が脆弱なwebアプリケーションを介してホストオペレーティングシステム 一部の言語では、プロセスの実行を入力パラメータから分離することができます。 また、可能な入力のホワイトリストを作成し、数値idの整数のみを受け入れるなど、形式を確認することもできます。

脆弱性の分類と重大度の表

webセキュリティの傾向を最新の状態に保つ

コメントを残す

メールアドレスが公開されることはありません。