米eEye Digital Security(以下,eEye)は米国時間4月21日に、Winny(ウィニー)のヒープ・オーバーフロー脆弱性(セキュリティ・ホール)に関するアドバイザリを発表しました(関連記事)。今回は、その脆弱性の処理の経緯や脆弱性の概要についてお話したいと思います。

3月22日(PST) - IPAに脆弱性の処理を依頼

 先月からWinnyに関する本格的なリサーチを開始したことは、以前の「ITpro Watcher」でお伝えしました(関連記事)。リサーチで最も時間を費やしていることは、技術的な事柄ではなく、Winnyを取り巻く社会的な事柄を理解することです。

 コード解析、Winnyネットワーク解析、脆弱性監査など、技術的なリサーチの基本部分は数日でほぼ完了しました。技術的な部分は私と金居の2人で事足りましたし、さほど大きなハードルもありませんでした。しかし、Winnyを取り巻く社会的な事柄については、米国にいるため議論の機会が少なく、知識不足、勉強不足である感が否めません。

 Winnyのリサーチを開始して2日後にこの脆弱性を発見したのですが、いかんせんWinnyを取り巻く社会的背景の理解が不足しているため、どのように処理することが日本の社会において最も適切なのか判断しかねました。この脆弱性は非常に簡単に発見できるものであり、いつ問題が表面化してもおかしくない状況であると思いました。

 しかも、金居が1日でWinnyノードの収集用プログラムをほぼ完成させ、数時間でほぼすべてのノード情報を取得できることが確認できました。これは、Winnyネットワークへの一斉攻撃が、非常に短期間で実現できることを意味します。

 開発者の方は、諸般の事情で修正版を配布できない可能性があるにもかかわらず、現在も数十万の脆弱なノードが実働しているという状況は、まさに危機的であると感じました。国内の愉快犯によるいたずら程度の攻撃ならそれほど大きな問題にはならないと思いますが、数十万の無防備な標的、しかも大多数が日本人ユーザーであるというこの状況は、日本国外に住んでいる私の目には非常に危険であるように思えました。

 しかし、Winnyを取り巻く社会的な事柄に関する理解が遅れているということもあり、このような状況で、通常のeEyeの脆弱性処理プロセスに基づいて公表するのは問題があると判断しました。このため3月22日(PST:米国西海岸時間)、IPAに本問題を託し、処理して頂くことにしました。

4月11日(PST) - 開発者の方からの連絡

 IPAからは即座に受理通知を頂き、本脆弱性の処理が開始されました。4月11日(PST)、IPAを通じ、開発者の方から「任意コードは実行できないと推測する」という返事を頂きました。eEyeでは、内規により実働する攻撃コードの外部提供が一切禁止されています。そのため、コード実行が可能であることを示すため、Windowsシステムにおけるヒープ・オーバーフロー脆弱性のメカニズムに関する技術解説、および、本脆弱性を利用した任意コード実行の手順をIPAにお送りしました。しかし、開発者の方にこれらを十分お伝えできませんでした。今後も、IPAからの要請があれば、引き続き情報提供を続けたいと思います。

 「ヒープ・オーバーフロー脆弱性のメカニズムに関する技術解説」といった情報は英語のものですら少なく、一般のソフトウエア技術者には届きにくいものになっていると思います。今後、セキュリティ技術者が中心になって、このような技術に関する文書を日本語でまとめる必要があると思います。

4月21日(PST) - 公開

 4月21日(PST)、IPAおよびJVN(JP Vendor Status Notes)にて本脆弱性が公開されたのを受け、eEyeからもアドバイザリを公開しました。

 本問題は様々な意味で非常に特殊であり、特に社会的な面で、一般的なアプリケーションの脆弱性と大きく異なる要素が多々あります。このため、十分な情報や対策が開示できません。脆弱性が修正できないという状況ですので、今回のアドバイザリでは脆弱性発生個所についての情報開示は見送ることとなりました。また、事実上対策の無いアドバイザリの公開となりました。

 なお、アドバイザリに記述されている以下の情報は、あくまで脆弱性攻略が可能であるということを示すためものであり、脆弱性そのものではありません。この情報から、脆弱性そのものを特定することはできません。

(1) 0052290A mov dword ptr [edx],eax ; EDXおよびEAXが制御可能
(2) 00406011 call dword ptr [ebx+0ch] ; EBXが制御可能

 これは、ヒープ・オーバーフロー脆弱性のよくある脆弱性攻略可能条件です。Winnyだけでなく、他のアプリケーションでヒープ・オーバーフロー脆弱性が発生した場合でも、多くの場合、上記のような命令が脆弱性攻略可能条件となります。これがなぜ任意コードの実行につながるのかについては、後ほど折を見てこの「ITpro Watcher」で詳しく解説したいと思います。

現在の状況

 既に、一部で本脆弱性を利用した検証コード(exploit)が複数出回っています。脆弱性情報公開から1日で検証コードが出現するというのは非常に珍しく、世界的にもあまり例がありません。今後短時間のうちに、検証コードが“改悪”される可能性がありますので注意すべきです。何か動きがあれば、随時お知らせしたいと思います。

この問題を回避するには

 前述した通り、開発者の方から本問題の修正版は提供されていません。また、脆弱性が修正される見通しも立っていません。このため、Winnyを利用されている方は、とりあえずその使用を一時中断し、BitTorrentなどメンテナンスされている他のP2Pファイル交換システムに移行すべきです。

 また、Winnyが動作しているとそれだけでネットワークが侵害される可能性があるため、ネットワーク管理者は自組織にWinnyが動作しているホストが無いか十分チェックされることをお勧めします。

 本脆弱性を利用した攻撃や、ワームなどによるさらなる情報流出事件が発生する可能性があると考え、本脆弱性を修正するためのバイナリ・パッチを試験的に開発し、ヒープ・オーバーフロー攻撃に対して有効であることを確認しました。

 しかし、パッチの一般提供は、社会的影響を考慮するとやはり困難であると判断せざるを得ません。また、各関係機関より、「パッチ提供という行為そのものが日本の法律に抵触する可能性がある」との見解が示されたこともあり、現在のところ、一般提供の見通しは全く立っていません。

 パッチは、開発者だけではなく第三者でも開発可能です。しかしそれは、パッチ開発者自身に重大なリスクをもたらす可能性があります。もしパッチ公開を考えている方がいましたら、少なくとも事前に弁護士や適切な機関に相談されることを強くお勧めします。安易な気持ちでパッチを公開することは絶対に避けるべきです。

Winnyの持つ社会的な問題

 Winny問題は、著作権問題や暴露ウイルスの存在、情報管理、脆弱性、匿名による情報発信、ソフトウエア開発の自由と技術発展、しかるべきP2Pシステムのあり方など、非常に様々な要素や思惑が複雑に絡み合っているように思えます。今後は、Winnyの持つ社会的事柄に関して理解を深め、日本の皆様とこの問題について解決策を探りたいと思っています。