如果你在美国长大,你很可能有过去夏令营的记忆。即使你没有亲自参加过,离家出走、学习各种手工艺、结识新朋友、进行难忘的冒险的营地经历已经融入了流行文化和媒体。每年8月,世界上最大的黑客夏令营在拉斯维加斯的炎热中举行。今年标志着第DEF CON三十二代。
没有亲身体验,很难解释DEF CON。是的,有演讲轨道、官方研讨会和多个捕获国旗(CTF),但还有更多。没有其他会议包含如此多的子会议和社区活动。即使是在职人员也会说他们认为还没有体验过所有提供的内容。
虽然主办方没有发布官方人数,但过去的事件人数在25,000-30,000之间。每个与会者都带来了对科技的热爱和许多分享的知识。走廊里满是人们在硬件上黑客攻击、编写软件、制作音乐、分享贴纸,让所有的DEF CON乐趣发生。
村落
在DEF CON 32中包含了33个村庄。这些村庄涵盖了广泛的兴趣,从航天黑客、社会工程、误导信息到红队和应用安全。每个村庄都是独立组织的,为与会者提供与特定关注领域互动的独特讲座、研讨会和动手活动。
应用安全村庄是专注于保护我们所有生活动力的应用程序的更大黑客和安全社区中的宝贵空间。您的作者是有幸组织和运行2024年应用安全村庄的少数人之一。
在2024年RSA会议的应用安全村庄,GitGuardian展示了我们的“寻找秘密”游戏,这是一个基于卡牌的游戏,模拟手动代码审查以查找明文凭据的经历。玩家被要求尽快找到所有隐藏的API密钥、密码和其他明文秘密,攻击者可能使用它们进一步获取一系列代码样本、Jira工单、日志文件和Slack消息的访问权限。

根据DEF CON照片规则编辑的应用安全村庄中的“寻找秘密”
在DEF CON会议的两天时间里,有超过120人来到AppSec Village我们的POD体验这个练习。我们甚至还设立了一个排行榜,最快且错误最少的玩家赢得了特别的奖品。
最常见的秘密安全问题
当人们开始检查包含代码的卡片时,我们收到了各种各样的问题。我们认为分享这些问题可能对你也有所帮助,以防你还没有听到这些担忧的答案。
以下是我们听到的最常问的11个问题和我们的回复。
1. 提交到底是什么?
提交是Git中使用的版本控制系统的单元工作。它是文件系统在特定时间点的快照,包括自上次提交以来开发人员所做的一切工作。如果你一个接一个地排列提交,你将得到Git历史,这让你可以查看代码库生命周期中每次更改的增量变化。使用Git的一个秘密安全挑战是历史记录是一个共享的永久记录。如果一个秘密在一个提交中被添加,然后在下一个提交中被移除,含有秘密的提交仍然会被保留。
2. 你怎么判断某样东西是不是秘密?
秘密是任何直接访问系统或数据的凭据。这些可以是API密钥、密码、证书和令牌等形式。它们难以被发现的一个原因是,它们在代码中以多种方式使用,以及从命令行使用。例如,在配置文件内部,可能为一个API密钥设置一个特定的变量。但是对于像Slack这样的系统,API令牌本身嵌入在URL中,这意味着你需要熟悉该系统才能知道它是一个秘密。
许多系统在其用户界面URL中使用长而独特的数字,这可能非常类似于内联令牌。例如,Figma URL可能看起来包含在路径中的base64编码字符串。然而,如果你跟随一个随机的Figma链接,你会遇到一个登录屏幕,因为你需要是一个经过身份验证的用户才能连接到该页面。由于它不会自动授予系统访问权限,而只是标识页面位置,所以一个在没有Figma立足点的攻击者会返回“无访问权限”的错误并继续。这也是为什么要拥抱工具来识别秘密的原因,因为有些平台可以快速区分包含授权令牌的URL和可能只是看起来像的URL。
3. 有效是什么意思?
有效,在我们这里,意味着某个凭证仍然可以用来授予访问相关系统或数据的能力。如果被攻击者发现,有效的秘密可能会立即被使用。尽管非有效的秘密可以让攻击者了解整体架构和互联系统,但只有有效的秘密才能为他们提供直接进入这些资源的路径。这种类型的横向移动也是难以检测的。
4. 我应该如何知道哪些机密是应该寻找的正确机密?
最好的答案是找到并移除所有有效的机密。然而,正如Spot the Secrets所证明的,没有合适的工具,这是一个难以解决的问题。手动代码审查或仅依赖简单模式匹配的工具会让你花费时间修复已经被验证无效的机密,而不是专注于有效的机密。过期的密钥构成不了多大威胁,因此消除它们的努力应该优先于你发现的任何有效凭据。
5. 机密和只是写得糟糕的代码之间有什么区别?
攻击者大多数时候可能不会阅读你的代码;他们在扫描特定方法以尽可能快地获得更广泛的访问权限。写得糟糕的代码可能包含许多攻击者可以利用的漏洞,特别是在基础设施即代码配置方面。然而,利用这些缺陷需要攻击者花时间理解漏洞并针对这些问题执行特定的攻击,而不是仅仅利用明文凭据。
变量名和用户名可能被用作更复杂攻击的一部分。例如,在代码中找到的用户名和电子邮件地址可能被用于密码喷洒攻击或暴力破解尝试,但这些攻击比直接使用秘密更容易被检测到,对攻击者来说也非常耗时。
6. 发现了秘密后我该怎么办?
首先,停下来深呼吸。这种情况可能发生在任何一个人身上,所以如果你发现了一个泄露的秘密,不要太过沮丧。紧急行事是好的,但不要惊慌,在不知道会发生什么的情况下撤销发现的秘密,这可能会引起更多问题。
我们建议按照以下步骤行事:
- 了解秘密能打开什么。
- 弄清楚与任何相关数据或系统有多么重要。
- 检查日志以发现未经授权使用秘密的情况。
- 确定是否有数据或服务访问被泄露。
- 找出在轮换秘密时会发生什么。
- 轮换秘密并将新凭据安全地存储。
- 修复任何损坏的工作流程或生产部署。
- 回顾事件并创建一个行动计划,以避免进一步的秘密泄露。
阅读更多关于补救过程的文章,《如果你暴露了一个秘密:如何保持冷静并应对事件》。
7. 当发现秘密时,我的团队总是重写Git历史。我们只需要做这件事吗?
不幸的是,不是的。虽然我们喜欢修复过程中的Git清理步骤,但事实上这是最后一步,许多组织都认为这是可选的。我们建议旋转任何以明文形式暴露的秘密(有关修复过程的建议,请参阅上面的链接)。
8. 我只是把仓库从公共移除。这还不够吗?
我们真心希望这是真的,但不幸的是,对于所有人来说,一旦在GitHub上公开暴露,它应该始终被认为是受到威胁的。GitGuardian扫描GitHub公共API上发生的每一个新的提交
和isPublic
事件。
这就是我们构建年度《机密蔓延状况报告》的方式,也是GitGuardian公共监控服务的基础。虽然我们的目的是警告提交者他们做了些可能危险的事情,但我们不是唯一监控这个公共API的实体。您应该始终假设您公开推送的任何代码或文件,都被一些您不了解的人复制,并存储在您不了解的其他地方。我们始终建议旋转任何可能暴露的秘密。
9. 为什么误报是个问题?
在我们的“发现秘密”练习中,我们要求用户找出100个可能的提交、Jira、Slack和日志卡中的所有秘密,并对每个误报施加时间惩罚。任何玩家错误地认为包含秘密的卡片实际上没有秘密都会受到每处错误10秒的惩罚。
任何工具或流程如果报告了太多的误报,都会导致警报疲劳。用户被大量警报淹没,并开始忽略它们。这将导致对工具的不信任和使用的不一致。它还会干扰整个修复过程,并意味着一些报告的真阳性机密没有得到及时处理。
10.文件名与识别秘密有什么关系?
简单地说:上下文。仅通过模式匹配很难找到通用秘密。如果标记符文件中有一个长字符串,我们的研究结果表明它很有可能是一个密码示例,因此您不太可能需要处理它。另一方面,如果在名为 project.env
的文件中,同一字符串出现在 password=
字符串之后,那么您就很有可能掌握了一个真正的秘密。
文件名只是我们通过 GitGuardian 秘密检测引擎中的事前和事后验证 所考虑的要素之一,也是帮助我们通过平台内部 FP 移除器 消除误报的因素之一。
11. 人们真的通过手动审查代码来查找秘密吗?
是的。我们调查的IT决策者中有27%的人表示他们依赖手动代码审查来解决秘密蔓延的问题,尽管有75%的人表示他们曾经受到过秘密泄露的影响。
“查找秘密”活动旨在展示依靠人类发现这些问题的问题。机器在模式匹配成千上万或数百万行代码方面要优秀得多。
共同学习是DEF CON的重点
我们在DEF CON学到了很多其他的东西,包括保持水分,每晚至少睡几小时,以及当外面温度超过110°F/43°C时保持自己室内。
议程上有许多优秀的演讲;我们迫不及待地想看视频,以便补上我们在帮助人们了解秘密蔓延时错过的内容。在此过程中,我们学到了很多关于安全人员、开发人员和一般人如何看待这个问题以及如何考虑解决方案的知识。GitGuardian希望将把这些教训融入到解决问题中,使我们大家都能更容易地解决这一问题。
如果你从未考虑过去DEF CON,我们非常推荐你去,理由之一就是参加AppSec Village和找到你所在的黑客夏令营部落。
Source:
https://dzone.com/articles/secrets-security-at-appsec-village-at-def-con-32