看到了不少读者对于我“对Norton误报WinXP事件的技术分析”的反馈。在这里,首先我感谢这些阅读了我的blog并提供宝贵意见的读者,不管是支持还是反对我的观点。
明显,我的第一篇blog提供的技术细节不够。这里向大家抱歉。
综合一下,有三个问题我没有说清楚。
第一,为什么可能一个错误的特征码会只误报XP中文版的系统文件?
第二,如何验证XP中文版的系统文件是否有特殊代码?如何使用我提及的各种工具?
第三,我写这篇blog的目的是什么?
我们先来看第一个问题。
我在上篇blog中提及,如果收到的病毒样本是基于WinXP中文版的Lsasrv.dll的修改,而特征码提取在系统文件中未经修改的部分,这个特征码就会误报原始的WinXP中文版的Lsasrv.dll,而且,不会匹配(误报)WinXP英文版的Lsasrv.dll。
下面给大家举一个简化的例子。
英文版程序
// US-Sample.cpp
//
#include "stdafx.h"
void foo( char * strMsg );
int _tmain(int argc, _TCHAR* argv[])
{
char * strVersion = "This is DLL version 1.0";
foo( strVersion );
return 0;
}
void foo( char * strMsg )
{
printf( "%s\n", strMsg );
}
中文版程序
// CHS-sample.cpp
//
#include "stdafx.h"
void foo( char * strMsg );
int _tmain(int argc, _TCHAR* argv[])
{
char * strVersion = "这是DLL版本1.0";
foo( strVersion );
return 0;
}
void foo( char * strMsg )
{
printf( "%s\n", strMsg );
}
这两个程序功能上是一样的,区别只在字符串资源的本地化。
用VS2003编译, Debug version。
如果一个恶意的攻击者修改中文版程序,也就是CHS-sample.exe,可以直接在汇编代码层次修改。
这就是用Hiew攻击打开CHS-sample.exe。这三条指令就是调用printf函数。
我们修改为
并保存为CHS-Sample2.exe。
执行CHS-Sample2.exe,就会出现以下对话框,因为执行了我们刚刚加入的int 3 指令。
WinDBG信息:
CHS_sample!foo+0x27:
00000000`00411ac7 cc int 3
0:000:x86> k
ChildEBP RetAddr
0017fdd8 00411a6e CHS_sample!foo+0x27
0017febc 00411e10 CHS_sample!main+0x2e
0017ffa0 766c19f1 CHS_sample!mainCRTStartup+0x170
0017ffac 7772d109 kernel32!BaseThreadInitThunk+0xe
0017ffec 00000000 ntdll32!RtlCreateUserProcess+0x8c
注意到CHS-Sample.exe和CHS-Sample2.exe的区别是非常小的。
如果决定检测CHS-Sample2.exe,而特征码提取的部分没有包括到修改的这几条指令,例如计算从偏移量0开始的0x400个字节的MD5,那么这个特征码就只会误报CHS-Sample.exe,而不会误报US-Sample.exe。
下面,我们来看第二个问题。
如何验证XP中文版的系统文件是否有特殊代码?如何使用我提及的各种工具?
最为直接的方式是使用IDA将中文版本的Lsasrv.dll和英文版本的Lsasrv.dll调入。就可以一个一个对比函数的实现。如果有更加高级的程序分析软件(分析汇编指令的数据流和控制流),可以更方便地比较。
不过,因为IDA不是免费的。这里描述一下如何用WinDBG加上公共符号库(public symbol)来做到这一点。
1)使用WinDBG attach lsass.exe。启动WinDBG, F6。
2)创建crash dump
.dump c:\test\lsasrv-chs.dump
3)Detach WinDBg,这样可以不影响系统的正常使用。注意是Detach,而不是直接关闭WinDBG
4)用WinDBG打开Crash Dump.
Windbg –z c:\test\lsasrv-chs.dump
5)使用公共符号
.sympath srv*c:\test\*http://msdl.microsoft.com/download/symbols
6)重新加载Lsasrv.dll的symbol
.reload –f lsasrv.dll
7)查看各个函数的实现
0:026> lmvm lsasrv
start end module name
75730000 757e4000 lsasrv (pdb symbols) c:\test\lsasrv.pdb\C059631A2E3447139752DB410D8884392\lsasrv.pdb
Loaded symbol image file: lsasrv.dll
Mapped memory image file: c:\test\lsasrv.dll\44E460EBb4000\lsasrv.dll
Image path: C:\WINDOWS\system32\lsasrv.dll
Image name: lsasrv.dll
Timestamp: Thu Aug 17 05:28:27 2006 (44E460EB)
CheckSum: 000BF9DC
ImageSize: 000B4000
File version: 5.1.2600.2976
Product version: 5.1.2600.2976
File flags: 0 (Mask 3F)
File OS: 40004 NT Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: Microsoft® Windows® Operating System
InternalName: lsasrv.dll
OriginalFilename: lsasrv.dll
ProductVersion: 5.1.2600.2976
FileVersion: 5.1.2600.2976 (xpsp_sp2_gdr.060817-0106)
FileDescription: LSA Server DLL
LegalCopyright: © Microsoft Corporation. All rights reserved.
0:026> x lsasrv!*lsa*
757385cf lsasrv!LsapDbQueryInformationPolicy = <no type information>
75799b94 lsasrv!LsarQueryForestTrustInformation = <no type information>
75770028 lsasrv!LsapTruncateUnicodeString = <no type information>
7578be3c lsasrv!LsapWinerrorToNtStatus = <no type information>
757cf088 lsasrv!LsapSecpkgFunctionTable = <no type information>
757aad1a lsasrv!LsapDsOpenObject = <no type information>
757a3859 lsasrv!LsarQueryTrustedDomainInfo = <no type information>
... ... (省略若干行输出)
0:026> u lsasrv!LsapDsOpenObject
lsasrv!LsapDsOpenObject:
757aad1a 8bff mov edi,edi
757aad1c 55 push ebp
757aad1d 8bec mov ebp,esp
757aad1f 83ec2c sub esp,2Ch
757aad22 8365fc00 and dword ptr [ebp-4],0
757aad26 53 push ebx
757aad27 8b5d08 mov ebx,dword ptr [ebp+8]
757aad2a 8b4330 mov eax,dword ptr [ebx+30h]
0:026> u
lsasrv!LsapDsOpenObject+0x13:
757aad2d 8bc8 mov ecx,eax
757aad2f 49 dec ecx
757aad30 49 dec ecx
757aad31 c645f800 mov byte ptr [ebp-8],0
757aad35 7417 je lsasrv!LsapDsOpenObject+0x34 (757aad4e)
757aad37 49 dec ecx
757aad38 49 dec ecx
757aad39 740a je lsasrv!LsapDsOpenObject+0x2b (757aad45)
0:026> u
lsasrv!LsapDsOpenObject+0x21:
757aad3b b80d0000c0 mov eax,0C000000Dh
757aad40 e99e000000 jmp lsasrv!LsapDsOpenObject+0xc9 (757aade3)
757aad45 c745081c000a00 mov dword ptr [ebp+8],0A001Ch
757aad4c eb07 jmp lsasrv!LsapDsOpenObject+0x3b (757aad55)
757aad4e c7450822000a00 mov dword ptr [ebp+8],0A0022h
757aad55 56 push esi
757aad56 8d4df8 lea ecx,[ebp-8]
757aad59 51 push ecx
采用这个办法可以一一查看和对比中文版和英文版的Lsasrv.dll的各个函数的实现。例如,对于对于lsasrv!LsapDsOpenObject,中文版本5.1.2600.2976的实现如下,
0:025> lmvm lsasrv
start end module name
74480000 7452e000 lsasrv (pdb symbols) c:\test\lsasrv.pdb\C059631A2E3447139752DB410D8884392\lsasrv.pdb
Loaded symbol image file: lsasrv.dll
Mapped memory image file: c:\test\lsasrv.dll\44E4613Cae000\lsasrv.dll
Image path: C:\WINDOWS\system32\lsasrv.dll
Image name: lsasrv.dll
Timestamp: Thu Aug 17 05:29:48 2006 (44E4613C)
CheckSum: 000BA5F0
ImageSize: 000AE000
File version: 5.1.2600.2976
Product version: 5.1.2600.2976
File flags: 0 (Mask 3F)
File OS: 40004 NT Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0804.04b0
CompanyName: Microsoft Corporation
ProductName: Microsoft(R) Windows(R) Operating System
InternalName: lsasrv.dll
OriginalFilename: lsasrv.dll
ProductVersion: 5.1.2600.2976
FileVersion: 5.1.2600.2976 (xpsp_sp2_gdr.060817-0106)
FileDescription: LSA Server DLL
LegalCopyright: (C) Microsoft Corporation. All rights reserved.
0:025> u lsasrv!LsapDsOpenObject
lsasrv!LsapDsOpenObject:
744fad1a 8bff mov edi,edi
744fad1c 55 push ebp
744fad1d 8bec mov ebp,esp
744fad1f 83ec2c sub esp,2Ch
744fad22 8365fc00 and dword ptr [ebp-4],0
744fad26 53 push ebx
744fad27 8b5d08 mov ebx,dword ptr [ebp+8]
744fad2a 8b4330 mov eax,dword ptr [ebx+30h]
0:025> u
lsasrv!LsapDsOpenObject+0x13:
744fad2d 8bc8 mov ecx,eax
744fad2f 49 dec ecx
744fad30 49 dec ecx
744fad31 c645f800 mov byte ptr [ebp-8],0
744fad35 7417 je lsasrv!LsapDsOpenObject+0x34 (744fad4e)
744fad37 49 dec ecx
744fad38 49 dec ecx
744fad39 740a je lsasrv!LsapDsOpenObject+0x2b (744fad45)
0:025> u
lsasrv!LsapDsOpenObject+0x21:
744fad3b b80d0000c0 mov eax,0C000000Dh
744fad40 e99e000000 jmp lsasrv!LsapDsOpenObject+0xc9 (744fade3)
744fad45 c745081c000a00 mov dword ptr [ebp+8],0A001Ch
744fad4c eb07 jmp lsasrv!LsapDsOpenObject+0x3b (744fad55)
744fad4e c7450822000a00 mov dword ptr [ebp+8],0A0022h
744fad55 56 push esi
744fad56 8d4df8 lea ecx,[ebp-8]
744fad59 51 push ecx
通过对比,可以看出,它们之间的区别只在于变量和代码的偏移量,其功能是完全一致的。
采用这个办法,你可以对比其它函数的实现,以及其它系统DLL,如kernel32.dll,ntdll.dll等等。
最后,我回答一下写这篇blog的目的是什么?先感谢你阅读了这么长而且枯燥的技术阐述。相对于“XP系统文件可能存在后门”的新闻,技术阐述不会更加吸引眼球,但是它却更接近事实。给大家提供一个从技术角度的分析,就是我的目的。而我也个人认为,这对我们软件业的发展会有好处。
又及,我所指的“摒弃浮躁”,具体是指,与其花时间做无谓的猜测,不如静下心研究技术掌握技术。
再次感谢你读了这么长的blog。
6/17更新
后记:
盆盆一篇不错的评论“也谈Norton错杀Windows XP”
盆盆的文采胜我颇多。
我的这篇blog的目的就是为了技术上分析Norton误杀Windows XP中文版系统文件的原因。讨论时候,就事论事。或许有人压根就不关心这个问题的答案。每个人都有自由选择相信什么,但是诸如“是否是中国人”的言语无助于任何理性的讨论。
喊几句大口号非常容易,但我看不出这能如何真正提高我们的信息安全水平。技术不是全部,但不懂技术,试问又如何保障安全?
分享到:
相关推荐
分区软件:Norton PartitionMagic 8.0
诺顿安全:Norton Antivirus & Security 3.9.1.2245
New York: Norton, 352 pp., [dollar]5.95 (paper) 528 Book Reviews Since social behavior is often a major focus in IEPs and since affective objectives are more difficult to develop than cognitive ...
New York: Norton, 164 pp., [dollar]19.95 Psyrhologv in rhe Schools Volume 31, January 1994 B O O K R E V I E W S GILBERT R. GREDLER University of South Carolina BARKER, P. (1990). Clinical ...
Norton专用的卸载工具:Norton Removal Tool V2011.0.5.13。软件介绍:当你在windows不能正常卸载Norton系列软件时,通过使用这个小工具能够帮助你解决卸载问题,让你不再请神容易送神难了。诺顿用户可以通过它来...
Norton PartitionMagic 8.0 Norton PartitionMagic 8.0
Norton Utilities15 破解补丁
New York: Norton, 445 pp., [dollar]9.95 Book Reviews 243 Realistically, schools must rely on themselves to navigate through America’s tur- bulent social waters: “. . . most crises are managed ...
New York: Norton, 316 pp., [dollar]32.95 Book Reviews 33 1 My overall impression is that the book contains some very good ideas offered prematurely, before the author had taken adequate time to ...
Norton PartitionMagic 8.05
NOrton Ghost USB Edition you can clone your harddrive using norton ghost usb edition 1.Instal SP27608.exe 2.Extract Windows98_SE_No_Ramdrive using ISO software anywhere you want 3.Format USB Using ...
Norton Utilities 8.0 中文版 DOS时代,大名鼎鼎磁盘和文件管理工具集。 Norton Symantec出品。
Norton任务管理器
Norton全系列注册机
Norton专用卸载工具,针对不能卸载的NORTON产品
Norton removal tool, 诺顿移除工具, 可彻底删除诺顿NIS, NAV
学会快速装系统 图解 Norton Ghost 使用 来源:佚名(读取中...) 2009-9-25 【字体:大 中 小】 切换为 即使你拥有最先进的电脑, 采用传统的方法, Windows 的安装速度仍然是令人头痛的! 有没有什么重装系统的简便方法呢...
Symantec Norton Ghost 15.01 注册码
Norton WinDoctor 2006磁盘安全
acer笔记本自带的Norton Online Backup,安装应该是运行oemsetup.cmd。这是专门为acer笔记本定制的