如何测试和保护 ASN.1 解析器?

信息安全 漏洞扫描器 协议 xml asn1
2021-08-29 05:22:38

据我所知,.NET 没有用于读取或写入框架中​​构建的数据的ASN.1 解析器。这意味着任何创建或验证 ASN.1 数据的代码都在使用质量参差不齐的第三方库。 Bouncy Castle.NET 的 JavaScience是此类库的一些示例。

我知道一些使用较少广泛使用且测试较少的 ASN1 解析器的生产安装。考虑到过去解析数据的问题,以及OpenSSL 仍然存在 ASN1 解析问题,我认为 ASN1 解析是一个被忽视的问题。

背景

ASN.1 用于 TLS 证书、X.400 电子邮件、X.500 和轻量级目录访问协议 (LDAP) 目录服务、H.323 (VoIP)、Kerberos、BACnet 和简单网络管理协议 (SNMP) 来描述它们交换的协议数据单元 (PDU)。任何在受信任的包装器之外读取或写入 ASN.1 数据的自定义软件都可能使系统面临风险。

有关更多信息,请参阅维基百科。

问题

  • 如何测试和保护 ASN.1 解析器?

  • 哪些解析器比其他解析器更安全?

  • .NET 如何在没有内置库的情况下执行 AD LDAP、Certificate oid 验证和 kerberos?

3个回答

您无法真正测试ASN.1 解析器的校正,因为它是一个复杂的软件,我们不知道如何证明给定的软件是正确的。你能做的就是依赖一个有良好声誉的图书馆。您可能想看看这个问题或者,自己重新实现它;如果您坚持使用 ASN.1 的一个可行子集(例如只有 DER 编码,只有少数字符串类型,...),这并不是很难。

.NET 必须有一些用于进行 ASN.1 解析的内置代码;这并不意味着它一定会让您访问该库。

至少,用 Java 或 .NET 语言编写的 ASN.1 库受益于这些语言对缓冲区溢出的固有抵抗力(如果发生缓冲区溢出,则会抛出异常,从安全角度来看,这稍微好一点,实际覆盖内存中的数据)。

我认为 ASN.1 编码器/解码器可以从格式的正式描述中自动生成,因此应该相对安全地避免(编程)错误。检查 ASN.1 编译器。您还可以在 MITRE CVE 数据库中搜索 ASN.1 并检查此类缺陷的常见程度以及它们的制造者。或者,如果像充气城堡这样的库一般都有这种缺陷的倾向,例如,与 OpenSSL 相比。我认为风险非常低,我只知道这样一个事件。

在解析方面,您的能力是什么。这就是我们通常所说的,如果您希望能够验证 ASN.1,幸运的是,因为 ASN.1 有一个 EBNF 定义,这将是一个冗长的项目,但您可以使用任何 LALR Parser帮助生成代码的框架。

你基本上会重新创建图书馆。

我不确定你所说的安全是什么意思。一个有效的 PDU 将符合 ASN.1。但是,如果您想限制使用此方法可以要求的数据类型或数量,您将面临一个不同的问题。我唯一能真正说的是,更流行的库可能经过了更严格的审查,最终只是您将要部署的整个系统的一部分。