パブリック GitHub リポジトリにコミットされた API キー、AWS シークレット、またはストライプ ライブ トークン: 60 秒での自動ボット スクレイピング、即時のキー ローテーション、および請求の Kill-Switch¶
走った瞬間 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 Firehose がすべてのパブリックをストリーミングします。 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)そして 2 番目の非表示 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["パブリック GitHub / GitLab リポジトリにコミットされた Live Secret (.env、ソース コード、または git 履歴)"] --> B["2 番目の 0 ~ 30: 最初に git rm を実行しないでください。クラウド/API プロバイダー コンソールを開いて、すぐにキーを取り消します"]
B --> C{"どの種類のライブ認証情報が公開されましたか?"}
C -->|"1. AWS アクセスキー (AKIA... / ASIA...)"| D["1. IAM でキーを非アクティブ化/削除する 2. インライン「すべて拒否」ポリシーをユーザーにアタッチする (ミントされた STS トークンを強制終了する) 3. バックドア IAM ユーザーの CloudTrail を監査する"]
C -->|"2. ストライプライブ秘密鍵 (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. DB パスワードを直ちに更新します 2. pg_terminate_backend() / KILL を実行してアクティブな接続をドロップします 3. セキュリティ グループを VPC IP のみにロックダウンします"]
D --> H["マルチリージョンのコンピューティング スイープの実行 (30 以上のリージョンすべてで不正な 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 Secret Scan は自動的にそれを取り消しますか? | 30 秒間の即時キルスイッチ手順 | チェックする非表示の攻撃者の永続ベクトル (Critical.) |
不正な API 呼び出しを監査する場所 |
|---|---|---|---|---|
1.アマゾン ウェブ サービス (AKIA... IAMキー / ASIA... STS トークン) |
自動取り消しなし: GitHub が 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 終了したマイナーを再生成する起動テンプレート / Auto Scaling グループ。 |
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 Scan と提携して自動ロールします sk_live_ でキーが検出されました main, ただし、base64 文字列、Gist、または非標準ファイル内に隠されたキーは、自動取り消しをすり抜けてしまう可能性があります。 |
1. に移動dashboard.stripe.com/apikeys2. ** をクリックします ... -> ロールキー3.** を選択してください Block old key immediately (Now) (never select a 12h/24h grace period.)。 |
悪意のある Webhook エンドポイント: 攻撃者は漏洩した Web フックを使用します。 sk_live_ 電話をかけるためのキー POST /v1/webhook_endpoints、独自のサーバー URL を登録して、API キーをロールした後でも、将来のすべての顧客のチェックアウトおよびカード イベントのコピーをサイレントに受信します。 |
ストライプ ダッシュボード -> 開発者 -> ログ (filter by IP address and HTTP method POST/DELETE) + 開発者 -> Webhook (delete any unrecognized URLs)。 |
3. Google Cloud サービス アカウント 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. OpenAI (sk-proj-...)、人類(sk-ant-...)、&ハグフェイス(hf_...) |
OpenAI / Anthropic: GitHub と提携して、標準の平文プッシュを自動取り消します (usually within 30 to 120 seconds)、その間もボットは数千の並列処理を実行できます。 gpt-4o / claude-3-5-sonnet リクエスト。 |
1. のキーを削除します。 platform.openai.com/api-keys または console.anthropic.com/settings/keys2. 毎月の支出制限の下限 ( Hard Cap) 請求設定で実行中の並列ストリームを停止します。 |
組織管理者キー (sk-admin-...): OpenAI Admin API キーが漏洩した場合、ボットはプログラムで POST /v1/organization/admin_api_keys 最初のプロジェクト API キーを取り消す前に、新しいプロジェクト API キーを作成します。組織内のすべてのキーを監査します。 |
OpenAI / Anthropic 使用状況ダッシュボード (check activity by API key and model tier)。 |
5. GitHub パーソナル アクセス トークン (ghp_... / github_pat_...) または NPM トークン (npm_...) |
はい (Instant): GitHub は自動的に ghp_ または github_pat_ トークンは、パブリック 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)、次の 4 つの手順をすべて実行する必要があります。 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 ユーザーを作成したかどうか、または期間中に既存の従業員アカウントの 1 つにセカンダリ アクセス キーをアタッチしたかどうかを確認します。
# 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。権限のないユーザー、ロール、およびキー ペアをすべて直ちに削除します。
ステップ 3: すべてをスイープする 30+ 不正な EC2 インスタンス、Auto Scaling グループ、Bedrock/SageMaker ジョブの AWS リージョン¶
なぜ被害者は依然として報奨金を受け取るのか $12,000 「EC2 ダッシュボードをチェックしたところインスタンスがゼロだった」後、月末に請求されるのでしょうか? AWS コンソールには 一度に 1 つのリージョンしか表示されないため (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 グループ/スポット リクエストを最初に削除してから、インスタンスを終了します。
- 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 Cloud Platform (GCP) 個々の開発者、学生、新興企業向けに 1 回限りの偶発的な認証情報漏洩の請求調整/優待クレジット ポリシーを社内に確立しています。完了している場合に限ります。 100% Billing Review チームがあなたの申し立てを評価する「前に」、必須のセキュリティ修復チェックリストを作成します。
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 ボリューム、Elastic 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)。 - 1 回限りの特別料金調整を丁寧にリクエストしてください: あなたが個人の開発者/学生/初期段階のスタートアップであることを説明し、
$18,420不正なボットの請求は深刻な経済的困難を引き起こす可能性があり、不正使用に対する 1 回限りの礼儀請求クレジット/免除が求められます。
- タイムラインと原因を確認する: キーがいつ GitHub で誤って公開されたかを明確に述べてください (
- 自動請求が迫っている場合は、リンクされている支払いカードを一時的に交換または制限してください:
- AWS 請求サポートのケースが審査中である間 (
which usually takes 5 to 15 business daysAWS セキュリティ チームと請求サービス チームがすべての不正なリソースが終了していることを確認する間)、チケット内で AWS サポートに連絡し、請求を一時的に保留するよう依頼してください (defer auto-charge) を異議のある請求書に記載することで、信用調整の処理中に銀行口座が貸越されないようにします。
- AWS 請求サポートのケースが審査中である間 (
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 すべての訪問者の Web ブラウザに提供されるファイル (where bots scrape it directly from your live production website in seconds)。 公開/公開可能 キーのみ (like Stripe pk_live_... または HTTP リファラー / 行レベルのセキュリティによって制限されている 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)、FBI 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 フロー ログへの不正アクセスを法医学的に除外できない場合は、以内に監督機関に通知してください。 72 hours。 |
| イギリス | 英国 GDPR および 2018 年データ保護法 | 情報コミッショナー室 (ICO: 0303 123 1113) & NCSC (ncsc.gov.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`。 2 分後に [設定] -> [リポジトリの可視性を変更] -> [非公開] をクリックした時点で、数十の自動スクレイパー ボットがすでにコミットの差分をダウンロードし、悪用のために 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` アクセスの最初の 1 秒間で、2 番目の隠されたバックドア管理者アカウントが植え付けられます。アクティブな AWS 侵入を完全に停止するには、 `AKIA` キー、明示的なキーをアタッチします `Deny *` 侵害された IAM ユーザーに対するインライン ポリシー (`which immediately invalidates all minted STS tokens`)、新しく作成された IAM ユーザーまたはロールの CloudTrail を監査します。
AWS または Google Cloud は大規模なサービスを許すでしょうか? $10,000+ ハッカーが GitHub から私の API キーを盗んで暗号通貨をマイニングした場合に請求しますか?¶
初めての偶発的漏洩のほとんどは、迅速に行動し、セキュリティ チームと完全に協力し、請求書を無視しない限り、そうです。 AWS と Google Cloud はどちらも、不正な認証情報漏洩の急増に見舞われた開発者や中小企業向けに、社内で 1 回限りの特別料金調整ポリシーを設けています。 「アカウントと請求」サポートに基づく請求免除をリクエストする前に、まず漏洩が 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_スコープ。 - NIST (
Special Publication 800-61 Rev. 2 / Rev. 3: Computer Security Incident Handling Guide) & OWASP (Secrets Management Cheat Sheet): 資格情報の封じ込め、一時的な OIDC Workload Identity Federation (replacing static CI/CD keys)、およびコミット前のシークレット スキャン。