# Scan de Imagem

Documentação:

{% embed url="<https://aquasecurity.github.io/trivy/v0.48/docs/target/container_image/>" %}

Rollback das alterações no Dockerfile:

```docker
FROM node:18.16.0
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]
```

## Versão 1

Scan da versão 1 do projeto:

```shellscript
$ docker image ls marcelodpbarbieri/projeto-caotico
REPOSITORY                          TAG       IMAGE ID       CREATED      SIZE
marcelodpbarbieri/projeto-caotico   v4        560609f4b412   4 days ago   222MB
marcelodpbarbieri/projeto-caotico   v5        560609f4b412   4 days ago   222MB
marcelodpbarbieri/projeto-caotico   v3        5b89bf3172ed   4 days ago   178MB
marcelodpbarbieri/projeto-caotico   v2        c01d1ef00d51   4 days ago   231MB
marcelodpbarbieri/projeto-caotico   v1        53c9f00d0f10   4 days ago   1.1GB

$ trivy image marcelodpbarbieri/projeto-caotico:v1 > trivy.txt
```

trivy.txt:

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2F7mQz8mdoSdycmohNUEsb%2Fimage.png?alt=media&#x26;token=c05a7dd8-d30f-4f05-b614-c8e07f8dad75" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2F9wptel7qZ09ojhL6G5ki%2Fimage.png?alt=media&#x26;token=6bfc524d-2cf0-4120-b804-d7c1c28302a1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2FxmIGFH5oWcR1FpVlJOIk%2Fimage.png?alt=media&#x26;token=2c4100af-4666-4497-ae0d-85350bc1774c" alt=""><figcaption></figcaption></figure>

Nele é possível identificar problemas com a imagem e configuração da aplicação. Neste exemplo, a chave da aplicação está dentro do arquivo `/app/server.js`, problema esse que o Docker Scout não havia identificado.

## Versão 5

Verificar a última imagem (v5):

```bash
$ trivy image marcelodpbarbieri/projeto-caotico:v5 > trivy_v5.txt
```

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2FXJjWPgMLhIss5a7aZIGf%2Fimage.png?alt=media&#x26;token=71d1bde5-3abf-46a1-91bc-147f2a55bee6" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2Fyh1TLj8PSkktjZZ8HgAa%2Fimage.png?alt=media&#x26;token=8a47c5b7-8b25-4b09-ba44-f2e27440485a" alt=""><figcaption></figcaption></figure>

***

### Scanners

Pode-se ainda escolher o que verificar:

```bash
$ trivy image --scanners vuln,misconfig,secret,license
```

Por padrão, é verificado as vulnerabilidades (`vuln`) e as chaves (`secret`). Então entende-se que o comando acima faz um fullscan.

Verificação:

```bash
$ trivy image --scanners vuln,misconfig,secret,license marcelodpbarbieri/projeto-caotico:v5 > trivy_v5.txt
```

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2FQtOGTXGuYAPz4a2dm9tx%2Fimage.png?alt=media&#x26;token=fe84a073-a05c-418e-b8dd-c5530bf484be" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2FNfke11J4kMUxXHJzK8gN%2Fimage.png?alt=media&#x26;token=b5da0752-ba17-4e4c-88fd-8e5f3acd28ff" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2F6eDjskLnIkL6iKl2AMq8%2Fimage.png?alt=media&#x26;token=5ade81e0-48bf-4bf2-9958-76b695fb1f57" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2Fvo4GtJZSIB02xE4s7b77%2Fimage.png?alt=media&#x26;token=5eac3e39-ff44-4a5e-9995-68396d64ab5d" alt=""><figcaption></figcaption></figure>

### Ajustes

O projeto será ajustado para recriar uma nova imagem com correções para retirada da chave.

Dockerfile:

```docker
FROM node:25.2.1-alpine3.22
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]
```

Instalação das dependências:

```bash
marcelo@Latitude5440:~/devops-projeto-caotico/src$ npm install

removed 45 packages, and audited 78 packages in 479ms

14 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

Construção e publicação da imagem:

```shellscript
/src$ docker image build -t marcelodpbarbieri/projeto-caotico:v6 \ 
            -f Dockerfile .

/src$ docker image push marcelodpbarbieri/projeto-caotico:v6
```

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2FwvD6CBUsZBfudKkGKcLa%2Fimage.png?alt=media&#x26;token=85cfdf99-39e7-4674-a397-67f5b6eab1cf" alt=""><figcaption></figcaption></figure>

Verificação da imagem:

```bash
$ trivy image --scanners secret marcelodpbarbieri/projeto-caotico:v6 > trivy_v6.txt
```

Será exibido somente o sumário sem erros de chave:

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2FIfobbaW6XFn1k9YmxYCY%2Fimage.png?alt=media&#x26;token=40568e00-2603-4dbb-9250-1c3410b02585" alt=""><figcaption></figcaption></figure>
