MS11-083 TCP/IP の脆弱性により、リモートでコードが実行される (2588516)

Windows のクラッシュを再現

2011年11月に「MS11-083 TCP/IP の脆弱性により、リモートでコードが実行される (2588516)」というセキュリティ情報及びそれに対応するパッチがリリースされました。これは深刻度が緊急に設定されており、認証を必要としない任意のコード実行が行なえる脆弱性であるため、この脆弱性を悪用するワームが出現する可能性を示唆しています。一方で脆弱性の悪用可能性指標である Exploitability Index では、「2 – 不安定な悪用コードの可能性」と判定されています。つまり、安定的ではないものの、任意のコード実行の可能性があるとマイクロソフト社では考えているようです。IIJ では独自に PoC コードを入手し、脆弱性の再現を試みたため、その結果とともにこの脆弱性の概要を記載します。

MS11-083 で示される脆弱性の CVE 番号は CVE-2011-2013 で、

remote attackers to execute arbitrary code by sending a sequence of crafted
UDP packets to a closed port, aka "Reference Counter Overflow Vulnerability."Code language: plaintext (plaintext)

という記載があります。つまり、閉じられた UDP ポートに対してパケットを連続送信するとリファレンスカウンタが整数オーバーフローするという脆弱性で、Windows のクラッシュや任意のコード実行につながる可能性があるというものです。このカウンタは 32bit OS であれば 0xffffffff+1 (10進数で4,294,967,296) 回でオーバーフローします。

今回 IIJ で行なった脆弱性の再現は任意のコード実行でシステムを乗っ取るのではなく、Windows のクラッシュです。Windows が完全にクラッシュするまでには繰り返し一連の攻撃を行なう必要はありましたが、可能であることを確認しました。以下の図はクラッシュを再現させた際の画像になります。デバッガが致命的なエラーを出力しているのが見て取れます。

Windows のクラッシュを再現
Windows のクラッシュを再現

対策は MS11-083 で示されるパッチを適用することです。早急にパッチの当てられないシステムは、サービスしていない UDP ポートをすべて Firewall などで遮断するなどが考えられます。また、攻撃の検知には UDP 通信のアノーマリ検知が重要になります。

少なくとも攻撃を成立させるには相当回数(40億以上)のパケットを送らなければならない点を考えると、攻撃が短時間で成立する可能性は高くないですが、高負荷のネットワークや別のカーネルの脆弱性を組み合わせた場合、攻撃が成立する確率が上がるため、早急にパッチ適用や回避策の適用を実施することが必要です。

(2011-12-02 追記) Firewall とは、脆弱性を持つ端末上の Windows Firewall のことではなく、この端末と境界を隔てる外部の Firewall のことを指します。脆弱性を持つ端末上で Windows Firewall を有効にしてもこの脆弱性の影響を受けるため、この点にも注意が必要です。

シェアする