rain forest puppy の許可を得て以下を翻訳しポストします。 翻訳者:Nobuo Miwa BUGTRAQ-JP moderator --- Advisory RFP9907 ----------------------------- rfp.labs -----------    あなた、あなたのサーバ、RDS、そして多くのスクリプトキディへ            ..RDSアタックから守るには.. ------------------------------ rain forest puppy / rfp@wiretrip.net --- 内容: - 1. 問題点 - 2. 解決策 - 3. いろいろな状況 - 4. msadc.pl攻撃の発見 - 5. 最後に - 6. 参考 ----------------------------------------------------------------------- これを読む時間が無いのですか? その場合は、以下のファイルを削除して ください。: ?:\Program Files\Common Files\System\Msadc\msadcs.dll 出来るだけ早く削除し、問題だらけのRDS機能を無効にしてください。 もし、RDSを使いたければ以下をよく読んだ方がいいです。 ----------------------------------------------------------------------- ----[ 1. 問題点 .gov,.mil そして microsoft.com でさえもWebサーバに被害を受けました。これ はRDSが原因です。今、明らかなことは、IIS 4.0は外部から極めて危険な状況に あるということです。しかし、Microsoftはひとつでもふたつでもなく、三つの 違うパッチをリリースしました。更に、同じアドバイザリを何度もリリースしま した。そして、未だに問題は解決されていません。 そこで我々は勉強しなければいけません。対策の方法は何通りも考えられます。 私がRDSについてのExplotコードを書いてから、更によく調べてみたことを、こ のアドバイザリを提供することによって、みなさんと知識の共有をしたいと思い ます。 問題は基本的には Jet 3.5 がVBAのシェル機能を呼び出すことが出来ることにあ ります。(これは以下のURLにあるRFP9901: NT ODBC remote vulnerabilities に書かれています。) http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2 MDAC 1.5がインストールされたデフォルト設定のIIS 4.0があったとします。こ れには、リモートからWebを通してODBCにアクセスするためのRDSが含まれており /msadc/msadcs.dllというDLLを通して行われます。(これは、以下のURLにある RFP9902: RDS/IIS vulnerability and exploitに書かれています。) http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2 ここで二つの問題があることが分かります。更に第三の問題点があります。それ は(RFP9902に書かれている)Microsoftの推奨している対策をバイパスすることの 出来る VbBusObj というサンプルコンポーネントを含む、RDS SDKパッケージに よってインストールされるサンプルページにあります。 ----[ 2. 解決策 問題は多くの対策があることと、使用方法によって多くの組み合わせがあること です。あなたがwww.microsoft.comその他から入手することが出来なかった場合 の為に i386用のみの全ての重要なバイナリファイル(英語版のみ)をミラーして おきました。以下に出来るだけ詳細に説明をしていきたいと思います。 -対策 #1: cmd.exe を移動する (ULG が推奨する対策方法) http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html 残念ながらこの対策には問題があります。mdac.pl は cmd.exe を使用するよう にハードコーディングされています(場合によってはcommand.com)。        CMD.EXE は 攻撃ツールには必須ではありません。 私は、コンパチビリティを持たせるためにこの方法は使っていますが、別の方法 で攻撃を行うことが出来ます。あなた自身で試すことができます。mdac.pl を 'cmd /c'という文字列を呼び出せないように編集してみてください。あなたはそ れでも、'rdisk'のような実行ファイルを使用することが出来ます。覚えておい て欲しいことは、cmd.exeを使用しない場合は、'copy'のようなコマンドを使う ことは出来なくなるということです。もちろん、ファイルのリダイレクションも 使えなくなります。これらは、cmd.exeでのみ提供される機能だからです。 更に知らなければならないことは、cmd.exe/command.comを移動してしまうこと はその場しのぎの対策でしかないと、ということです。侵入者が移動先を知って しまえば彼等はそれを使用することが出来てしまうからです。そして、System からのアクセスが出来ないように権限を書き換えてしまうこともいい方法ではあ りません。既にその他のパッチがあるのでそちらを使った方がいいです。 -対策 #2: MDAC 1.5 から 2.0 へアップグレードする MDAC 2.0 を Jet 3.5 から Jet 3.52 へ変更します。これは、VBA shell() に対 しする攻撃には効果がありません。そして、デフォルトでは RDS は無効には出 来ません。 * デフォルトのJetエンジンを3.52にすることは、custom handler supportにRDS * に匿名アクセスを禁止させるために、Microsoft.Jet.OLEDB.3.51*プロバイダ * を作成することを許可します。 しかし、これもこのままでは良い方法ではありません。あなたは少なくとも、 custom handler supportを有効にしなければいけません。これは、以下のレジス トリキーで可能です。 HKEY_LOCAL_MACHINE\Software\Microsoft\DataFactory\HandlerInfo\ Keyname: HandlerRequired Value: DWORD:1 (safe) or 0 (unsafe) この値を1にするべきです。これは更にMicrosoftから提供されているHotfixの 'handsafe.exe/.reg'で行われていることです。これは、以下のURLにあります。 http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe 実行するときには、handsafe.remが使用されます。handsafe.regに名前を変更し てからダブルクリックしてレジストリに書き込むことが出来ます。 このようにしてRDS攻撃から防御しようとしても、Excel,WordそしてAccessファ イルのトロイの木馬を含んだODBC攻撃には弱点を持ったままです。つまり、これ だけでは十分ではない、ということです。 -対策 #3: MDAC 1.5 を 2.1 以降にアップグレードする MDAC 2.1をJet 3.5 から 弱点の無いJet 4.0エンジンに変更します。しかし、 3.5 と 4.0 には互換性の問題があります。多くのユーザがこの互換性の問題に よってアップグレードをしたがらないでしょう。 * デフォルトの Jetエンジンを 弱点の無い4.0に変更することは、匿名RDSのア * クセスを禁止するために custom handler support を許可します。 しかしながら、custom handlerはデフォルトでは有効にされていません。あなた は、上記のHandlerRequiredレジストリキーの値を1にセットしなければいけま せん。その為には、regeditを使用するかhandsafe.exe/.reg fixを実行します。 -対策 #4: MDAC 1.5 を 2.0 から 2.1 へアップグレードする もしあなたが良い管理者であるなら、あなたは常にソフトウェアをアップグレー ドし続けているでしょう。もしそうしているのなら、全てのアップグレードの道 程を通っている事でしょう。2.1 に直接アップグレードすることには問題があり ます(上記のように'HandlerRequired'レジストリキーを有効にしなければいけ ません)。2.1 は、デフォルトでは(弱点の無い)Jet 4.0エンジンを使用してい ます。しかしながら、2.0 へのアップグレードを行わなかった場合は、 Microsoft.Jet.OLEDB.3.51プロバイダを使用しています。これは、RDSを含めた アプリケーションは古い(弱点のある)Jet 3.51エンジンを呼び出していることを 意味します。 あなたはこれらの古い設定を削除する必要があります。ひとつの方法は、以下の レジストリキーで行えます。 HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51 HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51Errors しかしながら、あなたは 4.0エンジンの互換性の問題に直面したままです。従っ て、これは素晴らしい解決策ではありません。 -対策 #5: JetCopkg.exe (MS99-030)をインストールする JetCopkg.exe は 'sandbox'に代表される安全な機能を持っている、攻撃されな い修復を施された Jet 3.5エンジンです。この安全な機能は、以下のレジストリ キーによって制御されています。 HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\engines\SandboxMode それぞれの値は以下の意味を持ちます: 0 無効 1 アクセスのみを有効にする, それ以外は無効 2 アクセスのみを無効にする、それ以外は有効(デフォルト) 3 全て有効 (Note 1: '有効'は Microsoft Access から利用できるという意味です) (Note 2: これらは以下のURLに全て記述されています: http://support.microsoft.com/support/kb/articles/q239/1/04.asp) (Note 3: このキーに設定されているデフォルトのパーミッションは安全ではあ りません! あなたは'Authenticated Users'から'Read Only'に変更す るべきです。このデフォルトの設定における危険性については、Eric Shultzeが私のサイトにポスとしてくれた以下のURLを参照下さい。) http://www.wiretrip.net/rfp/p/doc.asp?id=11&iface=2 上記の値を 2 か 3 にした場合は安全です。 これは適切な推奨される方法です。 Jet 3.5エンジンを使用しているので互換性の問題はありません。しかし、これ はRDSを無効にはしていません。攻撃者はあなたのデータベース・リソースに匿 名アクセスできます。あなたのデータをめちゃくちゃにすることも出来ます。あ なたは対策が必要です。私はRDSを無効にするか(下記参照)、MDAC 2.0にアップ グレードすることを推奨します(しかし、MDAC 2.0を最初にアップグレードして から、次に JetCopkg をインストールしてください)。MDAC 2.0 にアップグレー ドすることによって、匿名アクセスを無効に出来るハンドラの制御が出来るよう になります。 -対策 #6: RDS の削除/無効 これは、上記のJetCopkgと併せて行う場合に一番良い方法です。もしあなたが何 らかの理由(Y2K対策の為のシステム変更禁止)でシステムを変更するようなイン ストールが出来ない場合は、あなたはRDSを無効にすることによって、少なくと もリモートからの攻撃の危険性を減らすことが出来ます。あなたはこれを荒っぽ いやり方ですが、以下のファイルを削除することによって可能になります。 ?:\Program Files\Common Files\System\Msadc\msadcs.dll これは、RDSインターフェースを提供するDLLです。しかし、以下のような手順で きちんと対策を行うことを薦めます。 * IISによってマッピングされている /msadc仮想ディレクトリを削除します。こ  れを行うために、Microsoft Management Console/Internet Service Manager  を開いて以下の操作を行ってください。 * 'Internet Information Server'を選択 * 適切なシステムを選択 * 'Default Web Site'を選択 * 'msadc'を選択 * 'Del' keyを押すか、'delete icon'をクリック * 'Are you sure?' 'Yes.' * 以下のレジストリキーを削除します。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC \Parameters\ADCLaunch (Note: 見やすくするために折り返しています) * 以下のフォルダに含まれる全てのファイルとサブディレクトリを削除します。 ?:\Program Files\Common Files\System\Msadc ----[ 3. いろいろな状況 -状況 #1: RDSが必要です! おやおや、このような声を聞くことは残念なことです。でも大丈夫、可能です。 あなたは、少なくとも MDAC 2.0 にアップグレードする必要があります。もし、 あなたが、backwards-compatibilityの問題を抱えているのであれば、MDAC 2.0 をJetCopkgと共に使用してください。そうでないなら、MDAC 2.1にさっさと アップグレードするべきです。 'HandlerRequired'レジストリキーが有効になっていることを確認して下さい。 また、RDSのサンプルが削除されていることも確認して下さい。Microsoftは更に MMC以下のデフォルトWebサイトの /msadcディレクトリの匿名アクセスを無効に することも推奨しています。これには custom handler を使用することになりま す。これらの情報は、以下のURLにあります。 http://www.microsoft.com/Data/ado/rds/custhand.htm -状況 #2: サンプルファイルの削除以外のシステムの更新を禁止されています。 重要な情報です custom handlersを使うことは RDS全体を使用不能にすること無しに RDS への匿 名アクセスを防ぐ唯一の方法です。しかし、RDSのサンプルが以下にあれば、 ?:\Program Files\Common Files\System\Msadc\Samples VbBusObjを含むサンプルファイルはcustom handlersをバイパスして使用するこ とが出来てしまうのです! 従って、このようなサンプルファイルが商用のサー バに存在していい理由はどこにも無いのです。そして、それは削除されるべきで す。手順は以下の通りです。 * 以下のディレクトリ以下を全て削除します。 ?:\Progam Files\Comman Files\System\Msadc\Samples * 以下のレジストリキーを削除します。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC \Parameters\ADCLaunch\VbBusObj.VbBusObjCls これにより、VbBusObjは削除されます。そして、あなたのcustom handlersがバ イパスされることを防ぎます。 ----[ 4. msadc.pl攻撃の発見 msadc.plのversion 1と2による攻撃を発見することは困難ではありません。この 攻撃は今でも行われていると思いますが、残念ながら、改造も容易なので、その 場合は検知は困難だと思います。私がそれを書いたときには、弱点を暴くことに 専念していました。 msadc.pl は、最初に、ターゲットサーバの/msadc/msadcs.dll をGETしようとし ます。もし、それが存在する場合にはそれが行われ、存在しない場合にはエラー メッセージと共に終了します。この最初のGETは、その度にあなたのサーバのロ グに残るでしょう。しかし、このGETをHEADやPOSTに変更するようなスキルを持 った攻撃者もいるでしょう。さらに、hex-encodingしたURLのように痕跡の残り にくい攻撃を行うことも出来るでしょう。しかし、それでもログには残ります。 大事な事は、msadcs.dll をパラメータ無しで呼び出すということは、誰かが見 てはいるが(まだ)使ってはいないことを意味します。RDS というものは、誰も見 ているだけ、ということは無く、正しいユーザはすぐにそれを利用します。従っ て、パラメータ無しで呼び出して見ているだけというのは「怪しい」ということ になります。 もし、msadcs.dllが存在すれば(それはレスポンスから分かります)、コマンドを 走らせるように要求します。デフォルトでは、msadc.pl は 'cmd /c' か 'command /c' (互換性のために)を実行させようとします。これは、cmd.exe か command.com の存在に依存していることを意味します。しかしながら、そのどち らでもないものを呼び出すことも出来るのです。 以下のスクリプトは RDSの要求をします。以下のURLのどれかにPOST要求を行い ます。 通常の要求: /msadc/msadcs.dll/ActiveDataFactory.Query custom handlersをバイパスさせるためのVbBusObj: /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetRecordset NetBIOS名を要求するVbBusObj: /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetMachineName 現在、もしあなたが 合理的な目的でRDSを利用しているなら、 ActiveDataFactory.Query URLを利用しているでしょう。しかし、VbBusObjは不 要なはずです。従って上記の二つのURLは攻撃と見なしていいはずです。しかし 'VbBusObj'をgrep等で検索することは正しい発見方法ではありません。例えば、 以下のようにhex-encode出来るからです。 /%6Dsadc/%6Dsadcs.dll/V%62BusO%62j.V%62BusO%62jCls.GetRecordset (これはほんの一例です) これでは文字列検索することは出来ませんね。従って、文字列検索は役に立ち ません。 更に二つのことを付け加えておきたいと思います。 * デフォルトのmsadc.plスクリプトは'ACTIVEDATA'をUser-Agenに使用していま す。これはこのスクリプトによる攻撃を認識する助けになると思いますが、通常 のRDSコントロールもこのUser-Agentを使用します。従って、通常のトラフィッ クの中からこれを探し出すのは困難でしょう。 * デフォルトのmsadc.plスクリプトはMIMEのセパレータに '!ADM!ROX!YOUR!WORLD!'を使用しています。しかし、これはログには残されませ んが、いくつかの侵入検知システムではこれをキーワードに検知することが可能 です。 デフォルトではmsadc.plスクリプトはサーバで見つかったローカルの .MDBファ イルを利用しようとします。もしそれが見つかったなら、.MDBファイルに'AZZ' という名前のテーブルを作成するでしょう。そのテーブルは攻撃の後でも消しま せん。しかし、msadc.plのversion 2 では'AZZ'テーブルを作らないクエリも利 用することが出来ます。そして、ローカルの.MDBさえも利用しないことが可能に なっています(UNCをサポートしています)。 ----[ 5. 最後に このアドバイザリを、あなた方の為に夜も寝ないで書いていたときに、他の重要 なことを書くためにそれを中断しなければならなくなりました。 あなたがRDSによって攻撃されたことを知る最も良い方法は、以下のURLに示され ています。 http://www.wiretrip.net/rfp/ そんなに難しいことではありません。最低限、上記のファイルを削除すればあな たは、まあまあ安全です。これでWebサイトをメチャクチャにされる心配はなく なります。 進んでパッチを充てましょう。 .rain.forest.puppyより PS.私が普通の人間です。従って、このドキュメントにも間違いがあるかもしれ ません。しかし、もう疲れました。このことから開放されたいのです。間違いが あっても許してください。 訳者注)私の翻訳に致命的な間違いがあった場合には連絡してください。 ----[ 6. 参考 - Office 97/Jet 3.5 update binary (i386) http://www.wiretrip.net/rfp/bins/msadc/jetcopkg.exe http://officeupdate.microsoft.com/isapi/gooffupd.asp?TARGET=/downloaditems/JetCopkg.exe - Microsoft Universal Data Access homepage http://www.microsoft.com/data/ - MDAC 2.1.2.4202.3 (GA) (aka MDAC 2.1 sp2) update (i386) http://www.wiretrip.net/rfp/bins/msadc/mdac_typ.exe http://www.microsoft.com/data/download_21242023.htm - MDAC 2.1.1.3711.11 (GA) (aka MDAC 2.1 sp1) hotfix http://www.microsoft.com/data/download/jetODBC.exe - MDAC 2.1 release manifest http://www.microsoft.com/data/MDAC21info/MDAC21sp2manifest.htm - MDAC 2.1 installation FAQ http://www.microsoft.com/data/MDAC21info/MDACinstQ.htm - Security Implications of RDS 1.5, IIS 3.0 or 4.0, and ODBC http://support.microsoft.com/support/kb/articles/q184/3/75.asp - Unauthorized ODBC Data Access with IIS and RDS (MS99-004) http://www.microsoft.com/security/bulletins/ms98-004.asp - Re-release of MS99-004 (MS99-025) http://www.microsoft.com/security/bulletins/ms99-025.asp - MS99-025 FAQ (best explanation of problem by Microsoft) http://www.microsoft.com/security/bulletins/MS99-025faq.asp - MS99-30: Patch available for Office ODBC Vulnerabilities http://www.microsoft.com/security/bulletins/ms99-030.asp - Jet Expression Can Execute Unsafe VBA Functions http://support.microsoft.com/support/kb/articles/q239/1/04.asp - Implementing Custom Handlers in RDS 2.0 http://www.microsoft.com/Data/ado/rds/custhand.htm - Handsafe registry patch (enables handlers) http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe http://www.microsoft.com/security/bulletins/handsafe.exe - RFP9901: NT ODBC remote compromise http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2 - RFP9902: RDS/IIS 4.0 vulnerability and exploit http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2 - RDS exploit (msadc.pl v1 and v2) http://www.wiretrip.net/rfp/p/doc.asp?id=16&iface=2 - ULG recommended fix on OSALL http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html - CERT blurb http://www.cert.org/current/current_activity.html#0 - Attrition mirror of defaced websites (patch or you'll be on it!) http://www.attrition.org/mirror/attrition/ --- rain forest puppy / rfp@wiretrip.net ----------- ADM / wiretrip --- Patch your system before flipper and fuqnut get to you... --- Advisory RFP9907 ----------------------------- rfp.labs -----------