Samba是什么
Samba是计算设备的基石级协议SMB的开源实现,被广泛应用在Linux、Unix、IBM System 390、OpenVMS等各类操作系统中,提供文件共享和打印服务。
漏洞影响范围
自2010年3月1日后发布的Samba所有版本均受影响。
影响版本:≥ v3.5.0
根据Shodan统计,目前互联网上暴露Samba 445端口的设备超过485000台。Rapid7研究人员分析后认为,其中有将近11万台设备运行的是不再被支持的Samba版本,因此不会有补丁。
考虑到Samba是许多Linux、Unix发行版的内置软件,所以有专家认为,这个漏洞是“Linux版的永恒之蓝”,很容易被改造为勒索软件的传播组件。
需要特别提及,由于内置Samba,家庭NAS设备也是受影响的重灾区。
漏洞分析
360安全团队的cyg07和redrain分析了这个漏洞,他们向嘶吼提供了相关技术细节。
如Samba官方所描述,该漏洞只需要通过一个可写入的Samba用户权限就可以提权到samba所在服务器的root权限(samba默认是root用户执行的)。
从Patch来看的话,is_known_pipename函数的pipename中存在路径符号会有问题:
再延伸下smb_probe_module函数中就会形成公告里说的加载攻击者上传的dll来任意执行代码了:
具体攻击过程:
1. 构造一个有’/’ 符号的管道名或路径名,如 “/home/toor/cyg07.so”
2. 通过smb的协议主动让服务器smb返回该FID
3. 后续直接请求这个FID就进入上面所说的恶意流程
具体攻击结果如下:
1. 尝试加载 “/home/toor/cyg07.so” 恶意so
2.其中so 代码如下(加载时会调用 samba_init_module 导出函数)
3.最后我们可以在/tmp/360sec中看到实际的执行权限(带root权限)
攻击代码
看到公告后,渗透测试框架Metasploit的创始人@hdmoore很快研究出了漏洞验证代码,只需要一行代码就可以利用:
simple.create_pipe("/path/to/target.so")
目前该漏洞在Metasploit已经有了利用模块,可以验证Ubuntu 16.04和群晖NAS设备,更多版本还在验证中。
如何修复?
Samba官方已经发布新版本修复了漏洞,受影响用户可以尽快将软件升级到v 4.6.4/4.5.10/4.4.14以上的版本。
如果暂时不能升级,那么可以将以下代码添加至Samba配置文件smb.conf中
nt pipe support = no
添加代码后,重启SMB守护进程(smbd),就可以临时缓解漏洞了。