https://github.com/mycloudlab/example-maven-dependency-check-sonar
Exemplo de uso do dependency check com sonar
https://github.com/mycloudlab/example-maven-dependency-check-sonar
dependency-check devops devsecops java security sonar
Last synced: 12 months ago
JSON representation
Exemplo de uso do dependency check com sonar
- Host: GitHub
- URL: https://github.com/mycloudlab/example-maven-dependency-check-sonar
- Owner: mycloudlab
- Created: 2020-06-25T15:05:02.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-10-13T23:04:48.000Z (over 5 years ago)
- Last Synced: 2025-02-15T08:19:16.291Z (about 1 year ago)
- Topics: dependency-check, devops, devsecops, java, security, sonar
- Language: Shell
- Homepage:
- Size: 1020 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Exemplo de uso do dependency check com sonar
Neste repositório temos um exemplo de um projeto maven que possui uma dependência vunerável, demonstramos o uso do plugin dependency check da OWASP sendo executado e o report gerado é enviado para o sonar, podendo impedir a continuidade do pipeline via script de verificação do quality gate do sonar. Também abordamos a supressão de falsos positivo.
## Montagem do laboratório
### JVM e Maven
Para os testes do projeto foi feita a instalação da JVM via SDKMAN com o comando:
```bash
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install java 8.0.252.j9-adpt
$ sdk install maven 3.6.3
$ mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/csantana/.sdkman/candidates/maven/current
Java version: 1.8.0_252, vendor: Eclipse OpenJ9, runtime: /home/csantana/.sdkman/candidates/java/8.0.252.j9-adpt/jre
Default locale: pt_BR, platform encoding: UTF-8
OS name: "linux", version: "5.6.14-300.fc32.x86_64", arch: "amd64", family: "unix"
$
```
Com a instalação do ambiente o projeto foi montado usando o comando:
```bash
$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
```
### Análise do Dependency check OWASP
A analise de vunerabilidade é obtida usando:
```bash
$ mvn org.owasp:dependency-check-maven:check
```
No processo é feito o download da base de CVE reportado para as dependências.
### Sonar
O Sonar no exemplo utiliza uma imagem docker para facilitar o desenvolvimento do projeto, para baixar a imagem do projeto usamos o podman:
```bash
$ podman pull sonarqube:lts
```
A execução do sonar é feita usando o comando abaixo:
```bash
podman run --net=host -it sonarqube:lts
```
O sonarqube está disponível no endereço http://localhost:9000/ com o usuário admin e a senha admin.
Após a instalação é necessário instalar o plugin dependency check no maven. A instalação é feita na área administrativa do sonar conforme imagem abaixo:

Ao gerar um novo projeto para a aplicação no sonar, copie o token da aplicação:

Esse token "1926fa02a332b16c0115d3661874f1900ed3f12c" será utilizado para enviar a análise para o sonar via maven.
### Análise do dependency check no sonar
Agora para fazer a análise do dependency check e enviar o report para o sonar usamos o comando abaixo:
```bash
$ mvn org.owasp:dependency-check-maven:check \
sonar:sonar \
-Dformat=ALL \
-Dsonar.projectKey=my-app \
-Dsonar.host.url=http://localhost:9000/ \
-Dsonar.login=1926fa02a332b16c0115d3661874f1900ed3f12c \
-Dsonar.dependencyCheck.htmlReportPath=target/dependency-check-report.html \
-Dsonar.dependencyCheck.jsonReportPath=target/dependency-check-report.json
```
Ao acessar a dashboard do sonar podemos ver que a aplicação executou a análise do sonar e enviou o report do dependency check para o servidor do sonar.

### Teste de vunerabilidade
Para garantir o funcionamento do plugin e testar o report, vamos adicionar a dependência do tomcat que sabemos que está vunerável:
```xml
org.apache.tomcat
tomcat
9.0.30
pom
```
Ao executar novamente a análise, usando o comando maven, notamos que o report foi adicionado ao sonar.

### Verificando programaticamente o quality gate do sonar
A análise do sonar pode ser verificada usando o script disponível *verify-sonar-quality-gate.sh*, este script é útil para a validação em pipeline:
```bash
$ ./verify-sonar-quality-gate.sh
```
```bash
$ ./verify-sonar-quality-gate.sh 1926fa02a332b16c0115d3661874f1900ed3f12c
verificando o quality gate do projeto...
O projeto NÃO ATENDEU ao quality gate. Para maiores detalhes acesse o dashboard do projeto em: http://localhost:9000/dashboard?id=my-app
FALHOU
```
NOTA: O script requer que o utilitário `jq` esteja disponível.
Instale o utilitário usando o comando adequado ao seu sistema operacional.
### Tratando Falsos positivo
O verificador de dependência detecta o uso de vulnerabilidades conhecidas, procurando correspondências das dependências no projeto Maven com os componentes de software listados nas CVEs. Esse processo é um pouco superficial, porque eles têm esquemas diferentes para identificar o software. O Maven identifica dependências usando GroupId, ArtifactId and Version (GAV) e CVEs identificam software usando Common Platform Enumeration (CPE).
Esse processo então pode gerar falsos positivos. Portanto, independentemente do CPE, é sempre prudente ler a descrição do CVE e tirar nossas próprias conclusões.
Para impedir o reaparecimento de falsos positivos, podemos suprimir os erros reportados. Fazemos isso configurando um arquivo de supressão e informamos no pom.xml usando a opção suppressionFiles no pom.xml, Abaixo vemos o exemplo dessa configuração.
```xml
org.owasp
dependency-check-maven
${basedir}/suppressed.xml
```
O conteúdo do arquivo suppressed.xml deve ser o seguinte:
```xml
```
Para informar a supressão de uma dependência devemos adicionar o conteúdo de supressão ao arquivo, o conteúdo para supressão é feito no report clicando no botão suppress conforme imagem abaixo e copiando o conteudo para dentro do arquivo:

Com isso o erro não é mais alertado nos reports do plugin do dependency check.