启明星辰ADLab:Badlock漏洞源码视角浅析
★前一段时间炒作的沸沸扬扬的Badlock漏洞最后被证明不是远程代码执行漏洞,而是一个中间人劫持漏洞,之前关...
★
前一段时间炒作的沸沸扬扬的Badlock漏洞最后被证明不是远程代码执行漏洞,而是一个中间人劫持漏洞,之前关注这个漏洞的小伙伴想必都有一种浪费感情的感觉吧。不过毕竟是关注了这么久的东西哪怕是个中间人漏洞也值得一起观摩并来个总结,下面就让启明星辰ADLab带领大家比对samba源代码补丁前后的差异。
★
从samba官网上看,这个中间人漏洞的问题在于攻击者可以将auth level降低成Connect级别,之后攻击者就可以堂而皇之的接管整个连接。前一段时间炒作的沸沸扬扬的Badlock漏洞最后被证明不是远程代码执行漏洞,而是一个中间人劫持漏洞,之前关注这个漏洞的小伙伴想必都有一种浪费感情的感觉吧。不过毕竟是关注了这么久的东西哪怕是个中间人漏洞也值得一起观摩并来个总结,下面就让启明星辰ADLab带领大家比对samba源代码补丁前后的差异。
★
这里我们通过代码来看看这个漏洞以及现有的补丁对这个漏洞的修复。
1
漏洞分析我们先来看看从网上找来的Badlock漏洞攻击示意图,图中清楚的描绘了这个漏洞被利用的攻击场景。
首先,创建一个socket,并完成绑定和监听的工作。
接着,通过一个listener对这个socket接收的数据进行处理。
处理过程如下:
首先,完成数据的接收。
当数据包是需要验证的数据包时: 进入到验证流程,该流程处理绑定请求和应答之后的数据包。
在这个auth完成之后,程序进行到DCERPC_PKT_BIND流程。
该流程可能存在中间人劫持。
2
补丁分析下面我们来看看补丁是如何工作来防止这一问题的,在文章开头我们提过,攻击者进行中间人劫持是通过将auth level降低成Connect级别来完成的。补丁代码在定义pipe_rpc_fns结构体(用以表示现在的rpc_bind相关结构)的时候添加了一个allow_connect字段。
在进行绑定的时候,程序会对此结构进行赋值。
在samr, lsarpc和netlogon这三种情况下,程序默认不会允许connect级别的auth_level(右边为补丁之后添加的代码)。
通过如上手段,攻击者采用将认证等级降低为connect的方式进行中间人劫持。整个流程图如下:(行号以补丁后的代码为准)
3
修复建议受影响版本:
3.6.x
4.0.x
4.1.x
4.2.0-4.2.9
4.3.0-4.3.6
4.4.0
更早的版本不受影响
修复建议:
4.4.0建议升级到4.4.2
4.3.6及以下版本建议升级到4.3.8
4.2.9及以下版本建议升级到4.2.11
关注 ADLab
微信扫一扫关注公众号