テクノロジーの発展と共に、サイバー攻撃による被害事例が増えつつあります。
サイバー攻撃の中でも、さまざまな被害をもたらしているのが「OSコマンドインジェクション」です。多くの企業が運用しているシステムやサービスに対しても、OSコマンドインジェクションへの対策が求められます。
そこで今回は「OSコマンドインジェクションとは何か」について、基本からわかりやすくお伝えします。OSコマンドインジェクションの被害事例や対策方法も紹介するので、セキュリティに関心がある方はぜひご覧ください。
- もくじ
1.OSコマンドインジェクションとは
OSコマンドインジェクションとは、システムやサービスのプログラムを稼働させるサーバー上で、不正な「OSコマンド」を実行させる攻撃手法です。検索フォームなどから不正なOSコマンドをインジェクション(注入)するため、このように呼ばれます。
OSコマンドとは、コンピューターを制御するOS(オペレーティングシステム)上で、ファイル操作などを実行できる命令文のことです。WindowsやmacOS、Linuxといった主要なOSは、操作を行うためのOSコマンドを基本的にサポートしています。
OSコマンドは、サーバー上に存在する「シェル」というプログラムによって実行します。OSコマンドインジェクションでは、不正なOSコマンドが作成されるような入力データをサーバーに送り、シェルに実行させるのです。
ユーザーの入力内容をもとにOSコマンドを作成・実行する機能がある場合、OSコマンドインジェクションの標的となります。裏を返せば、OSコマンドを実行させない機能・実行できない環境では、OSコマンドインジェクションのリスクはほとんど生じません。
1-1 OSコマンドインジェクションの手口
ここでは「ファイル出力機能」を例にして、OSコマンドインジェクションの手口を見ていきましょう。あるサービスではユーザーの作業データを、ユーザー自身が指定した名前でファイル出力できるものとします。
このとき、echoコマンドを使ってファイルを出力していたと仮定しましょう。このサービスでは、ユーザーの入力内容をもとに次のようなechoコマンドを作成・実行して、ファイルを出力していました。
echo "作業データ" > 出力するファイル名
たとえば、ファイル名に「file; rm -rf /」と入力されたとします。これをもとに作成されたOSコマンドは、次のとおりです。
echo "作業データ" > file; rm -rf /
ファイル名の途中にセミコロン(;)が含まれているのがポイントです。セミコロンは、OSコマンドの区切りを意味するため、そこでechoコマンドが終了してしまいます。
また、直後にある「rm -rf /」は、サーバーのファイルを全て削除するコマンドです。つまり、セミコロンの後にあるrmコマンドがサーバーで実行されると、重要なファイルが失われてしまう恐れがあります。
このように、不正なOSコマンドをサーバーで実行させる攻撃がOSコマンドインジェクションです。
1-2 悪用されるOSコマンドの例
OSコマンドインジェクションでは、さまざまなOSコマンドが攻撃に悪用されます。前述の例も含めて、悪用される代表的なOSコマンドをまとめました。
ファイル操作系のOSコマンドが主に用いられることがわかります。
コマンド名 | 主な機能 |
---|---|
ls または dir | フォルダの内容を表示する |
cat | ファイルの内容を表示する |
rm または del | ファイルを削除する |
chmod | ファイルの権限を変更する |
mv | ファイルやフォルダを移動または名称変更する |
echo | データをファイル出力する |
OSコマンドインジェクション対策が不十分な場合、こうしたOSコマンドを実行されかねません。たとえば、重要なファイル情報を不正に取得・削除されたり、悪質なファイルをダウンロードさせられたりする恐れもあります。
1-3 SQLインジェクションとの違い
OSコマンドインジェクションと混同されやすいサイバー攻撃に「SQLインジェクション」があります。SQLインジェクションとは、データベースの操作に用いる言語「SQL」の命令文を不正に作成・実行させて、悪質なデータベース操作を図る攻撃手法です。
OSコマンドインジェクションではOSコマンドが攻撃の軸となりますが、SQLインジェクションではSQLが攻撃の軸となります。大半のシステムやサービスはデータ管理にデータベースを扱っているため、SQLインジェクションの対策も欠かせません。
なお、SQLインジェクションについて詳しくは、次の記事を参考にしてください。
2.OSコマンドインジェクションの原因
OSコマンドインジェクションは、あらゆるシステムやサービスで成立するわけではありません。OSコマンドインジェクションが成立してしまう原因を把握しておきましょう。
2-1 外部プログラムを呼び出す関数を使用している
システムやサービスのプログラムで「外部プログラムを呼び出す関数」を使用している場合、OSコマンドインジェクションのリスクが生じます。
こうした関数は、ユーザーが入力したデータをシェルに渡して、OSコマンドを実行させる場合があるためです。
たとえば、Web開発に用いられる「PHP」のexec()関数は、指定したOSコマンドを実行できます。ユーザーからの入力内容をexec()関数にそのまま渡している場合、不正なOSコマンドが実行される恐れがあります。攻撃者から見れば格好のターゲットでしょう。
2-2 ユーザーが入力した情報を検証せず受け渡している
外部プログラムを呼び出す関数を使用している場合でも、適切なデータを受け渡していれば問題はありません。反対に、ユーザーが入力した情報を検証せずに上記のexec()関数などへ受け渡している場合、不正なOSコマンドが実行される恐れがあります。
基本的に、ユーザーの入力データを直接OSコマンドの一部として指定するのはNGです。外部プログラムを呼び出す関数を使用する場合は、後ほど紹介する対策方法を取り入れるようにしましょう。
3.OSコマンドインジェクション攻撃により懸念される被害【事例付き】
OSコマンドインジェクションによる被害事例は数多く報告されており、多くの企業が被害を受けているのが現実です。ここでは、OSコマンドインジェクションで懸念される被害を、事例を交えて紹介します。
3-1 情報漏えい
OSコマンドインジェクションには、情報漏えいの大きなリスクがあります。たとえば、catコマンドを実行されると、ファイルの内容を表示されてしまいます。サーバーに格納された重要なファイルの情報を、OSコマンドにより盗み見られてしまうのです。
あるテレビ局の事例では、ホームページの応募フォームをOSコマンドインジェクションに悪用されてしまい、最大で約43万件もの個人情報が漏えいしたと見られています。このような情報漏えいは顧客に迷惑をかけるだけでなく、企業の信頼失墜にもつながります。
3-2 ファイルの改ざん
OSコマンドインジェクションによって、ファイルを改ざんされるリスクもあります。たとえば、echoコマンドで偽ファイルを出力して、元のファイルをrmコマンドで削除する、といったことも場合によっては可能です。重要なファイルを改ざんされると、システムの稼働にも支障をきたしかねません。
ある学術系メディアの事例では、ホームページがOSコマンドインジェクション攻撃を受けて、Webページのファイルを改ざんされました。その結果、トップページへのアクセスに障害が生じる事態となりました。
3-3 マルウェアへの感染
OSコマンドインジェクションによって、マルウェア(悪意を持って作られた不正なソフトウェア)に感染するリスクもあります。たとえば、Linuxサーバーでは多くの場合、ファイルのダウンロード機能を持つcurlコマンドを使えます。このコマンドを実行させることで、攻撃者が用意したマルウェアをサーバーにダウンロードさせることも可能です。
マルウェアの例としては「ランサムウェア」が挙げられます。ランサムウェアに感染すると、ファイルを暗号化して使えなくされ、身代金を要求されてしまいます。サーバーがこうしたマルウェアに感染すると、社内ネットワークを介して被害が拡大しかねません。
3-4 攻撃の踏み台にされる
OSコマンドインジェクションでサーバー自体を乗っ取られ、攻撃の踏み台にされるリスクもあります。たとえば、catコマンドなどで管理者の認証情報を取得されると、攻撃者が管理者権限での操作権を獲得してしまいます。その結果、サーバーをさまざまな攻撃に悪用されてしまうでしょう。
例として、他サイトへ大量のリクエストを送って障害を発生させたり、悪質なメールを第三者へ送信したりするケースが挙げられます。踏み台にされた企業に攻撃の意図はなかったとしても、被害を受けた企業から損害賠償を請求される恐れがあります。
4.代表的なOSコマンドインジェクション対策
OSコマンドインジェクションによる被害を防ぐためには、適切な対策方法を知ることが大切です。ここでは、代表的なOSコマンドインジェクション対策方法を3つ紹介します。
4-1 シェルの利用回避
根本的な解決策として、シェルの利用を回避することが理想です。つまり、シェルを介してOSコマンドを実行する関数を使わないようにします。そもそもシェルでOSコマンドを実行しなければ、OSコマンドインジェクションは成立しません。
たとえば「Perl」でファイルを開く場合、open()関数を使うとシェルを介して不正なOSコマンドが実行される恐れがあります。しかし、sysopen()関数であればシェルを実行する機能を直接的に提供していないため、ファイルを開く際にシェルが実行される心配はありません。そのため、OSコマンドインジェクションを回避可能です。
プログラミング言語によって、シェルを利用する関数は異なります。ファイル操作などを標準関数で行う場合は、シェルの利用有無を必ず確認しましょう。
4-2 バリデーション
OSコマンドを作成する前の段階で「バリデーション」を行うことも効果的といえます。バリデーションとは、ユーザーが入力した内容の妥当性をチェックすることです。
たとえば、ファイル名の欄に入力されたデータに、特殊な文字が含まれていないかチェックします。特殊な文字があればエラーを表示して、サーバー側へ送信できないようにするのです。そうすれば、そもそも異常なOSコマンドの断片がサーバー側へ送られません。
バリデーションは、ブラウザ側・サーバー側の両プログラムで行えます。双方で不正な入力内容をチェックすることで、よりOSコマンドインジェクションのリスクを軽減できるでしょう。
4-3 エスケープ処理
不正なOSコマンドが作成されないように、ユーザーの入力内容に「エスケープ処理」を施すことも効果的です。エスケープ処理とは、特殊な機能を持つ文字を別の文字に置き換えて、無害化することを指します。
たとえばOSコマンドでは、セミコロン(;)の後に別のOSコマンドを入力される恐れがあります。しかし、セミコロンの前にバックスラッシュ(\)を付ける、文字列を引用符("や')で囲む、などのエスケープ処理を施せば、セミコロンの無害化が可能です。
ただし、セミコロンなどの入力をシステムやサービスとして許容したい場合、エスケープ処理によって機能が阻害されてしまいます。そもそもOSコマンドの実行を前提とするケースなどでは、別の方法を採用しましょう。
多くのプログラミング言語では、データにエスケープ処理を施せる関数が提供されています。開発言語に合わせた関数を用いて、エスケープ処理を取り入れるとよいでしょう。
5.効率的にOSコマンドインジェクション対策を行うには
OSコマンドインジェクションに対策するために、システムやサービスの入力項目を1つひとつ精査するのは非常に骨の折れる作業です。
また、サイバー攻撃のリスクはほかにも多数あり、単にシェルの実行を回避するだけで不安を100%取り除くことはできません。
OSコマンドインジェクションをはじめとする多くのサイバー攻撃に対して確実に対処したい場合は、脆弱性診断サービスの活用がおすすめです。広範なサイバー攻撃や対策方法を熟知したセキュリティのプロに脆弱性をチェックしてもらうことで、労力をかけず高精度にOSコマンドインジェクションを含む脆弱性を特定できるでしょう。
なお、当サイトを運営するバルテスでも、Web・モバイル・IoTデバイスなどの幅広いIT資産の脆弱性診断サービスを提供しています。ツールによる効率性の高い診断と、プロによる確実性の高い手動診断を組み合わせたサービスです。
「自社で脆弱性診断を行えるか不安がある」「労力をかけずに高品質な診断結果を得たい」という方は、ぜひご利用ください。
また、継続的にOSコマンドインジェクション等の攻撃を防ぐためにはWAFの導入も検討しましょう。
WAFとは、ネットワークを介した攻撃を防ぐ、Webアプリケーションに特化したセキュリティ対策です。ファイアウォールやIPSでは防ぎきれなかった不正アクセスを判別し、Webアプリケーションを保護できる強みがあります。
WAFを通信の経路上に配置することで、ユーザーからのリクエストを検査して、OSコマンドインジェクション等の攻撃を検出し、防御します。
バルテスでもクラウド型のWAFサービスを提供しています。良心価格で使いやすいツールとなっていますので、まずはトライアルからお試しください!
まとめ
OSコマンドインジェクションとは、システムやサービスのサーバー上で不正なOSコマンドを実行させる攻撃手法です。
OSコマンドインジェクション攻撃を受けると情報漏えいやマルウェアの感染など、さまざまな被害を受ける懸念があります。
OSコマンドインジェクションによる被害を防ぐためには、適切な対策方法を知り、脆弱性に対処することが大切です。OSコマンドインジェクション対策を講じる際には、今回の内容をぜひ参考にしてください。