關於KB 960715 安全性更新對應用程式所造成的影響及因應措施

微軟在今年(2009) 2月11 日發佈了 960745 安全性更新 ,當應用程式有使用到以下元件時,安裝KB960715將導致應用程式無法正常運作,受影響的程式類型包含 VB6或.NET應用程式,具有自訂表單的Office VBA, 使用ActiveX 元件的網頁應用程式。 由於這一兩個星期陸續接到客戶遇到這個問題,加上相關的資訊較為凌散,因此將它整埋出來供大家參考。

以下為受影響的元件清單:

元件

檔案名稱

CLASSID

Microsoft Animation Control, version 5.0(SP2)

ComCt232.ocx

{1E216240-1B7D-11CF-9D53-00AA003C9CB6}

Microsoft Chart Control 6.0 (SP6)

MSChrt20.ocx

{3A2B370C-BA0A-11d1-B137-0000F8753F5D}

Microsoft Animation Control 6.0 (SP6)

mscomct2.ocx

{B09DE715-87C1-11d1-8BE3-0000F8754DA1}

Microsoft DataGrid Control 6.0 (SP6)

MSDatGrd.ocx

{cde57a43-8b86-11d0-b3c6-00a0c90aea82}

Microsoft FlexGrid Control, version 6.0 (SP6)

MSFlxGrd.ocx

{6262d3a0-531b-11cf-91f6-c2863c385e30}

Microsoft Hierarchical FlexGrid Control 6.0 (SP6)

MShflxgd.ocx

{0ECD9B64-23AA-11d0-B351-00A0C9055D8E}

Microsoft Masked Edit Control, version 6.0 (SP6)

msmask32.ocx

{C932BA85-4374-101B-A56C-00AA003668DC}

Microsoft WinSock Control, version 6.0 (SP6)

MSWINSCK.ocx

{248dd896-bb45-11cf-9abc-0080c7e7b78d}

安全性更新是如何防堵上述元件的安全性漏洞?

此安全性更新將以下機碼中的Compatibility flags 值設為0x400

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{CLSID}

如此一來當有使用到上述元件的應用程式,訪問到以下機碼, 判斷flag被設為0x400時,便停止運作。細節部份可參考:

240797 How to stop an ActiveX control from running in Internet Explorer
https://support.microsoft.com/default.aspx?scid=kb;EN-US;240797

但由於上述元件的版本已經非常舊,微軟在去年底發佈了最新的VB6 runtime extended files(累積更新),在此版所更新的元件已經修補了上述的安全性漏洞。因此若您的應用程式是以此版本的元件進行開發及佈署,則應用程式將不受KB960715所影響。

細節可參考以下文章:

Description of the cumulative update rollup for the Visual Basic 6.0 Service Pack 6 Runtime Extended Files

https://support.microsoft.com/kb/957924/en-us

此套件下載位置:https://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=cb824e35-0403-45c4-9e41-459f0eb89e36

它是如何做到的呢? 在安裝完此延伸檔後,系統會在先前所提到的機碼中(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{CLSID})加入一個key 值, 稱為AlternateCLSID, 並將它的值指向新版元件的CLSID,如此應用程式便會去相對應的位置載入新版的元件來執行。

應用程式如何因應以解決由於KB960715所造成的問題? 這個問題必須針對2個方向來說明-開發環境及用戶端:

若您的應用程式為VB6應用程式或 .NET應用程式但引用了ActiveX 元件:

開發環境:

1. 安裝VB6 SP6

2. 安裝 VB6 Runtime累積的延伸檔案

3. 將引用到元件的檔案重新設計(重新拖拉元件)

4. 重新編譯並部署到用戶端(VB6在封裝執行程式時必須選擇將新元件一起封裝至封裝檔案)

用戶端:

無需任何動作

若您的應用程式為使用自訂表單的Office VBA

開發環境:

1. 安裝VB6 SP6

2. 安裝 VB6 Runtime累積的延伸檔案

3. 將引用到元件的檔案重新設計(重新拖拉元件)

4. 透過檔案搜尋的方式, 將電腦中所有副檔名為 .exd的檔案進行刪除(您必須在搜尋進階選項中勾選”搜尋隱藏檔案及資料夾)

用戶端:

1. 透過檔案搜尋的方式, 將電腦中所有副檔名為 .exd的檔案進行刪除(您必須在搜尋進階選項中勾選”搜尋隱藏檔案及資料夾)

2. 將新版的元件由開發環境複製到用戶端的系統目錄(c:\windows\system32)下並重新註冊(使用Regsvr32.exe)

若您的網站應用程式有包含ActiveX元件並引用到上述有問題的元件:

開發環境:

1. 安裝VB6 SP6

2. 安裝 VB6 Runtime累積的延伸檔案

3. 將引用到元件的ActiveX元件重新設計(重新拖拉元件)

4. 重新編譯ActiveX元件並進行封裝部署(VB6在封裝執行程式時必須選擇將新元件一起封裝至封裝檔案)

5. 由於新版元件之執行授權尚未能被識別,因此您必須在網頁中ActiveX元件宣告的Tag加上授權檔(.lpk)的路徑,細節請參考以下文章:

如何在 Internet Explorer 中使用合法授權的 ActiveX

https://support.microsoft.com/?id=159923

LNK檔下載位置: 960715.lpk

6. 將ActiveX元件重新部署在網頁上