Scroll to top

Servidor Cloud para Pentest


Leonardo La Rosa - - 0 comments

Introdução: 

Computação em nuvem é um modelo de computação baseado na internet que permite aos usuários acessar e utilizar recursos de computação (como servidores, armazenamento, bancos de dados, redes, software, aplicativos e serviços) de forma on-demand, flexível e escalável, sem a necessidade de conhecimento ou gerenciamento ativo por parte do usuário dos sistemas físicos que suportam esses recursos. Essencialmente, a computação em nuvem transforma a infraestrutura de TI tradicional, onde os recursos são adquiridos e gerenciados localmente, em um serviço acessível via internet que pode ser dimensionado para cima ou para baixo de acordo com as necessidades do usuário.

Existem três modelos principais de serviço na computação em nuvem:

  • Infrastructure as a Service (IaaS): Fornece aos usuários acesso a recursos de computação como servidores virtuais, armazenamento e redes. Os usuários têm controle sobre os sistemas operacionais e as aplicações, mas não sobre a infraestrutura física.
  • Platform as a Service (PaaS): Oferece um ambiente de desenvolvimento e implantação na nuvem, permitindo aos usuários criar e hospedar aplicações sem se preocupar com a infraestrutura subjacente, sistemas operacionais ou atualizações de hardware.
  • Software as a Service (SaaS): Fornece aos usuários acesso a aplicativos de software e suas funcionalidades remotamente como um serviço. O fornecedor de SaaS gerencia a infraestrutura, as plataformas e os detalhes do software, permitindo aos usuários acessar o serviço através da internet, geralmente mediante uma assinatura.

Compartilhamento de responsabilidade

A computação em nuvem é fundamental para muitos aspectos da tecnologia moderna, incluindo o armazenamento e processamento de big data, hospedagem de sites e aplicações, inteligência artificial, aprendizado de máquina e muito mais, oferecendo vantagens como custo-benefício, escalabilidade, flexibilidade, eficiência e acesso a tecnologias avançadas.

O modelo de responsabilidade compartilhada na computação em nuvem é um conceito fundamental que define como a segurança e o gerenciamento das infraestruturas de computação em nuvem são divididos entre o provedor de serviços de nuvem (CSP) e o cliente (usuário da nuvem). Este modelo varia dependendo do tipo de serviço de nuvem utilizado (IaaS, PaaS, SaaS), mas o princípio central é que, embora o provedor de nuvem seja responsável pela segurança da nuvem em si, o cliente é responsável pela segurança do que ele coloca e opera na nuvem.

IaaS (Infrastructure as a Service)

Responsabilidade do Provedor: No modelo IaaS, o provedor de serviços de nuvem é responsável pela segurança da infraestrutura de hardware e software subjacente, incluindo data centers, rede, servidores físicos, e a camada de virtualização.

Responsabilidade do Cliente: O cliente é responsável pela gestão dos sistemas operacionais, middleware, aplicativos, e dados que opera na infraestrutura. Isso inclui responsabilidades como atualizações de segurança do sistema operacional, configuração de firewalls, controle de acesso e proteção de dados.

PaaS (Platform as a Service)

Responsabilidade do Provedor: No modelo PaaS, além da infraestrutura, o provedor de serviços de nuvem também é responsável pela segurança e manutenção da plataforma de desenvolvimento, incluindo sistemas operacionais, serviços de banco de dados, ferramentas de desenvolvimento e outros middleware.

Responsabilidade do Cliente: O cliente se concentra na construção, no deployment e na gestão de suas aplicações e dados que rodam sobre a plataforma. Isso inclui a segurança a nível de aplicação, como a gestão de identidades e acessos, a proteção dos dados da aplicação e a implementação de lógicas de negócio seguras.

SaaS (Software as a Service)

Responsabilidade do Provedor: No modelo SaaS, o provedor é responsável por quase todos os aspectos da infraestrutura, incluindo a segurança da aplicação, a infraestrutura de rede, e a persistência dos dados. Eles gerenciam a segurança da plataforma, as atualizações de software, a correção de vulnerabilidades e a segurança física dos data centers.

Responsabilidade do Cliente: O cliente é geralmente responsável pela gestão de suas contas e usuários, incluindo a configuração de políticas de acesso, a proteção da integridade de seus dados ao inseri-los no serviço e a segurança de suas credenciais de acesso.

Importância do Modelo de Responsabilidade Compartilhada

Este modelo é crucial para garantir a segurança e a conformidade em ambientes de nuvem, pois esclarece que, embora os provedores de nuvem tenham medidas robustas para proteger a infraestrutura, os clientes têm um papel ativo na proteção de seus próprios dados e aplicações. Isso significa que os clientes precisam entender suas responsabilidades e implementar práticas de segurança adequadas para seus componentes no ambiente de nuvem.

A compreensão clara do modelo de responsabilidade compartilhada ajuda as organizações a adotarem a computação em nuvem de forma segura, garantindo que medidas de segurança adequadas sejam aplicadas em todos os níveis da infraestrutura de TI.

Provedores de cloud

Atualmente existem dezenas (ou centenas) de provedores de serviços de computação em nuvem, dentre eles destacamos:

Vantagens do uso de Cloud Computing para Pentest

No modelo de computacional tradicional, o processamento de dados é feito em seu computador, através de suas máquinas virtuais que se conectam a uma VPN e a partir daí seus alvos são acessados. Neste modelo, é importante que seu computador tenha uma configuração razoável para que consiga processar todas as ferramentas e demandas.

No modelo de computação baseada em nuvem, não importa o equipamento ou a performance do seu host local, uma vez que o processamento ocorre nos hosts do provedor. Além disso, você pode acessar esses hosts de qualquer lugar, até mesmo do seu smartphone.

Construindo nosso lab

Escolhendo o Provedor de Cloud

Para nossa aula, utilizaremos os serviços em Cloud da Digital Ocean

Utilize o link abaixo para ter 60 dias de acesso gratuito:

https://m.do.co/c/dd62f5ff6b51

Crie sua conta de acesso

Responda ao questionário de uso da plataforma

Insira as informações de pagamento (Você terá 60 dias antes de receber a sua primeira fatura)

Para acessar a console, clique em Explore our control panel

Entendendo as informações do painel

Configurando a API

Clique no botão API para criarmos nossa API que utilizaremos para automatizar a criação de nossas máquinas.

Clique no botão Generate New Token

Preencha com o nome que desejar, altere a expiração para No Expire e deixe ativa a opção Write

Copie o token e salve em um local seguro:

Criando nosso Servidor

Agora criaremos nosso host manualmente, utilizando a Plataforma da Digital Ocean. Em seguida faremos a configuração automática, utilizando a API que salvamos.

  • Clique no botão create e em seguida selecione a opção Droplet
  • Selecione a Região para seu servidor. Quanto mais próximo do local de acesso, melhor a performance, portanto, recomendo selecionar New York ou San Fransisco
  • Mantenha as configurações de rede e de OS como estão
  • Selecione o Tipo Basic de Droplet e marque a CPU para Premium Intel.
  • Em seguida marque o equipamento de menor valor: USD $8 mensais ou USD $0,012.

Após os 60 dias de teste, esse será o valor debitado mensalmente. Cerca de R$40,00 mensais

  • Crie uma senha para o seu servidor, respeitando os critérios definidos abaixo:
  • Defina o nome do computador ou pode deixar como sugerido pela Plataforma.
  • Clique em Create Droplet e aguarde o carregamento do Servidor
  • Em poucos segundos seu servidor estará disponível para uso.
  • Acessando o Servidor
  • Pronto! Você está conectado ao servidor.

Automatizando a criação das máquinas

Agora criaremos nosso servidor, utilizando SCRIPTS desenvolvidos para o curso. Estes scripts são bonus e você poderá utilize-los para qualquer conexão com seus hosts na Digital Ocean.

servidor.sh para Linux

Edite o arquivo servidor.sh e inclua o token da Digital Ocean que você criou e as configurações do host:

Código Fonte Servidor.sh

#!/bin/bash

DIGITALOCEAN_TOKEN=”COLOQUE SEU TOKEN AQUI”

HOSTNAME=”meuservidor”

REGION= “nyc1”

SIZE=”s-1vcpu-1gb-35gb-intel”

IMAGE=”debian-12-x64″

TEMPO=40

vermelho=”\e[31m”

verde=”\e[32m”

amarelo=”\e[33m”

azul=”\e[34m”

reset=”\e[0m”  # Reseta a cor para o padrão

#valida se o jq está instalado

binario=”jq”

if ! which $binario &> /dev/null; then

    echo -e “${vermelho}O binário ${reset} $binario ${vermelho} não está instalado. Por favor, instale-o com o comando ${amarelo}apt install jq -y ${vermelho}antes de prosseguir.${reset}”

    exit 1

fi

# Função para criar a moldura

function criar_moldura() {

    local largura=80  # Largura da moldura

    local texto=”$1″  # Texto a ser exibido

    local centralizar=$((($largura – ${#texto}) / 2))

    for ((i = 0; i < $centralizar; i++)); do

        echo -n “-“

    done

    echo -n ” $texto “

    for ((i = $centralizar + ${#texto} + 2; i < $largura; i++)); do

        echo -n “-“

    done

    echo “”

}

# Cabeçalho

while true; do

    clear

    criar_moldura “Conector Digital Ocean by Leonardo La Rosa aka RL34075”

# Exibe o menu de seleção

    select option in “Iniciar $HOSTNAME” “Consultar $HOSTNAME” “Deletar $HOSTNAME” “Sair”; do

     case $option in

        “Iniciar $HOSTNAME”)

echo “”

echo -e “${amarelo}* Iniciando a criação do ${reset}$HOSTNAME ${reset}”

curl -X POST -H “Content-Type: application/json” -H “Authorization: Bearer $DIGITALOCEAN_TOKEN” -d ‘{“name”:”‘$HOSTNAME'”,”region”:”‘$REGION'”,”size”:”‘$SIZE'”,”image”:”‘$IMAGE'”,”backups”:false,”ipv6″:false,”user_data”:null,”private_networking”:null,”volumes”:null,”tags”:[“‘$HOSTNAME'”]}’ “https://api.digitalocean.com/v2/droplets” > /dev/null 2>&1

echo “”

while [ $TEMPO -ge 0 ]; do

    echo -ne “${amarelo}\r* Aguarde: $TEMPO segundos para o ${reset}$HOSTNAME ${amarelo}ser iniciado ${reset}”

    sleep 1  # Pausa por 1 segundo

    TEMPO=$(($TEMPO – 1))

done

# Execute o comando curl e armazene a saída JSON em uma variável

hostx=$(curl -s -X GET -H “Content-Type: application/json” -H “Authorization: Bearer $DIGITALOCEAN_TOKEN”  “https://api.digitalocean.com/v2/droplets?page=1&per_page=1&tag_name=$HOSTNAME” | jq -r ‘.droplets[0].networks.v4[0].ip_address’)

echo -e “\n${amarelo}* Para se conectar digite: ${reset}ssh root@$hostx\n ${reset}”

echo “”

select option in “Acessar $HOSTNAME” “Não acessar $HOSTNAME”; do

    case $option in

        “Acessar $HOSTNAME”)

echo -e “\n${amarelo}* Conectando a ${reset}$HOSTNAME\n ${reset}”

echo “”

ssh root@$hostx

;;

“Não acessar $HOSTNAME”)

break

;;

        *)

        echo “* ${vermelho}Opção inválida. Por favor, escolha uma opção válida.${reset}”

        ;;

    esac 

done

        ;;

        “Consultar $HOSTNAME”)

hostx=$(curl -s -X GET -H “Content-Type: application/json” -H “Authorization: Bearer $DIGITALOCEAN_TOKEN”  “https://api.digitalocean.com/v2/droplets?page=1&per_page=1&tag_name=$HOSTNAME” | jq -r ‘.droplets[0].networks.v4[0].ip_address’)

if [ -z “$hostx” ]; then 

echo -e “* $HOSTNAME ${vermelho}não encontrado! ${reset}”

echo “”

break

else

echo -e “\n${amarelo}* Para se conectar digite: ${reset}ssh root@$hostx\n ${reset}”

echo “”

select option in “Acessar $HOSTNAME” “Não acessar $HOSTNAME”; do

    case $option in

        “Acessar $HOSTNAME”)

echo -e “\n${amarelo}* Conectando a ${reset}$HOSTNAME\n ${reset}”

echo “”

ssh root@$hostx

;;

“Não acessar $HOSTNAME”)

break

;;

        *)

      echo “* Opção inválida. Por favor, escolha uma opção válida.”

        ;;

    esac 

done

fi

;;

        “Deletar $HOSTNAME”)

curl -X DELETE -H “Content-Type: application/json” -H “Authorization: Bearer $DIGITALOCEAN_TOKEN”  “https://api.digitalocean.com/v2/droplets?tag_name=”$HOSTNAME

        ;;

        “Sair”)

         echo “Saindo…”

        break

             ;;

        *)

         echo “Opção inválida. Por favor, escolha uma opção válida.”

            ;;

    esac

done

break

    sleep 1  # Intervalo de atualização do cabeçalho (1 segundo)

done

servidor.ps1 para Windows

Edite o arquivo servidor.ps1 e inclua o token da Digital Ocean que você criou e as configurações do host:

Código fonte Servidor.ps1

$OutputEncoding = [System.Text.Encoding]::UTF8

$DIGITALOCEAN_TOKEN = “COLOQUE SEU TOKEN AQUI

$HOSTNAME = “meuservidor

# Exibe o menu de seleção

do {

    Clear-Host

    $option = Read-Host @”

————- Conector Digital Ocean by Leonardo La Rosa aka RL34075 ———–

Escolha uma opção:

  1. Iniciar $HOSTNAME
  2. Consultar $HOSTNAME
  3. Deletar $HOSTNAME
  4. Sair

“@

    switch ($option) {

        “1” {

            Write-Host “>>Iniciando a criacao do $HOSTNAME”

            $body = @{

                name = $HOSTNAME

                region = “nyc1

                size = “s-1vcpu-1gb-35gb-intel

                image = “ubuntu-20-04-x64

                backups = $false

                ipv6 = $false

                user_data = $null

                private_networking = $null

                volumes = $null

                tags = @($HOSTNAME)

            } | ConvertTo-Json

            Invoke-RestMethod -Method Post -Uri “https://api.digitalocean.com/v2/droplets” -Headers @{

                “Content-Type” = “application/json”

                “Authorization” = “Bearer $DIGITALOCEAN_TOKEN”

            } -Body $body > $null

$TempoTotalEmSegundos = 60

$TempoRestante = $TempoTotalEmSegundos

while ($TempoRestante -gt 0) {

    Clear-Host  # Limpa o console para exibir a contagem atualizada

    Write-Host “Aguarde $TempoRestante segundos para iniciar o $HOSTNAME”

    Start-Sleep -Seconds 1

    $TempoRestante–

}

            # Execute o comando Invoke-RestMethod e armazene a saída JSON em uma variável

            $hostx = Invoke-RestMethod -Method Get -Uri “https://api.digitalocean.com/v2/droplets?page=1&per_page=1&tag_name=$HOSTNAME” -Headers @{

                “Content-Type” = “application/json”

                “Authorization” = “Bearer $DIGITALOCEAN_TOKEN”

            } | Select-Object -ExpandProperty droplets | ForEach-Object {

                $_.networks.v4 | Where-Object { $_.type -eq “public” } | Select-Object -ExpandProperty ip_address

            }

            Write-Host “Para se conectar via ssh digite: ssh root@$hostx”

            

            do {

                $subOption = Read-Host @”

Escolha uma opção:

  1. Acessar $HOSTNAME via SSH
  2. Nao acessar $HOSTNAME

“@

                switch ($subOption) {

                    “1” {

                        ssh root@$hostx

                        return

                    }

                    “2” {

                        return

                    }

                    default {

                        Write-Host “Opcao invalida. Por favor, escolha uma opcao valida.”

                    }

                }

            } while ($subOption -ne “1” -and $subOption -ne “2”)

        }

        “2” {

            # Execute o comando Invoke-RestMethod e armazene a saída JSON em uma variável

            $hostx = Invoke-RestMethod -Method Get -Uri “https://api.digitalocean.com/v2/droplets?page=1&per_page=1&tag_name=$HOSTNAME” -Headers @{

                “Content-Type” = “application/json”

                “Authorization” = “Bearer $DIGITALOCEAN_TOKEN”

            } | Select-Object -ExpandProperty droplets | ForEach-Object {

                $_.networks.v4 | Where-Object { $_.type -eq “public” } | Select-Object -ExpandProperty ip_address

            }

if ([string]::IsNullOrEmpty($hostx)) {

    Write-Host “$HOSTNAME nao encontrado”

} else {

            Write-Host “Para se conectar via ssh digite: ssh root@$hostx”

            

            do {

                $subOption = Read-Host @”

Escolha uma opcao:

  1. Acessar $HOSTNAME via SSH
  2. Nao acessar $HOSTNAME

“@

                switch ($subOption) {

                    “1” {

                        ssh root@$hostx

                        return

                    }

                    “2” {

                        return

                    }

                    default {

                        Write-Host “Opcao invalida. Por favor, escolha uma opcao valida.”

                    }

                }

            } while ($subOption -ne “1” -and $subOption -ne “2”)

}

}

        “3” {

            Invoke-RestMethod -Method Delete -Uri “https://api.digitalocean.com/v2/droplets?tag_name=$HOSTNAME” -Headers @{

                “Content-Type” = “application/json”

                “Authorization” = “Bearer $DIGITALOCEAN_TOKEN”

            }

        }

        “4” {

            Write-Host “Saindo…”

            return

        }

        default {

            Write-Host “Opaoo invalida. Por favor, escolha uma opcao valida.”

        }

    }

} while ($true)

Related posts