Transcription
大家早上好,下午好,晚上好,无论您身在何处,都欢迎各位的到来。我叫 [名字],最近在 VMware 担任安全工程师。我拥有网络和安全方面的背景,我将让 [名字] 来介绍一下自己。
你好,我叫 [名字]。我在麻省理工学院(MIT)的开放学习部门担任了大约七八年的 DevOps 工程师。在此之前,我在 IT 领域工作,担任过不同的 IT 职位,其中很多都专注于终端用户计算。但是的,过去六七年我一直专注于 DevOps 领域。
是的,我们俩今年早些时候在 UpLimit 上开设了一门关于安全工程基础的课程。今天,我们想和大家谈谈在安全领域入门时可以选择的道路。
有句俗话说:“建好它,它们就会来。” 这指的是建造产品,这些产品往往会做得很好。当然,你建造的东西能解决问题,你就会有受众,最终会有客户。但你也会不可避免地遇到漏洞。
我们希望大家思考的一点是,当你考虑在安全领域开启一段旅程,或者也许你并不打算全职从事安全工作,但你想将安全实践融入你的日常工作中时,那就是如何最好地解决这些问题。而选择通常是这样的:
大多数人认为这是前进的方向。显然,这是对采取进攻性安全方法的戏剧化描述,通常是通过渗透测试,我们喜欢将其视为“拆除”,而不是采取这种方法。这并不是说哪种方法更好。我们希望你考虑的是,如果你只是从学习的角度开始,哪种方法更好?从学习的角度来看,你最好在哪里学习?是教你爆炸物的基本原理,如何放置炸药,如何闯入建筑物,使用什么工具?还是我们从讨论材料科学开始,如何建造建筑物的地基,如何确保谁进出建筑物,电力系统,电网,布线,所有这些东西?
看,如果你已经赚了很多钱,发现了惊人的漏洞,那么你显然不是本次讲座的典型听众。你已经走在正确的道路上了,所以我们可能会从你那里学到更多。但如果你和我们许多人一样,正在考虑你想做什么,而显而易见的答案对你来说并不明显,那么这可能对你有益。
[名字],你想补充什么吗?
是的,我认为我可以补充一点关于建造和材料的类比。所以,如果你从外部视角看进去,你试图闯入这座建筑,你有一扇窗户,你试图爬进去或找到绕过它的方法。如果你从未见过窗户,你根本不知道窗户是如何工作的。你唯一的选择是找一个你看到别人用过的工具,打碎玻璃爬进去,这是你能想到的唯一方法。但最有可能的是,你甚至不会尝试打开它,看看它是否锁着,因为你不知道窗户是如何运作的。所以,作为一个新手,从这个角度来看,这根本说不通。
但如果你从设计结构本身开始,你必须弄清楚要安装什么样的窗户,窗户是如何工作的,你把窗户安装在哪里,这些窗户有什么样的锁定机制。这就是内部人员向外看的视角。然后,当你从外面看时,你可以清楚地看到,“哦,我可以试试这个,也许它有这种锁,也许他们忘了锁,我可以直接打开它,而无需打破任何玻璃或触发任何警报。”
所以,视角非常不同,但它改变了很多事情,尤其是在你刚开始,并且正在考虑进攻性与防御性姿态时。
是的,显然,如果你是一名经验丰富的渗透测试人员或进攻性安全工程师,这可能不完全是“从外到内”的事情。例如,在黑盒测试场景中,你无法访问源代码,也无法获得系统详细信息,直到你被要求从完全外部的视角看待系统。与白盒测试相比,在白盒测试中,你会获得源代码进行审查,你会获得一些系统访问权限,所以你不是完全被排除在环境之外。但正如 [名字] 所说,视角更像是“外部人士”,你并不一定参与设计过程或事物的产生方式。所以你在窥探,你在看这个锁,你在看这扇窗户,你在观察谁进出这座建筑,然后你试图根据你对漏洞的理论来制定一个计划。
所以,我想分享一个关于开发、构建和运行安全产品或服务的非常高层次的概述。你可以看到,当然,有些人可能会对此提出异议,说“这里缺少什么?那里缺少什么?事件响应呢?绝对。”但这只是为了向你展示,渗透测试,或者安全实践中专注于进攻性方法的那个子集,只是更大图景中的一小部分。
这就意味着,对于那些可能不一定一开始就对从事进攻性工作感兴趣的人来说,存在巨大的机会。我就是那样的人。我一直对安全非常感兴趣。虽然我早期确实涉足过进攻性方面的东西,但它并没有引起我太大的兴趣。然后,当虚拟基础设施和程序化基础设施开始兴起时,我重新回到了这个领域。那时我开始想,“嘿,有更多的防御性方法来构建安全性。”
所以,这是一个完整的图景,对吧?安全开发是其中一个巨大的部分,这意味着你必须安全地开发,你必须编写安全的代码,你必须使用,你必须尽量减少从你导入到项目的第三方软件带来的风险,等等。你想进行广泛的威胁建模,这样你就能了解你正在构建的产品、系统或组件面临哪些威胁,威胁行为者是谁,可能存在的攻击向量是什么。然后是安全设计,这是你从一开始就构建正确事物的机会,而不是在发布或上线后才发现问题。然后是安全运营,一旦你构建并发布了它,你如何以合理安全的方式维护它?你如何监控它?你如何响应事件等等。
当然,进行渗透测试是验证整个系统是否按预期工作的的一种方式,对吧?因为我们见过很多公司,它们认为自己做得一切都对,拥有合规认证等等,然后你就会遇到一个攻击者,他们拥有完全新鲜的视角,不受系统运行规则的限制,然后他们就发现了最令人尴尬的漏洞。
所以,这就是为什么它非常重要。在继续添加任何内容之前,有什么想法吗?
是的,我们也必须承认,特别是对于刚开始的人来说,如果你走进攻路线,它更酷,更有趣。你在闯入某样东西,你在做你不应该做的事情。它肯定对刚开始的人更具吸引力或更具吸引力,而不是建立在坚实的基础上,它是安全、可靠等等。但除非有人真正测试并验证它,否则你永远不会真正知道。
是的,它更具吸引力。但我们多年来也注意到的一件事是,当你走进攻路线,而没有真正理解一个系统及其组件如何工作和相互作用时,通常会发生的是,你最终只是在寻找不同的工具。你使用一个工具,你只是,你基本上是在按按钮,因为这就是你试图闯入某样东西的方式,或者你认为你应该这样做。所以,工具在操作你,而不是你在操作工具,因为你根本不知道你在做什么。
我记得我父亲过去常常嘲笑那些遛狗的人。你看到一只狗在散步,它们牵着绳子,后面的人,他们让狗牵着人走,而不是你牵着狗。从某种意义上说,就是这样。你只是被工具束缚,工具在操作你。所以,如果没有对事物应该如何运作的深刻理解,你就会陷入困境。
另一个问题是,如果发生一些小的变化,你也不知道如何改变你的方面来真正应对。我举个例子,假设有一些用户输入验证,他们正在检查一个单词,而你的工具检查的是一个单词。他们增加了一些复杂性,因为他们意识到“哦,他们在检查这个词”,他们可能在词中添加了一个字母。你的工具会失败,因为它不再起作用。但如果你知道事物是如何运作的,你就可以绕过它,找到方法。但由于你只是从外面看,你只是跟着工具告诉你做什么,它就会继续下去,你的渗透测试就会失败,或者你根本进不去,你必须找到另一种方法。
是的,我同意。我只是反驳说,有不同层次或不同技能集的渗透测试人员。有些人,正如你所说的,[名字],他们只是按照工具的指示行事,他们不太清楚,他们没有那种深入的理解。有些人走这条路,他们就停留在那个水平,他们基本上只是工具使用者。坦率地说,他们不会非常成功,特别是随着许多自动化工具的不断改进。
但我认为,有些人确实是这样开始的,因为你的起点将是工具,但然后你确实有那些拥有正确心态的人,他们会问“这个工具是如何工作的?”有很多开源工具,仅仅通过尝试理解工具是如何工作的,你肯定会学到这些东西。如果你尝试使用 nmap,或者尝试真正理解它扫描网络的任何选项,你不可避免地会开始更多地了解网络协议、系统指纹识别、不同操作系统如何泄露关于它们运行的堆栈的信息等等。
但不可避免的是,刚开始时,你必须掌握很多工具才能高效工作,而你采取的是那种方法。现在,再次强调,没有什么能阻止你说,“好吧,如果我正在扫描,比如说 Kubernetes 控制平面,让我花一些时间更多地了解 Kubernetes。”所以你可以这样做,但同样,这通常不是重点,这就是你最终会遇到的情况。
而且,正如你所说,破坏东西听起来对学习的人来说很令人兴奋,而不是说“嘿,去读读系统架构,或者这个东西是如何运作的。”这可能……现在,这取决于你的个人喜好,有些人可能对此更感兴趣。所以,这无关紧要,因为我们只是在争论先学什么更有意义。
无论你最终做什么,我们都认为,在进入利用之前,专注于建立基础知识将使你在长期内受益更多。所以,目标是深入理解系统和架构,因为这将让你对设计中存在的缺陷有一个很好的了解,我们在设计和构建系统时通常会犯哪些错误。
第二点,采取防御性方法的酷之处在于,它是一条加速贡献的途径。我的意思是,你加入一家公司,你担任一个特定的职位。如果你采取防御性方法,任何公司在安全态势方面都会有很多问题,这是事实。这意味着你有很多机会做出贡献,因为大多数安全问题通常都相当基本,因为它们需要一些纪律来解决,它们通常不会立即得到解决。那种债务开始累积,然后公司就会陷入那种境地。
所以,如果你试图采取一种方法,你就有机会修补系统,减轻漏洞,通过查看系统的默认配置来改善安全态势,并最终维护该产品或服务的安全。而如果你一开始是一名渗透测试人员,找到高质量的问题需要时间。另一件事是,你可能会找到问题,但你也不一定专注于提出解决方案,因为你只专注于找到问题,然后继续下一个,提交报告。而对于防御方的人来说,你找到缺陷,你想出解决方案,你想出修复方法。你倾向于拥有更广泛的系统以及涉及的内容,所以你会有不同的方法。我认为你会有更快的贡献空间,而不是如果你在进攻方。
有什么想法吗?
是的,我想再强调一下。从非常实际的角度来看,如果你去和你的经理或同事说,“嘿,我发现了,这不一定与安全相关,甚至与 IT 相关。我发现了这个问题,我认为我们可以通过以下选项来解决它。”我认为这是最好的前进方向。那么,你期望你的经理、你的同事会如何回应?他们会喜欢这些东西,因为你发现了问题并提出了解决方案。你不是带着问题来,然后期望别人来解决它。所以,这也会帮助你的职业生涯,因为你正在帮助解决问题,你不是在提交报告,然后继续下一个。
下一个观点是市场需求。所以,如果你们中的任何人考虑进入安全领域,我敢肯定你们都被关于如何保护系统的课程淹没了。但通常重点倾向于进攻性方面,道德黑客等等。如果你们中的任何人遇到过“漏洞赏金计划”这个概念,那么基本上这意味着公司需要有才华的渗透测试人员,而不是雇佣他们,或者与个人咨询公司或公司签约让他们尝试攻击他们的系统。基本上有一个市场,如果你愿意的话,为拥有进攻性安全技能的人提供服务。而且,当然,有很多人在做这项工作,他们不是顶尖的黑客,但重点是,有一个这样的计划,让一大群进攻性安全测试人员查看你的系统是很容易的。
而另一方面,没有类似的等价物。没有针对那些将系统地审查你的基础设施和代码等内容的防御性赏金市场。而且,我们对复杂系统的依赖越多,而且我们只看到这种情况在加速,对防御性技能的需求就会越大。再次,正如我之前提到的,因为稍后解决这些问题成本更高,对公司来说可能更尴尬,而且坦率地说,对客户及其数据的影响更大。
为了处理事情并预防或尽量减少这些安全事件发生的可能性,你需要尽早开始这个过程。这很大程度上始于你的防御性人才,或者基本上是任何处理你系统的人,并拥有防御性心态。所以,即使从市场需求的角度来看,我认为从建立防御性技能开始是有意义的。
在继续下一个观点之前,有什么想法吗?
再次强调,防御性方法可能会,而且应该更受欢迎。因为你有大量的东西需要保护,而渗透测试人员只需要找到一个小东西,你可能就会陷入麻烦。但从防御性姿态来看,尤其是在当今系统复杂的情况下,你需要考虑很多事情,并弄清楚如何根据你的用例来保护它们。所以,从防御性角度来看,这绝对是一个更有影响力的职位。
是的,我认为存在一个差距。因为有一段时间,进攻性安全可能也不那么普遍,你只有少数人做着那些出色的工作,对吧?因为人们会下意识地信任系统,认为“哦,一切都很好。”然后你就会有一个跳出框框思考的人,他说“哦,让我试试这个,让我试试那个。”然后暴露了所有这些问题。这是绝对必要的。但我认为我们现在已经到了一个可以说“好吧,我们确实有大量资源专注于渗透测试,而且我认为我们没有同等数量的人拥有那些防御性技能,在构建者方面。”
所以,我认为这一点很重要,因为是的,进攻性方面很令人兴奋,你在破坏东西,你在跳出框框思考,将系统推向极限,也许让它做一些它不应该做的事情。我会说,防御性方面,这种方法确实灌输了一种责任感和道德感,因为最终你是对你的客户负责,他们的数据。如果这是一个任务关键型系统,那么你就是在谈论潜在的生命。我会说,大多数系统可能不属于这一类,但有时很难预测一个不一定是任务关键型系统的系统所产生的连锁反应,以及其他系统可能对它的依赖程度。
我认为,当你戴上防御性思维帽时,你试图在你的队友中灌输一种责任感。编写代码的人有时可能没有考虑到他们所做事情的所有影响。所以,你将有助于提高人们的认识,我认为这是一件重要的事情。
你对此有什么看法?
是的,我认为很多人认为数据丢失或泄露会使公司破产,等等。虽然这是非常真实的,但我认为重点不应该仅仅是金钱。你与客户之间存在信任关系。他们信任你,取决于你运行的系统类型,他们信任你提供很多非常个人化的数据。所以你必须非常尊重,你必须尽最大努力保护并确保他们对你和整个系统的信任。所以,从这个角度来看,这是非常重要和关键的,除了安全漏洞和公司股价等可能造成的巨大影响之外,那些都是理所当然的,但那种信任至关重要,从这个角度来看非常重要。你必须尽力而为,并非常尊重这一点。
我们有一个问题,我想让我们现场回答。有人问,对于一个完全的新手来说,我们主要教授进攻性技能,正如我们所提到的,然后他们有兴趣知道可以利用哪些防御性技能。事实上,我们已经在第一个幻灯片上提到了,我们说的是深入理解系统架构和设计缺陷。
你可以通过理解系统是如何工作的来做到这一点,这取决于你负责的系统。了解该系统如何验证其用户,数据存储在哪里,谁可以访问该系统。所以,如果我们想深入研究这些细节,我认为这些是你在任何你试图安全地构建和操作的系统中都会寻找的基本安全原语。
我相信你们中的一些人可能听说过“CIA 三元组”,它代表机密性、完整性和可用性。这三个基本属性是所有事物的起点。作为一名防御工程师,你将专注于如何维护我们系统内数据的机密性?我们的客户如何与我们沟通?我们使用什么协议?它们显然是加密协议,取决于处理的数据。你可能需要多层加密。你将深入研究密钥的安全性,我们多久轮换一次密钥,我们将数据存储在哪里,谁可以访问数据?是我们整个团队,还是选定的人?我们如何管理内部威胁?如果一个管理员失控了,那是否意味着他们可以摧毁整个公司,还是我们有办法缓解这种情况?
你将深入研究操作系统安全,比如说你有三个、四个层级的系统,基于不同的风险和敏感度级别,你如何保护它们?这些就是你关注的事情。
是的,我希望这能回答这个问题。当然,如果你们中的任何人有更多问题,请随时提问和打断我们。我们非常乐意回答。
你有什么要补充的吗?
是的,我想补充两点。其中一点是,如果你还没有上过我们的课程,那就去上吧,那将是一个很好的开始。另一件事是,就像任何工作一样,一旦你开始真正深入研究 [名字] 提到的所有主题,你就会慢慢看到模式,那些问题会一次又一次地出现。所以,当你查看一个系统时,你会自动开始问同样的问题,“好吧,这个系统和那个系统之间的数据是加密的吗?还是以明文传输?存储在这个存储设备中的数据,我们是否加密了?我们是否对用户输入进行了清理?”所有这些都开始变得非常基本,你知道什么时候该问,因为你最终会发展出这种直觉。但这需要一些练习和大量的努力和学习,但如果你带着这种心态去努力,一切都是可行的。
是的,我想说,如果你不在安全岗位上,你可以从你管理的系统开始,因为你将对其有很好的理解,或者我希望如此。所以,你应该开始思考,“好吧,我的系统处理这种类型的数据,我认为我们有合理的安全措施吗?”然后你可以开始从那里建立你的理解。你也可以开始融入以攻击为中心的方法,并思考“好吧,如果有人绕过了这个,会发生什么?”再次,你不是想破坏它,但问问“可能出错的是什么?”这个问题很好。这实际上就是威胁建模的本质,也是我们在课程中讨论的内容。希望这能回答这个问题。
继续。最后,我们只想说,如果你打不败他们,就加入他们。从某种意义上说,即使你的目标是成为一名非常优秀的进攻性安全工程师,拥有防御能力也绝对会帮助你走上这条道路。出于我们上面提到的所有原因,对吧?如果你理解你试图攻击的系统是如何工作的,当然,这里是合乎道德的。每次我们谈论攻击系统时,我们都是从道德的角度出发的。这是一个你拥有或被允许进行进攻性安全测试的系统。拥有防御背景将使你更有效。你可能会有一些优势领域,这通常是你可能会集中攻击的地方,因为即使从渗透测试的角度来看,也有多个专业领域,因为在任何一个领域发展技能都需要时间。
所以,即使作为一名进攻性安全工程师,你也有多个,有不同的专业。你可以专注于不同的领域。有些人只专注于 Web 应用程序攻击,有些人专注于硬件设备,他们进行大量的硬件逆向工程。有些人专注于代码方面,他们逆向工程代码。然后有专注于云安全或基础设施安全的人。
无论如何,拥有防御背景将使你成为一名更好的进攻性安全工程师。例如,如果你有构建基础设施的背景,那么你可能会在专注于云安全、渗透云基础设施方面做得很好。如果你有开发人员背景,你可能会发现自己在家中攻击 Web 应用程序或软件本身,进行逆向工程,编写漏洞利用程序。当然,拥有开发人员背景将帮助你自动化大量工作,并且当你试图处理所有工具的数据时,进攻性安全领域有很多东西需要自动化。
但拥有防御背景将使你更有效,而不是仅仅依赖工具。如果工具说“哦,我什么都没找到”,你就会说“好吧,没问题。”但如果你有那种背景,你理解系统是如何构建的,你可能会调整工具,使其在你的能力和你没有那种视角的下一个进攻性安全工程师之间产生差异。
我相信这是最后一张幻灯片。你有什么要补充的吗?
是的,我只是想补充一点,让它更具体一点。我喜欢篮球,我关注很多篮球播客之类的东西。最近有一个很有趣的事情是,一位非常出色的进攻型球员,他有很长的 NBA 职业生涯,他谈到了他如何自然而然地成为一名出色的进攻型球员,这得益于大量的练习和付出的时间和精力。但让他与众不同的是,他会花大量时间观看防守和防守球员的比赛录像,观看他们的动作,尤其是在他与他们比赛时,以及他们如何应对,以及他如何应对一个动作,然后他们以另一种方式防守,而他们却无法阻止他。
所以,他的进攻是基于大量的观看所有不同防守动作和防守技巧的比赛录像而形成的,这使他成为一名更好的进攻型球员。这在这里也适用。如果你对系统设计、典型防御有很好的理解,那么当你再次从外部查看系统时,就会容易得多。通常,他们会在这里设置一个防御,他们会在那里设置一些东西,我如何绕过它?所以,你在很多方面都知道会发生什么,所以更容易规划你的方式,因为你知道会发生什么。
是的,我认为最好的进攻性安全工程师总是在学习,因为新的系统不断出现,所以你必须在那里做你的研究。所以,总而言之,我们认为说“是这个还是那个”是一个错误的选择。这只是我们个人认为更好的起点。我喜欢这两个学科,最终我认为这取决于个人偏好,但即使有人专注于防御性方面,你也绝对想了解进攻性方面正在发生什么,否则,你也是在真空中构建防御,并且对攻击技术了解不足。
所以,作为一个好的防御者,你也绝对需要跟上进攻性方面正在发生的事情。
至此,我们结束了本次演示的演示部分。