Today we’re discussed the Operating System Command Injection vulnerabilities (オペレーティング システムのコマンド インジェクションの脆弱性). これらはどの程度の脅威なのでしょうか。 どのようにしてこれらの脆弱性を防ぐことができるのでしょうか。 NexDASTはどのようにそれらを改善するのに役立つのでしょうか? これらの質問にすべて詳しくお答えします!
オペレーティングシステムのコマンドインジェクションとは?
コマンドインジェクションとコードインジェクションを混同しないようにしてください。 悪意のあるコードがプログラミング言語に注入されるのは、コード・インジェクションの脆弱性です。 OS コマンドインジェクションは、ハッカーが注入するペイロードの一種です。 ペイロードは、OSのコマンドとして実行されます。
ハッカーは、アプリケーションのサーバー上で一時的なオペレーティング システム コマンドを実行し、その結果、アプリケーションとデータが侵害される危険性があります。 OS コマンドインジェクションの脆弱性は、しばしばハッカーによって踏み台として利用されます。 これは、OS コマンドインジェクションの最悪のシナリオであり、OS コマンドインジェクションから始まり、ホスティングインフラの他の部分の悪用につながり、結果として他のシステム全体が公開されることになります。 これらのプログラミング言語はすべて、ユーザーがシステムシェルコマンドを呼び出すことを可能にします。 このため、OS のコマンドインジェクションに対して脆弱です。 しかし、注入された一時的なコマンドの実行は、Webサーバーの権限に依存します。 このため、コマンドインジェクションの脆弱性は、それ自体ではそれほど危険ではありません。 しかし、ハッカーは特権の昇格を悪用し、より多くの情報にアクセスすることができます。 その情報により、さらに多くの脆弱性を発見し、悪用することができます。
OS コマンド インジェクションの脆弱性の例
Web サイトからキーボードを購入したいとします。 アプリケーションはまず、欲しいキーボードが在庫にあるかどうかを確認する必要があります。 ユーザーはこの情報を、次のような URL を介して取得します:
https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22
アプリケーションは、在庫情報をユーザーに提供するようレガシー システムに要求します。 シェルコマンドを呼び出すことで、この機能を表現します。 製品 ID と店舗 ID は引数なので、シェル コマンドは次のようになります。
Keyboards.py 111 22
ユーザーは、希望のキーボードの在庫があるかどうかを確認できます。 しかし、ここで問題があります。 このアプリケーションは、OS コマンド インジェクションに対して安全ではありません。 ハッカーは、一時的なコマンドを実行する入力を送信できるようになりました。 それは、storeIDパラメータに「& echo randomstring &」のようなものです。 そして、アプリケーションはこのコマンドを実行します:
Keyboards.py & echo randomstring & 22
このコマンドは何をするのでしょうか? 与えられた文字列を出力にエコーします。 OSのコマンドインジェクションの種類をテストするための効率的な方法です。 シェルコマンドセパレータ(&)は、1つのコマンドを3つに分けます。
Error - productID was not provided
Randomstring
22: command not found
オリジナルの Keyboard.py コマンドは実行されましたが、期待された引数はありませんでした。 これがエラーメッセージが表示された理由です。 与えられた文字列(Randomstring)は出力でエコーされました。 それが注入されたechoコマンドの目的です。 しかし、22: command not found が表示されています。 なぜでしょうか? 8145>
さて、次にブラインドOSコマンドインジェクションの脆弱性について説明します。 これは、アプリケーションがコマンドからの出力をレスポンスで返さない場合に発生します。 これにもかかわらず、ハッカーはこれらの脆弱性を悪用するさまざまなテクニックを持っています。
- time delays
- redirecting output
注入されたコマンドを使用して時間遅延を引き起こすことにより、ハッカーはコマンドが実行されたかどうかを確認することが可能になります。 アプリケーションが応答するまでの時間によって、コマンドが実行されたかどうかがわかるのです。 このブラインド脆弱性を悪用するための最も効果的なコマンドの1つがPingです。 このコマンドでは、送信するICMPパケットの数を正確に指定することができます。 8145>
Redirecting output is another OS command injection exploit. 注入されたコマンドの出力を直接ファイルにリダイレクトします。 そのファイルは、ブラウザーを介して取得された Webroot 内で見つかります。
Preventing Operating System Command Injections
OS コマンド インジェクションを防ぐにはどうすればよいでしょうか? 最も簡単で効果的な方法は、ホスト OS のコマンドに shell_exec や同様の呼び出しを決して使用しないことです。 代わりに使用しているプログラミング言語で同じコマンドを適用してください。 問題は、あなたの使っているプログラミング言語に、あなたが必要とするコマンドに対応するものがない場合です。 このような場合は、入力のサニタイズ処理を行う必要があります。 シェルコマンドに値を代入する前にこの処理を行うと、より効果的です。 ホワイトリストの使用は、インジェクションに関しては常に最も安全なオプションです。
強力な入力検証の他のオプションは次のとおりです。
- 英数字の検証 (入力に空白や構文を含まない英数字のみが含まれていることを確認する)
- 数字の検証 (入力が数字であることを確認する)
- 許容値のホワイトリスト (許容値のホワイトリストに対して確認)
決してシェルメタ文字を避け、その方法で入力内容を消去しようとしないことだ。 NexDASTがOSコマンドインジェクションを防ぐのに役立つ方法
OSコマンドインジェクションを防ぐための最もシンプルで効果的な方法は、NexDASTを活用することです。 当社のブラックボックスセキュリティテストソリューションは、自動的にアプリケーションを検査します。 OS Command Injectionが検出されると、改善ガイドラインが開発者またはSecOpsチームに送信されます。 NexDASTを使えば、長くて時間のかかる手動テストは必要ありません。
NexDAST が OS Command Injection を特定した例:
vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
の部分が脆弱性です。 NexDAST はまた、この脆弱性をできるだけ効率的に修正するための修正ガイドラインを提供します。
NexDAST についてもっと知りたいですか? また、NexDAST が支援できる問題をお持ちの場合は、こちらからデモをリクエストしてください!