Scanning the Horizon: Shift-Left-Sicherheit in der Software-Lieferkette (3/12)

2024-12-14

Scanning the Horizon: Shift-Left-Sicherheit in der Software-Lieferkette (3/12)

Machine-translated — the English original is authoritative.

Cybersicherheit war lange Zeit reaktiv und befasste sich oft mit Schwachstellen erst nach der Bereitstellung. Doch im Zeitalter cloudnativer Anwendungen ist dieser Ansatz nicht mehr ausreichend. Durch das „Shifting Security Left“ – das Einbetten der Sicherheit in die frühesten Entwicklungsphasen – können Organisationen Risiken identifizieren und mindern, bevor sie die Produktion beeinträchtigen.

Die Software-Lieferkette, die Quellcode, Build-Systeme und Container-Images umfasst, ist ein primäres Ziel für Angreifer. Durch die Integration von Scanning-Tools direkt in die Entwicklungs-Workflows können Organisationen die Anforderungen der NIS 2 und DORA für proaktives Risikomanagement und sichere Software-Lieferketten erfüllen.

Warum Shift-Left wichtig ist

Je früher eine Schwachstelle erkannt wird, desto geringer sind die Kosten und der Zeitaufwand für die Behebung. Shift-Left-Sicherheit passt perfekt zu DORA, das Resilienz und proaktive Maßnahmen betont. Beispielsweise kann das Scannen von Quellcode während der Entwicklung Probleme aufspüren, bevor sie nach unten in der Lieferkette weitergegeben werden, wodurch Risiken reduziert und die operative Kontinuität gewahrt werden.

So implementieren Sie Shift-Left mit Aqua CNAPP

  1. Bulk-Scanning von Registries:
  2. Verbinden Sie Aqua mit allen Quellcode-Repositories und Container-Registries.
  3. Richten Sie geplante Scans ein, um sicherzustellen, dass jedes neue Artefakt auf Schwachstellen, Fehlkonfigurationen und Geheimnisse analysiert wird.

Image Registry Integration

Source Code Management Registry Integration

  1. Kontinuierliche Überwachung:

  2. Nutzen Sie die automatisierten Pull-Pläne von Aqua, um die Scans aktuell zu halten, wenn neuer Code committed oder Images in die Registry gepusht werden.

  3. Entwickler-Enablement:

  4. Integrieren Sie die Scanning-Ergebnisse direkt in die Workflows der Entwickler mithilfe von CI/CD-Tools. Die Feedback-Mechanismen von Aqua bieten umsetzbare Erkenntnisse, die es Entwicklern ermöglichen, Probleme schnell zu beheben, ohne ihre Umgebungen zu verlassen.

  5. Baselines etablieren:

  6. Verwenden Sie die initialen Scanning-Ergebnisse, um eine Baseline für Schwachstellen und Fehlkonfigurationen zu erstellen. Priorisieren Sie die Behebung kritischer Probleme und überwachen Sie den Fortschritt im Zeitverlauf.

Praktisches Beispiel: Automatisierung von Scans in CI/CD-Pipelines

Eine typische Aqua-Konfiguration in einer CI/CD-Pipeline, in diesem Fall unter Verwendung von Github Actions, könnte wie folgt aussehen:


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

Diese Automatisierung stellt sicher, dass jeder Build auf Hochrisiko-Schwachstellen gescannt wird und den Entwicklern sofortiges Feedback liefert.

Zusammenfassung

Shift-Left-Sicherheit verwandelt die Software-Lieferkette von einem Hotspot für Schwachstellen in eine Festung der Resilienz. Durch die Einbettung der Scanning-Tools von Aqua in Ihre Workflows verbessern Sie nicht nur die Sicherheit, sondern richten sich auch nach dem proaktiven Ansatz von DORA für operative Resilienz. Je früher Sie handeln, desto stärker sind Ihre Abwehrmaßnahmen.

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

← All posts