想不想成为一个web安全研究人员

您是否有兴趣将黑客技术推广到当前最新技术水平并与信息安全社区分享您的发现?在这篇文章中,我将分享一些关于web安全研究的指导,这些指导是我自己在追求这条道路时遇到的机遇和陷阱所塑造的。

以破坏为生
大多数研究都是使得现有的技术更进一步,所以第一步是要熟悉当前的技术发展水平。实现这一目标的最快方法是找到一份工作,将大部分时间花在使用web黑客技术上。许多优秀人士已经就进入安全行业提出了详细的建议,因此我将简要介绍这一部分。

我建议从以实践为中心的方法的OWASP Broken Web应用程序开始,转向更现实的挑战,比如我自己的hackxor.net,在HackerOneBugCrowd上搞定简单,低回报的目标,然后最终进入成熟的高额漏洞赏金计划。一旦你有一些公开披露的漏洞,加入一个安全咨询公司应该很容易,然后就可以每天进行黑客活动了。

有很多免费的在线资源可以帮助您,包括我们的Burp方法,HackerOne的Hacker101OWASP测试指南。至于书籍,我建议阅读WebApp Hacker's HandbookThe Tangled Web

超越已有的技术(寻找被遗忘的知识,手机多样性,没想法就是太愚蠢)
一旦你开始全职工作,你刚开始的学习负荷大,但一段时间后,你的技术技能将稳定下来并进入停滞期,除非你齐心协力继续学习。

寻找被遗忘的知识
每个人都知道你通过监控行业专家安全新闻和安全会议是为了跟上新的发展,然而,完全遵循新的发展,就会遗忘掉过去的知识和以前的研究paper等等宝库。(However, to exclusively follow new developments is to overlook a treasure trove of forgotten and overlooked research. )

每次阅读高质量的博客文章时,请阅读整个档案,因为这往往会暴露出宝贵的、被遗忘的信息。例如,请阅读RSnake 2009年编写的关于DNS重新绑定的文章。DNS重新绑定可以完全绕过网站上基于IP /防火墙的访问控制,唯一有效的缓解方法是将HTTP头部中的host加入应用程序的白名单。然而,当时,人们很快就认为浏览器可以缓解这种情况;9年后,这种被遗忘的漏洞才通过一连串的漏洞利用重新进入人们的意识。

仔细阅读档案也可以帮助你避免浪费时间来重复别人已经做过的工作,比如在十年后重新发明一个CSS攻击。也就是说,一些研究确实很难找到,所以偶尔的重复是不可避免的。我和一位研究人员进行了一次公开的技术碰撞,结果发现 kuza55 五年前也做过同样的事情。所以,尽你所能避免重复研究,但如果它发生了无论如何不要惊慌-它发生在我们所有人身上。

收集多样性

要连接线程并发现其他人错过的机会,从一系列不同的来源收集信息是至关重要的。首先,不要限制自己阅读安全内容——您很快就会发现文档也可以作为一个漏洞利用的构建手册。同样,这可能很明显,但是除了尝试通过谷歌搜索和向twitter/reddit/stackoverflow提出措辞恰当的问题来解决问题之外,还要确保你问同事们——社区里有大量的知识在流动,人们没有选择公开分享。

除此之外,试着确保你自己的经历也是多样化的。

为一家安全咨询公司做黑盒测试应该会让你接触到广泛的外部和内部Web应用程序,这类应用程序在Bug赏金计划中很少遇到。但是时间限制会让你失去了解应用程序的机会,让你熟悉几个月来对单个目标进行的bug赏金搜索。虽然经常是缓慢和受限的,但是白盒源代码审查可以提供一个不可替代的替代视角,揭示黑盒测试人员永远不会想到的攻击。为了培养研究,你理想地想要三者的健康结合。进一步的体验,如参加CTF和编写Web应用程序代码,也可以增加有用的视角。


没有想法就是太愚蠢
想到一个伟大的idea,但却假设它不起作用而且没有尝试之,就注定是要失败的。因为你认为“其他人可能已经注意到了”或者“那太蠢了,不起作用”。我之前肯定对这个问题感到沮丧 - 由于这样的错误,研究结果晚到了两年。是否通过尝试重复使用相同的密码登录来绕过身份验证,通过从笔记本电脑切换到手机来进入Google管理页面,通往下一个伟大漏洞的路径可能需要一个看似非常愚蠢的想法。


迭代,发明,分享

迭代
最简单的入门方法是找到其他人的一些有前景的研究,通过混合其他技术来构建它,然后将你的新方法应用于一些实时目标,看看是否有任何有趣的事情发生

例如,关于CORS错误配置的这篇文章指出了一个有趣的行为,并表明这种行为很普遍,但没有探索对个人网站的影响。

我采用这个概念并将其应用于bug赏金网站,在那里我可以合法地探索影响并尝试避开他们可能有的任何缓解措施。在此过程中,我使用常见的开放式重定向漏洞技术(common open redirect exploit techniques,)进行了一些增强,通过阅读CORS规范发现了“null”origin 技术,并探索了缓存投毒的可能性。

在这个过程中,不需要任何突然的直觉或突出的技术知识,但最终的演示文稿和博客文章很容易被接受为更加闪亮的努力。


发明
基于其他人的工作做研究很棒,但最好的研究总是是出乎意料的出现,无论是相对路径覆盖还是Web缓存欺骗。 我的观点是,这些发现是由充当提示作用的个人经验引起的。 我将它们称为线索或面包屑,因为它们通常是神秘的,可能需要相当多的线索或面包屑来指导您找到有用的发现。

例如,在2011年,我试图绕过addons.mozilla.org上的CSRF防护(跨站请求伪造)。我绕过了token检查,但他们也验证了referer header中的host与当前站点是否匹配。我在sla.ckers论坛上寻求帮助,“barbarianbob”发现django通过查看HTTP host头部来确定当前站点的host,这可以用X-Forwarded-Host header覆盖。这可能与Flash header注入漏洞相结合,来绕过CSRF检查,但更重要的是,这是第一个面包屑——它暗示应用程序可能依赖host header来了解其当前位置。

过了一会儿,我看了一下Piwik的密码重置功能的源代码,发现了一行看起来像:
$passwordResetLink = getCurrentUrlWithoutQueryString() + $secretToken

啊哈,我想。piwik使用了具有hilarious 路径处理功能的php,因此我可以使用http://piwik.com/reset.php/foo;http://evil.com 请求密码重置,从而生成一封包含两个链接的电子邮件,并将私密token发送到evil.com。这个主意奏效了,给了我一笔赏金,为后来的发现打下了基础。

第三个也是最后一个碎屑是Piwik尝试修补此漏洞的方式 - 他们用getCurrentUrlWithoutFileName()替换了getCurrentUrlWithoutQueryString()。这意味着我再也无法使用该路径进行攻击。由于之前遇到了Django,我决定深入研究代码,找出Piwik是如何确定当前主机名的,并且发现像Django一样,他们使用HTTP host header,这意味着我可以轻松生成中毒的密码重置电子邮件。事实证明,这种技术也适用于addons.mozilla.org、gallery、symfony、drupal以及其他许多站点,最终导致了实用的HTTP host header攻击

通过以如此冗长的方式阐述发现过程,我希望揭开研究的神秘面纱,使其看起来不像是一个自发地突然出现的想法。 从这个角度来看,看起来核心技能(超出先前存在的知识和丰富的经验)在于识别这些面包屑并持续追逐它们。 我还不能明确表达如何做到这一点,但我知道要把任何能让你说“这毫无意义”的话当作线索对待。

分享
最后,与社区分享你的研究成果是至关重要的。这将有助于提高你的知名度,也许可以说服你的雇主为你分配更多的研究时间。除此之外,它还可以帮助你避免浪费时间和刺激进一步的研究——评论员非常擅长指出你不知道存在的先前工作,而且没有什么比看到其他研究人员根据你的想法进行研究更有益的了。

请不要仅仅因为没有突破性的发现、两个徽标和一个演示文稿就认为某项技术或想法不值得分享——只需发布你拥有的内容(最好是在博客上发布,而不仅仅是一些索引不好的锁定平台,如Twitter)。

在共享研究时,至少展示一个应用于开发实际应用程序的技术示例总是很有帮助的。如果没有这一点,人们将不可避免地难以理解它,并可能怀疑它是否具有任何实际价值。

最后,演讲对于更广泛的受众来说是很好的,但是要注意不要陷入信息安全马戏团的圈子中,花上几天的时间重复过去的演讲。

总结
我自己还有很多关于研究的知识要学,所以我希望在几年后重新探讨这个话题,并提供更多的线索。此外,我希望其他研究人员有不同的观点,并期待从他们决定分享的任何见解中学习。

最后,如果你想找一些阅读来开始,我已经创建了一个各种博客的列表,这些博客多年来一直激励着我。祝你好运,玩得开心!












评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用