首页
社区
课程
招聘
[讨论]那些年搞驱动的那些坑_欢迎补充
发表于: 2014-4-17 23:31 20963

[讨论]那些年搞驱动的那些坑_欢迎补充

2014-4-17 23:31
20963
“许多搞系统底层安全的高手对CGI安全总是不屑一顾,认为那些只是scriptkid做的事情。按caoz的说法这是技术与技巧的区别,技术是需要很长时间积累的,要看懂底层研究成果需要很多其他知识和时间,而技巧更多属于一点就通的技术,比如CGI的渗透技术。笔者觉得技巧其实是技术的子集,作为一个渗透测试者需要了解各方面的技术,但切不可沉迷于奇技淫巧。”

也许是“奇技淫巧”四个字刺痛了黑哥的心,这是对黑哥研究领域的全盘否定。从这段话,也不难看出xcon组委会为什么会两次拒绝黑哥了,他们是一伙的。

“技巧也要点一下你才会通啊,不点你可能永远也通不了”。黑哥如是说。
    推荐一下道哥博客里面的这篇文章    中国黑客传说:我是超级黑
    关于技术跟技巧的问题,还是很难分家的。比方说你要搞Bootkit最起码在没有硬件调试器的环境下要有一个顺手的调试环境,搭建一个顺手的环境显然属于一个技巧问题,可能这个技巧由于没有人讨论或者没有老师请教将成为一个你永远获得不到的东西。今天扯淡一下写驱动里面的技巧问题。我先抛砖引玉,欢迎大家补充。
    技巧1
    NT6.0 NT6.1下只有ntkrpamp.exe和ntkrnlmp.exe 两个内核文件 如何让OS加载指定的内核文件方便自己调试和测试驱动。
    技巧2
    http://hi.baidu.com/iceboy_/item/9310c01669f31e0bd1d66df0
    iceboy的老文章了。
    如何在多核心下(非多CPU)  进行安全的Hook  
    比方说SSDT下面的常规Hook代码可能是这样
    屏蔽中断
    修改CR0 WP位/亦或者MDL方式
    把fake函数地址dui进去
    ........
    亦或者大杂烩的方式
    CreateMdl + ProbeAndLockPages + RaiseIrqlToDpc + cli + WPOFF
     显然这样的代码将随着用户数量的增多蓝屏的用户数将多到无法忍受。
    如何安全的进行Hook  依然是一个技巧问题 可以回复给出答案 然后再空当接龙几个驱动里面的坑 让帖子延续下去。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (61)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哦。 坐沙发来接了。  话说黑哥在论坛有ID?
2014-4-17 23:33
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
蓝屏是个很大的坑
2014-4-17 23:49
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
安全HOOK 直接DPC hold其他U,留一个当前U可活动,当前U随便什么大杂烩,什么WPOFF都稳定hook了。

这里有个问题就是DPC那个东西啊,在老人新人做demo的时候,往往忽略了~
2014-4-18 09:35
0
雪    币: 0
活跃值: (756)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
技巧2:原子操作
2014-4-18 09:37
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
6
老V说的可不对啊,DPC还不够 hold不住其他核啊
2014-4-18 10:01
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
7
原子操作是对的
InterLock 系列最大能改8个字节
除了原子操作还有一层别的保险
2014-4-18 10:02
0
雪    币: 138
活跃值: (306)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
小于8字节,都是可以原子操作的,如果Hook跳到fake函数需要覆盖的指令超过8字节.
我一般搜索或者构造空隙来进行二级跳甚至三级跳转,保证第一级跳转一定是原子操作.
2014-4-18 10:06
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
9
不懂,还需要啥?原子性?
2014-4-18 10:07
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
话说 感觉DPC+原子操作就行了吧?
2014-4-18 10:11
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
11
具体可以参考下这个帖子  某淫很自豪的十亿级别内和稳定性
http://bbs.kafan.cn/thread-1097945-1-1.html
再说稳定性,基本上目前所有的传统HIPS、传统个人防火墙、包括沙箱等,内核的稳定性都在百万级别用户以下,这个百万级别用户的意思是说, 如果超过百万级别的用户使用,就会出现无法接受的大量蓝屏、卡死、崩溃的问题,这是内核安全产品的特性决定的,一些问题在小用户量上无法体现,在大用户量上就会暴露出来,比如大家看到为什么某山的什么霸就会有很多蓝屏的问题,它的内核稳定性在千万用户以下,所以也很容易推断出它目前的用户量远比他吹得要少。

360云主防的作者们,通过高超的内核技术和丰富的内核开发经验,将360云主防在强度不减的前提下,成功提升到了十亿级,也就是说在十亿用户以下使用,都不会出现较多的稳定性问题。这一点也从我们的用户反馈和蓝屏问题收集反应出来了,360云主防面世数年来,每年报告发现的内核稳定性问题一直保持在个位数,而且即便有稳定性问题,由于360云主防的作者都有深入的内核调试、崩溃分析技术,所以也可以很快定位并解决,而缺乏这一技术的其他厂商比如某山,就只能眼睁睁看着用户的蓝屏反馈无可作为:)

显然老V你那种方式  属于被某淫鄙视的 内核稳定性百万级用户
2014-4-18 10:12
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
毛可以hold住啊,看hold的代码而定~
2014-4-18 10:12
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
13
又复活了 不知道冷风能搞到票不 可以一起再去360那里蹭饭吃 如果你没出去并且冷风能搞到票
2014-4-18 10:13
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
Q说吧。。。这不是聊天的地方
2014-4-18 10:15
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
15
DPC直接撸进其他u,其他u里直接停住了啊~~

我说的不是IRQL啊~
2014-4-18 10:17
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
16
再不行,直接进VMX,然后自己调用cpuid,然后hook~

cpuid vm-exit里进行hook,至高无上的hold,再高没地方了~
2014-4-18 10:19
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
17
水一下
2014-4-18 10:22
0
雪    币: 0
活跃值: (756)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
求大神聊天记录
2014-4-18 10:29
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
19
老v 贴一下你的代码吧 安全Hook的代码
待会我贴一下我的  大家一起来找茬
2014-4-18 10:37
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
你hold住其他 U的时候,总要放开的吧。你一放开,系统里面等待排队的线程有很多个,如果其中某一个线程排队等待恢复的EIP正好是你hook的5个字节的第3个字节怎么办?
2014-4-18 10:41
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
21
SSDT hook怎么第三个字节,求解释~
2014-4-18 10:43
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
22
大家一起讨论 我来围观啦
2014-4-18 10:44
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
23
代码太长了,另外代码产品还要用,不能贴出来。
2014-4-18 10:44
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
24
inline hook确实存在,但是这样说的话,即使原子性什么的也无法保证不出你说的问题。
2014-4-18 10:46
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
25
好吧 可以以很简单的形式啊  比方说
			__asm{
				mov eax, cr0 
				mov CR0VALUE, eax 
				and eax, 0fffeffffh  //DisableWriteProtect
				mov cr0, eax 
			}

			((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)MyFunAddr+1)] = (unsigned int)RealNtUnloadKey;

			__asm
			{
				mov eax, CR0VALUE 
				mov cr0, eax 
			}

这样处理肯定不好
2014-4-18 10:47
0
游客
登录 | 注册 方可回帖
返回
//