关于AES算法的逆向总结(从wannacry勒索样本展开)

概述   

此篇文章大概分两个模块,一部分简单做了下wannacry的一些随笔记录,一部分是关于Wannacry勒索样本使用的加密算法AES底层的ida逆向代码分析及判断,记录得比较粗,也是随笔。

首先是wannacry勒索,大概就是调试过程的dump,样本经典比较简单,所以对于练手啥的还是比较友好的。

关于加密算法,其实有个想法是做一套常见加密算法底层ida反编译特征的笔记,也方便自己后续遇到一些加解密算法偶尔能拿出来看一下,大概兴致来了会偶尔写一写,这次针对aes的加密算法做了个简单的从逆向层面的分析,其实原因也是在网上好像没有一套关于算法层面的ida逆向底层分析,所以可能碰到一些算法做了修改或是怎样都没有把握去分析。

才疏学浅,分析不到位的地方望各位见谅。

Wannacry逆向的一些分析   

这次做一个比较常见的wannacry勒索场景的逆向分析详细步骤做下记录

首先做动态的ttp分析    

关于AES算法的逆向总结(从wannacry勒索样本展开)

动态进程创建内容

关于AES算法的逆向总结(从wannacry勒索样本展开)

扫描读取文件并重新创建所有文件夹下的文件

关于下列进程的启动cmdline 部分TTP

cmdline:'attrib +h .'cmdline:'C:WINDOWSsystem32cmd.exe /c 245391703491172.bat'cmdline:'attrib +h +s F:$RECYCLE'cmdline:'attrib +h +s E:$RECYCLE'cmdline:'@[email protected] co'           cmdline:'TaskDataTortaskhsvc.exe'  tor服务换了个名          cmdline:'cmd.exe /c start /b @[email protected] vs'cmdline:'taskdl.exe'cmdline:'@[email protected]'cmdline:'cmd.exe /c reg add HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun /v "mftzeefexaivqn510" /t REG_SZ /d ""C:Usersas199Desktopssftasksche.exe"" /f'

          

@[email protected] vs ::防止备份恢复

当前变种样本没有tasksche.exe

设置注册表启动项,这个进程应该是业务进程

后面释放的shellcode加密

动态调试可以看到释放的位置和具体eip跳转位置

关于AES算法的逆向总结(从wannacry勒索样本展开)

可以看到是一段pe    

关于AES算法的逆向总结(从wannacry勒索样本展开)

Dump下这段pe文件丢到ida做二次分析

跳转位置5ae0为taskstart dll导出函数

关于AES算法的逆向总结(从wannacry勒索样本展开)

调试与静态分析过程中发现前面内容没有触发勒索操作,所以勒索内容大概是在这个释放的dll中

关于AES算法的逆向总结(从wannacry勒索样本展开)

下面可以进入到这个dll中继续调试,需要注意的一个点是快照记得打好,便于后面调试过了头恢复快照继续调试

大概的静态分析看一下操作,可以看到这里与前面的动态提取执行内容相对应

关于AES算法的逆向总结(从wannacry勒索样本展开)

动态分析定位到这个动态函数调用1000720c处函数

关于AES算法的逆向总结(从wannacry勒索样本展开)

下面是函数具体内容

关于AES算法的逆向总结(从wannacry勒索样本展开)

上述代码内容执行此DeleteCriticalSection函数

样本使用多个临界区做多线程同步处理

先创建勒索加密文件,后面进行删除操作

5340调用加密函数

关于AES算法的逆向总结(从wannacry勒索样本展开)

第一次加密 写入flag还有大小,还有加密内容,还有加密类型,还有文件字节大小    

关于AES算法的逆向总结(从wannacry勒索样本展开) 关于AES算法的逆向总结(从wannacry勒索样本展开)

密钥生成

关于AES算法的逆向总结(从wannacry勒索样本展开) 关于AES算法的逆向总结(从wannacry勒索样本展开)

此函数进行密钥生成可以看到密钥是一个0x10 256位的加密密钥可以确定使用aes256加密

Key为generatekey函数随机生成

关于AES算法的逆向总结(从wannacry勒索样本展开)

后续函数初始化key 因为网上很多评论关于wanacry的加密是aes-cbc,需要iv做第一次轮加密的前置,所以刚开始误以为off_1000D8D4可能为iv初始化之类的,但是后面会有关于轮加密算法解析内容    

关于AES算法的逆向总结(从wannacry勒索样本展开)

key为generate随机生成

关于AES算法的逆向总结(从wannacry勒索样本展开) 关于AES算法的逆向总结(从wannacry勒索样本展开)

S盒    

关于AES算法的逆向总结(从wannacry勒索样本展开)

勒索病毒中的s盒存储,这部分因为是反射注入内存执行,所以未曾加密,找起来还算ok    

关于AES算法的逆向总结(从wannacry勒索样本展开)

然后关于文件结构

关于AES算法的逆向总结(从wannacry勒索样本展开)

首先写入五个内容,具体内容为第二个参数,首先是标识字符串

关于AES算法的逆向总结(从wannacry勒索样本展开)

然后可以看这里标记的后面的几个参数分别是写入AES密钥的字节数,RSA的公钥,加密类型,文件大小    

关于AES算法的逆向总结(从wannacry勒索样本展开)

然后是读取文件内容使用上面生成的随机密钥的持续加密

关于AES的加密分析  

首先简单聊下aes128-ecb的加密方式原理,这里以该病毒使用的128位为例子,192位、256位除了加密轮数不同其他的单轮密钥块位数,iv位数等都相同,想要了解更多具体可以参考网上的一些关于AES加解密分析的文章。

对于AES算法的分析,我自己大概总结两个方面,一方面是密钥初始化的分析,一方面是加密分析,所以本篇文章就以我自己的视角从这两方面展开

密钥初始化分析   

首先,密钥需要初始化,需要将128位密钥分成4x4x8位的字节矩阵,用于和每个4x4x8的数据字节矩阵轮加密,192、256位都是4x4x8字节矩阵所以这部分可以在底层算法不用区分。

回到业务算法上来,这里抛开异常处理之类的    

关于AES算法的逆向总结(从wannacry勒索样本展开)

首先上面的代码为初始化对象加密轮数,像这种比较有特征的比如12,14,10,为加密轮数,如果要找密钥初始化代码可能需要重点关注一下,这段大概就是如果是16个字节(128bit)赋值10,24Byte(192bit)赋值12,32Byte(256bit)赋值14,基本就可以往密钥初始化这部分去猜了。

关于AES算法的逆向总结(从wannacry勒索样本展开)这部分便是密钥轮存储初始化的代码,memset初始化对象本身this+1040(上面分析过是加密轮数)的每轮密钥块,到这里基本就可以确定猜测,继续下面    

初始化进入到密钥轮,每轮字节数4×4,每轮最后一个四字节左移一个字节,具体反编译代码如下

关于AES算法的逆向总结(从wannacry勒索样本展开)

这里要注意细节,其实看这段反编译的代码我也是感觉毫无头绪,其实对于加解密的算法反编译以后很多都是这种,有一些能看出东西,还有一些就如这个一般,如果盯着一段代码毫无头绪,可以换个思路转到汇编

关于AES算法的逆向总结(从wannacry勒索样本展开)

对于汇编来讲,就这么一小段,可以看到代码很工整的其实,其中有一条特别需要关注的指令,完成了密钥初始化的四字节最后一个字节提取    

关于AES算法的逆向总结(从wannacry勒索样本展开)

是在截取的第一个指令,eax的内容移位到edx的最后一个字节dl,所以eax的变量内容的最后一个字节赋值到dl寄存器,然后下面的就是对于字节的移位,显示24位,再16位正好移位40多出八位是一个字节的位数,这就完成了一个4×4矩阵的最后4单元左移一个字节的操作。

然后下一步是s盒替换

关于AES算法的逆向总结(从wannacry勒索样本展开)

可以看到应用s盒的数组,进行字节替换还有提取上一个矩阵单元的最后字节异或操作,到这里其实整个的密钥初始化就完成了,其实回过头看,对于算法的二进制逆向也是回归到原理进行

加密分析  

还是一样去掉关于异常处理的内容

这里先大概说一下简单的流程,具体的算法逆向的内容后面再说

128位需要10轮加密,还有一轮初始化异或

字节替换

行移位

列混合

轮密钥异或加密

对于字节替换,这个过程出现在后面任何过程之后都可以,因为只是替换字节

因为本篇文章是针对勒索病毒样本进行的分析,所以加密建立在这基础之上    

关于AES算法的逆向总结(从wannacry勒索样本展开)          
首先是行移位,这个代码很好看,这个一出来基本可以确定具体算法实现位置

关于AES算法的逆向总结(从wannacry勒索样本展开)

这部分列混合也没什么好说的,列混合固定矩阵与状态矩阵的异或混合

关于AES算法的逆向总结(从wannacry勒索样本展开)

然后下面这部分就是密钥轮异或加密与s盒替换的组合。因为这部分加密反编译出来的比较工整,所以很简单就能看出来,对于这部分没做过多的解读。   

原文始发于微信公众号(CrackME安全):关于AES算法的逆向总结(从wannacry勒索样本展开)

版权声明:admin 发表于 2024年1月31日 下午2:41。
转载请注明:关于AES算法的逆向总结(从wannacry勒索样本展开) | CTF导航

相关文章