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. java.io.FileNotFoundException: generatorConfig.xml (系统找不到指定的文件。)

    在使用MyBatis的逆向工程生成代码时,一直报错java.io.FileNotFoundException: generatorConfig.xml (系统找不到指定的文件.),如图 文件结构如下: ...

  2. python操作mysql实例

    #coding=utf-8 import MySQLdb # 打开数据库连接 db = MySQLdb.connect(host='localhost',user='root',passwd='',d ...

  3. [UVALive 3683] A Scheduling Problem

    图片加载可能有点慢,请跳过题面先看题解,谢谢 题目给出了一个信息:答案是有向边最长路 \(k\) 的值或者是 \(k+1\) 的值 那么题目就变成了:求是否有一种给无向边定向的方案,使得在以有向边最长 ...

  4. CF739E Gosha is hunting 【WQS二分 + 期望】

    题目链接 CF739E 题解 抓住个数的期望即为概率之和 使用\(A\)的期望为\(p[i]\) 使用\(B\)的期望为\(u[i]\) 都使用的期望为\(p[i] + u[i] - u[i]p[i] ...

  5. 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告

    P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...

  6. Active Directory PowerShell模块收集AD信息

    0x00 前言简介 Microsoft为Windows Server 2008 R2(以及更高版本)提供了多个Active Directory PowerShell cmdlet,这大大简化了以前需要 ...

  7. 《Linux内核设计与实现》第17章读书笔记

    第十七章  设备与模块 一.四种内核成分 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支 ...

  8. MySQL总结小妙招

    mysql5.7版本,免登陆修改管理员密码: vim /etc/my.cnf 加入skip-grant-tables,重启MySQL 终端输入 mysql ,直接登录MySQL数据库,然后use my ...

  9. 简短的创建Ajax对象代码

    假如你的脚本只针对某个浏览器开发,那么创建XMLHTTP是很简单的一件事,用XMLHttpRequest或者ActiveXObject即可.但事实上绝大多数的时候,我们都要考虑兼容,于是我们通常写成: ...

  10. java基础-Math类常用方法介绍

    java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...