コードインジェクションとは何か、それを回避する方法
コードインジェクションの脆弱性とは、攻撃者が悪意のあるコードを注入して実行するために悪用される可能性のある脆弱性を説明する一般的な用語です。
この脆弱性は、通常、信頼されていないデータ検証がないために発生します。 最初にコードを検証せずにコードを直接評価するアプリケーションは、この種の攻撃に対して脆弱です。
コードインジェクションは、コマンドインジェクションなどの他の脆弱性と混同されることがあります。 コードインジェクションは、攻撃者がオペレーティングシステムのコマンドの代わりにコードを注入する別の種類の脆弱性であることに注意してくださ これは、コードインジェクションの脆弱性に関して、攻撃者はアプリケーションの言語機能によって制限されることを意味します。
攻撃者の制限
このような脆弱性を悪用すると、攻撃者はアプリケーションの言語(PHP/Pythonなど)機能によって制限されます。 しかし、ほとんどの場合、攻撃者はインタプリタの機能を利用してコードインジェクションからコマンドインジェクションに移行することがで
たとえば、攻撃者がPHPコードをwebアプリケーションに挿入した場合、攻撃者はPHPインタプリタが利用できる機能によって制限されます。 インジェクション攻撃が発生すると、PHPインタプリタはインジェクションされたコードを実行し、インタプリタの機能に依存し、攻撃者はSYSTEM()やshell_execなどのPHPで利用可能なプログラム実行関数を利用してシステムコマンドを実行する可能性があります。
コードインジェクションの影響
攻撃が成功した場合の影響は、アプリケーションで使用される言語、アプリケーシ
しかし、ほとんどの場合、攻撃が成功すると、アプリケーションとそのデータの機密性、整合性、可用性が完全に損なわれる可能性があります。
例
ユーザーの入力など、信頼されていないデータをPHP eval()関数に渡すwebアプリケーションを想像してみてください。 Eval()関数は、有効なPHP構文を持ち、セミコロンで終わる限り、文字列をPHPコードとして評価します。
<?php
$バックアップ= “”;
$入力=get_GET;
eval(“\backup backup=\input input;”);
?>
アプリケーションはユーザーの入力を危険なPHP eval()関数に渡し、検証が行われていないため、アプリケーションはコードインジェクション攻撃に対して脆弱
攻撃者は、以下に示すように入力1;phpinfo();を指定することにより、この弱点を悪用する可能性があります:
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; phpinfo();
OSシステムコマンドの実行
この脆弱性を検証した後、攻撃者はコマンドの実行を可能にするインタプリタの機能を活用してシステムコマンドの実行を続行する可能性があります。 この場合、system()関数が使用されます。
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; system(‘whoami’);
whoamiコマンドは、呼び出されたときに現在のユーザーのユーザー名を出力します。 これは、アプリケーション
がユーザーの入力をeval()関数に渡すと、PHPインタプリタは
基礎となるOSでwhoamiコマンドを実行することを意味します。
攻撃者がシステムコマンドを実行すると、脆弱な
システム上で対話型シェルを獲得し、侵害されたシステムの内部ネットワーク内の他のシステムに対して他の攻撃を実行する可能性があります。
予防
使用されている言語に関係なく、以下に説明するベストプラクティス
に従うことで、コードインジェクションの脆弱性を回避できます:
- 信頼されていないデータの評価を避ける
◦ 厳密に必要な場合を除き、eval()などの安全でない関数を使用して信頼されていないデータを直接評価しないでください。 *すべてのデータを信頼されていない
として扱う§信頼されていないデータは、HTMLフォームを介して提供される入力のみを参照するわけではないことに注意し Cookie、HTTPリクエストヘッダー、アップロードされたファイルなど、ユーザーによって制御される情報は、信頼されていないものとして扱われる必要があります。
- 検証されていないデータ
◦ 常にサーバー側でユーザー入力を検証します。
◦ユーザーが日付、郵便番号、数字、電子メール
アドレスなどの特定の形式で入力を送信する場合は、ユーザーの入力が予想される形式と一致することを確認して
§アプリケーションが制限されたオプションセット内の値を期待する場合は、ホワイトリストのアプローチに従い、送信された入力が許可されたオプ
◦ たとえば、PHPインタプリタの機能は、アプリケーションが機能するために必要な最低限の機能に制限する必要があります。 これにより、攻撃者がシステムコマンドを実行することがはるかに困難になる可能性があります。 たとえば、PHPプログラム実行関数は、phpを変更することによって無効にすることができます。iniファイル。
- 静的解析
◦ 静的な分析活動を実行して、安全でない評価に関連する脆弱性を特定します。
◦ 定期的な脆弱性評価と侵入テスト活動を実行して、そのような弱点を特定し、軽減します。