网站搜索

如何修复 Linux 系统中的 SambaCry 漏洞 (CVE-2017-7494)


Samba 长期以来一直是为 *nix 系统上的 Windows 客户端提供共享文件和打印服务的标准。它被家庭用户、中型企业和大型公司所使用,成为不同操作系统共存环境中的首选解决方案。

令人遗憾的是,广泛使用的工具都会发生这种情况,大多数 Samba 安装都面临着可能利用已知漏洞的攻击风险,在 WannaCry 勒索软件攻击成为新闻报道之前,人们并不认为这种情况很严重。很久以前。

在本文中,我们将解释这个 Samba 漏洞是什么以及如何保护您负责的系统免受该漏洞的影响。根据您的安装类型(来自存储库或来自源),您将需要采取不同的方法来完成此操作。

如果您当前在任何环境中使用 Samba 或认识使用 Samba 的人,请继续阅读!

漏洞

过时且未打补丁的系统容易受到远程代码执行漏洞的影响。简单来说,这意味着有权访问可写共享的人可以上传一段任意代码并在服务器中以 root 权限执行它。

该问题在 Samba 网站中被描述为 CVE-2017-7494,已知会影响 Samba 版本 3.5(于 2010 年 3 月上旬发布)及更高版本。非官方地,它被命名为 SambaCry,因为它与 WannaCry 相似:都针对 SMB 协议并且具有潜在的蠕虫能力,这可能导致它在系统之间传播。

Debian、Ubuntu、CentOS 和 Red Hat 已迅速采取行动保护其用户,并为其支持的版本发布了补丁。此外,还为不受支持的问题提供了安全解决方法。

更新桑巴

如前所述,根据之前的安装方法,有两种方法可供选择:

如果您从发行版的存储库安装了 Samba。

让我们看看在这种情况下您需要做什么:

修复 Debian 中的 Sambacry

通过将以下行添加到源列表 (/etc/apt/sources.list),确保 apt 设置为获取最新的安全更新:

deb http://security.debian.org stable/updates main
deb-src http://security.debian.org/ stable/updates main

接下来,更新可用包的列表:

aptitude update

最后,确保 samba 软件包的版本与已修复漏洞的版本匹配(参见 CVE-2017-7494):

aptitude show samba

在 Ubuntu 中修复 Sambacry

首先,检查新的可用软件包并更新 samba 软件包,如下所示:

sudo apt-get update
sudo apt-get install samba

已应用 CVE-2017-7494 修复的 Samba 版本如下:

  • 17.04: 桑巴 2:4.5.8+dfsg-0ubuntu0.17.04.2
  • 16.10:桑巴2:4.4.5 + dfsg-2ubuntu5.6
  • 16.04 LTS:samba 2:4.3.11+dfsg-0ubuntu0.16.04.7
  • 14.04 LTS:samba 2:4.3.11+dfsg-0ubuntu0.14.04.8

最后,运行以下命令来验证您的 Ubuntu 机器现在是否安装了正确的 Samba 版本。

sudo apt-cache show samba

在 CentOS/RHEL 7 上修复 Sambacry

EL 7 中修补的 Samba 版本是 samba-4.4.4-14.el7_3。要安装它,请执行以下操作

yum makecache fast
yum update samba

和以前一样,确保您现在拥有已修补的 Samba 版本:

yum info samba

仍受支持的旧版 CentOS 和 RHEL 也有可用的修复程序。检查 RHSA-2017-1270 以了解更多信息。

如果您从源代码安装了 Samba

注意:以下过程假设您之前已经从源代码构建了 Samba。强烈建议您在将其部署到生产服务器之前在测试环境中进行广泛的尝试。

此外,请确保在开始之前备份 smb.conf 文件。

在这种情况下,我们也将从源代码编译和更新 Samba。然而,在开始之前,我们必须确保所有依赖项都已预先安装。请注意,这可能需要几分钟的时间。

在 Debian 和 Ubuntu 中:

aptitude install acl attr autoconf bison build-essential \
    debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user \
    libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev \
    libcap-dev libcups2-dev libgnutls28-dev libjson-perl \
    libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl \
    libpopt-dev libreadline-dev perl perl-modules pkg-config \
    python-all-dev python-dev python-dnspython python-crypto xsltproc \
    zlib1g-dev libsystemd-dev libgpgme11-dev python-gpgme python-m2crypto

在 CentOS 7 或类似版本中:

yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \
    libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \
    perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \
    python-crypto gnutls-devel libattr-devel keyutils-libs-devel \
    libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \
    pam-devel popt-devel python-devel readline-devel zlib-devel

停止服务:

systemctl stop smbd

下载并解压源代码(4.6.4 是撰写本文时的最新版本):

wget https://www.samba.org/samba/ftp/samba-latest.tar.gz 
tar xzf samba-latest.tar.gz
cd samba-4.6.4

仅出于提供信息的目的,请检查当前版本的可用配置选项。

./configure --help

您可以包含上述命令返回的一些选项(如果它们在以前的构建中使用过),或者您可以选择使用默认值:

./configure
make
make install

最后,重新启动服务。

systemctl restart smbd

并验证您正在运行更新的版本:

smbstatus --version

它应该返回4.6.4

一般注意事项

如果您正在运行给定发行版的不受支持的版本,并且由于某种原因无法升级到更新的版本,您可能需要考虑以下建议:

  • 如果启用了 SELinux,您将受到保护!
  • 确保使用 noexec 选项挂载 Samba 共享。这将阻止执行驻留在已安装文件系统上的二进制文件。

添加,

nt pipe support = no

smb.conf 文件的 [global] 部分并重新启动服务。您可能需要记住,根据 Samba 项目,这“可能会禁用 Windows 客户端中的某些功能”。

重要:请注意,选项“nt pipeline support=no”将禁用 Windows 客户端的共享列表。例如:当您在 Samba 服务器上的 Windows 资源管理器中键入 \\10.100.10.2\ 时,您将收到权限被拒绝的消息。 Windows 客户端必须手动将共享指定为 \\10.100.10.2\share_name 才能访问该共享。

概括

在本文中,我们描述了名为 SambaCry 的漏洞以及如何缓解该漏洞。我们希望您能够使用这些信息来保护您负责的系统。

如果您对本文有任何疑问或意见,请随时使用下面的表格告诉我们。