OSコマンドインジェクションの被害事例とその対策について解説
Webアプリケーションの脆弱を突いた攻撃の一種である「OSコマンドインジェクション」。攻撃によりサーバー内のファイルの閲覧、改ざん、削除、不正操作などの被害を受ける可能性があります。今回は、OSコマンドインジェクションについて詳しく解説します。
この記事で紹介している
サービスはこちら
- 目次
OSコマンドインジェクションとは?
「OSコマンドインジェクション」は、Webアプリケーションの脆弱を突いた攻撃の一種です。
「インジェクション」(injection=注入、注射)の名称が示す通り、ウェブサーバーへのリクエストにOSへのコマンド(命令文)を紛れ込ませ、不正に実行させるものです。これにより、サーバー内ファイルの改ざん、削除、流出などの被害を受ける恐れがあります。
「OSコマンドインジェクション」の仕組みを図1に示します。攻撃者はフォームなどを通じ、攻撃パターンを含む入力データをWebサーバー上にあるWebアプリケーションに送信します。Webアプリケーションでは入力データに基づきシェルに受け渡す文字列を組み立てますが、脆弱性のあるWebアプリケーションでは組み立ての際に不正なOSコマンドが含まれた文字列が生成されてしまいます。
これがシェルに受け渡されると実際にOSコマンドが実行され、ファイルの改ざん、削除、流出などが発生します。
図1 OSコマンドインジェクションの仕組み
OSコマンドインジェクションの脅威
では、OSコマンドインジェクション攻撃を受けた場合、具体的にはどのような脅威があるのでしょうか。
サーバー内ファイルの閲覧、改ざん、削除
サーバー内に保存されたファイルに対して、メールとして送信する、別のファイルで上書きする、削除する、などの操作が不正に実行されたり、個人情報等の重要なデータが漏えいする恐れがあります。
不正なプログラムのダウンロード、実行
サーバーに不正なプログラムをダウンロードしたり、実行したりすることができます。例えば、サーバーをウイルス、ボット(BOT)、バックドアなどに感染させるなどが考えられます。
他のシステムへの攻撃の踏み台
ログインID/パスワード情報などを盗んだり、権限変更などの手段でサーバーを乗っ取り、他のシステムへの不正アクセスやDDoS攻撃、迷惑メール送信などの踏み台として悪用されることがあります。
OSコマンドインジェクションの原因
Webアプリケーション上で不正なコマンドが実行されてしまう原因は、脆弱性のあるアプリケーション設計にあります。OSコマンドを呼び出すことができる言語(PHPやJava、Rubyなど)において、OSコマンドインジェクションが発生する可能性があります。
Webアプリケーションが外部プログラムを呼び出す関数などを使用している
フォームなどに入力された情報をパラメータとして受け渡し、シェルや他のプログラムを呼び出して実行するよう設計している場合、攻撃パターンを含む入力データによりOSコマンドが不正に実行されてしまいます。
入力された情報をそのままシェルや他のプログラムに受け渡している
入力された情報をチェックせず、そのまま受け渡すような設計になっている場合、入力情報に攻撃パターンが含まれていてもそのままシェルや他のプログラムに送られ、結果としてOSコマンドが実行されてしまいます。
OSコマンドインジェクションによる情報漏えい
では次に、簡単なPerlスクリプトを例として、OSコマンドインジェクション攻撃がどのように行われるかを見てみましょう。次のケースは、IPA(独立行政法人情報処理推進機構)が公開している脆弱性のあるスクリプトの例です。
参考:IPA「第6章 入力・注入対策 コマンド注入攻撃対策」
1. $to_address = cgi->param{'to_address'}; 2. $message_file = "/app/data/test.txt"; 3. system("sendmail $to_address <$message_file");
1行目でユーザーが指定した送信先アドレス「$to_address」を受け取り、2行目で本文の内容「$message_file」としてテキストファイル「test.txt」を指定し、3行目でsendmailコマンドを利用して受け取った送信先アドレスに向けてtest.txtの内容をメールします。
問題はユーザーから受け取った送信先アドレスをチェックせず、そのままsendmailコマンドのパラメータとして利用している点です。
送信先として、例えば通常のアドレス「example@example.com」を指定した場合、スクリプトは想定通りの動作をし、指定されたアドレスに定型メールを送信します。
では、送信先として「example@example.com </etc/passwd #」を指定した場合にはどうなるでしょう。アドレスの後ろの「</etc/passwd #」が図1の「攻撃パターン」にあたる部分で、「/etc/passwd」はサーバー内に保存されているパスワードリストファイルです。
Webアプリケーションで文字列を組み立てると、3行目のコマンドは「system("sendmail example@example.com </etc/passwd #<$message_file");」となります。
これにより、本来は「$message_file」の内容(test.txt)がメール送信されるところを、サーバー内の「/etc/」に保存されているテキストファイル「passwd」が送信され、パスワードの漏えいが発生するという仕組みです。「#」は「これ以降のコマンドは無視する」の意味ですので、「<$message_file」は無効となります。
同様に、消去コマンド「rm -rf」を使用すればファイルの削除、URLを指定してファイルをダウンロードする「wget」を使用すれば、サーバーへの悪意あるファイルのダウンロードが可能です。
OSコマンドインジェクションの対策
では、攻撃から自社のサーバーを保護するにはどのような手段があるのでしょうか。次に3つの方法を紹介します。
WAFサービスを導入し防御する
最も簡単で効果の高い方法は「WAF(Web Application Firewall)」を導入することです。WAFを導入すれば、従来のファイアウォールでは防ぐことが難しかった、脆弱性を狙った攻撃からWebアプリケーションへの攻撃を防ぐことができます。
シェルを利用するコマンドを使わない
そもそもシェルでOSコマンドが実行されなければ攻撃の影響はありません。そこで、あらかじめこうしたコマンドを使用しないことが根本的な解決となります。PHPで言えば、exec(), passthru(), system()、Perlで言えば、open(), system(), eval()、Pythonで言えば、os.system(), os.popen()などがこれにあたります。
エスケープ処理、サニタイジングを行う
入力データに含まれる「;」「|」「&」「<」等の危険な文字を無害な文字に置き換える処理も有効です。これはエスケープ処理、サニタイジングとも呼ばれる処理で、PHPではhtmlentities()、Perlではquotemeta()関数、Pythonではbleachというライブラリが用意されています。
また、IPAの以下のWebページでは、OSコマンドインジェクション攻撃を防ぐことのできる、安全なWebサイトの作り方について解説しています。
OSコマンドインジェクション攻撃の対策なら
低コストで多層防御できるNTTPCのクラウドWAFがおすすめ
NTTPCの「クラウドWAFセキュリティオペレーションサービス」は、クラウド型WAFに加え、ファイアウォールやIDS/IPSなどの防御機能までを実装したクラウド型のサービスです。
WAFの機能により、OSコマンドインジェクションはもちろん、クロスサイトスクリプティング、SQLインジェクション、ディレクトリ・トラバーサル、HTTPヘッダインジェクションなど、さまざまな脅威からWebアプリケーションを保護することができます。
さらに、高度で専門的なセキュリティオペレーション機能(SOC)も提供しています。
また、オプションでDDoS対策サービスも付けることができ、お客さまのWebサイトをさまざまな脅威から守ることができます。
OSコマンドインジェクションの被害事例
国内外を問わず脆弱性対策が掲載されているデータベースのJVN iPedia(脆弱性対策情報データベース)には、OSコマンドインジェクションの被害事例が掲載されています。今回はその中から3件紹介します。
<事例1>テレビ局からプレゼント応募者の個人情報が流失
2016年4月、テレビ局の委託先である運営会社が攻撃を受け、プレゼント応募者等の氏名、住所、電話番号、メールアドレスなどの個人情報が漏洩しました。攻撃はモバイル機器向けのWebアプリケーションの脆弱性を突いたもので、流出件数は最大43万件に及ぶと報道されました。
<事例2>ラジオ局からリスナーの個人情報が流失
事例1と同時期の2016年4月、ラジオ局の運営するWebサーバーが攻撃を受けました。攻撃はOSコマンドを呼び出すなど、Webアプリケーションの設計が不適切だったことによるものでした。こちらもプレゼント応募者や番組へのメッセージ送信者の個人情報が最大64万件流出したと報道されました。
<事例3>:学術情報提供会社のホームページ改竄
2021年11月、学術情報提供を提供する企業が攻撃を受け、Webページの改竄、ファイルの追加・変更などの被害が生じました。攻撃はコンテンツ管理システム「Movable Type」の脆弱性を突いたもので、ベンダーにより迅速にブロックされ、個人情報の漏えい等の被害はありませんでした。
まとめ
今回は、OSコマンドインジェクションの仕組みを具体的な実例を交えて解説するとともに、同攻撃にはどのような脅威があり、有効な対策や被害の事例について紹介しました。
自社でWebアプリケーションを利用している場合には、いま一度自社のセキュリティ対策について確認し、WAFの導入などを検討してみてはいかがでしょうか。
※ICT Digital Columnに記載された情報は、リリース時点のものです。
商品・サービスの内容、お問い合わせ先などの情報は予告なしに変更されることがありますので、あらかじめご了承ください。