Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

不安全调用

ANSI-C 中有一些函数(以及我们自己的 API 中的一些函数)以持续出现安全问题而闻名。

我们可以使用静态代码分析工具(例如 flawfinder)至少找出不安全的 ANSI-C 调用。

Wireshark 的代码(尤其是 dissector)使用一个自定义 Perl 脚本(tools/checkAPIs.pl)进行检查,该脚本会检查是否调用了各种 API。不安全的 API 会被“禁止”;如果有人提交了使用这些 API 的代码,buildbot 上就会产生错误。

sprintf -> g_snprintf

sprintf 调用被认为是不安全的,因为该调用没有提供缓冲区长度,这经常会在该函数写到给定缓冲区之后的位置时造成难以发现的错误。

由于目前仍有许多地方在使用 sprintf,因此当前列出文件清单没有意义。

EMEMification 页面中仍然有此类调用的列表,因为其中大多数调用无论如何都应该替换为对 emem 缓冲区使用 g_snprintf()。

strcpy -> strlcpy / strcat -> strlcat

stcpy/strcat 函数很容易写到给定缓冲区之后的位置,参见:http://www.gratisoft.us/todd/papers/strlcpy.html

TLV 例程

引入用于处理 TLV(type, length, value)的 API 例程,可以消除大量手工编写且可能存在问题(如死循环)的 dissector 代码。

这里还有一些事情需要考虑,因为 TLV 可能存在各种差异:字节序、8、16、32 位,甚至一些少见的位长度,……——UlfLamping

外部链接

  • 安全编程相关链接合集

  • 15 Tips for Secure Win32 Programming

Imported from https://wiki.wireshark.org/Development/SecureProgramming on 2020-08-11 23:13:04 UTC

相关 Wireshark Wiki 页面

网络分析技术档案