1、前言

在2016年左右研究人员发现一个与东南亚和中国南海问题的APT攻击,该APT攻击利用MS Offcie系列漏洞通过钓鱼邮件的形式欺骗受害者点击木马。以美国在内的各国政府和公司为目标发送了大量的恶意代码样本 。

其中木马上线的方式是利用了白名单网站的方式。攻击者将控制端的IP地址加密后发表文章到开放有博客、论坛的合法网站上。利用这类网站的RSS订阅服务作为受控主机访问的地址,

受害者的主机会读取RSS订阅中留存有攻击者C2加密信息的帖子地址将攻击者的C2信息解密后建立网络连接。

这种白名单网站利用的上线方式非常巧妙,可以有效地混淆分析者的视线。报告里将这个用来攻击的恶意软件称为BADNEWS。

2、BADNEWS说明

BADNEWS能够执行任意命令,截图,服务端更新,下载文件、执行文件以及列目录操作。利用DLL加载的方式(dll side-loading)以实现免杀,如果目标有价值将会进行第二阶段恶意软件的部署。

DLL Side-Loading:通过加载DLL注入到一个合法签名JAVA程序中,释放一个二进制文件和一个加密VBScript脚本,在VBScript脚本运行的同时生成以下三个文件:


microscmgmt.exe MSVCR71.dll jli.dll

其中MicroScMgmt.exe用来加载DLL注入合法进程【javarmi.exe】的恶意程序,通过调用合法的【MSVCR71.dll】和恶意【jli.dll】达到执行恶意软件目的。

【MicroScMgmt.exe】一旦执行,将加载【jli.dll】,最终调用DLL组件中的jli_wildcardexpandclasspath_0。执行自身恶意代码。

加载DLL注入后将产生两个线程,一个线程负责键盘记录,另一个线程负责获取本地和映射硬盘驱动器文档。

长期驻留:通过在注册表中生成以下注册表项达到在受害者系统长期驻留的目的:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

C&C通信 :BADNEWS 中包含有获取远程C&C服务器指令的固定通信代码和方式,这些方式包括RSS订阅、GitHub ,论坛、博客和动态 DNS主机。

C&C运行机制:BADNEWS与C&C服务器之间建立连接之后,将会向C&C

3、上线代码加密与解密

  • 加密原理

恶意软件会从博客或RSS订阅的地址从网页中搜索并提取“ {{”内的字段以 获取C&C信息,“{{”之后的内容是以相同方式加密的C&C地址信息。

  • 解密方法

BADNEWS早期的C2上线IP加密方式都是Base64加密,通过把每字节循环右移3bit,然后以0×23进行异或操作,之后再以16进制内容进行Base64加密。新的BADNEWS变种还增加了一层Blowfish算法的加密。

通过对http://feeds.rapidfeeds.com/88604/的解密熟悉了一下密码解密的方法。

以下是对数据进行解密的一个Python脚本:badnews_decoder.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import base64
import binascii
import re
from Crypto.Cipher import Blowfish
from struct import pack rol = lambda val, r_bits, max_bits: (val << r_bits%max_bits) & (2**max_bits-1) | ((val & (2**max_bits-1)) >> (max_bits-(r_bits%max_bits))) ror = lambda val, r_bits, max_bits: ((val & (2**max_bits-1)) >> r_bits%max_bits) | (val << (max_bits-(r_bits%max_bits)) & (2**max_bits-1)) def unhexData(d): # 十六进制解密
if len(d) % 2:
d = d.zfill(len(d)+1)
return ord(binascii.unhexlify(d)) # 十六进制解密,然后将单个字符以ascii码的方式返回 def decodeDecrypt(data): # 传参 c945adaa8a656b8fc9c9a5aec56fe58a248ac96c650b848423
decdata = ''
for x in range(len(data)):
x = x*2
if x < len(data):
c = unhexData(data[x]) # 十六进制转ASCII码
add_num = unhexData(data[x+1])
c = c << 4 # 左移动4位
c = (c + add_num) & 0xff
c ^= 0x23 # 异或0x23
c = rol(c, 3, 8) # 运算
decdata += chr(c) # 恢复为Base64编码
data2 = base64.b64decode(decdata)
key = binascii.unhexlify("F0E1D2C3B4A5968778695A4B3C2D1E0F0011223344556677")
cipher = Blowfish.new(key, Blowfish.MODE_ECB) # Blowfish算法解密
dec = cipher.decrypt(data2) # 解密后的C2地址
return dec # 加密C2的Url列表
urls = [
"http://feeds.rapidfeeds.com/88604"
] for d in urls:
r = requests.get(d)
body = r.text
r = re.search("\[+\s*([a-zA-Z0-9\=]+)\]+", body) # 取值得到 [[[Yzk0NWFkYWE4YTY1NmI4ZmM5YzlhNWFlYzU2ZmU1OGEyNDhhYzk2YzY1MGI4NDg0MjM=]]]]
if r:
data = base64.b64decode(r.group(0)) # Base64解密得到c945adaa8a656b8fc9c9a5aec56fe58a248ac96c650b848423
print("[{}] Decrypted C2: {}".format(d, decodeDecrypt(data).split("\x00")[0])) # 输出解密后的IP地址

运行后的结果:

4、IOCs

  • 恶意Word文档SHA256哈希

a67220bcf289af6a99a9760c05d197d09502c2119f62762f78523aa7cbc96ef1 07d5509988b1aa6f8d5203bc4b75e6d7be6acf5055831cc961a51d3e921f96bd fd8394b2ff9cd00380dc2b5a870e15183f1dc3bd82ca6ee58f055b44074c7fd4 b8abf94017b159f8c1f0746dca24b4eeaf7e27d2ffa83ca053a87deb7560a571 d486ed118a425d902044fb7a84267e92b49169c24051ee9de41327ee5e6ac7c2
  • BADNEWS SHA256哈希

ab4f86a3144642346a3a40e500ace71badc06a962758522ca13801b40e9e7f4a 290ac98de80154705794e96d0c6d657c948b7dff7abf25ea817585e4c923adb2
  • C2服务器

185.203.118[.]115 94.156.35[.]204
  • Dead Drop解析器
hxxp://feed43[.]com/8166706728852850.xml 

hxxp://feed43[.]com/3210021137734622.xml 

hxxp://www.webrss[.]com/createfeed.php?feedid=49966

hxxp://feeds.rapidfeeds[.]com/88604/

4、参考

https://researchcenter.paloaltonetworks.com/2018/03/unit42-patchwork-continues-deliver-badnews-indian-subcontinent/

【翻译稿件】揭秘Patchwork APT攻击 :一个与中国南海和东南亚问题相关的网络攻击组织

https://www.leiphone.com/news/201607/imUFuYNRqPU9sKRO.html

揭秘Patchwork APT攻击-恶意软件样本BADNEWS的更多相关文章

  1. 带你走进二进制-一次APT攻击分析

    原文:https://osandamalith.com/2017/06/04/apt-attack-in-bangladesh/ 由prison翻译整理,首发i春秋   引言;   这是一次来自遥远国 ...

  2. 攻击链路识别——CAPEC(共享攻击模式的公共标准)、MAEC(恶意软件行为特征)和ATT&CK(APT攻击链路上的子场景非常细)

    结合知识图谱对网络威胁建模分析,并兼容MITRE组织的CAPEC(共享攻击模式的公共标准).MAEC和ATT&CK(APT攻击链路上的子场景非常细)等模型的接入,并从情报中提取关键信息对知识图 ...

  3. APT攻击基础科普

    0x00 APT的历史起源背景 APT这个词汇最早起源于:2005年英国和美国的CERT组织发布了关于有针对性的社交工程电子邮件,放弃特洛伊木马以泄露敏感信息的第一个警告,尽管没有使用“APT”这个名 ...

  4. &lt; APT 攻击&gt;看起来是 .PPT 附件,竟是 .SCR !!

    趋势科技以前在2013年下半年度目标攻击综合报告里指出,发现了好几起APT攻击-高级持续性渗透攻击 (Advanced Persistent Threat, APT) /目标攻击相关的攻击活动. 趋势 ...

  5. 从kill-chain的角度检测APT攻击

    前言 最近一直在考虑如何结合kill chain检测APT攻击.出发点是因为尽管APT是一种特殊.高级攻击手段,但是它还是会具有攻击的common feature,只要可以把握住共同特征,就能进行检测 ...

  6. 从防御者视角来看APT攻击

    前言 APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控.检测和缓解技术,并分别进行梳理,介绍分析代表性技术.这一篇分析现有的监控技术 ...

  7. 水坑式攻击-APT攻击常见手段

    所谓“水坑攻击”,是指黑客通过分析被攻击者的网络活动规律,寻找被攻击者经常访问的网站的弱点,先攻下该网站并植入攻击代码,等待被攻击者来访时实施攻击. 水坑攻击属于APT攻击的一种,与钓鱼攻击相比,黑客 ...

  8. 初探APT攻击

    首发于i春秋 作者:joe     所属团队:Arctic Shell 团队博客地址:https://www.cnblogs.com/anbus/   0x1:关于APT的相关介绍:     APT是 ...

  9. 初探APT 攻击

    作者:joe       所属团队:Arctic Shell 本文编写参考: https://www.freebuf.com/vuls/175280.html https://www.freebuf. ...

随机推荐

  1. NewSQL 介绍

    1.CAP: CAP原理:• Consistency(一致性): 数据一致更新,所有数据变动都是同步的• Availability(可用性): 好的响应性能• Partition tolerance( ...

  2. Codeforces Round #250 (Div. 1) D. The Child and Sequence(线段树)

    D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...

  3. VS2010 重命名文件:源文件名和目标文件名相同 的解决方案

    想要在“”解决方案资源管理器“”中修改一个已经写好的文件的文件名,如图: 在改了几次后就出现了如图的问题: 然而在“解决方案资源管理器”中并没有看到,于是我打开了工程在磁盘中的位置文件夹: 意外发现了 ...

  4. 单点登录(九)-----遇到问题-----FileNotFoundException: class path resource-UsernamePasswordWrapperAuthenticatio

    运行cas server 项目时 报错 FileNotFoundException: class path resource-UsernamePasswordWrapperAuthenticatio ...

  5. 团体程序设计天梯赛 L1-049. 天梯赛座位分配(测试数据+不同方法)

    Data: /*33 2 1#11 4 7 10 13 16 19 22 25 2831 33 35 37 39 41 43 45 47 4951 53 55 57 59 61 63 65 67 69 ...

  6. mysql 统计 group by 之后的 group 的个数

    如果将 count(*) 和 group by 一起使用,count(*) 统计的将会是每个 group 里面的行数,而不是 group 的个数. 如果你想统计 group 的个数,需要将 group ...

  7. 为什么Spring Boot推荐使用logback-spring.xml来替代logback.xml来配置logback日志的问题分析

    最根本的原因: 即,logback.xml加载早于application.properties,所以如果你在logback.xml使用了变量时,而恰好这个变量是写在application.proper ...

  8. NAT ------ 为什么手动设置NAT端口映射(转发)不成功,导致访问不了局域网服务器

    手动设置端口映射成功的条件是路由器WAN口接的是外网IP,而不是网络提供商的路由器NAT之后的IP.假如有个外网的客户端,连的服务器IP一定要是外网IP(假设IP_A),如果自己的路由器WAN口接的是 ...

  9. ffmpeg的API函数用法 :sws_scale函数的用法-具体应用

    移植ffmpeg过程中,遇到swscale的用法问题,所以查到这篇文章.文章虽然已经过去很长时间,但是还有颇多可以借鉴之处.谢谢“咕咕钟. 转自:http://guguclock.blogspot.c ...

  10. nandflash,norflash,sdram,emmc,rom,ram等各种存储器识别

    老是被nandflash,norflash,sdram,emmc,rom,ram搞混,所以在这里总结一下,也为了更好的分清他们之间的关系,以至于别人问的时候不至于说不清. 我们不谈这些名次的由来,只说 ...