使用已知明文攻击破解弱加密算法

使用已知明文攻击破解弱加密算法

在实习工作中拿到了一个样本,该样本名称为"2023最新财税规定.exe",SHA256: 36c3405eafd9bdb4c6dd0ca98a2a4779ab34b8777a36b38347316f09109a87e6,该样本在沙箱上检测为木马。

实际分析发现该样本的攻击行为分为多个阶段,然而本文主要是记录第二阶段所释放的加密文件的破解过程。

Stage#0 下载器

该样本的第一阶段就是一个下载器,逻辑比较简单,主要就是先检查当前路径,然后自复制并运行,复制完成后从远程FTP服务器上下载第二阶段的恶意代码,加载到内存执行。

stage1

所以这里直接将下载的文件dump下来进行分析。

Stage#1 文件释放

到了二阶段,这里着重介绍该样本二阶段释放文件的过程。

二阶段文件存在释放资源节的行为。

release_rsrc

并且在云沙箱检查到该样本的资源节的熵值偏高,所以怀疑其资源节可能是加了密的。

使用Resource Hacker打开样本的资源节,可以发现样本的资源节中存放了多个二进制文件。

resources

这里面的文件基本都是.dll文件,除了127号文件,可以看出是加密了的。

密文破解

因为这个文件是加了密的,并且我没能在二阶段样本中定位到解密的代码(样本使用了某种代码混淆的机制),所以需要先对其进行破解才能进行下一步的分析。

在破解密文之前,至少需要知道密文加密的方式,其实也就是加密算法,虽然在二阶段没能定位到相关代码。

但是该样本一阶段有一个解密过程。

样本二阶段在远程主机上是以密文形式保存,所以一阶段将二阶段文件下载下来后还需要进行解密。

所以我们可以猜测这里的密文也是和一阶段的解密流程采用类似的算法。

decryption

可以看到样本使用的解密算法其实和维吉尼亚算法类似,只不过将维吉尼亚算法中移位运算换成了按位异或。

解密使用的密钥是"Ww6",尝试用这个密钥解密上面的密文,结果当然是失败了。

不过,因为这个密文大概率是一个PE格式的文件,所以我们能够知道这个密文中的一部分明文。

比如从第3个字节开始的前面58个字节的取值为:{0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},并且在文件第78个字节的偏移处有一个字符串"!This program cannot be run in DOS mode."。

有了这部分明文,足够我们进行已知明文攻击了。

根据上面的加密算法,我们直接将上面这些明文与密文进行异或,可以得到加密这部分明文所使用的密钥。

异或的结果为:

{0x34, 0x57, 0x77, 0x33, 0x57, 0x77, 0x3e, 0x57, 0x77, 0x3d, 0x57, 0x77, 0x38, 0x57, 0x77, 0x27, 0x57, 0x77, 0x22, 0x57, 0x77, 0x21, 0x57, 0x77, 0x2c, 0x57, 0x77, 0x2b, 0x57, 0x77, 0x16, 0x57, 0x77, 0x15, 0x57, 0x77, 0x10, 0x57, 0x77, 0x1f, 0x57, 0x77, 0x1a, 0x57, 0x77, 0x19, 0x57, 0x77, 0x04, 0x57, 0x77, 0x03, 0x57, 0x77, 0x0e, 0x57, 0x77, 0x0d, 0x7b, 0x57, 0x77, 0x66, 0x57, 0x77, 0x65, 0x57, 0x77, 0x60, 0x57, 0x77, 0x6f, 0x57, 0x77, 0x6a, 0x57, 0x77, 0x69, 0x57, 0x77, 0x54, 0x57, 0x77, 0x53, 0x57, 0x77, 0x5e, 0x57, 0x77, 0x5d, 0x57, 0x77, 0x58, 0x57, 0x77, 0x47, 0x57, 0x77, 0x42}

可以看到,这里所使用的密钥周期还是3,但是密钥的第一个字节是在变化的,我们将这些变化的字节单独拿出来看能不能找到一些规律。

changing_byte

将这些变化的字节放到一起后,还是能够观察出他们的变化规律的,也就是每16个字节进行一次模0x80加0x50的运算。

有了这些变化规律后,就可以直接对密文进行破解。

crack_cipher

破解密文后,杀毒软件会对其报毒,说明我们的破解流程还是正确的。

放到IDA中查看其字符串,可以看到IDA能够加载该文件,并且字符串中也包含一些特征字符串。

peek_string

这些字符串是Nitol木马家族的特征字符串。


使用已知明文攻击破解弱加密算法
https://2hyan9.github.io/2023/08/03/使用已知明文攻击破解弱加密算法/
作者
2hYan9
发布于
2023年8月3日
许可协议