API raktas, AWS paslaptis arba „Stripe Live Token“, skirtas viešajam „GitHub“ atpirkimui: automatizuotas roboto iššifravimas per 60 sekundžių, greitas rakto pasukimas ir atsiskaitymo užmušimo perjungimas¶
Tą akimirką, kai pabėgi git push į viešą „GitHub“, „GitLab“ arba „Bitbucket“ saugyklą (or temporarily flip a private repository to "Public" for even 10 seconds) kol failas, .env konfigūracija, Jupyter nešiojamasis kompiuteris (.ipynb) arba senesnėje Git įvykdymo istorijoje yra gyvas slaptasis raktas (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), pasaulinis automatizuotų kredencialų rinkimo robotų tinklas tą paslaptį perima per 2-60 sekundžių. Kadangi „GitHub“ yra viešas Events API, GH Archive, o realaus laiko „Webhook Firehoses“ srautu perduoda kiekvieną viešą informaciją PushEvent Visame pasaulyje kenkėjiški grandikliai analizuoja jūsų skirtumą naudodami reguliariąsias išraiškas ir pradeda vykdyti automatines debesies komandas prieš jums net įvesdami git revert.
Per 90 seconds iš an AWS arba GCP slapta pasiekiant viešąjį atpirkimą, automatiniai robotų tinklai sukuria maksimalaus dydžio GPU/CPU egzempliorius (such as p4d.24xlarge or c6i.32xlarge neaiškiuose regionuose, pvz ap-east-1 Honkongas, me-south-1 Bahreinas arba sa-east-1 San Paulas) iškasti Monero (XMR), paprašykite AWS paprastos el. pašto paslaugos (SES). S3 kibirai ir RDS duomenų bazės, generuojančios $5,000 to $80,000+ debesų kompiuterijos sąskaitose per naktį. Panašiai nutekėjo OpenAI arba Anthropic API raktas iš karto įtraukiamas į požemines „atvirkštinio tarpinio serverio“ LLM prekyvietes, kurios per minutę išeikvoja tūkstančius dolerių žetonų kreditų, o nutekėjo Stripe gyvas slaptas raktas (sk_live_...) suteikia užpuolikams visišką programinę skaitymo / rašymo prieigą, kad būtų galima grąžinti nesąžiningas lėšas, eksportuoti klientą PII, arba suaktyvinti neteisėtus Connect išmokėjimus. Jei užpuolikas aktyviai prievartauja jūsų organizaciją po to, kai išfiltravo klientų duomenų bazes naudodamas nutekintą raktą, kreipkitės į vietos teisėsaugos ir kibernetinių incidentų karštąsias linijas per mūsų pagalbos numeriai nedelsdami peržiūrėkite mūsų susijusius vadovus atsitiktinis gamybos duomenų bazės kritimas, git priverstinis stūmimas ir slaptas nutekėjimas, gamybos duomenų bazė buvo nutraukta arba S3 segmentas ištrintas be naujausios atsarginės kopijos, ir avarinio nuotolinio darbo saugumas ir duomenų privatumas.
Padarykite tai dabar¶
- ** NEŠVAISTITE pirmųjų 60 sekundžių bėgimui
git rm .envarbagit push --force: EITI TIESIOGIAI Į TEIKĖJO KONSOLE (AWS IAM,Stripe,OpenAI,GCP) IR ATŠAUKTI / IŠJUNGTI RAKTĄ< 30 SECONDS.** Failo ištrynimas naujame Git įsipareigojime (or even making the GitHub repository Private). Pats raktas pirmiausia turi būti nužudytas prie šaltinio. - Jei an
AWSraktas (AKIA...arbaASIA...) nutekėjo: AtidarytaAWS IAM -> Users -> Security credentialsir nedelsdami spustelėkite prieigos rakto Deaktyvinti / Ištrinti, tada pridėkiteAWSCompromisedKeyQuarantineV2(or a blanketNeigti*inline policy) IAM vartotojui ir padidinkite vartotojoRevokeOldSessionspolitika žudyti bet kokius laikinusSTSjau nukaldinti užpuoliko žetonai (see the exact STS bypass trap below). - Jei a
StripeTiesioginis slaptasis raktas (sk_live_...arbark_live_...) nutekėjo: Eiti įdashboard.stripe.com/apikeys, spustelėkite...-> Pasukite klavišą ir nustatykite senojo rakto galiojimo pabaigą į "Dabar (Immediately)" (NOT "in 24 hours"). Nedelsiant patikrinkiteStripe Dashboard -> LogsirBalance -> Payouts / Refundsuž neteisėtus API iškvietimus. - Jei an
OpenAI,Anthropic,Google Gemini, arbaSendGrid / Twilioraktas nutekėjo: nedelsdami ištrinkite API raktą teikėjo prietaisų skydelyje ir nustatykite didelį mėnesio išlaidų limitą ($0arba įprastą viršutinę ribą) atsiskaitymo nustatymuose, kad sustabdytumėte srautinio perdavimo užklausas skrydžio metu. - Šluoti VISUS debesų regionus (
especially disabled/opt-in regions) nesąžiningiems EC2 egzemplioriams, Lambda funkcijoms, ECS užduotims, S3 segmentams ir užpakalinių durų IAM naudotojams, kuriuos robotas sukūrė per 2 minučių veikimo langą. Užpuolikai specialiai paleidžia kriptovaliutų gavybos egzempliorius regionuose, kurių niekada nespustelėsite konsolėje (like Stockholm eu-north-1, Osaka ap-northeast-3, or Mumbai ap-south-1) ir sukurkite antrą paslėptą IAM vartotoją (or SSH key pair), kad jie galėtų likti jūsų paskyroje, kai ištrinsite nutekėjusį raktą. - **Tik po to, kai paslaptis bus atšaukta ir užpakalinės IAM paskyros išvalytos, nuvalykite įsipareigojimą iš Git (
using git-filter-repo) IR susisiekite su „GitHub“ palaikymo komanda (or remove cached PR/commit views).
Danger
Kodėl reikia ištrinti nutekėjusią informaciją AKIA Įveskite AWS IAM nepakanka (The STS GetSessionToken Persistence Trap). Per 5 seconds iškrapštyti savo statinį AKIA... AWS IAM prieigos raktas iš GitHub, sudėtingi automatizuoti robotų tinklai ne tik paleidžia EC2 egzempliorius su jūsų AKIA raktas; jų pirmasis API skambutis yra sts:GetSessionToken arba sts:AssumeRole, kuris kaldina laikiną ASIA... Apsaugos žetonų paslauga (STS) seanso prieigos raktas galioja iki 12 to 36 hours. Net ir ištrynus originalą AKIA... prieigos raktas IAM konsolėje, ** bet koks laikinas ASIA... Iki to momento nukaldinti STS žetonai išlieka 100 % aktyvūs ir galioja**, nebent taip pat pridėsite aiškų Deny All tiesioginė politika (with a Condition checking aws:TokenIssueTime < CurrentUTC) pažeistam IAM vartotojui ir kiekvienam vaidmeniui, kurį jis gali prisiimti.
Sprendimų medis: 60 sekundžių avarinis atsakas pagal nutekėjusio slaptumo tipą¶
Vykdykite šią incidento izoliavimo schemą, kad pašalintumėte pažeistus kredencialus, atlaikytumėte puolėjo atkaklumą ir pakeistumėte atsiskaitymą per debesį.
flowchart TD
A["„Live Secret“, skirta viešajam „GitHub“ / „GitLab Repo“ (.env, šaltinio kodas arba „git“ istorija)"] --> B["ANTRA NUO 0 IKI 30: NEPAleiskite git rm pirmiausia. Atidarykite debesies / API teikėjo konsolę ir nedelsdami ATŠAUKTI raktą"]
B --> C{"Kokio tipo tiesioginiai kredencialai buvo atskleisti?"}
C -->|"1. AWS prieigos raktas (AKIA... / ASIA...)"| D["1. Išaktyvinkite / ištrinkite raktą IAM. 2. Pridėkite eilutę „Atmesti viską“ prie naudotojo (nužudo nukaldintus STS prieigos raktus) 3. Patikrinkite „CloudTrail“, skirtą „Backdoor IAM“ naudotojams"]
C -->|"2. „Stripe Live Secret Key“ (sk_live_... / rk_live_...)"| E["1. Roll Key with Expiration = „Iš karto“ 2. Patikrinkite /v1/refunds, /v1/transfers & Webhook galutiniai taškai 3. Įvertinkite klientų AII parodymą"]
C -->|"3. OpenAI (sk-proj-...), Anthropic (sk-ant-...) arba Gemini Key"| F["1. Atšaukkite raktą kūrėjų pulte. 2. Laikinai sumažinkite organizacijos griežtą atsiskaitymo ribą iki 0 USD 3. Patikrinkite, ar naudojimo žurnaluose nėra prieigos raktų."]
C -->|"4. Duomenų bazės URI (postgres://, mongodb+srv://) arba Redis URL"| G["1. Nedelsdami pasukite DB slaptažodį 2. Paleiskite pg_terminate_backend() / KILL, kad nutrauktumėte aktyvius ryšius 3. Užblokuokite saugos grupę tik VPC IP adresams"]
D --> H["Vykdykite kelių regionų skaičiavimo nuskaitymą (nutraukite Rogue EC2 / EKS / SageMaker / Lambda visuose 30 ir daugiau regionų)"]
E --> I["Išvalykite „Git“ istoriją naudodami „git filter-repo“ + išvalykite „GitHub“ talpykloje saugomus įsipareigojimo SHA rodinius"]
F --> I
G --> I
H --> J{"Ar automatiniai robotai sukaupė 1 000-100 000 USD daugiau debesies sąskaitą?"}
J -->|"TAIP"| K["Atidarykite AWS / GSP atsiskaitymo palaikymo atvejį -> Pateikite saugos auditą po ištaisymo + prašykite vienkartinio mandagumo sukčiavimo / sąskaitos nutekėjimo atleidimo"]
J -->|"NE"| I
1 dalis: atskirų teikėjų nužudymo jungiklis ir teismo ekspertizės matrica (First 5 Minutes)¶
Naudokite šią nuorodų lentelę, kad surastumėte tikslų atšaukimo mygtuką, automatinio GitHub slapto nuskaitymo elgseną ir paslėptą nutekėjusio kredencialo patvarumo vektorių.
| Kredencialų tipas ir priešdėlio šablonas | Ar „GitHub“ slaptas nuskaitymas jį automatiškai atšaukia? | Nedelsiant 30 sekundžių nužudymo perjungimo procedūra | Paslėptas užpuoliko patvarumo vektorius, kurį reikia patikrinti (Critical.) |
Kur tikrinti neteisėtus API skambučius |
|---|---|---|---|---|
1. Amazon Web Services (AKIA... IAM raktas / ASIA... STS tokenas) |
NĖRA automatinio atšaukimo: „GitHub“ praneša AWS, kuris atidaro automatinį AWS palaikymo atvejį (Compromised Key Quarantine) ir prideda AWSCompromisedKeyQuarantineV2, dažnai 3 to 15 minutes po robotai jau užpuolė. |
1. IAM -> Users -> [User] -> Security credentials -> Deactivate & Delete2. Pridėti eilutę: Effect: Deny, Action: "*", Resource: "*" (kills active STS tokens). |
1. Laikinas STS žetonai (ASIA...)2. Naujai sukurti IAM naudotojai / prieigos raktai 3. Galinės durys IAM vaidmenys su išoriniu Principal pasitikėjimo politika4. EC2 Paleisti šablonus / automatinio mastelio keitimo grupes, kurios atkuria nutrauktus kalnakasius. |
AWS CloudTrail -> įvykių istorija (Filter by User name = compromised IAM user arba Event source = sts.amazonaws.com / iam.amazonaws.com). |
2. Stripe Live Secret / Restricted Key (sk_live_... / rk_live_...) |
TAIP (dažnai): „Stripe“ bendradarbiauja su „GitHub Secret“ nuskaitymu, kad būtų automatiškai rodomas sk_live_ aptikti raktai main, BET raktai, paslėpti base64 eilutėse, Gists arba nestandartiniai failai, gali būti automatiškai atšaukti. |
1. Eiti į dashboard.stripe.com/apikeys2. Spustelėkite ... -> Pasukite klavišą3. Pasirinkite Block old key immediately (Now) (never select a 12h/24h grace period.). |
Kenkėjiški „Webhook“ galiniai taškai: užpuolikai naudoja jūsų nutekintą informaciją sk_live_ raktas skambinti POST /v1/webhook_endpoints, registruoja savo serverio URL, kad tyliai gautų visų būsimų klientų atsiskaitymo ir kortelių įvykių kopijas, net kai įvedate API raktą. |
Stripe Dashboard -> Developers -> Logs (filter by IP address and HTTP method POST/DELETE) + Kūrėjai -> Webhooks (delete any unrecognized URLs). |
3. „Google Cloud Service“ paskyros JSON ("private_key_id", AIza... API raktas) |
Iš dalies: GSP įspėja projekto savininką (and optionally disables keys if Organization Policy is enabled), bet dažnai palieka aktyvų raktą siųsdamas įspėjimą el. paštu. |
1. GCP Console -> IAM & Admin -> Service Accounts2. Spustelėkite Service Account -> Keys skirtuką -> Pašalinkite nutekintą rakto ID. 3. Laikinai išjunkite visą paslaugos paskyrą. |
1. Nauji Paslaugų paskyros raktai, sukurti dėl nutekėjusio rakto 2. Apskaičiuokite variklio GPU egzempliorius ( A100/H100/T4) sukosi užsienio zonose3. Pakeistas Projekto IAM politikos susiejimas ( roles/owner arba roles/editor). |
GCP debesies audito žurnalai (Logs Explorer) naudojant užklausą:protoPayload.authenticationInfo.principalEmail="<service-account-email>" |
4. OpenAI (sk-proj-...), antropinis (sk-ant-...), & HuggingFace (hf_...) |
OpenAI / Anthropic: bendradarbiaukite su „GitHub“, kad automatiškai atšauktumėte standartinius paprasto teksto siuntimus (usually within 30 to 120 seconds), kurio metu robotai vis tiek gali iššauti tūkstančius lygiagrečių gpt-4o / claude-3-5-sonnet prašymus. |
1. Ištrinkite raktą platform.openai.com/api-keys arba console.anthropic.com/settings/keys2. Apatinis Mėnesio išlaidų limitas ( Hard Cap) Atsiskaitymo nustatymuose, kad sustabdytumėte lygiagrečius srautus skrydžio metu. |
Organizacijos administratoriaus raktai (sk-admin-...): Jei nutekėjo OpenAI Admin API raktas, robotas gali programiškai iškviesti POST /v1/organization/admin_api_keys prieš atšaukdami pirmąjį. Patikrinkite visus organizacijos raktus. |
OpenAI / Anthropic Usage Dashboard (check activity by API key and model tier). |
5. „GitHub“ asmeninės prieigos prieigos raktas (ghp_... / github_pat_...) arba NPM prieigos raktas (npm_...) |
TAIP (Instant): „GitHub“ automatiškai atšaukia bet kurį ghp_ arba github_pat_ sekundės dalį jis nusiunčiamas į viešą „GitHub“ saugyklą. |
Jei nusiunčiama į ne GitHub pagrindinį kompiuterį (GitLab, Bitbucket, Pastebin, or Slack), atšaukti rankiniu būdu github.com/settings/tokens (or npmjs.com -> Access Tokens). |
** Tiekimo grandinės kenkėjiškų programų įpurškimas:** užpuolikas su jūsų ghp_ arba npm_ prieigos raktas nedelsdamas nukreips kenkėjišką „backdoor“ įsipareigojimą į jūsų privačius atpirkimo sandorius, pridės nesąžiningą Įdiegti raktą / „GitHub“ veiksmų darbo eigą (pull_request_target) arba paskelbkite trojanizuotą NPM paketo versiją. |
GitHub nustatymai -> saugos žurnalas (audit repo.create, hook.create, org.add_member, and oauth_authorization). |
2 dalis: Gilus nardymas: kaip iškeldinti užpuoliką iš savo AWS paskyros (The 4-Step Cloud Eviction Protocol)¶
Nes nutekėjo AWS įgaliojimai turi didžiausią finansinį sprogimo spindulį (up to $50,000+ per day in EC2/SageMaker/Bedrock bills), turite atlikti visus keturis toliau nurodytus veiksmus, kai tik AKIA... arba ASIA... raktas patenka į viešą saugyklą:
+-----------------------------------------------------------------------------+
| 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 veiksmas: nužudykite abu statinius AKIA Raktas IR viskas nukaldinta ASIA Seanso žetonai¶
Ištrinant AKIA AWS konsolėje esantis raktas ne laikinai negalioja STS jau išduoti įgaliojimai sts:GetSessionToken. Norėdami iš karto viską nužudyti per 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 veiksmas: suraskite „Backdoor IAM“ vartotojus, vaidmenis ir prieigos raktus „CloudTrail“¶
Vykdykite šias AWS CLI komandas, kad patikrintumėte, ar robotas sukūrė paslėptą užpakalinių durų IAM vartotoją arba pridėjo antrinį prieigos raktą prie vienos iš esamų darbuotojo paskyrų lango metu:
# 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 ir ImportKeyPair. Nedelsdami ištrinkite kiekvieną neleistiną vartotoją, vaidmenį ir raktų porą.
3 veiksmas: išvalykite viską 30+ AWS regionai, skirti nesąžiningiems EC2 egzemplioriams, automatinio mastelio keitimo grupėms ir pagrindo / „SageMaker“ darbams¶
Kodėl aukos vis dar gauna a $12,000 sąskaitą mėnesio pabaigoje po to, kai jie „patikrino EC2 prietaisų skydelį ir nematė nulio atvejų“? Kadangi AWS konsolė vienu metu rodo tik vieną regioną (e.g., us-east-1), kol robotas sukasi aukštyn 20 atvejai ap-south-1 (Mumbai), eu-north-1 (Stockholm), ir sa-east-1 (Sao Paulo) ir paslėpė juos EC2 automatinio mastelio keitimo grupėse (ASGs), kad jei EC2 egzempliorių nutrauktumėte rankiniu būdu, automatinio mastelio keitimo grupė paleis pakeitimą 30 seconds vėliau.
Paleiskite šį kelių regionų „bash one-liner“, kad pateiktumėte visus vykdomus arba laukiančius EC2 egzempliorius kiekviename aktyviame AWS regione 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) kiekviename paveiktame regione ir PIRMAI ištrinkite automatinio mastelio keitimo grupę / taškinio užklausą, tada nutraukite egzempliorius.
- Patikrinkite AWS pagrindą (Model Invocation Logging) ir „Amazon SES“: Šiuolaikiniai kredencialų rinkimo robotai dabar iš karto iškviečia AWS pagrindą (Claude 3.5 Sonnet / Llama 3) naudojant pavogtus AWS kredencialus perparduoti LLM žetonus (which does not show up under EC2 at all). Patikrinkite AWS Cost Explorer (Group by: Service ir Group by: Region), kad pastebėtumėte bet kokį neįprastą paslaugos šuolį.
3 dalis: Paslapties išvalymas iš Git istorijos (git-filter-repo) ir išvalykite „GitHub“ paslėptą įsipareigojimų talpyklą¶
Kai kredencialas neveikia tiekėjo lygiu, turite pašalinti slaptą eilutę iš saugyklos .git įrašyti istoriją, kad jos nematytų nei bendradarbiai, nei būsimi grandikliai (and so GitHub's Push Protection stops blocking your branches).
1. Kodėl git rm .env + git commit Nepašalina paslapties iš Git¶
Bėgimas git rm .env && git commit -m "remove env" pašalina failą tik iš paskutinio įvykdymo (HEAD); paprasto teksto paslaptis išlieka nuolat skaitoma pirminiame įsipareigojime (the parent commit) visiems, kurie „GitHub“ paspaus „Įsipareigoja“.
2. Naudodami švariai perrašykite saugyklos istoriją git-filter-repo¶
- Jei tik pats paskutinis įsipareigojimas (
HEAD) turi paslaptį (and nobody else has pulled it yet): - Jei paslaptis yra palaidota keliuose įsipareigojimuose jūsų istorijoje (
or inside a code file you want to keep): Naudokitegit-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. Paslėptas GitHub talpyklos spąstas (Dangling Commit SHAs)¶
Net ir po bėgimo git filter-repo ir git push --force, GitHub žiniatinklio serveriai vis dar išlaiko seną, nenurodytą ("kabantį") SHA įsipareigojimą ir viešai pasiekiamą adresu https://github.com/<owner>/<repo>/commit/<old-40-char-sha> (and in any forks or Pull Requests), kol prasidės šiukšlių išvežimas.
- Kaip nedelsiant išvalyti talpykloje saugomą įsipareigojimų SHA „GitHub“:
1. Nukopijuokite visą 40-character commit nutekėjusio įvykdymo SHA prieš perrašydami istoriją.
2. Atidarytihttps://support.github.com/contact -> paprašykite „Pašalinti neskelbtinus duomenis / Išvalyti talpykloje esančius rodinius, kad būtų nepasiekiamas įsipareigojimas SHA“ saugykloje owner/repo ir pateikite tikslų įsipareigojimo SHA (or use the GitHub Support portal's automated cache-purge workflow).
4 dalis: Kaip gauti a $5,000 to $100,000+ AWS arba GCP Bot Bill atsisakyta (The Courtesy Forgiveness Appeal)¶
O kas, jei pastūmėtum an .env failą penktadienio popietę, netikrino jūsų el. pašto iki pirmadienio ryto ir pabudo nuo $28,400.00 AWS arba „Google Cloud“ sąskaita iš kriptovaliutų kasybos arba LLM tarpinio serverio robotų?
Neišsigąskite ir NEGALIMA anuliuoti savo kredito kortelės arba dar nepateikite banko mokėjimo grąžinimo. Abi Amazon Web Services (AWS) ir „Google Cloud Platform“ (GCP) turi nusistovėjusią vidinę Vienkartinio netyčinio kredencialo nutekėjimo atsiskaitymo koregavimo / nemokamo kredito politiką, skirtą individualiems kūrėjams, studentams ir pradedantiesiems, su sąlyga, kad užpildysite 100% privalomo saugos pataisymo kontrolinio sąrašo prieš atsiskaitymo peržiūros komanda įvertina jūsų apeliaciją.
5 žingsnių AWS / GCP sąskaitos atsisakymo protokolas (90%+ Success Rate for First-Time Leaks)¶
- ** Pirmiausia užbaikite kiekvieną saugumo taisymo veiksmą (
AWS Will Reject Your Waiver Until the Account Is Clean):**- Ištrinkite pažeistą IAM prieigos raktą (
and the IAM User if possible). - Nutraukite kiekvieną neteisėtą EC2 egzempliorių, automatinio mastelio keitimo grupę, EBS tūrį, elastinį IP, RDS egzempliorių ir S3 segmentą visuose regionuose (
verify via AWS Cost Explorer and AWS Billing -> Bills -> Charges by Region that daily accrual has dropped back to $0.00). - Įgalinti Aparatinės įrangos arba autentifikavimo programos MFA (
Multi-Factor Authentication) savo AWS šakninėje paskyroje ir kiekviename IAM naudotoje.
- Ištrinkite pažeistą IAM prieigos raktą (
- ** Atidarykite palaikymo bylą žemiau
"Account and Billing"(Free for All AWS/GCP Tiers, No Paid Support Plan Required):**- Eiti į
console.aws.amazon.com/support/home-> Sukurti atvejį -> Paskyra ir atsiskaitymas -> Paslauga: Atsiskaitymas -> Kategorija: Ginčyti apmokestinimą / pažeista paskyra.
- Eiti į
- Pateikite šią tikslią faktinių ištaisymo ir sunkumų suvestinę:
- Pripažinkite laiko juostą ir priežastį: aiškiai nurodykite, kada raktas netyčia buvo atskleistas „GitHub“ (
e.g., "October 30 at 22:14 UTC") ir kai jis buvo atšauktas ("October 31 at 09:05 UTC"). - Išskirkite neteisėtus mokesčius pagal regioną ir paslaugą: nurodykite tikslias apgaulingos robotų veiklos sumas doleriais, palyginti su įprasta istorine mėnesine sąskaita (
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"). - Patvirtinkite 100 % ištaisymą: pažymėkite tikslius veiksmus, kuriuos jau atlikote (
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). - Mandagiai paprašykite vienkartinio nemokamo atsiskaitymo koregavimo: paaiškinkite, kad esate individualus kūrėjas / studentas / ankstyvos stadijos įmonė, kad mokate
$18,420neteisėta roboto sąskaita sukeltų didelių finansinių sunkumų, todėl už nesąžiningą naudojimą bus paprašyta vienkartinio nemokamo atsiskaitymo kredito / atsisakymo.
- Pripažinkite laiko juostą ir priežastį: aiškiai nurodykite, kada raktas netyčia buvo atskleistas „GitHub“ (
- Laikinai pakeiskite arba apribokite susietą mokėjimo kortelę, jei gresia automatinis atsiskaitymas:
- Kol jūsų AWS atsiskaitymo palaikymo atvejis peržiūrimas (
which usually takes 5 to 15 business dayskol AWS saugos ir atsiskaitymo paslaugų komandos patikrins, ar visi nesąžiningi ištekliai yra nutraukti), susisiekite su AWS palaikymo komanda, esančia biliete, ir paprašykite laikinai sulaikyti atsiskaitymą (defer auto-charge) ginčijamoje sąskaitoje faktūroje, kad ji neviršytų jūsų banko sąskaitos, kol apdorojamas kredito koregavimas.
- Kol jūsų AWS atsiskaitymo palaikymo atvejis peržiūrimas (
Warning
Kodėl NIEKADA neturite koduoti raktų kliento kode (NEXT_PUBLIC_, VITE_, REACT_APP_, Programėlės mobiliesiems arba „Chrome“ plėtiniai). Net jei jūsų „GitHub“ saugykla yra 100% Privatus, įdedamas slaptas API raktas (like an OpenAI, Stripe secret, or AWS key) sąsajos aplinkos kintamajame su priešdėliu NEXT_PUBLIC_, VITE_ arba REACT_APP_ sujungia grynojo teksto raktą tiesiai į viešąjį „JavaScript“. .js failai pateikiami kiekvieno lankytojo žiniatinklio naršyklėje (where bots scrape it directly from your live production website in seconds). Tik vieši / skelbiami raktai (like Stripe pk_live_... arba „Firebase“ kliento konfigūracija, kurią riboja HTTP persiuntimo / eilutės lygio sauga), gali kada nors paliesti sąsajos kodą.
Tip
Įdiegti gitleaks arba trufflehog kaip vietinis išankstinio įsipareigojimo kabliukas per 60 sekundžių (So git Refuses to Commit a Secret Ever Again). Kad būtų fiziškai neįmanoma netyčia įvykdyti an .env failą arba API raktą nešiojamajame kompiuteryje dar kartą, įdiekite gitleaks (brew install gitleaks) ir pridėkite a .pre-commit-config.yaml kabliukas (or turn on GitHub's free **"Push Protection for yourself"** at **github.com/settings/security_analysis**). Kai įjungta „Push Protection“, „GitHub“ serveriai tikrina jūsų git push gabenant ir atmesti stūmimą, kol jis kada nors patenka į saugyklą, kai aptinkamas atpažįstamas rakto raštas.
(Dėl susijusių kūrėjų ir nuotolinio darbo saugos incidentų žr Atsitiktinis gamybos duomenų bazės kritimas, git priverstinis stūmimas, slaptas nutekėjimas ir incidentų skirstymas, Gamybos duomenų bazė panaikinta arba S3 segmentas ištrintas be naujausios atsarginės kopijos, Netyčia el. paštu išsiųsta konfidenciali darbo užmokesčio, kliento AII arba HIPAA skaičiuoklė, ir Skubi nuotolinio darbo sauga ir duomenų privatumas.)
Regioninės duomenų pažeidimo ir debesų saugos ataskaitos teikiančios institucijos¶
| Regionas / Šalis | Pranešimų apie įsibrovimą į debesį ir duomenų pažeidimus įstatymas | Oficiali kibernetinių incidentų ir reguliavimo institucija | Kai dėl nutekėjusio „GitHub“ rakto reikia pateikti privalomas reguliavimo ataskaitas |
|---|---|---|---|
| JAV | FTC apsaugos taisyklės (16 CFR Part 314), SEC kibernetinio saugumo taisyklė (Form 8-K Item 1.05), HIPAA ir 50 pranešimo apie valstybės duomenų pažeidimus įstatų |
CISA (cisa.gov/report / 1-844-SAY-CISA), FBI IC3 (ic3.gov), HHS OCR ir State Attorneys General |
Jei „CloudTrail“ arba „Stripe“ žurnalai rodo, kad išorinis IP naudojo jūsų nutekėjusį raktą GetObject arba eksportuoti nešifruotą klientą PII, socialinio draudimo numeriai arba mokėjimo įrašai (rather than purely mining crypto on empty EC2 instances), taikomi pranešimo apie valstybės pažeidimus įstatymai. |
Europos Sąjunga (EEA) |
** GDPR (Articles 33 & 34)** ir NIS2 direktyva (Directive (EU) 2022/2555) |
Nacionalinė duomenų apsaugos institucija (CNIL, BfDI, DPC) & Nacionalinė CSIRT (ENISA) |
** Griežtas 72-Hour Laikrodis (GDPR Art. 33):** Jei nutekėję kredencialai turėjo prieigą prie ES asmens duomenų ir negalite teismo ekspertizės būdu atmesti neteisėtos prieigos prie „CloudTrail“ / VPC srautų žurnalų, praneškite apie tai savo priežiūros institucijai per 72 hours. |
| Jungtinė Karalystė | JK BDAR ir 2018 m. duomenų apsaugos įstatymas | Informacijos komisaro biuras (ICO: 0303 123 1113) ir NCSC (ncsc.gov.uk) |
Praneškite apie neteisėtą prieigą prie asmens duomenų ** JK ICO 72 hours** naudojant ICO internetinį pažeidimų vertinimo portalą; dokumentuokite savo raktų pakeitimą ir IAM karantino veiksmus. |
| Kanada, Australija ir Naujoji Zelandija | Kanada PIPEDA** Australija Privacy Act 1988 (NDB Scheme)Naujoji Zelandija Privacy Act 2020** |
OPC (Canada), OAIC ir ACSC (Australia: 1300 CYBER1), ir OPC (New Zealand) |
Pranešama, jei kredencialų poveikis kelia realią didelės žalos riziką (RROSH Kanadoje) arba tinkamas duomenų pažeidimas (Australia OAIC) susijusi su asmenine informacija. |
Dažnai užduodami klausimai¶
Jei supratau, kad pastūmiau an .env failą į viešą „GitHub“ atpirkimo sandorį ir po 2 minučių atpirkimo sandoris tapo privatus, ar vis tiek turiu pasukti raktus?¶
Taip, 100 procentų tame faile esančių raktų turi būti laikomi pažeistais ir nedelsiant atšaukti. Automatiniai kredencialų rinkimo robotai nelaukia, kol „Google“ indeksuos jūsų saugyklą; jie tiesiogiai prenumeruoja „GitHub“ realiojo laiko publiką `Events API` gaisrinė žarna (`and GH Archive`), kuris transliuoja kiekvieną publiką `PushEvent` visame pasaulyje per 1-3 sekundes nuo jūsų `git push`. Kai po dviejų minučių spustelėjote „Nustatymai -> Keisti saugyklos matomumą -> Padaryti privačią“, dešimtys automatinių grandiklių robotų jau atsisiuntė jūsų įsipareigojimo skirtumą ir įtraukė į eilę jūsų AWS, Stripe, OpenAI ir duomenų bazės kredencialus, kad būtų galima išnaudoti.
Kodėl robotai mano AWS paskyroje paleido EC2 egzempliorius, net kai ištryniau nutekėjusį AKIA prieigos raktas?¶
Statikos ištrynimas `AKIA...` prieigos raktas AWS IAM išjungia tik tą konkretų nuolatinį raktą; tai nedaro laikino negaliojimo `ASIA...` Apsaugos žetonų paslauga (`STS`) seanso prieigos raktus, kuriuos užpuolikas jau sugeneravo naudodamas `sts:GetSessionToken` arba `sts:AssumeRole` per pirmąsias kelias sekundes po rakto subraižymo (`which remain valid for up to 12 to 36 hours`). Be to, automatiniai AWS atakų scenarijai reguliariai skambina `iam:CreateUser` ir `iam:CreateAccessKey` per pirmą prieigos sekundę sukurti antrą, paslėptą užpakalinių durų administratoriaus paskyrą. Norėdami visiškai sustabdyti aktyvų AWS įsibrovimą, turite ištrinti `AKIA` raktą, pridėkite aiškų `Deny *` tiesioginė politika pažeistam IAM vartotojui (`which immediately invalidates all minted STS tokens`) ir patikrinkite „CloudTrail“ naujai sukurtus IAM vartotojus ar vaidmenis.
Ar AWS ar Google Cloud atleis didžiulę $10,000+ sąskaitą, jei įsilaužėliai pavogė mano API raktą iš „GitHub“ ir išgavo kriptovaliutą?¶
Daugeliu atvejų, kai atsitiktinai nuteka pirmą kartą, taip, jei elgiatės greitai, visapusiškai bendradarbiaujate su jų apsaugos komanda ir neignoruojate sąskaitos faktūros. Tiek AWS, tiek „Google Cloud“ turi vidinę vienkartinio nemokamo atsiskaitymo koregavimo politiką, skirtą kūrėjams ir mažoms įmonėms, patiriančioms neteisėtą kredencialų nutekėjimą. Prieš prašydami atleisti nuo sąskaitos pagal palaikymą „Paskyra ir atsiskaitymas“, pirmiausia turite įrodyti, kad nutekėjimas yra 100 procentų uždarytas: atšaukti atskleistus IAM raktus, nutraukti visus nesąžiningus skaičiavimo atvejus ir automatinio mastelio keitimo grupes visuose 30 ir daugiau pasaulio regionų, įgalinti kelių faktorių autentifikavimą (`MFA`) savo šakninėje paskyroje ir nustatykite AWS biudžetų įspėjimus apie išlaidas.
Kodėl taip git rm .env nepašalinti slaptojo rakto iš „GitHub“?¶
Git yra nekintanti versijų valdymo knyga: kai paleidžiate `git rm .env` ir stumti naują įsipareigojimą, Git įrašo tik tai, kad failo nėra naujausioje momentinėje nuotraukoje (`HEAD`), išsaugant visą paprasto teksto turinį `.env` visam laikui saugomas ankstesniame įsipareigojime (`the parent commit`) savo saugyklos įsipareigojimų istorijoje. Net jei perrašote savo istoriją su `git filter-repo` ir priverstinai stumti, bet kas vis tiek gali perskaityti paslaptį, jei jos neatšaukėte teikėjo pulte. Visada pirmiausia atšaukite ir pasukite slaptąjį raktą debesijos paslaugų teikėjo prietaisų skydelyje, o tada naudokite `git filter-repo` kad nubrauktumėte negyvas virveles iš jūsų įsipareigojimų istorijos.
Susiję vadovai¶
- Atsitiktinis gamybos duomenų bazės kritimas, git priverstinis stūmimas, slaptas nutekėjimas ir incidentų skirstymas
- Gamybos duomenų bazė panaikinta arba S3 segmentas ištrintas be naujausios atsarginės kopijos
- Netyčia el. paštu neteisingam gavėjui išsiųsta konfidenciali darbo užmokesčio, kliento AII arba HIPAA skaičiuoklė
- Netyčia ekrano dalis konfidencialiame atlyginimų lape, slaptažodžių tvarkytuvėje arba atleidimo sąraše „Zoom“ / „Teams“.
- Skubi nuotolinio darbo sauga ir duomenų privatumas
- Pagalbos numeriai
Šaltiniai ir oficialios rekomendacijos¶
- Amazon Web Services (
AWS Security Incident Response Guide & AWS Knowledge Center: "What should I do if I notice unauthorized activity or exposed IAM access keys?"):AWSCompromisedKeyQuarantineV2Politikos elgesys, laikinas pripažinimas negaliojančiuSTSSeanso žetonai (RevokeOldSessions) ir kelių regionų išteklių auditas. - GitHub dokumentacija (
GitHub Secret Scanning, Push Protection, & "Removing sensitive data from a repository" using git-filter-repo): Partnerio automatinio atšaukimo programa (Stripe, AWS, OpenAI, NPM),git-filter-repoIstorijos perrašymas ir nepasiekiamų talpykloje esančių įsipareigojimų SHA pašalinimas. - Stripe Inc. (
Stripe Developer Security Guide: API Key Rotation & Compromised Key Incident Triage): Nedelsiantsk_live_Raktų galiojimo laikas, auditas/v1/eventsir/v1/webhook_endpointsir Apriboti raktus perrk_live_Taikymo sritis. - NIST (
Special Publication 800-61 Rev. 2 / Rev. 3: Computer Security Incident Handling Guide) & OWASP (Secrets Management Cheat Sheet): Kredencialų apribojimas, trumpalaikė OIDC darbo krūvio tapatybės federacija (replacing static CI/CD keys) ir slaptas nuskaitymas prieš įsipareigojimą.