Skip to content

Ключ 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, а вебхук-пожарные шланги в режиме реального времени транслируют все публичные PushEvent во всем мире вредоносные боты-скраперы анализируют ваши различия с помощью регулярных выражений и начинают выполнять автоматические облачные команды еще до того, как вы успеете их ввести. git revert.

В течение 90 seconds из AWS или GCP секретно попадая в общедоступный репозиторий, автоматические ботнеты разворачивают экземпляры графического процессора/процессора максимального размера (such as p4d.24xlarge or c6i.32xlarge в малоизвестных регионах, таких как ap-east-1 Гонконг, me-south-1 Бахрейн или sa-east-1 Сан-Паулу) для майнинга Monero (XMR), запросите AWS Simple Email Service (SES) увеличивается квота для защиты от фишингового спама или клонирования вашей личной S3 ведра и RDS базы данных, генерирующие $5,000 to $80,000+ в счетах за облачные вычисления за ночь. Аналогично, утечка OpenAI или Anthropic Ключ API немедленно включается в подпольные торговые площадки LLM с обратным прокси-сервером, которые тратят тысячи долларов в токен-кредитах в минуту, в то время как утечка Stripe живой секретный ключ (sk_live_...) предоставляет злоумышленникам полный программный доступ для чтения/записи для мошеннического возврата средств, экспорта клиентов PIIили инициировать несанкционированные выплаты Connect. Если злоумышленник активно вымогает деньги у вашей организации после проникновения в базы данных клиентов с помощью утекшего ключа, обратитесь в местные правоохранительные органы и на горячую линию по кибер-инцидентам через нашу номера экстренных служб немедленно и просмотрите наши соответствующие руководства по случайное удаление производственной базы данных, принудительное нажатие git и сортировка секретных утечек, производственная база данных удалена или сегмент S3 удален без последней резервной копиии безопасность удаленной работы в экстренных ситуациях и конфиденциальность данных.

Сделай это сейчас

  1. НЕ тратьте зря первые 60 секунд бега. git rm .env или git push --force: ПОЙДИТЕ ПРЯМО НА КОНСОЛЬ ПРОВАЙДЕРА (AWS IAM, Stripe, OpenAI, GCP) И ОТЗЫВАТЬ/ДЕАКТИВИРОВАТЬ КЛЮЧ В < 30 SECONDS. Удаление файла в новом коммите Git (or even making the GitHub repository Private) не делает ничего, чтобы остановить ботов, которые уже скопировали ваш ключ из пожарного шланга GitHub Events 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, функций Lambda, задач 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["Live Secret опубликован в общедоступном репозитории GitHub/GitLab (.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 (sk_live_... / rk_live_...)"| E["1. Развернуть ключ со сроком действия = «Немедленно». 2. Проверить /v1/refunds, /v1/transfers и конечные точки Webhook. 3. Оценить раскрытие личной информации клиента."]
    C -->|"3. OpenAI (sk-proj-...), Anthropic (sk-ant-...) или Gemini Key."| F["1. Отозвать ключ в консоли разработчика. 2. Временно снизить жесткий предел выставления счетов организации до 0 долларов США. 3. Проверить журналы использования на предмет утечки токенов."]
    C -->|"4. URI базы данных (postgres://, mongodb+srv://) или URL-адрес Redis."| G["1. Немедленно смените пароль базы данных. 2. Запустите pg_terminate_backend() / KILL, чтобы удалить активные соединения. 3. Заблокируйте группу безопасности только для IP-адресов VPC."]
    D --> H["Запустите многорегиональную проверку вычислительных ресурсов (уничтожьте мошеннические EC2/EKS/SageMaker/Lambda во всех более чем 30 регионах)"]
    E --> I["Очистить историю Git с помощью 'git filter-repo' + Очистить кэшированные представления GitHub Commit SHA"]
    F --> I
    G --> I
    H --> J{"Стали ли автоматические боты платить за облако от 1000 до 100 000 долларов?"}
    J -->|"ДА"| K["Откройте заявку на поддержку AWS/GCP по выставлению счетов -> Отправьте аудит безопасности после исправления ситуации + запросите единоразовое возмещение ущерба за мошенничество/утечку счетов"]
    J -->|"НЕТ"| I

Часть 1. Матрица аварийного отключения для каждого поставщика и криминалистическая экспертиза (First 5 Minutes)

Используйте эту справочную таблицу, чтобы найти точную кнопку отзыва, поведение автоматического сканирования секретов GitHub и скрытый вектор персистентности для ваших утекших учетных данных.

Тип учетных данных и шаблон префикса Секретное сканирование GitHub автоматически отменяет его? Немедленная 30-секундная процедура аварийного отключения Скрытый вектор устойчивости злоумышленника для проверки (Critical.) Где проверять несанкционированные вызовы API
1. Веб-сервисы Amazon (AKIA... IAM-ключ / ASIA... Токен СТС) НЕТ автоматического отзыва: 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. Бэкдор Роли 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 для автоматического повтора sk_live_ ключи обнаружены на main, НО ключи, спрятанные внутри строк base64, Gists или нестандартных файлов, могут проскользнуть мимо автоматического отзыва. 1. Перейти к dashboard.stripe.com/apikeys
2. Нажмите ... -> Клавиша прокрутки
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) + Разработчики -> Вебхуки (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 Accounts
2. Откройте учетную запись службы -> вкладку Ключи -> Удалить утекший идентификатор ключа.
3. Временно отключите всю учетную запись службы.
1. Новые Ключи сервисных учетных записей, созданные на основе утекшего ключа.
2. Экземпляры GPU Compute Engine (A100/H100/T4) раскрутился в чужих зонах
3. Изменены привязки политики IAM проекта (roles/owner или roles/editor).
Журналы облачного аудита GCP (Logs Explorer) используя запрос:
protoPayload.authenticationInfo.principalEmail="<service-account-email>"
4. ОпенАИ (sk-proj-...), Антропный (sk-ant-...), & HuggingFace (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-...): В случае утечки ключа административного API OpenAI бот может программно вызвать POST /v1/organization/admin_api_keys создать совершенно новые ключи API проекта, прежде чем отозвать первый. Аудит всех ключей в Организации. Панель мониторинга OpenAI/антропного использования (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_ токен немедленно отправит вредоносный бэкдор-коммит в ваши частные репозитории, добавьте мошеннический рабочий процесс Deploy Key / GitHub Actions (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. Выследите бэкдор-пользователей, роли и ключи доступа 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 для мошеннических инстансов EC2, групп автоматического масштабирования и заданий Bedrock/SageMaker

Почему жертвы до сих пор получают $12,000 счет в конце месяца после того, как они «проверили панель управления EC2 и не увидели ни одного экземпляра»? Поскольку консоль AWS показывает только один регион за раз (e.g., us-east-1), пока бот раскрутился 20 экземпляры в ap-south-1 (Mumbai), eu-north-1 (Stockholm), и sa-east-1 (Sao Paulo) и спрятал их внутри групп автоматического масштабирования EC2 (ASGs), чтобы при закрытии экземпляра EC2 вручную группа Auto Scaling запустила замену. 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
- Перед удалением мошеннических экземпляров EC2: Проверьте EC2 -> Auto Scaling Groups (and EC2 Spot Fleet Requests / ECS Clusters / EKS Node Groups / SageMaker Notebook & Training Jobs) в каждом затронутом регионе и удалите ПЕРВУЮ группу автоматического масштабирования или спотовый запрос, а затем завершите работу экземпляров. - Проверьте 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) всем, кто нажимает «Commits» на 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) до тех пор, пока не запустится сбор мусора. - Как немедленно очистить кэшированный 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-прокси-боты?

НЕ паникуйте, НЕ аннулируйте свою кредитную карту и не подавайте заявку на возврат банковского платежа. Обе Веб-службы Amazon (AWS) и Облачная платформа Google (GCP) иметь установленную внутреннюю Политику корректировки выставления счетов при случайной утечке учетных данных/Политику бесплатного кредитования для отдельных разработчиков, студентов и стартапов, при условии выполнения 100% их обязательного контрольного списка по устранению нарушений безопасности до того, как их группа по проверке счетов рассмотрит вашу апелляцию.

Пятиэтапный протокол отказа от счетов 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, 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.
  2. Откройте запрос в службу поддержки в разделе "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 / безопасностью на уровне строк), может когда-либо касаться кода внешнего интерфейса.

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 в пути и отклонять push-уведомление до того, как оно попадет в хранилище всякий раз, когда обнаруживается узнаваемый шаблон ключа.

(Информацию об инцидентах, связанных с безопасностью разработчиков и удаленной работы, см. Случайное удаление производственной базы данных, принудительное нажатие git, утечка секрета и сортировка инцидентов, Рабочая база данных удалена или сегмент S3 удален без последней резервной копии., Случайно отправленные по электронной почте конфиденциальные данные о заработной плате, личные данные клиента или таблица HIPAA.и Безопасность удаленной работы в экстренных ситуациях и конфиденциальность данных.)


Региональные органы по отчетности об утечках данных и облачной безопасности

Регион/Страна Закон об уведомлениях о вторжениях в облака и утечках данных Официальный орган по киберинцидентам и регулирующему органу Когда утечка ключа GitHub требует обязательной нормативной отчетности
США Правило о гарантиях Федеральной торговой комиссии (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) ВВП(Articles 33 & 34) и Директива NIS2 (Directive (EU) 2022/2555) Национальное управление по защите данных (CNIL, BfDI, DPC) и Национальная CSIRT (ENISA) Строгий 72-Hour Часы (GDPR Art. 33): Если утекшие учетные данные имели доступ для чтения к личным данным ЕС, и вы не можете исключить несанкционированный доступ к журналам потоков CloudTrail/VPC, уведомите об этом свой надзорный орган в течение 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
ОПК (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 и базы данных для использования.

Почему боты продолжали запускать инстансы 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`) в своей корневой учетной записи и настройте оповещения о расходах AWS Budgets.

Почему git rm .env не удалять мой секретный ключ с GitHub?

Git , это неизменяемый реестр контроля версий: когда вы запускаете `git rm .env` и отправить новый коммит, Git записывает только то, что файл отсутствует в самом новом снимке (`HEAD`), сохраняя при этом полное содержимое открытого текста `.env` постоянно хранится внутри предыдущего коммита (`the parent commit`) в истории коммитов вашего репозитория. Даже если вы перепишете свою историю с помощью `git filter-repo` и принудительное нажатие, любой сможет прочитать секрет, если вы не отозвали его на консоли провайдера. Всегда сначала отзывайте и меняйте секретный ключ на панели управления вашего облачного провайдера, а затем используйте `git filter-repo` чтобы очистить мертвую строку из вашей истории коммитов.

Связанные руководства

Источники и официальное руководство

  • Веб-службы Amazon (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 Inc. (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) и сканирование секретов перед фиксацией.