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

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

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

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

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