在灰鸽子VIP1.2版本中:
begin
Svc := OpenService(Mgr, PChar(Peizhi.WinServerName), SERVICE_ALL_ACCESS);
Result := Svc <> 0;
if Result then
begin
QueryServiceConfig(Svc, nil, 0, Size);
Config := AllocMem(Size);
try
QueryServiceConfig(Svc, Config, Size, Size);
ServiceStartName := PQueryServiceConfig(Config)^.lpServiceStartName;
//MessageBox(0, PChar(Peizhi.WinServerName), SApplicationName, MB_ICONERROR);
if CompareText(ServiceStartName, ''LocalSystem'') = 0 then
ServiceStartName := ''SYSTEM'';
finally
Dispose(Config);
end;
CloseServiceHandle(Svc);
end;
CloseServiceHandle(Mgr);
end;
很多木马程序为了运行和获得系统权限,都需要或明或暗的添加服务。在win32系统中,添加服务必定要用到相关的api函数。病毒也是一种程序,金州觉得必然有迹可循。只要我们先把握住了它的方式。就像知道一个人走什么路一样,提前在路上就好截住他。
4.win32病毒。
对于win32病毒,常常需要用到GetProcAddress,WriteProcessMemory,CreateRemoteThread等等API,调用到kernel32.dll,user32.dll,wsock32.dll,advapi32等等。
MGF V1.3中,
push 0A5171D00h ;VirtualAlloc()的自定义编码
push ebp ;hKernel32
call _GetProcAddress ;先获取VirtualAlloc()的地址
or eax,eax
jz _ErrorExit
call dwCreateRemoteThread[ebx] ;在EXPLORER.EXE进程里建立远程线程
push dword ptr [ebp-8]
call dwCloseHandle[ebx]
szWriteProcessMemory dd 037A09978h
szCreateRemoteThread dd 004697753h
Win32.poly.ShowTime2中,
mov edi,[ebp]
add edi,hKernel32[ebx]
lea esi,[offset nGetProcAddress+ebx]
db "WriteProcessMemory",0
db "VirtualFree",0
db "VirtualFreeEx",0
等等。
尤其是CreateRemoteThread这个函数,此处赞同mgf大哥的看法,这个东西正常的程序几乎不会调用。win32病毒也会注册run等注册表键值。凡以上从写雷同的不再赘述。
5.一些蠕虫的常用引发模式。
传统的一些蠕虫长会去读outlook,同样改变注册表,找寻消息应用程序接口( MAPI)等。常常用到creatobject,getnamespace mapi.等等。搜索网络的常常会调用Socket函数,但是很难智能化判断这个函数的运用。因为很多正常程序有时候也会使用到。(金州注释:在此不再过多论述这一点,原因个人感觉有二,1.随着个人用户趋向winxp主流,服务器趋向win2003,winxp以上版本有DEP(Date Execution Prevention数据执行保护)默认保护常用的系统进程,使机器溢出型蠕虫执行起来难度增大,金州估计这也是近年大面积单机溢出蠕虫没有造成很大的危害的原因之一,2.智能化蠕虫已经实现,一些蠕虫已经能利用搜索引擎或网络程序本身找寻漏洞传播,如santy蠕虫,SQL Slammer,MySpace worm,最近est论坛上茄子宝简单测试小型的xssworm等等。这类蠕虫金州觉得以后会是一种趋势,而这类蠕虫的特点根据所要利用的对象不同改变较大。很难概念性的统述。以上个人感觉。不一定恰当。因为没有准备好。所以不在此多说)
三,关于智能化的探讨。
所谓智能化就像截住一个人一样,由以上金州的浅薄分析,大概可以看出病毒有一定的套路,虽然这个套路在不断的改变。并非羚羊挂角,无迹可循,还是模模糊糊有一些影像痕迹的。这些病毒的运行过程的痕迹,是防杀病毒智能化并非是海市蜃楼,无法企及。各大杀毒厂商关于智能化防杀病毒的研究也从未中断。以下分三点探讨这个问题。(金州注释:以下所有探讨只代表个人看法,多有不足,仅供参考。)
1.为什么需要智能化
金州觉得这个主要有两点,1,传统的防杀病毒的方式越来越显示出不足。依靠病毒样本库和特征码的杀毒方式,随着网络时代流通的加速。在截获病毒样本和病毒大面积发作之间的时间差越来越小,越来越难以防范日益传播迅速的病毒。早期的病毒产生比较慢,而近些年由于计算机知识普遍的提高,病毒产生的速度越来越快,数量也越来越大。特征码病毒库为核心的病毒防杀越来越显出不足之处。何况很多个人编制的病毒甚至不会被发现。而杀毒的根本意义在于保护用户个体的安全,而不仅在于维护整个网络安全。从一定角度来说,只要有一个安装杀毒的用户被感染了(此时样本还为被捕获),就是杀毒厂商的失败。2.智能化病毒随着电脑技术的发展会越来越先进,而传统的防杀病毒方式只是存在于完全被动的防御阶段。智能化病毒甚至能改变特征码逃过传统的防杀方式。
2.能不能实现智能化
当然能实现智能化,其实已经出现了很多这样的工具了。比如一些监控注册表和服务的软件,一些监测工具。例如System Safety Monitor,WinPatrol等此类的工具。防火墙监控外出进程等等都已经在运用了。
3.实现智能化的难点
智能化实现很大的一个难点是,对病毒的判定。虽然台湾的一些人写出了相关的论文(金州注释,会在参考文献中给出),并且在一些特定环境下实践成功。但是金州觉得他们这种实验并不具有完全性。1是试验的病毒对象极少。2.他们忽视了电脑这种东西用来并不全是为了整天杀毒玩的,电脑是用来工作或娱乐的。这个才是主体。一个电脑给杀毒软件的空间并不多。也不可能分给它极大的资源。
特征码防杀病毒的方法优点就是准确,速度快。而这恰恰是智能化防杀病毒的难点。从准确上来说,现在所谓的智能化防杀病毒的方法主要是拦截API来作为判断的依据。这样难免会出现正误判或负误判。(金州注释:即不是病毒却当作病毒了,是病毒却忽略了。)如果只是拦截(金州注释:目前很多软件能做到这些),把判断的权力交给使用者,这样判断的准确性又要依靠用户的知识能力决定。如果每个使用病毒防杀软件的用户都是专家,那还要防杀软件干什么?也就是说防杀软件必须判断并自主做出处理。来确认某一个程序是否是病毒。这个确定的准确性很难解决。目前一些所谓智能杀毒的软件都或多或少的存在一些这样的问题。
同样,因为是智能化监测。也就是面对的很可能是全新的病毒,即使判断出来了。那么如何清除呢?这一点对于依靠病毒库的防杀软件来说很简单。因为特定的病毒样本已经被实践过,直到他将会产生什么。而对于智能化的防杀软件来说,这只能依靠一种方式来实现,即完全监控电脑运作的一切行为,这是不可能的。如果这样,防杀软件很可能会占用极大的资源,而且会对用户造成诸多的不便。如果不这样,对彻底清除病毒来说,比较难弄。
也许正是因为以上的原因。现在一些病毒防杀软件声称智能化和传统的特征码方式相结合。甚至说这样就能杀掉百分之百的未知病毒。这样当然是不现实的。因为这样并为解决智能化防杀病毒的两大难题。判定和清除。这样也许只有一个好处。就是利用智能化判定为可疑程序,然后让用户提交到病毒库,分析之后,用依靠病毒库的防杀软件清除掉。谁都可以看出来,这样离智能化还很遥远。
四,智能化的实现
金州注释,注意,以下所谈的并不是说的智能化防杀病毒普及化的实现。而是试验性的实现。鉴于个人学识问题,以下简单谈两点。
1..监控注册表
修改注册表是很多病毒要走的甚至是必走的道路。现在已经有很多这样的监控软件,尤其是对注册表启动项目的监控。大概就两类,一类一旦发现修改是会自动报警 ,一类是只是被动显示。这样的软件更多。不论是哪一种,都可以起到作用。这类的软件只算是半个智能化,因为还需要人的判断,这样的监控软件并不能直接判断到底启动添加的是合法的还是非法的恶意程序。没有想到扯了这么长,就不给源代码。网上有参考。
2.拦截API。
这个是现在智能化防杀病毒软件的核心方向。其实拦截API已经包括了监控注册表了。之所以单独把监控注册表列出来是因为监控注册表现在已经有很多相关工具,对于半智能化来说,实现的相对比较完美了。关于拦截API。胡大雄等在《VIBEDS—一个利用病毒行为模式侦测电脑病毒的防毒系统》中列出了以下资料:
win32病毒与worm常使用的API
名称 用途说明
CreateFile 开启欲感染的档案
GetModuleHandle 获得档案模组的控制代码
GetProcAddress 获得API的进入点
VirtualQueryEx 查询/修改档案内存内容
WriteProcessMemory 将病毒代码写入欲感染档案的内存
RegCreateKeyEx 建立自动执行的键值
RegOpenKeyA()
RegCreatKeyA()
RegSetVslueA()
RegSetValueExA()
CopyFileA()
CopyFileExA()
connect 连接到网络
表二,邮件病毒常使用的API
名称 参数
CreateObject Scritping.FilesystemObject,
Shell.Applocaition,
Outlook.Application等。
Kill File&Directory
DeleteFile File
ReadReg HKEY_CURRENT_USER\Control Panel\Desktop\WallPaper 等。
RegWrite 参数同上
GetNamespace MAPI
Attached.Add Virus File
(金州注释,上面的文件表明显得不够全面了。主要是表明一个意思,即智能化监控是完全可以做到的。说的是监控。)
他们还提出并实践了一个可行性的智能化防治病毒的体系。金州仍略感不足。一是没有解决杀除病毒的方法。(金州注释,不过人家谈的就是侦测。)没有提出杀出而只提出侦测明显的这个系统是专家系统。不能普及到大众用户。二,他并未提供对未知病毒的侦测试验。换句话说,就是他利用已知病毒来检测智能化侦测系统的判断力。但是他提出了两点很宝贵的东西,一是完整的判断思路。二是指出了智能化即使实现以后。仍然需要升级,只不过升级的不是病毒库。二是对拦截API的判断库。这就是说杀毒厂商仍然不会改变自己的市场利益。反而这是他们的市场竞争力。最后,金个人感觉智能化的道路很难,就像智能化病毒的道路一样,很难。病毒和反病毒技术相互生存,就像战争一样,病毒在破坏的同时也产生了很多新的技术。反病毒软件从一种程度上来说也是一种病毒。州觉得最好是有一天,大众知识增长,增强了自己的判断力。那么半智能化辅助系统就足够了。半智能化就不需要升级了。最后的最后,折腾了半天,发现写了这么多好象等于什么都没说。所以把名字改成探讨了。生活比想象中的艰难,东西比想象中的难学。但是我们一直在努力生活,努力学习。
pdf: http://www.eviloctal.com/blog/job.php?action-download-pid--tid-609-aid-288.html
六, 感谢及参考文献。
感谢以下前辈无偿共享以下资料提供学习。
1. 许明阳 《利用拦截API侦测电脑病毒》
2. 胡大雄,邓全良,徐熊健《VIBEDS—一个利用病毒行为模式侦测电脑病毒的防毒系统》
3. 佚名 《先进的反病毒引擎设计》
4. http://www.xfocus.net 感谢原因,无偿共享资料。
5. http://forum.eviloctal.com/ 感谢原因,提供学习环境。
金州[est_vip]2006.8.29
附:
致歉及声明。
1.因金州二字被一些公司在搜索引擎买断,所以采用“金州注释”作为关键字。造成了偶然看到此文的读者阅读不便。表示歉意,见谅。见谅。
2.个人学习中写的稚嫩文字中,多署名est_vip,其实就是est论坛的一个普通会员,现在est已经没有这个称呼了。est是第一个信任我的论坛,那个时候还有vip这个称呼。人最好不要忘本。所以只如此署名。即使有一天est不存在了。(只怕是丢了est得人。惭愧。)后来承蒙一些朋友信任。参与过一些不错的论坛。而从未在自己文字中提及感谢,感觉十分对不住。所有对我略有帮助的人,我从未忘记。真诚感谢,GCT.冰封浪子,juey(黑域在线),EST.Fr.Qaker&Sunwear,CRST.冷漠,WST.maple-x,cciss.7all.等。祝福你们好人有好命。祝福所有善良的人。
3.感激所有前辈们无私共享的学习资源。坚持弘扬无偿共享精神。
http://www.cnxhacker.com/Article/safe/subject/200611/6559.html