Ασφάλεια για εμπορευματοκιβώτια Docker

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

Ασφάλεια για εμπορευματοκιβώτια Docker

Φέρνω στην προσοχή σας έναν οδηγό για τη διασφάλιση της ασφάλειας του Docker. Τα σχόλια είναι ευπρόσδεκτα, καθώς πρόκειται περισσότερο για μια συλλογή αποσπασμάτων από διάφορους πόρους, και δεν έχουν εξεταστεί όλα διεξοδικά. Οι συστάσεις χωρίζονται σε τρεις κατηγορίες:

  1. Απαραίτητα μέτρα εντός του λειτουργικού συστήματος υποδοχής κατά την εργασία με το Docker.
  2. Οδηγίες που σχετίζονται με το αρχείο διαμόρφωσης build και τη δημιουργία κοντέινερ.
  3. Εργαλεία ασφαλείας που μπορούν να ενσωματωθούν με συγκεκριμένες λειτουργίες του Docker Enterprise.


Ο οδηγός βασίζεται σε μια ποικιλία πόρων, πολλοί από τους οποίους παρατίθενται παρακάτω. Δεν είναι ολοκληρωμένο, αλλά καλύπτει όλες τις βάσεις. Πρόσθετες πληροφορίες μπορείτε να βρείτε στην περιγραφή των δοκιμών CIS (ο σύνδεσμος παρέχεται στο τέλος αυτού του οδηγού), καθώς και στην τεκμηρίωση του Docker.

Σημείο αναφοράς ασφαλείας Docker

Πάγκος Docker για Ασφάλεια ελέγχει αυτόματα το Docker σας σε σχέση με τις πιο κοινές βέλτιστες πρακτικές. Το σενάριο είναι μια καλή ευρετική δοκιμή ασφαλείας, αλλά δεν πρέπει να θεωρείται ως ένα ολοκληρωμένο εργαλείο ανάλυσης.

ΛΣ κεντρικού υπολογιστή

Προφανώς, ένα κοντέινερ Docker δεν μπορεί να είναι ασφαλές εκτός εάν το ίδιο το κεντρικό σύστημα είναι ασφαλές. Ως εκ τούτου, είναι απαραίτητο να ακολουθούνται οι βέλτιστες πρακτικές στην ασφάλεια του λειτουργικού συστήματος. Επιπλέον, θα ήταν συνετό να διεξαχθεί μια ανάλυση τρωτότητας εκτός από τις ακόλουθες συστάσεις.

Κανόνες Ελέγχου

Δημιουργήστε και χρησιμοποιήστε κανόνες ελέγχου για αρχεία που σχετίζονται με το Docker χρησιμοποιώντας auditctl. Για παράδειγμα, μπορείτε να προσθέσετε -w /usr/bin/dockerd -k docker к /etc/audit.rules και επανεκκινήστε την υπηρεσία ελέγχου.

Λειτουργία FIPS

Η ενεργοποίηση της λειτουργίας FIPS αναγκάζει τα κρυπτογραφικά εργαλεία να μεταβούν σε αλγόριθμους που αναφέρονται στη λίστα FIPS (Αμερικανός Ομοσπονδιακά πρότυπα επεξεργασίας πληροφοριών - περίπου μετάφρ.), συμμορφώνοντας έτσι με τους ομοσπονδιακούς και βιομηχανικούς κανονισμούς και απαιτήσεις. Εάν το λειτουργικό σύστημα υποδοχής υποστηρίζει τη λειτουργία FIPS, μπορείτε να την ενεργοποιήσετε εκτελώντας τις ακόλουθες εντολές:

sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && reboot

Πρέπει επίσης να ενεργοποιήσετε το FIPS στο Docker Engine:

mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart docker

Για περισσότερες πληροφορίες, ανατρέξτε στην τεκμηρίωση Λιμενεργάτης и Red Hat.

Docker Secrets

Τα εμπιστευτικά δεδομένα πρέπει να τηρούνται ως μυστικά. Μπορείτε να ξεκινήσετε την αντίστοιχη υπηρεσία χρησιμοποιώντας την εντολή δημιουργίας υπηρεσίας docker:

docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx

Για λεπτομέρειες, βλ τεκμηρίωση.

Αρχείο διαμόρφωσης Docker

Οι ακόλουθες ρυθμίσεις μπορούν να προστεθούν στο αρχείο διαμόρφωσης /etc/docker/daemon.json:

  • "icc":false — απενεργοποιεί την ανταλλαγή δεδομένων μεταξύ κοντέινερ για να αποφευχθεί η περιττή διαρροή πληροφοριών.
  • log-level: "info" — καταγράφει όλα τα αρχεία καταγραφής εκτός από αυτά για εντοπισμό σφαλμάτων.
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp://1.2.3.4:1111"
      }
    }

    — ενεργοποιεί την απομακρυσμένη καταγραφή και τις προωθεί στην καθορισμένη διεύθυνση. Λειτουργεί μόνο εάν εκτελείται ο δαίμονας του syslog. Το TCP και το UDP γίνονται δεκτά ως επιλογές. Είναι επίσης δυνατή η σύνδεση για κάθε συγκεκριμένο δοχείο. Για το σκοπό αυτό, ορίζεται μια ειδική σημαία κατά την εκκίνηση του Docker (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Your_User" — αποτρέπει την κλιμάκωση των προνομίων απομονώνοντας τον χώρο ονομάτων για έναν συγκεκριμένο χρήστη.

Ασφάλεια επιπέδου μεταφοράς

Μόνο οι χρήστες με πρόσβαση στα διαπιστευτήρια πελάτη TLS θα πρέπει να μπορούν να συνδεθούν με τον δαίμονα Docker (εάν απαιτείται απομακρυσμένη πρόσβαση).

Πρόσθετα εξουσιοδότησης

Αποφασίστε σε ποιους χρήστες επιτρέπεται να εκτελέσουν ποιες εντολές και δημιουργήστε μια κατάλληλη προσθήκη εξουσιοδότησης για το Docker. Στη συνέχεια, ξεκινήστε τον δαίμονα Docker και προσθέστε το πρόσθετο σε αυτό:

dockerd --authorization-plugin=PLUGIN_ID

Για να μάθετε περισσότερα σχετικά με τη δημιουργία προσθηκών εξουσιοδότησης, ανατρέξτε τεκμηρίωση.

Δαίμονες επιλογές

Ο δαίμονας Docker εκτελείται με ένα προεπιλεγμένο σύνολο παραμέτρων.

  • --live-restore — αυτή η παράμετρος βοηθά στη μείωση του χρόνου διακοπής λειτουργίας του κοντέινερ κατά τον τερματισμό λειτουργίας ή την επανεκκίνηση του συστήματος. Γίνεται πιο εύκολο να επιδιορθώσετε ή να ενημερώσετε με ελάχιστο χρόνο διακοπής λειτουργίας.
  • --userland-proxy=false — όταν τα NAT φουρκέτας είναι διαθέσιμα ή χρησιμοποιούνται, ο διακομιστής μεσολάβησης στον χώρο χρήστη γίνεται μια περιττή υπηρεσία, η οποία αυξάνει μόνο τον αριθμό των πιθανών διανυσμάτων επίθεσης.
  • --no-new-privileges — εμποδίζει τα κοντέινερ να αποκτήσουν πρόσθετα προνόμια χρησιμοποιώντας suid ή sguid.
  • --seccomp-profile /path/to/profile - εάν έχετε το δικό σας προφίλ seccomp, μπορείτε να το εφαρμόσετε χρησιμοποιώντας αυτήν τη σημαία. Μπορείτε να μάθετε περισσότερα για το Seccomp και το Docker εδώ.

Διαμόρφωση αρχείου κοντέινερ και build

Δημιουργία χρήστη

Βεβαιωθείτε ότι έχει δημιουργηθεί ένας χρήστης για το κοντέινερ και εκτελέστε τον κάτω από αυτόν τον χρήστη (ΜΗΝ εκτελέσετε το κοντέινερ ως root).

Απομακρυσμένη πρόσβαση

Απενεργοποιήστε την απομακρυσμένη πρόσβαση στον δαίμονα. Εάν εξακολουθείτε να το χρειάζεστε, προστατέψτε το με πιστοποιητικά.

Απομονώστε τον χώρο ονομάτων χρήστη

Είναι ιδιαίτερα σημαντικό να διασφαλίσετε ότι ο χώρος ονομάτων χρήστη στο Docker είναι απομονωμένος, καθώς από προεπιλογή είναι κοινόχρηστος με τον χώρο ονομάτων του κεντρικού υπολογιστή. Σε ορισμένες περιπτώσεις, αυτό μπορεί να χρησιμοποιηθεί για την κλιμάκωση των προνομίων ή ακόμα και για διαφυγή εκτός του κοντέινερ. Μπορείτε να απομονώσετε τον χώρο ονομάτων χρήστη επεξεργαζόμενοι το αρχείο διαμόρφωσης (όπως περιγράφεται παραπάνω στην ενότητα Αρχείο διαμόρφωσης Docker). Η επιπλέον αναφορά αυτού του ζητήματος εδώ οφείλεται στη σημασία του.

Ελεγχος υγείας

Το Healthcheck είναι ένα ισχυρό εργαλείο που σας επιτρέπει να ελέγχετε την ακεραιότητα ενός κοντέινερ. Ρυθμίζεται στο Dockerfile χρησιμοποιώντας τις οδηγίες HEALTHCHECK. Οι έλεγχοι υγείας σάς επιτρέπουν να βεβαιωθείτε ότι το δοχείο λειτουργεί σωστά. Στο παρακάτω παράδειγμα, ο έλεγχος υγείας επιστρέφει 0 εάν ο διακομιστής εκτελείται και 1 εάν είναι εκτός λειτουργίας:

HEALTHCHECK CMD curl --fail http://localhost || exit 1

SELinux

Εάν το SELinux υποστηρίζεται από το λειτουργικό σύστημα κεντρικού υπολογιστή, δημιουργήστε ή εισαγάγετε μια πολιτική SELinux και εκτελέστε το Docker σε λειτουργία daemon με ενεργοποιημένο το SELinux:

docker daemon --selinux-enable

Σε αυτήν την περίπτωση, τα κοντέινερ Docker μπορούν να εκκινηθούν με ρυθμίσεις ασφαλείας, για παράδειγμα:

docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash

Διεπαφές δικτύου

Από προεπιλογή, το Docker ακούει όλες τις διεπαφές δικτύου. Δεδομένου ότι στις περισσότερες περιπτώσεις αναμένεται κίνηση μόνο σε ένα από αυτά, αυτή η προσέγγιση αυξάνει άσκοπα τον κίνδυνο επίθεσης. Επομένως, κατά την εκκίνηση ενός κοντέινερ, μπορείτε να συνδέσετε τις θύρες του σε συγκεκριμένες διεπαφές στον κεντρικό υπολογιστή:

docker run --detach --publish 10.2.3.4:49153:80 nginx

Αποθηκευμένες εκδόσεις εικόνων

Κατά τη λήψη εικόνων, βεβαιωθείτε ότι η τοπική προσωρινή μνήμη ταιριάζει με τα περιεχόμενα του αποθετηρίου. Διαφορετικά, μπορεί να καταλήξετε με μια παλιά έκδοση της εικόνας ή μια εικόνα που περιέχει τρωτά σημεία.

Γέφυρα δικτύου

Προεπιλεγμένο μοντέλο δικτύου docker0, είναι ευάλωτο σε επιθέσεις όπως ARP-spoofing και MAC-flooding. Για να επιλύσετε αυτό το ζήτημα, δημιουργήστε μια γέφυρα δικτύου σύμφωνα με τις προδιαγραφές σας, όπως περιγράφεται εδώ.

Προειδοποίηση υποδοχής Docker

Μην προωθείτε ποτέ μια υποδοχή Docker μέσα σε ένα δοχείο. Διαφορετικά, το κοντέινερ θα μπορεί να εκτελεί εντολές Docker και επομένως να επικοινωνεί και να ελέγχει το λειτουργικό σύστημα του κεντρικού υπολογιστή. Μην το κάνεις αυτό.

Διαμόρφωση Docker Enterprise

Docker Trust

Το Docker Trust σάς επιτρέπει να δημιουργείτε κλειδιά που μπορούν να χρησιμοποιηθούν για την επαλήθευση της κρυπτογραφικής ακεραιότητας των εικόνων. Τα κλειδιά Docker Trust μπορούν να χρησιμοποιηθούν για την υπογραφή εικόνων Docker με ιδιωτικά κλειδιά, τα οποία επαληθεύονται με δημόσια κλειδιά στον διακομιστή συμβολαιογράφου. Επιπλέον πληροφορίες - εδώ. Η ενεργοποίηση του Docker Trust στο Enterprise Engine περιγράφεται λεπτομερώς στο αυτό το τμήμα της τεκμηρίωσης.

Σάρωση ευπάθειας

Το Docker Enterprise διαθέτει έναν ενσωματωμένο σαρωτή ευπάθειας που σας επιτρέπει να κάνετε λήψη μιας βάσης δεδομένων CVE για σάρωση εκτός σύνδεσης ευπαθειών σε εικόνες. Η τακτική σάρωση των εικόνων βοηθά να γίνουν πιο ασφαλείς: ο χρήστης λαμβάνει αμέσως προειδοποιήσεις σχετικά με ευπάθειες που εντοπίστηκαν. Για περισσότερες πληροφορίες σχετικά με το πώς μπορεί να γίνει αυτό, βλ εδώ.

Σημείωση. μετάφρ.: Υπάρχουν επίσης σαρωτές ανοιχτού κώδικα για τρωτά σημεία σε εικόνες Docker, παραδείγματα των οποίων μπορείτε να βρείτε στο τέλος του υλικού.

Ενσωμάτωση LDAP και UCP

Το Universal Control Plane μπορεί να ενσωματωθεί με το LDAP. Το αποτέλεσμα θα είναι ένα απλοποιημένο σύστημα ελέγχου ταυτότητας που αποφεύγει την περιττή αντιγραφή. Μπορείτε να διαβάσετε περισσότερα για αυτό στο άρθρο Ενσωμάτωση με έναν κατάλογο LDAP.

Άλλα υλικά

Περισσότερες πληροφορίες σχετικά με τις βέλτιστες πρακτικές ασφάλειας του Docker μπορείτε να βρείτε στη διεύθυνση docs.docker.com. Συνιστούμε επίσης τη λήψη Κέντρο για δοκιμές Ασφάλειας Διαδικτύου για Docker.

Μπόνους μεταφραστή

Ως λογική προσθήκη σε αυτό το άρθρο, δημοσιεύουμε μια λίστα με 10 δημοφιλή βοηθητικά προγράμματα ανοιχτού κώδικα για Docker Security. Δανείστηκε από ένα άλλο άρθρο (από τον Bill Doerrfeld του Doerrfeld.io).

NB: Διαβάστε περισσότερα για πολλά από τα έργα που αναφέρονται εδώ στο άρθρο "33+ εργαλεία ασφαλείας Kubernetes».

  1. Πάγκος Docker για Ασφάλεια είναι ένα σενάριο που αναφέρθηκε ήδη στην αρχή του άρθρου που ελέγχει τα κοντέινερ Docker για συμμόρφωση με κοινές πρακτικές ασφαλείας.

    Ασφάλεια για εμπορευματοκιβώτια Docker

  2. Clair είναι ίσως το πιο δημοφιλές βοηθητικό πρόγραμμα για στατική ανάλυση τρωτών σημείων σε ένα κοντέινερ. Για το σκοπό αυτό, χρησιμοποιεί πολυάριθμες βάσεις δεδομένων ευπάθειας CVE (συμπεριλαμβανομένων ανιχνευτών κορυφαίων διανομών Linux όπως Red Hat, Debian, Ubuntu). Προσφέρει ένα API για προγραμματιστές και έναν εύκολο τρόπο επέκτασης της λειτουργικότητας (με την προσθήκη «προγραμμάτων οδήγησης»). Χρησιμοποιείται στο δημοφιλές δημόσιο κοντέινερ μητρώου εικόνων (ανάλογο με το Docker Hub) - Quay.io.
  3. Τσίλιουμ είναι μια λύση για τη διασφάλιση της ασφάλειας του δικτύου σε επίπεδο πυρήνα, βασισμένη στην τεχνολογία φιλτραρίσματος πακέτων δικτύου BPF.
  4. Αγκυρα — ένα βοηθητικό πρόγραμμα για την ανάλυση του περιεχομένου των εικόνων για την παρουσία τρωτών σημείων ασφαλείας με βάση το CVE. Επιπλέον, σας επιτρέπει να εφαρμόζετε προσαρμοσμένες πολιτικές (με βάση διάφορα δεδομένα, συμπεριλαμβανομένων λευκών/μαύρων λιστών, περιεχομένων αρχείων κ.λπ.) για την αξιολόγηση της ασφάλειας των κοντέινερ.
  5. Πάγκος εργασίας OpenSCAP — ένα ολόκληρο οικοσύστημα για τη δημιουργία και τη διατήρηση πολιτικών ασφάλειας σε διαφορετικές πλατφόρμες. Προσφέρει ένα βοηθητικό πρόγραμμα για τον έλεγχο των δοχείων oscap-docker.
  6. Ντάγκντα — ένα βοηθητικό πρόγραμμα για τη σάρωση κοντέινερ Docker για τρωτά σημεία, Trojans, ιούς και κακόβουλο λογισμικό. Οι βάσεις δεδομένων CVE περιλαμβάνουν ελέγχους εξάρτησης από το OWASP, τη βάση δεδομένων Red Hat Oval και το αποθετήριο εκμετάλλευσης της βάσης δεδομένων Exploit.
  7. Συμβολαιογράφος είναι ένα πλαίσιο για την υπογραφή εικόνων Docker, που δημιουργήθηκε αρχικά στην Docker Inc (και στη συνέχεια μεταφέρθηκε για ανάπτυξη στο CNCF). Η χρήση του σάς επιτρέπει να εκχωρείτε ρόλους και να κατανέμετε τις ευθύνες μεταξύ των κοντέινερ, καθώς και να επαληθεύετε την κρυπτογραφική ακεραιότητα των εικόνων.
  8. Γραφές — API για μεταδεδομένα, σχεδιασμένο για τη διαχείριση πολιτικών εσωτερικής ασφάλειας. Για παράδειγμα, σας επιτρέπει να βελτιώσετε την απόδοση των σαρωτών ασφαλείας κοντέινερ. Το Shopify χρησιμοποιεί αυτό το API για τη διαχείριση μεταδεδομένων στις 500 εικόνες του.
  9. Σίσντιγκ Φάλκο — ένα βοηθητικό πρόγραμμα για το Kubernetes που παρακολουθεί τη συμπεριφορά του συστήματος: δραστηριότητα σε κοντέινερ, σε κεντρικούς υπολογιστές, στο δίκτυο. Σας επιτρέπει να διαμορφώνετε συνεχείς ελέγχους στην υποδομή, να εντοπίζετε ανωμαλίες και να στέλνετε ειδοποιήσεις για τυχόν κλήσεις συστήματος Linux.
  10. Συλλέκτης Banyanops - ένα άλλο εργαλείο για στατική ανάλυση εικόνων κοντέινερ Docker. Σας επιτρέπει να "ψάξετε" σε αρχεία εικόνων, να συλλέγετε τα απαραίτητα δεδομένα, να εφαρμόζετε τις απαραίτητες πολιτικές κ.λπ.

Μια άλλη καλή συλλογή από πρακτικές συστάσεις σχετικά με το πώς να κάνετε το Docker πιο ασφαλές μπορείτε να βρείτε στο Αυτό το άρθρο Εταιρεία Aqua Security. Πολλές από τις συμβουλές της επικαλύπτονται με αυτές που έχουν ήδη αναφερθεί παραπάνω, αλλά υπάρχουν και άλλες. Για παράδειγμα, οι συγγραφείς προτείνουν την οργάνωση παρακολούθησης της δραστηριότητας σε κοντέινερ και υποδεικνύουν τι πρέπει να προσέχετε όταν χρησιμοποιείτε το Docker Swarm.

Για όσους θέλουν να βουτήξουν σε αυτό το θέμα με περισσότερες λεπτομέρειες, δημοσιεύτηκε πέρυσι. Βιβλίο "Docker Security: Γρήγορη αναφορά», κομμάτια του οποίου διατίθενται ελεύθερα εδώ.

Τέλος, για πρακτική εξοικείωση με ορισμένες πτυχές της ασφάλειας Docker: προφίλ Seccomp και χρήση δυνατοτήτων πυρήνα Linux σε κοντέινερ, μπορείτε να περάσετε από τα αντίστοιχα εργαστηριακές εργασίες για πόρος Παίξτε με το Docker* - δείτε την ενότητα "Ασφάλεια".

Ασφάλεια για εμπορευματοκιβώτια Docker

* Σχετικά με αυτόν τον ίδιο τον πόρο εμείς είπα πριν από δύο χρόνια, και τον Νοέμβριο του 2018, του συνέβη μια πολύ ενδιαφέρουσα (από άποψη ασφαλείας) ιστορία. Με λίγα λόγια, οι ειδικοί της CyberArk Software Ltd. κατάφερε να το χακάρει: να επιτύχει τη δυνατότητα εκτέλεσης εντολών εκτός κοντέινερ, π.χ. στο σύστημα υποδοχής. Μια τέλεια απεικόνιση του προβλήματος ασφαλείας στο Docker, έτσι δεν είναι; Διαβάστε όλες τις λεπτομέρειες για το τι συνέβη εδώ.

ΥΓ από τον μεταφραστή

Διαβάστε επίσης στο blog μας:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο