Docker: Διορθώστε ευπάθειες εικόνων με τα Trivy και Copa
Οι εικόνες κοντέινερ Docker συχνά περιέχουν ευπάθειες ασφαλείας που κληρονομούνται από τα βασικά πακέτα του λειτουργικού τους συστήματος. Αντί να ξαναχτίζετε τις εικόνες από το μηδέν, μπορείτε να χρησιμοποιήσετε το Trivy για να σαρώσετε για ευπάθειες και το Copa για να τις επιδιορθώσετε απευθείας. Αυτό το σεμινάριο δείχνει πώς να εντοπίσετε και να διορθώσετε ευπάθειες κοντέινερ σε συστήματα Ubuntu, Debian, RHEL, CentOS και Fedora χρησιμοποιώντας αυτά τα δύο ισχυρά εργαλεία ανοιχτού κώδικα.
Σε αυτό το σεμινάριο θα μάθετε:
- Πώς να εγκαταστήσετε το σαρωτή τρωτών σημείων Trivy σε Ubuntu/Debian
- Πώς να εγκαταστήσετε το εργαλείο επιδιόρθωσης περιέκτη Copa
- Πώς να σαρώσετε εικόνες Docker για ευπάθειες του λειτουργικού συστήματος
- Πώς να επιδιορθώσετε αυτόματα ευπάθειες κοντέινερ
- Πώς να επαληθεύσετε ότι οι εικόνες με διορθώσεις είναι χωρίς ευπάθειες
Περίληψη του άρθρου: Σάρωση των εικόνων Docker για ευπάθειες με το Trivy και αυτόματη διόρθωσή τους χρησιμοποιώντας το Copa.
| Βήμα | Εντολή/Δράση |
|---|---|
| 1. Σάρωση εικόνας | |
| 2. Εξαγωγή αναφοράς JSON | |
| 3. Ξεκινήστε το BuildKit | |
| 4. Εικόνα τμήματος | |
Βήμα 1: Εγκατάσταση του Trivy Vulnerability Scanner
Το Trivy είναι ένας ανοιχτού κώδικα σαρωτής ευπαθειών που αναπτύχθηκε από την Aqua Security. Εντοπίζει ευπάθειες σε πακέτα λειτουργικού συστήματος, εξαρτήσεις εφαρμογών και εικόνες κοντέινερ.
Ubuntu/Debian
-
Εγκατάσταση εξαρτήσεων: Αρχικά εγκαταστήστε τα πακέτα wget και gnupg που απαιτούνται για την προσθήκη του αποθετηρίου:
$ sudo apt-get install wget gnupg -y Προσθήκη κλειδιού 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Προσθέστε το αποθετήριο 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Εγκατάσταση Trivy: Ενημερώστε τη λίστα πακέτων και εγκαταστήστε το Trivy:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
Προσθήκη αποθετηρίου 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Εγκατάσταση Trivy: Χρησιμοποιήστε dnf ή yum για να το εγκαταστήσετε:
# sudo dnf install trivy -y
Επαληθεύστε την εγκατάσταση ελέγχοντας την έκδοση:
$ trivy --versionΒήμα 2: Εγκατάσταση του εργαλείου επικόλλησης Copa
Το Copa (Copacetic) είναι ένα έργο της CNCF sandbox που ενημερώνει απευθείας εικόνες κοντέινερ χωρίς να απαιτείται πλήρης επανακατασκευή. Χρησιμοποιεί αναφορές ευπάθειας από σαρωτές όπως το Trivy για να εφαρμόζει ενημερώσεις ασφαλείας. Το Copa διανέμεται ως ένα μοναδικό δυαδικό αρχείο που λειτουργεί σε όλες τις διανομές Linux.
Κατεβάστε το δυαδικό αρχείο Copa: Αποκτήστε το προ-συγκροτημένο δυαδικό αρχείο από τη σελίδα επίσημων εκδόσεων του Copa στο GitHub:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gzΑποσυμπιέστε το αρχείο: Αποσυμπιέστε το κατεβασμένο tarball:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
Εγκατάσταση Copa: Μετακινήστε το εκτελέσιμο αρχείο στη διαδρομή του συστήματός σας:
$ sudo mv copa /usr/local/bin/ Επιβεβαίωση εγκατάστασης: Βεβαιωθείτε ότι η Copa είναι εγκατεστημένη σωστά:
$ copa --version
Βήμα 3: Σάρωση εικόνας κοντέινερ για ευπάθειες
Πριν από την εφαρμογή του patch, πρέπει να εντοπίσετε τις ευπάθειες στην εικόνα του container σας. Τα παρακάτω βήματα χρησιμοποιούν το linuxconfig/instantprivacy ως παράδειγμα – αντικαταστήστε το με το όνομα της δικής σας εικόνας.
Κατεβάστε την εικόνα του κοντέινερ: Κατεβάστε την εικόνα που θέλετε να σαρώσετε:
$ sudo docker pull linuxconfig/instantprivacyΣάρωση για ευπάθειες: Εκτελέστε το Trivy για να σαρώσετε για ευπάθειες σε επίπεδο λειτουργικού συστήματος. Η σημαία
--ignore-unfixedεξαιρεί ευπάθειες για τις οποίες δεν υπάρχουν διαθέσιμα διορθωτικά:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyΕξαγωγή αναφοράς JSON: Η Copa απαιτεί τα αποτελέσματα της σάρωσης σε μορφή JSON:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
Βήμα 4: Ενημέρωση εικόνας κοντέινερ με το Copa
Το Copa χρησιμοποιεί το BuildKit για να εφαρμόζει ενημερώσεις σε εικόνες κοντέινερ.
Έναρξη 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-
Επαληθεύστε ότι το BuildKit λειτουργεί: Επιβεβαιώστε ότι το κοντέινερ ξεκίνησε με επιτυχία:
$ sudo docker ps Επιδιορθώστε την εικόνα του κοντέινερ: Χρησιμοποιήστε το 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: Επαλήθευση εικόνας με ενημερώσεις
Σαρώστε την ενημερωμένη εικόνα: Επιβεβαιώστε ότι όλες οι ευπάθειες έχουν επιλυθεί:
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patchedΔοκιμάστε την τροποποιημένη εικόνα: Ελέγξτε ότι η τροποποιημένη εικόνα τρέχει σωστά:
$ 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Καθαρισμός: Σταματήστε το container BuildKit όταν ολοκληρωθεί:
$ sudo docker stop buildkitd
Συμπέρασμα
Έχετε σαρώσει με επιτυχία μια εικόνα κοντέινερ Docker για τρωτά σημεία ασφαλείας χρησιμοποιώντας το Trivy και τα έχετε διορθώσει αυτόματα με το Copa. Αυτή η προσέγγιση είναι ταχύτερη από την επαναδημιουργία εικόνων από την αρχή και προσθέτει μόνο ένα στρώμα επιδιόρθωσης, διατηρώντας τη δομή της αρχικής εικόνας. Για περιβάλλοντα παραγωγής, ενσωματώστε αυτά τα εργαλεία στον CI/CD αγωγό σας για να σαρώνονται και να επιδιορθώνονται αυτόματα οι εικόνες κοντέινερ πριν από την ανάπτυξη. Για περισσότερες πληροφορίες, ανατρέξτε στην επίσημη τεκμηρίωση του Trivy και στην ιστοσελίδα του έργου Copa.
Συχνές Ερωτήσεις
- Τι είδη ευπαθειών μπορεί να επιδιορθώσει το Copa; Το Copa επιδιορθώνει μόνο ευπάθειες σε πακέτα λειτουργικού συστήματος (όπως πακέτα Debian, Ubuntu, Alpine ή RHEL). Δεν μπορεί να επιδιορθώσει εξαρτήσεις επίπεδου εφαρμογής, όπως πακέτα npm, μονάδες Python pip ή μονάδες Go. Για αυτές, χρειάζεται να αναδημιουργήσετε την εφαρμογή με ενημερωμένες εξαρτήσεις.
- Γιατί χρειάζομαι το BuildKit για να τρέξω το Copa; Το Copa χρησιμοποιεί τις δυνατότητες διαφοράς και συγχώνευσης του BuildKit για να δημιουργήσει ένα νέο επίπεδο εικόνας που περιέχει μόνο τα αρχεία που έχουν ενημερωθεί. Το BuildKit τρέχει ως προνομιούχο container που χειρίζεται την χαμηλού επιπέδου διαχείριση των εικόνων. Χωρίς το BuildKit, το Copa δεν μπορεί να εφαρμόσει ενημερώσεις στο σύστημα αρχείων του container.
- Μπορώ να ενημερώσω εικόνες από ιδιωτικά μητρώα; Ναι, το Copa υποστηρίζει ιδιωτικά μητρώα. Πρέπει να κάνετε πιστοποίηση με
docker loginπριν εκτελέσετε την εντολή ενημέρωσης. Το Copa χρησιμοποιεί τα στοιχεία σύνδεσής σας στο Docker για να κατεβάσει την βασική εικόνα και να ανεβάσει το ενημερωμένο αποτέλεσμα εάν χρειάζεται. - Τι συμβαίνει αν η Copa δεν μπορεί να επιδιορθώσει όλες τις ευπάθειες; Ορισμένες ευπάθειες ενδέχεται να μην έχουν ακόμη διαθέσιμες επιδιορθώσεις. Η σημαία
--ignore-unfixedστο Trivy εξαιρεί αυτές από την αναφορά. Η Copa θα επιδιορθώσει ό,τι έχει διαθέσιμη επιδιόρθωση. Εκτελέστε ξανά το Trivy χωρίς το--ignore-unfixedγια να δείτε όλες τις ευπάθειες, συμπεριλαμβανομένων αυτών που αναμένουν ενημερώσεις. - Πώς ενημερώνω το Copa στην τελευταία έκδοση; Κατεβάστε την τελευταία έκδοση από τη σελίδα releases του Copa στο GitHub και αντικαταστήστε το εκτελέσιμο αρχείο στο
/usr/local/bin/. Ελέγξτε την τρέχουσα έκδοση μεcopa --version.





