客户端安全漏洞如何被发现?

时间:2010-06-13 23:05:22

标签: security debugging exploit discovery

我的意思是在操作系统或其应用程序中。我能想到的唯一方法是检查二进制文件是否使用strcpy()等危险函数,然后尝试利用它们。虽然像Visual Studio的/ GS交换机这样的编译器改进,但这种可能性应该已成为过去。或者我错了?

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

有人可以推荐一些关于这个主题的好书或网站吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

今天最常见的客户端是“Drive By Downloads”形式的浏览器。大多数情况下,内存损坏漏洞都应该归咎于此。 ActiveX com对象是Windows系统上的常用路径,AxMan是一个很好的ActiveX模糊器。

就内存保护系统而言,/ GS是一个金丝雀,并不是所有停止缓冲区溢出的全部。它仅旨在保护试图覆盖返回地址和控制EIP的基于堆栈的溢出。 NX区域和金丝雀是一件好事,但ASLR可以更好地阻止内存损坏漏洞,而且并非所有ASLR实现都同样安全。即使使用这三种系统,你仍然会受到攻击。 IE 8在Windows 7上运行具有所有这一切,它是第一个被pwn2own攻击的人之一,这里是how they did it。它涉及将Heap Overflow和Dangling Pointer漏洞链接在一起。

当服务器端信任具有秘密资源(如密码)的客户端或发送有关敏感信息(如CWE-602: Client-Side Enforcement of Server-Side Security的报告)时,会创建“客户端安全性”问题Players Score一个Flash游戏。

查找客户端问题的最佳方法是查看流量。 WireShark是非浏览器客户端/服务器协议的最佳选择。但是,TamperData是目前用于基于浏览器的平台(如Flash和JavaScript)的最佳工具。每个案例都会有所不同,不像缓冲区溢出很容易看到流程崩溃,客户端信任问题都是关于上下文的,需要熟练的人来查看网络流量来找出问题。

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

答案 1 :(得分:0)

Writing Secure Code, 2nd edition,包含一些关于威胁建模和测试的内容,以及更多内容。