1.4 检查恶意软件的字符串
字符串是程序二进制文件中可打印字符的序列。恶意软件分析师通常依赖恶意样本中的字符串来快速了解其中可能发生的情况。这些字符串通常包含下载网页和文件的HTTP和FTP命令,用于告诉你恶意软件连接到的地址的IP地址和主机名等类似信息。有时,即使用于编写字符串的语言也有可能暗示恶意软件二进制文件的来源国,尽管这可能是伪造的。你甚至可以在一个字符串中找到一些文本,它们用网络用语解释了恶意二进制文件的用途。
字符串还可以显示有关二进制文件的更多技术信息。例如,你可能会发现有关用于创建二进制文件的编译器、编写二进制文件所使用的编程语言、嵌入式脚本或HTML等信息。虽然恶意软件作者可以对所有这些痕迹进行混淆、加密和压缩等处理,但是即便是高水平的恶意软件作者也经常会暴露并留下一些痕迹,因此在分析恶意软件时,对镜像的字符串进行细致检查显得尤为重要。
1.4.1 使用字符串程序
查看文件中所有字符串的标准方法是使用命令行工具strings,按照以下语法进行使用:
该命令将文件中的所有字符串逐行打印到终端上。在末尾添加| less可以防止字符串在终端上跨屏显示。默认情况下,strings命令查找所有最小长度为4字节的可打印字符串,但是你可以设置不同的最小长度并更改“命令手册”中所列各种其他参数。我建议只使用默认的最小字符串长度4,但是你可以使用-n选项更改最小字符串长度。例如,“string -n 10 filepath”只提取最小长度为10字节的字符串。
1.4.2 分析镜像字符串
现在我们镜像了一个恶意软件程序的可打印字符串,但是挑战在于要理解这些字符串的含义。例如,假设我们将ircbot.exe中的字符串镜像到ircbotstring.txt文件中,这在本章前面的内容中,我们使用pefile库已经进行了探讨,如下所示:
ircbotstring.txt的内容包含数千行文本,但其中一些行应该突出显示出来。例如,代码清单1-7显示了从字符串镜像中提取出来的一串以单词DOWNLOAD开头的行。
代码清单1-7 显示恶意软件可以将攻击者指定的文件下载到目标计算机的字符串输出
这些行表示ircbot.exe将尝试把攻击者指定的文件下载到目标计算机上。
我们来尝试分析另一个。代码清单1-8所示的字符串镜像表明ircbot.exe可以起到Web服务器的作用,在目标机器上侦听来自攻击者的连接。
代码清单1-8 显示恶意软件有一个攻击者可以连接的HTTP服务器的字符串输出
代码清单1-8显示了ircbot.exe用于实现HTTP服务器的各种HTTP样板程序。此HTTP服务器可能允许攻击者通过HTTP连接到目标计算机以发出命令,例如获取受害者桌面的屏幕截图并将其回传给攻击者的命令。我们在整个代码清单中看到了HTTP功能的证据。例如,从Internet资源请求数据的GET方法❶。HTTP/1.0200 OK ❷这一行是一个返回状态代码200的HTTP字符串,表明HTTP网络事务都运行良好,而Server:myBot ❸表明HTTP服务器的名称是myBot,这是ircbot.exe附加的一个内置HTTP服务器。
所有这些信息都有助于理解和阻止特定的恶意软件样本或恶意活动。例如,知道恶意软件样本有一个HTTP服务器,当你连接到它时,它会输出特定的字符串,这样你就可以借此扫描你的网络来识别受感染的主机。