
YAML-управляемый CLI-сканер, который обнаруживает открытые службы, файлы и папки на веб-конечных точках. Предназначен для разработчиков, чтобы интегрировать проверки безопасности в конвейеры CI/CD с настраиваемыми сигнатурами.

ChopChop — это инструмент командной строки для динамического тестирования безопасности веб-приложений, изначально написанный CERT компании Michelin.
Его цель — сканировать несколько конечных точек и выявлять открытые сервисы/файлы/папки через корень веб-сайта. Проверки/сигнатуры объявляются в конфигурационном файле (по умолчанию: chopchop.yml), который полностью настраивается, особенно разработчиками.

«Chop chop» — фраза, происходящая из кантонского диалекта. «Chop chop» означает «быстрее» и предполагает, что что-то должно быть сделано сейчас и без промедления.
Мы постарались сделать процесс сборки безболезненным, и, надеюсь, это будет так же просто, как:
$ go mod download
$ go build .
В результате в папке появится бинарный файл gochopchop.
Благодаря Github Container Registry мы можем предоставить вам свежесобранные образы Docker!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
Но если вы предпочитаете, вы также можете собрать его локально, см. ниже:
docker build -t gochopchop .
Мы постоянно стараемся сделать goChopChop максимально простым. Сканирование хоста с помощью этой утилиты так же просто, как:
$ ./gochopchop scan https://foobar.com
docker run gochopchop scan https://foobar.com
docker run -v ./:/app chopchop scan -c /app/chopchop.yml https://foobar.com
Переписывание на Go началось несколько месяцев назад, но впереди ещё много работы. Вот некоторые функции, которые мы планируем интегрировать: [x] Многопоточность для повышения производительности [x] Возможность указать количество параллельных потоков [x] Цвета и улучшенное форматирование [x] Возможность фильтровать проверки/сигнатуры для поиска [x] Моки и модульные тесты [x] GitHub CI И многое другое!
Для быстрого сквозного тестирования chopchop мы предоставили веб-сервер в tests/server.go. Чтобы попробовать, запустите go run tests/server.go, затем выполните chopchop с следующей командой: ./gochopchop scan http://localhost:8000 --verbosity Debug. ChopChop должен вывести «no vulnerabilities found».
Также есть модульные тесты, которые можно запустить с помощью go test -v ./.... Эти тесты интегрированы в CI-процесс GitHub.
Вот доступные флаги для команды scan:
Вот список расширенных возможностей, которые могут вас заинтересовать.
Примечание: можно использовать перенаправители, такие как >, для пост-обработки.
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins или plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 для 4 рабочих$ ./gochopchop plugins --threads 4
--max-severity Medium$ ./gochopchop scan https://foobar.com --max-severity Medium
./gochopchop scan https://foobar.com --timeout 1 --verbosity --export=csv,json --export-filename boo --plugin-filters=Git,Zimbra,Jenkins
$ ./gochopchop plugins
$ ./gochopchop plugins --severity High
$ ./gochopchop scan --url-file url_file.txt
$ ./gochopchop scan https://foobar.com --export=csv,json --export-filename results
Написать новую проверку так же просто, как:
- endpoint: "/.git/config"
checks:
- name: Git exposed
match:
- "[branch"
remediation: Do not deploy .git folder on production servers
description: Verifies that the GIT repository is accessible from the site
severity: "High"
Конечная точка (например, /.git/config) сопоставляется с несколькими проверками, что позволяет избежать отправки X запросов для X проверок. Несколько проверок могут быть выполнены в рамках одного HTTP-запроса.
Для каждой проверки необходимы следующие поля:
Пожалуйста, обратитесь к файлу third-party.txt для получения дополнительной информации.
ChopChop выпущен под лицензией Apache License 2.0. Пожалуйста, обратитесь к файлу LICENSE для получения дополнительной информации.
| Флаг | Полный флаг | Описание |
|---|
-h | --help | Справка |
-v | --verbosity | Уровень детализации логирования |
-c | --signature | Путь к пользовательскому файлу сигнатур |
-k | --insecure | Отключить проверку SSL |
-u | --url-file | Путь к указанному файлу, содержащему URL для тестирования |
-b | --max-severity | Блокировать CI-конвейер, если степень серьезности равна или превышает указанный флаг |
-e | --export | Тип экспорта вывода (csv и/или json) |
--export-filename | Указать имя файла для экспортируемых файлов | |
-t | --timeout | Тайм-аут для HTTP-запросов |
--severity-filter | Фильтровать плагины по степени серьезности | |
--plugin-filter | Фильтровать плагины по имени плагина | |
--threads | Количество параллельных потоков |
| Атрибут | Тип | Описание | Опционально? | Пример |
|---|
| name | string | Имя проверки | Нет | Git exposed |
| description | string | Краткое описание проверки | Нет | Убедиться, что репозиторий .git недоступен из корня веб-сайта |
| remediation | string | Предложить меры по устранению этой конкретной «проблемы» | Нет | Не размещайте папку .git на production-серверах |
| severity | Enum("High", "Medium", "Low", "Informational") | Оценить критичность, если проверка срабатывает в вашей среде | Нет | High |
| status_code | integer | HTTP-код состояния, который должен быть возвращён | Да | 200 |
| headers | Список строк | Список заголовков, которые должны присутствовать в HTTP-ответе | Да | Н/Д |
| no_headers | Список строк | Список заголовков, которых НЕ должно быть в HTTP-ответе | Да | Н/Д |
| match | Список строк | Список строк, которые должны присутствовать в HTTP-ответе | Да | "[branch" |
| no_match | Список строк | Список строк, которых НЕ должно быть в HTTP-ответе | Да | Н/Д |
| query_string | GET-параметры, которые должны быть переданы конечной точке | Строка | Да | query_string: "id=FOO-chopchoptest" |
| Название библиотеки | Ссылка | Лицензия |
|---|
| Viper | https://github.com/spf13/viper | MIT License |
| Go-pretty | https://github.com/jedib0t/go-pretty | MIT License |
| Cobra | https://github.com/spf13/cobra | Apache License 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Apache License 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | MIT License |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (Simplified License) |
| Go-runewidth | https://github.com/mattn/go-runewidth | MIT License |