从Linux环境中的N-day漏洞到Kerberos EoP

从Linux环境中的N-day漏洞到Kerberos EoP

介绍

在其一项操作中,红色团队以非特权用户的身份在周边网页上执行了命令。本文描述了对漏洞(CVE-2018-1685)的分析和利用,该漏洞可能允许攻击者读取任意文件,但不知道其公开细节。最后,我们将介绍一种方法,在玩Active Directory加入Linux机器时(通过Kerberos<a/a>)将这种类型的漏洞(任意文件读取)转化为完整的系统妥协(命令执行)。

特权升级eop漏洞

被入侵的机器是最近更新的红帽服务器,因此通过内核漏洞的特权升级被丢弃。在典型的例程检查后,检测到一些具有SUID位集的根拥有的可执行文件:

 /home/db2test/sqllib/adm:
 total 5.3M
 drwxr-sr-x.  2 db2test db2test  112 Oct  8 10:29 .
 drwxrwsr-t. 19 db2test db2test 4.0K Oct  8 10:32 ..
 -r-sr-xr-x.  1 db2test db2test 152K Oct  8 10:29 db2audit
 -r-

s

r-xr-x.  1 root    db2test  19K Oct  8 10:29 

db2cacpy

 -r-xr-xr-x.  1 db2test db2test 195K Oct  8 10:29 db2cap
 -r-

s

r-x---.  1 root    db2test  32K Oct  8 10:29 

db2iclean

 -r-

s

r-x---.  1 root    db2test  87K Oct  8 10:29 

db2licm

 -r-xr-xr-x.  1 db2test db2test 120K Oct  8 10:29 db2set
-r-sr-sr-x.  1 db2test db2test 4.7M Oct  8 10:29 db2trc

“db2test”用户似乎与IBM的数据库管理系统DB2测试安装有关。在谷歌快速搜索后,我们发现了供应商发布的关于其中一个可执行文件(db2cappy)的安全公告

图片[1]-从Linux环境中的N-day漏洞到Kerberos EoP
图片[2]-从Linux环境中的N-day漏洞到Kerberos EoP

虽然它们没有透露有关漏洞的技术细节,但我们可以强调两个有趣的提示:

  • 它可以允许本地用户读取系统上的任何文件。
  • 在“变通方法”部分,他们指出,在为“配置助理”添加新数据库时,删除此二进制文件将删除向/etc/services添加端口的功能。

有了这些信息,红色团队开始发现漏洞。

CVE-2018-1685:漏洞狩猎

首先,我们下载可执行文件,以便在本地进行分析。我们还需要下载大约10个DB2库,以使该工具正常工作。

经过初步的静态分析后,我们可以分解它的行为。二进制文件接收2个命令行参数,在程序继续之前,它对每个参数执行检查。

第一次检查

它以某种混淆的方式检查第一个参数是否与以明文形式存储在“.rodata”段中的键匹配。

图片[3]-从Linux环境中的N-day漏洞到Kerberos EoP

第二次检查

在这种情况下,它检查第二个参数是否以字符串/tmp/services.开头,可能是因为另一个DB2组件按照此模式生成文件。

图片[4]-从Linux环境中的N-day漏洞到Kerberos EoP

脆弱性

如果满足这两个检查,该工具将指定文件(第二个参数)复制到/etc/services,并将其覆盖。可能的伪代码,简化,可能如下:

func main(argc, argv[]) {
   init_db2()

   if (argc is 3)
   {
      if (argv[1] equals HARDCODED_KEY) {
         if (argv[2] startsWith "/tmp/services.") {
            copy_file(argv[2], "/etc/services")
         }
      }
   }
}

如果我们在 /tmp 目录下创建一个名为“services.”(或以此开头)的目录,我们可以触发复制 /tmp/services./../.. /etc/shadow 的操作,从而满足第二个检查条件。

你可以在该仓库中找到一个可用的漏洞利用程序,该程序还负责在利用后恢复原始的 /etc/services 文件。请注意,关键(第一个检查)可能因 DB2 版本或设置的不同而有所变化(我们无法对此进行测试)。

图片[5]-从Linux环境中的N-day漏洞到Kerberos EoP

从任意读取到作为根的命令执行

由于它是通过Kerberos加入AD的Linux服务器,我们首先检查/tmp中是否有有效的TGT(ccache文件)(以重复使用它们),但所有文件都已过期。因此,我们寻找一个不需要用户交互的路径:keytab文件。

密钥选项卡包含计算机帐户的密钥(默认为红帽中的/etc/krb5.keytab)。您可以使用计算机帐户的密钥来伪造其服务(TGS)的门票

为了从keytab中提取密钥,我们将脚本与DB2漏洞一起使用。

图片[6]-从Linux环境中的N-day漏洞到Kerberos EoP

然后,使用来自impacketticketer.py工具,我们以在机器上拥有管理员权限的域用户的名义为服务器(“主机”SPN)的SSH服务制作TGS。

图片[7]-从Linux环境中的N-day漏洞到Kerberos EoP

最后,我们可以使用生成的票证通过SSH连接,使用Kerberos进行身份验证。

结论

在本文中,我们看到了攻击者如何利用一个众所周知的漏洞,而这个漏洞没有漏洞或公开细节。这就是为什么必须尽快强调应用每个安全补丁的相关性,而不仅仅是在漏洞出现时(一个例子是Zerologon的发布,许多公司直到几个月后在GitHub上发布一些漏洞才看到它的严重性)。

© 版权声明
THE END
喜欢就支持一下吧
点赞77 分享