Jenkins漏洞背后的资源争夺战

Track-1   ·   发表于 2018-12-23   ·   漏洞文章
译文声明

本文是翻译文章,文章原作者f5,文章来源:f5.com                                
原文地址:https://www.f5.com/labs/articles/threat-intelligence/new-jenkins-campaign-hides-malware--kills-competing-crypto-miner                            


译文仅供参考,具体内容表达以及含义原文为准

 

F5安全研究人员近期发现了利用未经身份验证的代码执行漏洞对Jenkins自动化服务器进行攻击的威胁活动。这是继我们揭露攻击者利用XMRig挖掘门罗币的攻击活动后,他们又对Jenkins服务器发起的一系列攻击。这起活动中使用了具有15年历史的进程隐藏工具——XHide。通过它来隐藏恶意进程,并且中止在失陷服务器上运行的其他挖矿进程,达到抢占服务器资源的目的。

 

序列化Payload

可以看到,攻击者发送带有恶意payload的请求,通过反序列化漏洞对服务器进行控制。

图1:带有序列化Java对象的请求包,其中包含base64编码的恶意payload

序列化对象中包含经过base64编码的字符串,解码后内容如下:

图2:字符串解码后为bash命令

对字符串进行base64解码后得到的命令首先会尝试使用wget下载恶意文件,如果失败,则使用curl进行下载。下载完成后,以bash脚本格式运行该文件。下面我们来看看下载的bash脚本。

 

Bash脚本分析

该bash脚本是从中国Git网站GitEE下载的。在作者的git仓库中,只有一个具有单个分支的项目。

图3:攻击者在GitEE上的项目

在过去的三个月(自2018年4月22日以来),对于大部分文件,攻击者都未做跟新。但在7月2日那一周,更新了四个文件。

图4:2018年7月2日所在这周,作者对四个文件进行了更新

下载的bash脚本中包含各种命令,而将它的后缀改为.jpg是为了使它和目标服务器上其他文件混在一起,对受害者进行混淆。

脚本中的前几个命令,终止了目标服务器上多个进程。进行分析,可以看出其目的似乎是要避免服务器资源竞争。大多数进程名和已知的挖矿程序名一致。例如: kworker34,sourplum以及其他一些在imf-conference.org公布的挖矿程序。

图5:使用pkill命令杀死其他挖矿进程

接下来使用wget和curl在失陷服务器上下载其他恶意文件。

图6:使用wget和curl下载恶意文件

执行完下载命令后,失陷服务器会多出以下文件:

  • a
  • config.json
  • cron.d
  • x
  • dir.dir
  • h32
  • h64
  • run
  • Java
  • upd
  • x86_64
  • 如果服务器已感染并部署了其他恶意软件,其进程也已经在系统上运行了,则bash.pid文件会使用命令“cat bash.pid | xargs kill“杀死相关进程,从而安装自己的恶意软件。

    接下来,logo.jpg中的最后一条命令,将赋予所有已下载的文件执行权限,然后运行’x’文件。

    图7:对下载的文件赋权并运行‘x’文件

     

    持久性技术

    文件‘x’的唯一目的就是使’a’文件在后台执行。使用“nohup”命令,即使原始的shell会话断开,’a‘进程也能在系统中保持运行。(参见图8和9)

    图8:使用“nohup”命令使’a‘进程持续运行

    图9:’a’文件中设置了定时任务并对upd文件进行赋权运行

    上图中的代码与2017年10月26日在Stack Overflow论坛上的一段代码非常相似,如图10,其中的文件名及大部分命令都是相同的,只是无法确认作者。

    图10:Stack Overflow上的代码

    在文件’udp’中,通过设置定时任务,每分钟都会检测恶意程序bash.pid的进程是否运行。如果没有运行,则启动该程序。通过这种监测的手段,来防止恶意程序崩溃或被中止。

    在另一个定时任务中,每隔6小时,会下载hxxp://3389.space/lx/logo.jpg。在撰写本文时,该文件已无法下载。

    图11:程序崩溃或中止时将运行’run’文件

    脚本将运行进程隐藏程序(h32或h64分别支持x86和x64架构),并将Java文件名作为参数进行传递。而正在运行的进程的进程ID会保存到bash.pid中。

     

    进程隐藏

    在此次攻击活动中,攻击者使用了Schizoprenic Xnuxer Research在2002年发布的进程隐藏工具XHide.

    图12:XHide工具菜单栏

    通过对h32和h64的分析,我们弄清楚了XHid如何隐藏进程的原始命令:它并不会修改恶意文件的文件名,而是通过覆盖恶意文件的argv [0],修改恶意文件的cmdline信息(在linux系统中,位于in /proc/$pid/cmdline)。使用’ps -ax’命令将显示虚假的恶意进程信息。只有使用’ps -a’,才能显示恶意进程真正的信息。因为它是从 /proc/$pid/status对进程信息进行读取。

    在这种情况下,运行恶意java ELF文件,虽然会启动/usr/sbin/sshd(SSH服务常用),但很难引起怀疑。这种攻击手法比较古老但难得一见,我们以前从未遇到过这种技巧。一般的攻击者会直接对恶意文件名进行修改,然后运行。

     

    挖矿功能

    java可执行文件的主要目的是挖掘臭名昭著的门罗币。在菜单中我们可以看到XMRig相关选项,这说明在恶意软件中集成了XMRig挖矿功能。

    图13:恶意文件中集成挖矿功能

    虽然攻击者使用了独特的技巧来隐藏并驻存恶意程序,但他并没有对程序进行很好的混淆,我们很轻松的就在恶意程序中找到了钱包地址。

    图14:矿池地址及钱包地址均为明文

     

    追踪

    通过查看钱包地址,可以看到迄今为止攻击者的收益。

    图15:钱包信息

    如上图,攻击者已经挖到了超过39枚门罗币,在撰写本文时,其价值约为5,100美元。根据交易记录,我们发现该钱包最早的支付记录是在2018年3月11日。

    可以看到挖矿的速率介于50~60KH/s,这说明攻击者使用了几十甚至上百台服务器进行挖矿。

    图16:挖矿速率说明有多台服务器在同时挖矿

     

    IOCs

    a
    config.json
    cron.dxdir.dir
    h32
    h64
    run
    Java
    upd
    x86_64
    (这些文件很可能在于/tmp/.tmp/文件夹内,但最好对其他文件夹也进行检测)
    
    logo.jpg:如果该文件为可执行文件,那一定要重点关注。系统管理员可以使用这条命令来搜索此文件:find / -name logo.jpg | xargs file | grep executable
    
    Cronjobs:攻击者设置定时任务,使用curl或wget下载logo.jpg
    
    Processses:可以使用以下命令检测Java进程:pid=$(ps -a | grep java | cut -d " " -f 1); ps -ax | grep $pid

    当然,关注CPU的使用情况,是发现恶意挖矿行为最简单有效的方法。

     

    总结

    最近,我们发现了越来越多富有技巧的挖矿活动。例如,在6月,我们遇到了使用中文论坛作为C2服务器下载C#程序进行攻击的事件,除此之外,还发现了攻击者使用两个不同的漏洞,利用VBScript发起攻击。在诸多挖矿活动中,杀死竞争对手挖矿进程的行为很普遍。这说明越来越多的攻击者发现了挖矿有利可图,都想来分一杯羹。攻击者们使用各种新技巧,使得自己能在这场“资源争夺战”中处于优势地位。

    本文翻译自 f5.com, 原文链接


    打赏我,让我更有动力~

    0 Reply   |  Until 2018-12-23 | 406 View
    LoginCan Publish Content
    返回顶部

    掌控者 © 2016. All Rights Reserved. 掌控者

    Powered by 掌控者 Version 2.1.3