Как я обновил свой проект в пентесте
Всем хай! Ранее я уже рассказывал про Pentester Dashboard — open source проект, который мы развиваем как локальное рабочее пространство для ведения пентеста.
Идея появилась из простой боли: во время тестирования данные быстро превращаются в хаос. Активы лежат в одном месте, эндпоинты — в другом, заметки — в третьем, а связи между ними приходится держать в голове.
Поэтому в дашборде я собрал единую структуру: Recon, Tech Stack, Features, Endpoints, Vulnerabilities, общий и локальный граф связей, Worklog, Backlog, а также импорт и экспорт проектов.
Подробнее про идею и предыдущие этапы писал здесь: ➥ https://setka.ru/posts/019c9fd6-fd07-7d90-a88c-cc416f471d4d ➥ https://setka.ru/posts/019d2fd1-0e73-73b3-84ed-4df21d50267b
━━━━━━━━━━ Как я полез в архитектуру ━━━━━━━━━━
До версии 1.1.0 backend был монолитом: один Express-сервис, общий слой работы с БД и общие контракты. Для небольшого проекта это удобно: всё рядом, быстро запускается и не требует сложной инфраструктуры.
Но по мере роста существующего и заложенного появились проблемы. Изменение одного блока затрагивает и общие файлы, что приводило к конфликтам/ошибкам и траты доп. времени на поиск ошибок. Recon, Endpoints, Features, Vulnerabilities и другие модули были логически разделены, но технически всё ещё жили внутри одного backend.
И я осознал, что дальше развивать проект в таком формате будет очень неприятно. Поэтому решил сделать одно из самых крупных обновлений за всё время — распилить монолит на микросервисы.
━━━━━━━━━━ Что получилось ━━━━━━━━━━
Теперь backend состоит из 12 сервисов: • Projects • Mission Status • Recon • Tech Stack • Features • Endpoints • Vulnerabilities • Worklog • Backlog • Graph • Local Graph • Migration
У каждого сервиса теперь свои: • бизнес-логика и API-контракты; • package.json и зависимости; • Dockerfile; • Swagger/OpenAPI; • PostgreSQL-схема и отдельный пользователь; • миграции БД.
При этом для пользователя ничего не усложнилось. Есть одна точка входа через Nginx Gateway, а весь проект по-прежнему поднимается одной командой
━━━━━━━━━━ Самое интересное — связи ━━━━━━━━━━
Раньше один модуль мог напрямую читать таблицы другого. Теперь каждый сервис владеет только своими данными, а взаимодействие идёт через Internal API.
Например, Endpoints Service больше не лезет в таблицу Recon, чтобы проверить Asset. Он спрашивает Recon Service через внутренний API.
Mission Status, Graph и Local Graph стали отдельными агрегаторами: они собирают данные из нужных сервисов и отдают frontend уже готовое представление.
Migration Service тоже больше не имеет полного доступа ко всей БД. Он стал оркестратором и собирает проект через API отдельных сервисов.
Из-за новой структуры изменился и формат миграции проектов. Для переноса экспортов из версии 1.0.5 я сделал Python-скрипт, который залил так же себе на гитхаб и указал его при релизе
━━━━━━━━━━ С чем столкнулся ━━━━━━━━━━
Микросервисы не делают проект автоматически проще.
Поддерживать один процесс объективно легче, чем Gateway, 12 сервисов, отдельные схемы БД, миграции и межсервисные запросы.
Но моя цель была другой: сделать каждый функциональный блок независимым и понятным для дальнейшего развития.
Теперь Recon можно развивать отдельно от Backlog, менять внутреннюю реализацию Vulnerabilities без переписывания всего backend, а при необходимости — полностью заменить отдельный сервис, сохранив его API-контракт.
Для меня этот рефакторинг стал хорошим изучением того, что: архитектура — это не количество папок и контейнеров. Настоящее разделение начинается там, где у каждого модуля появляются собственная ответственность, данные и понятные границы.
━━━━━━━━━━ Что дальше ━━━━━━━━━━
В планах продолжать улучшать, развивать проект через уже заложенные задачи и заработать миллионы)
Сам проект: https://github.com/eZer-Net/pentester-dashboard
Буду рад обратной связи, идеям по развитию и звёздочке на GitHub⭐ ЗВЁЗДОЧКИ ЭТО ВАЖНО!)
#AppSec #Pentest #BugBounty #Hacking #OpenSource #IT #CyberSecurity #GitHub
· 12.07
Сильная идея - вынести хаос пентеста в структуру, а не в очередной ноутбук. Я бы отдельно следил за связями между активами и находками: без графа и статусов worklog быстро превращается в кладбище заметок. Как у вас устроен экспорт в отчёт?
ответить
коммент удалён
· 13.07
В проекте есть как импорт, так и экспорт данных. Только импорт есть в отдельном функционале, по типу активов, эндпоинтов через конкретные ручки в JSON форме, а импорт с экспортом существует для целого проекта в SQL формате, во вкладке миграция проекта
ответить
ответ удалён