Introdução

Neste tutorial, você aprenderá como usar o OWASP ZAP (Zed Attack Proxy) para realizar testes de penetração em aplicações web e como integrar esse processo às fases de desenvolvimento de software com Java e Spring Boot. O OWASP ZAP é uma ferramenta de segurança popular que permite identificar vulnerabilidades em aplicações antes que elas cheguem ao ambiente de produção. Este guia abordará desde a configuração inicial do projeto, passando pela integração do OWASP ZAP no ciclo de desenvolvimento, até a automatização dos testes de segurança. Isso garantirá que a segurança seja uma parte fundamental do seu processo de desenvolvimento contínuo, contribuindo para aplicações mais seguras e resilientes.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Antes de começar, assegure-se de ter o JDK (Java Development Kit) e o Maven instalados em sua máquina. Além disso, baixe e configure o OWASP ZAP em seu ambiente local. Para instalar o ZAP, você pode seguir as instruções na documentação oficial. Como pré-requisitos, também é importante ter um editor de código de sua preferência, como IntelliJ IDEA ou Eclipse.

    commands
    # Verifique as versões do JDK e Maven
    java -version
    mvn -version

  2. Criação do Projeto Spring Boot

    Utilize o Spring Initializr para gerar um novo projeto Spring Boot com as dependências necessárias. Configure o projeto com as opções: **Project**: Maven, **Language**: Java, **Spring Boot**: última versão estável, **Packaging**: Jar, **Java**: 11 ou superior. Adicione as dependências ‘Spring Web’, ‘Spring Security’ e ‘Spring Boot DevTools’. Baixe e descompacte o projeto em seu ambiente de trabalho.

    pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.example</groupId>
      <artifactId>api-segura</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>api-segura</name>
      <description>API segura com Spring Boot</description>
      <properties>
        <java.version>11</java.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <scope>runtime</scope>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </project>

  3. Configuração do OWASP ZAP

    Inicie o OWASP ZAP e escolha a opção de iniciar uma nova sessão. Certifique-se de que o ZAP esteja configurado para atuar como um proxy em sua máquina (geralmente na porta 8080). Configure seu navegador para usar o ZAP como proxy. Teste a configuração acessando uma página web qualquer no seu navegador e verificando se a requisição está aparecendo no OWASP ZAP.

    commands
    # Inicie o OWASP ZAP
    ./zap.sh
    # Configure seu navegador para usar o ZAP como proxy (localhost:8080)

  4. Desenvolvimento da Aplicação Backend

    Crie uma simples API RESTful utilizando Spring Boot. Vamos implementar um endpoint que retorne uma lista de mensagens. Crie a classe `MessageController` e a classe `Message`.

    Message.java
    package com.example.apisegura.model;
    
    public class Message {
        private String content;
    
        public Message(String content) {
            this.content = content;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    }

    MessageController.java
    package com.example.apisegura.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.Arrays;
    import java.util.List;
    
    @RestController
    public class MessageController {
    
        @GetMapping("/api/messages")
        public List<Message> getMessages() {
            return Arrays.asList(new Message("Hello, World!"));
        }
    }

  5. Executando a Aplicação

    Utilize o Maven para compilar e executar a aplicação. Após a execução, abra seu navegador e acesse `http://localhost:8080/api/messages` para verificar se o endpoint está funcionando corretamente.

    commands
    # Compilar e executar a aplicação
    mvn spring-boot:run

  6. Configurando o ZAP para Realizar Testes

    No OWASP ZAP, utilize o recurso de ‘Active Scan’ para escanear seu endpoint recém-criado. Selecione a URL que deseja testar e inicie o escaneamento ativo. O ZAP fornecerá um relatório detalhado sobre as vulnerabilidades encontradas.

    commands
    # Iniciar Active Scan
    1. Selecione a URL http://localhost:8080/api/messages no ZAP; 2. Clique com o botão direito e selecione 'Attack' -> 'Active Scan'; 3. Aguarde a análise e visualize os resultados.

  7. Relatórios do ZAP

    Após a conclusão da varredura ativa, visualize os relatórios gerados pelo ZAP. Eles fornecerão uma visão clara das vulnerabilidades e recomendações para correções. Salve o relatório em formato HTML ou XML para análise futura.

    commands
    # Exportar Relatório
    1. No ZAP, vá até a aba 'Reports'; 2. Selecione 'Export Report' e escolha o formato desejado.

  8. Automatizando Testes de Segurança com ZAP

    Para integrar a varredura de segurança ao seu ciclo de desenvolvimento, você pode usar o OWASP ZAP com a API REST que ele fornece. Crie um teste simples que aciona o ZAP após a execução de testes de integração via Maven.

    zap-integration-test.sh
    #!/bin/bash
    
    # Script para automatizar teste de segurança no OWASP ZAP
    # Adicione seus parâmetros de configuração do ZAP aqui
    ZAP_URL="http://localhost:8080"
    # Inicie a varredura no seu endpoint
    curl -X POST "$ZAP_URL/JSON/as/action/scan/?url=http://localhost:8080/api/messages"
    # Aguarde a conclusão e obtenha o resultado
    curl -X GET "$ZAP_URL/JSON/as/view/scanProgress/?scanId=1"

  9. Implementação de Testes Unitários

    Adicione testes unitários aos seus endpoints utilizando JUnit e Spring Test. Isso garantirá que suas funcionalidades estejam corretas antes de realizar a varredura com o OWASP ZAP. Exemplo de teste para o `MessageController`.

    MessageControllerTest.java
    package com.example.apisegura.controller;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.test.web.servlet.MockMvc;
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
    
    @WebMvcTest(MessageController.class)
    public class MessageControllerTest {
    
        @Autowired
        private MockMvc mockMvc;
    
        @Test
        public void testGetMessages() throws Exception {
            mockMvc.perform(get("/api/messages"))
                   .andExpect(status().isOk());
        }
    }

Conclusão

Neste tutorial, você aprendeu a integrar o OWASP ZAP em seu ciclo de desenvolvimento de software utilizando Java e Spring Boot. Através da configuração do ambiente, criação de uma API simples e a realização de testes de segurança, você garantiu que a segurança é considerada em cada fase do desenvolvimento. Ao automatizar esses testes, é possível realizar avaliações contínuas e melhorar a segurança das suas aplicações antes que sejam lançadas, resultando em um software mais confiável e seguro.

Hashtags

#OWASP #ZAP #Pentesting #SegurançaDaInformação #Java #SpringBoot