热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

勒索软件PadCrypty域名生成算法技术详解网站安全分享!

PadCrypt是一款勒索软件的名字,首次在推特@abuse_ch提及到。BleepinComputer.com写了两篇关于PadCrypt的文章。MalwareHunterTea


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

 

勒索软件PadCrypty域名生成算法技术详解

 

BleepinComputer.com推送的版本是2.2.97.0:

勒索软件PadCrypty域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解

 

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

勒索软件PadCrypty域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解

 

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

勒索软件PadCrypty域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解

 

为了重现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域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解 

 

剩下的值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域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解

 

只有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域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解

 

 反编译的程序总共268行,并且是无法读取的。幸运的是,对应大多数已知的混淆器都有反混淆器。我使用的是免费开源的de4dot。它配备了21个反混淆器,使用下面的命令:

de4dot.exe padcrypt_2.2.97.0.exe -o padcrypt_2.2.97.0_deobf.exe

再来看一遍DGA程序,这次更短了,可读性较强的C#代码:

勒索软件PadCrypty域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解

 

 如果你喜欢,VB代码也可:

勒索软件PadCrypty域名生成算法技术详解

勒索软件PadCrypty域名生成算法技术详解

 

 

www.dengb.comtruehttp://www.dengb.com/wzaq/1108244.htmlTechArticle勒索软件PadCrypty域名生成算法技术详解 PadCrypt是一款勒索软件的名字,首次在推特@abuse_ch提及到。BleepinComputer.com写了两篇关于PadCrypt的文章…

—-想了解更多的网站安全相关处理怎么解决关注<编程笔记>


推荐阅读
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • linux 禁止指定ip访问
    linux中如何禁止指定的ip访问呢?比如被别人暴力破解,被别人使用不同的密码尝试登录:所以我想直接禁用这些ip的访问.怎么办呢?解决方案:修改配置文件etchosts.deny把 ... [详细]
author-avatar
枝断叶残_337
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有