
titus v1.2.8
Высокопроизводительный сканер секретов. CLI, библиотека Go, расширение для Burp Suite и расширение для Chrome. 487 правил обнаружения с проверкой учетных данных в реальном времени.
Titus: высокопроизводительный сканер секретов
Titus — это высокопроизводительный сканер секретов, который обнаруживает учётные данные, API-ключи и токены в исходном коде, файлах и истории git. Он поставляется с 487 правилами обнаружения, охватывающими сотни сервисов и типов учётных данных, взятыми из NoseyParker и Kingfisher. Titus работает как CLI, библиотека Go, расширение для Burp Suite и расширение для браузера Chrome — все они используют один и тот же движок обнаружения и набор правил.
Созданный для инженеров по безопасности, пентестеров и команд DevSecOps, Titus сочетает ускоренное сопоставление регулярных выражений с помощью Hyperscan/Vectorscan с проверкой учётных данных в реальном времени, чтобы находить и подтверждать утечки секретов по всей вашей кодовой базе.
Содержание
- Почему Titus?
- Установка
- Быстрый старт
- Параметры сканирования
- Оценка находок
- Библиотека Go
- Расширение для Burp Suite
- Расширение для браузера
- Сборка из исходного кода
- Участие в разработке
- Лицензия
Почему Titus?
- Быстрое сканирование секретов: сопоставление регулярных выражений ускоряется с помощью Hyperscan/Vectorscan, когда они доступны, с резервной реализацией на чистом Go для переносимости на любую платформу.
- Широкий охват обнаружения учётных данных: 487 правил обнаруживают API-ключи, токены и учётные данные для AWS, GCP, Azure, GitHub, Slack, баз данных, систем CI/CD и сотен других сервисов.
- Проверка секретов в реальном времени: обнаруженные секреты проверяются через их исходные API, чтобы подтвердить, активны ли они, что снижает количество ложных срабатываний и помогает расставить приоритеты при устранении.
- Оценка серьёзности на основе риска: каждая находка получает числовую оценку (0–100) и уровень серьёзности (info → critical). Оценки настраиваются на основе статических метаданных правил, контекста доступности кода и вызовов API в реальном времени, измеряющих реальный масштаб угрозы от учётных данных, — так что самые опасные находки всегда всплывают первыми.
- Сканирование образов контейнеров: сканируйте образы Docker и OCI напрямую из любого реестра, tarball или каталога с раскладкой OCI — без необходимости в демоне или бинарном файле Docker.
- Несколько интерфейсов для любого рабочего процесса: сканируйте из CLI, встраивайте как библиотеку Go, пассивно сканируйте HTTP-трафик в Burp Suite или сканируйте веб-страницы в Chrome во время тестирования безопасности приложений.
- Извлечение из бинарных файлов: извлекайте и сканируйте секреты из документов Office, PDF-файлов, архивов (zip, tar, 7z), мобильных приложений (APK, IPA), расширений для браузера и многого другого.
Установка
Скачайте готовый бинарный файл со страницы 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 по умолчанию) и выводятся в консоль.
Параметры сканирования
Сканирование GitHub и GitLab
Сканируйте публичные репозитории напрямую по URL — API-токен не требуется:```bash
Scan a GitHub repository
titus scan github.com/kubernetes/kubernetes
Scan a GitLab project
titus scan gitlab.com/gitlab-org/cli
Full URLs work too
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 / OCI
Сканируйте образы контейнеров напрямую — без docker-демона и без бинарного файла docker. Titus извлекает образы напрямую из любого OCI-реестра по HTTPS (используя учётные данные из ~/.docker/config.json) или читает образы из локального tarball, созданного командой docker save, либо из каталога с раскладкой OCI-образа. Затем он сканирует метаданные манифеста/конфигурации образа и каждый обычный файл в каждом слое, включая файлы нижних слоёв, удалённые последующими слоями (поскольку секреты могут оставаться восстановимыми из истории образа).```bash
Pull from a registry and scan
titus scan --docker alpine:latest titus scan docker://ghcr.io/owner/repo:tag
Scan an image saved to a tarball:
docker save my-app:latest -o my-app.tar
podman save my-app:latest -o my-app.tar
titus scan --docker ./my-app.tar
Scan an OCI image layout directory:
docker buildx build --output type=oci,dest=./img/ .
skopeo copy docker://my-app:latest oci:./img:latest
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) и помечает каждую находку как подтверждённую, опровергнутую или неизвестную.
Правила обнаружения фильтрации```bash
List all available detection rules
titus rules list
Scan with only specific rules (e.g., AWS and GCP credentials)
titus scan path/to/code --rules-include "aws,gcp"
Exclude rules by pattern
titus scan path/to/code --rules-exclude "kingfisher.generic"
Use a custom rules file for organization-specific secrets
titus scan path/to/code --rules path/to/custom-rules.yaml
Opt in to rules marked noisy: true (high false-positive rate, off by default)
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
Tune extraction limits for large codebases
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
Score findings using static rule metadata only (no network calls)
titus scan path/to/code
Score findings AND make live API calls to verify credential blast radius
(calls AWS STS/IAM and GitHub API for supported credential types)
titus scan path/to/code --score-scope
Override the accessibility context (default: auto-detected from git remote)
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.
Благодарности
- OWASP — за ресурсы по безопасности
- MDN Web Docs — за документацию по CSP
- W3C — за спецификацию CSP
Контакты
- Автор: Your Name
- Электронная почта: [email protected]
- GitHub: https://github.com/yourusername
Отказ от ответственности
Этот инструмент предназначен только для образовательных целей и тестирования на проникновение. Используйте его ответственно и только на тех сайтах, на которые у вас есть разрешение. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим инструментом.
Примечание: Этот инструмент предназначен для образовательных целей и тестирования на проникновение. Всегда убеждайтесь, что у вас есть надлежащее разрешение перед сканированием любого веб-сайта.```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 Suite для сканирования секретов
Расширение Burp сканирует HTTP-ответы на наличие секретов во время прокси-трафика и активного тестирования на проникновение.
Настройка
Linux / macOS (сборка из исходного кода)```bash
Build the CLI and Burp extension JAR, install CLI to ~/.titus/
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
- Загрузите JAR в Burp Suite через Extensions > Add
Linux / macOS (Скачать из Releases)
- Скачайте подходящий бинарный файл для вашей платформы и
titus-burp-<version>.jarиз Releases:titus-linux-amd64илиtitus-linux-arm64для Linuxtitus-darwin-amd64илиtitus-darwin-arm64для macOS
- Установите бинарный файл: ```bash
mkdir -p ~/.titus
cp titus- ~/.titus/titus
chmod +x ~/.titus/titus
- Загрузите JAR в Burp Suite через Extensions > Add
Расширение запускает процесс titus serve в фоновом режиме и взаимодействует через stdin/stdout с использованием NDJSON. Правила обнаружения загружаются один раз при запуске.
Возможности расширения для Burp
- Пассивное сканирование секретов: автоматически сканирует прокси-трафик по мере его прохождения через Burp
- Активное сканирование секретов: контекстное меню по правому клику для сканирования выбранных запросов
- Дедупликация: один и тот же секрет сообщается только один раз за сессию
- Быстрая фильтрация: бинарное содержимое, изображения и нетекстовые ответы пропускаются
- Валидация учётных данных в реальном времени: проверка обнаруженных секретов через API источников для подтверждения их активности
- Управление ложными срабатываниями: пометка находок как ложных срабатываний для фильтрации шума
- Классификация по уровню критичности: находки цветокодируются по риску (High/Medium/Low)
- Экспорт: сохранение находок в JSON для отчётности
Интерфейс расширения для Burp
Расширение добавляет вкладку Titus в Burp с тремя подвкладками:
Secrets: Все обнаруженные секреты с фильтрацией по типу, хосту и статусу валидации.
Titus Burp Suite extension secrets tab showing detected API keys and credentials with validation status
- Статус валидации: Показывает, были ли проверены секреты (Active/Inactive/Unknown)
- Фильтрация: Нажмите кнопки Type, Host или Status для фильтрации по конкретным значениям; используйте поле поиска для текстового и regex-сопоставления
- Массовые действия: Выберите несколько строк для пакетной валидации или пометки как ложное срабатывание
- Панель Secret Details: Выберите находку для просмотра:
- Details: Информация о правиле, категория, полное значение секрета, метка времени первого обнаружения
- URLs: Все местоположения, где был найден этот секрет
- Validation: Результат валидации с деталями (например, AWS account ID, ARN)
- Request/Response: Полный HTTP-трафик с выделенным секретом
Statistics: Агрегированный вид секретов, сгруппированных по типу и хосту.
- Summary: Общее количество уникальных секретов, просканированных хостов, разбивка по валидации (активные против неактивных) и количество ложных срабатываний
- Secrets by Type: Количество каждого типа секретов с классификацией по категориям
- Secrets by Host: Количество секретов, найденных на каждом хосте
Settings: Настройка параметров сканирования, валидации и сопоставления уровней критичности.
Titus Burp Suite extension settings tab with scan configuration options
- Scan Settings:
- Passive scanning: Автоматически сканировать весь прокси-трафик (включено по умолчанию)
- Request body scanning: Также сканировать тела запросов на наличие секретов, отправляемых приложением
- Validation: Включите для проверки секретов через API источников (выполняет исходящие запросы и может вызвать оповещения)
- Scan Parameters: Рабочие потоки, максимальный размер файла, длина контекстного фрагмента
- Severity Configuration: Настройка уровней критичности для каждой категории секретов
- Actions: Очистить кэш, сбросить настройки, сохранить/экспортировать находки в JSON
При просмотре любого запроса в Burp в инспекторе ответов появляется вкладка Titus, если обнаружены секреты, что обеспечивает быстрый доступ к находкам без переключения на основную вкладку Titus.
Titus tab in Burp Suite response inspector highlighting detected secrets in HTTP responses
Расширение для браузера Chrome для сканирования секретов
Расширение для Chrome сканирует веб-страницы на наличие секретов во время оценки безопасности веб-приложений.
Настройка```bash
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
macOS (Homebrew)
brew install pkg-config vectorscan
Ubuntu/Debian
sudo apt-get install pkg-config libhyperscan-dev
Fedora/RHEL
sudo dnf install pkgconf-pkg-config vectorscan-devel
Or build vectorscan from source:
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
Сборка на чистом Go (без зависимостей от C)
Если вы не можете установить библиотеку C — или хотите полностью переносимый статический бинарный файл — вместо этого соберите движок на чистом Go. Titus автоматически переключается на него во время выполнения, когда vectorscan не скомпилирован:```bash
Portable pure-Go binary (no CGO, no vectorscan)
make build-pure
Fully static binary
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) для полной атрибуции.