D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Сегодня каждый сталкивается проблемой распределенного сканирования, скрапинга данных и тому подобное, есть разные подходы к идеи ускорения, децентрализации, рандомизирования воркеров(серверов с которых мы ведем сканирование) я бы хотел представить. proof-of-con такой системы.
1.0 Intro
Django,Python,Paramiko(ssh libs for python)
#Front
Django-admin
Django,Python,Paramiko(ssh libs for python)
с другой стороны,на базе такого костыля мы можем запускать что угодно, сохрнаять данные на воркерах отправлять в админ панель а там уже делать агрегацию
Это вам и запуск брутов массканов, да в целом любого софта (но еще раз данном способе при продакшене вы столкнетесь с некоторыми проблемами, нет достаточной обработки ошибок, лоад балансера между. воркерами, использование парамико для таких задач не совсем подходит
Весь наш костыль будет работать с базой postgreeSQL
1.0 Intro
Mmm...:
#Backend:Django,Python,Paramiko(ssh libs for python)
#Front
Django-admin
1. Запускаем скан через админку:A. Основная задача: Создать систему, для запуска скана подсетей, инструменты (nuclei, naabu, httpx) с различными параметрами
Нажмите, чтобы раскрыть...
- Сканер 'Naboo': Начинаем с 'Naboo' для чека IP-адресов в CIDR, типа 192.168.0.0/24.
- Кидаем задачи на воркеры: Админка сама замешает и разбросает подсети по рабочим узлам. Заливаешь файл с подсетями, выбираешь настройки скана в всплывающем окне.
- Записываем результаты: Как только скан стартует, сразу ловим данные о найденных IP и портах, записываем их в файлик и показываем в админке. Ну и на сервере все это тоже храним.
- Перекидываем на 'HTTPx': Следующий ход - отправляем результаты на доп. анализ сканеру 'HTTPx' с нужными параметрами.
- База IP без повторов: В базе сразу предусмотрим защиту от дублей, чтобы собирать только уникальные IP.
- Скан на уязвимости: Как база очистится от копий, отправляем ее на проверку уязвимостей через 'Nuclei'.
- Все устроено модульно, так что в будущем можно легко добавить новые сканеры и инструменты.
- Все файлики и передаваемые данные будем шифровать, используя SSL, чтобы трафик был в безопасности.
RPC-сервер:Можем юзать 'Paramiko' или что-то в этом духе для управления процессами.
Django,Python,Paramiko(ssh libs for python)
По сути из-за bratva мне пришлось говнокодить концепт данного фрейморка если его так можно назвать. эту, данной системой мы будем ресерчить подсети нашего провайдера в swissland .ЗЫ: Если мы подойдет к разработке такой системы с большим усилием, я бы предложил использовать
GoLang и его библиотеки этих же самых прекрасных тулз от proddiscovery
Наше python приложение тут является костылем так же как и использование backend Django для семпла как концепт такой ситсемы
Так же возможна реализация всего этого дела на Flask (более легкий фреймворк).
Приложение через paramiko инициализирует. запуск софта.
Реализовано хранение данных в бд, простой поиск по базе данных в админке
Нажмите, чтобы раскрыть...
с другой стороны,на базе такого костыля мы можем запускать что угодно, сохрнаять данные на воркерах отправлять в админ панель а там уже делать агрегацию
Это вам и запуск брутов массканов, да в целом любого софта (но еще раз данном способе при продакшене вы столкнетесь с некоторыми проблемами, нет достаточной обработки ошибок, лоад балансера между. воркерами, использование парамико для таких задач не совсем подходит
Анализ текущего решения:
- Использование Django и Python с Paramiko: Это базовое решение где Django используется для бэкенда а Paramiko для работы с SSH. Это подходит для прототипа или небольших систем, но имеет ограничения в масштабировании и обработке ошибок.
- Проблемы текущего подхода:
- Отсутствие обработки ошибок: Важно обеспечить надежность системы, добавив обработку исключений и ошибок.
- Отсутствие балансировки нагрузки: Для масштабируемости и надежности необходим механизм балансировки нагрузки между воркерами.
- Paramiko для масштабных задач: Paramiko хорош для простых SSH задач, но может не подходить для масштабных операций.
Весь наш костыль будет работать с базой postgreeSQL
![]()
Нажмите, чтобы раскрыть...
![]()
![]()
Нажмите, чтобы раскрыть...