Linux版SMB远程代码执行漏洞(CVE-2017-7494)-SambaCry 分析报告

背景

2017年5月24日Samba官方发布了安全公告,在Samba 3.5.0 以后的版本中存在严重的代码执行漏洞(CVE-2017-7494)。在rpc_server/srv_pipe.c中存在的一个验证BUG,攻击者可以利用客户端上传恶意动态库文件到具有可写权限的共享目录中,之后发出请求,使服务器加载Samba运行目录以外的非法模块,导致恶意代码执行。

漏洞公告

===========
Description

===========

All versions of Samba from 3.5.0 onwards are vulnerable to a remote
code execution vulnerability, allowing a malicious client to upload a
shared library to a writable share, and then cause the server to load
and execute it.

==================
Patch Availability

==================

A patch addressing this defect has been posted to

http://www.samba.org/samba/security/

Additionally, Samba 4.6.4, 4.5.10 and 4.4.14 have been issued as
security releases to correct the defect. Patches against older Samba
versions are available at http://samba.org/samba/patches/. Samba
vendors and administrators running affected versions are advised to
upgrade or apply the patch as soon as possible.

Samba介绍

Samba,是一种用来让UNIX系列操作系统与微软Windows操作系统通过SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。第三版不仅可访问及分享SMB的文件夹及打印机,本身还可以集成入Windows Server的网域,扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软件在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无。

IPC$(Internet Process Connection) 是共享 “命名管道” 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。 IPC$能使用户匿名访问Samba服务器的共享资源。

正因为其跨操作系统的灵活性,很多企业或个人的 NAS(Network Attached Storage),路由器和其他IOT设备存储解决方案会选择开源软件Samba提供数据访问服务。

攻击流程

  1. 向具有写权限的Samba服务器共享目录中上传恶意动态库,这里命名为evil.so;
  2. 通过访问IPC$(命名管道)资源的方式请求步骤1上传的恶意动态库,文件名中包含”/”字符;
  3. 服务器端误将文件资源 ” /path/to/evil.so” 当作IPC$(命名管道)资源加载运行,漏洞触发。

漏洞验证

环境准备:

IP地址角色操作系统必需依赖备注
192.168.119.155靶机CentOS 6.8 64-bitsSamba-4.5.9源码安装包关闭selinux, iptables
192.168.119.152攻击机Kali1-amd64is_known_pipename模块\

使用Metasploit公开的exploits模块(is_known_pipename)进行测试。下载地址:https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/samba/is_known_pipename.rb

1)上传恶意动态库文件到服务器共享目录public

这里写图片描述
第51个包Write AndX Request写操作请求数据,如下所示:
SMB (Server Message Block Protocol)
SMB Header
Server Component: SMB
[Response in: 52]
SMB Command: Write AndX (0x2f)
Error Class: Success (0x00)

Tree ID: 51295 (\192.168.119.155\public) #访问靶机共享文件路径Tree ID
Process ID: 51988
User ID: 62509
Multiplex ID: 27235
Write AndX Request (0x2f)
Word Count (WCT): 14
AndXCommand: No further commands (0xff)
Reserved: 00
AndXOffset: 0
FID: 0xef37 (\rDfDKbgV.so) # 恶意动态库文件FID

[File RW Length: 476] #写入文件大小
Byte Count (BCC): 476
Data (476 bytes) #上传二进制数据
Data: 7f454c4602010100000000000000000003003e0001000000…
[Length: 476]

2)以命名管道方式请求恶意动态库

这里写图片描述
第59个包NT Create AndX Request 请求命名管道资源数据,如下所示:

SMB (Server Message Block Protocol)
SMB Header
Server Component: SMB
SMB Command: NT Create AndX (0xa2)

Tree ID: 19967 (\192.168.119.155\IPC$) #这里使用命名管道方式很重要
Process ID: 51988
User ID: 62509
Multiplex ID: 27235
NT Create AndX Request (0xa2)
Word Count (WCT): 24
AndXCommand: No further commands (0xff)
Reserved: 00
AndXOffset: 0
Reserved: 00
File Name Len: 23
Create Flags: 0x00000016
Root FID: 0x00000000

Byte Count (BCC): 24
File Name: /home/samba/rDfDKbgV.so # 管道名称即为前面上传文件的绝对路径

3) 服务器加载恶意动态库
Smbd服务进程详细调用链,如下如所示:

这里写图片描述
Samba漏洞关键源代码位置,如下如所示:
这里写图片描述
正常情况,pipename为Samba服务运行的相对路径。由于没有对pipename的值做判断,smb_probe_module函数调用执行在共享目录下上传so的文件,进而导致恶意代码执行漏洞。

这里写图片描述
Metaspoit中提供在SMB_SHARE_BASE的列表用于猜解,共享目录的绝对路径。笔者直接设置可正确的Samba共享目录绝对路径,可以确保一次通过。

检测漏洞是否存在

1) 本地检查Samba版本是否属于 4.4.14、 4.5.10、4.6.4 及以后的版本。
2) 使用nmap –script=smb-os-discovery -p 445 192.168.1.122/24命令扫描网络中Linux Samba版本。

漏洞修复:

  1. 使用源码安装的 Samba 用户,请尽快下载最新的 Samba 版本手动更新。
  2. 使用二进制分发包(RPM 等方式)的用户立即进行 yum,apt-get update 等安全更新操作。
  3. 通过在 smb.conf 的[global]节点下增加 nt pipe support = no选项, 然后重新启动Samba 服务,以此达到缓解针对该漏洞攻击的效果。
  4. Samba 官方已经提供了新版本来修复上述漏洞,请受影响的用户尽快升级到新版本,下载链接如下:
    https://download.samba.org/pub/samba/stable/samba-4.6.4.tar.gz https://download.samba.org/pub/samba/stable/samba-4.5.10.tar.gz https://download.samba.org/pub/samba/stable/samba-4.4.14.tar.gz

FAQ

1)很多童鞋在ubuntu16.04或者centos6.8上没有验证成功,是so不对?metasploit版本不对?还是靶机环境不对?
答:
a) kali上的metasploit保证最新,然后只需下载对应的is_known_pipename.rb模块,放入/usr/share/metasploit-framework/modules/exploits/linux/samba/目录即可;
b) 使用metasploit自带的payload生成模块即可,默认为reverse TCP;
c) 本次测试靶机的smb.conf设置如下:
[public]
path = /home/samba
public = yes
writable = yes
browseable = yes
guest ok = yes
read list = nobody
write list = nobody
能触发漏洞的配置文件版本很多,writable = yes是必需的,global里有个security设置,删除后默认是匿名访问。
d) 本次测试共享目录/home/samba的权限为777;
e) 重点:2017年5月24日以后使用apt或者yum安装的smb服务基本都是打过补丁的,所以不可能利用成功。

2)如何在ubuntu下查看Samba的完整版本?
a) apt install apt-show-versions
b) apt-show-versions samba
这里写图片描述
c) 位置1是Samba版本,位置2是ubuntu补丁版(ubuntu0.16.04.7),可以参见ubuntu的修改日志http://changelogs.ubuntu.com/changelogs/pool/main/s/samba/samba_4.3.11+dfsg-0ubuntu0.16.04.7/changelog,可以看到已经修复了漏洞CVE-2017-7494。

3)如何查看centos已经修复的版本?
笔者这里找到的是RHEL的更新日志,redhat也在5月24日紧急更新了所有在维护的Samba包,修复漏洞CVE-2017-7494。文章详见:https://rhn.redhat.com/errata/RHSA-2017-1270.html

参考文献:

https://github.com/rapid7/metasploit-framework/pull/8450
http://bobao.360.cn/learning/detail/3900.html
http://www.4hou.com/vulnerable/4976.html
https://github.com/omri9741/cve-2017-7494
https://www.samba.org/samba/security/CVE-2017-7494.html
https://rhn.redhat.com/errata/RHSA-2017-1270.html
http://changelogs.ubuntu.com/changelogs/pool/main/s/samba/samba_4.3.11+dfsg-0ubuntu0.16.04.7/changelog

感谢:

悟空同学给出的语病修正的建议。

这里写图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对PHP远程代码执行漏洞(CVE-2022-31625),以下是一些修复方法: 1. 更新到最新本:确保你的PHP本是最新的,因为漏洞修复通常会包含在更新中。请访问PHP官方网站或者使用包管理工具来获取最新本。 2. 禁用危险函数:在php.ini配置文件中,禁用危险函数可以帮助防止远程代码执行。可以使用disable_functions指令来禁用一些敏感函数,如eval()、exec()、system()等。 3. 安全配置:检查你的PHP配置文件,确保安全设置已经启用。例如,禁用动态加载扩展、限制文件上传目录和大小、禁用远程文件包含等。 4. 输入验证和过滤:在你的应用程序中对用户输入进行严格的验证和过滤,以防止恶意代码注入。 5. 使用安全框架或库:使用安全框架或库来帮助防止远程代码执行漏洞。这些框架通常提供安全的默认配置和内置的安全功能。 6. 定期更新和监控:定期检查并更新你的应用程序和相关组件,以确保及时修复已知漏洞。同时,监控应用程序的日志和网络流量,以便及时发现异常行为。 请注意,这些方法只是一些常用的修复措施,具体的修复方法可能会因系统配置和应用程序的特定情况而有所不同。建议在修复漏洞之前,先进行充分的测试和备份。此外,如果你不确定如何处理或无法解决该漏洞,请咨询安全专家或PHP开发人员的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值