2007年にリリースされたapache struts2はWebアプリケーション用のフレームワークとして非常に高い人気を得ています。このフレームワークはアプリケーションを開発するうえで非常に効率的な作業が可能になるため、日本はもちろん世界中で採用されています。
しかしこの効率性などのメリットに対して脆弱性の問題を抱えている点がよく指摘されます。指摘されているだけならまだよいのですが、実際に被害が生じるケースも多く、セキュリティにおける大きな問題点となっているのです。今回はapache struts2脆弱性の対策について解説していきます。
apache struts2の脆弱性が指摘されるきっかけになったのが2017年に発生したサイバー攻撃です。一斉に行われたこの攻撃によってこのフレームワークで開発されたWebサイトの多くが被害を受けてしまったのです。
こうした問題を防ぐためにもアップデートなどの対策が行われているのですが、十分に追いついていない面もあります。今触れた2017年の一斉攻撃では最新のアップデートに対応していなかったWebサイトの多くが被害に遭ってしまったといわれており、サイトを運営する側の対策の遅れも問題になっています。
そうなるとどうしてapache struts2ばかりがサイバー攻撃の標的にされ、脆弱性の問題が指摘されるのか?ここにはこのフレームワークの機能面に原因があると考えられています。このフレームワークにはOGNLと呼ばれる機能が搭載されているのですが、これが攻撃の対象になってしまっているとの意見もあります。
このOGNLはアプリケーション上で動的パラメータを扱うために搭載されており、自由度が非常に高いというメリットを備えています。しかしこの自由度の高さがハッカーなどサイバー攻撃を行う者たちの格好の標的になってしまっている面があるのです。
簡単に言えばこの機能にインジェクション攻撃を行うことでデータの抽出や改ざんなどの被害をもたらしやすくなっているのです。
この機能を使うとJavaのコードそのものを記述できるようになるので使い勝手は抜群によいのですが、攻撃者が任意のjavaコードを実行できる環境も作ってしまうのです。
日本でこの問題が大きく取り上げられたのは2017年に発生した官公庁の顧客情報の流出事件です。ここでは、apache struts2の脆弱さをつかれる形でサイバー攻撃を顧客情報を流出させてしまったのです。約20万件もの顧客情報が流出したと言われており、大規模なサイトにこのフレームワークが使用されていると被害を受けた際の規模も非常に大きくなってしまうことがわかります。
同じく2017年の他の月には72万件もの個人情報が流出する事件も起こっており、いかにこのフレームワークが標的とされているか、そして脆弱性の問題を抱えているかがうかがえます。
問題なのはこのフレームワークで作られたウェブサイトがすべて適切な運用・管理をされているとは限らない点です。無数のサイトで使用されているうえにその中には長い間放置されているサイトもあります。こうしたサイトは当然セキュリティアップデートなども行われていません。運用・管理が行われているサイトであっても適切な形でセキュリティ対策が行われているとは限りません。
ただでさえ脆弱性の問題を抱えているうえに適切なセキュリティ対策を施していないこれらのサイトが狙われることで被害が拡大してしまう恐れもあるわけです。情報の流出はもちろん、インジェクション攻撃によってマルウェアが拡散してしまうような環境が作られてしまう恐れもあります。
例えば脆弱性の問題を抱えたサイトが改ざんされ、そこに訪れたユーザーをマルウェア感染させてしまった場合、その被害がどんどん拡大してしまう可能性もあるわけです。
ではどのような対策方法が有効なのか?まず二通りのアプローチが考えられます。まず「切り替える」。いたってシンプルな結論ですが、脆弱性に問題を抱えたフレームワークをやめてもっとセキュリティ環境が充実して安心して利用できるフレームワークに切り替える。これがもっとも根本的で有効な対策となるでしょう。
ただ言うのは簡単ですが、切り替えるとなるとサイトそのものを全面的にリニューアルするなど時間やお金のコストがどうしてもかかります。そこまでする余裕があるか、価値があるか、十分に検討したうえでの判断が求められるでしょう。サイトのリニューアルや移転を検討している場合には脆弱性対策を理由に思い切ってフレームワークの段階から全面的に切り替えることを検討するのもよいかもしれません。
また、これからサイトを作ろうと検討している場合には「使わない」も根本的かつ有効な方法です。
問題なのはapache struts2を使った既存のサイトを運用しているケースでしょう。他のフレームワークに切り替える余裕がない場合には2つの対策が考えられます。
1つ目の方法は脆弱性診断です。apache struts2は新バージョンが公開される前に脆弱性の診断を行うことができず、導入してから診断するまでの間に攻撃を受けてしまうケースもあります。ですから外部の脆弱性サービスを利用して早めの診断と対策を行うと有効です。
2つ目の方法はWAF(Webアプリケーションファイアーウォール)の導入です。とくにインジェクション攻撃に対する防御力に優れており、Webサイトのセキュリティ環境の構築に非常に有効です。
このWAFには現在専用のハードウェアを導入するアプライアンス型、ソフトウェアをサーバーにインストールするソフトウェア型、クラウド上で仮想のアプライアンス型を導入するクラウド型の3種類があります。コストをいとわずに脆弱性対策を万全に行いたいならアプライアンス型、コストをかけず、専門的な知識も必要なく導入したい場合にはクラウド型が適しています。
このWAFでは年々防御性が向上し、インジェクション攻撃全般に加えてさまざまな種類のサイバー攻撃をブロックすることができるようになっています。脆弱性診断では十分なセキュリティをカバーできないことも多いため、apache struts2を使った既存のサイトを運用し続ける場合にはこのWAFの導入がもっとも効果的となるでしょう。
もうひとつ、抜本的な対策にはなりませんが、最新のバージョンをアップデートするのもひとつの対策方法です。WAFの導入にしろ、フレームワークを切り替えるにしろある程度の時間がかかってしまうものです。その間にサイバー攻撃を受けないためにもアップデートは重要な選択肢、いわば応急手当のような位置づけで必要になるでしょう。
脆弱性に関して指摘が行われていることから開発側ではこの問題を修正したバージョンを公開しています。つねに最新版にアップロードしておくことでセキュリティを少しでも強化することができるのです。ただOGNLを巡る根本的な問題は解決していないため、これだけでは十分にセキュリティを強化するのは難しいでしょう。
このようにapache struts2のセキュリティ環境をめぐる問題はフレームワークという根本的な部分で生じているため、「使わない」以外に抜本的な対策がない面があります。とくに「apache struts2.3から2.3.34」のように攻撃を受けるリスクが高いバージョンを使っている場合はアップデートを行いつつ、wafを導入するといったできるだけ早く行うといった備えが必要になるでしょう。
サイバーセキュリティクラウドが提供する「攻撃遮断くん」はWebサイト・Webサーバへのサイバー攻撃を可視化し、遮断するセキュリティサービスです。
ブルートフォースアタック、クロスサイトスクリプティング、Webスキャンと言ったサイバー攻撃をリアルタイムで検知・遮断しています。
ユーザーごとに提供される管理画面で、契約したWebサーバへの攻撃の情報を確認することができます。
この記事と一緒に読まれています
2020.04.09
セキュリティ対策
Apache Struts2の脆弱性で広がるサイバー攻撃の被害
2017.03.30
セキュリティ対策
Apacheモジュール mod_dumpost をご紹介します!
2016.06.21
セキュリティ対策
【注意喚起】Apache Struts2の脆弱性発覚!即時の対応を!
2017.09.12
セキュリティ対策
2020.02.24
セキュリティ対策