3

我的意思是在操作系统或其应用程序中。我能想到的唯一方法是检查二进制文件以使用 strcpy() 等危险函数,然后尝试利用这些函数。尽管有了像 Visual Studio 的 /GS 开关这样的编译器改进,这种可能性应该已经成为过去。还是我弄错了?

人们还使用哪些其他方法来查找漏洞?只需在调试器中加载您的目标,然后发送意外输入,看看会发生什么?这似乎是一个漫长而乏味的过程。

谁能推荐一些关于这个主题的好书或网站?

提前致谢。

4

2 回答 2

2

“客户端安全”涉及两个主要问题。

今天被利用的最常见的客户端是“ Drive By Downloads ”形式的浏览器。大多数情况下,内存损坏漏洞是罪魁祸首。ActiveX com 对象一直是 Windows 系统上的常用路径,而AxMan是一个很好的 ActiveX fuzzer。

在内存保护系统方面,/GS 是一个金丝雀,它并不是阻止缓冲区溢出的全部。它仅旨在保护试图覆盖返回地址并控制 EIP 的基于堆栈的溢出。NX 区域和金丝雀是个好东西,但 ASLR 在阻止内存损坏漏洞方面可能要好得多,而且并非所有 ASLR 实现都同样安全。即使使用所有这三个系统,您仍然会被黑客入侵。在 Windows 7 上运行的 IE 8 拥有所有这些,它是第一个在 pwn2own 上被黑的,这就是他们是如何做到的。它涉及将堆溢出和悬空指针漏洞链接在一起。

“客户端安全”的问题是CWE-602:当服务器端使用秘密资源(如密码)信任客户端或发送有关敏感信息(如玩家)的报告时,会创建服务器端安全的客户端强制执行在 Flash 游戏中 得分。

查找客户端问题的最佳方法是查看流量。WireShark 是非浏览器客户端/服务器协议的最佳选择。然而, TamperData是迄今为止可用于基于浏览器的平台(如 Flash 和 JavaScript)的最佳工具。每种情况都会有所不同,不像缓冲区溢出很容易看到进程崩溃,客户端信任问题都是关于上下文的,需要熟练的人查看网络流量才能找出问题。

有时愚蠢的程序员会将密码硬编码到他们的应用程序中。反编译应用程序以获取数据是微不足道的。Flash 反编译非常干净,您甚至可以获得完整的变量名和代码注释。另一种选择是使用像 OllyDBG 这样的调试器来尝试在内存中查找数据。IDA-Pro 是 C/C++ 应用程序的最佳反编译器。

于 2010-06-13T23:33:14.490 回答
0

编写安全代码,第 2 版,包括一些关于威胁建模和测试的内容,等等。

于 2010-06-13T23:10:43.923 回答