攻击场景
在DevOps和DevSecOps的背景下,大多数人首先想到的攻击场景是利用漏洞(如SQL注入、跨站脚本攻击(XSS)或内存泄漏如缓冲区溢出)在生产系统上执行代码。在第14章《确保你的代码》中,我们将更详细地探讨如何寻找这些类型的漏洞,以及如何将其集成到你的交付管道中。
但实际上,存在一些更容易的攻击场景,例如:
-
未保护的文件共享和代码仓库
-
明文文件、配置文件和源代码中的密钥(例如测试账户、个人访问令牌(PAT)、连接字符串等)
-
钓鱼攻击
钓鱼攻击尤其是开始攻击的一个简单途径。根据2021年的一项研究,19.8%的钓鱼邮件收件人点击了邮件中的链接,14.4%的人下载了附件(参见Terranova和Microsoft,2021年)。在定期进行钓鱼活动的公司中,数据大致相同。在我为某个客户提供服务时,几乎有10%的员工在钓鱼活动中收到邮件后点击链接并输入了他们的凭证!这家公司已经进行钓鱼活动多年。
钓鱼攻击的问题在于一种心理效应,称为“引导效应”。即使你通常知道钓鱼邮件是什么样子,知道应该留意什么迹象来检测它们,但当你正期待收到一封邮件或认为这封邮件与某个你正在参与的上下文相关时,你就更不容易注意到这些迹象。例如,在月底收到一封来自人力资源部门的钓鱼邮件,邮件声称你工资支付出现问题。因为是月底,你正期待收到工资,这封邮件看起来就不那么可疑了。也许你以前遇到过类似的问题,或许你刚检查过,发现钱还没到账。它还会制造一些紧迫感。如果你很着急,可能会想尽快解决这个问题,确保工资按时到账。如果在月底发出这种钓鱼邮件,很多人点击链接的可能性就会大大增加。另一个例子是共享文档。如果你刚和同事通话,他们说会和你共享一个文件,你可能会想知道为什么要用这种方式,但你不会怀疑,因为你本来就期待收到文件。发送更多的钓鱼邮件,你就更有可能恰好在某个人的上下文中,诱使他们上钩。
一旦攻击者成功地妥协了第一个受害者,并获得了公司凭证或访问受害者的机器,局势就完全改变了。现在,攻击者变成了内部攻击者,可以从内部地址针对公司特定人员发起攻击。这就是所谓的“鱼叉式钓鱼攻击”(Spear Phishing),它极其难以检测。
一个很好的鱼叉式钓鱼目标是管理员或工程师。如果你没有执行最小权限的用户访问控制,攻击者可能已经能够访问生产系统,或者成为域管理员,攻击就可以结束。但如果他们妥协了一个开发者账户,攻击者还有很多选项,如下所示:
-
开发环境:开发环境是每个攻击者的梦想。大多数开发者都以本地管理员身份工作,这样攻击者可以发现很多预装的工具,帮助他们继续攻击。攻击者很有可能在文本文件中找到用于访问各个系统的密钥,或者作为管理员,使用名为mimikatz的工具(请见:https://github.com/gentilkiwi/mimikatz/wiki)读取内存中的凭证。
-
测试环境:许多开发者拥有测试环境的访问权限,通常是管理员权限。攻击者可以登录并使用mimikatz窃取其他凭证。
-
修改代码:通常只需修改一行代码,就能禁用身份验证。攻击者可以尝试修改代码,或将依赖项的版本更改为一个已知有漏洞的版本,以便加以利用。
-
执行脚本:如果开发者能够修改部署管道代码或脚本,攻击者就可以插入在部署过程中执行的恶意代码。
这就是为什么在工程团队中,安全需要格外小心。相较于其他部门,工程部门的攻击面要大得多。
为了从一个已妥协的账户获取到域管理员或至少是具有生产权限的管理员账户,攻击者可以使用名为BloodHound(https://github.com/BloodHoundAD/BloodHound)的工具。它支持Active Directory(AD)和Azure AD(AAD),并揭示了所有隐藏的关系:谁在某些机器上有会话?谁是某个组的成员?谁是某台机器的管理员?
红队和蓝队都可以使用这个工具来分析AD环境中的关系。