トレンドマイクロの脅威リサーチ部門であるフォワードルッキングスレットリサーチでは、「Apache Struts(アパッチ・ストラッツ)」が抱える一連の脆弱性に対して攻撃を仕掛けるハッキングツールが流通していることを確認しました。
Apache Struts とは、Apacheソフトウェア財団の Apache Strutsプロジェクトにて開発されているオープンソースの Java Webアプリケーションフレームワークです。2013年7月16日に、深刻な脆弱性を修正するアップデート「Struts 2.3.15.1」がリリースされています。
ここでいう深刻な脆弱性とは、アプリケーションサーバの実行権限で任意の OS コマンドが実行可能となるものです。一般にハッキング行為は 6つの段階を経て行われるとされています。「フェーズ1:偵察」、「フェーズ2:スキャン」、「フェーズ3:アクセス権の獲得」、「フェーズ4:アクセス権の維持/引き上げ」、「フェーズ5:窃盗」、「フェーズ6:証拠隠滅」です。
今回確認されたハッキングツールは、Apache Struts の脆弱性を突くことによって、これら攻撃の各フェーズにおいて必要となるアクションを 1つのツールで実現できるようにパッケージ化されていました。
敵を知ることで身を守るという孫子の兵法に基づき、今回はその詳細について紹介したいと思います。
■Struts2 の攻撃ツールは中国語圏のハッカーコミュニティにて公開
今回、我々が確認したハッキングツールは、中国語のコミュニティにて7月19日付けで公開されたものでした。したがって、脆弱性が公表されてから僅か3日間で作成、公開が行われたと言えます。
|
ハッキングツールを起動すると、対象としている脆弱性が「S2-016」(CVE-2013-2251)、「S2-013(CVE-2013-1966)」、「S2-009(CVE-2011-3923)」、「S2-005(CVE-2010-1870)」であることが表示されます。これらの脆弱性に共通することは、任意の OS コマンドが実行可能であるという点です。
|
ハッキングツールは複数の機能から構成されており、これらを使い分けることで攻撃の各ステージで犯罪者にとって必要なアクションの手助けとなります。
■ハッキングツールに関する動作検証
今回は、実際にテスト環境でこのハッキングツールに関する動作検証を行いました。
[検証環境] | |
OS | Microsoft Windows 7 Ultimate |
Webサーバ | Apache Tomcat 7.0.41 |
Java環境 | JDK 1.7.0_25 |
Struts | Apache Struts 2.3.15 |
サンプルアプリ | struts2-blank.war |
標的 | http://<省略>:8080/struts2-blank/example/HelloWorld.action |
[ハッキングツール] | |
MD5 | 4674D39C5DD6D96DFB9FF1CF1388CE69 |
SHA1 | 9C6D1700CF4A503993F2292CB5A254E4494F5240 |
ツールには、あらかじめいくつかのコマンド構文が登録されています。これらは、犯罪者が「偵察」の際に使うことが知られているコマンド群と言えます。なお、コマンドは Windows と Linux双方の環境を意識したものが用意されています。これらコマンドのうち、「netstat -an」について動作確認を行った際の画面キャプチャを掲載しています。日本語表記が文字化けしているものの、犯罪者にとって必要な情報は入手可能であることが確認できました。ハッキングツールによるコマンド実行は、Apache Tomcat の実行権限で動作していることが「whoami」の結果から読み取れます。従って、Tomcat を権限の低いユーザで動作させている場合には、被害を限定的にすることが可能と考えられます。
|
実行コマンド | 説明 | 対応OS |
whoami | 現在のアカウントを確認 | Windows/Linux |
id | ユーザのID情報を表示 | Linux |
netstat -an | ネットワーク情報の表示 | Windows/Linux |
dir | ファイル・ディレクトリの情報を表示 | Windows/Linux |
ls | ファイル・ディレクトリの情報を表示 | Linux |
ipconfig | ネットワーク設定詳細の表示 | Windows |
ifconfig | ネットワーク設定詳細の表示 | Linux |
net user | ユーザアカウント情報の表示 | Windows |
net user ユーザ名 パスワード / add | ユーザアカウントの追加 | Windows/Linux |
systeminfo | ローカルシステムに関する情報の表示 | Windows |
systeminfo | ローカルシステムに関する情報の表示 | Windows |
uname -r | OS のリリース番号を表示 | Linux |
uname -a | すべてのシステム情報を表示 | Linux |
lsb_release -a | 各ディストリビューションの LSB (Linux Standard Base) 情報を提供 | Linux |
表:ハッキングツールが事前に用意しているコマンド構文 |
■不自然なHTTP通信
ハッキングツールで利用する脆弱性として「S2-016」を指定し、「whoami」コマンドを実行した際の HTTP通信について観測を行いました。
|
ここからは、ProcessBuilderクラスを利用してサーバ上でプロセスを作成し、whoamiコマンドを実行しようとしていることが確認出来ます。Java においてオペレーティングシステムのコマンド(プロセス)を起動させるには「Runtime.exec()」や「ProcessBuilder」といった方法があります。ProcessBuilder は、JDK1.5以降で実装された方法です。ここに犯罪者の意図が何か含まれているのかは定かではありません。
このほか、ハッキングツールならではの特徴的な通信が見受けられます。GETリクエストであるにも関わらず、Content-Typeヘッダが付与されています。また、通信元を詐称するためなのか「User-Agent:」として「Googlebot」が指定されていることも確認できます。
この攻撃を受けた際の Apache Tomcat におけるアクセスログを確認してみます。
|
こうして切り出して見ると異変に気づくことは容易といえます。しかしながら、膨大なログの中からリクエストの正当性を判断することは極めて困難な作業になると予測されます。
■ハッキングツールによる WebShell の設置
ハッキングツールに関する動作検証によって、任意の OS コマンドが実行可能であることが実証されました。このハッキングツールの危険度を評価する上で付け加えるべき重要な情報があります。それは「WebShell」設置の支援機能です。
WebShell とは、バックドアの一つで、攻撃者が潜入に成功した Webサーバに自由に出入りできるようにする、すなわち「アクセス権の獲得」や「アクセス権の維持」をするために設置するものです。
WebShell にはアプリケーションフレームワーク毎に様々な種類があります。例えば PHP環境で動作する「PHP_C99SHELL」ファミリや「WSO Web Shell」はこれまで多くの改ざんサイトで確認されています。このほか、Microsoft ASP.NET環境で動作する「ASPXSpy」などがあります。犯罪者は侵入した Webサイトで利用できるアプリケーションフレームワークを判断し、設置する WebShell を選択します。今回このハッキングツールが設置を推奨しているのは、JSP でコーディングされたものでした。Apache Struts は Java に関する Webアプリケーションフレームワークです。従って、確実に JSP型のWebShell が動作するフレームワークが整っていることを見越して推奨していると考えられます。
JSP型の WebShell は、2009年に数多くのWebサイトに被害をもたらした「Gumblar」攻撃以前からその存在は確認されており、ハッキングツールとしては、古い部類のものといえそうです。しかし、バージョンアップを重ねその機能は現在も十分に通用する強力なツールとなっています。実際、インターネット検索エンジンにおいて特別な検索クエリを使って検索すると、JSP でコーディングされた WebShell が設置されたままになっている Webサーバ(おそらく改ざんサイト)を数多く発見することができます。今回のハッキングツールでは、設置先を指定することで、わずか数クリックで JSP型の WebShell を設置することができます。防御側にとってこれほど迷惑な機能はありません。
|
今回は、ハッキングツールの検証に利用したテスト環境に対して、「JspWebShell」の設置を試みました。この JspWebShell では、設置した犯罪者以外が利用できないようにパスワード認証が設けられています。
|
犯罪者が設定したパスワードを入力し、ログインするとユーザインターフェイスが現れます。画面キャプチャからは Windows の Cドライブ直下が閲覧できることが確認出来ます。ほとんどの WebShell では、「ファイルマネージャ(任意のファイル・ディレクトリの作成、削除、コピー、ダウンロード)」や「コマンド構文の実行」機能を有しています。
|
■より高機能な WebShell
アンダーグラウンドコミュニティでは、「情報探索」、「窃盗」機能について強化した WebShell を入手することも可能です。ファイルマネージャ機能を中心とした WebShell は進化し、次の機能を包含したバージョンも流通しています。
大項目 | 機能 | 説明 |
File Manager | Del | 削除 |
Move | 移動 | |
Pack | ZIPアーカイブ | |
Edit | 編集 | |
Down | ダウンロード | |
Copy | コピー | |
Property | プロパティ情報の更新 | |
Unpack | ZIPファイルの展開 | |
File Manager | データベース接続 | SQLインジェクション攻撃などに利用可能 |
データベースクエリ | ||
SQLコマンドの実行 | ||
Export | ||
Execute Command | プログラムの実行 | |
シェルの実行 | ||
Shell OnLine | ブラウザからのシェルの利用 | |
Back Connect | バックドアクライアントが接続するポートの開放 | |
Port Scan | ポートスキャン | スキャン攻撃の踏み台として利用可能 |
Download Remote File | ファイルのアップロード、ダウンロード | |
Clipboard | クリップボートの情報記録 | |
Remote Control | リモートサーバの設定 | |
Port Map | ||
Jsp Env | Java環境の表示 | |
表:JspSpy機能一覧 |
|
■対策は「修正済みバージョン」の利用を原則とし回避策を活用
孫子の兵法では己を知ることの重要性も説いています。ここまで、敵を知るための情報を提供しました。
ハッキングツールの特徴 |
|
ここからは自らの環境を見直すことについて考えていきたいと思います。
今回の攻撃において標的となっているフレームワークとは、通常直接的に目に触れるアプリケーションではありません。従って、必ずしも全ての環境で利用状況やバージョン管理がなされているとは言いがたい状況です。まずは、自身の管理する資産の環境と対策の優先度を整理することが望まれます。
Apache Struts が抱える一連の脆弱性に対する対策としては、修正済みバージョンを適用することが強く推奨されます。
「S2-016」、「S2-013」、「S2-009」、「S2-005」 修正済みバージョン |
Apache Struts 2.3.15.1 |
しかし、フレームワークという性格上、リグレッションテストの実施など、修正済みバージョンの適用までにかかる時間は長期化する傾向があります。このような場合には、「mod_rewrite」などを使って脆弱性の原因となるプレフィックスを含んだリクエストを拒否する設定も有効です。
脆弱性の原因となるプレフィックス |
action: redirect: redirectAction: |
こうした対策も実施困難な場合には、「不正侵入防止システム(IPS、Intrusion Prevention System)」や「Web アプリケーションファイアウォール(WAF)」機能を含むセキュリティ対策製品により脆弱性の原因となるパケットを遮断する対策の利用を検討することも可能です。
また、今回のような脆弱性による被害を根本から抑制する方法として、セキュアOS の利用により権限を抑えることで、脆弱性を悪用させない対策について検討することも考えられます。