
Сканер секретов на основе Git-хуков, который обнаруживает токены, пароли и приватные ключи в исходящих наборах изменений, предотвращая попадание конфиденциальных данных в коммиты или пуши в репозитории.
Инструмент для обнаружения и предотвращения попадания секретов в репозиторий
Talisman — это инструмент, который проверяет наборы изменений git, чтобы гарантировать, что потенциальные секреты или конфиденциальная информация не покидают рабочую станцию разработчика.
Он проверяет исходящие изменения на предмет подозрительного содержимого, такого как потенциальные SSH-ключи, токены авторизации, закрытые ключи и т.д.
Talisman поддерживает MAC OSX, Linux и Windows.
Talisman может быть установлен и использован одним из следующих способов:
Talisman можно настроить как pre-commit или pre-push хук в git-репозиториях.
Инструкции приведены ниже.
Отказ от ответственности: Talisman не может обнаружить секреты, попадающие в git-репозиторий через принудительный push. Принудительный push считается вредоносным действием, и мы рекомендуем администраторам git-репозиториев применять соответствующие меры для авторизации таких действий.
Мы рекомендуем установить talisman в PATH, чтобы он был доступен для
фреймворков хуков git и скриптов. Выберите правильный двоичный файл для вашей системы на
нашей странице релизов или запустите
наш скрипт установки:```bash
bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/install.sh)"
Или установите переменную окружения `INSTALL_LOCATION`, чтобы указать собственное расположение для бинарного файла:```bash
INSTALL_LOCATION=/usr/local/bin bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/install.sh)"
Или установите переменную окружения VERSION на тег релиза, чтобы установить конкретную версию::```bash
VERSION=v1.36.0 bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/install.sh)"
Или используя linuxbrew в Linux и homebrew в macOS, выполнив следующую команду в терминале:```bash
brew install talisman
Мы предлагаем скрипты, которые установят Talisman в качестве шаблона хука git pre-commit, так как это обеспечит присутствие Talisman не только в ваших существующих git-репозиториях, но и в любом новом репозитории, который вы инициализируете ('init') или клонируете ('clone').
В качестве хука pre-commit: ``` bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/install.bash)"
ИЛИ
В качестве pre-push hook: ```
bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/install.bash)" -- pre-push
$PATH, вас попросят указать подходящее место для её настройки. Выберите номер опции, где вы указываете источник профиля на вашей машине.Помните, что нужно выполнить source для файла пути или перезапустить терминал.
Если вы решите настроить $PATH позже, экспортируйте TALISMAN_HOME=$HOME/.talisman/bin в путь.
Глобальная установка talisman в качестве хука не перезапишет существующие хуки. Если скрипт установки обнаружит существующие хуки, он только сообщит об этом в консоли. Для запуска нескольких хуков мы рекомендуем использовать фреймворк хуков, такой как pre-commit или husky. Эти инструкции предполагают, что исполняемый файл talisman установлен где-то в вашем системном пути.
Используйте pre-commit для управления существующими хуками вместе с
Talisman. Ссылайтесь на наш pre-commit-hooks в вашем
.pre-commit-config.yaml:```yaml
### Husky
[husky](https://typicode.github.io/husky) — это npm-модуль для управления хуками.
Добавьте следующую строку в конфигурацию pre-commit husky в вашем
`package.json`:```
talisman --githook pre-commit
После того как исполняемый файл talisman установлен, вы можете настроить автономный pre-commit хук для git-репозитория:```bash cd my-git-project echo "talisman -g pre-commit" >> .git/hooks/pre-commit chmod +x .git/hooks/pre-commit
# Обновление
Начиная с версии v0.4.4, Talisman <b>автоматически обновляет</b> бинарный файл до последнего релиза при вызове хука (на pre-commit/pre-push, в зависимости от настройки). Так что просто расслабьтесь и продолжайте использовать последнюю версию Talisman без лишних усилий.
Можно задать следующие переменные окружения:
1. TALISMAN_SKIP_UPGRADE: Установите значение true, если хотите пропустить автоматическую проверку обновлений. По умолчанию false.
2. TALISMAN_UPGRADE_CONNECT_TIMEOUT: Максимальное время ожидания соединения перед отменой обновления (в секундах). По умолчанию 10 секунд.
Если вам всё же нужно выполнить обновление вручную, вот шаги:
<br>[Рекомендуется] Обновите бинарный файл Talisman и скрипты хуков до последней версии:```bash
curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/update_talisman.bash > /tmp/update_talisman.bash && /bin/bash /tmp/update_talisman.bash
Обновляйте только бинарный файл Talisman, выполняя:```bash curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/update_talisman.bash > /tmp/update_talisman.bash && /bin/bash /tmp/update_talisman.bash talisman-binary
# Talisman в действии
После успешной установки Talisman будет автоматически выполнять проверки на наличие очевидных секретов перед каждым коммитом или отправкой (в зависимости от выбранного варианта при установке). В случае обнаружения уязвимостей безопасности Talisman отобразит подробный отчет об ошибках:```bash
$ git push
Talisman Report:
+-----------------+-------------------------------------------------------------------------------+
| FILE | ERRORS |
+-----------------+-------------------------------------------------------------------------------+
| danger.pem | The file name "danger.pem" |
| | failed checks against the |
| | pattern ^.+\.pem$ |
+-----------------+-------------------------------------------------------------------------------+
| danger.pem | Expected file to not contain hex encoded texts such as: |
| | awsSecretKey=c64e8c79aacf5ddb02f1274db2d973f363f4f553ab1692d8d203b4cc09692f79 |
+-----------------+-------------------------------------------------------------------------------+
В приведенном выше примере файл danger.pem был отмечен как нарушение безопасности по следующим причинам:
Если вы установили Talisman как хук pre-commit, он будет сканировать только diff в каждом коммите. Это означает, что он будет сообщать об ошибках только для тех частей файла, которые были изменены.
Если вы установили Talisman как хук pre-push, он будет сканировать весь файл, в котором были внесены изменения. Как упоминалось выше, рекомендуется использовать Talisman как pre-commit hook.
Следующие детекторы выполняются для набора изменений с целью обнаружения секретов/конфиденциальной информации:
Если вы действительно уверены, что хотите отправить этот файл, вы можете настроить его в файле .talismanrc в корне проекта. Содержимое, необходимое для игнорирования неудачных файлов, будет выведено Talisman на консоль сразу после отчета об ошибке Talisman:```bash
If you are absolutely sure that you want to ignore the above files from talisman detectors, consider pasting the following format in .talismanrc file in the project root
fileignoreconfig:
Внесение этого в файл `.talismanrc` гарантирует, что Talisman будет игнорировать файл `danger.pem`, пока контрольная сумма совпадает со значением, указанным в поле `checksum`.
### Интерактивный режим
**Доступен только для пользователей не Windows**
Если вам надоело каждый раз копировать содержимое в `.talismanrc` при возникновении ошибки от Talisman, вы можете включить интерактивный режим и позволить Talisman помочь вам с добавлением файлов для игнорирования.
Просто выполните следующие шаги:
1. Откройте ваш профиль bash, где заданы переменные окружения (`.bashrc`, `.bash_profile`, `.profile` или любое другое место)
2. Вы увидите переменную `TALISMAN_INTERACTIVE` под `# >>> talisman >>>`
3. Если она ещё не установлена в true, добавьте `export TALISMAN_INTERACTIVE=true`
4. Не забудьте сохранить и выполнить source для файла
Вот и всё! Каждый раз, когда хук Talisman находит ошибку во время pre-push/pre-commit, просто следуйте инструкциям, которые предлагает Talisman.
Будьте осторожны и не игнорируйте файл, не проверив его содержимое. Вы должны быть уверены, что никакой секрет не утекает.
### Игнорирование конкретных детекторов
Ниже приведено подробное описание различных полей, которые можно настроить в файле `.talismanrc`:
* `filename` : Это поле должно содержать полное имя файла.
* `checksum` : Это поле всегда должно содержать значение, указанное Talisman в сообщении выше. Если в файл вносятся изменения, это приведёт к новой контрольной сумме, и Talisman снова просканирует файл на предмет потенциальных угроз безопасности.
* `ignore_detectors` : Это поле отключает определённые детекторы для конкретного файла.
Например, если ваш файл `init-env.sh` вызывает предупреждение, вы можете отключить только
это предупреждение, оставаясь при этом в курсе других проблем (например, содержимого файла):```yaml
fileignoreconfig:
- filename: init-env.sh
checksum: cf97abd34cebe895417eb4d97fbd7374aa138dcb65b1fe7f6b6cc1238aaf4d48
ignore_detectors: [filename, filesize]
Примечание: Здесь детекторы filename и filesize игнорируются для init-env.sh, но детектор filecontent всё равно сработает на init-env.sh
На данный момент можно игнорировать
filecontentfilenamefilesizeТак как некоторые ваши файлы могут содержать ключевые слова, такие как key или pass, которые не обязательно связаны с секретами, возможно, вы захотите игнорировать эти ключевые слова, чтобы уменьшить количество ложных срабатываний.
Это можно сделать с помощью поля allowed_patterns на уровне файла и/или на уровне репозитория:```yaml
fileignoreconfig:
В предыдущем примере `key` разрешено в файле `test`, `keyword` и `pass` разрешены на уровне репозитория.
Поле `allowed_patterns` также поддерживает регулярные выражения Golang. Вот простой пример кода, где может быть полезен Golang RegExp:```sh
export AWS_ACCESS_KEY_ID = AKIAIO5FODNN7EXAMPLE
export AWS_ACCESS_KEY_ID=$(vault read -field=value path/to/aws-access-key-id)
По умолчанию Talisman будет предупреждать для обеих строк. Во второй строке мы извлекаем AWS Access Key ID из Hashicorp Vault, который не раскрывает секрет коду. Если такое использование часто встречается в вашем коде, возможно, вы захотите указать Talisman не предупреждать при использовании Vault. Это можно сделать с помощью конфигурации вида:```yaml allowed_patterns:
### Игнорирование нескольких файлов одного типа (с подстановочными знаками)
Вы можете игнорировать все файлы определённого типа, так как знаете, что они всегда безопасны, и не хотите, чтобы Talisman их сканировал.
Шаги:
1. Отформатируйте шаблон с подстановочными знаками для файлов, которые вы хотите игнорировать. Например, `*.lock`
2. Используйте [калькулятор контрольной суммы](#checksum-calculator), чтобы передать шаблон и получить общую контрольную сумму. Например, `talisman --checksum="*.lock"`
3. Скопируйте блок fileconfig, выведенный на консоль, в файл .talismanrc.
Если какие-либо из файлов будут изменены, Talisman снова просканирует их, если вы не пересчитаете новую контрольную сумму и не замените её в файле .talismanrc.
### Игнорирование файлов с указанием области языка
Вы можете игнорировать файлы, указав область языка для вашего проекта в вашем talismanrc.```yaml
scopeconfig:
- scope: go
- scope: node
- scope: images
- scope: php
- scope: python
Talisman настроен игнорировать определенные файлы на основе указанной области. Например, упоминание области node в scopeconfig предотвращает сканирование Talisman таких файлов, как yarn.lock или package-lock.json.
Вы можете указать несколько областей.
В настоящее время .talismanrc поддерживает только области для go, node, php и images. Другие области будут добавлены в ближайшее время.
Вы можете указать пользовательские регулярные выражения для поиска в текущем репозитории```yaml custom_patterns:
<br/><i>
**Примечание**: Использование .talismanignore устарело. Файл .talismanrc заменяет его по следующим причинам:
* .talismanrc имеет гораздо более читаемый формат YAML
* Он также обеспечивает более безопасные практики: каждое изменение файла с потенциально конфиденциальным значением должно быть проверено
* Новый формат также обеспечивает расширяемость для добавления новых полезных функций. Следите за обновлениями </i>
## Настройка порога серьезности
Каждая проверка имеет уровень серьезности:
1. Низкий
2. Средний
3. Высокий
Вы можете указать порог в вашем .talismanrc:```yaml
threshold: medium
Это сообщит обо всех проблемах со степенью серьезности «Средняя» и выше (Потенциальные риски, которые находятся ниже порога, будут отмечены в предупреждениях)
Вы можете настроить уровни безопасности детекторов, предоставляемых Talisman, в файле .talismanrc:```yaml custom_severities:
Используя пользовательские уровни серьезности и порог серьезности, Talisman можно настроить так, чтобы он предупреждал только о том, что важно в вашем контексте. Это может быть полезно для уменьшения количества ложных срабатываний.
## Talisman как утилита командной строки
Если вы выполните `talisman` в командной строке, вы сможете просмотреть все доступные параметры.```
-c, --checksum string checksum calculator calculates checksum and suggests .talismanrc format
-d, --debug enable debug mode (warning: very verbose)
-g, --githook string either pre-push or pre-commit (default "pre-push")
--ignoreHistory scanner scans all files on current head, will not scan through git commit history
-i, --interactive interactively update talismanrc (only makes sense with -g/--githook)
-p, --pattern string pattern (glob-like) of files to scan (ignores githooks)
-r, --reportdirectory string directory where the scan reports will be stored
-s, --scan scanner scans the git commit history for potential secrets
-w, --scanWithHtml generate html report (**Make sure you have installed talisman_html_report to use this, as mentioned in Readme**)
-v, --version show current version of talisman
Если у вас регулярно возникает ситуация, когда слишком много файлов помечаются хуком talisman, хотя вы знаете, что они безопасны для фиксации, вы можете использовать эту функцию, чтобы talisman упростил процесс. Интерактивный режим позволит Talisman предложить вам напрямую добавить файлы, которые вы хотите игнорировать, в .talismanrc из командной строки. Чтобы включить эту функцию, необходимо установить переменную TALISMAN_INTERACTIVE в true в вашем bash-файле.
Вы можете вызвать talisman в интерактивном режиме одним из двух способов:
Откройте ваш bash-файл и добавьтеexport TALISMAN_INTERACTIVE=true
Don't forget to source the bash file for the variable to take effect!
Alternatively, you can also invoke the interactive mode by using the CLI utility
(for using pre-commit hook)
talisman -i -g pre-commit
Примечание: Если вы используете интеграцию системы контроля версий IDE для операций с git, эта функция не будет работать. Вы всё равно можете использовать предложенное имя файла и контрольную сумму, чтобы ввести их в файл .talismanrc вручную.
Теперь вы можете запускать Talisman из командной строки и, возможно, добавить его в свои конвейеры CI/CD для сканирования истории git вашего репозитория на наличие конфиденциального содержимого. Это также включает сканирование файлов, перечисленных в файле .talismanrc.
Шаги:
cd <каталог для сканирования>talisman --scan
talisman --scan --reportdirectory=/Users/username/DesktopВы также можете использовать другие параметры сканирования, как указано выше.
В настоящее время Talisman не поддерживает игнорирование файлов для сканирования.
Калькулятор контрольных сумм Talisman выводит формат yaml, который вы можете напрямую скопировать и вставить в файл .talismanrc, чтобы игнорировать определённые форматы файлов от детекторов Talisman.
Чтобы запустить вычисление контрольной суммы, выполните "cd" в корень вашего репозитория и выполните следующую команду:
Например:
talisman --checksum="*.pem *.txt"
Пример вывода:
.talismanrc format for given file names / patterns
fileignoreconfig:
- filename: '*.pem'
checksum: f731b26be086fd2647c40801630e2219ef207cb1aacc02f9bf0559a75c0855a4
ignore_detectors: []
- filename: '*.txt'
checksum: d9e9e94868d7de5b2a0706b8d38d0f79730839e0eb4de4e9a2a5a014c7c43f35
ignore_detectors: []
Примечание: Калькулятор контрольных сумм учитывает проиндексированные (staged) файлы при вычислении общей контрольной суммы файлов.
Инструмент командной строки Talisman talisman также имеет возможность создавать подробный HTML-отчёт, которым можно делиться. После установки Talisman следуйте шагам, описанным в talisman-html-report, чтобы установить пакет для создания отчётов в папку .talisman. Для создания HTML-отчёта выполните:
talisman --scanWithHtmlЭто запустит сканирование репозитория и создаст папку talisman_html_report в сканированном репозитории. Чтобы получить доступ к отчёту, необходимо запустить HTTP-сервер внутри этого репозитория. Ниже приведён рекомендуемый способ запуска HTTP-сервера:
python -m SimpleHTTPServer <порт> (например, 8000)Теперь вы можете получить доступ к отчёту, перейдя по адресу:
http://localhost:8000
Примечание: Вам не нужно запускать сервер, если вы запускаете Talisman в CI или любой другой хостинговой среде.
Процесс удаления зависит от того, как вы установили Talisman. Вы могли выбрать установку в качестве глобального шаблона хука или в отдельный репозиторий.
Пожалуйста, следуйте шагам ниже в зависимости от того, какой вариант вы выбрали при установке.
Выполните следующую команду в терминале, чтобы удалить Talisman глобально с вашего компьютера.
Для предварительного хука (pre-commit):``` bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/uninstall.bash)"
Для хука pre-push:```
bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/uninstall.bash)" -- pre-push
Это
Вам придётся вручную удалить TALISMAN_HOME из переменных окружения
При установке Talisman в вашем репозитории был создан хук pre-commit или pre-push (в зависимости от выбора).
Вы можете удалить хук вручную, удалив хук Talisman pre-commit или pre-push из папки .git/hooks вашего репозитория.
Чтобы внести вклад в Talisman, ознакомьтесь с нашим руководством по участию.