PadCrypt是一款勒索软件的名字,首次在推特@abuse_ch提及到。BleepinComputer.com写了两篇关于PadCrypt的文章。MalwareHunterTeam也在推特上提到了PadCrypt version 2.2.86.1的域名生成算法(DGA):

图片1.jpg

BleepinComputer.com推送的版本是2.2.97.0:

图片2.jpg

图片2.jpg

下面是版本2.2.86.1在2016年3月6号生成的24个域名:

图片3.jpg

图片3.jpg

下面是版本2.2.97.0在2016年3月6号生成的72个域名:

图片4.jpg

图片4.jpg

为了重现DGA,我使用的样本是PadCrypt 2.2.86.1来源Hybrid-Analysis。

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:

图片5.png

图片5.png

 

剩下的值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

    - https://www.bleepingcomputer.com/news/security/padcrypt-the-first-ransomware-with-live-support-chat-and-an-uninstaller/

    - https://www.bleepingcomputer.com/news/security/the-padcrypt-ransomware-is-still-alive-and-kicking/

    - https://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,