
Центральная консоль для коллекторов Douglas-042 HEADQUARTERS. Сканирует парк хостов, сопоставляет результаты между хостами и управляет фидами IOC и доставкой в SIEM из одного места.

Охота — это не сканирование. Douglas собирает артефакты, которые аналитик собирал бы вручную — процессы, службы, запланированные задачи, автозапуск, соединения, учётные записи, драйверы, журналы событий, cron, systemd, историю оболочки, веб-корни — и запускает по ним 201 встроенную детекцию, а также ваши собственные правила Sigma, YARA и пользовательские правила.
Затем он делает то, что большинство инструментов оставляют вам: он говорит, какие находки всё ещё требуют решения, на какой из шестидесяти внешних адресов смотреть в первую очередь, и позволяет что-то с этим сделать, не открывая сессию RDP.
разверните одной командой ──▶ охота ──▶ находки появляются в реальном времени
│
┌──────────────────────┼──────────────────────┐
▼ ▼ ▼
совпадение с IOC-фидом оценка репутации действия реагирования
"это известный C2" "92/100, 340 отчётов" изоляция · завершение · сбор
Инфраструктуры, которым охота нужнее всего, часто оказываются теми, где нет EDR: несколько десятков серверов, нет бюджета на агентов и инцидент, начавшийся три дня назад. Выбор обычно стоит между коммерческой платформой, которую никто не согласовал, и папкой скриптов PowerShell, которые кто-то запускает вручную.
Douglas находится между ними. На исследуемом хосте ничего не устанавливается — коллектор запускается один раз и завершается — и каждый результат попадает в одну консоль, которую можно передать тому, кто возьмётся за инцидент следующим.
Находки легко создавать и дорого читать. Этот экран существует, чтобы очередь оставалась достаточно короткой, чтобы кто-то всё ещё читал её на третьем проходе.
Три исхода, и разница между ними важна полгода спустя:
| Решение | Что оно делает |
|---|---|
| Подтверждено | Реально. Остаётся в оценке риска, хост остаётся красным. |
| Ложное срабатывание | Убирается из оценки только для этого хоста. |
| Подавление | Постоянное правило, скрывающее ту же находку при каждом будущем сканировании. |
Ничего никогда не удаляется. Отзовите подавление — и всё, что оно скрывало, вернётся. Самые шумные правила находятся внизу, потому что их настройка очищает очередь быстрее, чем разбор её находка за находкой.
Все 201 детекция сгруппированы в 15 категорий — переключаемых по одной или целым семейством сразу. Нажмите на любое правило, чтобы прочитать, что оно проверяет, как оно срабатывает легитимно и что делать дальше.
Различие, которое разъясняет экран, потому что ошибиться здесь легко:
Отключить правило — не то же самое, что подавить его. Отключено означает, что коллектор вообще не выполняет проверку — ничего не создаётся и нечего рассматривать. Подавление фиксирует находку и помечает её как решение, принятое кем-то, с указанием причины.
Используйте отключение для семейства шума, с которым вы смирились. Используйте подавление для конкретного шаблона на конкретном хосте.
Прочерк в столбце Сработало обычно и есть здоровый ответ: DGL-014 срабатывает только когда журнал выглядит очищенным. Список — это то, что проверяет инструмент, а не то, что не так.
Форма быстрее для вашего первого правила и медленнее для двадцатого. Поэтому правила можно также писать как текст — с проверкой по мере ввода, по 11 таблицам артефактов и 13 операторам.
Поле под ним выполняет две задачи. Когда правило неверно, оно называет строку, а не правило:
line 7: Condition 1: 'is_maybe' is not an operator.
Когда оно верно, оно говорит, чему правило на самом деле будет соответствовать — потому что правило, которое проходит проверку, а затем соответствует не тому, что имел в виду его автор, и есть та ошибка, которую стоит поймать:
Valid — ACME-001 Reads Services and matches when Signed is false and PathName does not contain 'Program Files' and PathName does not contain 'System32'
Импорт и экспорт в JSON, YAML или CSV. Круговой обмен гарантирован — наш собственный экспорт проходит наш собственный валидатор во всех трёх форматах.
| Вопрос | Когда | Результат | |
|---|---|---|---|
| IOC-фид | Есть ли что-то из этого списка C2 на моих хостах? | Во время охоты | DGL-IOC — подтверждённое совпадение, а не оценка |
| Обогащение | Этот хост общался с 60 адресами — с какими в первую очередь? | После охоты | 92/100, 340 отчётов, известный C2 Cobalt Strike |
Пятнадцать источников фидов поставляются готовыми к использованию — Feodo, ThreatFox, URLhaus, TweetFeed, USOM, SSL Blacklist, Emerging Threats, OpenPhish, MISP — плюс пользовательский фид, читающий любой URL, возвращающий данные в форме индикаторов.
Четыре провайдера репутации: AbuseIPDB, VirusTotal, ThreatFox (бесплатные тарифы) и GreyNoise (платный, по умолчанию отключён). Вердикты никогда не смешиваются в одно число — AbuseIPDB считает жалобы, VirusTotal считает движки, ThreatFox знает инфраструктуру, и среднее из них — это цифра, которую ни один из них не стал бы защищать. Значок показывает худший вердикт с указанием провайдера, который его выдал.
Бесплатные тарифы защищены: результаты кэшируются на 12 часов, 40 адресов за запуск и ежедневный счётчик, который останавливается раньше, чем провайдер. Приватные адреса никогда не отправляются.
Одиннадцать действий в трёх группах — смотреть, действовать, сдерживать. Пять только для чтения помечены иначе, чем шесть, изменяющих хост, и каждое изменяющее действие требует письменной причины.
Изоляция намеренно сохраняет доступность консоли: хост, отрезанный от собственного
агента, нельзя освободить удалённо, и кому-то пришлось бы идти к нему. Цели, которые
сломали бы машину, а не сдержали вторжение — lsass.exe, systemd, pid 1,
Administrator, /bin/bash — отклоняются, а не сопровождаются предупреждением, потому
что момент, когда это используется, — это момент, когда никто не читает предупреждения.
Вывод возвращается в виде структурированных карточек, а не дампа терминала, и строки действенны: в списке процессов есть кнопка Kill для каждой строки, у адреса — Reputation.
| Windows | Linux | |
|---|---|---|
| Sigma | Event Log + Sysmon | auditd execve + auth/cron/syslog |
| YARA | содержимое файлов | содержимое файлов |
Правила Sigma для Linux, чей источник журнала не может быть прочитан, отклоняются при загрузке с указанием причины, а не загружаются и оставляются, чтобы никогда не сработать — пустой результат от правила, которое не могло выполниться, выглядит точно так же, как чистый хост.
Агент Linux проверяет, установлен ли auditd, запущен ли он и загружены ли в него
правила, затем сообщает, чего не хватает и чего это стоит:
Detection capabilities on this host
auditd : NOT RUNNING
Nothing records what executes on this host, so execution
rules cannot fire and a clean result only means the sweep
could not look. Install it:
apt install auditd && systemctl enable --now auditd
Одиннадцать назначений в трёх группах:
Назначения для чата и пейджинга отображают предложение, а не запись, и ограничивают число находок в одном сообщении: канал, в который вставлено сто строк, — это канал, который люди отключают.
git clone https://github.com/YOURNAME/douglas-042.git
cd douglas-042
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000
Или с Docker:
docker compose up -d
Откройте http://your-server:8000
Вход по умолчанию
Имя пользователя:
adminПароль:douglasКонсоль принудительно требует смены пароля при первом входе — значение по умолчанию, зашитое в пакет, не должно оставаться незамеченным. Задайте
DOUGLAS_CONSOLE_PASSWORDв.envперед первым запуском, если предпочитаете выбрать свой собственный.
.envчитается только пока база данных пуста. После первого запуска сбросьте пароль командойpython3 -m app.manage passwd admin.
При запуске вы получаете токен регистрации для следующего шага:
Created the initial admin account: admin
The default password is still in use. Change it at first sign-in.
Enrollment token ready: dgl-enroll-xBAk8...
Douglas-042 console 1.0 ready
Deploy → выберите платформу → скопируйте одну команду.
Windows — PowerShell с повышенными правами:
iex (irm 'http://console:8000/api/v1/reports/deploy/script?token=YOUR_TOKEN')
Linux — от имени root:
curl -sSL 'http://console:8000/api/v1/reports/deploy/script?token=YOUR_TOKEN&platform=linux' | sudo bash
Шесть шагов транслируются в терминал: загрузка, регистрация, получение коллектора, установка службы, подтверждение, что она работает, первая регистрация. Если регистрация не удалась, ничего не устанавливается, и об этом сообщается.
| # | Экран | Сделайте это | Вы получите |
|---|---|---|---|
| 1 | IOC-фиды | Добавьте Feodo Tracker, нажмите Refresh | Детекцию C2 — без написания правил |
| 2 | Threat intel | Вставьте бесплатный ключ AbuseIPDB, нажмите Test | Порядок триажа на графе |
| 3 | Fleet | Выберите хост, запустите охоту | Находки в реальном времени |
| 4 | Logs & events | Поищите ошибки модулей | Мог ли сбор вообще что-то увидеть |
| 5 | Триаж | Разберите очередь, настройте самые шумные правила | Список, который кто-то всё ещё читает |
| 6 | My rules | Загрузите 6 примеров, откройте один | Как писать свои собственные |
| 7 | Integrations | Вебхук Slack, порог на HIGH | Вы узнаёте об этом, не наблюдая |
┌──────────────────────────────────────────────────────────┐
│ Консоль — FastAPI + SQLite, один процесс, без очереди │
│ триаж · находки · граф · правила · реагирование · отчёты │
└───────────────▲──────────────────────────────────────────┘
│ агенты опрашивают: heartbeat 20с, действия 5с
┌───────────────┴──────────────────────────────────────────┐
│ Агент (PowerShell / shell) │
│ └── Коллектор — запускается, отчитывается, завершается │
│ 201 встроенное правило + Sigma + YARA + ваши │
└──────────────────────────────────────────────────────────┘
Dashboard · Cases · Fleet · Hunts · Response · Findings · Triage · Frequency · Graph · MITRE matrix · Timeline · Diff · Built-in rules · My rules · Sigma · YARA · IOC feeds · Threat intel · Integrations · Schedules · Users · Deploy · Logs & events
Целостность сбора · Автозапуск и запуск · Процессы и сеть · Службы и задачи · Механизмы персистентности · Безопасность конфигурации · Драйверы и ядро · Свидетельства выполнения · Аутентификация и учётные записи · Удалённый доступ · Sysmon, Kerberos и AD · Файлы, веб-шеллы и эксфильтрация · Активность пользователей и доверие · Rootkit и память · Совпадения индикаторов
Обе платформы: локальные учётные записи и группы · запущенные процессы с подписями и хешами · TCP-соединения и внешние конечные точки · службы · недавно записанные файлы · код в памяти · веб-корни и шаблоны веб-шеллов
Windows: журналы событий · запланированные задачи · автозапуск · персистентность в реестре · подписки WMI · драйверы · общие ресурсы SMB · Prefetch · хранилища сертификатов
Linux: cron · unit-файлы systemd · файлы запуска оболочки · LD_PRELOAD · бинарники setuid · authorized_keys и конфигурация sshd · история оболочки · журналы аутентификации · загрязнение ядра · WordPress
Консоль: Python 3.11+, шесть зависимостей (FastAPI, uvicorn, SQLAlchemy, pydantic, python-multipart, PyYAML). Работает на виртуальной машине с 1 ГБ памяти.
Хосты Windows: PowerShell 5.1+, администратор. Больше ничего.
Хосты Linux: bash и curl. python3 включает живой прогресс и правила по
содержимому файлов; auditd включает детекции выполнения. Консоль сообщает, чего
не хватает на каком хосте.
0600 — фиксированный ключ,
поставляемый в пакете, был бы общим для всех, кто его скачал.📄 Технический отчёт (PDF) — 14 страниц, охватывающих архитектуру, каждый экран консоли, все 37 модулей коллектора, модель детекций, действия реагирования и модель безопасности.
Лицензировано под MIT License. См. LICENSE.