消除可是这台机器究竟出什么问题了呢?为了弄清真相,我们决定对这台系统进行取证分析。
检查进程先用 top命令查看系统进程列表,显示如下:
只有3个系统进程正在运行,这很不正常。
通过rpm -Va命令列出目前系统上面所有可能被更改过的文件,如top、netstat、ps等命令已经被替换。
因为此前有过类似文件被篡改的经历,不想历史重演,所以在上线前运维同事就已经在home目录下加密保存了一些重要的系统文件的副本。
开放端口分析netstat –anp
只有8080,50000端口对外开放,网络连接层面正常。
账号分析仅有一个用户具有root权限,未被注入超级权限。
awk -F: '$3==0{print $1}' /etc/passwd
可登录用户只有两个用户可以使用SSH方式进行登录:
root、jenkins cat /etc/passwd |grep –E “/bin/bash&”
可以看出账号层面正常。
定时任务通过分析系统未创建定时任务。
hosts 文件分析more /etc/hosts
hosts文件正常。
启动项分析启动项记录系统自启动的情况,若攻击者入侵植入木马或者后门,为了维持服务器控制,会在启动项中发现他的蛛丝马迹。
systemctl list-unit-files |grep enabled
启动项无异常。
历史命令分析:
History
历史命令被清空,top等程序被替换攻击者对痕迹进行了清理,对系统排查似乎理不出什么头绪。我决定换一个思路,从Jenkins上尝试突破。从Jenkins日志排查。
Jenkins日志
异常文件
日志信息正常,但是我们找到了一些有趣的文件。通过分析这些文件,发现这是攻击者的使用的横向移动脚本,通过这些脚本进行横向移动。从这里可以确定这台jenkins已经失陷。
Jenkins简介loudBees Jenkins(Hudson Labs)是美国CloudBees公司的一套基于Java开发的持续集成工具。该产品主要用于监控持续的软件版本发布/测试项目和一些定时执行的任务。
通过分析,系统使用Jenkins,查看 config.xml配置文件分析,发现其Jenkins版本为2.138。
通过Google搜索响应漏洞,发现该版本重大漏洞,可利用CVE-2018-1000861,CVE-2019-1003005和CVE-2019-1003029组合getshell,拿到服务器权限。
Jenkins远程命令执行漏洞(CVE-2018-1000861)Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。
通过这个漏洞,我们可以找到很多可供利用的利用链。其中最严重的就是绕过Groovy沙盒导致未授权用户可执行任意命令:Jenkins在沙盒中执行Groovy前会先检查脚本是否有错误,检查操作是没有沙盒的,攻击者可以通过Meta-Programming的方式,在检查这个步骤时执行任意命令。参考链接:
使用 @orangetw 给出的poc,发送如下请求即可成功执行命令:
http://*.*.*.1:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript
?sandbox=true
&value=public class x {
public x(){
"touch /tmp/tmp".execute()
}
}
poc地址:
https://github.com/orangetw/awesome-jenkins-rce-2019
迷雾重重到现在为止已经可以确定这台机器被入侵,因为从态势感知上关联的攻击行为和历史记录、日志文件被清理的异常现象来看这台主机已经失陷。
但是jenkins是内网的系统,并未放给公网,攻击者通过什么途径入侵撕开到内网的入口呢?对此一筹莫展的我们决定下楼抽支烟顺便理一下思路。
由于jenkins放在dmz区域,最有可能的攻击路径有两条:
云开雾释当即我们兵分两路,对邮件服务器和jenkins下可以访问公网的服务器进行排查。还真让我们有了新的发现,发现一台linux服务器存在反连外部恶意域名的行为。排查并没有发现异常邮件,那么这一台linux服务器就有可能存在问题。
夜尽天明登录这台linux服务器查看Web日志,发现尝试疑似木马后门上传,但根据日志中状态码反馈,均已405反馈失败,猜测这台服务器可能已经被攻击者攻破。随后我们对这台机器进行溯源。
攻击源IP统计如下:
攻击者IP
上传木马失败日志:
攻击者IP通过威胁情报反馈如下:
读取访问日志,发现攻击者尝试痕迹。
weblogic控制服务器日志:
分析weblogic控制服务器日志,发现利用反序列化漏洞经常出现的几个异常。
weblogic.rjvm.t3.MuxableSocketT3.dispatch类
java.io.ObjectInputStream.readObject类
反序列化缓存文件:
这个是网上的一个exp轮子,刚好入侵者是没有去修改这些特征。
网络weblogic反序列化exp文件。
通过检测weblogic控制服务器发现CVE-2018-2893漏洞。
定位到的黑客攻击路径为:
通过一夜的努力我们终于可以大致梳理出攻击者的攻击路径,攻击者通过外网信息收集,探测到公网服务器存在weblogic反序列化漏洞。上传shell失败后,攻击者在尝试横向拓展驻留点过程中发现了我们未打补丁的jenkins服务,通过jenkins服务发起了内网扫描。
恢复:加固工作记录