Хуки

Хук secrets: виявлення жорстко закодованих секретів

Перевірте кодову базу на жорстко закодовані облікові дані просто з командного рядка.

Хук secrets позначає облікові дані, вкомпільовані у вихідний код, замість того щоб читатися з оточення. Він орієнтується на походження (літерал проти звернення до змінної оточення), а не на вміст значення, тож не потребує вичерпного каталогу префіксів провайдерів і майже не дає хибних спрацьовувань. Це детермінований рушій спеціалізації secrets.

Сигнатури форматів провайдерів, облікові дані в рядках підключення й літерал, прив'язаний до ідентифікатора з назвою секрету, не залежать від мови: той самий рядок читається однаково в будь-якому файлі. Дві евристики, що залежать від синтаксису, тобто звернення до змінної оточення з жорстко закодованим значенням за замовчуванням і секрет, що потрапляє в sink журналу, враховують мову, тож console.log з JavaScript ніколи не шукається у файлі Rust, а os.getenv("X", "default") з Python розпізнається окремо.

Запуск​

npx lagune read secrets # scans the whole project
npx lagune read secrets --dir src # scans a directory
npx lagune read secrets --file config.ts # scans a single file

Перевірка виводить до двох розділів. Hardcoded secrets found є набором знахідок (жорстко закодоване значення за замовчуванням для змінної оточення з назвою секрету, облікові дані, вбудовані в рядок підключення, або значення, що відповідає перевіреному формату провайдера), тож хук завершується з ненульовим кодом. Secret handling to review manually є набором зачіпок: звичайний літерал, прив'язаний до ідентифікатора з назвою секрету (його походження можна визначити, а от чи є значення справжнім секретом, ні), і значення з назвою секрету, що потрапляє в sink журналу чи відповіді. Чистий запуск виводить no hardcoded secrets found.

Параметри CLI​

ПараметрЗначенняОпис
--dirкаталогОбмежити перевірку каталогом. Повторюється й поєднується з --file.
--fileфайлОбмежити перевірку одним файлом. Повторюється й поєднується з --dir.

Без параметрів хук перевіряє весь проєкт.

Охоплення мов​

Знахідка про значення оточення за замовчуванням і зачіпка про sink журналу читають набір форм для кожної мови, тож охоплюють мови нижче й мовчать в інших. Решта три сигнали працюють для кожного файлу.

СигналМови
Значення оточення за замовчуваннямJavaScript/TypeScript, Python, Ruby, PHP, Kotlin, Java, Go (cmp.Or), Rust, C#
Sink журналу чи відповідіJavaScript/TypeScript, Python, Ruby, PHP, Java, Kotlin, Go, Rust, C, C++, C#
Чи це проблема з політикою використання?

Ні. Розпізнавання формату секрету, щоб попередити, що його закомічено, є стандартним оборонним інструментом, тією самою операцією, яку виконують gitleaks, trufflehog і push protection від GitHub. Хук постачає сигнатури виявлення (публічні формати токенів), а не справжні секрети, і перевіряє та пояснює, а не викрадає дані.

Часті запитання

Він орієнтується на походження, а не на вміст значення. Формати з високою достовірністю (токени провайдерів, значення оточення за замовчуванням, рядки підключення) є знахідками, що завершуються з ненульовим кодом. Звичайний літерал, прив'язаний до ідентифікатора з назвою секрету, є зачіпкою для перегляду, яку треба підтвердити, а той самий ідентифікатор, прочитаний із process.env, узагалі не позначається.