
Обрабатывает выходные данные SARIF от инструментов статического анализа, чтобы обнаруживать и удалять захардкоженные секреты в исходном коде, создавая чистую копию без исходных секретов.
SecretScrub избавит вас от всех ваших грязных захардкоженных секретов. Этот скрипт обрабатывает файлы в формате SARIF, который генерируется различными инструментами статического анализа. Инструмент сканирует каталог в файловой системе и создаёт новую копию каталога, в которой все обнаруженные в SARIF-файлах экземпляры секретов замаскированы. Поскольку секреты часто хранятся в истории Git, каталог .git исключается из результирующей копии.
Хотя SARIF является отраслевым стандартом, вывод SARIF, создаваемый различными инструментами, может различаться. В результате в настоящее время поддерживаются только следующие инструменты.
| Tool | Version | Comments |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | Работает только с отчётами, созданными с использованием опции --no-git, которая сканирует файловую систему, но не нижележащий репозиторий Git, если он существует. |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | Вывод ccs должен быть предварительно обработан в формат SARIF с помощью прилагаемого скрипта ccs2sarif.py. |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | Вывод CQ должен быть предварительно обработан в формат SARIF с помощью прилагаемого скрипта cq2sarif.py. Поскольку вывод CQ может быть очень зашумлённым, рекомендуется выполнять операцию маскирования отдельно или называть файлы так, чтобы CQ-файл появлялся последним в каталоге. |
| BinDetect | Встроенный инструмент, который обнаруживает двоичные файлы, обычно пропускаемые другими инструментами, ориентированными на текст. |
Из-за различий в выводе SARIF возможно, что вывод, созданный будущими версиями инструмента, будет работать некорректно.
Зависимости перечислены в файле requirements.txt. Кратко, требуются следующие пакеты:
| Package |
|---|
$ python secretscrub.py --input <path> --srcdir <path> --outdir <path> [--report <path>]
$ python secretscrub.py --analyse-with <analysis-tool-list> --srcdir <path> --outdir <path> [--report <path>]
ПРИМЕЧАНИЕ. Для работы инструменты должны присутствовать и быть установлены в текущей системе:
Docker-образ, собранный из этого дерева исходников, включает инструмент SecretScrub и копии инструментов Trivy, GitLeaks, ccs и cq.
Если он был собран с тегом secretscrub:latest, следующая команда запустит полный анализ и операцию маскирования с сопутствующим отчётом.
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
Обратите внимание, что это подразумевает монтирование двух томов в контейнер. Первый -- <source-path> -- должен содержать исходный, незамаскированный исходный код. Второй -- <output-path> -- получит замаскированные выходные данные и отчёт.
В следующих примерах предполагается, что исходный код хранится в подкаталоге с именем src, а SecretScrub установлен в подкаталоге с именем tools.
$ python tools/secretscrub.py --analse-with trivy,gitleaks,bindetect --srcdir src --outdir src-redacted
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
| Version |
|---|
| asn1 | 2.7.0 |
| filetype | 1.2.0 |
| py7zr | 0.20.5 |
| pyzipper | 0.3.6 |
| regex | 2023.5.5 |
| sarif-tools | 1.0.0 |
| Parameter | Definition |
|---|
| input | Расположение результатов SARIF, которые должны быть обработаны. Может содержать несколько SARIF-файлов, которые могут быть созданы с помощью разных поддерживаемых инструментов. |
| srcdir | Расположение исходного кода, который был отсканирован для создания результатов CQ, подлежащих обработке. |
| outdir | Расположение, где будут храниться замаскированные исходные файлы. |
| placeholder | Заполнитель, вставляемый вместо всех обнаруженных секретов. Может принимать следующие подстановки: - ${tool} Имя инструмента, использованного для обнаружения секрета- ${rule} Имя правила, использованного для обнаружения секрета- ${regex} Регулярное выражение, связанное с правилом, использованным для обнаружения секрета- ${yaml} Структура в стиле YAML flow, содержащая (если известно) только имена инструмента и правила, использованных для обнаружения секрета- ${yaml_regex} Структура в стиле YAML flow, содержащая (если известно) имена инструмента и правила, а также регулярное выражение, использованное для обнаружения секрета |
| process-archives | Переключатель для указания |
| report | Расположение и имя CSV-отчёта, который должен быть создан и содержать сведения о вычищенных секретах. |
| report-encryption | Если файл отчёта создаётся, метод шифрования, который следует использовать. Возможные значения: none, zip-aes256. По умолчанию: zip-aes256 |
| log-level | Уровень журналирования, используемый для вывода инструмента. Возможные значения: critical, fatal, error, warning, info, debug. По умолчанию: info |
| Parameter | Definition |
|---|
| analyse-with | Список инструментов для запуска, разделённый запятыми. Может включать любое из следующих: trivy, gitleaks, ccs. cq, bindetect |
| srcdir | Расположение исходного кода, который был отсканирован для создания результатов CQ, подлежащих обработке. |
| outdir | Расположение, где будут храниться замаскированные исходные файлы. |
| placeholder | Заполнитель, вставляемый вместо всех обнаруженных секретов. Может принимать следующие подстановки: - ${tool} Имя инструмента, использованного для обнаружения секрета- ${rule} Имя правила, использованного для обнаружения секрета- ${regex} Регулярное выражение, связанное с правилом, использованным для обнаружения секрета- ${yaml} Структура в стиле YAML flow, содержащая (если известно) только имена инструмента и правила, использованных для обнаружения секрета- ${yaml_regex} Структура в стиле YAML flow, содержащая (если известно) имена инструмента и правила, а также регулярное выражение, использованное для обнаружения секрета |
| report | Расположение и имя CSV-отчёта, который должен быть создан и содержать сведения о вычищенных секретах. |
| report-encryption | Если файл отчёта создаётся, метод шифрования, который следует использовать. Возможные значения: none, zip-aes256. По умолчанию: zip-aes256 |
| log-level | Уровень журналирования, используемый для вывода инструмента. Возможные значения: critical, fatal, error, warning, info, debug. По умолчанию: info |
| Tool | Comments |
|---|
| Trivy | Команда trivy должна быть установлена и доступна в PATH. |
| GitLeaks | Команда gitleaks должна быть установлена и доступна в PATH. |
| ccs | Файл ccs.py должен находиться в подкаталоге с именем ccs внутри каталога, содержащего файл secretscrub.py. |
| cq | Файлы cq.py и fn.py должны находиться в подкаталоге с именем cq внутри каталога, содержащего файл secretscrub.py. |
| bindetect | В настоящее время он включён в состав secretscrub, и дальнейшая установка не требуется. |