OSコマンドインジェクション|仕組みと脅威、効果的な対策を解説

「OSコマンドインジェクションとはどのような攻撃なんだろう?」
「OSコマンドインジェクションの対策は、何から取り組むべき?」

OSコマンドインジェクションは、Webアプリケーションの脆弱性を突いた攻撃の1つで、OSコマンドを不正に実行させるものです。

OSコマンドインジェクションの脆弱性を放置しておくと、情報漏えいやWebサーバーの乗っ取りなど、大きな被害に発展する恐れがあります。

本記事では、OSコマンドインジェクションの脆弱性が発生するしくみから、効果的な対策方法まで解説します。セキュリティ対策を効率よく推進していきたい方は、ぜひご覧ください。

Webアプリケーションのセキュリティ対策にお悩みの方、必見!

OSコマンドインジェクションの対策は、何から取り組むべき?

Webシステムの脆弱性をチェックし、最適な対策を実施することが大切です。 まずは、サービス紹介資料をご覧ください。

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

OSコマンドインジェクションは、入力値の中に紛れ込ませたOSコマンドを、Webアプリケーションがシェルに渡してしまうことで成立する攻撃です。

シェルとは、OSの中核であるカーネルとユーザーとを仲介するプログラムのことで、OSコマンドを受け取り、変換したコマンドをカーネルに受け渡す役割を担っています。

OSコマンドを実行するWebアプリケーションの処理において、ユーザーの入力値がそのまま使われてしまう場合、OSコマンドインジェクションの脆弱性が生じる恐れがあります。

OSコマンドインジェクションは、以下のような仕組みで成立します。

  1. 攻撃者が入力値にOSコマンドを紛れ込ませる
  2. 受け取った入力値から、シェルに渡す文字列が組み立てられる
  3. 紛れ込んだOSコマンドがシェルに渡され、実行されてしまう

WebアプリケーションにOSコマンドインジェクションの脆弱性がある場合、開発者が意図しないOSコマンドをWebサーバー上で実行されてしまう恐れがあります。

OSコマンドインジェクションによる脅威

OSコマンドインジェクション攻撃を受けると、以下のような被害が発生する恐れがあります。

  • 情報漏えい
  • ファイルの改ざん・削除
  • データベースの破壊
  • マルウェア感染
  • Webサーバーそのものの乗っ取り
  • 他の攻撃の踏み台にされる

OSコマンドインジェクションの脆弱性がある場合、さまざまなOSコマンドが実行できてしまいます。なお、実行可能なOSコマンドは、Webアプリケーションで許可されている範囲内に限定されます。

OSコマンドインジェクション エーアイセキュリティラボ

例えば、ファイルの編集・削除権限がある場合は、ファイルの改ざんや削除が実行可能です。また、権限昇格が可能な場合は、ファイルの改ざん・削除に留まらず、より高い権限を必要とするOSコマンドの実行も可能となってしまいます。

OSコマンドインジェクション攻撃を受けてしまうと、Webサーバー内に保存されているファイルの窃取や改ざん・破壊はもちろん、Webサーバーそのものの乗っ取りや、他システムを攻撃する際の踏み台にされる、といった大きな被害が想定されます。

いずれも影響範囲が大きいため、OSコマンドインジェクションには入念な対策が必要です。

Webアプリケーションの脆弱性には適切な対策を

適切なセキュリティ対策が行われていないWebアプリケーションは、脆弱性が重大な脅威になります。

IPA発表の「2023年第1四半期の脆弱性対策情報データベースJVN iPediaの登録状況」によると、脆弱性を種類別に見たときに、クロスサイトスクリプティングが最も多く、次いでSQLインジェクションが多くなっています。
 
クロスサイトスクリプティング(XSS)|影響と対策をわかりやすく解説」では、仕組みや想定される被害、また、効果的な対策方法を解説しているので、ご一読いただくことをおすすめします。

SQLインジェクションの対策|被害事例と攻撃が起こる仕組みを解説」では、SQLインジェクションに対するセキュリティ対策を「根本的な対策」と「補完的な対策」にわけて解説しています。ぜひ参考にしてみてください。

OSコマンドインジェクションの対策

OSコマンドインジェクションの脆弱性は、以下の2つの条件を共に満たす場合に生じます。

  • シェル呼び出し機能のある関数を使用している
  • 外部からの入力値をそのままシェルに渡している

シェル呼び出し機能のある関数を使用しており、かつ、任意のOSコマンドの実行を引き起こすような入力値をそのままシェルに渡す実装となっていると、OSコマンドインジェクション攻撃を受ける可能性があります。

以下では、この2つの原因を踏まえたうえで、OSコマンドインジェクションの根本的な対策方法をご紹介します。

1. OSコマンドを呼び出せる関数・メソッドを使わない

OSコマンドインジェクションの根本的な対策として「OSコマンドを呼び出せる関数・メソッドを使わない」という対策が挙げられます。

先述の通りOSコマンドインジェクションは、「シェル呼び出し機能のある関数を使う」「外部からの入力値をそのままシェルに渡す」のいずれかを解消することが対策になります。

しかし前提として、そもそも「OSコマンドを呼び出さない」実装になっていれば、原理的にOSコマンドインジェクション攻撃を受けることはありません。そのため、OSコマンドを呼び出せる関数・メソッドを使わないことで、OSコマンドインジェクションの対策になります。

OSコマンドを呼び出すことができるすべての言語において、OSコマンドインジェクションの脆弱性対策が必要です。OSコマンドを呼び出せる関数・メソッドとして、以下のような例が挙げられます。

言語 関数・メソッド
PHP exec(), system(), passthru(), shell_exec(), pcntl_exec()
Perl eval(), open(), system()
Python os.system(), os,popen(), subprocess.Popen, subprocess.call(), subprocess.run()
Java ProcessBuilder()
Ruby exec(), system(), IO.popen()

OSコマンドを実行できる関数・メソッドの利用を避けるために、「使ってはいけない関数リスト」のような開発者向けのチートシートを作って共有しておくことをおすすめします。

2. シェルの呼び出し機能がある関数を使わない

機能要件上、どうしてもOSコマンドを呼び出さざるを得ない場合には、シェルの呼び出し機能がある関数を使わない実装が求められます。シェルの呼び出し機能がある関数以外を使うことで、OSコマンドインジェクションの根本的な対策になります。

シェルには複数のコマンドを1行で指定できる機能があります。そのため、元々用意されていたOSコマンドに任意のOSコマンドを追加する形で入力値を渡せば、OSコマンドインジェクション攻撃が成立します。

シェルの呼び出し機能がある関数の使用を避けることで、シェルの機能を悪用したOSコマンドインジェクション攻撃を防ぐことができます。

対策例として、open関数ではなくsysopen関数を使う方法があります。

Perlのopen関数を使って外部のファイルを開く場合、引数として与えられるファイルパスの前後に「|」を使うことで、任意のコマンドの追加が可能です。そのため、open関数を利用している場合はOSコマンドインジェクションの脆弱性が生じる恐れがあります。open関数ではなくsysopen関数を利用すれば、シェルを呼び出すことなくファイルを開くことができます。

何らかの理由でOSコマンドを呼び出す実装にしなければならず、根本的な対策が取れない場合の代替策についてご紹介します。

根本的な対策が取れない場合

1. 入力値をコマンドラインのパラメータとして渡さない
ユーザーの入力値をコマンドラインのパラメータに渡さない実装にすることで、OSコマンドインジェクションの対策になります。

OSコマンドインジェクションは、外部からの不正な入力値がシェルに渡されることで発生する攻撃です。そのため、外部からの入力値をコマンドラインのパラメータに渡さないような実装をすることで、脆弱性を解消することができます。

2. 入力値を検証する
保険的な対策として、外部からの入力値を検証する、という対策も挙げられます。例えば、ファイル名に利用可能な文字種を英数字に限定し、ファイル名を指定する際は英数字以外の入力を許可しないようにする、といった実装があります。

ただし、これは保険的な対策であり、根本的なOSコマンドインジェクションの対策にはならないということに注意してください。適用する場合は、エスケープ処理などの対策と組み合わせて実施することをおすすめします。

3. パラメータにエスケープ処理を施す
入力値をコマンドラインに渡さざるを得ない場合には、入力値にエスケープ処理を施しましょう。

「|」や「;」といった、メタ文字として機能し得る文字を無害な文字列にエスケープすることで、OSコマンドインジェクション攻撃を防ぐという方法もありますが、あまりお勧めできません。シェルのエスケープ処理は複雑で不備が生じやすいため、安全にエスケープ処理が行えるよう、ライブラリの利用を推奨します。

セキュリティをさらに高める3つの手段

OSコマンドインジェクションの脆弱性は、情報漏えいやWebサーバーの乗っ取りなど、大きな被害に発展する恐れがあるので、セキュリティインシデントを未然に防止するための対策検討をおすすめします。

セキュリティをさらに高めるには、脆弱性診断やWAFなど、セキュリティ専門のツールやサービスの導入が有効でしょう。これらは、OSコマンドインジェクションの脆弱性に非常に有効な対策です。ここでは、3つのセキュリティ強化手段を説明します。

1. 第三者による脆弱性診断の実施

セキュリティの専門知識がないまま、脆弱性を漏れなく把握し対応していくのは至難の業です。診断ベンダーなど第三者に脆弱性診断を依頼して、OSコマンドインジェクションの脆弱性を洗い出してもらいましょう。

第三者による脆弱性診断を受けると、検出された場合の該当箇所や対応策の提示をしてもらえるだけでなく、SQLインジェクションやクロスサイトスクリプティングなど他の脆弱性もチェックできるので、セキュアなWebアプリケーション運用に役立ちます。

脆弱性診断(セキュリティ診断)とは|必要性からやり方まで、すべて解説」では、脆弱性診断の概要、種類やサービスを選ぶ際のポイントなどを最新の情報に基づいて説明しています。自社のニーズに合うセキュリティ対策を検討する上でのよい判断材料になりますので、ご一読いただくことをおすすめします。

2. 脆弱性診断ツールの導入

診断ベンダーに依頼せず、組織内で診断を実施したい場合には、脆弱性診断ツールを導入するという方法もおすすめです。ツールを導入することで、都度ベンダーに依頼するよりも工数やコストを抑えられ、好きなタイミングで迅速に診断できるというメリットがあります。

診断を内製化することで、 開発したアプリケーションのセキュリティをより手軽に強化したい方は、ツールの導入を検討してみると良いでしょう。

脆弱性診断ツール(サービス)|有料・無料の違いと5つの選定ポイント」では、ツールを選ぶ時のポイントやツールの種類についてわかりやすく解説していますので、ぜひご覧ください。

3. WAFの導入

WAFとは、「Web Application Firewall」の略称で、攻撃性のある通信を検知・遮断してWebアプリケーションを保護する仕組みです。

OSコマンドインジェクションをはじめとする脆弱性の根本的な対策は、Webアプリケーションそのものを改修し、脆弱性をなくすことです。しかし、脆弱性の改修にはコストも時間もかかるため、改修中に攻撃を受けないとは限りません。改修中の対策として、また、万が一対策が漏れていた場合の保険的対策としてWAFを導入することもおすすめです。

WAFとは|どこまで守れる?セキュリティ対策の効果をわかりやすく解説」では、WAFの効果や使い方のポイントをわかりやすく解説していますので、ぜひご覧ください。

まとめ|OSコマンドインジェクションは基本的な対策と脆弱性診断で防ごう

OSコマンドインジェクションは、攻撃者がWebサーバーにOSコマンドを不正に実行させる攻撃です。
攻撃を受けると、以下のような被害が発生する恐れがあります。

  • 情報漏えい
  • ファイルの改ざん・削除
  • Webサーバーそのものの乗っ取り

OSコマンドインジェクションは、以下のいずれかを行うことで、防ぐことができます。

  • OSコマンドの呼び出しを避ける
  • シェルの呼び出し機能がある関数の使用を避ける

よりセキュリティを高めるには脆弱性診断がおすすめです。定期的に診断を実施し、脆弱性を修正することで、Webアプリケーション全体の安全性を維持できます。脆弱性診断ツールを利用すれば、第三者による診断よりコストをおさえつつ網羅的な診断ができるようになるでしょう。

また、脆弱性の修正には時間がかかるため、修正中の保険的対策としてWAFを導入することもおすすめします。

最適なセキュリティ対策を導入し、OSコマンドインジェクションの脅威から組織を守りましょう。

セキュリティ課題の解決に役立つコンテンツを配信!

脆弱性に関する最新情報やイベント・セミナーのご案内など、様々な情報をお届けします。ぜひご登録ください。

メルマガ登録はこちら
エーアイスキャン編集部

エーアイスキャン編集部

クラウド型Webアプリケーション診断ツールAeyeScanなどを提供している、株式会社エーアイセキュリティラボのオウンドメディアを運営しています。セキュリティや脆弱性に関する情報について、わかりやすさと正確さをモットーに発信していきます!

FAQ

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

    OSコマンドインジェクションとは、入力値の中に紛れ込ませたOSコマンドを、Webアプリケーションがシェルに渡してしまうことで成立する攻撃のことです。

    シェルとは、OSの中核であるカーネルとユーザーとを仲介するプログラムのことで、OSコマンドを受け取り、変換したコマンドをカーネルに受け渡す役割を担っています。

    OSコマンドを実行するWebアプリケーションの処理において、ユーザーの入力値がそのまま使われてしまう場合、OSコマンドインジェクションの脆弱性が生じる恐れがあります。

    詳しくは「OSコマンドインジェクションとは」をご覧ください。

  • OSコマンドインジェクションの対策は何をすれば良いですか?

    OSコマンドインジェクションの根本的な対策は、以下の2つです。

    • OSコマンドの呼び出しを避ける
    • シェル呼び出し機能のある関数の使用を避ける

    詳しい対策方法については、「OSコマンドインジェクションの対策」で解説しています。併せてご覧ください。

AeyeScan

AeyeScanの導入を検討してみませんか?

操作性の確認、
実際に利用してみたい方へ

「AeyeScan」の無料トライアル

トライアルにかかる費用は不要。実際の操作性はどうなの?またどのように脆弱性が発見されるのか?などの疑問は無料トライアルで解消しましょう。

無料トライアルの申し込み

サービスをより詳しく
知りたい方へ

「AeyeScan」のサービス紹介資料

改めてサービスの特長や導入効果、企業の導入実績などAeyeScanについてより詳しく知りたい方はぜひサービス紹介資料をご覧ください。

サービス紹介資料を読む

お見積もりの希望・導入を
ご検討している方へ

「AeyeScan」へのお問い合わせ

お見積りの希望・導入をご検討してくださっている方はお問い合わせフォームよりご連絡ください。当日もしくは遅くとも翌営業日にはご連絡を差し上げます。

お問い合わせフォーム