Scanning the Horizon: Spostare la Sicurezza a Sinistra nella Catena di Approvvigionamento del Software (3/12)

2024-12-14

Scanning the Horizon: Spostare la Sicurezza a Sinistra nella Catena di Approvvigionamento del Software (3/12)

Machine-translated — the English original is authoritative.

La cybersecurity è stata a lungo reattiva, intervenendo spesso sulle vulnerabilità dopo il deployment. Ma nell'era delle applicazioni cloud-native, questo approccio non è più sufficiente. Spostare la sicurezza a sinistra, integrandola nelle prime fasi dello sviluppo, consente alle organizzazioni di identificare e mitigare i rischi prima che impattino la produzione.

La catena di approvvigionamento del software, che include il codice sorgente, i sistemi di build e le immagini container, è un obiettivo primario per gli attaccanti. Integrando strumenti di scansione direttamente nei flussi di lavoro di sviluppo, le organizzazioni possono soddisfare i requisiti di NIS 2 e DORA per la gestione proattiva dei rischi e pipeline di consegna del software sicure.

Perché Spostare a Sinistra è Importante

Più presto viene rilevata una vulnerabilità, meno costoso e dispendioso in termini di tempo sarà risolverla. Spostare la sicurezza a sinistra si allinea perfettamente con DORA, che enfatizza la resilienza e le misure proattive. Ad esempio, la scansione del codice sorgente durante lo sviluppo può individuare problemi prima che si propaghino a valle, riducendo i rischi e mantenendo la continuità operativa.

Come Spostare a Sinistra con Aqua CNAPP

  1. Scansione in Batch dei Registry:
  2. Connettere Aqua a tutti i repository di codice sorgente e ai registry di container.
  3. Impostare scansioni pianificate per garantire che ogni nuovo artefatto venga analizzato per vulnerabilità, configurazioni errate e segreti.

Image Registry Integration

Source Code Management Registry Integration

  1. Monitoraggio Continuo:

  2. Sfruttare gli orari di pull automatizzati di Aqua per mantenere le scansioni aggiornate man mano che nuovo codice viene commitato o le immagini vengono pushate nel registry.

  3. Abilitazione degli Sviluppatori:

  4. Integrare i risultati della scansione direttamente nei flussi di lavoro degli sviluppatori utilizzando strumenti CI/CD. I meccanismi di feedback di Aqua forniscono informazioni attuabili, consentendo agli sviluppatori di risolvere i problemi rapidamente senza lasciare i propri ambienti.

  5. Stabilire delle Linee Base:

  6. Utilizzare i risultati iniziali della scansione per creare una linea base di vulnerabilità e configurazioni errate. Prioritizzare le correzioni per i problemi critici monitorando i progressi nel tempo.

Esempio Pratico: Automatizzare le Scansioni nelle Pipeline CI/CD

Una tipica configurazione di Aqua in una pipeline CI/CD, utilizzando Github Actions in questo caso, potrebbe essere la seguente:


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

Questa automazione garantisce che ogni build venga scansionata per vulnerabilità di alta gravità, fornendo feedback immediato agli sviluppatori.

Riepilogo

Spostare la sicurezza a sinistra trasforma la catena di approvvigionamento del software da un punto caldo di vulnerabilità a una fortezza di resilienza. Integrando gli strumenti di scansione di Aqua nei tuoi flussi di lavoro, non solo migliori la sicurezza ma ti allinei anche con l'approccio proattivo di DORA alla resilienza operativa. Più agisci presto, più forti saranno le tue difese.

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

← All posts