Syntax highlighting of 95a7b83 ~( devops/secops)

# DevSecOps

[TOC]

## Refs

https://ossindex.sonatype.org/

## Уязвимости в зависимостях

### dependency-check

Homepage - https://owasp.org/www-project-dependency-check/
Sourcecode - https://github.com/jeremylong/DependencyCheck
Image 1 - https://hub.docker.com/r/owasp/dependency-check
Image 2 - https://hub.docker.com/r/owasp/dependency-check-action

Варианты запуска:
**image 1** - Образ программы. Запускаем сценарий по ссылке из директории проекта. Программа скачивает базу уязвимостей и запускает проверку. База уязвимостей кэшируется на хосте и обновляется при очередном запуске. 
> Сценарий падает при сохранении отчета. Лечение - заменяем `-u $(id -u ${USER}):$(id -g ${USER})` на `-u root`

**image 2** - Образ программы с базой уязвимостей.  Выполняем команду ниже:
```bash
docker pull owasp/dependency-check-action:latest
docker run --rm \
    --volume $(pwd):/src \
    --volume $(pwd)/odc-reports:/report:z \
    owasp/dependency-check-action:latest --scan /src --format HTML --project app --out /report
```
Вызов программы внутри контейнера

```bash
docker run --rm \
    --entrypoint=/bin/sh -it \
    --volume $(pwd):/src \
    --volume $(pwd)/odc-reports:/report:z \
    owasp/dependency-check-action:latest
/usr/share/dependency-check/bin/dependency-check.sh --scan /src --format HTML --project cross-docking --out /report
```

Параметр `--failOnCVSS SCORE` задает рейтинг найденных уязвимостей, при котором проверка упадет. Например, параметр `--failOnCVSS 9.0` приведет к падению сценария проверки, если одна или более найденных уязвимостей будут иметь рейтинг >= 9.0.
О рейтинге уязвимостей - https://nvd.nist.gov/vuln-metrics/cvss
![CVSS ratings](https://clck.ru/sH78d)

```bash
# ...
/usr/share/dependency-check/bin/dependency-check.sh \
  --scan /src --format HTML --project app --out /report --failOnCVSS 9.0
# ...
# [INFO] Writing report to: /report/dependency-check-report.html
# [ERROR]
#
# One or more dependencies were identified with vulnerabilities that have a CVSS score greater than or equal to '9.0':
# 
# app.jar: h2-1.4.197.jar: CVE-2022-23221(9.8), CVE-2021-42392(9.8)
# app.jar: spring-core-5.3.13.jar: CVE-2022-22965(9.8)
# app.jar: spring-web-5.3.13.jar: CVE-2022-22965(9.8), CVE-2016-1000027(9.8)
```


## Уязвимости в Docker-образах

### Gitlab Way

https://docs.gitlab.com/ee/user/application_security/container_scanning/

```bash
# --- check Docker image for vulnerabilites
docker run --rm \
  -e DOCKER_IMAGE=image-name \
  registry.gitlab.com/security-products/container-scanning:5 \
  gtcs scan
```

Результат работы проверки всегда позитивный, независимо от наличия найденных уязвимостей (перепроверить). Для того, что проверка "падала", необходимо в конфигурации линии сборки добавить следующую конфигурацию:
```yaml
  script:
    - gtcs scan
    # --- gtcs always exit with 0 so job always success
    # --- workaround
    #     see https://gitlab.com/gitlab-org/gitlab/-/issues/213087
    - sudo apt update && sudo apt install -y jq
    - |
      [ $(jq '.vulnerabilities | length' gl-container-scanning-report.json) -eq 0 ]
```

### Trivy

[https://github.com/aquasecurity/trivy](https://github.com/aquasecurity/trivy)
[https://trivy.dev/](https://trivy.dev/)
[Installation](https://aquasecurity.github.io/trivy/v0.34/getting-started/installation/)

```bash
trivy image nginx:latest
```