Em operações de pentest e red team, dispor de uma VPS (Virtual Private Server) dedicada é quase indispensável. Ela oferece um IP público estável para hospedar servidores de C2 (Command & Control), redirectores de tráfego e ferramentas de varredura contínua, além de separar a infraestrutura ofensiva da máquina do operador, preservando o anonimato e evitando a queima do ambiente de trabalho. Ao mesmo tempo, permite a rotação de IPs entre engajamentos e a execução paralela de tarefas pesadas como fuzzing, brute force e scanning massivo sem onerar o hardware local.

O principal obstáculo é o custo: manter servidores pagos ao longo de múltiplos engajamentos impacta diretamente o orçamento de laboratório. Por isso, os planos gratuitos dos grandes provedores de nuvem tornam-se uma opção atraente, desde que ofereçam recursos suficientes para cargas de trabalho reais.

Planos gratuitos: panorama atual

Em 2025-2026, os principais provedores de VPS oferecem as seguintes condições:

AWS Free Tier

A AWS passou por uma mudança significativa em julho de 2025. Contas criadas antes de 15 de julho de 2025 seguem o modelo legado: uma instância t2.micro ou t3.micro (1-2 vCPU, 1 GiB de RAM) por 750 horas/mês durante 12 meses, com 30 GB de armazenamento EBS e 100 GB de egresso mensal. Contas novas recebem até USD 200 em créditos válidos por 6 meses. Em ambos os casos, não existe instância EC2 permanentemente gratuita após o período de trial. A AWS é o pior provedor para infraestrutura free persistente.

Google Cloud Platform (GCP) Always Free

O GCP oferece permanentemente uma instância e2-micro (2 vCPUs compartilhadas, 1 GB de RAM) em regiões norte-americanas selecionadas, com 30 GB de disco HDD. O grande limitante é o egresso: apenas 1 GB/mês de tráfego de saída a partir da instância de Compute Engine. Para operações que geram volume expressivo de tráfego, como em varreduras, entrega de payloads, simulações de exfiltração, esse limite é inviável. Adicionalmente, os vCPUs são compartilhados e submetidos a throttling severo sob carga sustentada.

Microsoft Azure Free Tier

O Azure oferece crédito de USD 200 por 30 dias e, nos primeiros 12 meses, instâncias B1s (1 vCPU, 1 GiB), B2pts v2 (2 vCPUs ARM, 1 GiB) e B2ats v2 (2 vCPUs AMD, 1 GiB) a 750 horas/mês cada, com 2 discos de 64 GB. Após 12 meses, o acesso gratuito às VMs expira. As instâncias da série B são do tipo burstable: cargas de CPU intensas esgotam rapidamente os créditos de burst, tornando-as inadequadas para fuzzing ou brute force prolongados.

Vultr, DigitalOcean e Linode (Akamai)

Nenhum desses provedores oferece tier permanentemente gratuito. Todos operam com créditos de trial por tempo limitado: Vultr até USD 300 por 30 dias, DigitalOcean USD 200 por 60 dias e Linode/Akamai USD 100 por 60 dias. São úteis para campanhas pontuais, mas inviáveis como laboratório permanente.

Oracle Cloud Infrastructure (OCI) Always Free

O OCI se destaca de forma inequívoca. O programa Always Free oferece, sem prazo de expiração, um pool de instâncias ARM Ampere A1 com até 4 OCPUs e 24 GB de RAM distribuíveis entre até quatro VMs, além de 200 GB de armazenamento em volumes de boot e bloco, e 10 TB de egresso mensal. Não existe outro provedor de nuvem que ofereça, permanentemente e sem custos, esse volume de recursos para computação geral.


Por que OCI?

A comparação evidencia que, para qualquer operação de segurança que exija persistência da infraestrutura, o OCI é o único provedor que entrega recursos suficientes de forma permanente e gratuita. 4 OCPUs e 24 GB de RAM são suficientes para rodar simultaneamente um servidor de C2, um redirector, ferramentas de reconhecimento contínuo e até pipelines DevSecOps completos com containers Docker. O limite de 10 TB/mês de egresso elimina completamente a preocupação com custos de transferência — algo que inviabiliza o GCP (1 GB/mês) para cargas ofensivas reais.

É a partir dessa vantagem objetiva que surgiu o OCI-SecOps: uma toolkit de orquestração de infraestrutura voltada à segurança ofensiva e defensiva, construída inteiramente sobre o OCI Always Free Tier, aproveitando as instâncias ARM Ampere A1 como base de computação.


Conceitos

ARM Ampere A1

A arquitetura ARM (Advanced RISC Machine) é baseada em um conjunto de instruções reduzido, projetada para eficiência energética e alto desempenho em cargas de trabalho paralelas. O processador Ampere A1, utilizado nas instâncias OCI, implementa a arquitetura ARMv8-A de 64 bits, oferecendo excelente desempenho para workloads de segurança como scanning de rede, fuzzing e compilação de ferramentas Go nativas. A toolkit explora essa arquitetura ao compilar binários Go nativos para ARM64, maximizando o desempenho das ferramentas instaladas.

Cloud-Init

O Cloud-Init é o padrão de inicialização de instâncias em nuvem amplamente adotado por provedores como AWS, Azure, GCP e OCI. Ele permite a execução de scripts e configurações automaticamente durante o primeiro boot de uma instância. O OCI-SecOps utiliza esse mecanismo para injetar scripts de hardening diretamente no processo de criação da VM, garantindo que a instância já nasça configurada de forma segura antes mesmo de qualquer acesso SSH.

Hardening de Sistema

Hardening é o processo de reduzir a superfície de ataque de um sistema ao desabilitar serviços desnecessários, aplicar configurações restritivas e implementar controles de segurança. Na toolkit, o hardening é aplicado em múltiplas camadas: nível de kernel via sysctl (proteção contra ICMP redirect, SYN flood e IP spoofing), sistema de arquivos (montagens nosuid/nodev), SSH (autenticação apenas por chave, timeout de sessão, banners legais), firewall via UFW e prevenção de intrusão via Fail2Ban. Dois perfis de hardening estão disponíveis: um voltado a ambientes de pentest e outro otimizado para cargas Docker/CI.

DevSecOps e CI/CD de Segurança

DevSecOps integra práticas de segurança ao longo de todo o ciclo de vida de desenvolvimento de software, em vez de tratá-las como uma etapa final. Um pipeline de CI/CD de segurança tipicamente inclui análise estática de código (SAST), varredura de dependências (SCA) e testes dinâmicos de aplicação (DAST). A toolkit disponibiliza esse pipeline completo com SonarQube (SAST), OWASP Dependency-Check (SCA) e OWASP ZAP (DAST), todos orquestrados via Docker Compose em uma única instância ARM gratuita.


Arquitetura da Toolkit

A OCI-SecOps é composta por oito scripts especializados que cobrem todo o ciclo de vida da infraestrutura: provisionamento, hardening, implantação de ferramentas, monitoramento, auditoria e destruição. Eles se organizam em três camadas:

Camada de Orquestração: oci_provision.sh, oci_teardown.sh
Camada de Hardening: harden.sh, harden_ci.sh
Camada de Toolchain: pentest_arsenal.sh, setup_ci.sh, oci_inventory.sh, oci_dashboard.sh


Hands-on

Instalação do OCI CLI

O OCI CLI é a interface de linha de comando oficial da Oracle para interagir com a API do OCI. Para instalá-lo em sistemas baseados em Linux/macOS, execute o instalador oficial:

bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

Após a instalação, configure o CLI com suas credenciais OCI. O comando abaixo inicia um assistente interativo que solicita o Tenancy OCID, User OCID, região e gera automaticamente um par de chaves API.

oci setup config

Configuração da chave de API no Console OCI

Após o oci setup config, uma chave pública de API é gerada (por padrão em ~/.oci/oci_api_key_public.pem). Essa chave deve ser cadastrada no Console da OCI para que o CLI tenha permissão de realizar chamadas à API. Para isso:

Acesse o Console OCI, clique no ícone de perfil no canto superior direito e selecione Meu Perfil. Na seção Recursos do menu lateral, clique em Chaves de API e, em seguida, em Adicionar chave de API. Selecione a opção Colar chave pública e cole o conteúdo do arquivo oci_api_key_public.pem.

cat ~/.oci/oci_api_key_public.pem

Após adicionar a chave, o Console exibirá um trecho de configuração. Verifique se ele corresponde ao conteúdo do seu arquivo ~/.oci/config. Para validar que o CLI está autenticado corretamente:

oci iam region list

Pré-requisitos

Com o OCI CLI configurado, clone o repositório e garanta que as demais dependências estão presentes.

git clone https://github.com/brennocm/oci-secops && cd oci-secops
# Dependências necessárias: oci-cli, jq, ssh, scp
oci --version && jq --version

Em seguida, gere o par de chaves SSH que será utilizado pelas instâncias.

ssh-keygen -t ed25519 -f ~/.ssh/oci_vps_key -N ""

Configure o arquivo .env a partir do exemplo fornecido, preenchendo as variáveis de ambiente necessárias.

cp .env.example .env && vim .env
OCI_SSH_KEY_PATH=~/.ssh/oci_vps_key
VNC_PASSWORD=sua_senha_vnc
SONAR_DB_PASSWORD=sua_senha_sonar
NVD_API_KEY=sua_chave_nvd  # Opcional, para Dependency-Check

Provisionamento de Infraestrutura

O script oci_provision.sh é o ponto central da toolkit. Ao ser executado, ele consulta automaticamente a API do OCI para descobrir o Tenancy ID, Availability Domain, Subnet e a imagem Ubuntu 24.04 mais recente, eliminando a necessidade de configuração manual desses parâmetros.

chmod +x oci_provision.sh && ./oci_provision.sh

Ao executar, o script apresenta cinco topologias de implantação para escolha:

[1] Single Powerhouse  — 4 OCPU / 24GB RAM  (automação pesada, brute force)
[2] Balanced Duo       — 2x 2 OCPU / 12GB  (scanning paralelo)
[3] Recon Cluster      — 4x 1 OCPU / 6GB   (rotação de IPs, exploração distribuída)
[4] Quick Single       — 1 OCPU / 6GB      (testes rápidos)
[5] CI Security Stack  — 4 OCPU / 24GB     (SonarQube, OWASP ZAP, Dependency-Check)

Antes de provisionar, o script valida automaticamente as cotas do Always Free, impedindo que o provisionamento ultrapasse os limites gratuitos de OCPUs, RAM e armazenamento.

[*] Verificando conformidade com Always Free...
    Armazenamento: 100GB / Limite 200GB  [OK]
    ARM OCPUs: 0 / Limite 4             [OK]
    ARM RAM: 0GB / Limite 24GB          [OK]

Após a validação, a instância é criada com o script de hardening injetado via cloud-init. O oci_provision.sh aguarda o boot, conecta via SSH e transmite em tempo real os logs do processo de hardening.

[*] Aguardando disponibilidade SSH...
[*] Transmitindo logs de hardening via cloud-init:
    [cloud-init] Atualizando sistema...
    [cloud-init] Aplicando configurações sysctl...
    [cloud-init] Configurando UFW e Fail2Ban...
    [cloud-init] Hardening concluído.
[+] Instância pronta: ARM-Monster | IP: 152.xx.xx.xx

Hardening: Perfil Pentest (harden.sh)

O harden.sh é injetado via cloud-init nas topologias 1 a 4. Ele aplica hardening em múltiplas camadas sem comprometer a compatibilidade com ferramentas ofensivas. As principais configurações de kernel aplicadas incluem:

# Proteções de rede
net.ipv4.conf.all.accept_redirects = 0   # Bloqueia ICMP redirects
net.ipv4.conf.all.rp_filter = 1          # Previne IP spoofing
net.ipv4.tcp_syncookies = 1              # Mitiga SYN flood
net.ipv6.conf.all.disable_ipv6 = 1       # Desabilita IPv6

# Proteções de kernel
kernel.kptr_restrict = 2                 # Oculta ponteiros de kernel

# Tuning para pentest de alta performance
fs.file-max = 2097152                    # Limite de file descriptors
net.ipv4.ip_local_port_range = 1024 65535

Adicionalmente, o script configura o SSH para aceitar apenas autenticação por chave pública, cria um swap dinâmico de 4 GB (prevenindo OOM durante fuzzing), habilita o AppArmor em modo enforce e instala o Fail2Ban com política agressiva: três tentativas falhas de SSH resultam em bloqueio por 24 horas.

Hardening: Perfil CI/CD (harden_ci.sh)

O harden_ci.sh é utilizado na topologia 5. Além das medidas de hardening padrão, ele instala o Docker Engine e aplica configurações específicas para o SonarQube, que internamente utiliza Elasticsearch e requer ajuste de memória virtual do kernel.

vm.max_map_count = 524288  # Requisito do Elasticsearch (SonarQube)

Arsenal de Pentest (pentest_arsenal.sh)

Após o hardening, o pentest_arsenal.sh é transferido via SCP e executado automaticamente. Ele suporta perfis de instalação modulares para otimizar o tempo de deploy.

./pentest_arsenal.sh --full   # Arsenal completo (web + infra + VNC)
./pentest_arsenal.sh --web    # Apenas ferramentas web
./pentest_arsenal.sh --infra  # Apenas ferramentas de infraestrutura
./pentest_arsenal.sh --vnc    # Adiciona XFCE + TigerVNC

O script instala o Go 1.23.4 nativo para ARM64 e compila mais de 20 ferramentas diretamente da fonte. Entre as ferramentas de reconhecimento web estão: assetfinder, subfinder, amass, httpx, nuclei, katana, dalfox, ffuf e gowitness. Para infraestrutura e Active Directory: bloodhound, impacket, netexec, certipy-ad, metasploit, sliver e ligolo-ng, entre outros.

O perfil --vnc instala o ambiente gráfico XFCE com TigerVNC na porta 5901, incluindo Firefox, Burp Suite Community, Wireshark e CherryTree, configurando um serviço systemd para reinicialização automática.

Stack de CI/CD de Segurança (setup_ci.sh)

Na topologia 5, o setup_ci.sh é executado em lugar do arsenal de pentest. Ele configura um pipeline DevSecOps completo via Docker Compose com três componentes principais:

SonarQube Community (SAST): análise estática de código com banco PostgreSQL 16. Acessível apenas via túnel SSH na porta 9000, para não expor a interface publicamente.

# Acesso ao SonarQube via túnel SSH
ssh -N -L 9000:localhost:9000 -i ~/.ssh/oci_vps_key ubuntu@<IP_PUBLICO>
# Então, localmente:
# http://localhost:9000  (credenciais padrão: admin/admin)

OWASP ZAP (DAST): testes dinâmicos de aplicação via Docker, com wrappers gerados automaticamente.

zap-baseline https://alvo.exemplo.com    # Varredura baseline
zap-api https://alvo.exemplo.com/openapi.json  # Varredura via spec OpenAPI

OWASP Dependency-Check (SCA): análise de composição de software para identificar vulnerabilidades em dependências. O script pré-popula o cache do NVD (~2 GB) durante a instalação para eliminar a espera inicial de ~1 hora na primeira execução. O script também instala suporte multiarch via QEMU, permitindo que imagens x86 rodem em hosts ARM64.

dep-check --project "meu-projeto" --scan ./src --failOnCVSS 7

Inventário de Recursos (oci_inventory.sh)

O oci_inventory.sh realiza uma auditoria recursiva de todos os compartimentos do tenancy, listando instâncias, volumes, IPs e verificando a conformidade com os limites do Always Free.

./oci_inventory.sh
MÁQUINA      | STATUS  | IP PÚBLICO    | RECURSOS        | CRIAÇÃO    | AD
ARM-Monster  | RUNNING | 152.xx.xx.xx  | 4 OCPU / 24GB   | 2026-03-20 | AD-1

--- RESUMO DE CONFORMIDADE ALWAYS FREE ---
Armazenamento: 50GB / Limite 200GB   [OK]
ARM OCPUs:     4 / Limite 4          [OK]
ARM RAM:       24GB / Limite 24GB    [OK]

Dashboard em Tempo Real (oci_dashboard.sh)

O oci_dashboard.sh exibe um painel atualizado a cada 15 segundos com o estado de todas as instâncias, codificando os estados por cor: verde para RUNNING, amarelo para estados transientes e vermelho para STOPPED ou TERMINATED.

./oci_dashboard.sh

Destruição de Recursos (oci_teardown.sh)

Ao final de uma sessão, o oci_teardown.sh oferece destruição seletiva ou em massa das instâncias, com confirmação explícita antes de qualquer operação destrutiva. Os volumes de boot são automaticamente destruídos junto às instâncias, liberando o armazenamento.

./oci_teardown.sh
[1] Destruir instância específica
[2] Destruir todas as instâncias + remover log
[3] Sair sem alterações

O script monitora o estado da instância via API até que o status TERMINATED seja confirmado, fornecendo feedback visual durante o processo.


Repositório e Acesso

A toolkit OCI-SecOps está disponível em https://github.com/brennocm/oci-secops, com documentação de instalação e pré-requisitos.