關於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
它是如何做到的呢? 在安裝完此延伸檔後,系統會在先前所提到的機碼中(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元件重新部署在網頁上
Comments
- Anonymous
March 10, 2009
PingBack from http://www.clickandsolve.com/?p=21017