狙われるWebアプリケーション、何が起こるのか:守りが薄いWebアプリケーション(1)(1/2 ページ)
当連載ではWebアプリケーションのセキュリティがどのような状況にあり、どのような攻撃や防御策があるのかを紹介していく。第1回はWebアプリケーションがどのように狙われているのか、概要を紹介する。Webアプリケーションに向けた攻撃は数多く、規模も大きい。主に4つの部分が攻撃にさらされており、被害の内容は異なる。
Webベースのアプリケーションの広がりが被害の数に表れている
Webのサイバーセキュリティ対策と聞くと何を思い浮かべるだろうか?
企業のWebサイトからの個人情報の漏えいや、DDoS(Distributed Denial of Service Attack)によるサービス停止をイメージされる方も多いだろう。だが今日、Webをベースとするシステムはオンラインショップや金融取引、企業間の受発注などのブラウザベースのWebアプリケーションにはとどまらない。
例えばスマートフォンのアプリやIoTデバイスでも、HTTP/HTTPSなどのWebのプロトコル(通信手順)を利用してサービスを提供している。これらを支えるWebサーバが停止したり、サービスから情報が漏えいしたりしたケースを考えれば、いかに現代社会に大きなインパクトをもたらすか、想像できると思う。
実際、国内でも日々Webからの情報漏えいのニュースが報じられている。JPCERTコーディネーションセンター(JPCERT/CC)が発表した「インシデント報告対応レポート 2018年7月1日〜9月30日」によると、期間中のWebサイト改ざんの報告は226件だった。対策が進んだ標的型マルウェアによる攻撃(7件)と比べ30倍以上の件数である。Webセキュリティが重要だという認識が遅れているために、今やあたかも薄氷の上でさまざまなインターネット上のシステムが動いている状態になってはいないだろうか?
本連載では、変化を続ける最新のWebへの攻撃手法と対策を踏まえた上で、いま一度、Webセキュリティについて基本から見直していきたい。
ハニーポットが捉えた月間1000万件の攻撃
具体的な話に入る前に、インターネット上のWebサービスにどんなサイバー攻撃が実際に来ているのか、筆者が所有するハニーポットが捉えたデータをまず見てもらいたい(※1)。
※1 ハニーポットとは、攻撃に関するさまざまな情報を収集するために、あえて脆弱(ぜいじゃく)性を持たせたシステムをいう。
このハニーポットは個人的に所有、運用しているもので、IPアドレスをどこかに公開したり、ドメイン名を持たせたりしているものではない。にもかかわらず、世界中から攻撃や、攻撃を行うための事前の情報収集を意図したトラフィックを大量に観測している。1カ月間で捉えたこれらのアクセスの件数は1000万件以上(1分間当たり230件以上)に上る。
ハニーポットを構築してインターネットに接続した瞬間に大量の攻撃トラフィックを検知したことは今でも鮮明に覚えている。企業が運用するWebサーバや、企業の委託を受けて運用されているWebサーバに対して、何が起こっているのかは想像に難くない。
このようにインターネット上のサーバは常に危険にさらされている。DNSなどで存在を告知しておらず、IPアドレスを付けただけのサーバに対してさえ、この状態である。企業サイトなど公開されたサーバやアプリケーションに対しては、この何倍もの攻撃トラフィックが来ているといってよいだろう。インターネットにはクリーンではないトラフィックが常にまん延していることを、まずは認識していただきたい。
Webアプリケーション実行時、「4つの部分」が幅広い攻撃にさらされる
歴史を振り返ると、Webは1台のWebサーバ上に静的なHTMLページのコンテンツを置いただけの時代から始まっている。だが、今やWebサーバを構成する複数のソフトウェアコンポーネントが複雑に絡み合って、動的なWebページを生成しているサイトが主流を占めている。新しい技術を投入して、リッチなUI/UXが提供できるようになると、副作用も生じた。攻撃の対象となり得る領域(アタックサーフェス)が増えるのだ。攻撃者の付け入る隙が多くなるほど、脅威やリスクが増加する。
このことを、「Webサーバの背後にあるデータベースから情報を引き出してページに表示する」という一般的なWebアプリケーションの一連の動きを追って説明してみよう。
- まずクライアント(Webブラウザ)が「Apache HTTP Server」などのWebサーバにリクエストを送信する
- Webサーバがそのリクエストを受け付ける
- Webサーバと連動して動く「Apache Tomcat」「Apache Struts 2」などのアプリケーションサーバがWebサーバの受けたリクエストを読み込み、アプリケーションロジックを実行する(リクエストの内容に応じてデータベースを読み出し、書き込む)
- アプリケーションサーバがレスポンスを生成し、Webサーバを経由させてクライアント(Webブラウザ)へレスポンスを返す
- クライアント(Webブラウザ)がコンテンツを受信し、HTML/CSSを読み込み、ページをレンダリングする
- JavaScript(JS)を実行し、追加のページレンダリングを行う
- ユーザーがレンダリングされたページを閲覧する
実行される処理は、クライアントサイド(Webブラウザ側)とサーバサイドに大きく二分できる。Webアプリケーションに対する攻撃も、クライアント側を狙うものとサーバ側を狙うものに分類でき、攻撃の目的や被害も異なる。
このWebアプリケーションを実行するコンポーネントの中で、攻撃の対象になり得るのは、「Webサーバ」「アプリケーションのロジック」「データベース」「Webブラウザ(クライアント)」の全てである。特にアプリケーションのロジックは、Webサイトやアプリケーションに合わせて、作成するサービスやプログラムの内容が異なるため、それぞれの脆弱性は固有のものになる場合が多い。これもWebアプリケーションのセキュリティ対策を難しくしている要因の一つである。
Copyright © ITmedia, Inc. All Rights Reserved.