1.概要Microsoft Windows には、特定の RDP パケットを処理する際に解放済みメモリを使用してしまう脆弱性が存在します。リモートの第三者に利用された場合、システムを不正に停止される、あるいはシステム上で不正な操作が実行される可能性があります。この脆弱性は、Luigi Auriemma 氏が 2011/5/16 に発見し、Microsoft が先日の 2012/3/13 にアドバイザリと共にセキュリティ更新プログラムを公開した問題です。既にこの脆弱性を悪用する実証コードが公開されており、攻撃を受ける可能性が高いことが考えられるため、RDP サービスが有効な環境では速やかに以下に記載する対策を実施することを推奨します。2.深刻度(CVSS)9.3http://nvd.nist.gov/cvss.cfm?version=2&name=CVE-2012-0002&vector=%28AV%3AN/AC%3AM/Au%3AN/C%3AC/I%3AC/A%3AC%293.影響を受けるソフトウェアサポートされる全ての Microsoft Windows OS ※※Remote Desktop Protocol (RDP) サービスが有効な環境のみ影響を受けます。4.解説Remote Desktop Protocol (RDP) は、Microsoft によって開発された ITU-T T.120 を拡張したローカルホストとターミナルサービスが有効なリモートホスト間の通信で利用されるプロトコルであり、リモートデスクトップまたはターミナルサービスとして、既定でポート 3389/tcp を利用して通信を行います。Microsoft Windows の RDP サービスには、特定の RDP パケットを処理する際のユーザコネクションの取り扱いに不備があるため、maxChannelIds フィールドに特定の値が指定された T.125 ConnectMCSPDU パケットを処理中に、コネクションが切断された場合、RDPWD!NM_Disconnect() 関数がメモリオブジェクトのポインタを適切に初期化せず解放してしまう問題があります。このため、termdd!IcaBufferAlloc()/termdd!IcaBufferAllocEx() 関数を介して、解放済みのメモリオブジェクトを参照可能な脆弱性が存在します。この脆弱性を利用することで、リモートの攻撃者は NetworkService または Local System 権限で任意のコードが実行可能となります。但し、RDP サービスは、デフォルトでは無効に設定されているため、当該サービスを有効にする環境のみ、この脆弱性の影響を受けます。また、Windows Vista/Server 2008/7/Server 2008 R2 のネットワークレベル認証が有効な環境では、RDP コネクションを確立する際に認証処理が行われるため、この脆弱性を悪用するためには、標的システムのアカウント情報が既知である必要があります。なお、Luigi Auriemma 氏が、この脆弱性を報告するために Zero Day Initiative (ZDI) から Microsoft に送った報告用の実証コード (PoC) が Microsoft から流出した可能性があると報告されています。Details about the ms12-020 proof-of-concept leakhttp://aluigi.org/adv/ms12-020_leak.txtMS12-020 RDP Code Leak Mystery Deepens As Microsoft Remains Silenthttp://threatpost.com/en_us/blogs/ms12-020-rdp-code-leak-mystery-deepens-microsoft-remains-silent-031612Microsoft confirms MAPP proof-of-concept exploit code leakhttp://www.zdnet.com/blog/security/microsoft-confirms-mapp-proof-of-concept-exploit-code-leak/10872Proof-of-Concept Code available for MS12-020http://blogs.technet.com/b/msrc/archive/2012/03/16/proof-of-concept-code-available-for-ms12-020.aspx5.対策(本脆弱性は対策をWebにも公開しました)以下の Web サイトを参考に、それぞれの OS バージョンに対応する適切なパッチ (MS12-020) を入手し適用することで、この脆弱性を解消することが可能です。MS12-020:http://technet.microsoft.com/security/bulletin/MS12-020あるいは、回避策項目を参考に、下記のいずれかの回避策を実施することで、この脆弱性による影響を緩和または回避することが可能です。・リモートデスクトップ、ターミナルサービスを無効にする・TCP ポート 3389 をファイアウォールでブロックする・ネットワークレベル認証を有効にする※ (Windows Vista/Server 2008/7/Server 2008 R2 のみ)※ネットワークレベル認証を有効する回避策については、自動化された "Microsoft Fix it" ソリューションが公開されています。詳細については、以下の Web サイトを参照下さい。サポート技術情報 2671387:http://support.microsoft.com/kb/2671387また、当該パッチ MS12-020 では、他にもターミナルサーバの実装に起因してサービス不能状態を引き起こす脆弱性 (CVE-2012-0152) も解消しています。6.ソースコード(Web非公開)(執筆:株式会社ラック コンピュータセキュリティ研究所)※Web非公開該当コンテンツ閲覧をご希望の方はScan Tech Reportにご登録(有料)下さい。