You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cse47126 9cfcc2f9ce Update 'README.md' 3 years ago
1manager.sh Upload files to '' 3 years ago
1worker.sh Upload files to '' 3 years ago
2master.sh Upload files to '' 3 years ago
2masterkeyenable.sh Upload files to '' 3 years ago
2worker.sh Upload files to '' 3 years ago
3masterLocal.sh Upload files to '' 3 years ago
3worker.sh Upload files to '' 3 years ago
3workerRemote.sh Upload files to '' 3 years ago
README.md Update 'README.md' 3 years ago
connect.sh Upload files to '' 3 years ago
create-user.sh Upload files to '' 3 years ago
create-vpn.sh Upload files to '' 3 years ago
fail2bansshconf Upload files to '' 3 years ago
lexikoright Upload files to '' 3 years ago
lexikowrong Upload files to '' 3 years ago
sshconfrsa Upload files to '' 3 years ago
sshdconf Upload files to '' 3 years ago

README.md

sec

ΕΡΓΑΣΤΗΡΙΟ ΜΑΘΗΜΑΤΟΣ «ΑΣΦΑΛΕΙΑ ΔΙΚΤΥΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ»

ΑΣΚΗΣΗ 2020-2021

Swarmlab** Project**

Αθηνά Κουτσοπούλου

ΑΜ 71347126

Γενικά

Τί είναι το docker** ;**

Το DOCKER είναι μια πλατφόρμα ανοιχτού κώδικα _(open source)_ και λειτουργεί σαν εικονική μηχανή. Το λογισμικό αυτό επιτρέπει σε ανεξάρτητες εφαρμογές να χρησιμοποιούν τον ίδιο πυρήνα Linux. Με αυτόν τον τρόπο αποφεύγεται η επιπλέον χρήση υπολογιστικών πόρων που θα απαιτούσε μια εικονική μηχανή.

Το Project

Το project βασίζεται στο swarmlab το οποίο λειτουργεί με το docker. Πρώτα πρέπει να γίνει εγκατάσταση του docker και να γίνει clone το swarmlab project από το https://git.swarmlab.io:3000/swarmlab/swarmlab-sec. Με αυτό έχουμε στην διάθεσή μας ένα μεταβλητού μεγέθους σμήνος (swarm) το οποίο μπορούμε να χρησιμοποιήσουμε για να προσομοιώσουμε κάποια περιστατικά. Συγκεκριμένα , στο project αυτό προσομοιώνονται κάποιες επιθέσεις (Ddos, SSH Brute Force), τα αντίστοιχα αντίμετρα τους και κάποιες υπηρεσίες (Ssh Forwarding και VPN).

Για να "ξεκινήσει" οποιαδήποτε από τις παραπάνω προσομοιώσεις πρέπει να δημιουργηθεί το σμήνος (εντολή create), έπειτα να ορίσουμε το μέγεθος του και να το "σηκωσουμε" (πχ. up size=5) και στην συνέχεια να συνδεθούμε (login) στον κύριο κόμβο (master) του σμήνους απ' όπου μπορούμε να έχουμε πρόσβαση και στα υπόλοιπα μέλη του σμήνους (workers).

Ο κατάλογος του project είναι ο swarmlab-sec/ (δημιουργείται μετά το cloning του project), δημιουργούμε μέσα εκεί ένα δικό μας φάκελο - συγκεκριμένα εδώ LabProject - από τον οποίο θα κάνουμε create, up size=? και login στο σμήνος.

Άρα για να ξεκινήσει οποιαδήποτε προσομοίωση πρέπει να γίνουν τα 3 παρακάτω βήματα μέσα στον κατάλογο swarmlab-sec/LabProject.

  • Create :

../install/usr/share/swarmlab.io/sec/swarmlab-sec create

  • Upsize=5 (για ένα σμήνος με 5 κόμβους συμπεριλαμβανομένου του master) :

../install/usr/share/swarmlab.io/sec/swarmlab-sec up size=5

  • Login στον master

../install/usr/share/swarmlab.io/sec/swarmlab-sec login

  • Login σε worker κόμβο

Κάνουμε Login στον master κόμβο

Ανοίγουμε άλλη σελίδα στο terminal και εκτελούμε τις παρακάτω εντολές :

ssh** docker ****@**** IPworker** (όπου στο IPworker βάζουμε την IP του worker που επιθυμούμε)

cd ../.../** project** (για να μπούμε στον κατάλογο του project)

Τα credentials όλωντωνκόμβωνείναι username: docker , password: docker.

1. Υλοποίηση συστήματος για την προσομοίωση DDos Attack

Στον Master :

Αφού κάνουμε login ο master (1manager.sh) θα κάνει Ddosattack στον worker1. Για την επίθεση αυτή χρησιμοποιούμε το εργαλείο hping3. Στο αρχείο 1manager.sh εκτελούνται οι παρακάτω εντολές : 1 )Εγκατάσταση του hping3

  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt install hping3 -y
  1. omaster αναγνωρίζει την διεύθυνση IP του worker
  • network=$(ifconfig | grep inet | sed -n 1p | awk "{print $2}" | cut -f 1-3 -d "." | sed 's/$/.*/')
  • worker1IP=$(nmap -sP $network | grep worker_1 | awk '{print $NF}' | tr -d '()')

3)Η επίθεση αρχίζει μέχρι να την σταματήσουμε

  • sudo hping3 -p 80 --flood --icmp $worker1IP

Παρατηρούμε ότι στον master έχει ξεκινήσει η επίθεση.

Στον Worker : Ο worker θα αμυνθεί στην επίθεση του master μέσω των εργαλείων iptables και tcpdump (για monitoring).(αρχείο 1worker.sh)

Αρχικά κάνουμε εγκατάσταση του εργαλείου στον worker (το iptables είναι ήδη εγκατεστημένο) :

  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt install tcpdump -y

Αποθηκεύουμε την IP του worker σε μία μεταβλητή :

  • worker1IP=$(ifconfig|grep inet|sed -n 1p|awk "{print $2}")

Στη συνέχεια, γίνεται reset του configuration του iptables ώστε να δούμε ξεκάθαρα το αποτέλεσμα της επίθεσης που δέχεται ο worker.

  • sudo iptables -F

Κάνουμε monitor τις απαντήσεις που στέλνονται από τον worker1 στον master (Icmp replies) για 2 δευτερόλεπτα. Κάνουμε monitor στις απαντήσεις και όχι στα εισερχόμενα ICMP πακέτα διότι ανάμεσα στον worker και στον master παρεμβάλλεται το firewall. Έτσι παρατηρώντας τις απαντήσεις που είναι ισάριθμες των εισερχόμενων πακέτων, έχουμε ξεκάθαρη εικόνα του πλήθους των πακέτων καθώς το firewall βρίσκεται τοπολογικά μετά τον worker και άρα δεν εμπλέκεται στο monitoring των απαντήσεων.

  • sudo timeout 2s tcpdump -i eth0 icmp and src $worker1IP

Μετά εφαρμόζουμε κανόνες μέσω του iptables επιτρέποντας μόνο ένα εισερχόμενο ICMP πακέτο ανά ένα δευτερόλεπτο.

  • sudo iptables -N icmp_flood
  • sudo iptables -A INPUT -p icmp -j icmp_flood
  • sudo iptables -A icmp_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
  • sudo iptables -A icmp_flood -j DROP

Τέλος, κάνουμε monitor τις απαντήσεις που στέλνονται από τον worker1 στον master (Icmp replies) για 5 δευτερόλεπτα και η διαφορά στο πλήθος που θα παρατηρηθεί είναι εμφανώς μεγάλη.

  • sudo timeout 5s tcpdump -i eth0 icmp and src $worker1IP

Παρατηρούμε ότι oworker λαμβάνει πάρα πολλά πακέτα ενώ μετά τους κανόνες iptables και tcpdump τα πακέτα περιορίζονται σε 5.

2. Υλοποίηση συστήματος για την προσομοίωση "SSH Brute Force Attacks" (THC Hydra)

Στον Master :

Αφού κάνουμε login ο master θα κάνει SSHBruteForce επίθεση στον worker 1(αρχείο 2master.sh). Για την επίθεση το εργαλείο που χρησιμοποιείται είναι το hydra. Το hydra είναι ένα εργαλείο στο οποίο αφιερώνοντας κάποια threads (υπολογιστικούς πόρους -εδώ αφιερώνουμε 4 threads-) μπορεί να δοκιμάσει να αποκτήσει πρόσβαση σε κάποια υπηρεσία (συγκεκριμένα εδώ ssh) χρησιμοποιώντας credentials τα οποία είτε δίνονται manually είτε ως λεξικό. Συγκεκριμένα εδώ δίνουμε το σωστό username manually και τον σωστό κωδικό μέσα από ένα λεξικό που τον περιέχει.

Αφού γίνει εγκατάσταση του εργαλείου στον master :

  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt install hydra -y

Αναγνωρίζεται η IP του worker από τον master :

  • network=$(ifconfig | grep inet | sed -n 1p | awk "{print $2}" | cut -f 1-3 -d "." | sed 's/$/.*/')
  • worker1IP=$(nmap -sP $network | grep worker_1 | awk '{print $NF}' | tr -d '()')

Ξεκινάει η επίθεση με το Hydra :

  • hydra -l docker -P lexikoright $worker1IP -t 4 ssh

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

  • hydra -l docker -P lexikoright $worker1IP -t 4 ssh

Είναι σημαντικό η παραπάνω επίθεση να τρέξει ξανά μετά την εφαρμογή των αντιμέτρων ώστε να φανεί ότι απέτυχε.

Στον Worker :

Εδώ ο worker εφαρμόζει αντίμετρα στην SSH Brute Force επίθεση που δέχεται από τον master μέσω του εργαλείου fail2ban(αρχείο 2worker.sh). Το fail2ban είναι ένα εργαλείο το οποίο κάνοντας monitor log files κάποιων υπηρεσιών εφαρμόζει τα αντίμετρα που επιλέγουμε αν ισχύει κάποια συνθήκη. Εδώ επειδή η εικόνα που χρησιμοποιούν τα docker nodes είναι η alpine από την οποία λείπουν βασικές λειτουργίες ενός λειτουργικού συστήματος πρέπει να εγκατασταθεί και η υπηρεσία που δημιουργεί τα log files συστήματος (rsyslog).

Αφού γίνει εγκατάσταση του εργαλείου και του rsyslog στον worker :

  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt-get install fail2ban -y
  • sudo apt install rsyslog -y

Το εργοστασιακό configuration file του fail2ban είναι το jail.conf αλλά για λόγους ασφαλείας αυτό πρέπει να μείνει άθικτο. Το fail2ban "διαβάζει" τις ρυθμίσεις του από το jail.local αρχείο το οποίο κάνουμε copy από το εργοστασιακό

  • sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Εδώ κάνουμε copy ένα προετοιμασμένο αρχείο στο αρχείο ρυθμίσεων του fail2ban ώστε να κάνει monitor την υπηρεσία ssh και να κάνει τις απαραίτητες ενέργειες σε μία επίθεση brute force. Αναλυτικά ορίσαμε το bantime=1m (γραμμή 63) δηλαδή η IP του χρήστη που θα κάνει brute force να αποκλείεται για ένα λεπτό από την στιγμή της τελευταίας επίθεσης. Επίσης στις γραμμές 238 έως 249 βρίσκεται όλο το configuration που ορίσαμε για την υπηρεσία ssh.

  • sudo cp "/project/ssh brute force attack/fail2bansshconf" /etc/fail2ban/jail.loca ** l**

Εδώ κάνουμε copy ένα προετοιμασμένο αρχείο στο αρχείο ρυθμίσεων του ssh ούτως ώστε να κρατάει η υπηρεσία ssh log files στο σύστημα ( SyslogFacility AUTH, LogLevel INFO γραμμές 26-27) .

  • sudo cp "/project/ssh brute force attack/sshdconf" /etc/ssh/sshd_config

Στην συνέχεια κάνουμε restart τα παραπάνω services ώστε να ισχύσουν οι νέες ρυθμίσεις .

  • sudo service ssh restart
  • sudo service rsyslog restart
  • sudo service fail2ban restart

Με την παρακάτω εντολή έχουμε μία εικόνα ως προς το τι απέτρεψε το εργαλείο fail2ban στην υπηρεσία ssh.

  • sudo fail2ban-client status sshd

Τροποποίηση του ssh-server έτσι ώστε να επιτρέπει μόνο συνδέσεις μέσω key

masterkeyenable.sh

Εδώ ο master κάνει τις απαραίτητες ενέργειες ώστε να μπορεί να συνδέεται στον worker χωρίς την απαίτηση κωδικού αλλά χρησιμοποιώντας κλειδιά.

Αφού γίνει αναγνώριση της IP του worker από τον master

  • network=$(ifconfig | grep inet | sed -n 1p | awk "{print $2}" | cut -f 1-3 -d "." | sed 's/$/.*/')
  • worker1IP=$(nmap -sP $network | grep worker_1 | awk '{print $NF}' | tr -d '()')

Ο master παράγει ένα ζεύγος κλειδιών (δημόσιο, ιδιωτικό) για να χρησιμοποιηθούν στην σύνδεση με τον worker

  • ssh-keygen -t rsa

Εγκαθίσταται ένα κλειδί SSH στον SSH server (worker1) ως εξουσιοδοτημένο κλειδί. Σκοπός του είναι να παρέχει πρόσβαση χωρίς να απαιτείται κωδικός πρόσβασης για κάθε σύνδεση.

  • ssh-copy-id docker@$worker1IP

Εδώ παίρνουμε ένα bash στον worker1 και κάνουμε copy ένα προετοιμασμένο αρχείο στο configuration ssh file του worker1 ώστε να επιτρέπει συνδέσεις με κλειδιά (γραμμή 56 PasswordAuthentication no, γραμμή 61 ChallengeResponseAuthentication no , γραμμή 84 UsePAM yes ).

  • ssh docker@$worker1IP
  • bash
  • sudo cp /project/sshdconfrsa /etc/ssh/sshd_config

Στην συνέχεια κάνουμε restart το ssh service ώστε να ισχύσουν οι ρυθμίσεις και πλέον μπορούμε να κάνουμε συνδέσεις ssh από τον master στον worker χωρίς κωδικό.

  • sudo service ssh restart

3. Δημιουργία Local/Remote SSH Forwarding για την παροχή υπηρεσιών στο σμήνος.

Στον Worker :

3worker.sh

Ο worker εγκαθιστά έναν apache server σαν μια υπηρεσία αναφοράς για να δειχθεί το ssh forwarding. Επίσης εγκαθίσταται το lynx που είναι ένας web browser για τερματικά.

  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt-get install apache2 -y
  • sudo apt-get install lynx -y
  • sudo service apache2 start

Στον Master :

3masterLocal.sh

Εδώ ο master κάνει local ssh forwarding μία υπηρεσίας που "τρέχει" στον worker στην πόρτα 80 στην δική του πόρτα 5000.

Αφού εγκατασταθεί το lynx και γίνει γνωστή στον master η IP του worker

  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt-get install lynx -y
  • network=$(ifconfig | grep inet | sed -n 1p | awk "{print $2}" | cut -f 1-3 -d "." | sed 's/$/.*/')
  • worker1IP=$(nmap -sP $network | grep worker_1 | awk '{print $NF}' | tr -d '()')

Δημιουργείται μια ssh σύνδεση μέσω της οποίας γίνεται forward η υπηρεσία του worker στην πόρτα 80 στον master στην πόρτα 5000.

  • ssh docker@$worker1IP -L 5000:$worker1IP:80

Αν σε ένα καινούριο τερματικό συνδεθούμε εκ νέου στον master node και τρέξουμε την εντολή lynx localhost:5000 παρατηρούμε ότι η default σελίδα του apache server που τρέχει στον worker1 είναι διαθέσιμη στον master στην πόρτα 5000.

Στον Worker :

3** workerRemote ****.**** sh**

Εδώ ο worker κάνει remote ssh forwarding μία υπηρεσίας που "τρέχει" στην πόρτα 80 στην πόρτα 5002 του master node.

Αφού εγκατασταθεί το lynx και γίνει γνωστή στον worker η IP του master

  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt-get install lynx -y
  • network=$(ifconfig | grep inet | sed -n 1p | awk "{print $2}" | cut -f 1-3 -d "." | sed 's/$/.*/')
  • masterIP=$(nmap -sP $network | grep master | awk '{print $NF}' | tr -d '()')

Δημιουργείται μια ssh σύνδεση μέσω της οποίας γίνεται forward η υπηρεσία του worker στην πόρτα 80 στον master στην πόρτα 5002.

  • ssh -R 5002:localhost:80 docker@$masterIP

Αν σε ένα καινούριο τερματικό συνδεθούμε εκ νέου στον master node και τρέξουμε την εντολή lynx localhost:5002 παρατηρούμε ότι h default σελίδα του apache server που τρέχει στον worker1 είναι διαθέσιμη στον master στην πόρτα 5002.

4. Δημιουργήστε VPN για την παροχή υπηρεσιών στο σμήνος

Τα βήματα δημιουργίας του VPN εδώ:

http://docs.swarmlab.io/SwarmLab-HowTos/labs/sec/ex-5_iptables.adoc.html