hacktricks/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.md

7.5 KiB
Raw Blame History

Ερευνητική Ανάλυση Docker

{% hint style="success" %} Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)

Υποστηρίξτε το HackTricks
{% endhint %}

Τροποποίηση Εμφυτεύματος

Υπάρχουν υποψίες ότι κάποιο docker container έχει υποστεί παραβίαση:

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cc03e43a052a        lamp-wordpress      "./run.sh"          2 minutes ago       Up 2 minutes        80/tcp              wordpress

Μπορείτε εύκολα να βρείτε τις τροποποιήσεις που έχουν γίνει σε αυτό το container όσον αφορά την εικόνα με:

docker diff wordpress
C /var
C /var/lib
C /var/lib/mysql
A /var/lib/mysql/ib_logfile0
A /var/lib/mysql/ib_logfile1
A /var/lib/mysql/ibdata1
A /var/lib/mysql/mysql
A /var/lib/mysql/mysql/time_zone_leap_second.MYI
A /var/lib/mysql/mysql/general_log.CSV
...

Στην προηγούμενη εντολή το C σημαίνει Αλλαγή και το A, Προστέθηκε.
Αν ανακαλύψετε ότι κάποιο ενδιαφέρον αρχείο όπως το /etc/shadow τροποποιήθηκε, μπορείτε να το κατεβάσετε από το container για να ελέγξετε για κακόβουλη δραστηριότητα με:

docker cp wordpress:/etc/shadow.

Μπορείτε επίσης να το συγκρίνετε με το αρχικό αρχείο εκτελώντας ένα νέο container και εξάγοντας το αρχείο από αυτό:

docker run -d lamp-wordpress
docker cp b5d53e8b468e:/etc/shadow original_shadow #Get the file from the newly created container
diff original_shadow shadow

Αν ανακαλύψετε ότι προστέθηκε ένα ύποπτο αρχείο, μπορείτε να έχετε πρόσβαση στο container και να το ελέγξετε:

docker exec -it wordpress bash

Τροποποιήσεις εικόνων

Όταν σας δίνεται μια εξαγόμενη εικόνα docker (πιθανότατα σε μορφή .tar), μπορείτε να χρησιμοποιήσετε το container-diff για εξαγωγή ενός περιλήψεως των τροποποιήσεων:

docker save <image> > image.tar #Export the image to a .tar file
container-diff analyze -t sizelayer image.tar
container-diff analyze -t history image.tar
container-diff analyze -t metadata image.tar

Στη συνέχεια, μπορείτε να αποσυμπιέσετε την εικόνα και να έχετε πρόσβαση στα blobs για να αναζητήσετε ύποπτα αρχεία που ενδέχεται να έχετε βρει στο ιστορικό αλλαγών:

tar -xf image.tar

Βασική Ανάλυση

Μπορείτε να λάβετε βασικές πληροφορίες από την εικόνα που τρέχει:

docker inspect <image>

Μπορείτε επίσης να λάβετε ένα σύνοψη ιστορικό αλλαγών με:

docker history --no-trunc <image>

Μπορείτε επίσης να δημιουργήσετε ένα dockerfile από ένα εικόνα με:

alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 madhuakula/k8s-goat-hidden-in-layers>

Διερεύνηση

Για να βρείτε προστεθειμένα/τροποποιημένα αρχεία σε εικόνες docker μπορείτε επίσης να χρησιμοποιήσετε το dive (κατεβάστε το από ανακοινώσεις) utility:

#First you need to load the image in your docker repo
sudo docker load < image.tar                                                                                                                                                                                                         1 
Loaded image: flask:latest

#And then open it with dive:
sudo dive flask:latest

Αυτό σας επιτρέπει να πλοηγηθείτε μέσα από τα διάφορα blobs των εικόνων του Docker και να ελέγξετε ποια αρχεία τροποποιήθηκαν/προστέθηκαν. Το Κόκκινο σημαίνει προσθήκη και το Κίτρινο σημαίνει τροποποίηση. Χρησιμοποιήστε το tab για να μετακινηθείτε στην άλλη προβολή και το space για να συμπτύξετε/ανοίξετε φακέλους.

Με το die δεν θα μπορείτε να έχετε πρόσβαση στο περιεχόμενο των διαφορετικών σταδίων της εικόνας. Για να το κάνετε αυτό, θα πρέπει να αποσυμπιέσετε κάθε στρώμα και να έχετε πρόσβαση σε αυτό.
Μπορείτε να αποσυμπιέσετε όλα τα στρώματα μιας εικόνας από τον κατάλογο όπου αποσυμπιέστηκε η εικόνα εκτελώντας:

tar -xf image.tar
for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; done

Διαπιστευτήρια από τη μνήμη

Σημειώστε ότι όταν εκτελείτε ένα container docker μέσα σε έναν host μπορείτε να δείτε τις διεργασίες που τρέχουν στο container από τον host απλά εκτελώντας την εντολή ps -ef

Επομένως (ως root) μπορείτε να αντλήσετε τη μνήμη των διεργασιών από τον host και να αναζητήσετε διαπιστευτήρια ακριβώς όπως στο ακόλουθο παράδειγμα.