Skip to content

MalwareDataLab/autodroid-worker

Repository files navigation

Project logo

AutoDroid Worker

Status


📝 Índice

📖 Sobre

Este repositório contém o código do Worker da aplicação AutoDroid, que é responsável por processar os jobs em background.

Acesse o repositório da aplicação AutoDroid API para maiores informações sobre o projeto e as configurações necessárias antes deste Worker ser executado.

Motivação

Este projeto parte da necessidade de oferecer a ferramenta DroidAugmentor e MalSynGen como um serviço, conforme apresentado em AutoDroid.

A Prova de Conceito foi desenvolvida para validar a proposta de oferecer a DroidAugmentor e MalSynGen como um serviço, que utilizou a tecnologia Docker-in-Docker para a execução da ferramenta.

Desafios

Todavia, diante da necessidade de escalabilidade e facilidade de uso, foi necessário remover a estratégia DinD e adotar uma abordagem que proporcionasse computação distribuída sem obstruir o tráfego da aplicação principal (AutoDroid API).

Disponibilizar tal laboratório como um serviço em nível nacional pode ser muito desafiador, pois a execução de aplicações como a DroidAugmentor e MalSynGen podem utilizar grandes recursos computacionais e de armazenamento, além de poder levar muitos dias ou semanas para um processamento ser concluído.

Solução

Inspirado na ideia do Github Actions onde os usuários podem dedicar máquinas para executar pipelines despachadas pelo GitHub, foi desenvolvido o Worker, que é uma aplicação separada da API, responsável por processar os jobs em background.

Essa aplicação foi desenvolvida especialmente buscando não expor a infraestrutura do servidor principal, mas se comunicando com a API Gateway através de Websocket/REST, permitindo a instância de múltiplos workers, em máquinas distintas, sem dependência de VPN's ou concessões de acesso, tornando o processo distribuído e seguro.

✨ Visão Geral do Projeto

O Worker está inserido no contexto do projeto AutoDroid, que é uma aplicação que visa oferecer a ferramenta DroidAugmentor/MalSynGen como um serviço.

Overview

⛏️ Tecnologias Utilizadas

Geral

É importante mencionar as demais ferramentas que serão utilizadas nas duas partes do projeto:

📡 Ambiente do Servidor

  • Sistema operacional Linux (por exemplo, Ubuntu, Debian e outros...) (MacOS/Windows é experimental)
  • Virtualização habilitada no BIOS
  • Mínimo de 4GB de RAM
  • Mínimo de 10GB de espaço livre em disco, dependendo dos "processadores" disponíveis (para arquivos, resultados de processamento, banco de dados e imagens Docker)
  • Git instalado
  • Docker instalado

🚩 Antes de começar

Crie a instância do (AutoDroid API Gateway) conforme especificado no repositório principal AutoDroid API. Para facilitar a configuração inicial, o repositório da API contém um script de demonstração completo que automatiza todo o processo de configuração, incluindo a instalação e configuração do backend e do worker em um único ambiente. Este script é ideal para testes e desenvolvimento local.

Utilizando um usuário autenticado como administrador, crie um WorkerRegistrationToken na API Gateway, que será utilizado para autenticar o Worker com a API. Utilize o Postman, SDK ou linha de comando para executar esta ação.

Exemplo:

curl --location 'http://localhost:3333/admin/worker/registration-token' \
--header 'Content-Type: application/json' \
--header 'Authorization: < TOKEN >' \
--data '{
    "is_unlimited_usage": true
}'

Obtenha o token através do valor token retornado pela API.

🏁 Primeiros Passos

Estas instruções irão ajudá-lo a obter uma cópia deste projeto e executá-lo em sua máquina local para fins de desenvolvimento e teste. Consulte deployment para obter informações sobre como implantar o projeto em ambiente produtivo.

Execute todos os passos de antes de começar. Salve todos certificados e chaves de acesso em um local seguro.

Existem duas maneiras de instalar esta aplicação: utilizando o Docker (recomendado) ou manualmente.

Instância via Docker (recomendado)

Usando o terminal, clone este repositório em sua máquina local usando o Git:

git clone https://github.com/MalwareDataLab/autodroid-worker

Navegue até a pasta do repositório:

cd autodroid-worker

Atualize o repositório sempre, utilizando:

git pull

Introduza a variável de ambiente REGISTRATION_TOKEN e um nome identificador NAME no arquivo .docker-compose.dev.yml na raiz do projeto, com o valor obtido em antes de começar.

Inicie o projeto:

docker compose -f docker-compose.dev.yml up

Para parar a aplicação, pressione Ctrl + C no terminal ou execute docker compose -f docker-compose.dev.yml down na raiz deste repositório, caso esteja executando a aplicação em modo destacado.

Uma pasta ./docs/runtime será criada na raiz deste repositório para armazenar os arquivos temporários da aplicação. Pode ser necessário permissões de superusuário para acessar, modificar ou excluir esta pasta.

Realize a utilização da aplicação conforme em utilização.

Instância Manual

Instale as dependências do projeto:

yarn install

Execute a instância de desenvolvimento utilizando:

yarn dev -e development -u http://localhost:3333 -t <REGISTRATION_TOKEN> -n <NAME>

O Worker estará disponível para receber trabalhos.

🚀 Deployment

Esta aplicação está pronta para implantação com Docker e docker compose.

Para disponibilizar esta aplicação em ambiente produtivo:

Realize o download na pasta desejada:

git clone https://github.com/MalwareDataLab/autodroid-worker

Atualize o repositório utilizando:

git pull

Complete os mesmos processos citados anteriormente em antes de começar.

Após a configuração e especificação do token no arquivo docker-compose.prod.yml, inicie a aplicação utilizando o comando:

docker compose -f docker-compose.prod.yml up -d

A aplicação estará disponível até que seja parada através do comando:

docker compose -f docker-compose.prod.yml down

A aplicação utiliza protocolo HTTPS e WS para a comunicação.

Configure sua rede local e as portas do firewall para permitir o acesso à aplicação.

Verifique as restrições da sua rede local e ISP.

🔃 Atualizando

O docker compose está instrumentado com a ferramenta watchtower para atualizações automáticas.

Para realizar atualização manual, execute o seguinte comando:

docker compose -f docker-compose.prod.yml down
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d

🔧 Solução de Problemas

O Docker é incrível, mas às vezes pode ser um pouco complicado. Alguns erros podem ocorrer durante a execução da aplicação, e alguns deles podem estar relacionados ao Docker.

Erros antes da inicialização

Se você estiver enfrentando alguns erros antes da inicialização da aplicação, verifique os seguintes itens:

  • Verifique se a máquina atende aos requisitos.
  • Verifique se todos os passos especificados em antes de começar foram completados, refaça-os se necessário.
  • Verifique se seu usuário possui permissões de uso ao Docker, executando o comando docker run --rm hello-world:latest.
  • Realize os processos de pós-instalação do Docker, conforme documentação oficial.

Limpando o ambiente do Docker

Se você estiver enfrentando alguns erros relacionados ao Docker, você pode tentar limpar o ambiente do Docker executando os seguintes comandos:

# Pare todos os containers
docker compose down
docker stop $(docker ps -q)

# Remova todos os arquivos da pasta runtime
sudo rm -rf ./docs/.runtime

# Remova todas as imagens relacionadas a este projeto
docker rmi $(docker images -q -f "reference=autodroid_*")

# Reinicie o serviço de rede
sudo systemctl restart NetworkManager.service

# (Opcional) Limpe o ambiente do Docker
docker system prune -a

Verificando as etapas de inicialização

Se você estiver enfrentando alguns erros durante a inicialização da aplicação, você pode verificar as etapas da inicialização executando os seguintes comandos:

# Tente usar qualquer imagem do Docker Hub que não esteja em sua máquina para verificar se o Docker instalado está funcionando como esperado
docker rmi hello-world
docker run --rm hello-world:latest

# Tente construir a aplicação manualmente, em caso de erro, envie a mensagem de erro para o mantenedor do projeto
docker compose build --no-cache

Persistindo o erro, entre em contato com o mantenedor do projeto.

📊 Telemetria

O AutoDroid Worker pode ser monitorado através de uma solução de telemetria externa, composta por dois componentes:

AutoDroid Watcher Server

O AutoDroid Watcher Server é um servidor que recebe dados de telemetria e conduz experimentos do software AutoDroid. Este servidor recebe a conexão de um ou mais clientes que devem ser instalados nas máquinas onde o AutoDroid Worker está instalado.

AutoDroid Watcher Client

O AutoDroid Watcher Client é responsável por coletar os dados de telemetria e enviá-los para o servidor, além de iniciar os experimentos e a coleta de dados.

Para utilizar a solução de telemetria:

  1. Instale o AutoDroid Watcher Server em uma máquina separada
  2. Instale o AutoDroid Watcher Client em cada máquina onde o AutoDroid Worker está instalado
  3. Configure o cliente para se conectar ao servidor de telemetria
  4. Os resultados dos experimentos serão armazenados em arquivos CSV e gráficos, que podem ser utilizados para análise e visualização dos dados coletados

📖 Referências

LAVIOLA, Luiz Felipe; PAIM, Kayuã Oleques; KREUTZ, Diego; MANSILHA, Rodrigo Brandão. AutoDroid: disponibilizando a ferramenta DroidAugmentor como serviço. In: ESCOLA REGIONAL DE REDES DE COMPUTADORES (ERRC), 20. , 2023, Porto Alegre/RS. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2023 . p. 145-150. DOI: https://doi.org/10.5753/errc.2023.929.

LAVIOLA, Luiz Felipe; GASPAR DINIZ NOGUEIRA, Angelo; KREUTZ, Diego; BRANDÃO MANSILHA, Rodrigo. Cloud AutoDroid: uma Arquitetura de Backend para Executar Serviços de IA Generativa na Nuvem. In: ESCOLA REGIONAL DE ENGENHARIA DE SOFTWARE (ERES), 8. , 2024, Santiago/RS. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2024 . p. 258-267. DOI: https://doi.org/10.5753/eres.2024.4302.

CASOLA, Karina; PAIM, Kayuã Oleques; MANSILHA, Rodrigo Brandão; KREUTZ, Diego. DroidAugmentor: uma ferramenta de treinamento e avaliação de cGANs para geração de dados sintéticos. In: SALÃO DE FERRAMENTAS - SIMPÓSIO BRASILEIRO DE SEGURANÇA DA INFORMAÇÃO E DE SISTEMAS COMPUTACIONAIS (SBSEG), 23. , 2023, Juiz de Fora/MG. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2023 . p. 57-64. DOI: https://doi.org/10.5753/sbseg_estendido.2023.235793.

NOGUEIRA, Angelo Gaspar Diniz; PAIM, Kayua Oleques; BRAGANÇA, Hendrio; MANSILHA, Rodrigo; KREUTZ, Diego. MalSynGen: redes neurais artificiais na geração de dados tabulares sintéticos para detecção de malware. In: SALÃO DE FERRAMENTAS - SIMPÓSIO BRASILEIRO DE SEGURANÇA DA INFORMAÇÃO E DE SISTEMAS COMPUTACIONAIS (SBSEG), 24. , 2024, São José dos Campos/SP. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2024 . p. 129-136. DOI: https://doi.org/10.5753/sbseg_estendido.2024.243359.

Packages

No packages published

Contributors 2

  •  
  •  

Languages