Skip to content

API გასაღები, AWS Secret, ან Stripe Live Token, რომელიც მოწოდებულია საჯარო GitHub Repo-ზე: ბოტის ავტომატური სკრაპი 60 წამში, გასაღების დაუყოვნებლივ როტაცია და ბილინგის მოკვლის შეცვლა

მყისიერად გარბიხარ git push საჯარო GitHub, GitLab ან Bitbucket საცავში (or temporarily flip a private repository to "Public" for even 10 seconds) ფაილის დროს, .env კონფიგურაცია, იუპიტერის ნოუთბუქი (.ipynb), ან უფრო ძველი Git commit ისტორია შეიცავს ცოცხალ საიდუმლო გასაღებს (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 გლობალურად, მავნე scraper ბოტები აანალიზებენ თქვენს განსხვავებას რეგულარული გამონათქვამებით და იწყებენ ავტომატური ღრუბლოვანი ბრძანებების შესრულებას, სანამ შეძლებთ აკრიფოთ 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 მარტივი ელ.ფოსტის სერვისი (SES) კვოტა იზრდება ფიშინგის სპამის გასავრცელებლად ან თქვენი პირადის კლონირებისთვის S3 თაიგულები და RDS მონაცემთა ბაზების გენერირება $5,000 to $80,000+ ღრუბლოვანი გამოთვლების გადასახადებში ღამით. ანალოგიურად, გაჟონა OpenAI ან Anthropic API გასაღები დაუყოვნებლივ შეფუთულია მიწისქვეშა LLM ბაზრობებში, რომლებიც ატარებენ ათასობით დოლარს სიმბოლურ კრედიტებში წუთში, ხოლო გაჟონვა Stripe ცოცხალი საიდუმლო გასაღები (sk_live_...) ანიჭებს თავდამსხმელებს სრულ პროგრამულ წვდომას წაკითხვის/ჩაწერის თაღლითური ანაზღაურების გასაცემად, კლიენტის ექსპორტზე PIIან გაააქტიურეთ Connect-ის არაავტორიზებული გადახდები. თუ თავდამსხმელი აქტიურად სძალავს თქვენს ორგანიზაციას კლიენტთა მონაცემთა ბაზების ექსფილტრაციის შემდეგ თქვენი გაჟონილი გასაღებით, მიმართეთ თქვენს ადგილობრივ სამართალდამცავ ორგანოებს და კიბერ ინციდენტების ცხელ ხაზებს ჩვენი მეშვეობით. გადაუდებელი ნომრები დირექტორია დაუყოვნებლივ და გადახედეთ ჩვენს შესაბამის სახელმძღვანელოებს წარმოების შემთხვევითი მონაცემთა ბაზის ვარდნა, git ძალის დაძაბვა და საიდუმლო გაჟონვის ტრიაჟი, წარმოების მონაცემთა ბაზა დაეცა ან S3 bucket წაიშალა ბოლო სარეზერვო ასლის გარეშე, და გადაუდებელი დისტანციური მუშაობის უსაფრთხოება და მონაცემთა კონფიდენციალურობა.

გააკეთე ეს ახლა

  1. ** ნუ დაკარგავთ თქვენს პირველ 60 წამს სირბილში git rm .env ან git push --force: პირდაპირ გადადით პროვაიდერის კონსოლზე (AWS IAM, Stripe, OpenAI, GCP) და გააუქმეთ / გააუქმეთ გასაღები < 30 SECONDS.** ფაილის წაშლა ახალ Git commit-ში (or even making the GitHub repository Private) არაფერს არ აკეთებს იმ ბოტების შესაჩერებლად, რომლებმაც უკვე ამოიღეს თქვენი გასაღები GitHub Events firehose-დან 10 წამის წინ. გასაღები თავად უნდა მოიკლას წყაროსთან.
  2. ** თუ ა AWS გასაღები (AKIA... ან ASIA...) გაჟონა:** ღია AWS IAM -> Users -> Security credentials და დაუყოვნებლივ დააწკაპუნეთ გამორთვა / წაშლა წვდომის ღილაკზე, შემდეგ მიამაგრეთ AWSCompromisedKeyQuarantineV2 (or a blanketუარყოფა *inline policy) IAM მომხმარებლისთვის და გაზარდეთ მომხმარებლის RevokeOldSessions ნებისმიერი დროებითი მოკვლის პოლიტიკა STS თავდამსხმელის მიერ უკვე მოჭრილი ნიშნები (see the exact STS bypass trap below).
  3. ** თუ ა Stripe ცოცხალი საიდუმლო გასაღები (sk_live_... ან rk_live_...) გაჟონა:** გადადით dashboard.stripe.com/apikeys, დააწკაპუნეთ ... -> დააბრუნეთ გასაღები და დააყენეთ ძველი გასაღების ვადის გასვლა "ახლა (Immediately)" (NOT "in 24 hours"). სასწრაფოდ შეამოწმეთ Stripe Dashboard -> Logs და Balance -> Payouts / Refunds არაავტორიზებული API ზარებისთვის.
  4. ** თუ ა OpenAI, Anthropic, Google Gemini, ან SendGrid / Twilio გასაღები გაჟონა:** დაუყოვნებლივ წაშალეთ API გასაღები პროვაიდერის საინფორმაციო დაფაზე და დააყენეთ ** მძიმე თვიური ხარჯვის ლიმიტი ($0 ან თქვენი ნორმალური ქუდი)** ბილინგის პარამეტრებში, რათა შეწყვიტოთ ფრენის დროს სტრიმინგის მოთხოვნები.
  5. ** გადაიტანეთ ყველა ღრუბლიანი რეგიონი (especially disabled/opt-in regions) მოტყუებული EC2 შემთხვევებისთვის, ლამბდას ფუნქციებისთვის, ECS ამოცანებისთვის, S3 თაიგულებისთვის და უკანა კარის IAM მომხმარებლებისთვის, რომლებიც შექმნილია ბოტის მიერ 2 წუთიანი ექსპოზიციის ფანჯრის დროს.** თავდამსხმელები სპეციალურად იწყებენ კრიპტო-მაინინგის ინსტანციებს რეგიონებში, რომლებზეც არასოდეს დააწკაპუნებთ კონსოლში (like Stockholm eu-north-1, Osaka ap-northeast-3, or Mumbai ap-south-1) და შექმენით მეორე ფარული IAM მომხმარებელი (or SSH key pair) რათა დარჩეს თქვენს ანგარიშში გაჟონილი გასაღების წაშლის შემდეგ.
  6. ** მხოლოდ საიდუმლოს გაუქმების და უკანა კარის 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... AWS IAM წვდომის გასაღები GitHub-დან, დახვეწილი ავტომატური ბოტნეტები არ უშვებს მხოლოდ 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 Repo-სთვის (.env, წყაროს კოდი ან git ისტორია)"] --> B["მეორე 0-დან 30-მდე: არ გაუშვათ git rm პირველი. გახსენით Cloud/API პროვაიდერის კონსოლი და დაუყოვნებლივ გააუქმეთ გასაღები"]
    B --> C{"რომელი ტიპის პირდაპირი რწმუნებათა სიგელები იყო გამჟღავნებული?"}
    C -->|"1. AWS წვდომის გასაღები (AKIA... / ASIA...)"| D["1. გასაღების გამორთვა/წაშლა IAM-ში 2. მიამაგრეთ „ყველაზე უარის თქმის“ შიდა პოლიტიკა მომხმარებელს (კლავს მოჭრილ STS ჟეტონებს) 3. აუდიტი CloudTrail Backdoor IAM მომხმარებლებისთვის"]
    C -->|"2. Stripe Live Secret Key (sk_live_... / rk_live_...)"| E["1. გასაღების ამოღება ვადის გასვლით = „დაუყოვნებლივ“ 2. შეამოწმეთ /v1/ანაზღაურება, /v1/ტრანსფერები და 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["მრავალრეგიონული გამოთვლების გაშვება (შეწყვიტეთ Rogue EC2/EKS/SageMaker/Lambda ყველა 30+ რეგიონში)"]
    E --> I["Git ისტორიის გასუფთავება 'git filter-repo'-ით + GitHub ქეშირებული Commit SHA ნახვების გასუფთავება"]
    F --> I
    G --> I
    H --> J{"შეაგროვეს თუ არა ავტომატიზებულმა ბოტებმა 1000-დან 1000000 დოლარამდე+ ღრუბლოვანი გადასახადი?"}
    J -->|"დიახ"| K["გახსენით AWS/GCP ბილინგის მხარდაჭერის საქმე -> გაგზავნეთ რემედიაციის შემდგომი უსაფრთხოების აუდიტი + მოითხოვეთ ერთჯერადი თავაზიანობის თაღლითობის/გაჟონვის ბილეთის პატიება"]
    J -->|"არა"| I

ნაწილი 1: პროვაიდერის მიერ პროვაიდერის Kill-Switch & Forensics Matrix (First 5 Minutes)

გამოიყენეთ ეს საცნობარო ცხრილი, რათა იპოვოთ ზუსტი გაუქმების ღილაკი, ავტომატური GitHub საიდუმლო სკანირების ქცევა და დამალული მდგრადობის ვექტორი თქვენი გაჟონილი რწმუნებულებისთვის.

რწმუნებათა სიგელის ტიპი და პრეფიქსის ნიმუში GitHub საიდუმლო სკანირება ავტომატურ გაუქმებას? დაუყოვნებელი 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 & Delete
2. დაამატეთ შიდა პოლიტიკა: Effect: Deny, Action: "*", Resource: "*" (kills active STS tokens).
1. დროებითი STS ჟეტონები (ASIA...)
2. ახლად შექმნილი IAM მომხმარებლები / წვდომის გასაღებები
3. Backdoor IAM Roles გარედან Principal ნდობის პოლიტიკა
4. EC2 გაუშვით შაბლონები / ავტომატური სკალირების ჯგუფები, რომლებიც ხელახლა ქმნიან შეწყვეტილ მაინერებს.
**AWS CloudTrail -> მოვლენის ისტორია ** (Filter by User name = compromised IAM user ან Event source = sts.amazonaws.com / iam.amazonaws.com).
2. Stripe Live Secret / შეზღუდული გასაღები (sk_live_... / rk_live_...) YES (ხშირად): Stripe პარტნიორობს GitHub Secret Scanning-თან ავტომატური გადახვევისთვის sk_live_ გასაღებები აღმოჩენილია main, BUT კლავიშები, რომლებიც დამალულია base64 სტრიქონებში, Gists ან არასტანდარტული ფაილები შეიძლება გადაიჩეხოს ავტომატურ გაუქმებამდე. 1. გადადით dashboard.stripe.com/apikeys
2. დააჭირეთ ... -> Roll გასაღები
3.
აირჩიეთ Block old key immediately (Now) (never select a 12h/24h grace period.).
** მავნე Webhook საბოლოო წერტილები: ** თავდამსხმელები იყენებენ თქვენს გაჟონვას sk_live_ დარეკვის გასაღები POST /v1/webhook_endpoints, დაარეგისტრირებენ საკუთარ სერვერის URL-ს, რათა ჩუმად მიიღონ ყველა მომავალი კლიენტის შეკვეთის და ბარათის მოვლენების ასლები, მაშინაც კი, როდესაც თქვენ დააბრუნებთ API კლავიშს. Stripe Dashboard -> Developers -> Logs (filter by IP address and HTTP method POST/DELETE) + დეველოპერები -> Webhooks (delete any unrecognized URLs).
3. Google Cloud Service ანგარიში JSON ("private_key_id", AIza... API გასაღები) ნაწილობრივი: GCP აფრთხილებს პროექტის მფლობელს (and optionally disables keys if Organization Policy is enabled), მაგრამ ხშირად ტოვებს გასაღებს აქტიურ ელ.ფოსტის გაფრთხილების გაგზავნისას. 1. GCP Console -> IAM & Admin -> Service Accounts
2. დააწკაპუნეთ სერვისის ანგარიშზე -> გასაღებები ჩანართზე -> წაშალე გაჟონილი გასაღების ID.
3. გამორთეთ მთელი სერვისის ანგარიში დროებით.
1. ახალი სერვისის ანგარიშის გასაღებები გენერირებულია გაჟონილი გასაღებით
2. გამოთვლითი ძრავის 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/keys
2. ქვედა თვიური ხარჯვის ლიმიტი (Hard Cap) ბილინგის პარამეტრებში ფრენის დროს პარალელური ნაკადების შესაჩერებლად.
** ორგანიზაციის ადმინისტრატორის გასაღებები (sk-admin-...):** თუ OpenAI Admin API კლავიშმა გაჟონა, ბოტს შეუძლია პროგრამულად დარეკვა POST /v1/organization/admin_api_keys შექმენით პროექტის ახალი API კლავიშები სანამ გააუქმებთ პირველს. ორგანიზაციის ყველა გასაღების აუდიტი. ** OpenAI / Anthropic Usage Dashboard ** (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). Supply-Chain Malware Injection: თავდამსხმელი თქვენით 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 Console-ის გასაღები არ არღვევს დროებით 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: მოიძიეთ უკანა კარის IAM მომხმარებლები, როლები და წვდომის გასაღებები CloudTrail-ში

გაუშვით ეს 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. დაუყოვნებლივ წაშალეთ ყველა არაავტორიზებული მომხმარებელი, როლი და გასაღების წყვილი.

ნაბიჯი 3: გაწმინდეთ ყველა 30+ AWS რეგიონები Rogue EC2 ინსტანციებისთვის, ავტო სკალირების ჯგუფებისთვის და Bedrock/SageMaker ვაკანსიებისთვის

რატომ იღებენ მსხვერპლი მაინც ა $12,000 ანგარიში თვის ბოლოს მას შემდეგ, რაც მათ "შეამოწმეს EC2 დაფა და ნახეს ნულოვანი შემთხვევები"? რადგან AWS Console აჩვენებს მხოლოდ ერთ რეგიონს (e.g., us-east-1), სანამ ბოტი დატრიალდა 20 შემთხვევები ap-south-1 (Mumbai), eu-north-1 (Stockholm), და sa-east-1 (Sao Paulo) და დამალეთ EC2 Auto Scaling Groups-ში (ASGs) ისე, რომ თუ ხელით შეწყვეტთ EC2 ინსტანციას, Auto Scaling Group იწყებს ჩანაცვლებას 30 seconds მოგვიანებით.

გაუშვით ეს მრავალრეგიონული bash ერთი ხაზი, რათა ჩამოთვალოთ ყველა გაშვებული ან მომლოდინე EC2 ინსტანცია ყველა აქტიურ AWS რეგიონში 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
- ** Rogue EC2 ინსტანციების შეწყვეტამდე:** შეამოწმეთ EC2 -> Auto Scaling Groups (and EC2 Spot Fleet Requests / ECS Clusters / EKS Node Groups / SageMaker Notebook & Training Jobs) თითოეულ დაზარალებულ რეგიონში და პირველ რიგში წაშალეთ Auto Scaling Group/Spot Request, შემდეგ შეწყვიტეთ ინსტანციები. - ** შეამოწმეთ 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

  1. ** თუ მხოლოდ ბოლო ჩადენა (HEAD) შეიცავს საიდუმლოს (and nobody else has pulled it yet):**
    # Remove the sensitive file from the staging index while keeping it on your local disk
    git rm --cached .env
    echo ".env" >> .gitignore
    git add .gitignore
    git commit --amend --no-edit
    git push --force-with-lease origin main
    
  2. ** თუ საიდუმლო დამარხულია რამდენიმე ჩადენა თქვენს ისტორიაში (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-ის ვებ სერვერები ჯერ კიდევ ინარჩუნებენ ძველ, არარეფერენცირებულ ("ჩამოკიდებულ") ჩადენას SHA-ს ცოცხალი და საჯაროდ ხელმისაწვდომი https://github.com/<owner>/<repo>/commit/<old-40-char-sha> (and in any forks or Pull Requests) ნაგვის შეგროვების დასრულებამდე. - როგორ გავასუფთავოთ ქეშირებული Commit SHA GitHub-ზე დაუყოვნებლივ: 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-პროქსი ბოტებისგან?

არ შეგეშინდეთ და ჯერ არ გააუქმოთ თქვენი საკრედიტო ბარათი ან არ შეიტანოთ საბანკო გადასახადი. ორივე ამაზონის ვებ სერვისები (AWS) და Google Cloud Platform (GCP) აქვს დადგენილი შიდა ერთჯერადი შემთხვევითი სერთიფიკატის გაჟონვის ბილინგის კორექტირება / თავაზიანობა საკრედიტო პოლიტიკა ინდივიდუალური დეველოპერებისთვის, სტუდენტებისთვის და სტარტაპებისთვის, ** იმ პირობით, რომ** დაასრულებთ 100% მათი სავალდებულო უსაფრთხოების საკონტროლო სიის სანამ მათი ბილინგის განხილვის გუნდი შეაფასებს თქვენს მიმართვას.

5-საფეხურიანი AWS / GCP კანონპროექტის უარის თქმის პროტოკოლი (90%+ Success Rate for First-Time Leaks)

  1. ** პირველ რიგში დაასრულეთ უსაფრთხოების გამოსწორების ყოველი ნაბიჯი (AWS Will Reject Your Waiver Until the Account Is Clean):**
    • წაშალეთ გატეხილი IAM წვდომის გასაღები (and the IAM User if possible).
    • შეწყვიტე ყოველი არაავტორიზებული EC2 ინსტანცია, ავტომატური მასშტაბის ჯგუფი, 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).
    • ჩართეთ Hardware ან Authenticator App MFA (Multi-Factor Authentication) თქვენს AWS Root ანგარიშზე და ყველა IAM მომხმარებელზე.
  2. ** გახსენით Support Case Under "Account and Billing" (Free for All AWS/GCP Tiers, No Paid Support Plan Required):**
    • გადადით console.aws.amazon.com/support/home -> შექმენით საქმე -> ანგარიში და ბილინგი -> სერვისი: ბილინგი -> კატეგორია: დავა გადასახადი / გატეხილი ანგარიში.
  3. ** წარმოადგინეთ ეს ზუსტი ფაქტობრივი გამოსწორების და გაჭირვების შეჯამება:**
    • ** აღიარეთ ქრონოლოგია და მიზეზი:** მკაფიოდ მიუთითეთ, როდესაც გასაღები შემთხვევით გამოჩნდა 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 ბოტის არაავტორიზებული ანგარიშსწორება გამოიწვევს მძიმე ფინანსურ გაჭირვებას და ითხოვს ერთჯერადი თავაზიანობის ბილინგის კრედიტს/გათავისუფლებას თაღლითური გამოყენებისთვის.
  4. ** დროებით შეცვალეთ ან დახურეთ თქვენი დაკავშირებული გადახდის ბარათი, თუ ავტომატური ბილინგი გარდაუვალია:**
    • სანამ თქვენი AWS ბილინგის მხარდაჭერის საქმე განხილვის პროცესშია (which usually takes 5 to 15 business days სანამ AWS უსაფრთხოებისა და ბილინგის სერვისის გუნდები ამოწმებენ, რომ ყველა თაღლითური რესურსი შეწყვეტილია), დაუკავშირდით AWS მხარდაჭერას ბილეთის შიგნით და სთხოვეთ მათ ** დროებითი ბილინგის შეჩერება (defer auto-charge)** სადავო ინვოისზე, რათა არ მოხდეს თქვენი საბანკო ანგარიშის ოვერდრაფტი, სანამ კრედიტის კორექტირება მუშავდება.

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_... ან Firebase კლიენტის კონფიგურაცია შეზღუდული HTTP Referrer / Row-Level Security) შეიძლება ოდესმე შეეხოს წინა კოდს.

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**). როდესაც Push Protection ჩართულია, GitHub-ის სერვერები ამოწმებენ თქვენს git push ტრანზიტში და უარყოფენ ბიძგს მანამ, სანამ ის ოდესმე მოხვდება საცავში, როდესაც აღმოჩენილია გასაღებების ცნობადი ნიმუში.

(დაკავშირებული დეველოპერის და დისტანციური მუშაობის უსაფრთხოების ინციდენტისთვის იხ წარმოების შემთხვევითი მონაცემთა ბაზის ვარდნა, git ძალის დაძაბვა, საიდუმლო გაჟონვა და ინციდენტის ტრიაჟი, წარმოების მონაცემთა ბაზა დაიშალა ან S3 bucket წაიშალა ბოლო სარეზერვო ასლის გარეშე, შემთხვევით ელექტრონული ფოსტით გაგზავნილი კონფიდენციალური სახელფასო, კლიენტის PII ან HIPAA ელცხრილი, და გადაუდებელი დისტანციური მუშაობის უსაფრთხოება და მონაცემთა კონფიდენციალურობა.)


რეგიონალური მონაცემების დარღვევა და ღრუბლოვანი უსაფრთხოების საანგარიშო ორგანოები

რეგიონი / ქვეყანა Cloud Intrusion & Data Break Notification კანონი ოფიციალური კიბერ ინციდენტი და მარეგულირებელი ორგანო როდესაც გაჟონილი 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):** თუ გაჟონულ რწმუნებათა სიგელები წაკითხულ იქნა ევროკავშირის პერსონალურ მონაცემებზე და თქვენ არ შეგიძლიათ გამორიცხოთ არაავტორიზებული წვდომა CloudTrail/VPC Flow Logs-ში, აცნობეთ თქვენს სამეთვალყურეო ორგანოს ფარგლებში 72 hours.
** დიდი ბრიტანეთი ** ** დიდი ბრიტანეთის GDPR და მონაცემთა დაცვის აქტი 2018 ** საინფორმაციო კომისრის ოფისი (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`. ორი წუთის შემდეგ, როცა დააწკაპუნეთ „პარამეტრები -> შეცვალეთ საცავის ხილვადობა -> გახადეთ პირადი“, ათობით ავტომატიზებულმა სკრაპერ ბოტმა უკვე ჩამოტვირთა თქვენი commit diff და თქვენს AWS-ის, Stripe-ის, OpenAI-ისა და მონაცემთა ბაზის სერთიფიკატები ექსპლუატაციისთვის რიგში დააყენეს.

რატომ განაგრძეს ბოტები EC2 ინსტანციების გაშვებას ჩემს AWS ანგარიშში მას შემდეგაც, რაც მე წაშალე გაჟონვა 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+ გადასახადი, თუ ჰაკერებმა მოიპარეს ჩემი API გასაღები GitHub-დან და მოიპოვეს კრიპტო?

პირველად შემთხვევით გაჟონვის აბსოლუტურ უმრავლესობაში, დიახ, იმ პირობით, რომ თქვენ იმოქმედებთ სწრაფად, სრულად ითანამშრომლებთ მათ უსაფრთხოების გუნდთან და არ უგულებელყოფთ ინვოისს. როგორც AWS-ს, ასევე Google Cloud-ს აქვს შიდა ერთჯერადი თავაზიანობის ბილინგის კორექტირების პოლიტიკა დეველოპერებისთვის და მცირე ბიზნესებისთვის, რომლებიც დაზარალდნენ რწმუნებათა სიგელების გაჟონვის არასანქცირებული მწვერვალებით. სანამ „ანგარიში და ბილინგი“ მხარდაჭერით მოითხოვთ გადასახადის გაუქმებას, ჯერ უნდა დაამტკიცოთ, რომ გაჟონვა 100 პროცენტით დახურულია: გააუქმეთ ღია IAM კლავიშები, შეწყვიტეთ ყველა ბოროტი გამოთვლითი ინსტანცია და ავტომატური სკალირების ჯგუფები 30+ გლობალურ რეგიონში, ჩართეთ მრავალფაქტორიანი ავთენტიფიკაცია (`MFA`) თქვენს root ანგარიშზე და დააყენეთ AWS Budgets ხარჯების გაფრთხილებები.

რატომ აკეთებს git rm .env არ ამოიღო ჩემი საიდუმლო გასაღები GitHub-დან?

Git არის უცვლელი ვერსიის კონტროლის ჩანაწერი: როდესაც აწარმოებთ `git rm .env` და დააყენეთ ახალი commit, Git მხოლოდ ჩაწერს, რომ ფაილი არ არის უახლეს სნეპშოტში (`HEAD`), ხოლო სრული ტექსტის შინაარსის შენახვა `.env` მუდმივად ინახება წინა commit-ში (`the parent commit`) თქვენი საცავის ჩადენის ისტორიაში. მაშინაც კი, თუ თქვენ გადაწერთ თქვენს ისტორიას `git filter-repo` და ძალის გამოყენებით, ყველას შეუძლია წაიკითხოს საიდუმლო, თუ თქვენ არ გააუქმეთ იგი პროვაიდერის კონსოლში. ყოველთვის გააუქმეთ და შეატრიალეთ საიდუმლო გასაღები თქვენი ღრუბლოვანი პროვაიდერის საინფორმაციო დაფაზე და შემდეგ გამოიყენეთ `git filter-repo` ამოიღოთ მკვდარი სტრიქონი თქვენი ჩადენის ისტორიიდან.

დაკავშირებული გიდები

წყაროები და ოფიციალური მითითებები

  • ამაზონის ვებ სერვისები (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 ისტორიის ხელახალი ჩაწერა და მიუწვდომელი ქეშირებული Commit SHA-ების გასუფთავება.
  • ** Stripe Inc. (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 დატვირთვის იდენტიფიკაციის ფედერაცია (replacing static CI/CD keys), და წინასწარი ჩაბარების საიდუმლო სკანირება.