

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Comprobaciones de Dockerfile de Amazon Inspector
<a name="dockerfile-checks"></a>

 En esta sección se describe cómo usar el generador de SBOM de Amazon Inspector para analizar imágenes de contenedor de Dockerfiles y Docker para detectar errores de configuración que ingresen vulnerabilidades de seguridad. 

**Topics**
+ [Uso de las comprobaciones de Dockerfile de Sbomgen](#w2aac39c13b7)
+ [Comprobaciones de Dockerfile compatibles](#w2aac39c13b9)

## Uso de las comprobaciones de Dockerfile de Sbomgen
<a name="w2aac39c13b7"></a>

 Las comprobaciones de Dockerfile se realizan automáticamente cuando se detecta un archivo con un nombre `Dockerfile` o `*.Dockerfile` y cuando se analiza una imagen de Docker. 

 Puede desactivar las comprobaciones de Dockerfile mediante el argumento `--skip-scanners dockerfile`. También puede combinar las comprobaciones de Dockerfile con cualquier analizador disponible, como paquetes de sistemas operativos o de terceros. 

**Comandos de comprobación de Docker de ejemplo**  
 Los siguientes comandos de ejemplo muestran cómo generar imágenes SBOMs para Dockerfiles y contenedores de Docker, así como para paquetes de sistemas operativos y de terceros. 

```
# generate SBOM only containing Docker checks for Dockerfiles in a local directory
./inspector-sbomgen directory --path ./project/ --scanners dockerfile
            
# generate SBOM for container image will by default include Dockerfile checks
./inspector-sbomgen container --image image:tag

# generate SBOM only containing Docker checks for specific Dockerfiles and Alpine, Debian, and Rhel OS packages in a local directory
/inspector-sbomgen directory --path ./project/ --scanners dockerfile,dpkg,alpine-apk,rhel-rpm

# generate SBOM only containing Docker checks for specific Dockerfiles in a local directory
./inspector-sbomgen directory --path ./project/ --skip-scanners dockerfile
```

**Componente de archivo de ejemplo**  
 A continuación, se muestra un ejemplo de un resultado de Dockerfile de un componente de archivo. 

```
{
     "bom-ref": "comp-2",
      "name": "dockerfile:data/docker/Dockerfile",
      "properties": [
        {
          "name": "amazon:inspector:sbom_scanner:dockerfile_finding:IN-DOCKER-001",
          "value": "affected_lines:27-27"
        }
      ],
      "type": "file"
    },
```

**Componente de respuesta a vulnerabilidades de ejemplo**  
 A continuación, se muestra un ejemplo de un resultado de Dockerfile de un componente de respuesta de vulnerabilidades. 

```
{
      "advisories": [
        {
          "url": "https://docs.docker.com/develop/develop-images/instructions/"
        }
      ],
      "affects": [
        {
          "ref": "comp-2"
        }
      ],
      "analysis": {
        "state": "in_triage"
      },
      "bom-ref": "vuln-13",
      "created": "2024-03-27T14:36:39Z",
      "description": "apt-get layer caching: Using apt-get update alone in a RUN statement causes caching issues and subsequent apt-get install instructions to fail.",
      "id": "IN-DOCKER-001",
      "ratings": [
        {
          "method": "other",
          "severity": "info",
          "source": {
            "name": "AMAZON_INSPECTOR",
            "url": "https://aws.amazon.com/inspector/"
          }
        }
      ],
      "source": {
        "name": "AMAZON_INSPECTOR",
        "url": "https://aws.amazon.com/inspector/"
      },
      "updated": "2024-03-27T14:36:39Z"
    },
```

**nota**  
 Si invoca Sbomgen sin el indicador `--scan-sbom`, solo podrá ver los resultados sin procesar de Dockerfile. 

## Comprobaciones de Dockerfile compatibles
<a name="w2aac39c13b9"></a>

 Se admiten las comprobaciones de Dockerfile de Sbomgen para lo siguiente: 
+  El paquete binario de Sudo 
+  Utilidades de Debian APT 
+  Secretos codificados 
+  Contenedores raíz 
+  El tiempo de ejecución debilita los indicadores de comandos 
+  El tiempo de ejecución debilita las variables de entorno 

 Cada una de estas comprobaciones de Dockerfile tiene una clasificación de gravedad correspondiente, que se indica en la parte superior de los siguientes temas. 

**nota**  
 Las recomendaciones que se describen en los siguientes temas se basan en las prácticas recomendadas del sector. 

### El paquete binario de Sudo
<a name="w2aac39c13b9c11"></a>

**nota**  
 La clasificación de gravedad de esta comprobación es **Información**. 

 Recomendamos no instalar ni utilizar el paquete binario de Sudo porque tiene un comportamiento impredecible de TTY y de reenvío de señales. Para obtener más información, consulte [Usuario](https://docs.docker.com/build/building/best-practices/#user) en el sitio web de los documentos de Docker. Si su caso de uso requiere una funcionalidad similar a la del paquete binario de Sudo, le recomendamos que utilice [Gosu](https://github.com/tianon/gosu). 

### Utilidades de Debian APT
<a name="w2aac39c13b9c13"></a>

**nota**  
 La clasificación de gravedad de esta comprobación es **Alta**. 

 A continuación, se indican las prácticas recomendadas para utilizar las utilidades de Debian APT. 

**Combinación de comandos `apt-get` en una sola instrucción `Run` para evitar problemas de almacenamiento en caché**  
 Recomendamos combinar los comandos `apt-get` en una sola instrucción RUN dentro del contenedor de Docker. El uso de `apt-get update` por sí solo provoca problemas de almacenamiento en caché y las instrucciones `apt-get install` posteriores producen un error. Para obtener más información, consulte [apt-get](https://docs.docker.com/build/building/best-practices/#apt-get) en el sitio web de los documentos de Docker. 

**nota**  
 El comportamiento de almacenamiento en caché descrito también puede producirse dentro del contenedor de Docker si el software del contenedor de Docker no está actualizado. 

**Uso de la utilidad de línea de comandos APT de forma no interactiva**  
 Se recomienda utilizar la utilidad de línea de comandos APT de forma interactiva. La utilidad de línea de comandos APT está diseñada como una herramienta para el usuario final y su comportamiento cambia entre versiones. Para obtener más información, consulte [Uso de scripts y diferencias con respecto a otras herramientas de APT](https://manpages.debian.org/stretch/apt/apt.8.en.html#SCRIPT_USAGE_AND_DIFFERENCES_FROM_OTHER_APT_TOOLS) en el sitio web de Debian. 

### Secretos codificados
<a name="w2aac39c13b9c15"></a>

**nota**  
 La clasificación de gravedad de esta comprobación es **Crítica**. 

 La información confidencial del Dockerfile se considera un secreto de codificación rígida. Los siguientes secretos de codificación rígida se pueden identificar mediante las comprobaciones de archivos de Docker de Sbomgen: 
+  AWS IDs clave de acceso — `AKIAIOSFODNN7EXAMPLE` 
+  AWS claves secretas — `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY` 
+  DockerHub fichas de acceso personal — `dckr_pat_thisisa27charexample1234567` 
+  GitHub fichas de acceso personal — `ghp_examplev61wY7Pj1YnotrealUoY123456789` 
+  GitLab fichas de acceso personal — `glpat-12345example12345678` 

### Contenedores raíz
<a name="w2aac39c13b9c17"></a>

**nota**  
 El marcador de gravedad de esta comprobación es **Información**. 

 Recomendamos ejecutar contenedores de Docker sin privilegios raíz. Para las cargas de trabajo en contenedores que no pueden ejecutarse sin privilegios raíz, recomendamos crear las aplicaciones con un principio con la menor cantidad de privilegios. Para obtener más información, consulte [Usuario](https://docs.docker.com/build/building/best-practices/#user) en el sitio web de los documentos de Docker. 

### El tiempo de ejecución debilita las variables de entorno
<a name="w2aac39c13b9c19"></a>

**nota**  
 La clasificación de gravedad de esta comprobación es **Alta**. 

 Varias utilidades de línea de comandos o tiempos de ejecución de lenguajes de programación permiten eludir valores predeterminados seguros, lo que permite la ejecución mediante métodos inseguros. 

**NODE\$1TLS\$1REJECT\$1UNAUTHORIZED=0**  
 Cuando los procesos de Node.js se ejecutan con `NODE_TLS_REJECT_UNAUTHORIZED` establecido en `0`, se desactiva la validación del certificado TLS. Para obtener más información, consulte [NODE\$1TLS\$1REJECT\$1UNAUTHORIZED=0](https://nodejs.org/api/cli.html#node_tls_reject_unauthorizedvalue) en el sitio web de Node.js. 

**GIT\$1SSL\$1NO\$1VERIFY=\$1**  
 Cuando los procesos de línea de comandos de git se ejecutan con `GIT_SSL_NO_VERIFY` establecido, Git omite la verificación de los certificados TLS. Para obtener más información, consulte [Variables de entorno](https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables) en el sitio web de Git. 

**PIP\$1TRUSTED\$1HOST=\$1**  
 Cuando los procesos de línea de comandos de pip de Python se ejecutan con `PIP_TRUSTED_HOST` establecido, Git omite la verificación de los certificados TLS en el dominio especificado. Para obtener más información, consulte [--trusted-host](https://pip.pypa.io/en/stable/cli/pip/#cmdoption-trusted-host) en el sitio web de Pip. 

**NPM\$1CONFIG\$1STRICT\$1SSL=false**  
 Cuando los procesos de línea de comandos de npm de Node.js se ejecutan con `NPM_CONFIG_STRICT_SSL` establecido en falso, la utilidad del administrador de paquetes de nodos (npm) se conectará al registro de NPM sin validar los certificados TLS. Para obtener más información, consulte [strict-ssl](https://docs.npmjs.com/cli/v10/using-npm/config#strict-ssl) en el sitio web de npm Docs. 

### El tiempo de ejecución debilita los indicadores de comandos
<a name="w2aac39c13b9c21"></a>

**nota**  
 La clasificación de gravedad de esta comprobación es **Alta**. 

 Similar al tiempo de ejecución que debilita variables de entorno, varias utilidades de línea de comandos o tiempos de ejecución de lenguajes de programación permiten eludir valores predeterminados seguros, lo que permite la ejecución mediante métodos inseguros. 

**`npm ––strict-ssl=false`**  
 Cuando los procesos de línea de comandos de npm de Node.js se ejecutan con el indicador `--strict-ssl=false`, la utilidad del administrador de paquetes de nodos (npm) se conecta al registro de NPM sin validar los certificados TLS. Para obtener más información, consulte [strict-ssl](https://docs.npmjs.com/cli/v10/using-npm/config#strict-ssl) en el sitio web de npm Docs. 

**`apk ––allow-untrusted`**  
 Cuando la utilidad Alpine Package Keeper se ejecute con el indicador `--allow-untrusted`, `apk` instalará paquetes sin firmas o con firmas que no sean de confianza. Para obtener más información, consulte [el siguiente repositorio](https://gitlab.alpinelinux.org/alpine/apk-tools/-/blob/f9eaeb6429325eeb5a17ed771fd477be9227fe15/doc/apk.8.scd#L114-115) en el sitio web de Apline. 

**`apt-get ––allow-unauthenticated`**  
 Cuando la utilidad de paquetes `apt-get` de Debian se ejecuta con el indicador `--allow-unauthenticated`, `apt-get` no comprueba la validez del paquete. Para obtener más información, consulte [APT-Get(8)](https://manpages.debian.org/stretch/apt/apt-get.8.en.html) en el sitio web de Debian. 

**`pip ––trusted-host`**  
 Si la utilidad de pip de Python se ejecuta con el indicador `--trusted-host`, el nombre de host especificado omitirá la validación del certificado TLS. Para obtener más información, consulte [--trusted-host](https://pip.pypa.io/en/stable/cli/pip/#cmdoption-trusted-host) en el sitio web de Pip. 

**`rpm ––nodigest, ––nosignature, ––noverify, ––nofiledigest`**  
 Cuando el administrador de paquetes basado en RPM `rpm` se ejecuta con los indicadores `--nodigest`, `--nosignature`, `--noverify` y `--nofiledigest`, el administrador de paquetes de RPM no valida los encabezados, firmas o archivos de los paquetes al instalar un paquete. Para obtener más información, consulte la [página del manual de RPM](https://rpm-software-management.github.io/rpm/man/) en el sitio web de RPM. 

**`yum-config-manager ––setopt=sslverify false`**  
 Cuando el administrador de paquetes basado en RPM `yum-config-manager` se ejecuta con el indicador `--setopt=sslverify` establecido en falso, el administrador de paquetes YUM no valida los certificados TLS. Para obtener más información, consulte la siguiente [página del manual de YUM](https://man7.org/linux/man-pages/man5/yum.conf.5.html) en el sitio web de Man7. 

**`yum ––nogpgcheck`**  
 Cuando el administrador de paquetes basado en RPM `yum` se ejecuta con el indicador `--nogpgcheck`, el administrador de paquetes YUM omite la comprobación de las firmas GPG de los paquetes. Para obtener más información, consulte [yum(8)](https://man7.org/linux/man-pages/man8/yum.8.html) en el sitio web de Man7. 

**`curl ––insecure, curl –k`**  
 Cuando `curl` se ejecuta con el indicador `--insecure` o `-k`, la validación del certificado TLS está desactivada. De forma predeterminada, se verifica que todas las conexiones seguras realizadas por `curl` sean seguras antes de que se lleve a cabo la transferencia. Esta opción permite a `curl` omitir el paso de verificación y continuar sin comprobarlo. Para obtener más información, consulte la siguiente [página del manual de Curl](https://curl.se/docs/manpage.html#-k) en el sitio web de Curl. 

**`wget ––no-check-certificate`**  
 Cuando `wget` se ejecuta con el indicador `--no-check-certificate`, la validación del certificado TLS está desactivada. Para obtener más información, consulte la siguiente [página del manual de Wget](https://www.gnu.org/software/wget/manual/wget.html#index-SSL-certificate_002c-check) en el sitio web de GNU. 

### Comprobaciones de eliminación de bases de datos de paquetes de sistemas operativos dentro de contenedores
<a name="w2aac39c13b9c23"></a>

**nota**  
 La clasificación de gravedad de esta comprobación es **Información**. 

 La eliminación de una base de datos de paquetes del sistema operativo reduce la capacidad de analizar el inventario completo del software de la imagen de un contenedor. Estas bases de datos se deben dejar intactas durante las etapas de creación del contenedor. 

 Los siguientes administradores de paquetes admiten las comprobaciones de eliminación de una base de datos de paquetes del sistema operativo: 

**Alpine Package Keeper (APK)**  
 Las imágenes de contenedores que utilizan el administrador de paquetes APK para el software instalado deben garantizar que los archivos del sistema APK no se eliminen durante una compilación. Para obtener más información, consulte la documentación sobre los archivos del sistema de las [páginas del manual de APK](https://man.archlinux.org/man/apk.8.en#System_files) en el sitio web de Arch Linux. 

**Administrador de paquetes de Debian (DPKG)**  
 Los contenedores que utilizan el administrador de paquetes DPKG, como las imágenes basadas en Debian, Ubuntu o Distroless, deben asegurarse de que la base de datos de DPKG no se elimine durante la creación de un contenedor. Para obtener más información, consulte la documentación sobre los archivos del sistema de las [páginas del manual de DPKG](https://manpages.ubuntu.com/manpages/trusty/man1/dpkg.1.html#files) en el sitio web de Ubuntu. 

**Administrador de paquetes RPM (RPM)**  
 Los contenedores que utilizan el administrador de paquetes RPM (yum/dnf), como Amazon Linux o Red Hat Enterprise Linux, deben asegurarse de que la base de datos de RPM no se elimine durante la creación de un contenedor. Para obtener más información, consulte la documentación sobre los archivos del sistema de las [páginas del manual de RPM](https://rpm-software-management.github.io/rpm/man/rpm-common.8#FILES) en el sitio web de RPM. 