What We Learned About Secrets Security at AppSec Village at DEF CON 32

US에서 자라면 여름 캠프에 가는 기억을 가지고 있을 것입니다. 자신이 가지는 것이 아니더라도, 집을 떠나는 경험, 모든 sort의 예술과 工艺, 새로운 가장 친구를 만나는 경험, 기억에 남는 모험을 체험하는 캠프 경험은 大众文化과 미디어에 implanted합니다. 每到 8월, 지구에서 가장 grande의 hacker 여름 캠프가 덜 Vegas의 열기에서 이어지고 있습니다. 今年, DEF CON이 32번째 차례를 보냈습니다.

DEF CON은 체험하지 않았다면 어려운 것을 설명할 수 있습니다. 예えば, 발표 트랙, 공식 워크샵, 여러 CTF(Capture The Flag)가 있습니다. 그러나 그 이상의 것이 많습니다. 다른 컨퍼런스는 그 안에 그렇게 많은 서브 컨퍼런스와 지역 지도 이벤트가 들어가고 있지 않습니다. 년도에 여러 년을 이어 참가하는 수강자들도 아직도 모든 것을 체험했다고 생각하지 않는다고 합니다.

Organizers에 의해 공식적으로 발표 된 숫자가 없지만, 과거의 이벤트는 25,000에서 30,000까지의 이용자가 참가하였습니다. 모두가 기술에 대한 사랑과 공유할 수 있는 많은 지식을 가지고 있습니다. 캠퍼스는 하드웨어 햇갈이, 소프트웨어 쓰는, 음악 만들는, 스티커를 공유하는, DEF CON의 기쁨을 만들는 사람들로 가득하고 있습니다.

The Villages

DEF CON 32 내에 33개의 마을이 포함되었습니다. 이러한 마을은 항공기 해킹, 사회적 기술, 사실 오해 등 다양한 관심 사항을 덩어리고 있습니다. 빨간 팀ING과 앱 안전성까지 다양한 주제로 구성되어 있습니다. 각 마을은 독립적으로 조직되어 있으며, 특정 주제에 대한 이전하는 분들과 상호 작용할 수 있는 독특한 lecture, workshop, 以及 hands-on activity를 제공합니다.

AppSec Village은 larger hacking and security community 내에서 앱 안전성을 주제로 중요한 공간입니다. 저는 幸運히 AppSec Village 2024을 organize 하고 run하는 사람이었습니다.

Spot the Secrets

Back at AppSec Village at RSA Conference 2024, GitGuardian revealed our Spot the Secrets, a card-based game that simulates the experience of manual code review for finding plaintext credentials. Players are asked to race to find all the hidden API keys, passwords, and other plaintext secrets attackers could use to gain further access to a collection of code samples, Jira tickets, log files, and Slack messages.

Spot the Secrets at AppSec Village, edited to account for DEF CON photo rules

DEF CON 期间、2일 동안 AppSec Village에서 우리의 POD를 통해 이 exercise를 직접 경험하기 위해 120명 이상의 사람들이 찾아왔습니다. 우리는 가장 빨라게 하고 오류를 적게 COMMIT 하는 가장 빨라게 하고 오류를 적게 한 사람들이 특별한 스왑 상품을 받을 수 있는 리더보드를 设定了었습니다.

最も一般的な 기密 문제 안내

eople이 코드를 담고 있는 카드를 시작해 질문을 많이 했습니다. 우리는 이러한 懸念을 공유하여 또 다른 사람들이 이 문제에 대한 答안을 아직 들지 않은 경우에 유용하게 만들고자 합니다.

우리는 昕到的 11가지 가장 일반적인 질문과 우리의 答안을 다음과 같이 정리하였습니다.

1. COMMIT이란 정확히 무엇인가요? COMMIT은 Git, 全世界の 97% 以上的 開発자가 사용하는 버전 控制系统 中的 工作单位 입니다. 마지막 COMMIT Since the last commit, it is a snapshot of the file system at a given moment in time, encompassing all the work the developer has done. If you line up commits one after the other,

you get the Git history, which lets you examine each change made incrementally in the life of the codebase. One of the secret security challenges of using Git is that the history is a shared permanent record. If a secret is added to one commit and removed in the following commit, the commit with the secret is still preserved. 2. 어떻게 某을 비밀이라고 구별할 수 있나요?

비밀은 시스템 또는 데이터에 직접 アクセス하는 데 사용되는 어떠한 인증정보도 될 수 있습니다. 이러한 것들은 API 키, パスワード, Cerificate, トークン 등의 형태를 취할 수 있으며, 이러한 것들을 어떻게 사용하는지 예를 들어 코드 내에서 및 명령 行에서 다양하게 사용되는 것이 하나의 이유입니다. 例如、構成 파일 내에서 API 키에 대한 特定の変数를 설정하는 것과 같은 것들이 어렵게 감지되는 이유입니다. しかし、Slack과 같은 시스템에서는 API トークン이 URL 자체에 埋め込まれていますので、그 시스템에 대한 친숙성이 있는 것이 비밀이라는 것을 알 수 있습니다.

多くの 시스템은 사용자 인터페이스 URL에 짧은 ユニーク한 숫자를 사용하며、이러한 것들은 인라인 トークン과 非常に 近く에 있을 수 있습니다. たとえば Figma URL은 base64 인코딩 문자열을 경로에 포함하는 것처럼 보입니다. 그러나 arbitrary Figma リンクを辿る と、로그인 화면으로 리턴됩니다. 이는 그 ページ에 연결하기 위해 인증된 사용자가 있어야 하는 것을 의미합니다. 자동으로 시스템 アクセス를 허용하지만 그냥 페이지 위치를 식별하는 것이므로, Figma에 足場이 없는 攻撃자는 “No Access” 오류를 돌려 다음에 가입합니다. 이러한 것을 식별하기 위해 도구를 Embrace하는 另一个の 이유입니다. 인증 토큰을 포함하는 URL과 그렇지 않은 URL를 빠르게 구분할 수 있는 platforms가 있습니다.

3. 正当性 是什么意思?

“유효하다”라는 我们的적용은 특정 인증이 관련 시스템 또는 데이터에 대한 接入을 허용하는 것을 의미합니다. 攻撃자에 의해 발견되면, 유효한 비밀은 立ち上がり 안전한 것입니다. 유효하지 않은 비밀은 攻撃자에게 전체 Architecture와 결합된 시스템에 대한 洞察을 제공할 수 있지만, 유효한 비밀만이 그들에게 이러한 자원에 직접적인 途径을 제공합니다. 이러한 대itudinal 이동은 検出하기 힘들 수 있습니다.

4. 어떻게 해야 하는지 나의 비밀을 어느 것이 正确的하게 찾아야 하는지 알 수 있을까요?

가장 좋은 답변은 유효한 비밀을 찾고 제거하는 것입니다. 然而, Spot the Secrets가 보여주는 것 처럼, 正确的 tools이 없이 이 문제를 解決하는 것은 어려울 수 있습니다. 수동적인 코드 리뷰나 단지 간단한 패턴 매칭에 依存하는 도구는 이미 인validated secrets에 대해 수정하는 것에 시간을 보oy하게 할 수 있으며, 유효한 인증을 专注于하는 것이 더 나아요. 만기된 키는 그 정도로 脅威가 아니므로, 그들을 제거하는 努力은 발견한 유효한 인증과 더 낮은 우선순위를 가져야 합니다.

5. 비밀과 그냥 똑똑하지 않은 코드의 차이가 무엇인가요?

攻撃자는 大部分 你们의 코드를 읽는 것이 아니라 더 빨라게 widely access를 얻을 수 있는 特定의 방법을 스캔하는 것입니다. 똑똑하지 않은 코드는 攻撃자가 이용할 수 있는 많은 취약성을 포함할 수 있습니다, 특히 Inrastructure as Code 구성에 대해서는 更是如此. 그러나 이러한 瑕疵을 利用하기 위해서는 攻撃자가 瑕疵을 이해하고 특정 攻撃을 실행해야하는 것이 plaintext credentials를 이용하는 것보다 시간을 기울여야 합니다.

変数名とユーザーネームはより複雑な攻撃の一部として使用できる。たとえば、コードに見つかるユーザー名とメールアドレスは、パスワードスプレー攻撃やブルートフォース試行に使用できるが、これらは直接の秘密使用を検出するのに比べて簡単であり、攻撃者にとっては時間のかかる。

6. 一旦秘密を発見したら、それをどうするのか?

まず、息を吸っていってください。私たちの中で最も優れた者であっても、秘密が漏洩したときには過激に取り組むべきではありません。紧急性を持ちながらも、パニックになり、発見した秘密を無視して何が起こるのか知らずに取り消してしまうことはないでください。これは他の多くの問題を引き起こす可能性があります。

私たちは以下の手順に従うことを推奨します。

  1. 秘密が開かなくなるものを理解する。
  2. 関連付けられたデータやシステムの重要性を決定する。
  3. ログを照会し、秘密の不正使用があるかどうかを確認する。
  4. データやサービスアクセスが漏洩したかどうかを調査する。
  5. 秘密を回収するとどのような機能が破損するかを確認する。
  6. 秘密を回収し、新しい資格を安全に保管する。
  7. 機能の破損やプロダクションのデプロイメントを修正する。
  8. 事件を再び確認し、漏洩防止のためのアクション計画を作成する。

秘密を漏洩したときは何をするのか:冷静に対応するための手順」の記事で、修復プロセスを詳細に読む。

7. 私たちのチームは秘密が発見されるたびにGitの履歴を再書きする。これだけで問題解決できるのか?

불幸하게도 아닙니다. 리mediation 과정의 Git 정리 단계를 좋아하는 것은 사실 마지막 단계로 많은 조직에게 선택적인 것으로 PERceived 되어 있습니다. 평문 상태로 暴露 되었던 모든 시크릿을 회전하는 것을 推奨합니다 (上記 링크를 보고 리mediation 과정 advice를 확인하십시오).

8. 저는 公开 Repo를 제거하면 되 wouldn’t That Be Enough?

사실, 우리는 이렇게 되는 것을 바랍니다만, unfortunately for all of us, once it is exposed on GitHub publicly, it should always be considered compromised. GitGuardian scans every single new commit and isPublic event that happens across the GitHub public API.

This is how we build our annual State of Secrets Sprawl report and is the basis for the GitGuardian Public Monitoring offering. 虽然我们的意图是警告提交者他们做了些 potentially dangerous的事情, 我们并非是唯一 monitoring 이 public API 的actors. 任何时候你 publicly 推送了 code 或者 files, 都应该假定有人 else 制作了它的 copy, 并且 stored 在你不知道的 somewhere else. 我们总是 recommend rotating any potentially exposed secrets.

9. Why Are False Positives a Problem?

In our Spot the Secrets exercise, we ask users to find all the secrets placed inside 100 possible commits, Jira, Slack, and Log cards, enforcing a time penalty for each false positive. Any card where the player falsely thought a card contained a secret when it did not would incur a 10-second penalty per mistake.

한정된 범위의 waxwing 과정에서는 주의 깊게 보고 Secrets가 포함되지 않은 것들을 기 flags를 표시하는 것이 좋은 것 같지만, 실제 상황에서는 이를 하면 중요한 시간을 浪費시키게 됩니다. 리포orter가 있으며, 해결 기안에 直接的ement 할 任何人이 있으며, 이를 보고하는 것이 중요한 시간을 浪費시키게 됩니다.

太多의 ложных 阳性 결과를 보고하는 어떤 도구나 과정은 警戒 fatigue를 유발합니다. 사용자는 alerte 들의 洪水과 시작하여 그들을 무시하게 됩니다. 이는 도구를 신뢰하지 않는다는 의미와 불일치하게 사용하는 것을 의미합니다. 그것은 수정 과정을 인지하는 것을 阻止하는 것을 의미하며 정확하게 보고 된 secrets를 제대로 처리하지 못하는 것을 의미합니다.

10. 파일 이름은 시크릿 식별에 무엇과 관련이 있나요?

간단하게 말하자면 : context. Generic secrets 는 특정한 패턴과 일치하는 것만으로 찾기가 especially hard하며, 마크다운 파일안에 길어진 문자열이면 우리의 결과는 그것이 example password로 유사하다고 하므로 대신 해야하는 것이 없다고 하겠지. 그러나 그 同样的 string가 password= String의 뒷쪽에 나타나는 project.env 이라는 파일에 나타나면 실제 시크릿을 보고하는 것이 많은 것이라고 가정할 수 있습니다.

파일 이름은 우리가 고려하는 것의 하나로 GitGuardian Secrets Detection Engine에서 Pre- and Post Validation을 하며 플랫폼 내부로 들어가는 것과 FP remover를 이용하여 ложных 陽性 결과를 제거하는 하나의 요인입니다.

11. 사람들은 진짜로 수동 코드 검수를 하여 비밀을 발견하는가?

예. 우리가 조사한 IT 결정자 중 27%는 수동 코드 검수를 비밀 sprawl 를 矫正하기 위해 依存하고 있음을 말했습니다. 75%가 비밀 leak 에 영향받았다고 말했지만.

Secrets Sprawl가 이러한 문제를 인간이 이러한 문제를 발견하는 것에 依存하는 것의 문제를 보여주기 위해 設計되었습니다. 기계는 수천 또는 수百万의 코드 行에 대해 패턴 매칭을 做得更好.

DEF CON이 모두 bout 는 것은 함께 배우는 것입니다

DEF CON에서 우리는 수분을 지키는 것, 每一晚에 至少有几小时의 수면을 보다, 外에서 110°F/43°C가 되면 내려가는 것 등 많은 수의 教訓을 习得했습니다.

스케쥴에 许多 素晴らしい 讲演이 있었습니다; 우리는 视频가 사용 가능하게 되면 教言之 讲演을 보러 가는 것을 기대하고 있습니다 Secrets Sprawl에 대한 것을 지어주는 동안 실제로 错过的. 이러한 과정에서, 우리는 보안 사람들, 開発자, 일반인이 이 문제를 어떻게 seen 하고 솔루션을 생각하는지 许多 것을 배웠습니다 GitGuardian은 이러한 教訓을 모아 이러한 문제를 해결하는 것을 모두에게 更容易하고 일상적으로 简単하게 만들기 위해 Hope to incorporate those lessons.

DEF CON을 가지지 않은 적이 있다면, 우리는 그것을 전혀 추천하지 않습니다, 그러나 다른 사유가 없이 AppSec Village에 참여하고 해커 여름 캠프에서 你们의 部族를 찾기 위해서입니다.


Source:
https://dzone.com/articles/secrets-security-at-appsec-village-at-def-con-32