Apache Strutsは、オープンソースソフトウェアとして提供されているWebアプリケーションフレームワークです。ゼロからWebアプリケーションを開発するよりも効率的に開発を進めることができるため、個人、法人かかわらず多くのWebサイトの開発で利用されています。しかし、Apache Strutsでは、度々深刻な脆弱性が発見されているという問題も抱えています。
本稿ではStruts2の脆弱性を解説し、Webアプリケーションを保護するためのWAF(Web Application Firewall)による対策ついてご紹介します。
なぜ、Apache Struts2には脆弱性が多いのか?
Struts2では、コンパイルなしでコードを実行するOGNL (Object-Graph Navigation Language) と呼ばれるJavaに似たライブラリが多用されています。2017年3月に発生した多くの情報漏えい事件の原因となったS2-045においてもOGNLの機能が使用されていました。この脆弱性は大きな話題となり「OGNLインジェクション」という言葉を見聞きした方も多いと思います。
OGNLは自由度が高く非常に便利な機能ですが、この自由度が攻撃者から標的になり、脆弱性があるとHTTPリクエストに埋め込まれた悪意のあるコードがOGNLによって実行されることになります。ユーザー入力によってOGNLを操作、実行されてしまうのは非常に危険であることは言うまでもありません。OGNLはStruts2の随所で使用されており、切り離すことはできない存在です。今後も主要機能の1つである以上、新たな改良においてもOGNLが使用されていくでしょうし、まだ知られていない箇所を含めて脆弱性が発見される可能性を否定することはできません。
Struts2には、OGNLに起因するRCE(Remote Code Execution)の脆弱性、攻撃が多いという実情があります。
こんなにある?Apache Struts2の脆弱性
Struts2の脆弱性には影響の大小、国内では報道されなかったものを含めて多数存在しています。サイバー攻撃から企業・組織を守る取り組みや国民に向けた情報セキュリティ対策の普及啓発などを行っている情報処理推進機構(IPA)では、Struts2の脆弱性を一覧で紹介しています。
<Apache Struts脆弱性一覧:抜粋>
|
|
|
番号 |
脆弱性対策情報 |
影響を受けるバージョン |
S2-016 |
2.0.0 - 2.3.15 |
|
S2-020 |
2.0.0 - 2.3.16.1 |
|
S2-021 |
2.0.0 - 2.3.16.3 |
|
S2-022 |
2.0.0 - 2.3.16.3 |
|
S2-032 |
2.3.20 - 2.3.28 (2.3.20.3 および 2.3.24.3 を除く) |
|
S2-033 |
2.3.20 - 2.3.28 (2.3.20.3 および 2.3.24.3 を除く) |
|
S2-037 |
2.3.20 - 2.3.28.1 |
|
S2-045 |
2.3.5 - 2.3.31 2.5 - 2.5.10 |
|
S2-046 |
2.3.5 - 2.3.31 2.5 - 2.5.10 |
|
S2-048 |
2.1.x - 2.3.x |
|
S2-052 |
2.1.2 - 2.3.33 2.5 - 2.5.12 |
|
S2-053 |
2.0.0 - 2.3.33 2.5 - 2.5.10.1 |
|
S2-057 |
2.3 - 2.3.34 2.5 - 2.5.16 サポートされていないバージョンも影響を受けるおそれがあります。 |
|
S2-058 |
2.0.0 - 2.5.12 |
|
S2-059 |
2.0.0 - 2.5.20 |
|
S2-060 |
2.0.0 - 2.5.20 |
|
S2-061 |
任意のコードを実行される脆弱性 | 2.0.0 - 2.5.25 |
S2-062 |
2.0.0 - 2.5.29 |
|
S2-063 |
2.0.0 - 6.1.2 |
|
S2-064 |
2.0.0 - 6.1.2 |
|
S2-065 |
2.5.31 |
引用:IPA『Apache Struts2 の脆弱性対策情報一覧』
一覧には「任意のコードを実行される脆弱性」と記載されたものが多くなっていますが、前述のRCEに分類される脆弱性です。
いかがでしょうか?Struts2にはRCEだけでなく、様々なタイプの脆弱性があり、常に最新バージョンを使用するように努めないとサイバー攻撃の被害に遭う危険性があります。
Apache Struts2の脆弱性(S2-045)による被害事例
2017年3月6日(日本時間)に脆弱性が公開され、翌3月7日には脆弱性を悪用した攻撃が始まり、情報公開から数時間で情報漏えい被害が確認されています。
公表日 |
企業・団体 |
被害情報 |
流出件数 |
2017年3月9日 |
チケット販売サイト |
住所・氏名・電話番号・生年月日・ログイン ID・パスワード・メールアドレス |
14万7093件 |
2017年3月10日 |
東京都 |
クレジットカード番号、有効期限、メールアドレス |
67万6290件 |
2017年3月10日 |
住宅金融支援機構 |
クレジットカード番号、有効期限、セキュリティコード、申込日、住所、氏名、電話番号、生年月日、メールアドレス |
4万3540件 |
2017年3月14日 |
日本郵便 |
送り状、メールアドレス |
3万220件 |
WAFによるApache Struts2のセキュリティ対策
Struts2のセキュリティ対策として、Strutsを「使わない」または「別のフレームワークに切り替える」という対策が示されることがあります。根本的な対処であり、新しくWebサービスを提供していくにあたり、わざわざStruts2を使用することはないと言えます。しかしながら、Struts2は業種・業態を問わず幅広く利用されており、現実的に今すぐ変えることはできないと考えられます。また、サポートが終了しているStruts1のまま運用を続けているサイトも存在するくらいですので、運用上の理由でStruts2を使用し続けなければならないサイトも多数存在すると考えられます。
そこで、WAFというセキュリティ製品の有効活用をおすすめしています。WAFはクライアントからWebサイトへのアクセスを検査し、WAFを経由する通信1つ1つをチェックします。SQLインジェクションやクロスサイトスクリプティング、RCEなどの脆弱性を悪用した攻撃がないか通信内容をチェックして、検出・防御してくれるのです。脆弱性の有無にかかわらず、独立したかたちでWebアプリケーションを保護することができ、Webサイトのセキュリティを大幅に強化できます。
2017年に公開されたS2-045の脆弱性は、日本時間の3月6日に脆弱性が公開されました。短時間でPoC(Proof of Concept)が確認されると、日本国内でも数多くの被害が発生し、3月8日にはIPAからの注意喚起がありました。このとき、多くのWAFベンダーは3月7日時点で脆弱性を悪用する攻撃に対するシグネチャをリリースしており、セーフティネットとしてWAFが大きな役割を果たしました。
もちろん、最新バージョンの利用やパッチの適用という根本的な対策が第一です。しかし、すぐにバージョンアップできない、テストに時間を要するなど、運用上の課題があるのも事実です。攻撃者は待ってくれません。Apache Strutsのセキュリティ対策の一つとして、WAFの有効活用をぜひご検討ください。
- カテゴリ:
- WAF
- キーワード:
- セキュリティ
この記事に関する製品のご紹介
ホスト型WAF「SiteGuard Server Edition」
SiteGuard Server Editionは、ウェブサーバーのモジュールとして動作するホスト型WAF製品です。Webサーバー自体にインストールするため、専用ハードウェアが必要ありません。ネットワーク構成を変更せず、できるだけシンプルに導入したいお客様に最適な製品です。
詳細はこちら