悪意のある第三者からWebサイトやWebアプリケーションを守るには、Webセキュリティ対策を考える必要があります。
サイバー攻撃のひとつ、コマンドインジェクションとは何か。コマンドインジェクションによって起こり得る被害や対策についてご説明します。
コマンドインジェクションはOSコマンドインジェクションとも呼ばれ、サーバを構築するOSに脆弱性がある場合に、悪意のある第三者がその脆弱性を悪用して不正にコマンド処理を実行させるものです。
まずはコマンドインジェクションの仕組みについて見てみましょう。
Webサーバとして機能するためのOSはインストールしたプログラムやシステムとは別でコマンドを入力することで処理を実行します。
本来、管理権限を持つユーザーでなければ、コマンドを入力し処理されることはありませんが、外部からの入力を必要とするWebアプリケーションやプログラムを介して、OSに直接命令を与え、不正に実行されてしまうことがあります。
OSが命令を受け、処理するためのシェルは非常に強力であり、システムやプログラムの根幹を成すものです。管理権限を持つユーザーIDやパスワードは厳密に管理され、アクセス権や実行権限などの付与も適正に行われています。
しかし、OS内で実行するプログラム言語のコードの取扱いが適切でないと、外部から入力されたパラメータをコマンドとして取扱い、シェルに渡してしまい、意図しない不正な操作をされてしまいます。
不正な操作によってシェルに命令を実行させることができるということは、管理権限を持つユーザーIDやパスワードが無くても、悪意のある第三者がサーバ内のデータや権限を自由にできる恐れがあり、コマンドインジェクションによって本来閲覧できないデータを盗み見られることで、管理者権限を奪われてしまうことがあります。
悪意のある第三者からのサーバ攻撃は、一つの技術を利用するだけでなく、複数の技術を利用して、管理権限を奪うことで、本来のサーバの持ち主や管理者に被害を加えます。
OSのシェルに不正な命令を入力されることで、実際にどのような被害を受けるのでしょうか。
悪意のある第三者は、自分の身元を明かさないまま、管理権限を奪取したサーバを利用して、さらにサーバへ攻撃を仕掛け、被害を拡大させようとします。
IT技術やインターネットは、個人や組織間でスムーズに情報のやり取りができるようになりました。
悪意のある第三者は、本来であれば得られない情報を手に入れることで、自らの利益にしたり、被害を与えたりするのです。昨今、ニュースなどでも報じられているような個人情報の漏えいは典型的な被害です。
サーバの管理権限を奪われて、サイトを改ざん、マルウェアを設置されてしまうと、第二、第三の被害者を増やすことになってしまいます。
もし、悪意のある第三者に乗っ取られたサーバが、公的機関や大企業の公式ページだった場合、何も知らずにアクセスしてしまったユーザーが次々にマルウェアに感染してしまいます。
また、直接的にデータを書き換えられてしまうことで、誤った情報の発信、不適切な文言や画像の表示など、ユーザーへ不快感を与え信頼の失墜にも繋がることもあります。
コマンドインジェクションによってOSに不正な処理を実行させないためにはどうするべきかを考える必要があります。
どのような対策を取るべきなのでしょうか。
サーバの管理権限が適切だとしても、作成したサービス・プログラムによってコマンドを受け付けてしまい処理してしまう可能性があります。
実際にはシェルコマンドを直接利用するようなサイト構築、Webアプリケーションはそう多くはないと思いますが、何らかのシステムを作成する時、プログラム言語に合わせて、誤ってコマンドを受け付けてしまうようなことはないか、シェルにコマンドを送ってしまう可能性がないかをチェックし、自ら脆弱性を作らないようにしましょう。
サーバ内のプログラムを経由してシェルにコマンドが送られた時にどのような挙動になるのかを把握しましょう。
サーバ攻撃の多くはごく当たり前のデータの送受信や規格、システムを構築するプログラムの基礎を狙っており、入力を受け付けるフォームやアドレスバーから入力できるURLなどにパラメータを仕込むことで、強引にデータを受け取らせようとします。サービスのドメイン内のIPや、実作業をする管理権限を持つ人のIPなどを管理して、外部からのシェル操作が利用不可になるように努めることも大切です。
コマンドインジェクションの恐ろしい点は、入力されたコマンドを処理すること自体は、OSの基本的な動作であることです。
サーバ内の全てのデータを削除するコマンドを送られれば、全てのデータを削除するのがシェルやOSの仕組みです。
問題なのはサーバの管理者、サービス提供者ではなく、悪意のある第三者によって入力されたコマンドを受け付けて処理してしまうことです。
サーバへのアクセスの監視や管理、意図しないコマンドやパラメータを含む入力を検知し、接続元の遮断やブラックリスト化などを含め、Webセキュリティを強化すること、既知の脆弱性については排除することが大切です。
コマンドインジェクションについて、そして起こり得る被害と対策などのご説明をしました。
コマンドインジェクションの対策についてはご説明したものだけでなく、プログラムやサーバのOSによって対応が変わってきます。
サイバー攻撃への対策、Webセキュリティの向上を考える時に必要なのは、一つの攻撃手法への対策にとらわれずに、考え得る限りの対策を練ることです。
個人や組織を問わず、サービス提供者がユーザーへ被害を与えないように配慮するだけでなく、自らが被害を受けたりしないようにWebセキュリティに興味を持ち、知識や経験を積み上げることが大切です。
Webアプリケーションの脆弱性を狙った攻撃への理想的な解決方法は、Webアプリケーションを即座に修正することですが、プログラム修正はその度にコストと時間がかかることから、すぐに解決することは困難です。しかし、Webアプリケーションへの脅威は待ってくれません。
そこで、Webアプリケーションでの対策以外に、WAF(ウェブアプリケーションファイアウォール)を導入し対策する方法があります。
WAFでは、コマンドインジェクションなどのアプリケーションの脆弱性が検知・防御できるため有効な対策方法です。
リソース不足によりWebアプリケーションを最新バージョンへ更新できない場合や、すぐにセキュリティパッチを適用できない状況でも、WAFを導入することでコマンドインジェクション攻撃への対応が可能です。
なかでもクラウド型WAFは初期・運用コストが小さいため、手軽に対策できます。
クラウド型WAFも選択肢が多いですが、導入しやすいものとしておすすめするものに「攻撃遮断くん」があります。システム変更不要のため最短翌営業日で導入でき、ユーザー側での運用は一切必要ないため低価格かつ簡単に高セキュリティを実現できます。
「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。
(2018/06/06執筆、2019/10/11修正・加筆)
この記事と一緒に読まれています
HTTPヘッダインジェクションとOSコマンドインジェクションの違いと対策方法を徹底解説!
2020.01.06
セキュリティ対策
2019.11.15
セキュリティ対策
2019.11.22
用語集
2022.01.22
セキュリティ対策
2020.02.14
セキュリティ対策