Escaneando el horizonte: Desplazando la seguridad a la izquierda en la cadena de suministro de software (3/12)

2024-12-14

Escaneando el horizonte: Desplazando la seguridad a la izquierda en la cadena de suministro de software (3/12)

Machine-translated — the English original is authoritative.

La ciberseguridad ha sido durante mucho tiempo reactiva, abordando a menudo las vulnerabilidades después del despliegue. Pero en la era de las aplicaciones nativas de la nube, este enfoque ya no es suficiente. Desplazar la seguridad a la izquierda, integrándola en las etapas más tempranas del desarrollo, permite a las organizaciones identificar y mitigar los riesgos antes de que afecten a la producción.

La cadena de suministro de software, que incluye el código fuente, los sistemas de compilación y las imágenes de contenedor, es un objetivo principal para los atacantes. Al integrar herramientas de escaneo directamente en los flujos de trabajo de desarrollo, las organizaciones pueden cumplir con los requisitos de NIS 2 y DORA para la gestión proactiva de riesgos y los pipelines de entrega de software seguros.

Por qué es importante desplazar la seguridad a la izquierda

Cuanto antes se detecte una vulnerabilidad, menos costoso y laborioso será corregirla. Desplazar la seguridad a la izquierda se alinea perfectamente con DORA, que enfatiza la resiliencia y las medidas proactivas. Por ejemplo, el escaneo del código fuente durante el desarrollo puede detectar problemas antes de que se propaguen aguas abajo, reduciendo los riesgos y manteniendo la continuidad operativa.

Cómo desplazar la seguridad a la izquierda con Aqua CNAPP

  1. Escaneo masivo de registros (registries):
  2. Conecte Aqua a todos los repositorios de código fuente y registros de contenedores.
  3. Configure escaneos programados para garantizar que cada nuevo artefacto sea analizado en busca de vulnerabilidades, configuraciones incorrectas y secretos.

Integración del Registro de Imágenes

Integración del Registro de Gestión de Código Fuente

  1. Monitoreo continuo:

  2. Aproveche los programas de extracción (pull) automatizados de Aqua para mantener los escaneos actualizados a medida que se confirten nuevos códigos o se empujan imágenes al registro.

  3. Habilitación de los desarrolladores:

  4. Integre los resultados del escaneo directamente en los flujos de trabajo de los desarrolladores utilizando herramientas CI/CD. Los mecanismos de retroalimentación de Aqua proporcionan información procesable, lo que permite a los desarrolladores corregir los problemas rápidamente sin salir de sus entornos.

  5. Establecer líneas base:

  6. Utilice los resultados iniciales del escaneo para crear una línea base de vulnerabilidades y configuraciones incorrectas. Priorice las correcciones para los problemas críticos mientras monitorea el progreso a lo largo del tiempo.

Ejemplo práctico: Automatización de escaneos en pipelines CI/CD

Una configuración típica de Aqua en un pipeline CI/CD, utilizando Github Actions en este caso, podría verse así:


name: allthingsclowd APP 
on:
  push:
    branches:
      - main
  pull_request:
    branches: 
      - main

  workflow_dispatch:

env:
   DOCKER_REPOSITORY: allthingscloud # name of Docker Hub ID
   IMAGE_NAME: allthingsclowd-app
   IMAGE_TAG: ${{ github.run_number }} # $GITHUB_RUN_NUMBER

jobs:
  CI-Code:
    runs-on: ubuntu-22.04
    steps:

      - name: Checkout code
        uses: actions/checkout@v2

      - name: Integrity pipeline
        uses: aquasecurity/pipeline-enforcer-action@main
        with:
          aqua-key: ${{ secrets.AQUA_KEY }}
          aqua-secret: ${{ secrets.AQUA_SECRET }}
          verbose: true

      - name: Aqua code scanning(SCA,IaC, Secrets/Sensitive Data, Pipeline file and SAST)
        uses: docker://aquasec/aqua-scanner
        with:
          args: trivy fs --scanners config,vuln,secret --sast --reachability --package-json . 
          # To customize which severities to scan for, add the following flag: --severity UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
          # To enable SAST scanning, add: --sast
          # To enable npm/dotnet non-lock file scanning, add: --package-json / --dotnet-proj
        env:
          AQUA_KEY: ${{ secrets.AQUA_KEY }}
          AQUA_SECRET: ${{ secrets.AQUA_SECRET }}
          GITHUB_TOKEN: ${{ github.token }}
          TRIVY_RUN_AS_PLUGIN: 'aqua'

  CI-Build:
    needs: CI-Code
    runs-on: ubuntu-22.04

    steps:   

      - name: Checkout code
        uses: actions/checkout@v2

      - name: Integrity pipeline
        uses: aquasecurity/pipeline-enforcer-action@main
        with:
          aqua-key: ${{ secrets.AQUA_KEY }}
          aqua-secret: ${{ secrets.AQUA_SECRET }}
          verbose: true

      - name: Build application
        run: echo Application has been succesfully built   

      - name: Build image container
        run: |
          sudo docker build -t $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG .

      - name: Login to Aqua Registry
        uses: docker/login-action@v1
        with:
          registry: registry.aquasec.com
          username: ${{ secrets.AQUA_REGISTRY_USERNAME }}
          password: ${{ secrets.AQUA_REGISTRY_PASS }}

      - name: Scanning container image
        run: |
          docker run --rm -v /var/run/docker.sock:/var/run/docker.sock registry.aquasec.com/scanner:2022.4 scan --register --registry "CI/CD_graham_images" --host ${{ secrets.AQUA_HOST }} --local $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG --token ${{ secrets.AQUA_TOKEN }} --layer-vulnerabilities --no-verify --html > .github/workflows/scan-output.html

      - name: Docker Login & Push
        run: |
          echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
          docker push $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG 
          docker tag $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG $DOCKER_REPOSITORY/$IMAGE_NAME:latest
          docker push $DOCKER_REPOSITORY/$IMAGE_NAME:latest 

      - name: SBOM Generation
        run: |
          export BILLY_SERVER=https://billy.codesec.aquasec.com
          curl -sLo install.sh download.codesec.aquasec.com/billy/install.sh
          curl -sLo install.sh.checksum https://github.com/argonsecurity/releases/releases/latest/download/install.sh.checksum
          if ! cat install.sh.checksum | sha256sum ; then
          echo "install.sh checksum failed"
          exit 1
          fi
          BINDIR="." sh install.sh
          rm install.sh install.sh.checksum
          ./billy generate \
            --access-token "${{ github.token }}" \
            --aqua-key "${{ secrets.AQUA_KEY }}" \
            --aqua-secret "${{ secrets.AQUA_SECRET }}" \
            --artifact-path "$DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG"

  CD-Deploy_to_dev:

    needs: CI-Build
    runs-on: ubuntu-22.04

    steps: 

      - name: Checkout code
        uses: actions/checkout@v2

      - name: interity Pipeline
        uses: aquasecurity/pipeline-enforcer-action@main
        with:
          aqua-key: ${{ secrets.AQUA_KEY }}
          aqua-secret: ${{ secrets.AQUA_SECRET }}
          verbose: true

      - name: Setting K8s context
        uses: azure/k8s-set-context@v3
        with:
           method: kubeconfig
           kubeconfig: ${{ secrets.KUBE_CONFIG_GRAZ }}
           context: graz-dev-context


      - name: Deploying to Dev
        run: |
          export IMAGE_CONTAINER="docker.io/$DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG"
          sed -e "s#{{ IMAGE_CONTAINER }}#$IMAGE_CONTAINER#g" "./manifests/dev/deployment.yaml" |
          kubectl apply -f -
          kubectl apply -f ./manifests/dev/service.yaml

Esta automatización asegura que cada compilación sea escaneada en busca de vulnerabilidades de alta gravedad, proporcionando una retroalimentación inmediata a los desarrolladores.

Resumen

Desplazar la seguridad a la izquierda transforma la cadena de suministro de software de un punto caliente de vulnerabilidades en una fortaleza de resiliencia. Al integrar las herramientas de escaneo de Aqua en sus flujos de trabajo, no solo mejora la seguridad, sino que también se alinea con el enfoque proactivo de DORA hacia la resiliencia operativa. Cuanto antes actúe, más fuertes serán sus defensas.

Originally published on allthingscloud.eu (2024-12-14).

← All posts