7月上旬以降、「Internet Explorer(IE)」を攻撃の脅威にさらしている同ブラウザのセキュリティホールは、Microsoftによるコード内のたった1つのタイプミスによって引き起こされていた。
Microsoftは米国時間7月28日、同社の「Security Development Lifecycle(SDL)」ウェブサイトに投稿したブログ記事の中で、誤って入力されたアンパサンド(「&」)が攻撃の原因であることを認めた。
MicrosoftのセキュリティプログラムマネージャーであるMichael Howard氏は自身のブログの中で、そのタイプミスによってIEが使用するActiveXコントロールのコードに問題が生じてしまったと説明した。そのコントロールは、Microsoftが古いコードライブラリを使って作成したもので、Howard氏はこのコードライブラリに脆弱性があることを認めている。タイプミスによってコードが信頼されていないデータを記述し、ブラウザが脅威にさらされたのは、コードライブラリの脆弱性が原因である。
Microsoftは月例パッチとは別に、IEを対象とする修正を緊急でリリースした。Microsoftによると、この修正は、ActiveXコントロールの脆弱性を悪用しようとする試みを阻止するという。
Microsoft自身の「Visual Studio」などの開発ツールは、「Active Template Library(ATL)」として知られる全く同じコードライブラリを使用している。MicrosoftはIE向けの緊急パッチをリリースしたその日に、Visual Studio向けの修正もリリースした。
コードの見直しの際にこのタイプミスを見つけることは困難であっただろうこと、さらに、Microsoftのいかなるコード分析方法でもそれを発見することはできなかっただろうことをHoward氏は話した。
Howard氏はブログで、ハイテク版「ウォーリーをさがせ!」さながらに、読者が数行の短いコードの中からタイプミスを見つけられるかを試した。Howard氏は、タイプミスは1文字だというヒントまで出している。Howard氏が読者に提示したコードは、以下の通りだ。
__int64 cbSize;
hr = pStream->Read((void*) &cbSize, sizeof(cbSize), NULL);
BYTE *pbArray;
HRESULT hr = SafeArrayAccessData(psa, reinterpret_cast(&pbArray));
hr = pStream->Read((void*)&pbArray, (ULONG)cbSize, NULL);
そして、Howard氏は読者に次のように出題した。「もう1つ手がかりをだそう。タイプミスは1文字だ。降参だろうか。では、最後の1行を見てもらいたい。最初の引数が間違っている。正しくは、『hr = pStream->Read((void*)pbArray, (ULONG)cbSize, NULL);』だ」(Howard氏)
このセキュリティホールは7月、ドイツの2人の研究者によって発見された。Zynamics GmbHの最高経営責任者(CEO)であるThomas Dullien氏(Halvar Flake氏としても知られている)とその友人であるDennis Elser氏はブログの中で、発見について詳しく説明した。両氏はこの脆弱性が明らかになった後、コードを精査し、不必要な「&」の文字があることに気付いた。
Microsoftは、タイプミスを防ぐために、今後どのような対策を講じるのだろうか。
Howard氏はブログの中で、Microsoftのコーディングプロセスを整理する必要性を認めている。Howard氏によると、Microsoftはこうした間違いを発見するのに使うツールをアップデートするという。さらに、Microsoftはプログラマーに対し、新しいATLコードを使用することを求める予定だ。Microsoftはこれまで、プログラマーに対し何を使うべきかを指示してこなかった。しかし、Howard氏はブログで、「私たちは、それを変えるつもりだ」と述べている。
この記事は海外CBS Interactive発の記事をシーネットネットワークスジャパン編集部が日本向けに編集したものです。 原文へ
CNET Japanの記事を毎朝メールでまとめ読み(無料)
ものづくりの革新と社会課題の解決
ニコンが描く「人と機械が共創する社会」
ZDNET×マイクロソフトが贈る特別企画
今、必要な戦略的セキュリティとガバナンス