API 金鑰、AWS 機密或 Stripe Live 令牌已提交至公用 GitHub 儲存庫:60 秒內自動抓取機器人、立即金鑰輪替和計費終止開關¶
奔跑的那一瞬間 git push 到公共 GitHub、GitLab 或 Bitbucket 儲存庫(or temporarily flip a private repository to "Public" for even 10 seconds)當一個文件時, .env 配置,Jupyter 筆記本(.ipynb),或較舊的 Git 提交歷史記錄包含即時金鑰(such as an AWS Access Key ID starting with AKIA, a Stripe Live Secret Key sk_live_, an OpenAI key sk-proj-, an Anthropic key sk-ant-, or a Google Cloud service account .json),由自動憑證收集機器人組成的全球網路會在 2 到 60 秒內攔截該秘密。因為GitHub是公開的 Events API, GH Archive,以及即時 webhook firehoses 串流每個公眾 PushEvent 在全球範圍內,惡意抓取機器人會使用正規表示式解析您的差異,並在您鍵入之前開始執行自動化雲端命令 git revert。
內90 seconds 的 AWS 或 GCP 秘密攻擊公共倉庫,自動殭屍網路啟動最大尺寸的 GPU/CPU 執行個體(such as p4d.24xlarge or c6i.32xlarge 跨越模糊的區域,例如 ap-east-1 香港、 me-south-1 巴林,或 sa-east-1 聖保羅)開採門羅幣(XMR), 請求 AWS Simple Email Service (SES)配額增加以打擊網路釣魚垃圾郵件,或複製您的私人郵件 S3 水桶和 RDS 資料庫,生成$5,000 to $80,000+ 隔夜雲端運算帳單。同樣,洩漏的 OpenAI 或 Anthropic API 金鑰立即捆綁到地下「反向代理」LLM 市場,每分鐘消耗數千美元的代幣積分,同時洩露 Stripe 即時密鑰(sk_live_...)授予攻擊者完整的程式讀取/寫入存取權限,以發出欺詐性退款、匯出客戶 PII,或觸發未經授權的 Connect 付款。如果攻擊者在使用您洩漏的密鑰竊取客戶資料庫後主動勒索您的組織,請透過我們的 緊急號碼 立即目錄,並查看我們的相關指南 意外的生產資料庫遺失、git 強制推送和秘密洩漏分類, 生產資料庫被刪除或 S3 儲存桶在沒有最近備份的情況下被刪除, 和 緊急遠距工作安全與資料隱私。
現在就這樣做¶
- 不要浪費你跑步的前 60 秒
git rm .env或git push --force:直接前往提供者控制台(AWS IAM,Stripe,OpenAI,GCP)並撤銷/停用密鑰< 30 SECONDS. 在新的 Git 提交中刪除檔案 (or even making the GitHub repository Private)什麼也無法阻止 10 秒前已經從 GitHub Events Firehose 中抓取您的金鑰的機器人。必須先從源頭殺死密鑰本身。 - 如果
AWS關鍵(AKIA...或ASIA...)洩漏: 打開AWS IAM -> Users -> Security credentials並立即按一下存取金鑰上的 停用/刪除,然後附加AWSCompromisedKeyQuarantineV2(or a blanket拒絕 *inline policy) 到 IAM 用戶並增加該用戶的RevokeOldSessions政策殺死任何臨時工STS攻擊者已經鑄造的代幣(see the exact STS bypass trap below)。 - 如果
Stripe即時密鑰(sk_live_...或rk_live_...)洩漏: 前往dashboard.stripe.com/apikeys,點擊...-> 滾動密鑰,並將舊密鑰的過期時間設定為**“現在(Immediately)"** (NOT "in 24 hours")。立即檢查Stripe Dashboard -> Logs和Balance -> Payouts / Refunds用於未經授權的 API 呼叫。 - 如果
OpenAI,Anthropic,Google Gemini, 或SendGrid / Twilio金鑰洩漏: 立即刪除提供者儀表板中的 API 金鑰並設定 每月硬性支出限制 ($0或您的正常上限) 在計費設定中切斷正在進行的串流媒體請求。 - **掃描所有雲端區域(
especially disabled/opt-in regions)針對惡意 EC2 執行個體、Lambda 函數、ECS 任務、S3 儲存桶以及機器人在 2 分鐘暴露視窗期間建立的後門 IAM 使用者。 ** 攻擊者專門在您從未在控制台中點擊的區域中啟動加密貨幣挖掘實例(like Stockholm eu-north-1, Osaka ap-northeast-3, or Mumbai ap-south-1)並建立第二個隱藏 IAM 使用者(or SSH key pair),這樣在您刪除洩漏的金鑰後,他們就可以留在您的帳戶中。 - **僅在秘密被撤銷並且後門 IAM 帳戶被清除之後,才從 Git 中清除提交(
using git-filter-repo) 並聯絡 GitHub 支援 (or remove cached PR/commit views)以清除懸空提交 SHA 緩存,然後在機器人產生大量雲端帳單時提交 AWS / GCP 意外洩漏計費豁免請求。 **
Danger
為什麼要刪除洩漏的內容 AKIA 鍵入 AWS IAM 還不夠(The STS GetSessionToken Persistence Trap). 以內 5 seconds 刮掉你的靜電 AKIA... 來自 GitHub 的 AWS IAM 存取金鑰,複雜的自動化殭屍網路不僅僅使用您的裝置啟動 EC2 執行個體 AKIA 鑰匙;他們的第一個 API 呼叫是 sts:GetSessionToken 或 sts:AssumeRole,這會鑄造一個臨時ASIA... 安全令牌服務(STS) 會話令牌的有效期限最長為 12 to 36 hours。即使刪除了原來的內容 AKIA... IAM 控制台中的存取金鑰,任何臨時的 ASIA... 在那一刻之前鑄造的 STS 代幣保持 100% 活躍和有效,除非您還附加明確的 Deny All 內嵌策略 (with a Condition checking aws:TokenIssueTime < CurrentUTC)到受感染的 IAM 使用者及其可能承擔的每個角色。
決策樹:按洩密類型劃分的 60 秒緊急回應¶
按照此事件遏制流程圖來消除受損的憑證,切斷攻擊者的持久性,並扭轉失控的雲端計費。
flowchart TD
A["Live Secret 已提交至公開 GitHub / GitLab Repo(.env、原始碼或 git 歷史記錄)"] --> B["第二個 0 到 30:不要先執行 git rm。開啟雲端/API 提供者控制台並立即撤銷金鑰"]
B --> C{"哪種類型的即時憑證被揭露?"}
C -->|"1. AWS 存取金鑰(AKIA.../ASIA...)"| D["1. 停用/刪除 IAM 中的金鑰 2. 將內聯「全部拒絕」策略附加到用戶(殺死鑄造的 STS 令牌) 3. 審核 CloudTrail 是否存在後門 IAM 用戶"]
C -->|"2. Stripe Live 密鑰 (sk_live_... / rk_live_...)"| E["1. 捲動金鑰,過期 =「立即」 2. 檢查 /v1/refunds、/v1/transfers 和 Webhook 端點 3. 評估客戶 PII 暴露"]
C -->|"3. OpenAI (sk-proj-...)、Anthropic (sk-ant-...) 或 Gemini Key"| F["1. 撤銷開發者控制台中的金鑰 2. 暫時將組織硬計費上限降低至 0 美元 3. 檢查使用日誌以了解令牌消耗情況"]
C -->|"4. 資料庫 URI(postgres://、mongodb+srv://)或 Redis URL"| G["1. 立即輪換資料庫密碼 2. 執行 pg_terminate_backend() / KILL 以刪除活動連線 3. 僅將安全群組鎖定至 VPC IP"]
D --> H["執行多區域計算掃描(終止所有 30 多個區域中的 Rogue EC2/EKS/SageMaker/Lambda)"]
E --> I["透過「git filter-repo」清除 Git 歷史記錄 + 清除 GitHub 快取的提交 SHA 視圖"]
F --> I
G --> I
H --> J{"自動化機器人是否會產生 1,000 至 100,000 美元以上的雲端帳單?"}
J -->|"是的"| K["開啟 AWS/GCP 帳單支援案例 -> 提交補救後安全審核 + 請求一次性禮節性詐欺/洩漏帳單寬恕"]
J -->|"否"| I
第 1 部分:逐一提供者的終止開關和取證矩陣(First 5 Minutes)¶
使用此參考表可以找到準確的撤銷按鈕、自動 GitHub 秘密掃描行為以及洩漏憑證的隱藏持久向量。
| 憑證類型和前綴模式 | GitHub 秘密掃描會自動撤銷嗎? | 立即 30 秒終止開關程序 | 要檢查的隱藏攻擊者持久性向量(Critical.) |
在哪裡審核未經授權的 API 呼叫 |
|---|---|---|---|---|
1.亞馬遜網路服務(AKIA... IAM 金鑰 / ASIA... STS 代幣) |
無自動撤銷: GitHub 通知 AWS,AWS 將開啟一個自動 AWS 支援案例 (Compromised Key Quarantine) 並附上 AWSCompromisedKeyQuarantineV2,經常 3 to 15 minutes 之後機器人已經發動攻擊。 |
1. IAM -> Users -> [User] -> Security credentials -> Deactivate & Delete2. 新增內嵌策略: Effect: Deny, Action: "*", Resource: "*"(kills active STS tokens)。 |
1. 臨時 STS 代幣(ASIA...)2. 新建立的 IAM 使用者/存取金鑰 3. 後門 IAM 角色 與外部 Principal 信託政策4. EC2 啟動模板/自動擴展組,重生已終止的礦工。 |
AWS CloudTrail -> 事件歷史記錄 (Filter by User name = compromised IAM user 或 Event source = sts.amazonaws.com / iam.amazonaws.com)。 |
2. Stripe Live 秘密/受限密鑰 (sk_live_... / rk_live_...) |
是(經常): Stripe 與 GitHub Secret Scanning 合作自動滾動 sk_live_ 偵測到的按鍵 main,但是隱藏在 base64 字串、要點或非標準檔案中的金鑰可能會錯過自動撤銷。 |
1. 前往 dashboard.stripe.com/apikeys2. 點選 ... -> 捲動鍵3. 選擇 Block old key immediately (Now)(never select a 12h/24h grace period.)。 |
惡意 Webhook 端點: 攻擊者使用您洩露的信息 sk_live_ 呼叫鍵 POST /v1/webhook_endpoints,註冊自己的伺服器 URL,即使在您捲動 API 金鑰後,也可以靜默接收所有未來客戶結帳和卡片事件的副本。 |
Stripe 儀表板 -> 開發人員 -> 日誌 (filter by IP address and HTTP method POST/DELETE) + 開發人員 -> Webhooks (delete any unrecognized URLs)。 |
3. Google 雲端服務帳戶 JSON ("private_key_id", AIza... API 金鑰) |
部分: GCP 提醒專案擁有者(and optionally disables keys if Organization Policy is enabled),但在發送電子郵件警告時經常保持該鍵處於活動狀態。 |
1. GCP Console -> IAM & Admin -> Service Accounts2. 點選服務帳戶 -> 金鑰標籤 -> 刪除洩漏的金鑰 ID。 3. 暫時停用整個服務帳戶。 |
1. 由洩漏的金鑰產生的新服務帳戶金鑰 2. Compute Engine GPU 執行個體 ( A100/H100/T4)在外國地區旋轉3. 修改 專案 IAM 策略綁定 ( roles/owner 或 roles/editor)。 |
GCP 雲端審核日誌 (Logs Explorer) 使用查詢:protoPayload.authenticationInfo.principalEmail="<service-account-email>" |
4.開放人工智慧(sk-proj-...), 人擇 (sk-ant-...), & 擁抱臉 (hf_...) |
OpenAI / Anthropic: 與 GitHub 合作自動撤銷標準明文推送(usually within 30 to 120 seconds),在此期間機器人仍可並行發射數千個 gpt-4o / claude-3-5-sonnet 請求。 |
1. 刪除key中的key platform.openai.com/api-keys 或 console.anthropic.com/settings/keys2. 降低 每月支出限額 ( Hard Cap) 在計費設定中停止正在進行的並行流。 |
組織管理員金鑰(sk-admin-...): 如果 OpenAI Admin API 金鑰洩露,機器人可以透過程式調用 POST /v1/organization/admin_api_keys 在撤銷第一個之前建立全新的專案 API 金鑰。審核組織中的所有金鑰。 |
OpenAI / Anthropic 使用儀表板 (check activity by API key and model tier)。 |
5. GitHub 個人存取權杖 (ghp_... / github_pat_...) 或 NPM 代幣 (npm_...) |
是(Instant): GitHub 自動撤銷任何 ghp_ 或 github_pat_ token 在被推送到公共 GitHub 儲存庫的瞬間。 |
如果推送到非 GitHub 主機(GitLab, Bitbucket, Pastebin, or Slack),在 ** 處手動撤銷github.com/settings/tokens**(or npmjs.com -> Access Tokens)。 |
供應鏈惡意軟體注入: 攻擊者使用您的 ghp_ 或 npm_ 令牌將立即將惡意後門提交推送到您的私人儲存庫,並添加流氓 部署金鑰/GitHub 操作工作流程(pull_request_target),或發布 NPM 套件的木馬版本。 |
GitHub 設定 -> 安全日誌 (audit repo.create, hook.create, org.add_member, and oauth_authorization)。 |
第 2 部分:深入探討:如何將攻擊者從您的 AWS 帳戶中驅逐(The 4-Step Cloud Eviction Protocol)¶
因為洩漏了 AWS 憑證具有最高的金融爆炸半徑(up to $50,000+ per day in EC2/SageMaker/Bedrock bills),每當出現以下情況時,您都必須執行以下所有四個步驟 AKIA... 或 ASIA... 密鑰命中公共儲存庫:
+-----------------------------------------------------------------------------+
| ANATOMY OF A 60-SECOND AUTOMATED AWS GITHUB SCRAPER BOT ATTACK |
+-----------------------------------------------------------------------------+
| |
| [ SEC 00 ] Developer runs 'git push origin main' with .env (AKIA...) |
| | |
| [ SEC 04 ] Bot scrapes GitHub Events API Firehose -> Extracts AKIA key |
| | |
| [ SEC 06 ] Bot calls 'sts:GetCallerIdentity' & 'sts:GetSessionToken' |
| | (Mints temporary ASIA... token that survives AKIA deletion.) |
| v |
| +----+------------------------------------------------------------------+ |
| | [ SEC 15 TO 90: PARALLEL MULTI-REGION EXPLOITATION ] | |
| | 1. Persistence: Calls 'iam:CreateUser' / 'iam:CreateAccessKey' | |
| | (Creates hidden user 'aws-support-backup' with AdministratorAccess)| |
| | 2. Compute Abuse: Launches Auto-Scaling Groups of c6i.32xlarge / | |
| | g5.48xlarge in 12 regions + AWS Bedrock / SageMaker LLM endpoints | |
| | 3. Spam Abuse: Calls 'ses:PutAccountSendingAttributes' (50k emails) | |
| | 4. Data Exfiltration: Lists & downloads S3 buckets / RDS snapshots | |
| +-----------------------------------------------------------------------+ |
+-----------------------------------------------------------------------------+
第 1 步:消除靜電 AKIA 鑰匙和全部鑄造 ASIA 會話令牌¶
刪除 AKIA AWS 控制台中的金鑰不會使暫時失效 STS 已核發的憑證 sts:GetSessionToken。透過 AWS CLI 立即終止所有內容 (using a separate clean admin profile):
# 1. Delete the compromised Access Key immediately
aws iam delete-access-key --user-name CompromisedUser --access-key-id AKIAIOSFODNN7EXAMPLE
# 2. Attach an explicit 'Deny All' inline policy to the IAM User to immediately
# invalidate any STS tokens minted by that user AND block all further actions:
aws iam put-user-policy --user-name CompromisedUser --policy-name EmergencyKillSwitch \
--policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Action": "*",
"Resource": "*"
}]
}'
步驟 2:在 CloudTrail 中追蹤後門 IAM 使用者、角色和存取金鑰¶
執行下列 AWS CLI 命令來檢查機器人是否在視窗期間建立了隱藏的後門 IAM 使用者或將輔助存取金鑰附加到您現有的員工帳戶之一:
# List all IAM users created recently across the account
aws iam list-users --query 'Users[?CreateDate>=`2026-10-30`].[UserName,CreateDate]' --output table
# Audit CloudTrail for every API call made by the compromised user in the last 24 hours
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=Username,AttributeValue=CompromisedUser \
--max-results 50 \
--query 'Events[].[EventTime,EventName,EventSource]' --output table
CreateUser, CreateAccessKey, CreateLoginProfile(gives the bot an AWS Console password), AttachUserPolicy, CreateRole, UpdateAssumeRolePolicy 和 ImportKeyPair。立即刪除所有未經授權的使用者、角色和金鑰對。
第三步:掃全部 30+ Rogue EC2 執行個體、Auto Scaling 群組和 Bedrock/SageMaker 作業的 AWS 區域¶
為什麼受害者仍然收到 $12,000 他們“檢查 EC2 儀表板並看到零實例”後在月底帳單?因為AWS控制台一次只顯示一個區域(e.g., us-east-1),當機器人旋轉時 20 ** 中的實例ap-south-1 (Mumbai), eu-north-1 (Stockholm),以及 sa-east-1 (Sao Paulo)**,並將它們隱藏在 EC2 Auto Scaling 群組中 (ASGs) 這樣,如果您手動終止 EC2 實例,Auto Scaling 群組會啟動替換實例 30 seconds 稍後。
執行此多區域 bash 單行命令以列出 每個活動 AWS 區域中所有正在執行或掛起的 EC2 執行個體 10 seconds:
for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
echo "=== Checking Region: $region ==="
aws ec2 describe-instances --region "$region" \
--filters "Name=instance-state-name,Values=running,pending,stopped" \
--query 'Reservations[].Instances[].[InstanceId,InstanceType,State.Name,LaunchTime]' \
--output table
done
EC2 -> Auto Scaling Groups(and EC2 Spot Fleet Requests / ECS Clusters / EKS Node Groups / SageMaker Notebook & Training Jobs)在每個受影響的區域中,並首先刪除 Auto Scaling 群組/Spot 請求,然後終止實例。
- 檢查 AWS Bedrock (Model Invocation Logging) 和 Amazon SES: 現代憑證取得機器人現在立即呼叫 AWS Bedrock (Claude 3.5 Sonnet / Llama 3) 使用您竊取的 AWS 憑證轉售 LLM 令牌 (which does not show up under EC2 at all)。檢查 AWS Cost Explorer (Group by: Service 和 Group by: Region) 發現任何異常的服務峰值。
第 3 部分:從 Git 歷史中探尋秘密 (git-filter-repo) & 清除 GitHub 的隱藏提交緩存¶
一旦憑證在提供者層級失效,您必須從儲存庫中刪除秘密字串 .git 提交歷史記錄,這樣同事和未來的抓取者都看不到它(and so GitHub's Push Protection stops blocking your branches)。
1. 為什麼 git rm .env + git commit 不會從 Git 中刪除秘密¶
跑步 git rm .env && git commit -m "remove env" 僅從 最新提交中刪除文件(HEAD);明文秘密在父親提交中保持永久可讀(the parent commit) 發送給在 GitHub 上按一下「提交」的任何人。
2. 使用乾淨地重寫儲存庫歷史記錄 git-filter-repo¶
- 如果只有最後一次提交(
HEAD)包含秘密(and nobody else has pulled it yet): - 如果秘密被埋藏在你的歷史記錄中(
or inside a code file you want to keep): 使用git-filter-repo(the official, fast replacement recommended by Git and GitHub instead of the deprecated git filter-branch):# Option A: Completely purge a file (.env) from every commit in history git filter-repo --path .env --invert-paths --force # Option B: Replace a specific secret string with '***REMOVED***' across all files in history echo "sk_live_51NzExampleSecretKey12345==>***REMOVED***" > expressions.txt git filter-repo --replace-text expressions.txt --force # Force-push the rewritten history to GitHub across all branches and tags git push origin --force --all git push origin --force --tags
3. 隱藏的 GitHub 緩存陷阱 (Dangling Commit SHAs)¶
即使你跑了之後 git filter-repo 和 git push --force, GitHub 的 Web 伺服器仍然保留舊的、未引用的(「懸空」)提交 SHA 並可在以下位置公開訪問 https://github.com/<owner>/<repo>/commit/<old-40-char-sha>(and in any forks or Pull Requests)直到垃圾收集運行。
- 如何立即清除 GitHub 上快取的提交 SHA:
1. 複製完整的 40-character 在重寫歷史記錄之前提交洩漏提交的 SHA。
2. 開放https://support.github.com/contact -> 要求 「刪除敏感資料/清除儲存庫中無法存取的提交 SHA 的快取視圖」 owner/repo 並提供準確的提交 SHA (or use the GitHub Support portal's automated cache-purge workflow)。
第 4 部分:如何獲得 $5,000 to $100,000+ AWS 或 GCP 機器人帳單豁免 (The Courtesy Forgiveness Appeal)¶
如果你推了一個怎麼辦 .env 週五下午提交文件,直到週一早上才查看電子郵件,醒來時發現$28,400.00 AWS 或 Google Cloud 的帳單來自加密貨幣挖礦或 LLM 代理機器人?
**不要驚慌,也不要取消您的信用卡或提交銀行退款。 ** 兩者 Amazon Web Services (AWS) 和 Google 雲端平台 (GCP) 為個人開發者、學生和新創公司製定了內部 一次性憑證洩漏計費調整/禮貌信用政策,前提是您完成 100% 在他們的計費審核團隊評估您的申訴之前*查看他們的強制性安全補救檢查清單。
5 步驟 AWS / GCP 帳單豁免協議 (90%+ Success Rate for First-Time Leaks)¶
- 首先完成每個安全補救步驟(
AWS Will Reject Your Waiver Until the Account Is Clean):- 刪除受損的 IAM 存取金鑰 (
and the IAM User if possible)。 - 終止所有區域中每個未經授權的 EC2 執行個體、Auto Scaling 群組、EBS 磁碟區、彈性 IP、RDS 執行個體和 S3 儲存桶(
verify via AWS Cost Explorer and AWS Billing -> Bills -> Charges by Region that daily accrual has dropped back to $0.00)。 - 啟用硬體或身份驗證器應用程式 MFA (
Multi-Factor Authentication) 在您的 AWS 根帳戶 和每個 IAM 使用者上。
- 刪除受損的 IAM 存取金鑰 (
- 在下面打開一個支援案例
"Account and Billing"(Free for All AWS/GCP Tiers, No Paid Support Plan Required):- 前往
console.aws.amazon.com/support/home-> 建立案例 -> 帳戶和帳單 -> 服務:帳單 -> 類別:對費用/受損帳戶提出爭議。
- 前往
- 提交這份準確的事實補救和困難摘要:
- 確認時間軸和原因: 明確說明密鑰何時在 GitHub 上意外暴露(
e.g., "October 30 at 22:14 UTC")以及何時被撤銷("October 31 at 09:05 UTC")。 - 按地區和服務逐項列出未經授權的費用: 列出欺詐性機器人活動與您正常的歷史每月賬單的確切金額(
e.g., "My normal monthly AWS bill for the past 8 months is $14.50/month in us-east-1; the unauthorized charges total $18,420.12 across ap-east-1, eu-north-1, and sa-east-1 EC2/Bedrock usage")。 - 確認 100% 修復: 明確指出您已完成的具體步驟(
1. Deleted IAM key AKIA...; 2. Terminated all unauthorized resources across all regions; 3. Audited CloudTrail for backdoor users; 4. Enabled Root & IAM MFA; 5. Configured AWS Budgets alerts)。 - 禮貌地要求一次性優惠帳單調整: 說明您是個人開發者/學生/早期新創公司,需要支付
$18,420未經授權的機器人帳單將導致嚴重的財務困難,並要求針對欺詐性使用提供一次性禮節性帳單信用/豁免。
- 確認時間軸和原因: 明確說明密鑰何時在 GitHub 上意外暴露(
- 如果即將自動計費,請暫時交換或限制您的關聯支付卡:
- 當您的 AWS Billing Support 案件正在接受審核時(
which usually takes 5 to 15 business days當 AWS 安全性和計費服務團隊驗證所有惡意資源是否已終止時),請聯絡票證內的 AWS 支援並要求他們暫時暫停計費(defer auto-charge) 在有爭議的發票上,以便在處理信用調整時不會透支您的銀行帳戶。
- 當您的 AWS Billing Support 案件正在接受審核時(
Warning
為什麼您絕對不能在客戶端程式碼中對金鑰進行硬編碼(NEXT_PUBLIC_, VITE_, REACT_APP_、行動應用程式或 Chrome 擴充功能)。 ** 即使您的 GitHub 儲存庫是 100% 私有,放置秘密 API 金鑰(like an OpenAI, Stripe secret, or AWS key) 在前綴為 ** 的前端環境變數中NEXT_PUBLIC_, VITE_,或REACT_APP_ 將明文金鑰直接捆綁到公用 JavaScript 中 .js 提供給每個訪客的網路瀏覽器的檔案(where bots scrape it directly from your live production website in seconds)。僅公共/可發布密鑰(like Stripe pk_live_... 或受 HTTP Referrer/行級安全性限制的 Firebase 用戶端設定)可能會觸及前端程式碼。
Tip
安裝 gitleaks 或 trufflehog 在 60 秒內作為本地預提交掛鉤 (So git Refuses to Commit a Secret Ever Again). 為了使物理上不可能意外犯下 .env 再次在筆記型電腦上安裝檔案或 API 金鑰,安裝 gitleaks(brew install gitleaks)並添加一個 .pre-commit-config.yaml 鉤子(or turn on GitHub's free **"Push Protection for yourself"** at **github.com/settings/security_analysis**)。啟用推播保護後,GitHub 的伺服器會檢查您的 git push 在傳輸過程中,每當偵測到可識別的關鍵模式時,在推送到儲存庫之前拒絕推送。
(有關開發人員和遠端工作安全事件,請參閱 生產資料庫意外遺失、git 強制推送、秘密洩漏和事件分類, 生產資料庫已被刪除或 S3 儲存桶在最近沒有備份的情況下被刪除, 意外透過電子郵件發送機密薪資、客戶 PII 或 HIPAA 電子表格, 和 緊急遠距工作安全與資料隱私.)
區域資料外洩和雲端安全報告機構¶
| 地區/國家 | 雲端入侵和資料外洩通知法 | 官方網路事件和監管機構 | 當洩漏的 GitHub 金鑰需要強制監管報告時 |
|---|---|---|---|
| 美國 | FTC 保障規則(16 CFR Part 314), SEC 網路安全規則 (Form 8-K Item 1.05)、HIPAA 和 50 個州資料外洩通知法規 |
CISA(cisa.gov/report / 1-844-SAY-CISA), 聯邦調查局 IC3 (ic3.gov)、HHS OCR 和 州總檢察長 |
如果 CloudTrail 或 Stripe 日誌顯示外部 IP 使用您外洩的金鑰進行 GetObject 或匯出未加密的客戶 PII、社會安全號碼或付款記錄(rather than purely mining crypto on empty EC2 instances),適用州違規通知法。 |
歐盟(EEA) |
GDPR(Articles 33 & 34) & NIS2 指令 (Directive (EU) 2022/2555) |
國家資料保護局(CNIL, BfDI, DPC) & 國家電腦安全事件回應小組 (CSIRT) (ENISA) |
嚴格 72-Hour 時鐘(GDPR Art. 33): 如果洩漏的憑證具有對 EU 個人資料的讀取存取權限,且您無法透過取證排除 CloudTrail/VPC Flow Logs 中未經授權的訪問,請在 72 hours。 |
| 英國 | 2018 年英國 GDPR 與資料保護法 | 資訊專員辦公室(ICO: 0303 123 1113) 和 NCSC (ncsc.gov.uk) |
報告 UK ICO 內未經授權的個人資料訪問 72 hours 使用 ICO 的線上違規評估入口網站;記錄您的金鑰輪替和 IAM 隔離步驟。 |
| 加拿大、澳洲和紐西蘭 | 加拿大 PIPEDA澳大利亞 Privacy Act 1988 (NDB Scheme)紐西蘭 Privacy Act 2020 |
OPC(Canada), OAIC 和 ACSC (Australia: 1300 CYBER1), & OPC (New Zealand) |
如果憑證暴露確實造成重大損害的風險,則應報告(RROSH 在加拿大)或符合條件的資料外洩(Australia OAIC)涉及個人資訊。 |
常見問題¶
如果我意識到我推了一個 .env 檔案到公用 GitHub 儲存庫並在 2 分鐘後將該儲存庫設為私有,我還需要輪換金鑰嗎?¶
是的,該文件中 100% 的密鑰必須被視為已洩露並立即撤銷。自動憑證收集機器人不會等待 Google 為您的儲存庫建立索引;他們直接訂閱 GitHub 的即時公眾號 `Events API` 消防水帶(`and GH Archive`),向每個公眾廣播 `PushEvent` 全球範圍內 1 到 3 秒內 `git push`。兩分鐘後,當您按一下「設定 -> 更改儲存庫可見性 -> 設為私人」時,數十個自動抓取機器人已經下載了您的提交差異並將您的 AWS、Stripe、OpenAI 和資料庫憑證排隊以供利用。
為什麼即使在我刪除了洩漏的內容之後,機器人仍繼續在我的 AWS 帳戶中啟動 EC2 實例 AKIA 存取密鑰?¶
刪除靜態 `AKIA...` AWS IAM 中的存取金鑰僅停用該特定的永久金鑰;它不會使暫時失效 `ASIA...` 安全令牌服務(`STS`)攻擊者已經使用生成的會話令牌 `sts:GetSessionToken` 或 `sts:AssumeRole` 在刮掉鑰匙後的最初幾秒鐘內(`which remain valid for up to 12 to 36 hours`)。此外,自動 AWS 攻擊腳本通常會調用 `iam:CreateUser` 和 `iam:CreateAccessKey` 在他們訪問的第一秒就植入了第二個隱藏的後門管理員帳戶。若要完全停止活動的 AWS 入侵,您必須刪除 `AKIA` 鍵,附加一個明確的 `Deny *` 受感染的 IAM 使用者的內嵌策略(`which immediately invalidates all minted STS tokens`),並審核 CloudTrail 中任何新建立的 IAM 使用者或角色。
AWS 或 Google Cloud 會原諒大規模的嗎? $10,000+ 如果駭客從 GitHub 竊取了我的 API 金鑰並開採了加密貨幣,我該怎麼辦?¶
在絕大多數首次意外洩漏中,是的,只要您迅速採取行動,與他們的安全團隊充分合作,並且不要忽視發票。 AWS 和 Google Cloud 都針對遭受未經授權的憑證洩漏高峰的開發人員和小型企業制定了內部一次性禮節性計費調整政策。在請求「帳戶和帳單」支援下的帳單豁免之前,您必須先證明洩漏已 100% 關閉:撤銷暴露的 IAM 金鑰、終止所有 30 多個全球區域中的所有惡意運算實例和 Auto Scaling 群組、啟用多重身分驗證 (`MFA`) 在您的根帳戶上,並設定 AWS Budgets 成本警報。
為什麼會 git rm .env 不從 GitHub 刪除我的金鑰嗎?¶
Git 是一個不可變的版本控制帳本:當你執行時 `git rm .env` 並推送新的提交,Git 只記錄該檔案在最新快照中不存在(`HEAD`),同時保留完整的明文內容 `.env` 永久儲存在先前的提交中(`the parent commit`)在儲存庫的提交歷史記錄中。即使你重寫了你的歷史 `git filter-repo` 和強制推送,如果您沒有在提供者控制台上撤銷它,任何人仍然可以讀取該秘密。始終先在雲端提供者的儀表板中撤銷和輪換密鑰,然後使用 `git filter-repo` 從提交歷史中清除死字串。
相關指南¶
- 生產資料庫意外遺失、git 強制推送、秘密洩漏和事件分類
- 生產資料庫已被刪除或 S3 儲存桶在最近沒有備份的情況下被刪除
- 意外地將機密薪資單、客戶 PII 或 HIPAA 電子表格透過電子郵件發送給錯誤的收件人
- Zoom/Teams 上機密薪資表、密碼管理器或裁員清單的意外畫面共用
- 緊急遠距工作安全與資料隱私
- 緊急電話號碼
來源和官方指導¶
- 亞馬遜網路服務(
AWS Security Incident Response Guide & AWS Knowledge Center: "What should I do if I notice unauthorized activity or exposed IAM access keys?"):AWSCompromisedKeyQuarantineV2政策行為、暫時失效STS會話令牌(RevokeOldSessions)和多區域資源審計。 - GitHub 文件 (
GitHub Secret Scanning, Push Protection, & "Removing sensitive data from a repository" using git-filter-repo): 合作夥伴自動撤銷計劃 (Stripe, AWS, OpenAI, NPM),git-filter-repo歷史重寫和清除無法存取的快取提交 SHA。 - 條紋公司(
Stripe Developer Security Guide: API Key Rotation & Compromised Key Incident Triage): 立即sk_live_金鑰過期、審核/v1/events和/v1/webhook_endpoints,並透過以下方式限制密鑰rk_live_範圍。 - 美國國家標準技術研究所(
Special Publication 800-61 Rev. 2 / Rev. 3: Computer Security Incident Handling Guide) 和 OWASP (Secrets Management Cheat Sheet): 憑證包含、臨時 OIDC 工作負載身分聯合 (replacing static CI/CD keys)和預提交秘密掃描。