PadCrypt是一款勒索软件的名字,首次在推特@abuse_ch提及到。BleepinComputer.com写了两篇关于PadCrypt的文章。MalwareHunterTea
PadCrypt是一款勒索软件的名字,首次在推特@abuse_ch提及到。BleepinComputer.com写了两篇关于PadCrypt的文章。MalwareHunterTeam也在推特上提到了PadCrypt version 2.2.86.1的域名生成算法(DGA):
BleepinComputer.com推送的版本是2.2.97.0:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
下面是版本2.2.86.1在2016年3月6号生成的24个域名:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
下面是版本2.2.97.0在2016年3月6号生成的72个域名:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
为了重现DGA,我使用的样本是PadCrypt 2.2.86.1来源Hybrid-Analysis。
%
ignore_pre_1%
MD5 f58072b9413886e7b79e826ad94bd89e
SHA-256 1ad70a64863c2c59390e4e956d97065524acf5e2ae53f786770d2cf6bd602141
upload date 2015-03-01 10:55:57 (CST)
filename package.pdcr.bin
PadCrypt version 2.2.86.1
filesize 1.3 MB
link
下面的这个样本是PadCrypt 2.2.97.0,来源Lawrence Abrams这里,可以从virusshare上下载。这个样本在DGA上做了很小的修改(具体可以看上面的推特)。
MD5 7c0f7a734014022f249338a23881dc24
SHA-256 f0f8ef9a0cd40363aa4b06ba4c0fa286f23010830caa931addefacb087d7c678
upload date 2016-03-06 19:52:54
filename PadCrypt.exe
PadCrypt version 2.2.97.0
filesize 1.4 MB
link
0×01 DGA 设计
PadCrypt 2.2.86.1的DGA一天生成24个域名,PadCrypt 2.2.97.0是它的三倍(72)。DGA均使用SHA256哈希值作为生成方案。其他恶意软件家族的哈希包括Bamital,Murofet,Gamover,Pushdo(MD5)和Dyre(SHA-256)。
PadCrypt 的数字没有进行复杂的变化,只有域名数字(0到23)的当前时间采用hash值。在 2.2.86.1和 2.2.97.0唯一的不同就是时间和域名数字分开了。在旧的版本中被(eg,6-3-2016:17)分开;在新的版本中(eg:6-3-2017|17)。
Hash值的最后四位决定了是否为顶级域名。他4位值用作顶级域名的硬编码列表的索引。列表中只拥有11个域名,第一个顶级域名用来代替更大的指数级。这就使得第一域名”.com”比其他域名更普通了。3-18位决定了16个第二级别的特性。第二级别的特性映射到一个硬编码的列表中0000-1001:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
剩下的值1010-1111映射到相关的十六进制表示,”a”到”f”。由于字母a,b,c,d和f同样在硬编码的映射中,和字母”enolmk”一样出现两次。
0×02重现
使用python重现DGA。使用-d或者–date参数设置日期。如果不提供日期,那么当天的域名就已经生成了。你可以通过-V或者–version选择DGA的版本。你也可以在我的Github上找到日后改进的DGA重现过程。
The DGA of PadCrypt
See
- https://twitter.com/BleepinComputer/status/705813885673201665
- http://www.bleepingcomputer.com/news/security/padcrypt-the-first-ransomware-with-live-support-chat-and-an-uninstaller/
- http://www.bleepingcomputer.com/news/security/the-padcrypt-ransomware-is-still-alive-and-kicking/
- http://johannesbader.ch/2016/03/the-dga-of-padcrypt/
"""
import argparse
import hashlib
from datetime import datetime
configs = {
"2.2.86.1" : {
'nr_domains': 24,
'tlds': ['com', 'co.uk', 'de', 'org', 'net', 'eu', 'info', 'online',
'co', 'cc', 'website'],
'digit_mapping': "abcdnfolmk",
'separator': ':',
},
"2.2.97.0" : {
'nr_domains': 24*3,
'tlds': ['com', 'co.uk', 'de', 'org', 'net', 'eu', 'info', 'online',
'co', 'cc', 'website'],
'digit_mapping': "abcdnfolmk",
'separator': '|'
}
}
def dga(date, config_nr):
config = configs[config_nr]
dm = config['digit_mapping']
tlds = config['tlds']
for i in range(config['nr_domains']):
seed_str = "{}-{}-{}{}{}".format(date.day, date.month, date.year,
config['separator'], i)
h = hashlib.sha256(seed_str.encode('ascii')).hexdigest()
domain = ""
for hh in h[3:16+3]:
domain += dm[int(hh)] if &#39;0&#39; <= hh <= &#39;9&#39; else hh
tld_index = int(h[-1], 16)
tld_index = 0 if tld_index >= len(tlds) else tld_index
domain += "." + config[&#39;tlds&#39;][tld_index]
yield domain
if __name__=="__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--date", help="date for which to generate domains")
parser.add_argument("-v", "--version", help="dga version",
choices=["2.2.86.1", "2.2.96.1"], default="2.2.86.1")
args = parser.parse_args()
if args.date:
d = datetime.strptime(args.date, "%Y-%m-%d")
else:
d = datetime.now()
for domain in dga(d, args.version):
print(domain)
0×03 特征
下面是PadCrypt DGA的特征:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
只有11个字符组成二级域名的字符集。连同16个字符的固定长度,这就使得域名更好的归因于PadCrypt。分配如下:
a: 12.5 %
b: 12.5 %
c: 12.5 %
d: 12.5 %
e: 6.25 %
f: 12.5 %
k: 6.25 %
l: 6.25 %
m: 6.25 %
n: 6.25 %
o: 6.25 %
在顶级域名中,.com占据37.5%,其余的10个顶级域名大概占据6.25%。
0×05 附录-如何逆向
推特上有人私信我如何逆向DGA,这里展示如何简单逆向PadCrypt。
PadCrypt使用.NET4.5编写的。我们可以使用.NET反编译器打开二进制文件。我用的是免费且很好用的dnSpy。自然PadCrypt的作者意识到,反编译中间语言比较简单,因此他们使用一定的保护手段。因此在PadCrypt 2.2.86.1, 2.2.97.0 和最近的版本 2.2.120.0使用了DeepSea4.1,当你用dnSpy打开二进制文件时,只会得到散乱的代码。下面是DGA混淆后的代码截图:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
反编译的程序总共268行,并且是无法读取的。幸运的是,对应大多数已知的混淆器都有反混淆器。我使用的是免费开源的de4dot。它配备了21个反混淆器,使用下面的命令:
de4dot.exe padcrypt_2.2.97.0.exe -o padcrypt_2.2.97.0_deobf.exe
再来看一遍DGA程序,这次更短了,可读性较强的C#代码:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
如果你喜欢,VB代码也可:
![勒索软件PadCrypty域名生成算法技术详解](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg)
http://www.dengb.com/wzaq/1108244.htmlwww.dengb.comtruehttp://www.dengb.com/wzaq/1108244.htmlTechArticle勒索软件PadCrypty域名生成算法技术详解 PadCrypt是一款勒索软件的名字,首次在推特@abuse_ch提及到。BleepinComputer.com写了两篇关于PadCrypt的文章…
—-想了解更多的网站安全相关处理怎么解决关注<编程笔记>