Приховування — це не те саме, що забезпечення безпеки
Нещодавно керівник, який не є інженером, створив B2B SaaS за два дні. Вони використовували ШІ, щоб написати все. Продукт працює. Клієнти ним користуються. Функції випускаються швидко.
Потім мені дісталася інфраструктура. Моє завдання — знаходити ризики в коді, який уже працює в продакшені.
Я виявив величезну вразливість у безпеці. API-ключ був жорстко прописаний безпосередньо в сирцевому коді.
Я сказав керівнику, що це небезпечно. Вони негайно це виправили.
Ключ зник із коду, але тепер він з'явився у файлі README як крок налаштування. Секрет перемістився з коду в документацію. Він усе ще залишався всередині репозиторію. Насправді тепер його було навіть легше знайти.
Я ще раз пояснив проблему. Цього разу вони перенесли ключ у базу даних.
Це здавалося прогресом. Ключ був поза репозиторієм. Але коли я перевірив базу даних, ключ лежав там у відкритому вигляді (plaintext). Шифрування не було. Будь-хто, хто має доступ до бази даних, міг його прочитати.
Ключ переміщувався тричі:
- З сирцевого коду
- У README
- У базу даних
Місце розташування змінилося, але безпека не покращилася. Вони просто ховали секрет, а не робили його недоступним.
Приховувати означає винести щось із поля зору. Забезпечувати захист означає зробити це безглуздим для зловмисника.
У програмному забезпеченні ви повинні дотримуватися цих правил:
- Ніколи не зберігайте секрети у своєму репозиторії. Це стосується коду, файлів README або конфігураційних файлів.
- Передавайте значення ззовні під час виконання програми (runtime), використовуючи змінні оточення або менеджер секретів (secret manager).
- Якщо ви використовуєте базу даних, шифруйте значення. Текст у відкритому вигляді (plaintext) — це ризик.
- Ротуйте будь-який ключ, який коли-небудь був розкритий у відкритому вигляді.
Це сталося, попри те, що керівник використовував найсучасніші моделі ШІ, доступні на ринку.
ШІ створений для того, щоб видавати вам робочий код. Він із задоволенням напише код, що містить секрет у відкритому вигляді, якщо ви не скажете йому інакше. ШІ забезпечує можливості, але він не забезпечує безпеку автоматично.
Інтелект стає безпекою лише тоді, коли ви знаєте, що саме потрібно захищати.
Якщо ви думаєте, що виправили діру в безпеці лише тому, що перенесли її в інше місце, зупиніться. Запитайте себе:
- Чи залишився він у репозиторії?
- Чи обмежений доступ лише тими людьми, яким він потрібен?
- Чи зашифровані дані?
Секрет має бути у правильному місці, а не просто в невидимому.
Source: https://dev.to/jun_uen0/playing-hide-and-seek-with-an-api-key-our-cfos-claude-code-kept-hiding-job
Optional learning community: https://t.me/GyaanSetuAi