karl 发表于 2018-12-12 23:01:44

你想成为一名网络安全研究员?


您是否有兴趣将黑客技术推广到目前的技术水平之外,并与infosec社区共享您的发现?在这篇文章中,我将分享一些关于web安全研究的指导,这些指导是由我在追求这条道路时所经历的机会和陷阱形成的。

以打碎东西为生

大多数研究都是对现有技术的进一步研究,所以第一步是要充分了解当前的技术水平。要做到这一点,最快的方法就是找一份你大部分时间都在应用网络黑客技术的工作。许多优秀的人分享了进入安全行业的详细建议,所以我将简要介绍这一部分。

我推荐一种以实践为中心的方法,从OWASP破损的Web应用程序开始,转向更现实的挑战,比如我自己的hackxor.net,在HackerOne和BugCrowd上推进软的、低回报的目标,最后进入成熟的高回报奖励程序。一旦你有了一些公开披露的漏洞,你就很容易加入一家安全咨询公司,每天都花时间去黑客攻击。

有很多免费的在线资源可以帮助您,包括我们的Burp方法、HackerOne的Hacker101和OWASP测试指南。至于书,我建议你读读《网络应用黑客手册》和《错综复杂的网络》。

超越已知的技术

一旦你开始全职工作,你会学到很多东西,但一段时间后,你的技术专长会停滞不前,除非你同心协力不断学习。

亨特被遗忘的知识

每个人都知道,通过监控行业专家、新闻聚合和安全会议,您应该跟上最新的发展。然而,只关注新进展,就等于忽视了一个被遗忘和忽视的研究宝库。

每次你阅读一篇高质量的博客文章时,阅读整个文档。这往往会揭示出一些无价的、被遗忘的小道消息。例如,以RSnake在2009年写的关于DNS重绑定的这篇文章为例。DNS重绑定完全绕过了基于网站访问控制的IP/防火墙,唯一有效的缓解方法是让您的应用程序白名单的HTTP主机头。但在当时,人们很快就认为浏览器缓解了这一问题;这个被遗忘的漏洞只是在9年后通过一系列的攻击才重新引起人们的注意。

仔细阅读文档还可以帮助您避免浪费时间重复别人已经完成的工作,例如十年后重新发明CSS攻击。尽管如此,一些研究确实很难找到,所以偶尔的重复是不可避免的。我曾与一位研究人员发表过一篇技术冲突的文章,但我们两人都发现,5年前,库扎55也做过同样的事情。所以,尽你最大的努力避免重复研究,但如果它发生了,不要惊慌——它发生在我们所有人身上。
收集的多样性

要连接线程并发现其他人错过的机会,从不同来源收集信息至关重要。首先,不要局限于阅读安全内容——您很快就会发现文档也可以作为开发构建手册。同样,这可能是显而易见的,但是除了尝试通过google搜索和向Twitter/Reddit/StackOverflow提出措辞恰当的问题来解决问题之外,还要确保你问过同事——社区中有大量的知识是人们没有选择公开分享的。

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

为安全顾问公司做黑盒测试应该会让您接触到广泛的外部和内部web应用程序,这类应用程序在bug赏金程序中很少遇到。但是时间的限制将剥夺您理解一个应用程序的机会,而这种熟悉来自于几个月来对单个目标的bug赏金搜索。尽管白盒源代码审查通常是缓慢和受限的,但它可以提供一个不可替代的替代视角,从而引发黑盒测试人员永远不会想到的攻击。为了促进研究,理想情况下你需要三者的健康结合。进一步的经验,如玩CTFs和编写web应用程序,也可以添加有用的透视图。

没有什么想法是愚蠢的

最容易掉入的陷阱之一是,假设一个好主意行不通,却不去尝试它,结果却失败了,因为“别人早就注意到了”或“那太蠢了,行不通”。我以前肯定就爱上过这个——由于这个错误,一项研究比应该完成的晚了两年。无论是通过尝试重复使用相同的密码登录来绕过身份验证,还是通过从笔记本电脑切换到手机进入谷歌管理页面,下一个伟大的攻击路径都可能需要一个非常愚蠢的想法。

迭代、创造、分享

迭代

最简单的入门方法是找一些别人做的有前途的研究,在此基础上结合其他技术,然后将您的新方法应用到一些活动目标上,看看是否发生了有趣的事情

例如,这篇关于CORSmisconfigurations的文章指出了一种有趣的行为,并指出这种行为很普遍,但没有探讨这种行为对单个网站的影响。

我把这个概念应用到bug赏金网站上,在那里我可以合法地探索它的影响,并尝试着逃避它们可能带来的任何缓解。在此过程中,我使用常见的开放重定向利用技术进行了一些增强,通过阅读CORS规范发现了“空”源技术,并探索了缓存中毒的可能性。

在这个过程中,没有什么需要突然的直觉飞跃或杰出的技术知识,但由此产生的演示和博客文章很容易被接受,就像更华丽的努力一样。

发明

重复别人的工作是很好的,但是最好的研究似乎总是不知从哪里冒出来的,无论是相对路径覆盖还是Web缓存欺骗。我的观点是,这些发现是由作为提示的个人经历引起的。我将它们称为线索或面包屑,因为它们通常是神秘的,可能需要一些线索才能引导您找到有用的发现。

例如,在2011年,我试图破解addons.mozilla.org使用的CSRF保护。我绕过了令牌检查,但是它们还验证了Referer头中的主机是否与当前站点匹配。我在sla上寻求帮助。ckers forum和“barbarianbob”发现Django通过查看HTTP主机标头来确定当前站点的主机,这可以用x转发主机标头覆盖。这可能与Flash报头注入漏洞相结合,从而绕过CSRF检查,但更重要的是,这是第一个面包屑——它暗示应用程序可能依赖于主机报头来知道它们的当前位置。

过了一段时间,我查看了Piwik密码重置函数的源代码,发现一行代码如下:

$passwordResetLink= getCurrentUrlWithoutQueryString() + $secretToken

啊哈,我想。Piwik使用PHP,它的路径处理非常有趣,所以我可以在http://piwik.com/reset.php/foo请求重置密码;http://evil.com生成一个带有两个链接的电子邮件,并将秘密令牌发送到evil.com。这个想法奏效了,给了我一笔赏金,为后来的发现奠定了基础。

第三个也是最后一个碎屑是Piwik试图修补这个漏洞的方法——他们用getCurrentUrlWithoutQueryString()替换getCurrentUrlWithoutFileName()。这意味着我不能再使用这条路径进行攻击了。由于之前与Django的接触,我决定深入研究代码,看看Piwik是如何确定当前主机名的,并且发现与Django一样,它们使用HTTP主机头,这意味着我可以很容易地生成有毒的密码重置电子邮件。事实证明,这种技术也适用于addon .mozilla.org、Gallery、Symfony、Drupal和许多其他站点,最终导致了实际的HTTP主机报头攻击。

通过以如此冗长的方式阐述发现过程,我希望能够揭开这项研究的神秘面纱,让它看起来不那么像是一个突然冒出来的想法。从这个角度来看,似乎核心技能(超越现有知识和经验的广度)在于识别这些面包屑,并不懈地追求它们。我还不太清楚如何做到这一点,但我确实知道,要把任何让你说“这没有意义”的事情都当作一个引子来对待。

分享

最后,与社区分享你的研究成果是至关重要的。这将有助于提升你的个人形象,或许还能说服你的雇主为你分配更多的研究时间。除此之外,它还能帮助你避免浪费时间,并促进进一步的研究——评论者非常擅长指出你以前不知道的工作,而且没有什么比看到另一个研究人员在你的想法上做文章更有价值的了。

请不要认为一个技术或想法不值得分享,因为你没有突破性的发现、两个标识和一个演示——只要发布你所拥有的任何东西(最好是在博客上,而不仅仅是一些索引很差的封闭平台,如Twitter)。

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

最后,演示文稿对于更广泛的受众来说非常有用,但是要注意不要陷入“信息安全马戏团”的圈子,每天重复以前的演示文稿。

结论

我自己对研究还有很多需要学习的地方,所以我希望在几年后能够重新审视这个主题,并提供更多的线索。此外,我希望其他研究人员有不同的观点,并期待从他们决定分享的任何见解中学习。


页: [1]
查看完整版本: 你想成为一名网络安全研究员?