Builder vs. Breaker - 开发人员能否成为优秀的渗透测试人员,反之亦然

信息安全 渗透测试 职业 编程
2021-08-21 10:38:19

开发人员是否一定会成为优秀的渗透测试人员,反之亦然?

我问的原因是,我发现我有更多的诀窍来弄清楚现有的软件是如何工作的,并且可以被操纵,而不是自己实际设计和开发东西。

我会编程,我会说我有中等水平的专业知识,但我很难从想法到完成的项目。当我试图逆向工程我面前的东西是如何工作的时,我更有动力,感觉我更处于一种心流状态。

我认为这有点像作家或画家谈论看空白页的焦虑的想法。我觉得当从现有的软件向后工作时,已经存在限制和上下文,这给了我一些精神上的东西。而在开发“空白页”的软件时,以及所有可能的设计和实现方式让我头脑发热并分析每一种可能性。

我已经在安全界看到了这个作为建设者与破坏者的讨论。有些人只是更倾向于构建具有支持它的特征的东西,而另一些人则倾向于指出它的问题所在。

根据您的经验,这是真实的事情还是只是错误的二分法?

渗透测试的开发技能有多重要?

我真的很喜欢了解事物是如何实现的,而且我并不羞于阅读源代码来弄清楚它。我喜欢编写较小的脚本和工具,这些脚本和工具有特定的目的,但在编程项目中充满了很多架构抽象,我发现我经常会失去兴趣和动力。

如果我的目标是渗透测试而不是实际的开发职位,我应该让这件事困扰我多少?

2个回答

一般来说,要成为一名优秀的渗透测试员,您必须掌握成为一名优秀程序员所需的一些技能。关于可能的编程错误的扎实开发经验非常有帮助,因为很多渗透测试都是为了找到程序员没有想到的极端情况——即错误。这是双向的:一个好的开发人员应该具备一些渗透测试技能,因为编写健壮的代码意味着要处理异常情况,即渗透测试者(和潜在的攻击者)试图触发的那种事情。

软件开发的某些方面并不能直接帮助进行渗透测试;尤其是结构能力,比如知道如何设计一个简单、流畅和可扩展的 API,或者擅长记录代码。

渗透测试的某些方面并不能直接帮助开发,例如所有相当于社会工程的东西。

至于心理特征,我想说这不是一个真正的建设与破坏的问题。至少不是擅长建造或破坏。更多的是在建造或破坏中获得乐趣。渗透测试可能会令人沮丧,特别是如果你站在人们的“创造性”方面,因为你整天都在处理写得不好的代码,而且你知道你可以做得更好,但这不是你的工作。另一方面,成功入侵看似强大的服务器在智力上是有益的。渗透测试是一场智慧之战,你与开发人员的思想作斗争,而开发是一场与物理定律的战斗,有时可能令人生畏。开发或渗透测试,只有在您觉得活动愉快的情况下才能长期进行。

亚历山大大帝是一名开发商。马基雅维利是个渗透测试者。成吉思汗两者兼而有之。

熊已经给出了一个很好的答案,但是让我尝试从一个兼职作为开发人员的渗透测试者的角度来回答这个问题。

渗透测试有多个方面。我知道一些渗透测试人员在系统级和网络级安全方面绝对令人惊叹,而其他人则主要专注于应用程序安全。以我的经验,前者通常来自桌面支持/网络工程师/系统管理员背景。后者通常来自开发背景。*对我来说,这在很多方面都在说明问题。正如另一个答案中所述,具有开发背景的渗透测试人员通常擅长发现软件中的缺陷,特别是如果他们在该行业工作了很长时间 - 只需要一些培训来思考像黑客一样发现代码和应用程​​序中的安全漏洞。这些人也将擅长审查安全问题的代码,并为这些缺陷提出优雅的修复,否则没有经验的开发人员可能无法实现。

应用程序安全人员以及通常具有开发背景的渗透测试人员的另一个优势是能够在测试代码时开发自己的工具。在某些时候,你会用完现成的工具来完成你的工作,你要么破解某人的代码,要么编写自己的代码来做你想做的事。虽然我见过具有基本 Python 技能的人这样做,但更优雅和精美的工具来自具有经典开发背景的人。

也就是说,我还看到一些漏洞利用开发人员和逆向工程师——虽然擅长编写代码——但他们真的不想这样做。但他们对自己所做的事情感到惊讶,他们作为开发人员的知识使他们更容易逆向代码、分析恶意软件,甚至编写自己的恶意软件。

归根结底,根据我的个人经验,知道如何编写和阅读代码至关重要,特别是如果您对应用程序安全感兴趣。了解应用程序的工作方式无疑让我更容易破解应用程序。

总而言之,如果你擅长编写代码,那么你就比该领域的许多人更有优势——我认识的很多优秀的应用程序安全人员绝对不擅长编写好的代码。如果您对破解其他应用程序以执行您希望他们执行的操作更感兴趣,请继续这样做。如果从白纸阶段编写代码让您感到害怕……那么,尝试完成它并获得信心,因为一旦您获得了一些经验,这并不难。这都是一个学习的过程,所以继续学习!