https://a.storyblok.com/f/270183/1368x665/b7ab662529/25feb_dev-blog_2024-hack-winners.png

Destaque do vencedor do Hackathon da Vonage 2024: Execução remota de código

Publicado em February 13, 2025

Tempo de leitura: 5 minutos

Conheça Sina Madani

Na Vonage, adoramos ver os desenvolvedores ultrapassarem limites e, durante nosso mais recente hackathon em toda a empresa, Sina Madani fez exatamente isso. Seu projeto, Execução Remota de Código, é uma inovação revolucionária — permitindo o acesso remoto a uma máquina sem SSH ou um cliente de área de trabalho remota.

Pense nisso: e se você precisasse enviar comandos para uma máquina do outro lado do mundo, mas não pudesse usar o SSH? A solução da Sina torna isso possível usando as APIs da Vonage, Java e técnicas de rede. Seu projeto também está disponível no GitHub.

O desafio: acesso remoto, sem SSH

Secure Shell (SSH) e os clientes de área de trabalho remota são as opções mais comuns para acesso remoto, mas apresentam limitações:

  • Restrições do firewall – Algumas redes bloqueiam o SSH.

  • Complexidade do usuário – Configurar chaves SSH e regras de acesso nem sempre é simples.

  • Questões de segurança – Portas abertas podem representar um risco.

A abordagem da Sina contorna esses problemas utilizando as APIs de mensagens e autenticação da Vonage para enviar e executar comandos com segurança.

Como funciona

Em essência, o projeto permite que um usuário envie um comando por meio de SMS, WhatsApp, Viber ou Messenger usando a Messages API e, se autenticado, o comando é executado no sistema remoto. O resultado é então enviado de volta pelo mesmo canal de mensagens.

Pilha de tecnologias/Pré-requisitos

  • Account de desenvolvedor da Vonage com um número de telefone da Vonage

    Para comprar um número de telefone virtual, acesse seu painel da API e siga as etapas mostradas abaixo.

    Steps on how to purchase a phone number from the dashboard, from selecting the number and confirming the selection.Purchase a phone number

    1. Acesse seu painel da API

    2. Acesse CRIAR E GERENCIAR > Numbers > Comprar números.

    3. Selecione os atributos necessários e, em seguida, clique em “Pesquisar”

    4. Clique no botão “Comprar” ao lado do número desejado e confirme sua compra

    5. Para confirmar que você adquiriu o número virtual, acesse o menu de navegação à esquerda, na seção “CRIAR E GERENCIAR”, clique em “Numbers” e, em seguida, em “Seus números”

  • SDK Java da Vonage e APIs

  • Ngrok (para expor o servidor local com segurança)

  • Java 21 & Spring Boot

Nos bastidores

Eis a “mágica” por trás do projeto de Sina:

1. Autenticação e segurança em primeiro lugar

Antes de executar qualquer comando, o sistema verifica a identidade do usuário por meio de autenticação via SMS.

  • Um link de autenticação único é enviado por meio de Autenticação Silenciosa.

  • Se a verificação de dados móveis falhar, uma autenticação de PIN por voz de reserva é acionada.

  • Números não autorizados são automaticamente colocados na lista de bloqueados.

  • Se um usuário tentar se autenticar novamente antes do tempo limite, ele receberá uma notificação sobre o tempo de espera.

2. Execução de comandos por meio de mensagens

Após a autenticação, o usuário pode enviar um comando por SMS, WhatsApp ou outro canal compatível. O sistema:

  • Recebe o comando

  • Executa o programa em um shell restrito

  • Retorna a saída

3. Configuração automatizada para uma implantação sem complicações

  • O aplicativo atribui dinamicamente atribui um número da Vonage disponível para processar as mensagens.

  • Se necessário, um novo número é adquirido e vinculado automaticamente.

  • As URLs dos webhooks são atualizadas dinamicamente por meio da API de aplicativos da Vonage.

Execução do projeto

Se você quiser testar isso por conta própria, clone o repositório e configure seu .env arquivo com:

VONAGE_API_KEY: Vonage account API key.
VONAGE_API_SECRET: Vonage account API secret.
VONAGE_APPLICATION_ID: Vonage application UUID.
VONAGE_PRIVATE_KEY_PATH: Absolute path to the private key associated with your Vonage application.
TO_NUMBER: Client phone number that is allowed to run commands.
VONAGE_HACKATHON_SERVER_URL: External URL of the server. Typically, this would be an ngrok.app URL.
VCR_PORT: Port to run the demo on. By default, this is 8080.

Se você tiver o IntelliJ IDEA instalado, você pode importar este projeto e executá-lo pelo IDE, onde o ponto de entrada é a Application classe (src/main/java/com/vonage/hackathon/rce/Application.java).

Para executar a demonstração de forma independente a partir da linha de comando, digite:

mvn install spring-boot:run

Precisa de ajuda para encontrar sua chave de API e seu segredo de API?

Abra sua página de configurações da API para acessar sua chave e seu segredo da API da Vonage, ambos exibidos conforme mostrado na captura de tela abaixo. A chave da API está localizada na parte superior da página e, para acessar seu segredo da API, consulte a subseção “Segredo da Account”. 

Observação: caso você não se lembre do seu segredo de API criado anteriormente, clique em “+ Criar novo segredo” e guarde-o em um local seguro.

Por conveniência, você pode adicionar o seguinte às suas variáveis de ambiente (~/.bashrc or ~/.zshrc):

export VCR_PORT=9080
export NGROK_URL="https://[id].ngrok.app"
export VONAGE_HACKATHON_SERVER_URL=$NGROK_URL
function ngrokUrl() {
    local url=$(curl -s localhost:4040/api/tunnels | jq -r '.tunnels[0].public_url')
    sed -i '' "s|\(^export NGROK_URL=\).*|\1\"$url\"|" ~/.zshrc
    source ~/.zshrc && echo $NGROK_URL
}

Em seguida, inicie o serviço:

ngrok http $VCR_PORT

Seus webhooks da Vonage serão atualizados automaticamente para apontar para sua nova URL do Ngrok.

Conclusão

E é isso! Ao utilizar o SDK Java da Vonage, os recursos de mensagens e os fluxos de trabalho de autenticação, os desenvolvedores podem criar soluções que vão além do que a maioria das pessoas consegue fazer sem as ferramentas tradicionais de SSH ou de área de trabalho remota – exatamente como a Sina fez! Se isso despertou algumas ideias, experimente você mesmo! Você também pode participar da nossa Comunidade de Desenvolvedores da Vonage no Slack ou seguir a mim e/ou a equipe DevEx no X (antigo Twitter). Conte-nos o que você está desenvolvendo — adoraríamos destacar seu projeto na próxima edição!

Compartilhar:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana PhamRepresentante de Desenvolvedores

Diana é defensora de desenvolvedores na Vonage. Ela gosta de comer ostras frescas.