Анализ плохих PDF’ок и прочего добра
Всем привет!
Хочу вам представить сервис над которым работал некоторое время и который решает одну простую задачу - прием файлов (.pdf, .docx) извне.
Ситуация крайне простая, есть сайты, в которых имеется форма обратной связи, необходимо принимать файл, убеждаться в том, что файл, который нам отправил пользователь извне безопасен.
Можно по-разному подойти к данному вопросу, например, подключить песочницу к форме обратной связи, либо воспользоваться API VirusTotal и проверять файл на уязвимости, в случае если файл уязвим, не отдавать его никуда и просто блокировать отправку.
Мне было интересно придумать сервис, который можно будет подключать не только к формам обратной связи, но и к Telegram ботам.
Важное условие было - быстродействие обработки. Поскольку вариант с песочницей слишком долгий: создание VM, анализ файла и так далее, было принято решение делать самому сервис.
В итоге, представляю vulnscan - сервис, который анализирует присылаемое вложение из форм обратных связи (сайты, боты в телеграме). Подключаемый по API сервис для сервисов, принимающих документы от пользователей: получает PDF, документы Word, изображения и архивы с ними, обезвреживает их (CDR) и возвращает вердикт.
Внутри два сканера
Fast Scanner работает на каждом файле и отвечает за то, что клиент увидит в ближайшую секунду. Стадии идут от дешёвых к дорогим — определение типа, разбор структуры, антивирус, YARA, — у каждой свой таймаут, и при достижении порога блокировки остальные не запускаются. Стадия вердикта не выносит: она возвращает признаки, а решение считается централизованно. Затем файл пересобирается заново, и результат проверяется на остаточные активные элементы. Deep Scanner — тот же образ в режиме deep, отдельная очередь, вне горячего пути. Идёт до конца без раннего выхода, пересобирает даже заблокированное (чтобы понять, поддаётся ли документ безопасной пересборке вообще) и не ограничен стоимостью ответа. Туда уходят подозрительные, непроверяемые и выборка чистых — последняя не для защиты конкретного файла, а чтобы измерить пропуски: без неё известно только то, что нашли.
Стадии проверки
Стадии: filetype → structure → clamav → yara → скоринг → CDR. Ранний выход по достижении порога блокировки; дорогие стадии не запускаются впустую.
К сожалению, Сетка имеет ограничение количество символов, поэтому если интересно, то приглашаю в свой тг-канал - https://t.me/datogeek, там есть видео с демонстрацией работы сервиса, а также продолжение поста. (Возможности развертывания, про метрики, трейсы, и так далее)
Но если переходить не хочется, то вот ссылка на документацию и репозиторий проекта:
Репозиторий проекта - https://github.com/dato-dev/vulnscan Документация vulnscan - https://dato-dev.github.io/vulnscan/ Архитектура vulnscan - https://dato-dev.github.io/vulnscan/docs/architecture/ Описание API - https://dato-dev.github.io/vulnscan/docs/api/ Описание протокола - https://dato-dev.github.io/vulnscan/docs/protocol/
· 5 ч
Разумеется буду рад вашим PR, каким-то идеям, критике (главное, чтоб конструктивно)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён