≪ Today I learned. RSS購読
公開日
タグ
Security
著者
ダーシノ(@bc_rikko)

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を使用するなど。

ユーザー入力に適切なバリデーションやエスケープを行うことで、実行できるコマンドを制限したり、意図しない実行をしないようにする。

最低限の権限で実行することで、必要以上のコマンドが実行されないようにする。

以上のような対策が考えられる。