
Высокопроизводительный сканер секретов. CLI, библиотека Go, расширение для Burp Suite и расширение для Chrome. 487 правил обнаружения с проверкой учетных данных в реальном времени.
Titus — это высокопроизводительный сканер секретов, который обнаруживает учётные данные, API-ключи и токены в исходном коде, файлах и истории git. Он поставляется с 487 правилами обнаружения, охватывающими сотни сервисов и типов учётных данных, взятыми из NoseyParker и Kingfisher. Titus работает как CLI, библиотека Go, расширение для Burp Suite и расширение для браузера Chrome — все они используют один и тот же движок обнаружения и набор правил.
Созданный для инженеров по безопасности, пентестеров и команд DevSecOps, Titus сочетает ускоренное сопоставление регулярных выражений с помощью Hyperscan/Vectorscan с проверкой учётных данных в реальном времени, чтобы находить и подтверждать утечки секретов по всей вашей кодовой базе.
Скачайте готовый бинарный файл со страницы Releases или соберите из исходного кода:```bash make build
Бинарный файл будет находиться в `dist/titus`.
## Быстрый старт```bash
# Scan a file for secrets
titus scan path/to/file.txt
# Scan a directory for leaked credentials
titus scan path/to/directory
# Scan a public GitHub repository (no token needed)
titus scan github.com/org/repo
# Scan a public GitLab project (no token needed)
titus scan gitlab.com/namespace/project
# Scan git history for secrets in past commits
titus scan --git path/to/repo
# Scan a Docker / OCI image (pulled from a registry — no docker daemon required)
titus scan --docker alpine:latest
# Validate detected secrets against source APIs
titus scan path/to/code --validate
Результаты записываются в хранилище данных (titus.ds по умолчанию) и выводятся в консоль.
Сканируйте публичные репозитории напрямую по URL — API-токен не требуется:```bash
titus scan github.com/kubernetes/kubernetes
titus scan gitlab.com/gitlab-org/cli
titus scan https://github.com/org/repo titus scan https://gitlab.com/namespace/project.git
Для сканирования в масштабах организации или пользователя используйте специальные подкоманды:```bash
# Scan all public repos in a GitHub org
titus github --org kubernetes
# Scan all repos in a GitHub org with a token (private repos + higher rate limits)
titus github --org kubernetes --token $GITHUB_TOKEN
# Scan all repos for a GitHub user
titus github --user octocat
# Scan all projects in a GitLab group
titus gitlab scan --group mygroup --token $GITLAB_TOKEN
# Scan a single repo with git history (finds deleted secrets)
titus github owner/repo --git
Токены необязательны для публичных репозиториев. Установите GITHUB_TOKEN или GITLAB_TOKEN (или используйте --token) для доступа к приватным репозиториям и повышения лимитов API.
Сканируйте образы контейнеров напрямую — без docker-демона и без бинарного файла docker. Titus извлекает образы напрямую из любого OCI-реестра по HTTPS (используя учётные данные из ~/.docker/config.json) или читает образы из локального tarball, созданного командой docker save, либо из каталога с раскладкой OCI-образа. Затем он сканирует метаданные манифеста/конфигурации образа и каждый обычный файл в каждом слое, включая файлы нижних слоёв, удалённые последующими слоями (поскольку секреты могут оставаться восстановимыми из истории образа).```bash
titus scan --docker alpine:latest titus scan docker://ghcr.io/owner/repo:tag
titus scan --docker ./my-app.tar
titus scan --docker ./img/
Аутентификация использует вашу существующую конфигурацию Docker / Podman (`~/.docker/config.json`, `${XDG_RUNTIME_DIR}/containers/auth.json`). Приватные реестры, требующие нового входа, должны быть предварительно аутентифицированы с помощью `docker login` (или `podman login`, или `crane auth login`) — titus не запрашивает учётные данные.
### Просмотр результатов сканирования
Используйте `report`, чтобы повторно прочитать результаты предыдущего сканирования:```bash
# Human-readable summary of detected secrets
titus report
# JSON output for programmatic processing
titus report --format json
# SARIF output for CI/CD integration with GitHub Advanced Security
titus report --format sarif
# Report from a specific datastore
titus report --datastore path/to/titus.ds
Вы также можете управлять форматом вывода во время сканирования с помощью --format:```bash
titus scan path/to/code --format json
### Проверка обнаруженных секретов
Передайте `--validate` во время сканирования, чтобы проверить обнаруженные секреты через их исходные API:```bash
titus scan path/to/code --validate
Валидация выполняется параллельно (по умолчанию 4 воркера, настраивается с помощью --validate-workers) и помечает каждую находку как подтверждённую, опровергнутую или неизвестную.
titus rules list
titus scan path/to/code --rules-include "aws,gcp"
titus scan path/to/code --rules-exclude "kingfisher.generic"
titus scan path/to/code --rules path/to/custom-rules.yaml
titus scan path/to/code --include-noisy
### Извлечение секретов из бинарных файлов
Titus может извлекать текст из бинарных форматов файлов и сканировать содержимое на наличие секретов:```bash
# Extract and scan all supported binary formats
titus scan path/to/files --extract=all
# Target specific formats
titus scan path/to/files --extract=xlsx,docx,pdf,zip
Поддерживаемые форматы включают документы Office (xlsx, docx, pptx, odp, ods, odt), PDF-файлы, блокноты Jupyter, базы данных SQLite, электронную почту (eml, rtf) и архивы (zip, tar, tar.gz, jar, war, ear, apk, ipa, crx, xpi, 7z). Архивы рекурсивно извлекаются с настраиваемыми ограничениями по глубине и размеру.```bash
titus scan path/to/files --extract=all
--extract-max-size 10MB
--extract-max-total 100MB
--extract-max-depth 5
Для баз данных SQLite Titus извлекает текст из всех таблиц (по умолчанию 1000 строк на таблицу). Используйте `--sqlite-row-limit` для настройки:```bash
# Full dump of all SQLite tables (no row limit)
titus scan path/to/files --extract=all --sqlite-row-limit 0
# Custom row limit per table
titus scan path/to/files --extract=all --sqlite-row-limit 5000
Каждая находка, создаваемая Titus, имеет числовую оценку от 0 до 100 и уровень серьёзности:
| Оценка | Серьёзность |
|---|---|
| 0–20 | info |
| 21–40 | low |
| 41–60 | medium |
| 61–80 | high |
| 81–100 | critical |
Оценки начинаются с base_score правила и корректируются модификаторами — условиями, которые повышают или понижают оценку на основе того, что известно о учётных данных:```bash
titus scan path/to/code
titus scan path/to/code --score-scope
titus scan path/to/code --accessibility public # no penalty for public repos titus scan path/to/code --accessibility private # -25 penalty (default for local scans)
Titus поставляется с YAML-скоринговыми модулями для учётных данных AWS, GitHub PAT и токенов Slack, а также с Go-скоринговыми модулями на основе SDK, которые выполняют перечисление политик IAM в реальном времени (AWS) и проверку разрешений репозитория (GitHub fine-grained PAT), когда включён `--score-scope`.
Полный справочник см. в [docs/scoring.md](https://github.com/praetorian-inc/titus/blob/main/docs/scoring.md): уровни серьёзности, виды модификаторов, сведения о встроенных скоринговых модулях и о том, как написать собственные YAML- или Go-скоринговые модули.
## Go-библиотека для обнаружения секретов
Titus можно импортировать как Go-библиотеку, чтобы добавить обнаружение секретов в ваши собственные инструменты и конвейеры.```bash
go get github.com/praetorian-inc/titus
| --no-color | Отключить цветной вывод |
| --debug | Включить отладочный вывод |
| --verbose | Включить подробный вывод |
| --silent | Подавить весь вывод, кроме ошибок |
| --version | Показать версию программы и выход |
| --help | Показать справочное сообщение и выход |
# Сканировать один URL
python3 csp_scanner.py -u https://example.com
# Сканировать несколько URL из файла
python3 csp_scanner.py -f urls.txt
# Сканировать с подробным выводом
python3 csp_scanner.py -u https://example.com -v
# Сканировать и сохранить результаты в JSON
python3 csp_scanner.py -u https://example.com -o results.json
# Сканировать с пользовательским таймаутом и заголовками
python3 csp_scanner.py -u https://example.com -t 15 -H "Authorization: Bearer token"
# Сканировать с использованием пользовательского User-Agent
python3 csp_scanner.py -u https://example.com -A "Mozilla/5.0 (Custom)"
# Сканировать с использованием прокси
python3 csp_scanner.py -u https://example.com -p http://proxy:8080
# Сканировать с отключённой проверкой SSL
python3 csp_scanner.py -u https://example.com -k
# Сканировать с ограничением скорости
python3 csp_scanner.py -u https://example.com -r 5
# Сканировать с повторными попытками
python3 csp_scanner.py -u https://example.com --retries 3
# Сканировать с задержкой между запросами
python3 csp_scanner.py -u https://example.com --delay 2
# Сканировать с параллельными потоками
python3 csp_scanner.py -f urls.txt --threads 10
# Сканировать с отключённым цветным выводом
python3 csp_scanner.py -u https://example.com --no-color
# Сканировать с включённым отладочным выводом
python3 csp_scanner.py -u https://example.com --debug
# Сканировать с включённым подробным выводом
python3 csp_scanner.py -u https://example.com --verbose
# Сканировать с подавлением всего вывода, кроме ошибок
python3 csp_scanner.py -u https://example.com --silent
# Показать версию программы
python3 csp_scanner.py --version
# Показать справочное сообщение
python3 csp_scanner.py --help
{
"url": "https://example.com",
"csp": {
"present": true,
"policy": "default-src 'self'; script-src 'self' 'unsafe-inline'",
"directives": {
"default-src": ["'self'"],
"script-src": ["'self'", "'unsafe-inline'"]
},
"issues": [
{
"directive": "script-src",
"issue": "unsafe-inline",
"severity": "high",
"description": "Директива script-src содержит 'unsafe-inline', что позволяет выполнять встроенные скрипты."
}
]
}
}
Этот проект лицензирован под лицензией MIT — подробности см. в файле LICENSE.
Этот инструмент предназначен только для образовательных целей и тестирования на проникновение. Используйте его ответственно и только на тех сайтах, на которые у вас есть разрешение. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим инструментом.
Примечание: Этот инструмент предназначен для образовательных целей и тестирования на проникновение. Всегда убеждайтесь, что у вас есть надлежащее разрешение перед сканированием любого веб-сайта.```go package main
import ( "fmt" "log"
"github.com/praetorian-inc/titus"
)
func main() { // Initialize the secrets scanner with default rules scanner, err := titus.NewScanner() if err != nil { log.Fatal(err) } defer scanner.Close()
// Scan a string for API keys, tokens, and credentials
matches, err := scanner.ScanString(`aws_access_key_id = AKIAIOSFODNN7EXAMPLE`)
if err != nil {
log.Fatal(err)
}
for _, match := range matches {
fmt.Printf("%s (rule: %s) at line %d\n",
match.RuleName, match.RuleID,
match.Location.SourceSpan.Start.Line,
)
}
}
Библиотека также поддерживает сканирование байтов и файлов, проверку обнаруженных секретов и загрузку пользовательских правил:```go
// Scan a file for leaked credentials
matches, err := scanner.ScanFile("/path/to/config.json")
// Enable validation to check if detected secrets are live
scanner, err := titus.NewScanner(titus.WithValidation())
// Load custom detection rules for organization-specific secrets
rules, err := titus.LoadRulesFromFile("/path/to/rules.yaml")
scanner, err := titus.NewScanner(titus.WithRules(rules))
См. docs/library-usage.md для полного справочника по API, шаблонов параллелизма и дополнительных примеров.
Расширение Burp сканирует HTTP-ответы на наличие секретов во время прокси-трафика и активного тестирования на проникновение.
make install-burp
Затем загрузите `dist/titus-burp-1.0.0-all.jar` в Burp Suite через Extensions > Add.
#### Windows (загрузка из Releases)
1. Скачайте `titus-windows-amd64.exe` и `titus-burp-<version>.jar` из [Releases](../../releases)
2. Создайте каталог Titus и установите бинарный файл: ```powershell
mkdir %USERPROFILE%\.titus
copy titus-windows-amd64.exe %USERPROFILE%\.titus\titus.exe
titus-burp-<version>.jar из Releases:
titus-linux-amd64 или titus-linux-arm64 для Linuxtitus-darwin-amd64 или titus-darwin-arm64 для macOSРасширение запускает процесс titus serve в фоновом режиме и взаимодействует через stdin/stdout с использованием NDJSON. Правила обнаружения загружаются один раз при запуске.
Расширение добавляет вкладку Titus в Burp с тремя подвкладками:
Secrets: Все обнаруженные секреты с фильтрацией по типу, хосту и статусу валидации.
Titus Burp Suite extension secrets tab showing detected API keys and credentials with validation status
Statistics: Агрегированный вид секретов, сгруппированных по типу и хосту.

Settings: Настройка параметров сканирования, валидации и сопоставления уровней критичности.
Titus Burp Suite extension settings tab with scan configuration options
При просмотре любого запроса в Burp в инспекторе ответов появляется вкладка Titus, если обнаружены секреты, что обеспечивает быстрый доступ к находкам без переключения на основную вкладку Titus.
Titus tab in Burp Suite response inspector highlighting detected secrets in HTTP responses
Расширение для Chrome сканирует веб-страницы на наличие секретов во время оценки безопасности веб-приложений.
make build-extension
1. Перейдите по адресу `chrome://extensions/`
2. Включите **Режим разработчика**
3. Нажмите **Загрузить распакованное расширение** и выберите каталог `extension/`
### Возможности браузерного расширения
- Сканирует встроенный и внешний JavaScript, а также таблицы стилей на наличие API-ключей и токенов
- Сканирует localStorage и sessionStorage на наличие утечек учётных данных
- Опциональный перехват сетевых ответов для комплексного обнаружения секретов
- Результаты отображаются во всплывающем окне и на панели управления
<img width="1719" height="958" alt="Titus Chrome extension popup showing detected secrets on a web page" src="https://assets.kitploit.com/production/public/readmes/11969/057a24e2746412ceabe1aac0292a2de463de1efee5bca2489ca34b59d8b0dc2c.png" />
<img width="1744" height="827" alt="Titus Chrome extension dashboard with aggregated secret detection results" src="https://assets.kitploit.com/production/public/readmes/11969/265d972fadcc7f212944d7a1d8fd58a43446e7199d1209900e83b96a546ffb00.png" />
### Уведомление о безопасности
Браузерное расширение удаляет заголовки Content Security Policy и CORS с посещаемых страниц для сканирования внешних ресурсов. Это ослабляет защиту сайтов, которые вы посещаете, пока расширение активно. **Включайте только во время активного тестирования безопасности.**
## Сборка из исходного кода
### Стандартная сборка (с ускорением Vectorscan)
По умолчанию Titus компилируется с [Vectorscan](https://github.com/VectorCamp/vectorscan) (ARM) / [Hyperscan](https://github.com/intel/hyperscan) (x86) для SIMD-ускоренного сопоставления регулярных выражений. Для этого требуются CGO, библиотека C и `pkg-config` (который cgo использует для поиска библиотеки). `make build` проверяет их наличие и пытается установить всё отсутствующее через Homebrew / apt / dnf:```bash
# Build the CLI binary with vectorscan acceleration (outputs to dist/titus)
make build
# Build the Burp Suite extension JAR
make build-burp
# Build the Chrome browser extension
make build-extension
# Run unit tests
make test
# Run integration tests
make integration-test
Вы увидите [vectorscan] N/N rules compiled for Hyperscan при запуске, когда активен ускоренный движок.
Чтобы установить библиотеку C самостоятельно, вместо того чтобы полагаться на автоустановку:```bash
brew install pkg-config vectorscan
sudo apt-get install pkg-config libhyperscan-dev
sudo dnf install pkgconf-pkg-config vectorscan-devel
git clone --depth 1 --branch vectorscan/5.4.11 https://github.com/VectorCamp/vectorscan.git cd vectorscan && cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local && cmake --build build && sudo cmake --install build
Если вы вызываете `go build` напрямую (например, при встраивании Titus), передайте тег и включите CGO:```bash
# macOS (Homebrew) — adjust PKG_CONFIG_PATH to your installed version
CGO_ENABLED=1 PKG_CONFIG_PATH="$(brew --prefix vectorscan)/lib/pkgconfig" \
go build -tags vectorscan -o dist/titus ./cmd/titus
# Linux (system-installed)
CGO_ENABLED=1 go build -tags vectorscan -o dist/titus ./cmd/titus
Если вы не можете установить библиотеку C — или хотите полностью переносимый статический бинарный файл — вместо этого соберите движок на чистом Go. Titus автоматически переключается на него во время выполнения, когда vectorscan не скомпилирован:```bash
make build-pure
make build-static
#### Автоматический кэш баз данных Hyperscan
Titus автоматически сериализует каждую успешно скомпилированную базу данных Hyperscan
в стандартный пользовательский кэш. Последующие экземпляры сканера с точно таким же упорядоченным
набором правил и флагов загружают эту базу данных вместо повторной компиляции. Файл кэша
представляет собой неизменённый поток байтов, созданный функцией Hyperscan `hs_serialize_database`,
и Titus загружает его с помощью `hs_deserialize_database`.
`TITUS_CACHE_DIR` может переопределить расположение кэша. Запись в кэш выполняется атомарно и
по мере возможности: недоступный или доступный только для чтения кэш не препятствует сканированию. Отсутствующая, повреждённая, несовместимая или имеющая другой отпечаток база данных
запускает обычную компиляцию и обновляет кэш, когда это возможно.
Сериализованные базы данных зависят от архитектуры, возможностей CPU и версии
Hyperscan. Titus обнаруживает несовместимые записи при десериализации и заменяет
их базой данных, скомпилированной для текущей среды выполнения.
## Участие в разработке
Мы приветствуем вклад! См. [CONTRIBUTING.md](https://github.com/praetorian-inc/titus/blob/main/CONTRIBUTING.md) с рекомендациями о том, как внести вклад в Titus.
## Лицензия
Apache License 2.0 — см. [LICENSE](https://github.com/praetorian-inc/titus/blob/main/LICENSE).
Правила обнаружения основаны на [NoseyParker](https://github.com/praetorian-inc/noseyparker) (Praetorian Security, Inc.) и [Kingfisher](https://github.com/mongodb/kingfisher) (MongoDB, Inc.), оба лицензированы под Apache 2.0. См. [NOTICE](https://github.com/praetorian-inc/titus/blob/main/NOTICE) для полной атрибуции.