Fork me on GitHub

数据加密


知识点

分析加密算法的目的:恶意代码使用加密来达到各种各样的目的,最常见的是加密网络通信,同时,唯一代码也会用加密来隐藏它的内部工作:

  • 隐藏配置信息
  • 窃取信息之前将它保存到一个临时文件
  • 存储需要的字符串
  • 将恶意代码伪装成一个合法的工具

简单的加密算法:简单算法的好处如下:

  • 体积小,可以存放在空间较小的代码环境中如shellcode
  • 没有复杂算法那么显眼,不易被发现
  • 开销低,几乎对性能没有影响

凯撒密码:凯撒密码使用字符串的移位来加密信息。

XOR加密:用异或逻辑来实现加密,是一种单密钥加密方法。

其他简单加密算法:

  • ADD,SUB:编码算法可以用与XOR相似的方式在单个字节上使用ADD和SUB。
  • ROL,ROR:他们旋转字节中左侧与右侧的比特位,同样不可逆,需要配合使用。
  • ROT:原始的凯撒密码,它通常使用字母字符或者ASCII中94个可打印字符。
  • Multibyte:与单字节不同,这个算法可能使用一个较常的密钥,通常是4个或者8个字符长度,为了方便,它通常异或每个块。
  • 链或环:这个算法使用内容本身作为密钥,有多种实现,最常见的原始密钥用在明文的两端,开头或者结尾,编码过输出字符作为下一个字符的密钥。

Base64加密:Base64编码将二进制数据转换成64个字符的有限字符集。对于不同的base64加密有多种不同的策略或字母表。但是他们都是用一个额外的字符标识填充,通常是=。最常用的字符集是MIME字符集,他使用A~Z,a~z和0~9作为前62个值使用+和/作为最后的两个值。

常见的标准加密算法特征(相对于恶意代码来说):

  • 加密库很大,所以恶意代码需要静态的继承或者链接到已有的代码中
  • 链接主机上现有的代码可能降低可移植性
  • 标准加密库比较容易探测
  • 对称加密算法需要考虑如何隐藏密钥

识别字符串和导入:可以通过加密库中自带的字符串作为特征来识别恶意代码使用了哪些加密库。

寻找加密常量:第三方检测加密的方法是使用可以搜索常见加密常量的工具:

  • FindCrypt2:它会搜索程序中任何与加密算法相关的已知常量,因为大部分加密算法会使用与基本加密算法结构相关的一些固定位串。值得注意的是国际数据加密算法IDEA和RC4算法动态地创建他们地结构,因此他们无法通过这种方式识别。
  • Krypto ANALyzer:这个工具可以识别常见加密算法的特征,可以识别的算法很多但是误报率页比较高。

查找高熵值的内容:除了识别潜在的明显的加密常量或者加密密钥外,这种技术也可以识别加密内容本身,由于这种技术的影响广泛,可以适用于没有找到加密常量的地方如RC4。高熵内容技术相当迟钝,最好作为最后一种使用手段,多种类型的内容,如视频音频压缩数据也可能会显示高熵值,除了他们的头部特征以外,很难与加密数据区分。

课后练习

Lab13-1

分析恶意代码文件Lab13-01.exe。

问题

1.比较恶意代码中的字符串(字符串命令的输出)域动态分析提供的有用信息,基于这些比较,哪些元素可能被加密?

资源节中的一段数据、hostname、

2.使用IDA Pro搜索恶意代码中字符串xor,以此来查找潜在的加密,你发现了哪些加密类型?

循环加密

3.恶意代码使用什么密钥加密。加密了什么内容?

0x3B 、资源节中的一段数据

4.使用静态工具FindCrypt2、Krypto ANALyzer(KANAL)以及IDA熵插件识别一些其他类型的加密机制,你发现了什么?

网上的东西鱼龙混杂,不敢下,告辞!

5.什么类型的加密被恶意代码用来发送部分网络流量?

Base64

6.Base64编码函数在反汇编的何处?

函数sub_4010B1

本人虚拟hostname是DESKTOP-KH4V经过base64加密之后生成了REVTS1RPUC1LSDRW

7.恶意代码发送的Base64加密数据的最大长度是什么?加密了什么内容?

最长12个字节的计算机名

8.恶意代码中,你是否在Base64加密数据中看到了填充字符=或者==?

如果主机名长度小于12个字节且不能被3整除则会使用填充字符。

9.这个恶意代码做了什么?

用加密的主机名向www.practicalmalwareanalysis.com发送消息。

Lab13-2

问题

1.使用动态分析,确定恶意代码创建了什么?

WindowsXP下运行代码发现程序不断在其所在目录不断创建新的文件类似名为temp00087b24的文件。

2.使用静态工具FindCrypt2、Krypto ANALyzer(KANAL)以及IDA熵插件识别一些其他类型的加密机制,你发现了什么?

3.基于问题1的回答,哪些导入函数将是寻找加密函数比较好的一个证据?

WriteFile

4.加密函数在反汇编的何处?

sub_401739

5.从加密函数追溯原始的加密内容,原始加密内容是什么?

其实只看API函数是一些与窗口,色深等相关的就可以差不多猜出这个可能是截图收集。

那么直接将加密函数的调用nop掉试一下:

1
2
3
4
5
6
7
8
0040187F  | 50                | push eax                     |
00401880 | 90 | nop | 加密函数
00401881 | 90 | nop |
00401882 | 90 | nop |
00401883 | 90 | nop |
00401884 | 90 | nop |
00401885 | 83C4 08 | add esp,8 |
00401888 | FF15 38604000 | call dword ptr ds:[<&GetTick |

可以将生成的文件后缀修改为bmp打开就是屏幕截图。

6.你是否能够找到加密算法?如果没有,你如何解密这些内容?

在内存上将要加密的数据替换为加密后的数据即可。

7.使用解密工具,你是否能够恢复加密文件中的一个文件到原始文件?

Lab13-3

分析恶意代码文件Lab13-03.exe。

问题

1.比较恶意代码的输出字符串和动态分析提供的信息,通过这些比较,你发现哪些元素可能被加密?

字符串较乱,暂未找到有用信息

2.使用静态分析搜索字符串xor来查找潜在的加密。通过这种方法,你是发现什么类型的加密?

暂无

3.使用静态工具FindCrypt2、Krypto ANALyzer(KANAL)以及IDA熵插件识别一些其他类型的加密机制,发现的结果与搜索字符XOR结果比较如何?

4.恶意代码使用哪两种加密技术?

Base64和AES

5.对于每一种加密技术,他们的密钥是什么?

AES:ijklmnopqrstuvwx

Base64:CD……AB…….

6.对于加密算法,它的密钥足够可靠吗?另外你必须知道什么?

AES

7.恶意代码做了什么?

恶意代码使用自定义的Base64加密算法加密传入命令和AES加密的Shell命令来建立反连命令shell。


本章结束🎊

您的支持是我最大的动力🍉