コマンドインジェクションとは

2018.06.06

Webセキュリティ

Cost-Comparison-of-CloudWAF

悪意のある第三者からWebサイトやWebアプリケーションを守るには、Webセキュリティ対策を考える必要があります。サイバー攻撃のひとつ、コマンドインジェクションとは何か。コマンドインジェクションによって起こり得る被害や対策についてご説明します。

目次

1.コマンドインジェクションの仕組み

コマンドインジェクションはOSコマンドインジェクションとも呼ばれ、サーバを構築するOSに脆弱性がある場合に、悪意のある第三者がその脆弱性を悪用して不正にコマンド処理を実行させるものです。まずはコマンドインジェクションの仕組みについて見てみましょう。

1-1.外部からのコマンド入力を受け付けてしまう脆弱性

Webサーバとして機能するためのOSはインストールしたプログラムやシステムとは別でコマンドを入力することで処理を実行します。本来、管理権限を持つユーザーでなければ、コマンドを入力し処理されることはありませんが、外部からの入力を必要とするWebアプリケーションやプログラムを介して、OSに直接命令を与え、不正に実行されてしまうことがあります。

1-2.シェルを悪用することで不正に操作する

OSが命令を受け、処理するためのシェルは非常に強力であり、システムやプログラムの根幹を成すものです。管理権限を持つユーザーIDやパスワードは厳密に管理され、アクセス権や実行権限などの付与も適正に行われています。しかし、OS内で実行するプログラム言語のコードの取扱いが適切でないと、外部から入力されたパラメータをコマンドとして取扱い、シェルに渡してしまい、意図しない不正な操作をされてしまいます。

1-3.悪意のある第三者に権限を奪われる

不正な操作によってシェルに命令を実行させることができるということは、管理権限を持つユーザーIDやパスワードが無くても、悪意のある第三者がサーバ内のデータや権限を自由にできる恐れがあり、コマンドインジェクションによって本来閲覧できないデータを盗み見られることで、管理者権限を奪われてしまうことがあります。悪意のある第三者からのサーバ攻撃は、一つの技術を利用するだけでなく、複数の技術を利用して、管理権限を奪うことで、本来のサーバの持ち主や管理者に被害を加えます。

2.コマンドインジェクションで起こり得る被害

OSのシェルに不正な命令を入力されることで、実際にどのような被害を受けるのか。悪意のある第三者は、自分の身元を明かさないまま、管理権限を奪取したサーバを利用して、さらにサーバへ攻撃を仕掛け、被害を拡大させようとします。

2-1.情報の漏えい

IT技術やインターネットは、個人や組織間でスムーズに情報のやり取りができるようになりました。悪意のある第三者は、本来であれば得られない情報を手に入れることで、自らの利益にしたり、被害を与えたりするのです。昨今、ニュースなどでも報じられているような個人情報の漏えいは典型的な被害です。

2-2.サイトの改ざんやウイルスの感染

サーバの管理権限を奪われて、サイトを改ざん、マルウェアを設置されてしまうと、第二、第三の被害者を増やすことになってしまいます。もし、悪意のある第三者に乗っ取られたサーバが、公的機関や大企業の公式ページだった場合、何も知らずにアクセスしてしまったユーザーが次々にマルウェアに感染してしまいます。また、直接的にデータを書き換えられてしまうことで、誤った情報の発信、不適切な文言や画像の表示など、ユーザーへ不快感を与え信頼の失墜にも繋がることもあります。

3.コマンドインジェクションを防ぐための対策

コマンドインジェクションによってOSに不正な処理を実行させないためにはどうするべきかを考える必要があります。どのような対策を取るべきなのか。どのような対策があるのか見てみましょう。

3-1.コマンドを利用するシステムの実装は避ける

サーバの管理権限が適切だとしても、作成したサービス・プログラムによってコマンドを受け付けてしまい処理してしまう可能性があります。実際にはシェルコマンドを直接利用するようなサイト構築、Webアプリケーションはそう多くはないと思いますが、何らかのシステムを作成する時、プログラム言語に合わせて、誤ってコマンドを受け付けてしまうようなことはないか、シェルにコマンドを送ってしまう可能性がないかをチェックし、自ら脆弱性を作らないようにしましょう。

3-2.外部入力からのシェルを利用不可にする

サーバ内のプログラムを経由してシェルにコマンドが送られた時にどのような挙動になるのかを把握しましょう。サーバ攻撃の多くはごく当たり前のデータの送受信や規格、システムを構築するプログラムの基礎を狙っており、入力を受け付けるフォームやアドレスバーから入力できるURLなどにパラメータを仕込むことで、強引にデータを受け取らせようとします。サービスのドメイン内のIPや、実作業をする管理権限を持つ人のIPなどを管理して、外部からのシェル操作が利用不可になるように努めることも大切です。

3-3.不正な入力やコマンド実行を監視・検知する

コマンドインジェクションの恐ろしい点は、入力されたコマンドを処理すること自体は、OSの基本的な動作であることです。サーバ内の全てのデータを削除するコマンドを送られれば、全てのデータを削除するのがシェルやOSの仕組みです。問題なのはサーバの管理者、サービス提供者ではなく、悪意のある第三者によって入力されたコマンドを受け付けて処理してしまうことです。サーバへのアクセスの監視や管理、意図しないコマンドやパラメータを含む入力を検知し、接続元の遮断やブラックリスト化などを含め、Webセキュリティを強化すること、既知の脆弱性については排除することが大切です。

まとめ

コマンドインジェクションについて、そして起こり得る被害と対策などのご説明をしました。コマンドインジェクションの対策についてはご説明したものだけでなく、プログラムやサーバのOSによって対応が変わってきます。サイバー攻撃への対策、Webセキュリティの向上を考える時に必要なのは、一つの攻撃手法への対策にとらわれずに、考え得る限りの対策を練ることです。個人や組織を問わず、サービス提供者がユーザーへ被害を与えないように配慮するだけでなく、自らが被害を受けたりしないようにWebセキュリティに興味を持ち、知識や経験を積み上げることが大切です。

この記事と一緒に読まれています