您见过的最奇怪/最复杂/最令人惊讶/深度隐藏的软件漏洞或漏洞是什么?在代码中你认为没有隐藏的危险,但是错了?
[澄清:每个人都知道SQL注入,XSS或缓冲区溢出 - 通常由粗心编码引起的错误。但是像Ken Thompson隐藏的木马(关于信任信任的思考:http://cm.bell-labs.com/who/ken/trust.html),Linux内核中最近的NULL解除引用漏洞(http://isc.sans.org/diary.html?storyid=6820),或者使用拒绝服务对RNG的复杂攻击({{3} })大大打扰了我。]
更新:感谢大家的回答,他们很棒。我很难做出选择。最终,我决定将赏金奖励给侧通道/电源监控攻击。然而,你所有的答案结合起来表明我必须更多地了解安全性,因为它是一个非常深刻的主题:)。
答案 0 :(得分:27)
到目前为止,我最喜欢和最令人印象深刻的是一类加密技术,称为Side Channel Attacks。
一种侧通道攻击使用电源监控。通过仔细分析从电源获取的电量,已从智能卡设备恢复加密密钥。嵌入其中的处理器使用不同的功率来处理不同的指令集。使用这一小部分信息,可以完全被动地恢复受保护的数据。
答案 1 :(得分:21)
每个人都知道SQL注入,但我最近听到的最令人惊讶的漏洞之一就是将SQL注入到条形码中。测试人员应检查所有输入是否存在恶意SQL。攻击者可能会出现在一个事件中并崩溃他们的注册系统,改变商店的价格等等。我认为一般的条形码黑客对我来说是令人惊讶的。这里没有令人惊叹的因素,只是需要注意的其他因素。
编辑:刚刚讨论了将SQL注入放在磁卡条上的想法。我想你可以把它放在任何地方,所以测试任何和所有输入,特别是来自用户和这些类型的数据存储设备。
答案 2 :(得分:18)
我认为一个相对较新的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
编辑:以下是对此代码如何被利用的更深入的总结。这是一个简短的阅读,但是很好地解释了用于利用的机制。
答案 3 :(得分:18)
一个经典的漏洞利用是Ken Thompson的黑客攻击,让他可以根本访问地球上的每个Unix系统。
当贝尔实验室是Unix的唯一供应商时,他们分发了源代码,因此每个安装都可以构建和定制自己的操作系统。该源包括Unix登录命令。 Ken修改了C编译器以识别它是否正在编译logon命令,如果是,则添加初始密码检查。这个密码是他自己的魔法密码,并授予root访问权限。
当然,任何阅读C编译器源代码的人都会看到并将其删除。因此Ken再次修改了C编译器,这样如果它正在编译C编译器,它就会将登录黑客重新放入。
现在是心灵的一部分; Ken用他的黑客编译器编译了C编译器,然后删除了他的所有黑客攻击,从源代码,备份,源代码控制,一切都删除了它。它只存在于Unix发行版的编译二进制文件中。
任何从贝尔实验室获得此Unix的人都有一个被黑客入侵的登录和C编译器。如果他们查看来源,那就安全了。如果他们重建了操作系统,被黑客入侵的编译器会攻击重建的编译器,这会将黑客重新插入到登录命令中。
我从中得到的教训是,您无法保证任何静态分析的安全性(检查源代码,操作系统,应用程序)。
Ken在一篇名为Reflections on Trusting Trust的ACM文章中透露了这一点。
答案 4 :(得分:12)
多年前,我看了一个受复杂加密系统保护的程序(在Acorn Archimedes上)(只是为了看看它是如何完成并从中学习的)。它非常巧妙地完成,解密代码本身被用作解密密钥的一部分,因此任何搞乱它的尝试都会破坏解密,从而在内存中留下垃圾。
经过2天试图弄清楚它是如何完成的以及如何绕过它,一位朋友参观了。使用操作系统工具(单击并拖动以最大化RMA内存分配),他将进程的可用RAM限制为略大于.exe的大小。然后他跑了。解密后,它立即尝试分配内存,失败并崩溃。然后他从内存中保存了解密的程序。总破解时间:大约2分钟,仅使用鼠标拖动和命令行保存命令。
我从中了解到,不值得投入太多时间和精力来保护您的软件 - 如果有人想破解它们,可能他们会通过一种从未发生过的简单方式来实现。
(免责声明:我们都购买了这个程序的合法副本,并且从未以任何方式使用过破解的代码。这真的只是一个智力编程练习)
答案 5 :(得分:10)
答案 6 :(得分:9)
我读到了昨天窃取浏览器历史记录的一种聪明方法:通过添加查看链接颜色的JavaScript(它们会改变您访问过的网站的颜色)。
这可用于通过简单地尝试所有可能的组合来攻击向URL添加安全令牌(如果该令牌不会太长)的站点。
答案 7 :(得分:8)
是的,是的,我们都知道SQL注入 - 我们都知道如何防范它,对吧? 您的应用程序应该进行输入验证,调用存储过程等。
但是你知道在某些情况下,SQL Smuggling可以轻易绕过这一切吗? 关于它的最令人震惊的是,这是由一些鲜为人知的,大多数未记录的,在某些数据库,框架,数据库对象等方面的“特性”引起的。简而言之 - 数据库(或那里的管道)可能会对你造成影响快乐地 - 默默地 - 将一些不熟悉的角色转化为其他人的恩惠!例如,Unicode字符U + CABC可能会成为引用(U + 0027),您试图在应用程序中阻止它,但不幸的是,数据库决定创建并允许攻击者再次直接通过您的防御安装他的SQLi攻击。 / p>
是的,我发布了链接文章,但是当我最初发现这种行为时, 感到震惊。
答案 8 :(得分:7)
我见过的最复杂的攻击之一是最有效的攻击之一。我认识的测试人员正在Win98下测试VB6应用程序。该应用程序是为了在固定大小的窗口中打开而构建的。聪明的测试人员创建了应用程序的快捷方式,并设置快捷方式以打开最大化的应用程序。当应用程序以比开发人员预期更大的尺寸打开时,它会暴露出通常不可见的数据控件。通过手动点击数据控件,测试人员设法移动到他本不应该查看的记录,并修改它...
答案 9 :(得分:7)
答案 10 :(得分:6)
cold boot attacks可能更像是硬件攻击,但却非常有趣且令人惊讶。
他们表明你可以在重启后阅读普通RAM的内容。通过罐装空气除尘器喷雾(不是液氮或类似物)将芯片冷却至-50°C,他们发现在没有电源的情况下10分钟内不到1%的位被翻转(!)
这是对所有磁盘加密程序的严重攻击。他们必须将解密密钥保存在RAM中,如果您可以重新启动计算机,则可以访问该密钥。你可能会说你不会让人们像这样重启你的机器,但想想待机模式下被盗的笔记本电脑。他们会醒来并提供一个屏幕保护程序,要求输入密码。那时磁盘加密密钥在RAM =>中。重启之后钥匙可能是坏人拥有的......
他们在their homepage上有视频和非常易读的会议论文。
答案 11 :(得分:6)
答案 12 :(得分:5)
人类的“幼稚”never ceases to amaze me.
答案 13 :(得分:4)
弄乱您的网络应用程序的极其简单的方法:如果应用程序允许用户将图片添加到个人资料,留言板或博客帖子,恶意用户可以设置图像URL,如'/ Account / LogOut'(或任何其他有效的本地导致我们不想要的操作的URL)。如果他设法将他的个人资料/帖子/消息“发布到主页面” - 每个用户将在登录后立即注销(浏览器将在当前用户的上下文中执行对/ Account / LogOut的请求以便下载图像),因此页面功能将被严重损坏。
答案 14 :(得分:4)
谁不记得Killer Poke(非技术性解释):旧Commodore 64的视频内存很慢。使用POKE,你可以为视频存储器中的地址写一个特殊值 - 这会导致所有类型的伏都教,尤其是改变一些电路的电压,这些电路具有导致屏幕更新的幸运结果快。
当Commodore更新他们的视频硬件时,相同的poke命令会导致电压变为所有类型的螺丝并炸毁硬件。软件利用实际上可能导致硬件损坏。真棒。
答案 15 :(得分:3)
我认为它是最简单但最具毁灭性的一种。在CSRF到达现场之前,Web开发人员假定或者更确切地说是受信任的浏览器来发送用户生成的请求,但现在不再发送。 confused deputy。
的典型示例答案 16 :(得分:3)
迄今为止我见过的最好的一个是mrand.c对Debian SSL软件包的评论,因为purify抱怨使用了未初始化的数据。这不是代码错误本身,而是更多的重构错误,它是由维护者通过注释一行代码引入的。 valgrind抱怨说,被评论的行是对函数的调用,该函数用于为密钥生成提供熵,但因为它使用了未初始化的数据来执行此操作。
维护者通过电子邮件发送了SSL邮件列表,询问是否可以对此行进行评论,因为它所做的只是添加一些随机数据,有人说它是安全的,并且该行被评论,留下所有SSL密钥由debian ssl库生成不安全。
这种情况持续了好几年,只是在卢西亚诺·贝洛为一个大学项目创造了数百个钥匙并注意到几次关键碰撞时才被错误地发现。
这个漏洞是真正的威胁,它们持续多年,你如何测试PRNG是否真的随机?
(来源:dilbert.com)
确切的行是:
md_rand.c
MD_Update(&m,buf,j); /* purify complains */
你可以在这里阅读有关这个惊人的bug的所有内容: link text
答案 17 :(得分:3)
这是一个单行shell命令,它为OS X执行权限提升:
osascript -e 'tell app "ARDAgent" to do shell script "whoami"'
它并不像它看起来那么容易,因为你需要一个单独的攻击向量来访问用户的shell,但它是一个非常酷的有效载荷。
我不确定这是否有效,但我记得当时在我的Mac上进行(使用简单的复制,粘贴)并且很高兴地报告了“root”。
以下是slashdot文章:
答案 18 :(得分:3)
我最喜欢的是一类相当特殊的攻击,称为Format String Attack。他们利用类似printf的格式化标签来覆盖堆栈中的数据。其中一些使用像%n这样的模糊标记,如果编程人员不小心允许未经过滤的输入到达格式字符串,则可能会在代码中注入,这可能会很难找到。
虽然显然与缓冲区溢出没有什么不同,但它们带来了额外的复杂性:在缓冲区溢出中,您只需覆盖堆栈上的返回地址。使用格式字符串攻击,您必须仔细定制攻击,以便能够重定向执行流而不会导致崩溃,因此设计起来会更加复杂。
另一个有趣的攻击是off-by-one错误。再次,利用它并不容易,但绝对可行。
答案 19 :(得分:2)
几年前,阿姆斯特丹VU的一名博士生提出了RFID标签的病毒: http://www.rfidvirus.org/
答案 20 :(得分:2)
另一个令人惊讶的和最近的漏洞是Clickjacking,它再次显示了我们当前的Web浏览器应该是什么样的模型的不足之处。轻松绕过针对XSS,CSRF等的大多数防御,并允许恶意网站“窃取”对您点击的控制,并将其误导到另一个网站上的特定位置 - 例如银行网站“转账资金”页面上的“确定”按钮,或Flash选项对话框,允许攻击者在您不知情的情况下查看您的网络!
令人震惊,精彩......
答案 21 :(得分:2)
一个人一直在想,不是一个人吗?这几年“不能真实......但哇”是参数污染和sniffing your history without using JavaScript。
我会选择后者,因为它既简单又令人惊讶(我想每个人都会有这样的时刻,他意识到自己可能已经有了这个想法......不应该有这样的想法。)它会使用非常的浏览器带宽优化,确保仅在需要时加载背景图片。
我喜欢它。
如果不打破一些事情,它就不容易减轻。其实我错在这里,你可能会阻止浏览器中的“隐形”iframe。不知道是否有人真的想要那些。
答案 22 :(得分:2)
在“复杂”尺度上Dowd's attack on the ActionScript VM是首屈一指的。有关该论文的有趣摘要,请参阅this write-up。
答案 23 :(得分:2)
一个月前,我参加了一次法国IT安全会议(SSTIC),其中一位男士解释了为什么以及如何不信任当前可信计算架构。怎么样 ?他向我们展示了一个“acpi后门”,在拔掉/重新插入他的笔记本电脑的电缆几次后,给了他uid 0(root privs)。 可以阅读论文和幻灯片(法语,但我认为谷歌搜索“loic duflot + acpi”应该会给出一些英语结果): http://actes.sstic.org/SSTIC09/ACPI_et_routine_de_traitement_de_la_SMI/
答案 24 :(得分:2)
阅读本文,它会让你大吃一惊(这无疑让我大吃一惊!)。
http://news.ycombinator.com/item?id=639976
一名黑客通过利用随机cookie生成方式并非如此随机来打破“黑客新闻”网站。对同一个帖子的评论给出了黑客的完美描述,
谢谢dfranke。这些年来, 每当我想到真正的黑客, 这就是我在后面所描绘的 我的想法 - 材料复杂到足以 我拿出我的统计和班轮 代数书。每一个网络黑客 过去十年一直在尝试 XSS,错误的密码和愚蠢的形式 提交问题。坦率地说,我有 放弃了真实的存在 白帽黑客直到这篇文章。帽子 先生。先生。
对黑客的一些赞扬:
黑客,请注意。这是怎么回事 你解决了一个问题!德弗兰克是 潘多拉,迷宫中的老鼠,夏洛克 福尔摩斯,谢尔曼将军,威廉 兰多夫赫斯特和你父亲都是 包在一起。
像潘多拉一样,他很好奇,他有 检查一下。像迷宫中的老鼠一样,他继续前进 寻找清晰的道路。
像福尔摩斯一样,他运用逻辑 确定下一步。 像保尔曼将军一样,他坚持 行进,沿途建设工具 因为他需要他们。 像威廉·伦道夫·赫斯特一样,他 定义景观。 (“你提供 图片,我将提供战争。“) “所以我决定更积极主动 方法:崩溃吧!“(搞笑)和任何父母一样,他没有辞职 直到他的宝宝走了。
谢谢你,丹尼尔。我当然希望你能 找到了一种方法来引导人才 你的日常工作。
答案 25 :(得分:1)
Hyper-Threading vulnerability:
这个缺陷允许本地信息 披露,包括允许 没有特权的用户窃取RSA 私钥在同一个上使用 机。
答案 26 :(得分:1)
不是真正的软件,但我确信它在某个地方起作用。
最近发现,您可以拦截和解码所有键盘发出的电磁辐射,而不仅仅是无线变化。这可用于创建远程键盘记录器。
答案 27 :(得分:0)
LWN.net通过空指针发布了关于Cheddar Bay漏洞利用的帖子,这本身并不危险,但是通过gcc代码优化,即使你已经配置了SElinux,它也可以执行不需要的代码。
在网页中使用javascript inejction通过mitm攻击来创建一个键盘记录器(onkey(按下/上/下)并发布到一个url是开箱即用的想法。
答案 28 :(得分:0)
我认为recent hack into a Twitter employee's email accounts非常可怕。
基本上利用了过期的电子邮件帐户和其他帐户的“忘记密码”恢复系统。
答案 29 :(得分:0)
第二版The Shellcoder's Handbook: Discovering and Exploiting Security Holes非常有趣:
检查安全漏洞的来源,如何发现它们,黑客如何利用它们以及每天控制系统,最重要的是,如何关闭这些安全漏洞以便它们永远不会再次出现