Written by 夏野ゆきか

目 次
OSコマンドインジェクションとは、Webサーバーへのリクエストの中に不正なOSコマンドを注入することで、Webサーバー側に意図しない不正な命令を実行させるサイバー攻撃です。
具体的には、お問い合わせフォームなど「Webサイトからの入力時」に、シェル機能を操作させる不正な文字列(OSコマンド)を混入することで、脆弱性をもつWebサイトで、不正操作をおこないます。
OSコマンドインジェクション攻撃が実行されると、情報漏洩、ファイルの削除や削除、マルウェア感染といった様々な被害にあう可能性があります。
今回は、OSコマンドインジェクションの概要に加え、攻撃の仕組みや被害事例、対策案について解説します。
この記事をまとめると
- OSコマンドインジェクションとは、Webサーバーへのリクエストの中に不正なOSコマンドを注入することで、Webサーバー側に意図しない不正な命令を実行させるサイバー攻撃
- 同じインジェクション攻撃に「SQLインジェクション」があるが、不正なSQL文の送信によりデータベースに攻撃を仕掛ける点で異なる。
- OSコマンドインジェクションの脆弱性が生じる主な原因として「シェルを呼び出す関数の使用」や「入力値をそのままシェルに受け渡す設計」などがある
- 攻撃を受けると、情報漏洩・サーバーに保存されるファイルの改ざんや削除・マルウェア感染・Webサーバーの乗っ取り・サイバー攻撃の踏み台にされる、といった被害が発生する
- 根本的な対策としては「OSコマンド呼び出しを使用しない」「シェルを呼び出す関数を利用しない」などがある
- その他にも「外部から入力された文字列をコマンドに含めない」「サニタイジング(エスケープ処理)を行う」などの対策が有効
OSコマンドインジェクションとは?
OSコマンドインジェクションとは、Webサイトの脆弱性を突いたサイバー攻撃の一種です。
インジェクションは「注入」という意味で、その名の通り、Webサーバーへのリクエストの中に不正なOSコマンドを注入することで、Webサーバー側に意図しない不正な命令を実行させます。
▼OSコマンドインジェクション攻撃のイメージ
出典:IPA│安全なウェブサイトの作り方 – 1.2 OSコマンド・インジェクション
具体的には、Webサイトにある入力フォーム等に、不正なOSコマンドを混入して送信します。攻撃に悪用される可能性をもつ「OSコマンド」の例として、以下のようなものがあります。
▼OSコマンドの一例
OSコマンド | 命令内容 |
---|---|
rm | 指定したファイルやディレクトリの削除 |
wget | 指定したURLのファイルをダウンロード |
cp | 指定したファイルやディレクトリをコピー |
mv | ファイルやディレクトリの移動および名称変更 |
chmod | 指定したファイル・フォルダのアクセス権限を変更 |
chown | 指定したファイル・フォルダの所有者情報を変更 |
OSコマンドインジェクション攻撃は、Webアプリケーションがシェル(コンピュータとOSを繋ぐプログラム)を呼び出し、不正なOSコマンドを引き渡すことで成立してします。
攻撃を受けた企業・組織は、情報漏洩やファイル・データベースの改ざん、マルウェア感染などの被害にあう可能性があります。
OSコマンドインジェクションの仕組み・流れ
OSコマンドインジェクション攻撃の大まかな流れは、以下の通りです。
- 攻撃者がWebサイトより、不正なOSコマンドを入力値に紛れ込ませ送信
- Webアプリケーション内で、不正なOSコマンド文字列が組み立てられる
- 送信した不正なOSコマンドがシェルに受け渡され、実行される
まず攻撃者はWebサイトの問い合わせフォームへメッセージを書き込み「ファイルを削除しろ」「ファイルの一覧を表示しろ」といった、不正なOSコマンドを紛れ込ませて送信します。
次に受け取った値から、不正なOSコマンドの文字列が組み立てられます。この不正なOSコマンド文字列がシェルに受け渡されることで、開発者が意図しないOSコマンドが、Webサーバー上で実行されてしまうのです。
OSコマンドインジェクションの脆弱性が生じる原因
OSコマンドインジェクション攻撃に悪用される「Webアプリケーションの脆弱性」とは、Webサイトやアプリに存在する“サイバーセキュリティ上の欠陥”を指します。
OSコマンドインジェクションの脆弱性が生じる原因は、以下の2つです。
- Shell(シェル)を呼び出す関数を使用している
- 入力値をそのままシェルに受け渡すような設計になっている
Shell(シェル)を呼び出す関数を使用している
Shell(シェル)とは、ユーザーとコンピュータのOSとをつなぐ役割のプログラムです。
コンピュータを操作する際、私たちが送信したOSへの命令(OSコマンド)をシェルが受け取りOSに送ることで、ユーザーの指令は各ソフトウェアに伝達されます。OSコマンドインジェクションは、このシェルを悪用することで成立します。
よって対策としては、シェルを呼び出す関数をそもそも使用しないといった方法があげられます。例えば、Perlのopen関数は、ファイルパスに「|」(パイプ)を使うことで、OSコマンドを実行できてしまいます。
参考:IPA│安全なウェブサイトの作り方 – 1.2 OSコマンド・インジェクション
入力値をそのままシェルに受け渡す設計になっている
入力した値を確認せず、そのままシェルに受け渡すような設計になっていることも原因の一つです。
外部からの入力値に不正なOSコマンドが入力されたとしても、そのままシェルに受け渡されるので、不正なOSコマンドが実行されてしまうためです。また入力値だけでなくhidden属性を使用している可能性のあるHTMLコンテンツにも、注意が必要です。
hidden属性は要素を非表示にできるため、気がつかない間に改ざんが施され、意図しないパラメータがシェルに引き渡されてしまう可能性もあります。
OSコマンドインジェクションによる被害
OSコマンドインジェクション攻撃を受けた場合、以下のような被害にあう可能性があります。
- 情報漏洩
- サーバーに保存されているファイルの改ざん、削除
- マルウェア感染
- Webサーバーの乗っ取り
- サイバー攻撃の踏み台にされる
OSコマンドの実行で、データベースやファイルシステムへのアクセス権限を奪われた場合、機密情報が漏洩する危険性があります。ログイン情報が盗まれた場合は、Webサーバー自体が乗っ取られ、システム運用が困難になるケースも考えられます。
またコマンドの内容によっては、サーバー上のファイルを勝手に改ざん・削除したり、サーバーにマルウェアをダウンロードしたりすることも可能です。
さらに、侵入したシステムを基盤にして、他のサイバー攻撃を仕掛けるための踏み台にされる可能性も考えられます。例として、複数の端末から攻撃対象のサーバーに大量のパケットを送り付ける「DDoS攻撃」や、不特定多数への「スパム/攻撃メールの送信」などがあげられます。

OSコマンドインジェクションとSQLインジェクションの違い
同じく「Webサイトの脆弱性」を悪用するインジェクション攻撃に、SQLインジェクションがあります。
SQLインジェクションは、不正なSQL文(データベースへの命令)をWebサイトからデータベースへ送り、データベース内の個人情報を盗んだり、削除・改ざんしたりといった不正操作を行う攻撃です。
一方OSコマンドインジェクションは、Webサイトの入力値にOCコマンドを紛れこませ、Webサーバーで不正な操作を実行します。
- SQLインジェクション…Webサイト・アプリケーションの脆弱性を狙った攻撃。
SQL文を送ることで、データベースのシステムを不正操作する。 - OSコマンドインジェクション…Webサイト・アプリケーションの脆弱性を狙った攻撃。
OSコマンドを送ることで、Webサーバーを不正操作する。
このように両者は類似していますが、SQLインジェクションがWebサイトのデータベースを狙った犯行であるのに対し、OSコマンドインジェクションはWebサイトのサーバーを狙う点で違いがあります。
OSコマンドインジェクションの被害事例
実際に国内で発生した、OSコマンドインジェクションの被害事例を3つご紹介します。
1.不正アクセスによりラジオ局から64万件の個人情報が流出
企業 | ラジオ放送局 |
---|---|
被害時期 | 2016年4月 |
攻撃手法 | ソフトウェアに存在していたOSコマンドインジェクションの脆弱性を利用した不正アクセス |
被害内容 | 保有する個人情報(氏名、住所、メールアドレス、電話番号などを含む)のうち、約64万件が流出した |
1つ目に紹介するのは、ラジオ放送局のWebサイトが不正アクセスされ、約64万件の個人情報が流出した事件です。流出した個人情報には、氏名、住所、メールアドレス、電話番号、性別、年齢、職業などが含まれていたことが明らかになっています。
本事件の発端となったのは、「ケータイキット for Movable Type(携帯電話やスマートフォン用にWebサイトを構築するプラグイン)」というソフトウェアで、OSコマンドインジェクションの脆弱性が存在。攻撃者はこの脆弱性を利用し、不正アクセスを行いました。
被害にあったラジオ放送局は、事件の原因となったソフトウェアを削除し、リスナーの個人情報はWebサーバー上から削除した上で、安全な場所に保管するよう対応しました。
2.大手レンタルサーバー事業者のデータベースに不正アクセス、約4万8000件の個人情報が流出
企業 | 大手レンタルサーバー事業者 |
---|---|
被害時期 | 2015年4月~2016年9月 |
攻撃手法 | データベースサーバーに存在していたOSコマンドインジェクションの脆弱性を利用した不正アクセス |
被害内容 | 解約済みの顧客含む、同社を利用した全ユーザーの個人情報約4万8000件が流出 |
2つ目に紹介するのは、大手レンタルサーバー事業者のデータベースサーバーが不正アクセスされ、個人情報約4万8000件が流出した事件です。
流出したのは、氏名や住所、電話番号、メールアドレス、契約アカウント番号・パスワードなどを含んだ4万8685件の個人情報で、うち2万809件は、クレジットカード番号も流出の可能性があるとされました。事件の要因はユーザーの契約情報を格納していたデータベースサーバーで、このサーバーにはOSコマンドインジェクションの脆弱性がありました。
被害にあった企業は再発防止のため、不正アクセスのあったカード情報を削除し、より厳格なセキュリティ基準を満たした決済代行会社に決済業務を委託。さらに、サーバーに不正なファイルを設置されることを防止するため、監視強化を図ることも表明しました。
3.学術情報提供サービスを行う企業のWebサイトが不正アクセスされ、Webサイトの一部が改ざん
企業 | 学術情報提供サービスを行う企業 |
---|---|
被害時期 | 2021年11月 |
攻撃手法 | ソフトウェアに存在していたOSコマンドインジェクションの脆弱性を利用した、不正アクセスおよび改ざん |
被害内容 | Webサイトに不正アクセスされ、Webページの構成ファイルの一部が改ざん |
3つ目に紹介するのは、学術情報提供サービスを行う企業のWebサイトが不正アクセスされ、Webサイトの一部が改ざんされた事件です。
本事件の原因は、サイト構築に使われていた「Movable Type」というソフトウェアで、このソフトウェアにOSコマンドインジェクションの脆弱性がありました。攻撃者はこの脆弱性を悪用し、WebサイトのインデックスファイルとWordPressの一部のファイルを、改ざんしたことが明らかになっています。
なお、Webサーバー上に個人情報等は保管されていなかったため、情報流出の可能性はないとされています。被害にあった企業は、原因となったソフトウェアをすべて削除するとともに、緊急の際に迅速に対応できるよう緊急連絡体制とフローを構築するなど、より一層セキュリティを強化するとしました。
OSコマンドインジェクションへの対策
ここまで見てきたように、OSコマンドインジェクションの被害を防止するためには、Webサイトやアプリケーションを運用・開発する組織側の対策が、必要不可欠となります。
以下では、OSコマンドインジェクションにおける
- 根本的な対策
- 1が難しい場合の対策
- 併用して行うとよい対策
について、それぞれ解説します。
1.根本的な対策
OSコマンドインジェクションの根本的な対策は以下の2つがあげられます。
- OSコマンド呼び出しを使用しない
- シェルを呼び出す関数を利用しない
そもそもOSコマンドの呼び出しをしなければ、OSコマンドインジェクションの攻撃を受けることはありません。OSコマンドを呼び出せる関数・メソッドを利用しないためにも、あらかじめ使用してはいけない関数・メソッドをまとめておくとよいでしょう。
OSコマンドを呼び出せる、代表的な関数・メソッドは以下の通りです。
言語 | OSコマンドを呼び出せる関数・メソッド |
---|---|
Java | ProcessBuilder(),Runtime.getRuntime().exec() |
PHP | exec(),system(),passthru(),shell_exec(), pcntl_exec(),backtick演算子 |
Perl | eval(),open(),system() |
Python | os.system(),os,popen(),subprocess.Popen,subprocess.call(),subprocess.run() |
Ruby | exec(),system(),IO.popen(),backtick演算子 |
Node.js | child_process.exec(),child_process.spawn() |
Go | exec.Command().Run() |
Scala | Process() |
また機能上OSコマンドを使用せざるを得ない場面は、シェルを呼び出す関数を使用しないことで、OSコマンドインジェクションの攻撃を防ぐことができます。
2. 1が難しい場合の対策
上記のような根本的な対策が取れない場合は、以下の対策を行うようにしましょう。
- 外部から入力された文字列をコマンドに含めないようにする
- サニタイジング(エスケープ処理)を行う
OSコマンドインジェクションは、外部からの不正なOSコマンドがシェルに渡されることで発生します。そのため、外部から入力された文字列をコマンドに含めないよう実装することで、問題を解消することができます。
また、サニタイジング(エスケープ処理)を実施するのも一つの手です。
サニタイジングとは、入力フォームの内容をチェックし、不正な文字や文字列が含まれていた場合に無害化することです。
「;」「|」「&」「<」「>」などの記号文字は、OSコマンドにおいて特殊な意味を持ちます。Webアプリケーションが、これらの記号文字を入力値として受け取り、そのままOSに渡してしまうと、意図しないOSコマンドを実行される危険性があります。
そのためサニタイジングにより、外部から入力された文字列がスクリプトコードとしての意味を持たないよう処理することで、不正なOSコマンドの実行を阻止することが可能です。
3.併用して行うとよい対策
ここまで紹介した対策とあわせて、以下のような対策を取るのもおすすめです。
- WAFを導入する
- 脆弱性診断を実施する
WAFとは、Webアプリケーションの脆弱性を悪用した攻撃からWebサイトを保護することができるセキュリティツールです。WAFを導入することで、万が一外部から不正な入力データが送信されても、検知および通信の遮断をしてくれます。
また、Webサイトにおける脆弱性診断を実施するのもよいでしょう。脆弱性診断とは、OSやWebアプリケーションに潜む脆弱性の有無を確認し、脅威の侵入口となる脆弱性の洗い出しと対策をおこなう施策です。
脆弱性診断をおこなうことで、OSコマンドインジェクションをはじめとする、WEBアプリケーションの脆弱性を悪用したサイバー攻撃を、効率的に防ぐことが可能となります。

OSコマンドインジェクション対策なら「LANSCOPE プロフェッショナルサービス」にお任せください
貴社のWebサイト・WebアプリケーションにおけるOSコマンドインジェクション対策なら、LANSCOPE プロフェッショナルサービスにお任せください。
LANSCOPE プロフェッショナルサービスでは、OSコマンドインジェクションをはじめ、SQLインジェクション、クロスサイトスクリプティング(XSS)攻撃などに有効な「Webアプリケーション脆弱性診断」を提供しています。
OSコマンドインジェクションの原因となるWebサイトの脆弱性を、国家資格をもつ弊社のエキスパートが洗い出し、有効な改善案をお伝えします。診断結果は自サイトが抱えるリスクを「点数」で可視化できます。
また、報告書には、経営層が自社サイトのリスクを把握するためのエグゼクティブサマリーや、発見された脆弱性の対策・修正提言なども含まれています。PCサイトからモバイルサイト、WebAPIなど、多様な媒体にて脆弱性を明らかにし、優先度をつけて必要な対策をお伝えします。
▼脆弱性診断の報告レポート
「Webサイトを安全に運用したい」「自社サイトのインシデントによって、業務停止や信頼損失などを起こしたくない」という開発者様・サイト運営担当者様におすすめです。
また、診断内容を重要項目に絞り、より低価格でWebアプリケーションの脆弱性診断を受けていただける「セキュリティ健康診断パッケージ」も提供しております。
まとめ
今回は、OSコマンドインジェクションとはなにか、攻撃の仕組みや流れ、被害にあわないための対策について解説しました。
本記事のまとめ
- OSコマンドインジェクションとは、Webサーバーへのリクエストの中に不正なOSコマンドを注入することで、Webサーバー側に意図しない不正な命令を実行させるサイバー攻撃
- 同じインジェクション攻撃に「SQLインジェクション」があるが、不正なSQL文の送信によりデータベースに攻撃を仕掛ける点で異なる。
- OSコマンドインジェクションの脆弱性が生じる主な原因として「シェルを呼び出す関数の使用」や「入力値をそのままシェルに受け渡す設計」などがある
- 攻撃を受けると、情報漏洩・サーバーに保存されるファイルの改ざんや削除・マルウェア感染・Webサーバーの乗っ取り・サイバー攻撃の踏み台にされる、といった被害が発生する
- 根本的な対策としては「OSコマンド呼び出しを使用しない」「シェルを呼び出す関数を利用しない」などがある
- その他にも「外部から入力された文字列をコマンドに含めない」「サニタイジング(エスケープ処理)を行う」などの対策が有効
OSコマンドインジェクションの被害を生まないためにも、攻撃の仕組みを理解し、入念な対策を行っていきましょう。
またLANSCOPE プロフェッショナルサービスでは、OSコマンドインジェクションの脆弱性対策に有効な「WEBアプリケーション脆弱性診断」を提供しています。
以下の資料では、Webアプリケーション脆弱性診断を弊社が実施する中で、よく診断される「5つの脆弱性」についてまとめました。貴社のWebサイトは大丈夫でしょうか…?ぜひあわせてご活用ください。
