您见过的最奇怪/最复杂/最令人惊讶/深度隐藏的软件漏洞或攻击是什么?在代码中你认为没有隐藏的危险,但错了?
[澄清:每个人都知道SQL注入,XSS或缓冲区溢出 - 通常由粗心编码引起的错误.但事情像肯·汤普森隐藏的木马(反思信任信托:http://cm.bell-labs.com/who/ken/trust.html),最近在Linux内核(NULL解除引用漏洞HTTP://isc.sans. org/diary.html?storyid = 6820),或使用拒绝服务对RNG进行复杂攻击(http://news.ycombinator.com/item?id=639976)让我非常不安.
更新:感谢大家的回答,他们很棒.我很难做出选择.最终,我决定将赏金奖励给侧通道/电源监控攻击.然而,你所有的答案结合起来表明我必须更多地了解安全性,因为它是一个非常深刻的主题:).
到目前为止,我最喜欢和最令人印象深刻的是一类密码技术,称为边信道攻击.
一种侧通道攻击使用功率监视.通过仔细分析从电源获取的电量,已从智能卡设备恢复加密密钥.嵌入其中的处理器使用不同的功率来处理不同的指令集.使用这一小部分信息,可以完全被动地恢复受保护的数据.
每个人都知道SQL注入,但我最近听到的一个最令人惊讶的漏洞就是将SQL注入到条形码中.测试人员应检查所有输入是否存在恶意SQL.攻击者可能会出现在一个事件中并崩溃他们的注册系统,改变商店的价格等等.我认为一般的条形码黑客对我来说是令人惊讶的.这里没有令人惊叹的因素,只是需要注意的其他因素.
编辑:刚刚讨论了将SQL注入放在磁卡条上的想法.我想你可以把它放在任何地方,所以测试任何和所有输入,特别是来自用户和这些类型的数据存储设备.
我认为一个相对较新的Linux漏洞符合您对利用似乎安全的代码的描述(尽管有点错误构造).
这是Linux内核中的一段代码:
struct sock *sk = tun->sk; // initialize sk with tun->sk … if (!tun) return POLLERR; // if tun is NULL return error
由于GCC优化,if语句和正文被删除(这对于用户态代码是合理的,对于内核代码而言则是如此).通过一些聪明,一个人能够建立一个利用这个.
总结:
http://isc.sans.org/diary.html?storyid=6820
发布的漏洞利用:
http://lists.grok.org.uk/pipermail/full-disclosure/2009-July/069714.html
编辑:以下是对此代码如何被利用的更深入的总结.这是一个简短的阅读,但对用于利用的机制的一个非常好的解释.
http://lwn.net/SubscriberLink/342330/f66e8ace8a572bcb/
一个经典的漏洞就是Ken Thompson的黑客攻击,让他可以根本访问地球上的每个Unix系统.
当贝尔实验室是Unix的唯一供应商时,他们分发了源代码,因此每个安装都可以构建和定制自己的操作系统.该源包括Unix登录命令.Ken修改了C编译器以识别它是否正在编译logon命令,如果是,则添加初始密码检查.这个密码是他自己的魔法密码并授予root访问权限.
当然,任何阅读C编译器源代码的人都会看到并将其删除.所以肯再次修改了C编译器,这样如果它正在编译一个C编译器,它就会把logon hack重新编入.
现在是心灵的一部分; Ken用他的黑客编译器编译了C编译器,然后删除了他的所有黑客攻击,从源代码,备份,源代码控制,一切都删除了它.它只存在于Unix发行版的编译二进制文件中.
任何从贝尔实验室获得这个Unix的人都有一个被黑客入侵的登录和C编译器.如果他们查看来源,那就安全了.如果他们重建了操作系统,被黑客入侵的编译器会攻击重建的编译器,这会将hack重新插入到登录命令中.
我从中得到的教训是,您不能保证任何数量的静态分析(检查源代码,操作系统,应用程序)的安全性.
Ken在一篇题为"信任信任的思考"的ACM文章中透露了这一点.
几年前,我看了一个受到复杂加密系统保护的程序(在Acorn Archimedes上)(只是为了看看它是如何完成并从中学习的).这是非常巧妙地完成的,解密代码本身被用作解密密钥的一部分,因此任何弄乱它的尝试都会破坏解密,从而在内存中留下垃圾.
经过2天试图弄清楚它是如何完成的以及如何绕过它,一位朋友参观了.使用操作系统工具(单击并拖动以最大化RMA内存分配),他将进程的可用RAM限制为略大于.exe的大小.然后他跑了.解密后,它立即尝试分配内存,失败并崩溃.然后他从内存中保存了解密的程序.总破解时间:大约2分钟,仅使用鼠标拖动和命令行保存命令.
我从中了解到,不值得投入太多时间和精力来保护您的软件 - 如果有人想破解它们,可能他们会通过一种从未发生过的简单方式来实现.
(免责声明:我们都购买了该程序的合法副本,并且从未以任何方式使用过破解的代码.这真的只是一项智力编程练习)
好的,这不是软件漏洞或漏洞,但即便如此:
" Van Eck Phreaking是通过检测其电磁辐射来窃听CRT和LCD显示器内容的过程." (来自维基百科)
只是...哇...
我昨天读到了一个聪明的方法来窃取您的浏览器历史记录:通过添加查看链接颜色的JavaScript(它们会改变您访问过的网站的颜色).
这可以用来攻击通过简单地尝试所有可能的组合来添加URL的安全令牌(如果该令牌不太长)的站点.
是的,是的,我们都知道SQL注入 - 我们都知道如何防范它,对吗?
您的应用程序应该进行输入验证,调用存储过程等.
但是你知道在某些情况下,SQL走私很容易绕过这一切吗?
关于它的最令人震惊的是,这是由一些鲜为人知的,大多数未记录的,在某些数据库,框架,数据库对象等方面的"特性"引起的.简而言之 - 数据库(或那里的管道)可能会对你造成影响快乐地 - 默默地 - 将一些不熟悉的角色转化为其他人的恩惠!例如,Unicode字符U + CABC可能会成为引用(U + 0027),您试图在应用程序中阻止它,但不幸的是,DB决定创建并允许攻击者再次直接通过您的防御安装他的SQLi攻击.
是的,我发表了链接文章,但是当我最初发现这种行为时,我感到很震惊.
Blue Pill Hypervisor rootkit.
我见过的最复杂的攻击之一是最有效的攻击之一.我认识的测试人员正在Win98下测试VB6应用程序.该应用程序是为了在固定大小的窗口中打开而构建的.聪明的测试人员创建了应用程序的快捷方式,并设置快捷方式以打开最大化的应用程序.当应用程序以比开发人员预期更大的尺寸打开时,它会暴露出通常不可见的数据控件.通过手动点击数据控件,测试人员设法移动到他本不应该查看的记录,并修改它...
:-)
替代文字http://www.codingthewheel.com/image.axd?picture=transparent_intercept.png
在冷启动攻击也许更多的是硬件的攻击,但仍然非常有趣和令人惊讶的.
他们表明你可以在重启后读取普通RAM的内容.通过使用罐装空气除尘器喷雾(不是液氮或类似物)将芯片冷却至-50°C,他们发现在没有电源的情况下10分钟内不到1%的位被翻转(!)
这是对所有磁盘加密程序的严重攻击.他们必须将解密密钥保存在RAM中,如果您可以重新启动计算机,则可以访问该密钥.你可能会说你不会让人们像这样重启你的机器,但想想待机模式下被盗的笔记本电脑.他们会醒来并提供一个屏幕保护程序,要求输入密码.那时磁盘加密密钥在RAM =>重启后,密钥可能在坏人的拥有...
他们的主页上有视频和非常易读的会议论文.
人类的"天真" 永远不会让我惊讶.