首页
社区
课程
招聘
[分享]Cerbero 电子期刊:第1期
发表于: 2025-8-24 21:20 467

[分享]Cerbero 电子期刊:第1期

2025-8-24 21:20
467

欢迎阅读《Cerbero 电子期刊》第1期!

我们理解,我们的客户无法关注我们发布的每一篇博客和社交媒体帖子,因此我们决定创建这本期刊,以叙述公司最近的各项动态。

此外,如果您和我们一样,年纪足够大,还记得像《NT Insider》这样的电子杂志的黄金时代,那么这本期刊还能带来一丝怀旧之情。

本期内容丰富,我们重点讨论了 Cerbero Store 的推出,我们认为这将是一个改变游戏规则的举措。同时,我们还介绍了一些最近在该平台上发布的精选软件包。

翻译:梦幻的彼岸

发布日期:2022年6月20日

英文版地址:209K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3!0J5k6g2)9J5k6h3y4W2M7X3u0W2M7X3!0Q4x3X3g2A6L8#2)9J5c8Y4y4@1j5i4c8A6j5#2)9J5c8X3A6G2N6i4u0F1j5h3I4Q4x3V1k6U0k6i4u0T1k6i4u0G2i4K6g2X3K9X3!0#2M7X3&6S2L8q4)9#2k6X3W2K6M7%4g2W2i4K6g2X3x3g2)9J5k6i4m8V1k6R3`.`.

一、Cerbero 商店

为本系列的 Cerbero Suite 和 Cerbero Engine 引入的一项主要功能是 Cerbero Store:一种安装和更新软件包的简便方式。

我们创建 Cerbero Store 的主要原因之一是为了能够更快地发布更新。仅仅为了更新某个特定部分而重新发布整个应用程序是不合理的。此外,我们的软件运行在多个平台上,这意味着每次更新都需要我们创建多个软件安装包。Cerbero Store 解决了这一问题,因为所有平台共享相同的软件包代码。

Cerbero Store 的另一个优势是,现在可以将少数用户使用的某些组件从主程序中分离出来。事实上,我们已将 Windows 内存分析功能移至 Cerbero Store 上的一个独立软件包。这使得我们所有主软件包的体积都显著减小。

我们移至 Cerbero Store 软件包的另一个组件是用于 Ghidra 的原生用户界面。这样做的原因是 Ghidra 有时会在版本更新时更改其 API,从而导致我们的插件代码失效。过去,我们不得不为了更新 Ghidra 插件而重新发布整个主程序。如今,通过将 Ghidra 插件作为独立软件包管理,这一问题已得到解决。

在过去几个月里,我们开始在 Cerbero Store 上陆续上架了各种用途的软件包。其中包括“MalwareBazaar情报”(MalwareBazaar Intelligence)软件包、“微软 Authenticode”(Microsoft Authenticode)软件包、“字符串解密器”(String Decrypter)软件包、“UPX 脱壳器”(UPX Unpacker)软件包、“.NET BinaryFormatter 解码器”(DotNET BinaryFormatter Decoder)软件包,以及“API 求解器”(API Solver)软件包。

(一)注意:仅限商业版软件包

Cerbero Suite 的个人许可证用户可以访问 Cerbero Store 上的许多软件包。然而,我们将部分软件包(例如“MalwareBazaar情报”(MalwareBazaar Intelligence)软件包)保留给商业许可证用户使用。我们尽量将仅限商业许可证的软件包数量控制在我们认为适用于商业活动的范围内。此外,某些软件包可能仅适用于 Cerbero Suite 高级版(Advanced),而不适用于标准版(Standard),这通常是因为这些软件包依赖于标准版所不具备的功能。

二、MalwareBazaar情报

MalwareBazaar:7f2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5i4A6S2j5i4u0Q4x3X3g2S2j5Y4g2K6k6g2)9J5k6h3y4Z5i4K6u0r3

“MalwareBazaar情报”(MalwareBazaar Intelligence)软件包可让您直接从文件报告中即时获取来自 MalwareBazaar 的情报信息。该软件包以图形化方式直观展示 MalwareBazaar 报告的各个部分,包括所有外部扫描服务提供商的结果。

界面采用不同颜色来突出显示文件的恶意程度,所有高亮显示的项目均为超链接,点击即可跳转至相应的 MalwareBazaar 网页。

尽管该软件包目前已极具实用价值,但我们远未止步于此!

我们原本希望加入许多功能,但受限于 Cerbero Suite 5.6 版本发布的时间安排,未能全部实现。实际上,最令人期待的功能还在后头。敬请期待即将推出的更新!

三、核心SDK文档

在过去一年里,我们正稳步地逐个模块扩展 SDK 文档。虽然我们刚刚开始记录内置的文件格式模块,但所有核心模块的文档现已全部完成。

我们的核心模块包括:

  • Pro.Core – 用于解析和扫描文件的核心 API
  • Pro.UI – 用于视图、对话框和工作区的用户界面 API
  • Pro.Carbon – 用于反汇编和反编译原生二进制文件的 API
  • Pro.MP – 多进程处理 API
  • Pro.SiliconSpreadsheet – 电子表格宏模拟 API
  • Pro.Package – 用于处理软件包的 API

文档不仅包含详细的说明和代码示例,还涵盖了每个模块中所有类、函数和常量的详细描述。

凭借这些已完成文档的核心模块,开发者现已能够为 Cerbero Suite 和 Cerbero Engine 创建各种类型的扩展,包括自定义文件格式的扫描器和反汇编加载器、扫描钩子、操作插件、逻辑与密钥提供器、图形化工具等。

欲了解更多信息,请访问我们的 SDK 文档网页:c1cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6k6r3E0Q4x3X3g2U0k6i4u0T1k6i4u0G2i4K6u0W2K9h3!0Q4x3V1k6D9j5i4c8W2M7%4c8Q4x3V1j5`.

四、跨平台微软 Authenticode 支持

随着我们近期对证书文件格式支持的扩展,现在可在非 Windows 系统上提供对已签名可移植可执行文件(Portable Executable)的完整检查支持。

在 Linux 或 macOS 等系统上验证 Authenticode 签名,唯一需要的步骤是从 Cerbero Store 安装我们的“微软 Authenticode”(Microsoft Authenticode)软件包。

自 2012 年最初发布以来,Cerbero Suite 一直使用自研的 Microsoft Authenticode 实现,以提升性能。然而,得益于新推出的 Cerbero Store,我们现在能够将此功能扩展到 Windows 以外的其他操作系统。

此外,我们还通过 Python SDK 开放了 Authenticode 验证功能,便于开发者集成和自动化使用。

 fromPro.PEimport *
 print(PE_VerifyAuthenticode(obj))

或者,扫描钩子(scan hooking)扩展可以检查生成的报告中的验证扫描条目

五、闪电式恶意软件分析

您是否在观看冗长的恶意软件分析视频时容易感到无聊和分心?那么,我们或许为您提供了一个解决方案!

为了轻松有趣地展示 Cerbero Suite 的手动分析能力,我们制作了一系列视频,每个视频在 3 分钟甚至更短时间内完成一个恶意软件样本的分析。

在追求“分析大师”境界的道路上,我们曾用仅 19 秒的时间分析了一个经过加密和混淆的 Excel 恶意软件样本。您可以在 YouTube 上观看该视频!

视频地址:e58K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6L8%4g2@1N6g2)9J5k6h3u0W2i4K6u0r3k6f1W2w2x3@1E0m8j5#2k6@1h3s2M7`.

六、UPX 脱壳器

(一)什么是 UPX?

根据 UPX 官方网站的介绍:“UPX 是一个免费、便携、可扩展且高性能的压缩工具,支持多种可执行文件格式。”

它支持 PE、ELF 和 Mach-O 等二进制文件格式。

(二)手动调用脱壳

如果由于某些原因二进制文件未能被自动脱壳,则解包器可手动作为操作调用。

此外,该脱壳器也支持通过 Python 脚本调用:

 from Pkg.UPXUnpacker.Unpack import unpack
 ret, output = unpack(file_name)
 # print the unpacker output
 print(output)

“UPXUnpacker”软件包是开源的,旨在帮助用户编写类似的插件。我们为此类扩展引入的一项重要功能是对内部文件的支持。

七、并行反编译

自 Cerbero Suite 5.2 版本起,我们采用多进程技术,将 Sleigh 反编译器运行在独立进程中,从而实现并行化处理。这一设计在 Sleigh 遇到问题时能确保整体系统的完全稳定,同时使所有反编译操作均可安全地中止。

通过将反编译器并行化,我们还能在反汇编加载过程中提前初始化反编译器。因此,当首次调用反编译功能时,不再有初始化延迟,响应速度极快,体验更加流畅。

如果您尚未尝试,请务必体验一下:我们相信您一定会喜欢!

(一)反编译器支持的平台

反编译器支持与我们的 Carbon 反汇编器相同的平台:x86、x64、ARM32 和 ARM64。

如果您好奇 Carbon 是什么:它是一款超高速反汇编器,专为恶意软件初筛以及处理内存镜像、崩溃转储(crash dumps)等海量数据而设计。

八、Excel恶意软件逐步分析

样本 SHA-256: B17FA8AD0F315C1C6E28BAFC5A97969728402510E2D7DC31A7960BD48DE3FCB6

以下是对一个恶意且经过混淆的 Microsoft Office XLSB 文档的逐步分析过程。我们将对宏代码进行去混淆处理,并利用我们专有的 Silicon Excel 模拟器来分析其行为。

1.第1步

在 Cerbero Suite 中预览该电子表格时,我们可以发现宏代码已被混淆。

一个被混淆的公式如下所示:

 =ATAN(83483899833434.0)=ATAN
 → (9.34889399761e+16)=ATAN
 → (234889343300.0)=FORMULA.ARRAY(’
 → erj74ˆ#MNDKJ3OODL _ WEKJKJERKE ’!
 → AT24&’erj74ˆ#MNDKJ3OODL _
 → WEKJKJERKE ’!AT27&’erj74ˆ#
 → MNDKJ3OODL _ WEKJKJERKE ’!AT29&’
 → erj74ˆ#MNDKJ3OODL
 etc.

该恶意软件使用 ATAN 函数和一个极长的工作表名称来进行混淆。

2.第2步

我们打开一个新的 Python 编辑器,执行“插入 Python 代码片段”操作(Ctrl+R)。

3.第3步

插入用于替换公式的 Silicon/电子表格代码片段。

4.第4步

取消注释两个示例正则表达式,因为它们正是基于此样本编写的。其中一个正则表达式用于移除 ATAN 宏,另一个则用于去除单元格引用中的工作表名称。由于该样本中只有一个工作表,因此无需额外逻辑。

然后执行该脚本(Ctrl+E)

5.第5步

脚本共修改了 12 个公式。此时,我们可以轻松识别出 CALL 和 EXEC 宏,并使用 Silicon Excel 模拟器对其进行模拟执行(Ctrl+E)。

仅通过模拟这些宏,我们就能看到恶意软件创建了一个目录,将文件下载到该目录并执行它。

九、证书支持

ASN1 树:

自 Cerbero Suite 5.5 版本和 Cerbero Engine 2.5 版本起,我们已全面支持各类证书格式。虽然此前 Cerbero Suite 已允许您检查二进制文件内的证书,但现在您可以直接从磁盘加载证书文件,并能够逐个查看每一个 ASN.1 对象。

我们支持证书的 DER 和 PEM 两种编码格式,可检查所有类型的证书,包括 X.509、PKCS7 和 PKCS12。

此外,我们已将相关功能开放给 Python SDK,使以编程方式解析证书变得极为简单。例如,以下代码可枚举一个 ASN.1 DER 文件中的所有对象:

from Pro.Core import *
from Pro.Certificates import *
def enumerateObjects(fname):
c = createContainerFromFile(fname)
if c.isNull():
	return
obj = DERObject()
if not obj.Load(c):
	return
class Visitor(DERObjectVisitor):
	def Visit(self,obj,oi):
		print(obj.
			→GetObjectDescription(oi
			→))
		print(" offset:",hex(oi.
			→offset),"size:", hex(
			→oi.content_size))
		return0
v = Visitor()
obj.VisitObjects(v)

您可以在 SDK 文档中查阅 Pro.Certificates 模块,获取更多代码示例。

(一)非通用格式支持

虽然对证书等常见文件格式的支持对个人许可证用户开放,但对某些非通用文件和数据格式的支持有时仅限于商业许可证用户。

请观看我们在 YouTube 上发布的视频,其中我们演示了如何使用仅限商业许可证用户的软件包,来解码恶意 Microsoft HTML 应用程序(HTA)中的 BinaryFormatter 编码载荷。

十、内部项目文件

在 Cerbero Suite 5.6 版本中,我们引入了一项重要的核心功能:能够生成并存储那些在磁盘上并不存在的文件,并将其保存在分析报告中。

尽管这一功能看似简单,但在实际应用中具有广泛用途。例如,一个脱壳器在扫描过程中解包出一个文件后,可以将该结果文件作为“内部文件”存储起来。当下次请求访问该解包文件时,系统将直接读取已保存的内部文件,而无需再次调用脱壳器,从而提升效率。

以下示例展示了如何为一个被扫描的文件生成一个虚拟的内部文件,并将其作为嵌入对象添加到生成的报告中:

from Pro.Core import *

def scanning(sp, ud):
    # 跳过嵌套扫描:避免递归
    if sp.isNestedScan():
        return

    # 需要全局报告来存储内部文件
    r = sp.getGlobalReport()
    if not r:
        return

    # 生成一个新的内部文件唯一标识符(UID)
    uid = r.newInternalFileUID()
    if not uid:
        return

    # 获取该内部文件在磁盘上的临时路径
    path = r.newInternalFilePath(uid)

    # 生成内部文件的内容
    with open(path, "w") as f:
        f.write("hello " * 5)

    # 保存内部文件
    r.saveInternalFile(uid, "TEST FILE")

    # 将内部文件作为嵌入对象添加到扫描结果中
    sp.addInternalFile(uid, "", "Test")

在 hooks.cfg 配置文件中的对应配置如下:

[IntFileTest_1]
label = Internal file test
file = intfile_hook.py
scanning = scanning
enable = yes

通过此机制,插件可以高效地缓存中间分析结果、解包输出或动态生成的数据,极大增强了扩展功能的灵活性和性能。

由我们的代码生成的内部文件:

解密字符串示例:

在 CTF 挑战中需要暴力破解字符串解密吗?我们的“字符串解密器”(String Decrypter)软件包来帮你!

该字符串解密工具可从十六进制视图(hex view)或 Carbon 反汇编视图中作为“操作”调用,用于暴力破解字符串和字节数组的解密。

该工具支持多种算法和字符串编码,并可结合大小端序(endianness)进行组合尝试。此外,它还提供以下选项对解码后的字符串进行过滤:

  • 不过滤(包含原始字节数组)
  • 仅包含解码后的字符串
  • 仅包含包含 ASCII 字符的字符串
  • 仅包含匹配用户提供的正则表达式的字符串

工具还支持并行执行,这在添加更多解密算法时能显著提升效率。对于每种解密方法,工具都会显示其对应的组合数量。

对于每一个成功解密的条目,“字符串解密器”都会显示所执行的操作(如异或密钥、移位方式等)以及字符串的编码格式。

虽然“字符串解密器”软件包在参加 CTF 时非常有用,但在逆向分析恶意软件时也同样大显身手!

十一、挑战:类似 CTF 的恶意软件

并非所有恶意软件的分析过程都是枯燥乏味的。事实上,有些样本的设计就像一场 CTF(Capture The Flag)挑战!我们从 InQuest 的一条推文中发现了一个有趣的恶意软件样本。

该样本中包含了多种技术和混淆手段,涉及以下多个技术点:

  • 加密的 Microsoft Office 文档
  • VBA 宏代码
  • Windows 快捷方式文件(LNK)
  • OLE 对象
  • Windows 帮助文件(CHM)
  • PNG 图像隐写术(Steganography)
  • PowerShell 脚本执行

如果你想要测试自己的分析技能,使用 Cerbero Suite 分析该样本大约需要 15 到 20 分钟即可完成。

样本 SHA-256:
46AFA83E0B43FDB9062DD3E5FB7805997C432DD96F09DDF81F2162781DAAF834

如果你在分析过程中遇到困难,可以访问我们的博客获取一些有用的截图提示(注意:含剧透!)

十二、API 解密器

我们的“API 解密器”(API Solver)软件包已在 Cerbero Store 上架,适用于所有 Cerbero Suite Advanced 的商业许可证用户。

该软件包的主要功能是将存在于 Shellcode 等位置的 CRC 类哈希值还原为对应的 Windows API 函数名称。软件包内置了数十种在恶意软件中常见的哈希算法,涵盖广泛。

从 Cerbero Store 安装后,“API 解密器”的用户界面将作为一项“操作”可用。若在 Carbon 反汇编视图中执行此操作,还将解锁额外功能:API 解密器可自动检测代码指令中的 API 哈希,并在反汇编结果中直接以注释形式标注解密出的 API 名称,极大提升分析效率。

您可以选择使用哪个模块组来解析 API 名称。在每个模块组中,可选择一个或多个模块来构建 API 解密器的数据库。若哈希方法设置为“全部”,API 解密器将自动尝试识别所使用的哈希算法。

您既可以解密单个哈希值,也可以选择自定义或内置的哈希方法。选择内置方法时,还可查看其伪代码实现,便于理解其原理。

该工具也支持通过 Python 脚本进行编程调用:

from Pkg.APISolver import APISolver

# 创建解密器实例,指定系统类型和模块列表
solver = APISolver("win32", ("kernel32", "urlmon"))

# 解密一组哈希值
for h in (0xEC0E4E8E, 0x702F1A36, 0xE8AFE98, 0x73E2D87E):
    print(solver.solve(h))

输出结果为:

['KERNEL32.LoadLibraryA' (ror13_add_32)]
['URLMON.URLDownloadToFileA' (ror13_add_32)]
['KERNEL32.WinExec' (ror13_add_32)]
['KERNEL32.ExitProcess' (ror13_add_32)]

您也可以指定一个或多个内置的哈希方法进行解密:

solver = APISolver("win32", ("kernel32", "urlmon"), ("ror13_add_32",))

或者使用自定义哈希函数(内置方法与自定义方法可混合使用):

def custom_hash(name):
    h = 0
    for c in name:
        h += c
    return h

solver = APISolver("win32", ("kernel32", "urlmon"), (custom_hash,))

如果自定义哈希函数包含第二个参数,系统还会传入模块名称,便于实现更复杂的逻辑。

您可以在 YouTube 上观看该软件包的完整介绍视频,深入了解其功能与使用场景。

视频地址:335K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6L8%4g2@1N6g2)9J5k6h3u0W2i4K6u0r3M7U0S2c8K9X3N6c8K9Y4q4k6b7h3D9`.

某些已破解的API哈希值包含在PDF文档中的shellcode内:

十三、技巧与提示

由于我们的 SDK 网站上尚未对 Pro.PE 模块进行文档化,最近有客户联系我们,询问是否可以通过编程方式修改 .NET 元数据表中的字段。

在一般情况下,解析 .NET 元数据表并非易事。因为要确定某个特定表的偏移量,必须计算其前面所有表的大小。而计算大小的难点在于,.NET 元数据表中包含一些字段的大小是动态决定的(例如基于字符串堆的大小或索引位宽)。

然而,使用我们的 SDK,这一过程变得极为简单。以下函数演示了如何修改“Assembly”表中的某个字段值:

from Pro.Core import *
from Pro.PE import *

def editDotNETTable(fname):
    # 以写入权限打开文件
    f = NT_OpenFile(fname, NTFileOpt_Write)
    if not f:
        return

    # 将文件封装为容器
    c = NTContainer()
    c.setData(f, True)

    # 将容器加载为 PE 二进制文件
    pe = PEObject()
    if not pe.Load(c):
        return

    # 获取 .NET 元数据表
    tables = pe.MDTables("#~")

    # 获取 Assembly 表的条目数组
    assembly = tables.at(Assembly_t)
    if assembly.IsNull():
        return

    # 修改结构中的字段
    print("原始 MajorVersion:", assembly.Uns("MajorVersion"))
    assembly.Set("MajorVersion", 1)
    print("修改后的 MajorVersion:", assembly.Uns("MajorVersion"))

该示例展示了 SDK 如何抽象底层复杂性,使开发者能够像操作普通数据结构一样直接访问和修改 .NET 元数据。pe.MDTables() 方法自动处理所有偏移和大小计算,开发者只需关注逻辑本身。

如果你熟悉在 Cerbero Suite 中使用命令行脚本,你可能知道,运行脚本时如果不带 ’-c’ 参数,所有输出都会被重定向到主窗口的输出视图中。

然而,在某些情况下,你可能希望避免创建主窗口。为此,我们引入了 ’-g’ 参数。例如:

cerpro.exe -g -r foo.py

如果脚本没有创建输出视图,那么 ’print’ 函数的输出将不可见。

此外,自 Cerbero Suite 5.5 版本起,我们为 Windows 添加了终端支持。在 Windows 上,使用 ’-c’ 参数运行脚本会导致无法看到 stdout 输出。原因是 ’cerpro’ 可执行文件被构建为一个 GUI 应用程序,因此不与终端关联。

为了克服这一限制,我们为 Windows 创建了一个名为 ’cerpro_console.exe’ 的启动程序。例如,以下代码会提示用户输入一个字符串并将其打印出来:

cerpro_console.exe -e "t=input('Enter a string: ');print(t)"

如果你希望了解更多关于 Cerbero Suite 命令行脚本的信息,可以阅读我们专门的 SDK 文档页面:d08K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6k6r3E0Q4x3X3g2U0k6i4u0T1k6i4u0G2i4K6u0W2K9h3!0Q4x3V1k6D9j5i4c8W2M7%4c8Q4x3V1k6o6L8h3c8x3K9h3&6W2i4K6u0W2K9s2c8E0L8l9`.`.



[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回