为什么你应该建立安全
根据2022年Verizon数据泄露调查报告(DBIR),82%的安全事件涉及人为因素。威胁者在寻求掠夺公司数据的过程中,绝大多数依赖于社会工程和网络钓鱼攻击,更不用说简单的日常错误。因此,身份现在是第一道防线。
身份在安全方面起着巨大的作用。像Auth0这样的客户身份访问管理(CIAM)解决方案旨在通过开箱即用的安全功能来加强你的防御态势,如检测暴力攻击和警告用户他们的证书被泄露的能力。
这些功能解决了许多公司的安全需求。但没有两家企业是相同的。有些企业,特别是那些处于高度管制市场的企业,需要更高水平的警惕。他们的威胁情况要求他们在认证过程中引入额外的摩擦,而不是他们的CIAM平台默认提供的。
Auth0使添加这种保护变得容易。由于它是为可扩展性而设计的,用户可以通过编写自己的行动或从Auth0市场安装无代码集成来建立自定义功能或创建自定义工作流程。反过来,企业可以创建一个强大的、分层的防御,使他们能够满足自己的安全需求。
这篇文章将重点讨论分层防御的概念。我们将在高层次上解释它,然后看一下事情的实际情况。你将了解到Auth0的可扩展性功能如何允许定制认证工作流程和规则,这是分层防御的基础。
什么是分层防御?
用一个现实世界的比喻来描述技术概念往往是有用的。让我们想象一下,你刚刚买了一个新房子。它很美。你的梦想家园,甚至。但是有一个问题。这是个大问题。当你从搬家卡车上卸下你的财产时,你的新邻居警告你最近有一连串的破门事件。你想保证你的家人安全,所以你开始增加新的安全设施。
幸运的是,前门是由厚实的实木制成。你的窗户是坚固的双层玻璃的那种。于是,你就在其他地方寻找变化。
在你的脚边堆满了箱子,你开始在你的内门上安装锁。接下来是一个视频门铃和闭路电视摄像机。你在一楼的窗户周围部署了运动探测器,甚至开始认真考虑买一只狗。随着每一个新的安全功能的出现,你的家变得更容易被盗贼入侵。由于你的实木门和双层玻璃窗,你的起点很高。但你知道,没有安全系统是无懈可击的。因此,你在这些强大的开端上再接再厉。
在商业技术方面,分层防御包括利用产品的强大基础并进一步加强它们。没有安全产品是完美的。企业之间的风险水平各不相同,有些可能足够诱人,足以说服攻击者系统地测试你的防御系统,希望找到一个他们可以利用的弱点。
当你增加额外的安全层,引入新的监控和缓解措施时,你会减少攻击者找到漏洞的可能性。你引入了冗余措施。如果攻击者规避了一种保护,他们就会被另一种保护所阻挡。
让我们回到家庭的例子。假设一个盗贼砸开了你坚固的双层玻璃窗。他们仍然必须面对运动检测传感器、闭路电视系统和狗。他们在不被发现的情况下成功地抢劫你的家的几率仍然微乎其微。
保护网关,保护应用
不同行业的风险有很大的不同。但它也是有背景的。
一家物流公司可能希望在用户执行潜在的未经授权的操作时重新认证他们--比如在运输过程中改变包裹的交付地址。银行通常会在用户添加新的收款人或向新的账户发送电汇时提出质疑。许多应用程序在检测到可疑行为时都会增加摩擦,比如当用户从一个新的地点或从一个以前未见过的新设备登录时。
这是有原因的。身份是增加额外保护的最合理的地方。它是访问一个应用程序的必要组成部分。它是负责会话管理的部分。身份是你可以阻止和撤销访问的方式。
像Auth0这样的CIAM工具使这个过程更加容易,因为它们本身就是集中的。有一个地方可以寻找可疑的登录活动,有一个地方可以采取行动。如果你依赖一个自定义的身份系统,而这个系统又依赖几个外部组件,那么要对潜在的有害活动采取迅速行动就会变得更加困难,而且增加新的安全功能也更加耗时。
如果你感到好奇,我们在过去曾详细地探讨过这个问题。在许多方面--尤其是安全方面--使用专门的CIAM工具比使用内部身份系统更有意义。如果想更深入地了解构建与购买的争论,请查看这份白皮书。
Okta提供了低代码和专业代码的工具,以建立一个强大的、多层次的、可感知环境的防御。我们还让它变得非常简单。请继续阅读,了解更多关于Auth0 Actions和Integration的信息,以及它们如何结合起来加强您的安全态势。
行动如何加强你的分层防御
行动是为Node.js框架编写的小型特定租户脚本,在认证工作流程的特定点上执行。它们是一种快速、有效和多功能的方式,可以为Auth0平台添加自定义功能。
Auth0平台定义了几种可以执行Action的情况。我们称这些为流程。简单地说,流程描述了认证背景下的线性用户互动。比如修改密码,创建新的用户账户,或者登录。
流定义了更广泛的认证和访问控制管道。它们代表了认证中的线性用户或机器互动。例子包括账户创建、密码修改或登录。
在流程中,你会发现一个叫做 "触发器 "的东西。这些标识了管道的特定部分,在那里你可以引入自定义业务逻辑。
流程是阻塞的(同步)或非阻塞的(异步),取决于上下文。在实践中,绝大多数基于行动的分层防御措施将被阻止,因为你会停止认证过程,直到满足特定条件。
一个很好的例子是,看一下登录流程。在这里你会检查用户的位置或IP范围,或者要求他们用多因素认证(MFA)来验证他们的身份。
将代码放在首位
Auth0平台把代码当作头等公民来对待。在实践中,这意味着我们提供现代的开发者体验,并试图限制对客户Action的限制数量。
因为Actions是适当的node.js应用程序,它们可以使用公共NPM注册表中的大多数第三方库,只要它们不依赖任何本地附加组件。简而言之,如果一个依赖项不需要你编译任何东西,它就有可能工作。我们支持两种向Action添加依赖项的方式:通过我们的网页界面或通过Auth0管理API。
开发人员可以使用他们喜欢的文本编辑器(Vim或Emacs,我们不做评价)来构建Action。我们还提供了一个基于浏览器的编辑器,具有本地语法高亮功能。而且,由于版本控制是良好的软件开发的核心,Auth0平台允许你跟踪一段时间的变化,并迅速恢复到Action的最后一个已知的良好版本。
我们设计的Action很容易在整个生命周期内进行测试、调试和审计。使用基于浏览器的编辑器(或Auth0管理API),开发人员可以使用假的有效载荷测试他们的行动。这一功能模拟了真实世界的使用情况,而不需要将行动部署到实际环境中。
Auth0平台还可以让开发者测试他们应用程序中更细化的元素。开发人员可以使用他们选择的框架运行单元测试。我们的文档主要集中在Jest上,这是最流行的JavaScript单元测试工具。这使得验证你的代码中主要不与Auth0平台互动的部分很容易,比如当用户认证失败时发布Slack通知的自定义逻辑。
一旦行动开始,管理员和开发人员就可以访问租户日志,使他们能够轻松识别和调试失败的互动。从安全角度来看,日志是非常有价值的。它们就像煤矿中的金丝雀,在第三方试图获得未经授权的访问时发出警告,并在调查安全事件时提供宝贵的情报。
但是,日志也可以提供关于你的应用程序的可用性和稳定性的有用线索。我们记录失败的注册和机器对机器的信息,以及其他典型的用户互动,为工程师提供重要的诊断信息。
编写动作的规则
简而言之,动作是一种非常强大的方式,可以将自定义业务逻辑引入你的身份。这就是说,为了确保每个人都能利用它们,我们有一些基本规则。
我们将行动限制在10个外部依赖,每个行动的大小不应超过100kb。这个大小限制不包括任何外部NPM模块。此外,每个流程不能超过20个附加动作。
这些规则是为了确保你的用户有一个流畅的体验。这是因为更大、更复杂的脚本会给你的应用程序增加延迟。因此,我们要求每个流程在10秒内完成。超过这个限制的流程被执行,将返回一个错误。
此外,每个Auth0租户最多只能有100个动作。这个数字包括已部署和未部署的行动。我们还将每个行动的版本数限制在50个。如果你超过这个数字,Auth0将自动删除最古老的可用版本。欲了解更多信息,请查看我们的指南。
请记住。行动被设计成小型的、有目的的脚本。正如任何软件工程师可以(也会)告诉你的,简单总是比复杂好。
对整合的看法
我们已经介绍了Actions。它们对于向身份工作流程添加自定义业务逻辑是非常好的。但如果你不想重新发明轮子呢?幸运的是,Auth0有一个解决方案,允许你纳入第三方服务,同时限制自定义代码的需要。
集成是即用型扩展,允许你将第三方应用程序和服务集成到你的身份工作流程中。
让我们换个说法。作为一个开发人员,你使用库来更有效地工作。这些预先写好的代码包使你能够专注于建立价值。库解决了数以百万计的程序员所面临的问题--如与数据库对接,生成数据可视化,或向客户发送电子邮件和文本。
集成的工作方式也是如此。它们解决了你和无数其他工程师所面临的问题。这些问题包括如何与Splunk或Sumo Logic共享访问日志,或如何验证身份文件和密码。就像一个编程库,集成是随时可以使用的,而且在许多情况下,只需点击一下就可以实现。
你可以从Auth0市场上找到并安装集成。每个集成都有关于如何在你的租户内激活它们以及最佳使用方法的有用指导。如果你遇到困难,你可以在我们的文档页面上找到更多信息。
用行动构建分层防御策略
好了,我们已经解释了分层防御策略的含义,并学习了如何在Auth0中定制身份工作流程。现在让我们来看看这在实践中如何运作的一些场景。
原有的Auth0体验在默认情况下有几个安全功能。它自动阻止可疑的暴力攻击,以及可疑的机器人活动。当用户的密码出现在暗网上时,它会向用户发出警告。它使添加多因素认证(MFA)等功能变得容易,包括基于生物识别的MFA。
就像前面的比喻中的房子一样,Auth0提供了强大的基础来建立。但如果你想进一步扩展呢?
一个好的开始是要求所有在公司网络范围以外访问你的应用程序的用户使用MFA。你还决定阻止来自特定国家的登录尝试,因为你的企业在这些国家没有存在,而这些国家往往是企图攻击的来源。在写了几行代码之后,你就有了一个准备好的动作,等待着与登录流程相连。
你还决定通过阻止过夜的认证尝试来限制可能发生成功攻击的潜在窗口。同样,这也只需要几行代码就可以完成。
语境很重要。它是让你区分合法和恶意活动的东西。它是让你评估风险的工具。就像如果你从一个你从未去过的国家提取现金,银行可能会暂时封锁你的借记卡,分层防御策略允许你根据你定义的标准增加摩擦。
由于Auth0 Actions是JavaScript应用程序,你可以灵活地定义你可能希望增加摩擦或甚至拒绝访问的情况。
将整合纳入其中
Auth0是你的企业所依赖的许多安全工具之一。你使用一个SIEM平台来管理、保留和分析日志。由于你的应用程序是用微服务架构构建的,你依靠网关来管理API请求和识别恶意活动。你使用一个移动设备管理(MDM)系统来跟踪公司发放的笔记本电脑和智能手机。
自然,你想把这些工具整合到你的身份平台中。因此,你前往Auth0市场。只需点击几下,你使用的安全工具就能和谐地工作了。
而且,由于Auth0允许你定制身份生命周期的大多数部分,从注册到认证,开发人员可以快速添加额外的功能,并快速加入新的第三方产品和服务。例如,他们可以实施复杂的行为,将欺诈性或恶意创建账户的风险降到最低。
我们使您的应用程序与Deduce等工具轻松整合,Deduce是一个行为智能平台,可实时检测可疑的用户活动。而且,只需几行代码,开发人员就可以将被标记的账户重定向到ID DataWeb等服务,在那里,用户被要求用他们的护照或驾驶执照证明他们的身份。
每走一步,你都会为你的防御态势增加一个层次。你会变得更强大。更具弹性。能够更好地抵御威胁。对潜在的攻击者的吸引力更小。
你最了解你的风险
不要误解我们--Auth0的设计是为了从第一天起就提供最好的安全结果。其开箱即用的安全功能可以防止暴力攻击和凭证填充攻击,而且我们积极监测可疑或异常的行为。
但我们也知道,每个公司都是不同的,有不同的风险和合规要求。因此,我们很容易定制所包含的安全功能,并在此基础上增加新的功能和摩擦。灵活性与安全性是相辅相成的。只有你知道你所面临的风险和你需要采取的措施,以保护你的应用程序,你的数据和你的用户。