linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(1)

翻译:ResoLutiOn

预估稿费:260RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

事件综述


近期,有网络安全人员发现:Linux系统下的安全扫描软件McAfee中存在多个安全漏洞【软件传送门:(McAfee for Linux)】,黑客可利用其中一些漏洞盗用Linux系统的root权限,发动RCE攻击。

关于McAfee软件的情况介绍


McAfee VirusScan Enterprise for Linux,一款利用Linux独特访问扫描程序,对系统进行实时防护的安全检测软件,由Intel旗下的子公司McAfee推出。该软件适用于使用Linux系统的企业用户。它能够检测隐藏在存档文件中的Linux病毒并予以阻止;阻止Microsoft Windows恶意软件,防止其通过Linux环境传播;同时还能借助来自McAfee Labs的自动安全更新,确保始终提供最新的Linux病毒防护。由此可见,McAfee VirusScan Enterprise for Linux的功能可谓十分强大。

当我们在浏览网页的编译代码时,即会发现该html文件的存放路径是由tpIt参数来决定。在上图中,该tpIt参数是放置在tasks.html文件中。而运行在web服务器上的Linux Strace工具会显示:可打开/opt/NAI/LinuxShield/apache/htdocs/0409/tasks.html文件,如下所示:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(2)

在编译时,如果将tpIt参数放置在地址为../../../../../../etc/passwd(该字符串经过URL加密处理)的不同的页面中,那么编译过程就会出错,系统会返回一个格式错误的页面,并附有错误返回值14。而JavaScript语言中的lookupErrorCode功能函数会根据错误返回值14,向用户发送“web模块使用错误”的提示语句。若将tpIt参数放置在一个不存在的系统路径中,那么错误返回值将变为10,错误提示语句为“系统无法打开该文件”。如下图所示:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(3)

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(4)

若系统中有类似的,已被命名的文件存在,那么系统会向未经授权的用户提示这两种错误编译消息。

那么问题来了,有效的网页编译文件(例如:tasks.html)和无效网页编译文件(例如:../../../../../../etc/passwd)之间的区别是什么呢?

我将会继续深入探究这一问题。

No.2 CVE-2016-8017:非法读取未经授权的远程文件(含有约束条件)

经过查看web服务器所使用的不同类型文件,我发现在有效编译文件的任何两个语句之间要么含有__REPLACE_THIS__字符串,要么含有【% %】标识符。

如果攻击者能够将以上的语句添加到系统的任何一个文件中(其中包括系统日志文件),那么他便可以通过web服务器进行远程读取文件。对于该漏洞的防护措施之一便是,对用户的身份进行严格限制:只允许具有nails身份的用户读取系统中的文件。

No.3 CVE-2016-8018:软件中不含CSRF(跨站请求伪造)令牌验证机制

由于在软件的网页交互界面中,不含有防止CSRF攻击的令牌认证功能,这便使得黑客在通过了系统的身份验证后,可以随意地向系统提交认证请求,发动CSRF攻击。现在,看到一个安全软件竟然存在这样一个高危漏洞,令我着实感到很惊讶。利用CSRF令牌保护缺失而发动攻击,这只是黑客实施远程攻击的手段之一。

No.4 CVE-2016-8019:跨站脚本攻击

当将tpIt参数设置为指向NailsConfig.html文件或Monitor.html文件时,info:7和info:5这两个参数值将会替换用户的不可信输入,并将结果返回给JavaScript的formatData函数。info:7代表的是一个执行语句的清单,其中可能包含:single,show,serverUtcOffset=-25200等语句值。之后,系统会将其放入一个由单引号引导的字符串语句中,传递给formatData函数。若info:7被用来指向形如single’.prototype.constructor=eval('alert(“xss”)’)的语句时,eval函数将在formatData函数被调用之前,便会按照函数的功能,计算字符串中恶意代码的值。

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(5)

之后,经过修改数据包中的信息,系统会向用户发出一条关于XSS攻击的消息,如下所示:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(6)

No.5 CVE-2016-8020:远程代码执行及提权漏洞

在进行扫描系统之前,用户需要填写一个4页的表格:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(7)

在表格提交之后,系统会向web服务器提交一个请求。下图展示的是整个过程中使用到的部分参数:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(8)

nailsd.profile.ODS_9.scannerPath变量所包含的文件路径,也即是系统进行扫描操作的执行路径。若将路径修改为:/bin/sh,则在网页界面中会出现以下的错误结果:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(9)

Strace工具将会给出信息,表明系统会通过一个以root权限运行的进程,将该参数传递给一个execve文件(可执行文件)。

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(10)

No.6 CVE-2016-8021:利用web界面,可向已知地址写入任意文件

用户可通过web界面指定使用一台网络服务器,并从该服务器上获取有关的更新信息。自从我决定要找到一种能够帮助用户远程向系统内写入文件的方法之后,我便意识到前面提到的那个特点会对我有所帮助。

为了查明更新服务器是如何运作的,我先是备份了本地的资源库,之后从我的服务器上下载了新的资源库,重新配置新的服务器。以此来探究服务器的运作过程。

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(11)

系统日志文件记录了更新进程所完成的操作,包括:下载一个更新程序包、验证其完成性、解压以及安装等。

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(12)

生成一个shell脚本其实很简单,但这需要花费一定的时间来进行下载,而且必须在一个网络数据包开始发送之前就要完成。这里有一个替代的方法,即为创建一个带有需求数据包的脚本程序,并在其中加入描述信息,就能够实现与shell脚本相同的功能。

结合CVE-2016-8020(漏洞5)和CVE-2016-8021(漏洞6),我们就能够实现提升用户的系统权限(从nails变为root)。使用CSRF或XSS攻击方式,我们便可以实现远程提权。

No.7 CVE-2016-8022:远程利用身份验证令牌

在一次尝试利用一个XSS漏洞和CSRF漏洞的过程中,我将一个简易的cookie工具和从一名授权用户的系统中“拿到”的cookie融合在一起,作为测试工具来使用。但当我准备试着利用我的PC发起“攻击”时,发现我的身份验证失败了:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(13)

我还尝试着写出了一个脚本程序,它能够重设在数据通信过程中的阻断和拦截程序。

接下来的两张图能够告诉我们有效请求和无效请求之间的区别:

有效请求:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(14)

无效请求

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(15)

这看起来似乎有点奇怪:当用户向服务器提交了一个系统已授权的请求时,web服务器就会发送该台PC的IP地址(cookie除外)。虽然这种方式有点不寻常,但能够保证通信的安全。

No.8 CVE-2016-8023:暴力破解身份验证令牌

鉴于之前逻辑解析测试的失败,我更想要探究其他的cookie是如何进行逻辑确认测试的。

下面给出的是nailsSessionId cookie的取值情况。它们是在用户进行登录和注销操作的过程中产生的,仅限于nails身份用户。

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(16)

而在常规的登录过程中,似乎仅有两部分的cookie的情况发生了改变。Cookie的格式为:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(17)

相关变量的参数为:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(18)

No.9 CVE-2016-8024HTTP响应拆分攻击

用户可通过点击“系统事件”界面上的导出按钮,以此来导出记录系统日志数据的CSV文件。

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(19)

当用户发送请求之后,参数info的值会被置为:0。一般情况下,该参数的值为multi,application/vnd.ms-excel。之后,服务器会给系统发送一个名为Content-Type: application/vnd.ms-excel的标头文件(Header)作为响应。攻击者可通过简单地url加密处理标头文件的方式,创建一个藏有恶意标头文件的链接。

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(20)

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(21)

No.10 CVE-2016-8025:验证性SQL注入攻击

我在实验中所使用的数据库是SQLite轻型数据库,用来保存相关的设置数据和扫描数据。经过观察我发现,该数据库的安全性较弱,黑客可在该数据库的每一个接口处实施SQL代码注入攻击。这款数据库能够将URL参数转换为SQLite命令语句。使用我在第九号漏洞介绍中提到的CSV导出方法,我们可通过点击一个URL的方式,丢弃CSV文件中的sqlite_master标签。而SQLite中的查询函数select * from sqlite_master;则是被嵌入到了一个URL中。(URL:localhost:55443/0409/nails?pg=proxy&tplt=-&addr=127.0.0.1:65443&mon:0=db select _show=$* _output=csv _table=sqlite_master &info:0=multi,application/vnd.ms-excel.)

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(22)

该数据库不用于身份验证,而是用于追踪被扫描过的文件以及系统事件日志。在了解了系统相关的漏洞情况之后,攻击者便可以通过SQL注入攻击来修改系统事件日志,以清除他们在系统中留下的文件追踪记录。

该数据库的模型如下所示:

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(23)

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(24)

linux 安全加固标准(Linux下的McAfee安全扫描软件存在多个漏洞)(25)

总结


黑客若将以上所有漏洞均加以利用,便能在Linux系统中以root权限执行RCE攻击,具体如下:

1. 利用CVE-2016-8022(漏洞7)和CVE-2016-8023(漏洞8),可暴力破解身份验证令牌。

2. 可运行被恶意代码感染的更新服务器。

3. 利用CVE-2016-8022(漏洞7),可向服务器发送带有验证令牌的请求,要求服务器自动更新数据。

4. 利用CVE-2016-8021(漏洞6),可迫使目标PC自动创建恶意脚本。

5. 利用CVE-2016-8020(漏洞5)和CVE-2016-8021(漏洞6),可采用发送带有验证令牌的不正确请求的方式来发动攻击,以代替原先执行恶意脚本的攻击方式。

6. 在受到感染的PC上,获得root权限的攻击者可直接运行恶意脚本。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页