OS Command Injectionの攻撃手法と対策
OS Command Injectionとは、アプリケーションがOSコマンドを実行する機能を提供したり、同等の機能を実装したりする際に、悪意のあるコマンドを実行させる攻撃手法のこと。攻撃者がサーバー上で任意のコマンドを実行し、管理権限を奪ったり、データを盗んだり、破壊したり、さらなる攻撃の踏み台にされたりすることが可能になる。
攻撃方法の例
<?php
$filename = $_GET['file'];
system("cat " . $filename);
?>
このコードは、file
パラメータの値をそのまま実行しているため、file=sample.txt; cat /etc/passwd
というリクエストを送信すると、/etc/passwd
の内容が表示されてしまう。
ファイルの読み書きだけでなく、wget
コマンドなどでマルウェアをダウンロードして実行させることや、別の攻撃をするための踏み台として利用されたり、計算資源を盗用しマイニングプログラムを実行させたりなど、強力な攻撃を行うことが可能になる。
対策
原則として、そもそも外部コマンドを実行する設計にしないことが望ましい。コマンドの代わりにランタイムのAPIを使用するなど。
ユーザー入力に適切なバリデーションやエスケープを行うことで、実行できるコマンドを制限したり、意図しない実行をしないようにする。
最低限の権限で実行することで、必要以上のコマンドが実行されないようにする。
以上のような対策が考えられる。