悪意ある命令を防ぐ:コマンドインジェクション対策
セキュリティを知りたい
『コマンドインジェクション』って、何だか怖い名前ですが、どういうものなんですか?
セキュリティ研究家
そうだね。「コマンドインジェクション」は、悪意のある人が、ウェブサイトやアプリの隙間を見つけて、本来は実行できないはずの命令を送り込んでくる攻撃のことだよ。
セキュリティを知りたい
命令を送り込んでくる?具体的にどういうことですか?
セキュリティ研究家
例えば、ウェブサイトで名前を入力する欄があったとする。普通は文字を入力するよね?そこに、こっそりプログラムの命令文を紛れ込ませて、ウェブサイトを乗っ取ったり、情報を盗み出したりするんだ。
コマンドインジェクションとは。
安全性を高めるために、『コマンドインジェクション』について説明します。『コマンドインジェクション』とは、システムへの攻撃方法である『インジェクション攻撃』の一種です。攻撃者は、アプリケーションの弱い部分を利用し、不正なデータを入力して、それをシステムの中枢に送り込みます。これにより、システムを乗っ取ったり、悪意のあるプログラムを実行したりします。通常、アプリケーションに入力されたデータに対して、適切なチェックや無害化処理を行っていない場合、このような攻撃の対象となります。『コマンドインジェクション』の特徴は、ウェブサイトのアプリケーションに対する不正な入力を使って、システムを操作する命令(シェル)を実行することです。OWASPの定義によると、攻撃の影響がそのアプリケーションだけに留まるものは、『コード・インジェクション』に分類されます。
コマンドインジェクションとは
– コマンドインジェクションとはコマンドインジェクション攻撃とは、インターネット上のサービスやアプリケーションのセキュリティの弱点を突いて、悪意のある命令を送り込み、本来は許可されていない操作を不正に行ってしまう攻撃手法です。例として、ウェブサイトでユーザーが情報を入力するフォームを考えてみましょう。このフォームは本来、氏名やメールアドレスなどを入力してもらうためのものです。しかし、もしもこのフォームにセキュリティ上の欠陥があった場合、悪意を持った攻撃者は、情報を盗むためのプログラムの命令文などを巧妙に紛れ込ませたデータを入力できてしまうかもしれません。もしも攻撃者の企てが成功してしまうと、攻撃者はそのシステムに対して、保存されている重要な情報を読み出したり、データを書き換えたり、場合によってはシステム全体を思い通りに操作してしまうことも可能になってしまいます。このような被害を防ぐためには、ウェブサイトやアプリケーションの開発者が適切なセキュリティ対策を施しておくことが非常に重要になります。コマンドインジェクション攻撃は、適切な対策を怠ると簡単に悪用されかねない、危険な攻撃手法といえるでしょう。
攻撃手法 | 概要 | 対策 |
---|---|---|
コマンドインジェクション | Webサービス等のセキュリティの弱点をつき、悪意のある命令を送り込み、不正な操作を行う攻撃。 | Webサイトやアプリケーションの開発者が適切なセキュリティ対策を施す。 |
攻撃の仕組み
– 攻撃の仕組み
インターネット上のサービスを提供するウェブサイトやアプリケーションは、利用者からの情報を処理して様々な機能を実現しています。例えば、会員登録ページでは、入力された氏名やメールアドレスをデータベースに保存したり、検索機能では、入力されたキーワードでデータベースを検索し、結果を表示したりします。
コマンドインジェクション攻撃は、こうした利用者からの入力に対するチェックが不十分な場合に発生する攻撃です。
ウェブサイトやアプリケーションは、入力された情報を指示だと解釈して処理を行います。攻撃者は、通常の入力データに紛れ込ませて、システムに悪影響を与える命令文を送り込みます。これが「コマンド」と呼ばれるものです。
例えば、氏名を入力する欄に「山田太郎」と入力する代わりに、「山田太郎’; –」などと入力したとします。すると、アプリケーションによっては、「’;」以降が入力データとは別の命令だと誤って解釈してしまう可能性があります。
もし、アプリケーションにセキュリティ上の問題があり、入力内容を適切に処理できない場合、攻撃者が送り込んだ「コマンド」が実行されてしまいます。その結果、データベースの内容が盗み出されたり、改ざんされたり、最悪の場合はウェブサイトやアプリケーションが完全に制御されてしまう可能性もあります。
攻撃の種類 | 仕組み | 例 | リスク |
---|---|---|---|
コマンドインジェクション攻撃 | ウェブサイトやアプリが入力内容をチェックせず、命令文として実行してしまう。 | 氏名欄に「山田太郎’; –」と入力し、 ‘;’以降を別の命令と誤認させる。 | データベースの盗難、改ざん、ウェブサイトの制御権奪取 |
具体的な被害
– 具体的な被害
コマンドインジェクション攻撃が成功してしまうと、企業は様々な深刻な被害を受ける可能性があります。
まず、顧客情報や企業秘密、売上情報など、機密性の高い情報が漏洩してしまう危険性があります。攻撃者は、侵入したシステムから情報を盗み出すだけでなく、外部のサーバーに送信するよう悪意のあるプログラムを仕込むことも可能です。
また、重要なデータの改ざんや削除も大きな脅威です。顧客情報や取引履歴が書き換えられることで、業務が混乱し、顧客からの信頼を失墜してしまう可能性もあります。さらに、金銭を要求するランサムウェアに感染した場合、業務が完全に停止してしまう恐れもあります。
被害は情報漏洩やデータの改ざんに留まりません。攻撃者は、コマンドインジェクションを足掛かりにシステム全体を乗っ取ってしまう可能性もあります。システムが乗っ取られた場合、サービスの停止を余儀なくされ、経済的な損失に繋がります。さらに、乗っ取ったシステムを踏み台にして、他の企業や組織への攻撃を仕掛けることも考えられます。
被害 | 内容 |
---|---|
情報漏洩 | 顧客情報、企業秘密、売上情報などの機密情報が漏洩する危険性 |
データの改ざん・削除 | 顧客情報や取引履歴の書き換えによる業務混乱、信頼失墜、ランサムウェアによる業務停止 |
システム乗っ取り | サービス停止による経済的損失、他の企業への攻撃の踏み台 |
対策
– 対策
コンピュータを悪意のある攻撃から守るためには、様々な対策を重ねていくことが重要です。
まず、利用者からの入力は全て、悪意のあるコードが仕込まれている可能性があると考えるべきです。
そのため、プログラムは入力された情報をそのまま処理するのではなく、記号などを無害化する処理や、入力された値が適切かどうかをしっかりと確認する処理を行う必要があります。
このような対策を施すことで、不正な命令が実行されることを防ぐことができます。
また、プログラムに必要以上の権限を与えないようにすることも重要です。
仮に攻撃が成功してしまった場合でも、プログラムが扱える範囲を制限しておくことで、被害を最小限に抑えることができます。
さらに、常に最新のセキュリティ情報に注意し、システムに弱点が見つかった場合は、迅速に修正プログラムを適用することが重要です。
攻撃者は常に新しい攻撃方法を探しているので、システムの安全性を保つためには、常に最新の状態を保つ必要があります。
対策 | 説明 |
---|---|
入力バリデーション | 利用者からの入力は全て悪意のあるコードを含む可能性があると考え、無害化や値のチェックを行う。 |
最小権限の原則 | プログラムに必要以上の権限を与えないことで、攻撃による被害を最小限に抑える。 |
最新状態の維持 | 常に最新のセキュリティ情報に注意し、システムの脆弱性を修正プログラムで速やかに解消する。 |
まとめ
– まとめインターネット上のサービスを安全に利用するためには、利用者とサービスを提供する側、双方での対策が必要です。サービスを提供する側は、悪意のある命令をプログラムだと誤認させてしまう脆弱性「コマンドインジェクション」への対策が重要になります。コマンドインジェクションの対策としては、プログラムに与えられた命令が本当に実行して良いものなのか、厳密に確認する仕組みを作ることが有効です。 また、サービスを提供するプログラムを作る際には、セキュリティに関する知識を正しく学び、安全なプログラム作成を心掛ける必要があります。サービスを利用する側は、信頼できるホームページのみを利用するように心がけましょう。また、個人情報やパスワードの入力時には、入力欄が本当に正しいものなのか、送信先のホームページのアドレスを再度確認することが大切です。加えて、複数のサービスで同じパスワードを使い回すことは避け、定期的にパスワードを変更することで、より安全性を高めることができます。
立場 | 対策 |
---|---|
サービスを提供する側 | – コマンドインジェクションへの対策として、プログラムに与えられた命令が本当に実行して良いものなのか厳密に確認する仕組みを作る – サービスを提供するプログラムを作る際には、セキュリティに関する知識を正しく学び、安全なプログラム作成を心掛ける |
サービスを利用する側 | – 信頼できるホームページのみを利用する – 個人情報やパスワードの入力時には、入力欄が本当に正しいものなのか、送信先のホームページのアドレスを再度確認する – 複数のサービスで同じパスワードを使い回すことは避け、定期的にパスワードを変更する |