Закріплені секретні файли
Один відсутній .gitігноруйте, і ваш .env відправляється у світ.
Що таке Закріплені секретні файли?
Жорстке кодування секрету в джерелі є однією з проблем. Закріплення цілого файлу з них є іншим. Репозиторій без .gitignore відстежує файли .env, приватні ключі та JSON облікового запису служби з першого коміту, і коли файл відстежується, він належить до історії, тому кожен клон містить копію. Ви клонуєте загальнодоступний репозиторій, прочитаєте зафіксований .env і перейдете в робоче середовище. Потім ви скасуєте відстеження файлів за допомогою git rm --cached, повернете кожен відкритий ключ, додасте .gitignore та встановите хук перед фіксацією, який блокує секретні імена файлів.
Що ви дізнаєтесь у Закріплені секретні файли
- Визнайте, що відсутній або неповний .gitignore дозволяє фіксувати та відстежувати цілий секретний файл, .env, закритий ключ або JSON облікового запису служби, починаючи з першого коміту
- Зрозумійте, чому кожен клон загальнодоступного сховища містить копію відстежуваного секретного файлу, тому розкриття неможливо скасувати, видаливши файл пізніше
- Відрізняйте фіксацію секретного ФАЙЛУ під контролем версій від жорсткого кодування секретного літералу всередині вихідного коду, і знайте, що обидва вони повинні зберігатися поза репо
- Застосуйте очищення: видаліть файли з відстеження за допомогою git rm --cached і поверніть відкриті ключі, розглядаючи будь-який надісланий секрет як скомпрометований
- Запобігайте повторенню за допомогою .gitignore, який охоплює секретні файли, а також хук перед фіксацією, який блокує відомі секретні імена файлів перед їх фіксацією
Закріплені секретні файли — Кроки навчання
-
Збільште розмір мішені
Сьогодні Боб націлений на Tavonn, стартап із інтеграції платежів, який відкрито розповсюджує частину свого коду. Він починає з загальнодоступного сховища, оцінюючи, чим керує компанія, перш ніж шукати шлях туди. Загальнодоступне репо — це подарунок для такого, як Боб: увесь проект, кожен файл можна завантажити однією командою.
-
Клонуйте репо
Боб клонує сховище на власну машину, щоб він міг читати кожен файл, який він відстежує, офлайн і у власному темпі. Незалежно від доріжок репо з клоном. Якщо секретний файл коли-небудь був зафіксований, він знаходиться в копії, яку він щойно витягнув.
-
Список відстежуваних файлів
Боб перераховує все, що відстежує репозиторій. Він не дивиться на те, що є на диску, він запитує git, які файли насправді перебувають під контролем версій, тому що це ті, які несе кожен клон.
-
Прочитайте секретний файл
Боб відкриває зафіксований файл середовища. Це різниця між цим витоком і одним жорстко закодованим ключем: це не одне значення, вставлене в рядок коду, це цілий файл секретів під контролем версій. Тут є все, що потрібно для роботи служби, у вигляді звичайного тексту.
-
Досягніть сценічного середовища
Витік ключа є лише теорією, поки він щось не відкриває. У Боба вже є всі необхідні елементи з клону: причетний .env дав йому базову URL-адресу API у PUBLIC_API_URL і активний ключ, а маршрути, які він клонував у src/routes/payments.js , визначають платіжний канал у /v1/transactions . Він збирає запит і несе ключ у заголовку авторизації так, як це зробив би справжній клієнт. Кінцеві точки ніколи не були секретом; вони сидять у публічному джерелі. Ключ був, і зафіксований файл передав йому один, тому у сервера немає причин відхилити запит.
-
Платіжні дані відкриті
Сервер довірив ключу та відповів. Боб читає платіжні записи Тавонна поза компанією, не маючи власного рахунку.
-
Перевірка знань
Ви щойно спостерігали, як публічне репо передає сторонньому ключі до живого середовища. Зафіксуйте чому.
-
Тривога приземляється
Ви володієте репо платіжної служби Tavonn. Вночі секретний сканер служби безпеки позначив загальнодоступне сховище та надіслав вам електронний лист. Висновок однозначний: зафіксований .env із активними ключами знаходиться в загальнодоступному репо, і немає жодного .gitignore , який зберігає такі файли.
-
Відстежується, без .gitignore
Ваш перший крок — побачити це на власні очі. Ви вказуєте, що git відстежує в репозиторії, і ось воно: .env і ключ сервісного облікового запису знаходяться під контролем версій, а .gitignore немає в списку. Наявність файлу на диску – це одне; файл, який відстежує git, фіксується в історії та в кожному клоні.
-
Відстежте секретні файли
Ви зупиняєте git відстеження секретних файлів за допомогою git rm --cached , який видаляє їх з індексу, залишаючи на диску, щоб служба все ще могла працювати локально. Ви фіксуєте та натискаєте цю зміну, і файли зникають із поточного репо. Здається, це виправлення. Це не так, і наступний крок показує чому.
Охоплення стандартів безпеки
CWE
- CWE-540 Inclusion of Sensitive Information in Source Code
- CWE-522 Insufficiently Protected Credentials
MITRE ATT&CK
- T1552.001 Unsecured Credentials: Credentials In Files
CIS Controls
- CIS 3 Data Protection
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.DS Data Security
- PR.PS Platform Security