摘要
近日,阿里云安全团队基于态势感知 0day 监测系统,检测到来自立陶宛的攻击者的攻击行为。
据情报信息,该攻击者已批量攻击成功,并且,其使用的 Exploit 在互联网范围内未公开。阿里云安全技术团队接到告警后,第一时间协同漏洞研究、安全产品和应急团队,进行分析和处置。
分析后发现,该攻击针对于国内某运营商合作群呼系统 — 暂称为Next群呼系统。
攻击者目前仅做小范围试探,并未进一步进行黑产变现;但根据攻击行为预判:因攻击者已经将受影响的目标已经存入数据库,待时机成熟时,不排除攻击者讲使用黑产技术,进行批量的变现的可能。目前,阿里云云盾WAF默认支持防御。
攻击行为分析
阿里云安全团队发现,原始的攻击报文会尝试读取用户的/etc/passwd,附带一个奇怪的特征在 POST 数据段“|||0\u05ab|\\”,推测可能是黑客用来标识自己的扫描流量。
攻击成功后,/etc/passwd将被回显:
HTTP/1.1 200 OK
Date: Sat, 10 Feb 2018 13:09:40 GMT
Server: Apache/2.2.14 (CentOS)
X-Powered-By: PHP/5.3.5
Content-Disposition: attachment; filename="passwd"
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 1103
Content-Type: application/x-gzip
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth
...
该攻击者从2018-02-10 14:54:23开始,对该漏洞进行批量攻击,截止到目前扫描仍未停止,已有相当数量的“裸奔”(没有任何安全措施防护)的服务器中招。
从攻击行为来看,目前该黑客只是做了漏洞的探测,并没有对漏洞进一步的利用,很可能是还未找到有效的变现手法。
阿里云团队也预测和提醒,不排除黑客已经将受影响的目标存入数据库,待时机成熟时,使用黑产技术进行批量的变现 — 因而提前做好防范十分重要。
从攻击趋势来看,黑客持续且稳定的进行漏洞扫描,逐渐扩大自己的战果,不排除攻击者增加多台服务器同时进行扫描。
漏洞详情
该 CMS (建站系统)属于某运营商合作群呼系统(因没有具体名字,暂称为Next群呼系统),在国内有一定数量的企业在使用。
阿里云安全团队对 CMS 进行了简单评估,定位根目录下downtar.php文件:
<?php
function get_browser_type()
{
$USER_BROWSER_AGENT="";
if (ereg('OPERA(/| )([0-9].[0-9]{1,2})', strtoupper($_SERVER["HTTP_USER_AGENT"]), $log_version))
{
$USER_BROWSER_AGENT='OPERA';
}
else if (ereg('MSIE ([0-9].[0-9]{1,2})',strtoupper($_SERVER["HTTP_USER_AGENT"]), $log_version))
{
$USER_BROWSER_AGENT='IE';
}
else if (ereg('OMNIWEB/([0-9].[0-9]{1,2})', strtoupper($_SERVER["HTTP_USER_AGENT"]), $log_version))
{
$USER_BROWSER_AGENT='OMNIWEB';
}
else if (ereg('MOZILLA/([0-9].[0-9]{1,2})', strtoupper($_SERVER["HTTP_USER_AGENT"]), $log_version))
{
$USER_BROWSER_AGENT='MOZILLA';
}
else if (ereg('KONQUEROR/([0-9].[0-9]{1,2})', strtoupper($_SERVER["HTTP_USER_AGENT"]), $log_version))
{
$USER_BROWSER_AGENT='KONQUEROR';
}
else
{
$USER_BROWSER_AGENT='OTHER';
}
return $USER_BROWSER_AGENT;
}$fullpath = isset($_REQUEST['fullpath']) ? trim(urldecode($_REQUEST['fullpath'])) : '';$now = gmdate('D, d M Y H:i:s') . ' GMT';$USER_BROWSER_AGENT= get_browser_type();$basename = basename($fullpath);header("Content-Type: application/x-gzip");header('Expires: ' . $now);if($USER_BROWSER_AGENT == 'IE'){
header("Content-Disposition: attachment; filename=\"$basename\"");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');}else{
header("Content-Disposition: attachment; filename=\"$basename\"");
header('Pragma: no-cache');}readfile($fullpath);?>
源码中将$_REQUEST参数直接传入readfile函数,导致任意文件读取。
安全建议
为了避免黑客进行批量利用造成更大影响,阿里云安全建议相关企业,及时进行自测:
(1)如果存在漏洞,可以快速热修复:直接将 downtar.php 的 50 行 readfile 函数进行注释。
(2)可使用阿里云云盾Web应用防火墙,默认防护此类攻击。
后记
阿里云安全团队目前尚未研究该措施对于该 CMS 正常使用的影响,在进一步的研究修补方案的同时,我们也会将漏洞同步给 CMS 的开发商,请受影响的用户及时关注后续的通知。