Утилита на Python, которая:
- скачивает файлы с сервиса VX Underground за указанный день, день передается в качестве параметра;
- извлеченные из загруженного архива файлы сохраняет в S3 хранилище, для локального тестирования необходимо использовать MinIO или Seaweedfs(S3), запущенный в docker-контейнере;
- извлеченный файл просканировать набором YARA-правил, результат сканирования сохранить в виде json в S3-хранилище.
Решение оформлено в виде проекта с использованием pyproject.toml
- Склонировать репозиторий
- Перейти в корневую папку проекта
- Если Poetry не установлен, сначала его нужно установить:
pip install poetry
- Установить все зависимости:
poetry install
- Запустить проект
poetry run python src/main.py DAY_OF_MONTH
Так же в проекте приложен файл requirements.txt
для альтернативной установки зависимостей
pip install -r requirements.txt
В таком случае запуск следующий:
python src/main.py DAY_OF_MONTH
docker pull minio/minio
mkdir -p ~/minio/data
docker run \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-v ~/minio/data:/data \
-e "MINIO_ROOT_USER=USERNAME" \
-e "MINIO_ROOT_PASSWORD=PASSWORD" \
quay.io/minio/minio server /data --console-address ":9001"
mkdir
создает новый локальный каталог в ~/minio/data
в вашем домашнем каталоге.
docker run
запускает контейнер MinIO.
-p
связывает локальный порт с портом контейнера.
-name
создает имя для контейнера.
-v
устанавливает путь к файлу в качестве постоянного расположения тома для использования контейнером. Когда MinIO записывает данные в /data
, эти данные отражаются в локальном пути ~/minio/data
, что позволяет им сохраняться между перезапусками контейнера. Вы можете заменить ~/minio/data
другим локальным расположением файла, к которому у пользователя есть доступ на чтение, запись и удаление.
-e
устанавливает переменные среды MINIO_ROOT_USER
и MINIO_ROOT_PASSWORD
соответственно. Они устанавливают учетные данные пользователя root
. Измените значения примера для использования в вашем контейнере.
WebUI: http://127.0.0.1:9001
Данная утилита:
- Скачивает архив зв определённый день (передаваемый в параметре DAY_OF_MONTH) с сайта VX Underground в директорию
./downloads
(если этой директории не существует, то она создаётся в корне проекта) - Распаковывает этот архив в директорию
./extracted_files
(если этой директории не существует, то она создаётся в корне проекта) - Сканирует извлечённые файлы набором YARA-правил (они находятся в директории
YARA_rules
) - Результат записывает в формате
json
в файлscan_results.json
в директорию./scan_results
(если этой директории не существует, то она создаётся в корне проекта) - После этого всё загружается в S3 хранилище в разные bucket:
- После загрузки в S3 хранилище данные удаляются из локального хранилища
Удаляются директории
./downloads
,./extracted_files
и./scan_results
Так же добавлена схема .env
файла .env.example