Webアプリケーションの脆弱性を狙った攻撃が急増する今,システムの緊急点検が不可欠だ。「対策している」と過信して,被害の発生にすら気づかない現場も少なくない。早急に脆弱性の有無を見極め,穴があれば効率よく塞ぐ必要がある。多層の防御ラインの形成が,システムを守る要となる。(実森 仁志=日経SYSTEMS

 クラッカに攻撃されたあるコンテンツ業者は,サービスが不安定になったためにWindowsベースのシステムを調査するうち,一部のHTMLファイルが改ざんされていることを突き止めた。復旧を試みたが,システムが不安定な状況は止まらない。数日後には,本来は表示されないはずのベーシック認証のダイアログボックスが表示されるようになった。サーバーのCPUも,平常時では考えられないほどに消費されている。危険を感じ,サイトを閉鎖した。

 結果から言えば,このコンテンツ業者のWebシステムは「SQLインジェクション」と呼ぶ手法で攻撃された。SQLインジェクションとは,Webアプリケーションを通じてデータベースに不正なSQL文を送り込む攻撃だ。データベースの内容を読み書きされる被害が中心だが,OSコマンドを呼び出すSQL Serverのストアド・プロシージャ(xp_cmdshell)を有効にしていたので,攻撃対象はデータベース以外にまで広がった。

 もはや,OSやミドルウエアへのパッチ適用だけでWebシステムを守れる時代は終わった。Webアプリケーション・レベルの脆弱性を突く攻撃が急増しているからだ。SQLインジェクションはその一例に過ぎない。今後はフィッシング詐欺を狙い,「クロス・サイト・スクリプティング(XSS)」や「クロスサイト・リクエスト・フォージェリ」などの攻撃(図1)が増える可能性が高い。

図1●Webアプリケーションに対する攻撃例
図1●Webアプリケーションに対する攻撃例  [画像のクリックで拡大表示]

ろくにテストされていない

 ところが,システムの実態はどうか。あるユーザー企業は,「Webアプリケーションは予算も納期もギリギリで発注している。稼働後の機能拡張も少なくない。構築や改修を委託するSIベンダーの力量を信じているが,脆弱性が全くないとは思えない」と打ち明ける。これは,多くの現場担当者の偽らざる思いだろう。

 現実にSIベンダーの証言からは,脆弱性テストが十分に行き届いていない実態が浮かび上がってくる。「開発費は1画面当たり約20万円。脆弱性テストの費用もほぼ同額だ。ユーザー企業から特別な要望がない限り,改めて脆弱性テストを実施することはまずない」(大手メーカー系技術者)。

 また,「脆弱性は対策済み」という安心感が足をすくいかねない。クラッカは,開発者が対策済みであることさえも悪用し,その盲点を突くような攻撃パターンを編み出す。今日セキュアであったシステムが,明日セキュアである保証はないのだ。

 こうした変化に適応するには,次のようなアプローチが必要になる。「対策状況を繰り返し検査する」,「ある対策を攻撃がすり抜けても別の対策で止められるように実装する」,「上流工程で漏れをなくし,開発工程全体で脆弱性を是正する」---。つまり,実装と体制の両面で,多層の守りを固めることが肝心である。