杀毒软件原理 四

过主动原理


安全软件现状
安全套装普及,反病毒软件、软件防火墙与HIPS技术的融合:
主动防御广泛运用

恶意软件面临的问题
所有传统后门、木马、rootkit初次安装以及进行相关操作时均
无法绕过主动防御的监控,采用主动防御技术的安全软件将提示
用户发现安全威胁。

主动防御为什么对恶意软件有威慑力
? 自启动
? 绕过软件防火墙而采用的方法
? 密码截取
? 释放文件
? 执行程序
? 加载内核级rootkit
? 其他功能需要改写注册表,比如IE BHO

主动防御内容
– 代码注入
– 注册表监控
– 进核心态(驱动安装、访问物理内存)
– 文件监控
– 其他监控(全局钩子安装,终止进程等)
– 各模块交融后的逻辑判断关系

@@@@@@@@@@@@@@@@@@@@@代码注入@@@@@@@@@@@@@@@@@@@@@@
代码注入被广泛使用于穿透软件防火墙,将工作代
码注入至可信进程中.
方法:远程线程、消息钩子、APC、修改线程上下文、API
HOOK等

监控原理
? 挂钩NtCreateThread(Ring3下对应为
CreateRemoteThread)、NtWriteVirtualMemory(Ring3
下对应的WriteProcessMemory)、NtSetContextThread
(Ring3下对应的SetContextThread)等
? 挂钩NtOpenProcess
? 挂钩技术为SSDT Hook or Inline Hook

绕过监控实现代码注入
可以将代码注入转化为修改注册表,比如Winlogon通知包、BHO、
ExplorerShell扩展,可以将指定DLL注入相关进程(防火墙默认允许其
访问网络)。由于主动防御也包含注册表监控功能,所以绕过监
控实现代码注入就转化为绕过注册表监控实现修改注册表,而绕
过注册表监控实现修改注册表具有通用有效的方法,详见后文

进入核心态,恢复钩子(比如恢复SSDT);或者从磁盘文件解
析取得相关函数原始地址从而绕过监控
注:由于主动防御具有进入核心态监控功能,所以需要绕过进入
核心态监控技术的配合,相关技术详见后文

针对ZoneAlarm Pro只是核心态中挂钩
NtOpenProcess的情况,关键是用户态中使用非常
规方法绕过监控获得进程句柄
方法:根据Csrss进程(Win32环境子系统)的特
性,搜索句柄表,复制句柄,从而绕过监控
衍生:根据句柄表特性,OpenProcess时可以将目标
进程pid加1或者3,可以绕过某些安全软件防止自身
进程被终止的保护

@@@@@@@@@@@@@@@@@@@@@@@@@@@@注册表监控@@@@@@@@@@@@@@@@@@@@@@@
自启动、安装驱动/服务以及其他某些功能实现均需
修改注册表

监控原理
? 挂钩NtSetValueKey等
? 挂钩技术为SSDT Hook or Inline Hook
? 注册表修改通知RegNotifyChangeKeyValue
? 间隔一定时间不断的枚举相关键值,然后自行比较是
否被修改

绕过监控实现修改注册表

? 操控Hive法
优点:Ring3下可实现,能绕过绝大部分注册表实时监控
? 简便方法:
先在本地修改后使用RegSaveKey函数Dump出hive文件,使用时使用
RegRestoreKey恢复导入
注:简便方法可能覆盖目标项下的其他键值数据,所以为了效果的完
美,可以配合RegLoadKey,将hive挂载到其他不被监控的项下修改后
再恢复
? 进入核心态,恢复钩子(比如恢复SSDT);或者从磁盘文件解
析取得相关函数原始地址从而绕过监控
注:由于主动防御具有进入核心态监控功能,所以需要绕过进入
核心态监控技术的配合,相关技术详见后文
? 对于注册表修改通知类监控,可以摘除通知钩子;对
于360安全卫士定时枚举类监控,还可以修改后立即
采用Rootkit技术隐藏注册表相关键值

@@@@@@@@@@@@@@@@@@@@@@@进入核心态@@@@@@@@@@@@@@@@@@@@@@@@@
内核级Rootkit技术以及实现某些高级功能均必须需
进入核心态
方法:通过SCM(Service Control Manager)安装驱动

进入核心态监控 原理
? 挂钩驱动加载、物理内存访问相关的函数
? 监控相关注册表键值的写入

绕过监控实现进入核心态
1.写注册表+ZwLoadDriver 安装驱动
Hive方法写注册表,如果目标安全软件监控ZwLoadDriver则首次不加载,重
启后生效
2. ZwSetSystemInformation
3. ZwSystemDebugControl
4. 物理内存对象 \Device\PhysicalMemory
注:使用符号连接绕过某些主动防御对物理内存对象的监控
5. 权限提升漏洞,0day、Nday...
比如最近的WinPcap、赛门铁克产品中symtdi.sys等漏洞
6. 感染系统文件,比如win32k.sys,再添加Callgate

@@@@@@@@@@@@@@@@@@@@@@文件监控@@@@@@@@@@@@@@@@@@@@@@@@
文件监控原理
? SSDT Hook
? IRP Hook
1. 修改驱动分发函数例程表中的地址
2. 修改IRP处理函数体中的指令
3. 文件过滤驱动
? 效果:某些安全软件禁止在Windows系统目录下创建可执行文件,以及木马释
放文件时提示Hidden Install

绕过监控实现文件操作
1. 直接给FSD发送IRP,可以绕过系统服务类挂钩(比如SSDT Hook,以及
更浅的钩子)
2. 对于文件过滤驱动,可以在设备栈中断链,摘除过滤驱动
3. 恢复FSD Dispatch Routine地址和函数体本身
4. Raw disk 读写
5. 利用白名单(比如针对McAfee 8.5企业版)
6. 其他一些Tips...

逻辑智能判断
在现实应用中,杀毒软件以及安全软件套装并不是每当你在敏感目录(比如
系统目录)中新建可执行文件就会报警。安全软件为了提高产品的易用性和
友好性,加入了一些逻辑智能判断。
通常的判断逻辑是:具有可见界面的进程释放文件至系统目录时不会报警;
而没有界面的进程释放文件至系统目录时就会报警,提示Hidden Install 或
者Dropper
绕过其监控的方法
简便绕过方法:在自身程序中建一个对话框,大小只有1*1像素,位置可
以定位在屏幕的左上角,用户根本无法察觉,释放文件后再消失。 这样就可
以绕过主动防御的文件创建监控,而无需使用驱动直接和FSD通信。

@@@@@@@@@@@@@@@@@@@@@@@@@@@其他@@@@@@@@@@@@@@@@@@@@@@@@@@
---------键盘记录/密码获取

? 监控原理:
监控全局钩子安装,挂钩win32k!NtUserShowWindow等
? 绕过方法
1. 进核心态恢复钩子
2. 使用其他方法:
GetKeyState/GetAsyncKeyState
DirtecX 接口
键盘过滤驱动
原始输入设备raw input
内存读取(有的安全软件挂钩NtOpenProcess进行保护,绕过方法
详见上文中突破ZoneAlarm Pro的方法)
嗅探数据包 、 IE COM 接口 、GetWindowText
etc…


---------脱钩技术
? Hook种类:
Ring3、Ring0;
修改表中地址、修改函数体内指令;
SSDT hook、IAT hook、EAT hook、IDT hook、SYSENTER
hook、Driver IRP Dispatch hook 、DRX hook、
KiSystemService Hook、Filter Driver etc;
etc
? 对应脱钩方法...

------------常用的非底层技术类绕过主动防御方法
修改日期
不停的查找安全软件的报警窗口,然后自动点确定/允许按钮
通过IOCTL与安全软件通信,使其停止工作
模拟键盘事件,使其停止工作
etc…

@@@@@@@@@@@@@@@@@@@@@恶意软件技术展望@@@@@@@@@@@@@@@@@@
? 反高级启发式查毒
继主动防御之后,某些杀毒软件融合SandBox等高级启发式查毒
技术,比如卡巴斯基7.0、Norman、趋势科技的Officescan。
以卡巴斯基7.0为例,开启高级启发式查毒进行病毒扫描,可以
扫描所有采用传统代码注入的未知病毒。Sanbox技术有点主动
防御静态扫描化的意味。使用上文提到的某些技术可以绕过
Sanbox
? 写固件、NDIS层自主协议栈,增强隐蔽性
? 回归文件感染型病毒,花指令、多态变形等埋没在后门木马世界
多年的词汇应该苏醒了
? 结合提权0day,使Guset/User权限下照常安装rootkit
? 兼容Vista
? Etc…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值