Go 语言凭借其高效的并发处理能力和强大的标准库支持等特点,在开发效率和性能上具有一定的优势,备受软件开发者青睐。然而,这种优势也吸引了部分初学者以及勒索组织的目光,他们利用 Go 语言编写勒索病毒并进行传播,催生了各种基于 Go 语言的勒索实验样本和勒索组织样本。
近期,火绒工程师在日常关注安全动态时发现一个基于 Go 语言的勒索样本。分析发现,该样本会利用 AES 进行数据加密,并将加密秘钥发送至 youtube.com ,导致被加密文件完全无法恢复。推测该样本属于基于 Go 语言勒索样本中的实验样本。随后对基于 Go 语言的勒索样本进行调查分析发现,实验样本在该类勒索样本中较为常见,而勒索组织样本除了勒索步骤比较完善,使用的技术手段与实验样本仍有一定相似。火绒安全产品可对上述勒索木马进行拦截查杀,请广大用户及时更新病毒库以提高防御能力。
查杀图
勒索病毒通常是黑客攻击链的最后一个环节,属于直接可以获利的病毒。在前期攻击中,黑客已将目标环境改造成可以执行任意程序而不被检测的状态。因此, 基于 Go 语言的勒索病毒无需采用免杀等特殊技术手段,便能直接进行加密和上传操作。本文将主要对勒索实验样本以及勒索组织样本分别进行简要分析。基于 Go 语言的勒索样本进行勒索的步骤概括流程图如下:
勒索实验样本
一些初学者或第一次开发勒索病毒的作者可能会制作出实验样本,这类样本的特点为勒索步骤不完整,例如缺少勒索信、勒索信无意义,或在对称加密过程中未能上传必要的数据等,最终导致受害者的数据无法被恢复,除非能够在内存中及时捕获密钥或在用户界面中获取相应密钥。而对于采用 RSA 非对称加密的样本,只有在私钥被保存至本地的情况下,才有可能实现数据恢复。
此次发现的勒索样本(下称 A 样本)即为实验样本,由于该样本最终将秘钥和用户标识符等数据发送至 youtube.com ,使得被加密文件无法恢复。此外,本文还将对同类型样本 B 和 C 进行简要阐述,展示实验样本的大致步骤和勒索信的无意义。
A 样本
A 样本调用 crypto/rand.Read 函数生成 1 字节的随机数,并通过计算从 a-z、A-Z 和 0-9 的字符集中选取一个字符,循环此操作九次,生成一个长度为 9 的 UserId 字符串,用于识别用户。