Docker: Διορθώστε ευπάθειες εικόνων με τα Trivy και Copa


Οι εικόνες κοντέινερ Docker συχνά περιέχουν ευπάθειες ασφαλείας που κληρονομούνται από τα βασικά πακέτα του λειτουργικού τους συστήματος. Αντί να ξαναχτίζετε τις εικόνες από το μηδέν, μπορείτε να χρησιμοποιήσετε το Trivy για να σαρώσετε για ευπάθειες και το Copa για να τις επιδιορθώσετε απευθείας. Αυτό το σεμινάριο δείχνει πώς να εντοπίσετε και να διορθώσετε ευπάθειες κοντέινερ σε συστήματα Ubuntu, Debian, RHEL, CentOS και Fedora χρησιμοποιώντας αυτά τα δύο ισχυρά εργαλεία ανοιχτού κώδικα.

Σε αυτό το σεμινάριο θα μάθετε:

  • Πώς να εγκαταστήσετε το σαρωτή τρωτών σημείων Trivy σε Ubuntu/Debian
  • Πώς να εγκαταστήσετε το εργαλείο επιδιόρθωσης περιέκτη Copa
  • Πώς να σαρώσετε εικόνες Docker για ευπάθειες του λειτουργικού συστήματος
  • Πώς να επιδιορθώσετε αυτόματα ευπάθειες κοντέινερ
  • Πώς να επαληθεύσετε ότι οι εικόνες με διορθώσεις είναι χωρίς ευπάθειες

Περίληψη του άρθρου: Σάρωση των εικόνων Docker για ευπάθειες με το Trivy και αυτόματη διόρθωσή τους χρησιμοποιώντας το Copa.

ΒήμαΕντολή/Δράση
1. Σάρωση εικόνας
sudo trivy image --vuln-type os --ignore-unfixed IMAGE_NAME
2. Εξαγωγή αναφοράς JSON
trivy image --vuln-type os --ignore-unfixed -f json -o report.json IMAGE_NAME
3. Ξεκινήστε το BuildKit
sudo docker run --detach --rm --privileged -p 127.0.0.1:8888:8888/tcp --name buildkitd --entrypoint buildkitd moby/buildkit:v0.11.4 --addr tcp://0.0.0.0:8888
4. Εικόνα τμήματος
sudo copa patch -i IMAGE_NAME -r report.json -t patched -a tcp://0.0.0.0:8888

Βήμα 1: Εγκατάσταση του Trivy Vulnerability Scanner

Το Trivy είναι ένας ανοιχτού κώδικα σαρωτής ευπαθειών που αναπτύχθηκε από την Aqua Security. Εντοπίζει ευπάθειες σε πακέτα λειτουργικού συστήματος, εξαρτήσεις εφαρμογών και εικόνες κοντέινερ.

Ubuntu/Debian

  1. Εγκατάσταση εξαρτήσεων: Αρχικά εγκαταστήστε τα πακέτα wget και gnupg που απαιτούνται για την προσθήκη του αποθετηρίου:

    $ sudo apt-get install wget gnupg -y
  2. Προσθήκη κλειδιού GPG του Trivy: Κατεβάστε και προσθέστε το κλειδί υπογραφής του αποθετηρίου Trivy:

    $ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
  3. Προσθέστε το αποθετήριο Trivy: Προσθέστε το επίσημο αποθετήριο Trivy στη λίστα πηγών σας:

    $ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
  4. Εγκατάσταση Trivy: Ενημερώστε τη λίστα πακέτων και εγκαταστήστε το Trivy:

    $ sudo apt-get update
    $ sudo apt-get install trivy -y

RHEL/CentOS/Fedora

  1. Προσθήκη αποθετηρίου Trivy: Δημιουργήστε το αρχείο αποθετηρίου Trivy:

    # sudo tee /etc/yum.repos.d/trivy.repo << 'EOF'
    [trivy]
    name=Trivy repository
    baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key
    EOF
  2. Εγκατάσταση Trivy: Χρησιμοποιήστε dnf ή yum για να το εγκαταστήσετε:

    # sudo dnf install trivy -y

Επαληθεύστε την εγκατάσταση ελέγχοντας την έκδοση:

$ trivy --version

Βήμα 2: Εγκατάσταση του εργαλείου επικόλλησης Copa

Το Copa (Copacetic) είναι ένα έργο της CNCF sandbox που ενημερώνει απευθείας εικόνες κοντέινερ χωρίς να απαιτείται πλήρης επανακατασκευή. Χρησιμοποιεί αναφορές ευπάθειας από σαρωτές όπως το Trivy για να εφαρμόζει ενημερώσεις ασφαλείας. Το Copa διανέμεται ως ένα μοναδικό δυαδικό αρχείο που λειτουργεί σε όλες τις διανομές Linux.

  1. Κατεβάστε το δυαδικό αρχείο Copa: Αποκτήστε το προ-συγκροτημένο δυαδικό αρχείο από τη σελίδα επίσημων εκδόσεων του Copa στο GitHub:

    $ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gz
  2. Αποσυμπιέστε το αρχείο: Αποσυμπιέστε το κατεβασμένο tarball:

    $ tar -xzf copa_0.9.0_linux_amd64.tar.gz
  3. Εγκατάσταση Copa: Μετακινήστε το εκτελέσιμο αρχείο στη διαδρομή του συστήματός σας:

    $ sudo mv copa /usr/local/bin/
  4. Επιβεβαίωση εγκατάστασης: Βεβαιωθείτε ότι η Copa είναι εγκατεστημένη σωστά:

    $ copa --version

Βήμα 3: Σάρωση εικόνας κοντέινερ για ευπάθειες

Πριν από την εφαρμογή του patch, πρέπει να εντοπίσετε τις ευπάθειες στην εικόνα του container σας. Τα παρακάτω βήματα χρησιμοποιούν το linuxconfig/instantprivacy ως παράδειγμα – αντικαταστήστε το με το όνομα της δικής σας εικόνας.

  1. Κατεβάστε την εικόνα του κοντέινερ: Κατεβάστε την εικόνα που θέλετε να σαρώσετε:

    $ sudo docker pull linuxconfig/instantprivacy
  2. Σάρωση για ευπάθειες: Εκτελέστε το Trivy για να σαρώσετε για ευπάθειες σε επίπεδο λειτουργικού συστήματος. Η σημαία --ignore-unfixed εξαιρεί ευπάθειες για τις οποίες δεν υπάρχουν διαθέσιμα διορθωτικά:

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy
  3. Εξαγωγή αναφοράς JSON: Η Copa απαιτεί τα αποτελέσματα της σάρωσης σε μορφή JSON:

    $ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy

Βήμα 4: Ενημέρωση εικόνας κοντέινερ με το Copa

Το Copa χρησιμοποιεί το BuildKit για να εφαρμόζει ενημερώσεις σε εικόνες κοντέινερ.

  1. Έναρξη container BuildKit: Εκκινήστε το BuildKit ως container με προνόμια:

    $ sudo docker run --detach --rm --privileged \
      -p 127.0.0.1:8888:8888/tcp \
      --name buildkitd \
      --entrypoint buildkitd \
      moby/buildkit:v0.11.4 \
      --addr tcp://0.0.0.0:8888
  2. Επαληθεύστε ότι το BuildKit λειτουργεί: Επιβεβαιώστε ότι το κοντέινερ ξεκίνησε με επιτυχία:

    $ sudo docker ps

  3. Επιδιορθώστε την εικόνα του κοντέινερ: Χρησιμοποιήστε το Copa για να εφαρμόσετε ενημερώσεις ασφαλείας. Η σημαία -t καθορίζει την ετικέτα για την εικόνα με τις ενημερώσεις:

    $ sudo copa patch \
      -i docker.io/linuxconfig/instantprivacy \
      -r instantprivacy.json \
      -t patched \
      -a tcp://0.0.0.0:8888

    Το Copa κατεβάζει ενημερώσεις ασφαλείας και δημιουργεί ένα νέο επίπεδο εικόνας με τις εφαρμοσμένες ενημερώσεις. Η ενημερωμένη εικόνα θα ετικετιστεί ως linuxconfig/instantprivacy:patched.

Βήμα 5: Επαλήθευση εικόνας με ενημερώσεις

  1. Σαρώστε την ενημερωμένη εικόνα: Επιβεβαιώστε ότι όλες οι ευπάθειες έχουν επιλυθεί:

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patched
  2. Δοκιμάστε την τροποποιημένη εικόνα: Ελέγξτε ότι η τροποποιημένη εικόνα τρέχει σωστά:

    $ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched
    $ export http_proxy="http://localhost:8118"
    $ curl api.ipify.org
    45.84.107.174
  3. Καθαρισμός: Σταματήστε το container BuildKit όταν ολοκληρωθεί:

    $ sudo docker stop buildkitd

Συμπέρασμα

Έχετε σαρώσει με επιτυχία μια εικόνα κοντέινερ Docker για τρωτά σημεία ασφαλείας χρησιμοποιώντας το Trivy και τα έχετε διορθώσει αυτόματα με το Copa. Αυτή η προσέγγιση είναι ταχύτερη από την επαναδημιουργία εικόνων από την αρχή και προσθέτει μόνο ένα στρώμα επιδιόρθωσης, διατηρώντας τη δομή της αρχικής εικόνας. Για περιβάλλοντα παραγωγής, ενσωματώστε αυτά τα εργαλεία στον CI/CD αγωγό σας για να σαρώνονται και να επιδιορθώνονται αυτόματα οι εικόνες κοντέινερ πριν από την ανάπτυξη. Για περισσότερες πληροφορίες, ανατρέξτε στην επίσημη τεκμηρίωση του Trivy και στην ιστοσελίδα του έργου Copa.

Συχνές Ερωτήσεις

  1. Τι είδη ευπαθειών μπορεί να επιδιορθώσει το Copa; Το Copa επιδιορθώνει μόνο ευπάθειες σε πακέτα λειτουργικού συστήματος (όπως πακέτα Debian, Ubuntu, Alpine ή RHEL). Δεν μπορεί να επιδιορθώσει εξαρτήσεις επίπεδου εφαρμογής, όπως πακέτα npm, μονάδες Python pip ή μονάδες Go. Για αυτές, χρειάζεται να αναδημιουργήσετε την εφαρμογή με ενημερωμένες εξαρτήσεις.
  2. Γιατί χρειάζομαι το BuildKit για να τρέξω το Copa; Το Copa χρησιμοποιεί τις δυνατότητες διαφοράς και συγχώνευσης του BuildKit για να δημιουργήσει ένα νέο επίπεδο εικόνας που περιέχει μόνο τα αρχεία που έχουν ενημερωθεί. Το BuildKit τρέχει ως προνομιούχο container που χειρίζεται την χαμηλού επιπέδου διαχείριση των εικόνων. Χωρίς το BuildKit, το Copa δεν μπορεί να εφαρμόσει ενημερώσεις στο σύστημα αρχείων του container.
  3. Μπορώ να ενημερώσω εικόνες από ιδιωτικά μητρώα; Ναι, το Copa υποστηρίζει ιδιωτικά μητρώα. Πρέπει να κάνετε πιστοποίηση με docker login πριν εκτελέσετε την εντολή ενημέρωσης. Το Copa χρησιμοποιεί τα στοιχεία σύνδεσής σας στο Docker για να κατεβάσει την βασική εικόνα και να ανεβάσει το ενημερωμένο αποτέλεσμα εάν χρειάζεται.
  4. Τι συμβαίνει αν η Copa δεν μπορεί να επιδιορθώσει όλες τις ευπάθειες; Ορισμένες ευπάθειες ενδέχεται να μην έχουν ακόμη διαθέσιμες επιδιορθώσεις. Η σημαία --ignore-unfixed στο Trivy εξαιρεί αυτές από την αναφορά. Η Copa θα επιδιορθώσει ό,τι έχει διαθέσιμη επιδιόρθωση. Εκτελέστε ξανά το Trivy χωρίς το --ignore-unfixed για να δείτε όλες τις ευπάθειες, συμπεριλαμβανομένων αυτών που αναμένουν ενημερώσεις.
  5. Πώς ενημερώνω το Copa στην τελευταία έκδοση; Κατεβάστε την τελευταία έκδοση από τη σελίδα releases του Copa στο GitHub και αντικαταστήστε το εκτελέσιμο αρχείο στο /usr/local/bin/. Ελέγξτε την τρέχουσα έκδοση με copa --version.