查看原文
其他

那些愚蠢的安全漏洞

飞哥的咖啡 计算机与网络安全 2022-06-01

信息安全公益宣传,信息安全知识启蒙。

加微信群回复公众号:微信群;QQ群:16004488

加微信群或QQ群可免费索取:学习教程

教程列表见微信公众号底部菜单



知名安全技术博主 Tony Hunt 吐槽了一些正规公司、正规网站的安全漏洞:HTTP + cookie 里明文存放用户名密码;输入用户名与生日就能重设密码;密保问题;邮箱绑定个人信息等等。

我的朋友 Lars Klint 发过这条推:「你的密码并不是独一无二的」

(附图中的提示为:密码已经被 XXX 使用。请换一个。)


我顺手把它转发了出去,因为我知道还有比这更疯狂的事情。Twitter 用户没有把它当作一个在 Reddit 上流行的笑话,而是带着恐惧和指责评论它。事实上,这完全是可能的。呵呵,我看到过一些非常愚蠢的安全问题,它不仅让我相信这篇 tweet 的真实性,并且认为这非常有可能发生。你不信?来,朋友,帮我拿着啤酒,我来给你说道说道…

记住我

假设现在你想做一个“记住我”功能,就是在方框里打勾,然后下次回到网站时,已经登录的那种。这是 Black 和 Decker 的做法:

是的,这是 cookie 中 Base64 编码版本的密码,每次请求时的发送其实都不安全,而且由于它没有被标记为“安全的”,整个发送过程都很自由,容易被获取。

觉得这很糟糕?试试我在这一篇文章中提到的 Aussie Farmers Direct 的做法:

看吧,这是安全的,但它仍然是一个 cookie 中的密码,并且由于它不是 HttpOnly,在网站上仍然会有 XSS 攻击的风险。那对此他们是如何回应的?这就引出了下一个话题…

企业的反应

回到 2013 年,我做了一件尽职的事情,让 Aussie Farmers 知道了上述风险。我还建议,他们不应该通过邮件发送密码(这是我最讨厌的事情之一),之后我收到了一封来自自称是“市场部经理”的人的回信:

到目前为止,我司还没有发生过,因为给新用户通过电子邮件发送密码,而引起的安全问题,而且据我所知,我本人网上注册的 90% 网站,也遵循着一样的流程。

这让我想起了国际石油和天然气公司(Oil and Gas International)的这条评论,是它在我的新 HTTPS 课程文章中给出的回复。现在当登录表单没有被安全加载时,Firefox 开始警告用户,而这让他们变得暴躁:

你方对于不安全的密码和/或登录的公告,会自动出现在本司(Oil and Gas International)的登录页面上,但并未得到我方的许可,请立即移除它。我方有自己的安全系统,并且超过 15 年来从未被攻破。你发出的公告引起了订阅者的关注,并对本司的业务造成了不良影响。

他们的网站,呃,在那之后不久就没法用了(SQL 注入风险可能没有帮到他们)。但网站现在又能用了,就是不清楚,是不是他们已经把时钟往前重置了整整 15 年。

(译注:SQL Injection,即 SQL 注入,就是通过把 SQL 命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。)

虽然我们谈论的是无关紧要的安全意见,但英国天然气公司(British Gas)过去也遇到了一些困难:

(内容:@BritishGasHelp 不允许粘贴对于密码管理不是一个有效的举措,完全没有必要,而且很危险!

@passy 如果我们允许用户粘贴,我们将失去安全证书,这会让我们置身在暴力破解的危险中,不管怎样,谢谢你的提醒~ Steve)

当我们身处世界的一角时,很难忽视 Twitter 上像乐购(Tesco)这种大企业偶尔精神错乱的例子 :

(@troyhunt 请不要担心,您的密码正被安全地存储,它只在密码提醒邮件中显示,供您进行粘贴操作)

但是,你会说“嘿,安全密码重置很难!”不尽然,看看这个…

密码重置

一切是这样开始的:

(内容:@BetfairHelpdesk 那些使用用户名和生日登录的人,是不是应该都应该改改他们的密码?)

你原本可能会想:“哦,你的用户名是电子邮件地址,然后 Betfair 给你发了一封电子邮件,而你通过其中包含的特殊链接就能重置密码”,但现在你知道了,这种想法太想当然了。出乎意料的是,Betfair 实际上并没有相信 Paul 的说法,所以我做了个视频来解释一切。

【视频】:https://youtu.be/YjBBmfovL08

这是听上去的样子:如果你知道某人的电子邮件地址和生日,你就可以任意重置他的密码。但是,在双方交流的过程中,一定是哪里出错了,导致 Betfair 板起脸来,“好心地”提醒 Paul,如果他把电子邮件地址和生日告诉其他人,就违反了他们的条款。

(内容:@BetfairHelpdesk 你似乎是在回避问题:只需要用户名和生日就能更改密码,是这样的吗?

@psawers 是的,但是如果你告诉了别人这个信息,就违反了我们的条款)

你知道他们真正需要的是什么吗?安全问题…

安全问题

我在这儿举个例子:

(内容:这是我见过的最糟糕的安全问题)

什么?这个太一般了?那么试试这个:

我刚刚上的一个网站,它有个这样的安全问题:你祖母家的狗叫什么?

CAO!

这些安全问题真是疯了!我是说,这都是怎么想的?总体而言,要么采取不变的数据,比如你母亲的姓,或者可枚举的问题,比如你第一辆车的样子、你最喜欢的电影…在本文中,安全问题应该获得一席之地!现在让我们看看一些更为理智的东西…

登录

你知道登录过程中最难的一步是什么?密码。要是有更简单的方法就好了:

(内容:呃…玩真的吗?这简直蠢到了一种新高度)

你可能会想“它只是一条 tweet,不一定是真的”,但你错了,它就是真的,这是 archive.org 的快照:

(内容:输入手机号和密码快速登录,密码默认是手机号后四位)

在我们精神失常,说出“密码必须消失”这种话之前,还是要冷静一下,毕竟还没有人知道如何做到这一点!此外还有很多有帮助的技术解决方案,但没人真正想要使用它们,而事实是,为了规避技术问题,我们反而设置了更多的密码。但是,我还看到过更糟糕的…

物理安全

我觉得我找不到比这更荒谬的例子了,所以我把它放在这儿:

(内容:“100% 聚酯薄膜”双屏蔽 1.3c 级电缆,具有抗病毒保护功能,可减少病毒噪音,并获得完美的图像传输。)

你知道真正让我恼火的是什么吗?想想你那些不懂技术的朋友和亲戚,他们为了让 DVD 播放机与电视机一起工作,走进商店拿起两根 HDMI 线缆,然后翻到盒子背面,开始比较产品规格。当看到其中一根有抗病毒保护,而另一个根没有,你认为他们会选择哪根? !

现在,还有一件事…

账户枚举

我想把“最好的”东西留到最后讲。说它是最好的,是因为它仍然是一个随处可见、愚蠢的安全问,尽管愚蠢,但至少人们正在积极修复它:

(内容:我们马上要更换登录系统了,但同时,用户仍然可以使用我们的快速结账功能,敬请期待~)

这是距离本文八个月前的事了,那么这个愚蠢的安全问题究竟是什么?想象一下:你前往 Strawberrynet,扔掉了购物车里的一些香薰、爽肤水或其他什么,然后点击结账按钮。呈现在你面前的是:

(内容:请输入电子邮箱地址以结账)

你需要输入电子邮件地址,可以是网站上的任何邮件地址,之后,你就可以看到他人的个人资料了:

等等,这是什么鬼?!这是因为他们将个人数据与系统上的电子邮件地址进行了捆绑。而且由于这是世界上(访问量)最大的五千个网站之一,每天有许多人打开浏览,从而在网站中留下了很多的数据。你可以输入一个女性的名字(网站主要卖化妆品)再加上一个常见的电子邮箱后缀,之后就是惊喜啦!如果你认为这有点可怕,呵呵,这实际上正是网站的一个特色:

请注意,经过我们的调查,绝大多数用户都喜欢我们这个“不带密码”的系统。使用您的电子邮件地址作为密码已经足够安全了。

才怪,这根本不安全!我在八月写了篇列举网站精神错乱的文章,其中提到了他们早期的 tweet,但他们似乎完全无视这个问题。我甚至创建了一个帐户来检测它的工作原理:

好吧,我想我还需要再喝杯啤酒…


漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。是受限制的计算机、组件、应用程序或其他联机资源的无意中留下的不受保护的入口点。

安全漏洞(security hole)是指受限制的计算机、组件、应用程序或其他联机资源的无意中留下的不受保护的入口点。漏洞是硬件软件或使用策略上的缺陷,他们会使计算机遭受病毒和黑客攻击。


漏洞特性


漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。具体举例来说,比如在Intel Pentium芯片中存在的逻辑错误,在Sendmail早期版本中的编程错误,在NFS协议中认证方式上的弱点,在Unix系统管理员设置匿名Ftp服务时配置不当的问题都可能被攻击者使用,威胁到系统的安全。因而这些都可以认为是系统中存在的安全漏洞。


漏洞与具体系统环境之间的关系及其时间相关特性


漏洞会影响到很大范围的软硬件设备,包括作系统本身及其支撑软件,网络客户和服务器软件,网络路由器和安全防火墙等。换而言之,在这些不同的软硬件设备中都可能存在不同的安全漏洞问题。在不同种类的软、硬件设备,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。


漏洞问题是与时间紧密相关的。一个系统从发布的那一天起,随着用户的深入使用,系统中存在的漏洞会被不断暴露出来,这些早先被发现的漏洞也会不断被系统供应商发布的补丁软件修补,或在以后发布的新版系统中得以纠正。而在新版系统纠正了旧版本中具有漏洞的同时,也会引入一些新的漏洞和错误。因而随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现。漏洞问题也会长期存在。


因而脱离具体的时间和具体的系统环境来讨论漏洞问题是毫无意义的。只能针对目标系统的作系统版本、其上运行的软件版本以及服务运行设置等实际环境来具体谈论其中可能存在的漏洞及其可行的解决办法。


同时应该看到,对漏洞问题的研究必须要跟踪当前最新的计算机系统及其安全问题的最新发展动态。这一点如同对计算机病毒发展问题的研究相似。如果在工作中不能保持对新技术的跟踪,就没有谈论系统安全漏洞问题的发言权,即使是以前所作的工作也会逐渐失去价值。


常见安全漏洞


代码注入。包括SQL注入在内的广义攻击,它取决于插入代码并由应用程序执行。


会话固定。这是一种会话攻击,通过该漏洞攻击者可以劫持一个有效的用户会话。会话固定攻击可以在受害者的浏览器上修改一个已经建立好的会话,因此,在用户登录前可以进行恶意攻击。


路径访问,或者“目录访问”。该漏洞旨在访问储存在Web根文件外的文件或者目录。


弱密码,字符少、数字长度短以及缺少特殊符号。这种密码相对容易破解。


硬编码加密密钥,提供一种虚假的安全感。一些人认为在存储之前将硬编码密码分散可以有助于保护信息免受恶意用户攻击。但是许多这种分散是可逆的过程。


系统关系


漏洞问题与不同安全级别计算机系统之间的关系


计算机系统安全的分级标准一般都是依据“橘皮书”中的定义。橘皮书正式名称是“受信任计算机系统评量基准”(Trusted Computer System Evaluation Criteria)。橘皮书中对可信任系统的定义是这样的:一个由完整的硬件及软件所组成的系统,在不违反访问权限的情况下,它能同时服务于不限定个数的用户,并处理从一般机密到最高机密等不同范围的信息。


橘皮书将一个计算机系统可接受的信任程度加以分级,凡符合某些安全条件、基准规则的系统即可归类为某种安全等级。橘皮书将计算机系统的安全性能由高而低划分为A、B、C、D四大等级。其中:


D级——最低保护(Minimal Protection),凡没有通过其他安全等级测试项目的系统即属于该级,如Dos,Windows个人计算机系统。


C级——自主访问控制(Discretionary Protection),该等级的安全特点在于系统的客体(如文件、目录)可由该系统主体(如系统管理员、用户、应用程序)自主定义访问权。例如:管理员可以决定系统中任意文件的权限。当前Unix、Linux、Windows NT等作系统都为此安全等级。


B级——强制访问控制(Mandatory Protection),该等级的安全特点在于由系统强制对客体进行安全保护,在该级安全系统中,每个系统客体(如文件、目录等资源)及主体(如系统管理员、用户、应用程序)都有自己的安全标签(Security Label),系统依据用户的安全等级赋予其对各个对象的访问权限。


A级——可验证访问控制(Verified Protection),而其特点在于该等级的系统拥有正式的分析及数学式方法可完全证明该系统的安全策略及安全规格的完整性与一致性。 


可见,根据定义,系统的安全级别越高,理论上该系统也越安全。可以说,系统安全级别是一种理论上的安全保证机制。是指在正常情况下,在某个系统根据理论得以正确实现时,系统应该可以达到的安全程度。


系统安全漏洞是指可以用来对系统安全造成危害,系统本身具有的,或设置上存在的缺陷。总之,漏洞是系统在具体实现中的错误。比如在建立安全机制中规划考虑上的缺陷,作系统和其他软件编程中的错误,以及在使用该系统提供的安全机制时人为的配置错误等。


安全漏洞的出现,是因为人们在对安全机制理论的具体实现中发生了错误,是意外出现的非正常情况。而在一切由人类实现的系统中都会不同程度的存在实现和设置上的各种潜在错误。因而在所有系统中必定存在某些安全漏洞,无论这些漏洞是否已被发现,也无论该系统的理论安全级别如何。


所以可以认为,在一定程度上,安全漏洞问题是独立于作系统本身的理论安全级别而存在的。并不是说,系统所属的安全级别越高,该系统中存在的安全漏洞就越少。


可以这么理解,当系统中存在的某些漏洞被入侵者利用,使入侵者得以绕过系统中的一部分安全机制并获得对系统一定程度的访问权限后,在安全性较高的系统当中,入侵者如果希望进一步获得特权或对系统造成较大的破坏,必须要克服更大的障碍。


安全漏洞系统攻击之间的关系


系统安全漏洞是在系统具体实现和具体使用中产生的错误,但并不是系统中存在的错误都是安全漏洞。只有能威胁到系统安全的错误才是漏洞。许多错误在通常情况下并不会对系统安全造成危害,只有被人在某些条件下故意使用时才会影响系统安全。


漏洞虽然可能最初就存在于系统当中,但一个漏洞并不是自己出现的,必须要有人发现。在实际使用中,用户会发现系统中存在错误,而入侵者会有意利用其中的某些错误并使其成为威胁系统安全的工具,这时人们会认识到这个错误是一个系统安全漏洞。系统供应商会尽快发布针对这个漏洞的补丁程序,纠正这个错误。这就是系统安全漏洞从被发现到被纠正的一般过程。


系统攻击者往往是安全漏洞的发现者和使用者,要对于一个系统进行攻击,如果不能发现和使用系统中存在的安全漏洞是不可能成功的。对于安全级别较高的系统尤其如此。


系统安全漏洞与系统攻击活动之间有紧密的关系。因而不该脱离系统攻击活动来谈论安全漏洞问题。了解常见的系统攻击方法,对于有针对性的理解系统漏洞问题,以及找到相应的补救方法是十分必要的。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存