如果你是一名负责搭建嵌入式系统(或软件、设备、网络等)的工程师或开发者,那么你排在最高优先级之一的事情是(或应该是)鉴别并最大限度的减少潜在的数据安全漏洞。要想有效的实现这个目标,你需要了解系统是如何被黑客入侵的,最终要理解如何“像黑客一样思考”。
黑客攻击利用的是漏洞,这些其中可能是设计缺陷、访问控制薄弱、配置错误或者许多其他的问题等。这篇文章会深入探讨黑客的思维,正如你所看到的,他们在发现和利用漏洞方面的过程和思维方式与工程师如何处理系统开发还是有很大不同的。
黑客的思维到底是怎样的?下面的内容可能有趣、混乱或枯燥,所以准备一大杯咖啡让我们深入探究一下。
黑客的心态和思维:执行任务
黑客与工程师之间最显著的区别在于他们如何应对挑战,工程师(和科学家,就此而言)是系统性的,首先会定义和分析问题,然后制定计划(或假设),并对假设进行测试,最后对测试结果进行分析,不论成功和失败都会得出结论。
这是科学的方法,数百年来人们都是采用这样的流程,黑客则不会遵循这个流程。首先没有什么计划,而是当做是一个任务。黑客的计划是不确定的,灵活的,记住一点黑客并不是在构建必须经过时间考验的工程,相反他们要做的就是破解。他们不需要让管理者或CEO满意,他们关注的是完成所定义的任务。
工程师做事是系统化的,黑客则是务实的,他们的方法非常的实际。虽然会有一些相似之处,但核心的不同之处在于黑客们会竭尽全力完成他们的任务,此外他们不会关注那些对自己没有帮助的结果,而且无需向其他人作出解释。
这有时也被描述为列表 vs 路径思考:
• 科学家和工程师对列举的每一项都会报告结果
• 黑客遵循路径,他们会按一个思路一直继续下去,知道这条路走不通
总而言之,工程师的目标是彻底,黑客的目标是有效。这些看似微小的细微差别一旦付诸实施则会显现巨大的差别和影响。
常见的模式:杀伤链
当黑客侵入到某个环境或者系统时,他们通常会遵循一个共同的模式,称为杀伤链(kill chain),当黑客对系统和网络进行攻击时,他们会寻找该环境中更高级别的访问和操作权限(图1)。最后当他们获得足够的访问权限时,他们就可以窃取想要的数据或者植入恶意代码。
图1:如果你能在杀伤链的早期抓住黑客,那么你才可以防止黑客攻击的发生
黑客经常会在一个入侵环境中停留很长时间:平均100-140天,比如2013年零售连锁企业遭遇了黑客攻击,黑客使用了大概100多天的时间进行了全面的攻击,如果你能在杀伤链的早期发现黑客就可以阻止黑客攻击的发生。
需要注意的是大多数的黑客攻击都是使用机器人自动完成的,虽然我们可以在描述实际执行这些操作是人为的,但是背后实际上是机器人完成了所有操作。
黑客的思维
黑客看待事物的角度是不同的,特别是以下几点:
• 观察明显的细节
• 想象最坏的情况
• 探索每一个潜在的访问入口
• 喜欢一切数据
• 理解人是薄弱的环节
• 喜欢晦涩难懂的信息
• 寻找并利用后门
• 利用第三方漏洞
• 寻求凭据
• 清理垃圾
观察明显的细节
当你深入开发时很容易忽略某个明显的弱点,不妨后退一步问问自己一些基本的问题,使用如下“五个为什么”评估一下:
• 为什么你的产品要这样做?
• 为什么有这个必要?
• 为什么要采用这种设计方式?
• 为什么这样是好的?
• 为什么不换一种不同的方式?
• 这个练习的目的是找出明显的薄弱环节,黑客会发现它们,而且会比你想象的要快得多。
想象最坏的情况
最坏的情况是什么?它发生的可能性有多大?黑客一般没有道德标准。当你的网络或应用正深陷泥潭并努力恢复时,他们并不会感到同情,因此你需要制定计划来处理那些更糟糕的情况。
然而还是要小心不要卷入所谓的“僵尸场景”中,也就是由于一系列的荒唐事件而引发的灾难,大多数僵尸电影都是基于这个前提的。
探索每一个潜在的访问入口
你必须知道任何人或任何事物访问你系统的每一种可能的方式,黑客会进行所有的尝试,并且很多次。你可能认为你的蓝牙接口是超级安全的,但是有几十种方法可以专门利用蓝牙让你的系统变得不安全,确保你对每个接口都进行了积极的测试,无论你的系统设计有多么的复杂。
喜欢一切数据
黑客们更喜欢数据或某些类型的数据,数据存储也是黑客在环境中获得持久性访问的一种方式,你必须分析你的系统数据:
• 数据是怎样存储的?
• 数据是如何传输的?
• 谁可以访问这些数据?
• 如何监控、管理和控制对数据的访问?
• 访问日志是怎样的?这些数据都到哪里去了?
理解人是薄弱的环节
黑客们明白人是数据安全方面的薄弱环节,我们不仅不稳定、不可靠,而且极易受到操纵,如果你的系统涉及任何这些有弱点的人(他确实有这些弱点),那么这就是你系统的弱点。
所有的信息安全问题通常归结为人类的弱点。无论我们是否进行了错误的配置或编写了错误的代码,人都制造系统的一些弱点。假设用户会犯错误,并且会有很多错误,因此我们要格外注意人的一些操作。
喜欢晦涩难懂的技术信息
黑客们都喜欢晦涩难懂的技术信息,他们会随机挖掘出你几年前存放的文档,从而使用这些文档的数据对你的系统发起攻击,这也是破解新系统的乐趣之一。
当你向公众发布某些技术数据类型时要谨慎,假设黑客们会得到并进行分析,如果你的产品是在一个开放的环境中开发的,那么你就更应该以更加安全的方式设计某些组件和功能特性。
寻找并利用后门
20世纪80年代的一部电影《战争游戏》让很多黑客体验到了黑客攻击的滋味。电影中间有一个很棒的场景,一个计算机科学家责备他的书呆子同事把计算机系统的后门当做秘密:“Potatohead先生,这些后门不是秘密!”
他的话在现在看来一样的真实,应用程序或设备的后门非常的常见,黑客们会寻找它们,它是侵入系统最古老和最可靠的技术之一,在《战争游戏》中就有展示,当然在今天也仍然适用。
利用第三方漏洞
尽管你可能会深切关注系统的安全性问题,但是你的供应商或合作伙伴是否也和你一样的关注?黑客们通常会将第三方组件作为目标,因为通过获取某一项技术就可以攻击大量的相关目标。Heartbleed就是不安全的第三方组件造成系统风险的一个例子,Heartbleed是OpenSSL设计实现的一个缺陷,OpenSSL被应用到数百万中产品中,这意味着一个漏洞足以使数百万(可能是数十亿)台设备遭受到攻击。
如果你的系统中集成有第三方组件,则会继承该组件的所有弱点,虽然产品可能属于其他人,但是你需要对其安全问题负责。
寻找凭据
合法的用户账户是黑客们最终想要获取的,一旦他们获取了凭据,黑客就会升级他们的权限从而进入你的系统,此外使用合法凭据通常不会引发警报。
虽然你可能无法始终保护用户的凭据(因为它在用户的手中),但是你仍然可以防止恶意使用这些凭据,这就要从实施最小权限开始,也就是说用户永远不能拥有比他们需要更多的访问权限,此外你应该积极的测试系统对于权限升级类型的攻击。
清理你的垃圾
你的系统是整体的一部分吗?一部分受到攻击会让其他部分也遭受到攻击?给你的系统传递虚假数据会怎样?这就是Stuxnet恶意软件的工作方式。它会向工业控制系统提供虚假信息并让系统过载,如果黑客们想窃取你的数据或进行破坏操作,那么可能就会像过多的网络流量一样使你的系统过载。
拒绝服务类型的攻击很难阻止,当设计你的系统时,你需要考虑它是否有可能会过载,并建立相应的机制来阻止或忽略大量的输入数据,此外时钟都需要验证发送给你系统的数据是否是可信任的,这一点非常的重要。
总结
作为一名设计工程师,确定并最大限度的减少潜在的数据安全漏洞是主要目标,黑客的工作方式与工程师工作方式大不相同,他们并不是采用系统化的方法,他们有属于自己的杀伤链方法,按照这种方式他们会持续不断的寻找到漏洞来利用,“像黑客一样进行思考”要求你以不同的方式来看待你设计的系统,其中一部分意味着理解漏洞和解决方案的技术细节,然而更重要的部分是需要观察一些明显的缺陷,理解人所犯的一些错误和疏忽,了解黑客会寻找什么以及他们是如何利用这些线索的。
评论
查看更多