第13章 数据加密
在恶意代码分析中,术语数据加密是指以隐藏真是意图为目的的内容修改。由于恶意代码
使用加密技术隐藏它们的恶意活动,作为分析人员,要全面的了解恶意代码,就需要掌握
这些技术。
1.分析加密算法的目的
- 隐藏配置信息。如:命令和控制服务器域名
- 窃取信息之前将它保存到一个临时文件。
- 存储需要使用的字符串,并在使用前对其加密。
- 将恶意代码伪装成一个合法的工具,隐藏恶意代码活动中使用的字符串。
2.简单的加密算法。简单的加密技术已经存在了数千年。虽然你可能认为现在的计算机强大
的计算能力让这些简单的加密算法灭绝了,但是情况并非如此。简单的加密技术常被用来
隐藏内容,从而让内容看起来不明显,不可读,或者将它的数据转换成另一种字符集。
- 因为它们足够小,所以可以用在受限的环境中。例如漏洞利用的(exploit)shell code。
- 它们没有复杂加密算法那么明显。
- 开销低,它们对性能几乎没有影响
<1>凯撒密码
<2> xor,异或。使用ida pro识别xor循环
<3>其他的一些简单加密策略。
<4>Base64
3.常见的加密算法。使用标准加密存在一些潜在的漏洞,特别是对于恶意代码来说:
- 加密库很大,所以恶意代码需要静态的集成或者链接到已有的代码中。
- 链接主机上现有的代码可能降低可移植性。
- 标准加密库比较容易探测(通过函数导入,函数匹配或者加密常量表示)
- 对称加密算法需要考虑如何隐藏密钥。
很多标准加密算法都依赖于一个强大的密钥来存储它们的秘密。算法是公开的。
可以通过以下的方法尝试解密。
<1>识别字符串和导入
<2>查找加密常量
<3>查找高熵值内容。 识别加密算法另一方法是查找高熵值的内容,除了识别潜在的明显的加密常量
或者加密密钥外,这种技术也可以识别加密内容本身。
4.自定义加密。自创加密方案,组合简单加密方法。
5.解密。查找并且分离加密函数是恶意代码分析过程中很重要的一部分,但是通常情况下,你还想继续解
密隐藏的内容。有俩种基本的方法来重现恶意代码中的加密或者解密函数。
- 重新编写函数
- 使用恶意代码中存在的函数
<1>自解密。 无论算法是否已知,让程序正常活动期间自己完成解密。我们称这种方法为自揭密。自揭密
廉价且有效的解密方法。
<2>手动执行解密函数。对于简单的加密和编码方法,通常你可以使用编程语言提供的标准函数。
来解密字符串
<3>使用同游的解密规范。
实验
Lab13-1
分析恶意代码文件Lab13-01.exe
问题
1.比较恶意代码中的字符串(字符串命令的输出)与动态分析提供的有用的信息,基于这些比较,那些元素可能被加密?
2.使用IDA Pro搜索恶意代码中字符串’xor’,以此来查找潜在的加密,你发现了那些加密类型?
发现异或信息,推测是简单加密。
3.恶意代码使用什么密钥加密。加密了什么内容?
使用异或加密资源节中的内容。加密主机名字的前12个字符
4.使用静态工具 FindCrypt2,KryPto,ANALyzer以及IDA熵插件识别一些其他类型的加密机制,你发现了什么?
没有什么发现
5.什么类型的加密被恶意代码用来发送部分网络流量?
base64
6.Base64编码函数在反汇编的何处?
经过识别发现。
7.恶意代码发送Base64加密数据的最大长度是什么?加密了什么内容?
8.恶意代码中,你是否在Base64加密数据中看到了填充字符(=或者==)?
9.这个恶意代码做了什么?
这个恶意程序用于加密主机名称,发送一个特定的信号,知道接受特定的回应后退出。
Lab13-2
分析恶意代码文件Lab13-02.exe.
问题
1.使用动态分析,确定恶意代码创建了什么?
创建了很多文件,数据不易识别。
2.使用静态分析技术,例如xor搜索指令,FindCrypt2,KANAL以及IDA熵插件,查找潜在的加密,你发现了什么?
搜索xor指令发现程序的加密函数
3.基于问题1的回答,那些导入函数将是寻找加密函数比较好的一个证据?
writefile,查看是在哪里写入的文件。
4.加密函数在反汇编的何处?
5.从加密函数追溯原始的加密内容,原始加密内容是什么?
程序调用了获取用户的桌面,创建bitmap对象,加密放在桌面。
6.你是否能够找到加密算法?如果没有,你如何解密这些内容?
假设加密和解密算法是一致的也就是对合运算,调用俩次恢复数据,或者不调用加密函数。
7.使用解密工具,你是否能够恢复加密文件中的一个文件到原始文件?
通过补丁再次调用这个函数。调用俩次即可恢复数据。
Lab13-3
分析恶意代码文件Lab13-03.exe
问题
下面的是观看视频才发现的。
1.使用动态分析,确定恶意代码创建了什么?
可以通过查看字符串,查看到自定义的base64编码,error,和一个dns网站
2.使用静态分析技术,例如xor指令搜索。通过这种方法,你发现什么类型的加密?
查找到六个疑似加密函数
3.使用静态工具,如FindCrypt2,KANAL以及IDA熵插件识别一些其他类型的加密机制,发现的结果和搜索字符xor结果比较如何?
查看到作者使用了AES加密(Rijndael),其中俩个调用加密常量,俩个调用解密常量。
4.恶意代码使用哪俩种加密技术?
base64,AES
5.对于每一种加密技术,它们的密钥是什么?
base64 CDEFGHIJKLMNOPQRSTUVWXYZABcdefghijklmnopqrstuvwxyzab0123456789+/
AES ijklmnopqrstuvwx
6.对于加密算法,它的密钥足够可靠吗?另外你必须知道什么?
7.恶意代码做了什么?
使用base64加密算法加密传入的命令,使用AES加密传输shell命令相应来建立反向链接命令shell。
8.构造代码来解密动态分析过程中生成的一些内容,解密后的内容是什么?
可以查到到一些简单的命令提示。