ケータイ用語の基礎知識
第688回:コマンドインジェクション とは
(2014/12/9 11:56)
OSへの命令文を紛れ込ませたデータを送り込む攻撃
コマンドインジェクションは、英語で“command injection”と書きます。「command」とは命令、「injection」とは、注入・注射というような意味を持つ単語です。その名の通り、コンピューターが、ユーザーからの入力を受け付ける際、入力データにOSやミドルウェアへの命令文を紛れ込ませ、不正な操作を行うこと、あるいはそのような攻撃を許すセキュリティ上の脆弱性のことを言います。
一般的にセキュリティ上の脆弱性とは、第三者から操作できてしまう「リモートコマンド実行」や「任意のコマンドの実行」ができること、あるいは、メーカーが意図しないような「ユーザーの権限の昇格」を可能にしたりというような“ソフトウェアの弱点”のことです。
スマートフォンでは、たとえば、システム領域にデータを書き込む、といった形で、携帯電話としての機能を阻むような操作はできないようになっています。電話をかける画面では、電話番号を入力できるよう「0~9までの数字」、あるいは「*」「#」といった記号しか入力できません。また、アドレス帳において、端末内のファイル名を表示するようなコマンドを登録しても、名前の代わりにファイル名が表示されてしまう、というようなことはありません。それぞれのアプリで、危険な操作が行われないように、入力されたデータをチェックし、場合によっては危険なコマンド実行を行いそうな部分を片付けて、意図しないコマンドなどが実行されないようにしているためです。
しかし、こうしたチェックの仕組みを、プログラム開発時に忘れてしまったり、あるいは特定の条件のもとでは動作しない、といった不具合が存在してしまうことがあります。こうした不具合、つまり、脆弱性を突くことでOSのコマンドを実行することが可能になるケースがあるのです。
スマートフォンの場合、ユーザーの操作するアプリは、できることがある程度限られた“ユーザー権限”で実行されるため、システムそのものに影響を与えることは少ないのですが、任意のファイルに書き込みが可能になるなどの場合、いくつかのステップを経て“特権モード”に移行できることがあります。特権モードになってしまうと、「ユーザーが触ると危険」として、OSやアプリなどが隠していた場所にアクセスできるようになってしまいます。
OSの挙動を操作するような設定ファイルにアクセスできてしまえば、OSが起動しないよう設定できてしまいます。その場合、スマートフォンは電源を入れてもソフトウェアを実行することができなくなりますから、何もできない、電話もできなければ初期化もできないというようなことになってしまいます。
スマートフォンのアプリにも脆弱性
このような脆弱性は、これまでパソコンやサーバーなどに存在する、数多く公表されています。特に、コマンドインジェクションは、Webアプリなどでメールアドレスや個人情報などのデータを入力する機能に存在することがあり、サーバー上に不正なファイルが作成されたり乗っ取られたり、あるいは情報が不正に流出したりというような問題・事件の発端となるケースもこれまでいくつもありました。
スマートフォンでは、あまり多くはありませんが、やはりコマンドインジェクションの脆弱性の存在が公表されているものがいくつかあります。スマートフォンも手のひらサイズの小さなコンピュータの一種ですので、この手の脆弱性の悪用とは無縁ではいられないわけです。
一例としては、2014年12月、情報処理推進機構(IPA)のセキュリティセンターとJPCERTコーディネーションセンターが、富士通製の端末「F-12C」「ARROWS Tab LTE F-01D」「ARROWS Kiss F-03D」「REGZA Phone T-01D」に関する脆弱性情報を公開しましたが、これらの中にOSコマンドインジェクションの脆弱性によるものがありました。具体的な内容は明らかにされていませんが、JPCERT/CCによれば、この攻撃は攻撃元区分はネットワークなどからではなく「ローカル」つまり、端末に直接悪意のユーザーが触れなければ悪用されることはありません。ですが、直接操作された場合、任意のOSコマンドを実行したり、あるいはroot権限を取得することが可能です。
これらの脆弱性に関しては、既にメーカーから対応策が提供されており、2012年のソフトウェア更新によって解消しています。このアップデートを実行済みの端末は、この脆弱性を突くOSコマンドを紛れ込ませた攻撃をスマートフォンに対して行っても、OSへの不正な命令を端末は拒絶します。つまり悪用はできないということになります。