您无法破解和修补安全系统。
您将永远无法通过扫描或向外部人员付费来尝试侵入自己的代码,从而发现代码和网络中的所有安全漏洞和弱点。
确保安全的唯一方法是从一开始就设计和构建安全性:
- 设计应用程序和网络时进行威胁建模和风险评估
- 了解并使用您的语言和框架的安全功能,并使用安全性库(例如Apache Shiro或KeyCzar)填补所有空白…
- 使用CIS基准之类的准则以及Chef和Puppet和UpGuard之类的工具来强化运行时
- 在投入生产之前,请仔细检查您对代码和配置所做的每项更改
- 培训每个参与人员,使他们知道该做什么和不该做什么
这是艰苦的工作,这是不可避免的。
那么渗透测试的重点是什么? 为什么像Intuit和Microsoft这样的组织让Red Team攻击他们的生产系统? 为什么Facebook和Google甚至美国国防部运行漏洞赏金计划,让外部人员侵入他们的系统并报告错误?
因为一旦做完所有事情后,您就会知道该怎么做–或您认为需要做的所有–保护系统的安全,因此,找出您是否做得很好的唯一方法就是攻击您的系统–在坏家伙之前。
攻击系统可以向您显示您的强项和弱项:您错过了什么,在哪里犯了错误。 它将发现设计,防御性控件以及日志记录和监视中的误解和不足。 观察受到攻击的系统,观察攻击者的行为以及攻击者的工作方式,了解寻找的内容和原因,如何识别攻击以及如何对它们进行响应,将有助于改变您的思维方式以及设计和开发方式。代码并设置和运行系统。
让我们看一下攻击系统的不同方法,以及从中学到的知识:
笔测试
笔测试–雇用道德的黑客扫描和浏览您的应用程序或网络以查找漏洞,并查看其可以采取的措施–通常是在新系统或重大变更推出之前或进行一次尽职调查的一部分一年来履行某种监管义务。
笔测试人员将扫描并测试网络和系统配置中的常见漏洞和常见错误,缺少的补丁程序,不安全的默认设置。 他们会发现身份验证和用户设置逻辑,会话管理以及访问控制方案中的错误。 他们将查看日志和错误消息以查找信息泄漏和错误处理中的错误,并将测试某些业务逻辑中的错误(至少对于诸如在线购物或在线银行之类的易于理解的工作流),以尝试解决批准问题步骤或限制检查。
笔测试应作为现实检查。 如果他们发现问题,那么一个坏人也可能-或者已经存在。
笔测试人员通常没有足够的时间或对您的系统有足够的了解来发现细微的错误,即使他们可以访问文档和源代码也是如此。 但是他们在几天或几周的测试中发现的任何东西都应该认真对待。 这些是对系统弱点以及构建方式弱点的真实,可行的见解。 您为什么自己没发现这些问题? 他们是如何首先到达那里的? 为了防止类似问题再次发生,您需要更改什么?
一些组织将尝试尽可能缩小笔试的范围,以增加获得“及格”和继续前进的机会。 但这打败了笔测试的真正意义。 您已经花了很多麻烦和金钱来聘请聪明的人来检查系统的安全性。 您应该利用他们所知道的知识来发现尽可能多的问题,并从他们那里学到很多。 一个好的笔测试人员将解释他们发现了什么,他们如何发现它,为什么它很严重以及需要做什么来修复它。
但是笔测试昂贵且无法扩展。 找到有效的笔测试仪需要花费时间,需要花费时间来设置和运行测试,需要花费时间来查看,理解和分类结果,然后才能进行解决。 在敏捷或DevOps世界中。 如果每隔几天或一天可能要进行几次更改,那么每年一次或两次的笔测试不会减少更改。
红队
如果您有能力在内部拥有自己的笔测试技能,则可以通过运行“红队”练习来更进一步地应对现实攻击。 像Microsoft,Intuit和Salesforce这样的组织都有常驻的红色团队,他们不断在生产环境中实时攻击他们的系统。
红队是基于军事上的“夺旗”运动。 红队(一小群攻击者)试图闯入系统(不破坏系统),而蓝队(开发人员和运营者)试图抓住他们并制止它们。
蓝队可能知道已计划攻击,并且将目标对准哪些系统,但他们不知道攻击方案的详细信息。 红队的成功取决于他们发现了多少严重问题以及可以利用它们的速度,而蓝队则由MTTD和MTTR进行了衡量:他们检测并识别出攻击的速度以及停止攻击的速度或包含并从中恢复。
就像笔测试人员一样,红队的工作是发现重要漏洞,证明可以被利用,并帮助蓝队了解他们如何发现这些漏洞,为什么重要以及如何正确修复它们。
Red Teaming的意义不仅在于查找错误-尽管您会以这种方式找到好的错误,但是肯定需要修复错误。 Red Teaming的真正价值在于您可以观察您的系统和Ops团队在受到攻击时的行为和响应方式。 要了解攻击的外观,训练您的团队如何识别和响应攻击,并通过定期锻炼来使其变得更好。
随着时间的流逝,随着蓝队获得经验并不断完善,他们学会了应对(和预防)攻击,红队将被迫更加努力,更深入地寻找问题,变得更加微妙和富有创造力。 随着竞争的加剧,两个团队相互推动,您的系统和安全能力将受益。
例如,Intuit在每周的第一天进行红队操练(他们将其称为“ 星期一红队 ”)。 红队确定目标系统并在整个星期内制定攻击计划,并在每个星期五内部发布目标。 用于这些系统的蓝队通常会在周末工作,以自行准备,查找和修复漏洞,从而使红队的工作更加困难。 红色团队星期一演习结束后,各小组聚在一起汇报情况,审查结果并制定行动计划。 然后重新开始。
错误赏金
Bug赏金计划通过吸引外部人员侵入您的系统,进一步向现实世界发起了攻击。
外部研究人员和白帽黑客可能没有您自己的红队所拥有的系统洞察力和熟悉度。 但是,Bug Bounties将使您能够接触到一个庞大的社区,这些社区拥有您自己无法负担的独特技能,创造力以及时间和精力。 这就是为什么即使像Facebook和Google这样的组织,已经聘请了最好的工程师并运行强大的内部安全程序,也已经在其Bug Bounty程序上取得了如此巨大的成功。
像红队一样,给予研究人员的奖励和认可也推动了竞争。 与Red Teaming一样,您需要仔细建立并执行基本行为准则。 哪些系统和功能可以被攻击,哪些不能被攻击。 测试人员被允许走多远,他们需要在哪里停下来,以及他们需要提供什么证据才能赢得奖金。
您可以按照Google发布的准则尝试设置和运行自己的程序,也可以使用BugCrowd(https://bugcrowd.com/)或HackerOne(https://hackerone.com/)这样的平台)管理外部测试人员。
自动攻击
但是您不必等到局外人-甚至您自己的红队-攻击系统以发现安全问题。 为什么不每天,或每次进行更改时都自己攻击系统?
每次检入代码和每次更改系统配置时,都可以使用Gauntlt和BDD-Security之类的工具来运行自动化安全测试,并以持续集成或持续交付方式对在线应用程序进行检查。
Gauntlt( http://gauntlt.org/ )是一个开放源代码测试框架,使您可以轻松地使用类似于英语的高级语言编写安全测试。 因为它在后台使用了Cucumber,所以您可以使用Gherkin熟悉的Given {precondition}(在{execute test steps}时)然后{results / not not}语法来表达测试。
Gauntlt随附了攻击适配器,这些攻击适配器包装了使用安全笔测试工具的详细信息,并提供了示例攻击文件,以使用sslyze检查SSL配置,使用sqlmap测试SQL注入漏洞或使用nmap检查网络配置,使用curl运行简单的Web应用程序攻击,使用arachni,dirb和garmr扫描常见漏洞,并检查严重漏洞,例如Heartbleed。
BDD-Security( https://github.com/continuumsecurity/bdd-security )是另一个基于Cucumber的开源安全测试框架。 它包括SSL检查(再次使用sslyze),使用Nessus扫描运行时漏洞,并且与Selenium很好地集成在一起,因此您可以添加用于身份验证和访问控制的自动化测试,并使用OWASP ZAP作为一部分运行Web应用程序扫描您的自动化功能测试。
所有这些测试都可以插入到CI / CD管道中,以使它们在每次进行更改时都自动运行,作为安全冒烟测试。
您可以采取类似的方法来攻击您的网络。
诸如
- AttackIQ( https://www.attackiq.com/ ),
- SafeBreach( https://www.safebreach.com/ ),
- Verodin( https://verodin.com/ )和
- vThreat( https://www.vthreat.com/ )
提供自动攻击平台,可以模拟对手如何探测和渗透您的系统,并报告他们发现的任何弱点。
您可以根据需要自动针对网络的全部或部分自动安排和运行预定义的攻击和验证方案(或执行自己的自定义攻击)。 这些平台可轻松扩展,并为攻击者提供有关系统及其弱点的视图。 您可以查看尝试过的攻击,有效的方法以及原因。 您可以使用这些工具进行常规扫描和测试,以查看更改是否使您的系统易受攻击,评估安全防御工具的有效性,或者像Red Teaming一样行使事件响应功能。
运行自动化测试或攻击模拟与雇用笔测试器或运行Bug赏金计划或拥有真正的Red Team并不相同。 这些测试必须结构化并限制范围,以便可以经常运行并提供一致的结果。
但是,这些工具可以比其他人更快地发现常见和严重的错误。 当您进行更改时,它们将使您充满信心。 它们可以连续运行,以便您可以维持安全的基准。
为什么你需要攻击自己
攻击您的系统有很多好处。 您会发现真正的重要错误和错误-您必须修复的已知错误。
您可以使用结果来衡量安全计划的有效性,查看需要改进的地方以及是否有所改善。
您将学习。 您将学习如何像攻击者一样思考,以及从攻击者的角度看系统如何。 您将了解要注意的内容,如何识别攻击,如何应对攻击以及如何进行遏制。 您将了解执行此操作需要多长时间,以及如何更快,更轻松地执行此操作。
您将获得一个更安全的系统–和一个更强大的团队。
翻译自: https://www.javacodegeeks.com/2016/07/why-you-should-attack-your-systems-before-they-do.html