查看原文
其他

【安全研究】一起由tomcat弱口令导致的入侵事件

海青实验室 安全狗 2022-05-30

↑ 点击上方“安全狗”关注我们


传说中,每个月黑风高夜,都是入侵搞事时。




01

事件溯源

网站管理员小A又轮到今天值晚班,网站运行得好好的,各项数据指标正常,看来又是一夜无事。为了打发时间,他拿出手机开始“吃鸡”。



在被花式秀了好多次,尝试了包括被车轧死、队友发疯打死、毒死、误伤炸死、被徒手打死等等稀奇古怪的死法之后,小A放弃了“吃一把鸡”就不玩了的想法。眼下只有明暗不定的显示器陪着他,就连枯燥的进程都比游戏有意思。


看起来很正常。



嗯?再看一眼……


很...正常?


这个tomcat进程下启动的是个什么鬼?!


赶紧去tomcat目录下瞅瞅



喵喵喵?


这四个.war的包都是病毒?


小A顿时来了斗志,大半夜的终于找到了一件比苟到最后吃鸡更有意思的事情。


他迅速调出日志进行分析,由于这四个包的修改时间有两个时间点,分别是2018-01-29与2018-02-06,因此他特别仔细地查看tomcat日志的这两个时间点,均发现了入侵痕迹,且均通过tomcat弱口令进入tomcat管理部署webshell。


到底谁设了一个这么简单的口令!!!



根据日志行为来看,小A推测入侵主机的黑客有两拨,第一拨2018-01-29入侵虽然成功,但未做过多危害性动作;而第二次入侵后则上传了病毒下载器,接着运行下载器下载病毒最后释放病毒控制服务器。


1月29日的日志


2月6日的日志


到这里,小A已经搞明白发生什么事儿了。




02

病毒分析

再回到最初的起点……对不起走错片场了,让我们回到最开始的地方,tomcat的进程树。



下面的几个异常进程无疑都是病毒搞的鬼,小A决定把病毒本身也分析一波。经过初步判断,小A得到了关于这个病毒的这些基本信息。



OD载入,往下翻一翻就看到了GetModuleHandleA函数,0042F4CF为WinMain函数,之前都是初始化。



进入到WinMain后,发现其只在0042E339处调用了一个函数,传入参数为字符串“PluginMe”及其指针。



跟进去42E339处调用的0042E2CB函数。




Python解密伪代码如下:


解密后发现该块内存是PE文件的映射。



函数返回后看下一个函数,继续传入了内存pe映射的起始地址,应该会是相关操作



跟进去分析,发现是Library显示加载kernel。dll获取其函数HeapAlloc、VirtualAlloc、GetProcessHeap,再校验了401080处内存是否为DOS头的magic(MZ)和NT头的signature(PE),最后调用VirtualAlloc申请内存空间




RtlAllocateHeap别名为AllocHeap,返回值为一个指向所分配内存块的首地址的指针,即eax=0x163A40,其余剩下代码均是申请内存以及将pe映射复制到0x10000000内存地址块以及加载库函数(篇幅有限,这里就略去不表了)。


重点关注0042E300处call eax,此处是进入0x10000000内存块的调用。



获取系统目录后,调用10023ED0函数,参数为

0x10002224(KLMN)

0x100268D4(值为0)


读取完病毒文件最后0x400字节放入地址0x393FE0后,”KLMN”,0x,0x400,0x10002224,393FE0调用10013A00,函数在读取的文件最后0x400个字节中寻找字符串”KLMN”,没找到就退出。



在偏移量为0x358处找到了字符串KLMN,并返回其偏移量,之后加上malloc到的0x400的内存地址基址0x393FE0,暂且称之为跳转控制内存块。



跳转控制内存块解密伪代码如下:



接着搜索OPQR,得到字符OPQRI,然后判断U是否在OPQRI中。不在,则判断I是否在OPQRI中;在,则在跳转控制内存块中搜索得到

EFGHk3J1dGdmL4hram1sf36BL6OChU8=


经过函数10002488解密后得到字符串

”Defghi Klmnopqr Tuv”


接着搜索GHIJ得到

GHIJk3J1dGdmL4hram1sf36BL6OChYR3dm5xL5NydXRP


解密得到字符串

Defghi Klmnopqr Tuvwxyab Defg


接着搜索IJKL,得到字符串

IJKLk3J1dGdmaWgvim1sf36BgIOCL6R3dm5xcHMvlXRnZmloa2ovjH9+Tw==


解密得到字符串

Defghijk Mnopqrstu Wxyabcd Fghijklm Opq


接着调用10015401



在其内部调用了1000E320函数搜索字符串“EFGH”得到密文解密为

Defghi Klmnopqr Tuv


接着判断通过注册表判断服务HKLM\SYSTEM\CurrentControlSet\Services\Defghi Klmnopqr Tuv是否存在。



若不存在则获取文件名,对比系统目录,复制文件放置系统目录,随机函数10014A30生成文件名,10015013,获取文件路径名,对比系统目录,复制文件放置系统目录。


然后再openSCManagerA打开服务控制管理器,未成功打开则退出,安装服务,更改服务为SERVICE_KERNEL_DRIVER驱动模式;


若不成功则使用

SERVICE_FILE_SYSTEM_DRIVER文件

系统驱动模式,打开服务,创建进程cmd.exe >nul 然后退出。


若是服务进程走到此处时则

StartServiceCtrlDispatch

启动服务入口点函数10014B9E,主线程死循环。


经过RegisterServiceCtrlHandler分发处理函数后,DNS请求硬编码地址,连接tcp远控服务器。



连接上黑客远控服务器进行通信,基本上就可以为所欲为了,来,成语接龙,为所欲为!



其他还有一些条件跳转区域:如复制到共享盘、添加到菜单启动栏等



根据分析的结果,小A最后给病毒画了一张流程图





03

善后处理

正经的分析溯源结束了,天也快亮了。小A揉了揉有点酸涩的眼睛,看了一下时间,再过一个小时他就可以交班了。


在交班前,他还有一些事情要做,比如把病毒清理掉

清理进程

关闭病毒服务(Defghi Klmnopqr Tuv)所运行的进程


清理注册表

随机种子 

HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed 

感染机器标签

HKLM\System\CurrentControlSet\Services\BITS\KLMNb1c78b6da61914d53f8325069260be59 

病毒服务注册表项 

HKLM\System\CurrentControlSet\Services\Defghi Klmnopqr Tuv\ 

 或者

HKLM\System\CurrentControlSet001\Services\Defghi Klmnopqr Tuv\ 


文件清理 

删除C:\Windows\目录下2016/08/17时间生成的病毒(注意确定为病毒再删除),文件名为随机字母

 

服务清理

清理服务Defghi Klmnopqr Tuv


事情的起因竟然只是Tomcat使用了弱口令,并且还给了Administrator的权限。小A随手重新换了一个复杂无比的密码,并且降低了Tomcat的权限。他暗自决定,如果找出谁起的弱口令,就宰他一星期的晚饭!





当然小A不知道的是,如果装一个服务器安全狗,这些都是能直接删除的!





*本文由安全狗旗下的海青安全研究实验室原创,转载请联系授权


往期精彩文章:

为小哥哥们打call!这张荣誉证书就是发给他们的

我们发现了OpenCart的两个原创漏洞

网站安全狗规则更新:能力更强大,防护更安心

区块链安全问题的解决思路:预防、合规、处置

各种网络安全新规下,等保到底该怎么做?

315打假指南:先把你手机上的挖矿木马卸了先

警告:区块链面临着严峻的网络安全风险

她们,是互联网安全的守护者

招聘 | 月上柳梢头,人约……安全狗

“两会”时刻来临:安全狗严阵以待全程护航!

年终特辑 | 祥瑞御免,安全狗年!

最新网络安全全景图发布:安全狗持续保持云安全领先地位

我们第四次入选《中国网络安全企业》50强 增长率前十

安全狗荣获金砖峰会“安保突出贡献单位“称号

云栖大会|当安全遇上云,安全狗引领网络安全新风尚

这两天在ISC的最大收获 就是大家对我们的热情

安全狗交卷!我们是金砖会晤最核心的网络安保力量!



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存