Uniwa 2020 ask Security
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.
 
 
cs131139 28242d23e6 Add 'LICENSE.md' 3 years ago
backup_files Commit message 3 years ago
project Commit message 3 years ago
shorewall Commit message 3 years ago
ssh Commit message 3 years ago
.vimrc Commit message 3 years ago
Dockerfile Commit message 3 years ago
LICENSE.md Add 'LICENSE.md' 3 years ago
README.md Update 'README.md' 3 years ago
ROOT_PASSWORD Commit message 3 years ago
auto_update_hosts Commit message 3 years ago
docker-compose.yml Commit message 3 years ago
get_hosts Commit message 3 years ago
install-vim-plugin.sh Commit message 3 years ago
out.log Commit message 3 years ago
passwd_list Commit message 3 years ago
sec_bootstrap Commit message 3 years ago

README.md

Task of Security of Networks and Comunication

Uniwa 2020 Athens Άσκηση Εξαμήνου

Ζητούμενα

1.Υλοποίηση συστήματος για την προσομοίωσηDos/DDos Attack. -Χρησιμοποιήστε το hping3(https://tools.kali.org/information-gathering/hping3, https://www.howtoinstall.me/ubuntu/18-04/hping3/ ) εργαλείο για την πραγματοποίηση Dos και DDos Attack σε μέλη του σμήνους. -Χρησιμοποιήστε τα tcpdump, netstat εργαλεία για την εύρεση, ανάλυση και παρουσίαση των συγκεκριμένων επιθέσεων. -Δημιουργήστε iptables rules για την αντιμετώπιση των επιθέσεων.

2.Υλοποίηση συστήματος για την προσομοίωση “SSH Brute Force Attacks”(Patator, THC Hydra, Medusa, Metasploit)Patator, THC Hydra, Medusa, Metasploit). -Χρησιμοποιήστε εργαλεία της προτίμησής σας για την εύρεση, ανάλυση και παρουσίαση της συγκεκριμένης επίθεσης. -Χρησιμοποιήστε το εργαλείο Fail2Ban για την αντιμετώπιση της επίθεσης. -Τροποποιήστε το ssh-server έτσι ώστε να επιτρέπει μόνο συνδέσεις μέσω key.

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

4.Δημιουργήστε VPN (http://docs.swarmlab.io/SwarmLab-HowTos/labs/sec/ex-5_iptables.adoc.html)για την παροχή υπηρεσιών στο σμήνος που έχετε στη διάθεσή σας.

Ξεκινώντας

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

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

Στο τέλος θα έχουμε καταλήξει με εναν φάκελο με το όνομα swarmlab-sec εντός του οποίου στο terminal θα πάμε να δημιουργήσουμε το δικό μας project μας :

mkdir vpn   
mkdir <mydirname>
cd <mydirname>
swarmlab-sec up size=5

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

swarmlab-sec login

είμαστε πλέον στον master μας και συγκεκριμένα στο φάκελο project, μα έδώ κάνουμε μία παυση

Pulling

Ηρθε η ώρα να κατεβάσουμε απο το repo τα αρχεία που θα χρειαστούμε:

-Το αρχείο passwd_list το αντιγράφουμε χύμα στον φάκελο που ονομάσαμε για το project μας -Aπο τον φάκελο backup_files>vpn+backup αντιγράφουμε όλα τα αρχεία και τα βάζουμε στον τοπικό φακέλο μας με όνομα vpn που δημιουργήσαμε πριν λιγο. -Απο τον φάκελο project αντιγράφουμε όλα τα αρχεία εκτός από τα 'sec-vpn-*.ovpn' στον τοπικό φάκελο project

Return to terminal

Αφού επιστρέψαμε τρέχουμε στον master την εντολή :

ifconfig

και βλέπουμε την ip που έχουμε μετα την τοποθετουμε όπως φαινεται στο ακλολουθο παράδειγμα με αστερισκο στο τελευταιο ψηφίο

nmap -sP 172.21.0.* | grep Nmap | cut -d' ' -f5-6

-Το αποτέλεσμα που θα πάρουμε το τοποθετούμε αφού αφαιρέσουμε την πρώτη σειρα στο αρχείο inventory.yml στη θέση των άλλων ip ενώ αφού αφιρέσουμε και την δεύερη σειρα τις τοποθετούμε και στο αρχείο inventory_w.yml -Ομοίως αλλαζουμε την ip στο test3.yml με αυτή που θα έχει ο αμυνόμενος worker της επίθεσης dos-ddos . -Τέλος στη medusa_script.sh βάζουμε την τελευταία ip που πηραμε καθώς ο τελευταίος worker θα παιξει τον ρόλο του server στο ερώτημα 2.

Ξεκινώντας επί της ουσίας

Είμαστε στον master και τρεχουμε με τη σειρα τις δυο εξης εντολες-scrit:

./first_script.sh
./second_script.sh

To πρώτο script κανει στον master apt update εγκαθστα ansible και sshpass ενώ προσθετει και μια γραμμη για να μην ζητάει κωδικό το sshpass και τέλος τρέχει με ansible to test.yml για ολους του υπολογιστές οπου φτιαχνει εναν φακελο για αποθήκευση δεδομένων εγκαθιστά το openvpn που θα χρειαστεί στο ερώτημα 4 μεταφέρει τα iptables_rules.sh και fail2ban_script.sh στον τοπικό χώρο των υπολογιστών και εκτελει και την εντολή ls -al για τεσταρισμα.

Το δευτερο script τρέχει με ansible to test2.yml για ολους τους workers οπου μεταφέρει και εκτελεί τοπικά το script_update.sh μεταφέρει τοπικά το medusa_script.sh και εγκαθιστά το hping3 και το sshpass.

Ερώτημα 1

dos attack

medusa_script.sh uptade install medusa passwd_file ip

>worker on ip 3 dos attacker-attacks master runs:
sudo hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source 172.21.0.2  
>master defender runs:
sudo tcpdump -i eth0
>worker on ip 4 προσπαθει μεσω του μαστερ να ζητησει το google.gr runs:
curl http://www.google.gr

μα δεν τα καταφερνει καθως ο master δεν δυναται πλέον να δώσει υπηρεσία ... H επίθεση ήταν επιτυχής και το εντοπίσαμε, οπότε τη σταμταμε από τον worker on ip 3*

ddos attack

>master defender runs:
./ddos_atck_script.sh 

το οποίο τρεχει με ansible για ολους τους workers το test3.yml ,οι οποίοι επιτίθονται στον master χρησιμοποιόντας μάλιστα την παράμετρο async 120 poll 0 ωστε να διαρκέσει η επίθεση 120 δευτερόλεπτα , να μη χρειαστεί να την διακόψουμε εμέις και να μπορέσουμε να εξέλθουμε από το script για να εντοπίσουμε την επίθεση και να την αποκρούσουμε πριν περασουν τα 120 δευτερόλεπτα με τις εξής εντολές:

sudo tcpdump -i eth0
./ansible_iptables.sh  #δινει τα απαραίτητα iptables μέσω ansible σε όλους τους υπολογιστές
>worker on ip 4 προσπαθει μεσω του μαστερ να ζητησει το google.gr ξανά runs:
curl http://www.google.gr

και αυτή τη φορά τα καταφερνει καθως ο master είναι προστατευμένος από τους νέους κανόνες ... H επίθεση απέτυχε και εμεις τελειώσαμε το ερώτημα 1 παραθέτοντας το ανάλογο βιντεάκι με αναλυτικότερο "τρέξιμο"

Watch the video

Ερώτημα 2

brute force attack

>worker on ip6 SERVER runs:
sudo iptables -L  #to check that it is almost empty except previous task's rules
>worker on ip 3 brute-force attacker-attacks server runs:
./medusa_script.sh    # update/install medusa/copys passwd_file localy/ attacks 

και καταφέρνει να "σπάσει" τον κωδικό τον οποίο μας επιστρέφει. Με τις ακόλουθες εντολες συνδεόμαστε ssh με στον server

ssh docker@172.21.0.6  # "docker" για κωδικο
ifconfig               #  ωστε να δουμε οτι μπηκαμε
ls -l                  #  να δουμε τα αρχεια του σερβερ
exit                   #  επιστρεφουμε πισω στον worker on ip 3
>master needs to protect everyone runs:
./ansible_fail2ban.sh  #σε όλους τους υπολογιστες και κανει:update/install rsyslog/start fail2ban/copy+edit jail.local/restart
>worker on ip 3 brute-force attacker-attacks server again runs:
./medusa_script.sh     

όμως σε αυτη την επίθεση το fail2ban λειτουργησε και έριξε ban στον επιτιθέμενο από την τρίτη λανθασμένη προσπάθεια.. για του λόγου το αληθες :

>worker on ip6 SERVER runs:
sudo cat /var/log/auth.log | grep "Failed password"    #ελεγχος του αρχείου και ανίχνευση της επίθεσης
sudo iptables -L                                       #έχουμε νέο κανόνα REJECT σε αυτον που μας επιτέθηκε 

για του λόγου το αληθες 👇 📽️

Watch the video

sshkey authorization

Εδώ πρεπει να παμε σε όλους τους workers και να τρέξουμε :

cd /project/
./sshkey_script.sh       #script δημιουργίας και μεταφορας κλειδιου στον σερβερ  

και στον master μόνο την δευτερη ανωτέρω εντολή

Εν συνεχεία:

>worker on ip6 SERVER runs:
cd .ssh                         # μεταβαινει στον φακελο
ls -al                          # ελεγχει τα στοιχεια που υπαρχουν
vi authorized_keys              # μπαινει στα κλειδια και βλεπει οτι ηρθανε όλα
sudo vi /etc/ssh/sshd_config    # επεξεργαζεται το αρχειο ωστε να συνδεονται όλοι μονο με ssh key (change PassAuthntication "no")
sudo service ssh restart        # restart to engage the rule
>any worker except SERVER runs:
ssh docker@172.21.0.6   

και απλά συνδεεται χωρις κωδικό... επιβεβαιώνεται στο ακόλουθο βίντεο:

Watch the video

Ερώτημα 3

Local/Remote SSH Forwarding

#####local port forwarding>

ssh -4 -nNT -L 7000:localhost:4444 docker@172.21.0.5    #-4 ipv4

Με την ανωτέρω εντολη φτιάχνουμε ενα ssh tunnel μεταξύ του υπολογιστή μας και του μηχανήματος που "κάθεται στην ip 172.21.0.5 και προοθούμε ολα τα δεδομένα μας μεσω της πόρτα μας 7000 σε αυτόν στην πόρτα 4444.

Αντίστοιχα εκτελείται και το remote port forwarding

ssh -4 -nNT -R 1313:localhost:3333 docker@172.21.0.5

όπου φτιάχνουμε ενα ssh tunnel μεταξύ του υπολογιστή μας και του μηχανήματος που "κάθεται στην ip 172.21.0.5 και λαμβάνουμε ολα τα δεδομένα του μεσω της πόρτα μας 1313 από την δική του πόρτα 3333.

Μπορούμε για παάδειγμα να βλέπουμε Φόρμουλα 1 στον σερβερ μας και να μεταφέρουμε την μετάδοση μεσω SSH στον πολογιστή μας που δεν έχει κάρτα τηλεόρασης ωστε να μπορέσουμε να παρακολουθήσουμε....

Ερώτημα 4

VPN

Προετοιμασία

Έχουμε ανοιχτα 5 παραυρα στο τερμιναλ , ένα για κάθε υπολογιστή..θα πρεπει για αυτο το ερώτημα και για να κάνουμε τη ζωή μας πιο εύκολη να ανοίξουμε, άλλα 5 , ένα δηάδη για τον καθένα +1 extra παραθυρο που θα "κάθεται το κανονικό μας μηχάνημα εκτός docker και εντος του φακελου vpn που δημιουργησαμε στην αρχή της εργασίας.

Tο openvpn το έχουμε εγκαταστήσει εξ αρχής απο το πρώτο script

Ειμαστε λοιπον στο "δικό μας" μηχανημα και τρεχουμε ένα script για δημιουργία 5 χρηστών επεξεργασία των αρχειων αυτών και αποστολή τους εντος του docker:

./create-vpn.sh           #για την δημιουργία του VPN μας 
./cr_vi_sec_vpn_my5.sh    #για την διαγραφή του έχουμε το rm_my5.sh
./show-user.sh            #ώστε να δούμε του χρήστες που φτιάξαμε 

Μπαίνουμε τώρα στο docker και πάμε :

Σε όλους τους workers και να τρέξουμε :

cd /project/
sudo  openvpn --config ./sec_vpn_*.ovpn     #όπου για αστερακι ο αυξων αριθμος του καθε worker  

και στον master μόνο την δευτερη ανωτέρω εντολή με το νούμερο 1 στο αστεράκι.

Έτσι έχουμε ξεκινήσει την υπηρεσία σε όλους . Επιδή όμως τρέχει στο ΠΡΟσκήνιο μεταβαίνουμε στα αλλα 5 παράθυρα που μεριμνήσαμε να ανοίξουμε πριν και τρέχουμε σε όλους την εντολή :

ifconfig 

Βλέπουμε πως υπάρχει νέο δίκτο επ ονόματι tun0 στο οποίο κάθε υπολογιστής έχει νέα IP τυπου '10.80.0.*' Επαναλαμβάνουμε λοιπον την διαδικασία με την :

nmap -sP 10.80.0.* | grep Nmap | cut -d' ' -f5-6

που είχαμε κάνει στην αρχή της εργασίας για τα αρχεια inventory.yml και inventory_w.yml και περναμε ολες τις ανάλογες IP στο αρχείο inventory.vpn*

>master needs to see if everything works runs:
./ping-to-me-vpn.sh   #όλοι οι workers κάνουν ping στον master
sudo tcpdump -i tun0  #ο master ακουει και βλέπουμε οτι όλα γίνονται με τις νεες IP πανω στο δικτυο tun0

Εδώ και το τελευταίο βιντεάκι πριν το κλείσιμο :

Watch the video

Built With

Μετά κόπων και βασάνων

Κωδικός

When you are inside a container

User password: docker

sudo password: docker

Authors

  • Ζωηρός Νικόλαος - Π.Σ. ΤΕΙ

See also the list of contributors who participated in this project.

License

This project is licensed under the following License - see the LICENSE.md file for details

Acknowledgments

  • Hat tip to anyone whose code was used
  • Inspiration
  • etc