找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3299|回复: 0
收起左侧

编程练习作品 -> 感染防御系统 SP1.0【内部版】

[复制链接]
ID:71922 发表于 2015-1-10 23:35 | 显示全部楼层 |阅读模式
   这个程序是较 锁屏小工具 V3.0 设计之前设计好了,只是一直没能找到好一点的感染型病毒样本来做测试,一直就没有发布。程序的原理是利用了 HOOK API 技术,是在Ring 3层下(即用户层)拦截。说个个人看法,我觉得在Ring3层下保护就已经足够防御绝大部分病毒了。先简单说说杀毒软件拦截病毒的原理,刚接触底层没多久,如果发现有说错的地方恳请指出,现在大多数的安全软件都是通过HOOK SSDT这个表来实现对关键内核API的拦截。SSDT 其实是一张记录着 内核下所有API的函数地址。用户层下的API 都会最终都会通过 这张表得到相对应的内核API。例如:OpenProcess(),它是kernel32.dll导出的函数,它的调用过程:
xxx程序调用 --->  kernel32.OpenProcess ---> ntdll.NtOpenProcess ---> ntdll.ZwOpenProcess  ---> 内核 ntkrnlpa.ZwOpenProcess ---> 通过SSDT表查询 ---> ntkrnlpa.NtOpenProcess
最终的ntkrnlpa.NtOpenProcess 才是实现打开进程的操作。杀毒软件(当然还有其它高级病毒也会)通过修改SSDT 记录的ntkrnlpa.NtOpenProcess 地址变为自己函数的地址。这样整个过程就变成:
xxx程序调用 --->  kernel32.OpenProcess ---> ntdll.NtOpenProcess ---> ntdll.ZwOpenProcess  ---> 内核 ntkrnlpa.ZwOpenProcess ---> 通过SSDT表查询 ---> 杀毒软件自己的冒牌MyNtOpenProcess ---> ntkrnlpa.NtOpenProcess
而 MyNtOpenProces 这个函数不是用来打开进程的,而是杀软检查XXX程序想打开什么进程,如果是想打开被保护的进程则直接返回 NULL,这样XXX程序最终根本就没机会调用到真正的 ntkrnlpa.NtOpenProcess。杀毒软件就这样实现了拦截。杀毒软件的行为查杀、主动防御也是通过此方法得到病毒的执行顺序。例:一般的木马被执行后第一件事就是把自己COPY到系统目录、运行系统目录的本体、删除自身。系统目录的本体执行后设置启动项、释放DLL注入IE或系统关键进程等.... 那么杀毒软件通过拦截相关内核API 得到这个程序的行为,发现和木马极为相似,负责点的杀毒软件可能会先提示用户,然后禁止其运行并上传,不负责的直接K (360貌似就这样,N多程序都很正常,硬要说是什么什么病毒!什么什么木马。)。
    虽然说 Ring3 层的API 最终会调用 Ring 0 下内核的API,从根本上拦截。只要拦截了最低层的关键API ,任由病毒调用API都会被拦截。不过由于是驱动方式,不太稳定,一个小BUG都可能引发系统的蓝屏。而我认为,任何程序如果要进入Ring 0,首先就必须调用 Ring3下的API。
    先简单说一下HOOK API的原理:这个实际上是修改了API的头五个字节的指令,例如 OpenProcess 的地址是 0x12345678,那么我在 0x12345678 这个地址上的指令改写为 JMP 我自己函数的地址。那么程序调用的OpenProcess 会从原来的 xxx程序调用 --->  kernel32.OpenProcess。 变成 xxx程序调用 ---> 我的伪造OpenProcess函数 ---> kernel32.OpenProcess
这样,我可以在我的函数里面检查它要打开的是什么进程,然后再决定是否让它调用下面的API。
    通过HOOK API技术拦截Ring3 下进入Ring0的相关API,也拦截一些相关的API,那么是不是也算是从根本上拦截?例如上面说的木马,它会自复制到系统目录,那么我就HOOK CopyFileEx 通过检查其参数,是不是要复制自身到系统目录,如果是则记录下,接下来如果程序运行系统目录下的副本,然后又删除自身,那就要警惕了,绝大多数正常的软件不可能会这么做,如果副本运行起来了设置启动项,那么基本上可以确定整个程序就是木马,就应该要提醒用户。如果要提高查杀率,配合特征码查杀技术也是一个不错的选择。当然,也有一些其它的情况出现,也可能有一些我不知道的技术,可能可以直接调用内核下的API 的技术我也不知道,我也是个菜鸟,以目前我的水平觉得在RING3下拦截挺不错。可能随着我的成长会改变这个想法吧,毕竟我了解的还不过多。
     这个程序设计的目的是为了拦截病毒感染exe文件。
  实验工具:
    瑞星全功能杀毒软件:版本 23.00.63.19
    病毒:Worm.Win32.AutoRun.Anti
    VM7.1虚拟机:xp系统,两个分区 C、D
    测试文件夹:【L、个人作品】--- 感染测试

先简单介绍一下这次测试的病毒 ,此病毒是会感染PE文件滴
一、病毒标签:
病毒名称:  Worm.Win32.AutoRun.Anti
病毒类型:  TrojWare
文件SHA1  7cfb685952a4caf9aacbdbaa01c5bfa733193d1f
危害等级    3
文件长度    脱壳前 8.68KB脱壳后84KB
受影响系统  xp
开发工具    Microsoft Visual C++ 6.0
加壳类型    WinUpack 0.39 final -> By Dwing
二、病毒描述:
         通过感染pe文件已经写入autorun.ibf来实现自动运行进行传播和破坏
同时对抗各种杀软和防火墙程序
三、行为分析:
病毒主体流程及功能分析
      step(1):获取系统版本 (获取失败跳到step(3))
     step(2):获取整个程序待调用的函数的地址
     step(3):创建BLACKSEED窗体-无大小的窗体
         [窗口过程实现逻辑]
   获取临时目录
   拼接出路径 %temp%\tmp.bat
   创建dat文件
   将开机自启动的程序xx.exe的后缀改为dat
   判断当前系统版本 (如果没有办法获取版本 跳到7)
   将xx.dat设置为重启删除  (跳到8 继续运行)
   获取路径c:\windows\wininit.ini 在其中写入
[Rename]
NUL = xx.dat
   在tmp.bat中写入如下内容:
:try
Del xx.exe
If exist xx.exe goto try
Del xx.dat
Del %%0
   结束iexplorer.exe的进程
  运行bat文件
Step(4):检查是否获取了系统版本(如果获取失败的话 跳到 step(6))
Step(5):提升当前权限到debug
Step(6):查找并获取BLACKSEED窗口的句柄 (如果成功打开 跳到step(11))
Step(7):获取系统盘符 拼接出x:\windows\Downloaded Program Files\
Step(8):查找x:\windows\Downloaded Program Files\abcd.exe是否存在[假设abcd代表随机的命名]  (如果存在跳到 step(11))
Step(9):将自身拷贝成x:\windows\Downloaded Program Files\abcd.exe
Step(10):运行abcd.exe
Step(11):先设置hook然后运行iexplorer进行破坏
上截图:
程序主界面:



  先准备一堆用于给病毒感染的exe文件,先用瑞星扫描一下,瑞星支持我的2003系统





扫描一下被感染的文件以及病毒母体,看瑞星是否能查杀此病毒。





发现是被杀的,接下来将 感染防御系统 SP1.0【内部版】复制到虚拟机中运行,将【L、个人作品】--- 感染测试 文件夹复制到 虚拟机的D盘,并把病毒母体复制到虚拟机的桌面上。确保 感染防御系统 SP1.0【内部版】.exe 已经启动防御。然后运行该病毒。

首先发现弹出两个对话框,病毒会自复制到系统目录,并开启线程去感染文件。



选择拦截,发现它还试图感染其它文件。





这次点击终止,病毒被终止。将虚拟机上的 【L、个人作品】--- 感染测试 文件复制到本机,然后用瑞星杀毒软件扫描,发现并没有感染病毒。拦截病毒感染成功。




    看到这个程序能拦截病毒的感染,很兴奋...但接下来检查病毒启动项、释放路径 发现程序并没有拦截到其释放,至于启动项由于我当时设计的目的只是为了防御病毒的感染,并没有HOOK 注册表相关的API。所以自然也就无法拦截。

   本程序优点:
    小巧 255K大小,可以拦截病毒感染,并给出提示。
   本程序的缺点:
    由于设计时考虑的不够周全,HOOK 的API明显不够全面,没有提供逆向删除病毒的功能。
    弹出窗体不是由EXE弹出,DLL与EXE通讯还不够熟练

总结:此程序纯属垃圾一个...下次一定要设计一个完善的病毒防御系统。郁闷.....

下载地址也就不发了,没啥用...本来是想发布的,经过这么一测试,就不想发布了,看到上面自己写的那么辛苦,删了这篇文章真是浪费心血啊,索性就不删了。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表