= Ασφάλεια Δικτύων και Επικοινωνιών/ Εργαστήριο

.Πληροφορίες
****
Εργασία Εξαμήνου 2020-2021 +
Καβαλιέρου Θάλεια-Ελπίς (Α.Μ. 171009) +
Για περισσότερες πληροφορίες, ανατρέχετε στο link:README.pdf[README.pdf]
****

:toc:

=== Το σύστημα διεξαγωγής των επιθέσεων
.Docker Swarm
****
Για τις ανάγκες της άσκησης, υλοποιήθηκε ένα σμήνος από Docker Engines. Οι μηχανές του συστήματος ακολουθούν την αρχιτεκτονική που παρουσιάζεται στην εικόνα, με μία Manager Engine και ένα διαφορετικό αριθμό από Worker Engines για κάθε άσκηση. +
image:images/swarm-diagram.png[]
Πηγή: link:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/[Docker Docks] +
Για περισσότερες πληροφορίες, link:README.pdf#page=4[1.1 Το σύστημα διεξαγωγής των επιθέσεων]
****

=== DoS/DDoS
.Denial-of-Service Attack
****
Ως επίθεση DoS προσδιορίζεται «η αποτροπή εγκεκριμένης πρόσβασης σε πόρους ή η καθυστέρηση χρονικά κρίσιμων λειτουργιών»
footnote:[NIST Glossary, link:https://csrc.nist.gov/glossary/term/DoS[], NIST SP 800-12 Rev.1
]. Στην πορεία της άσκησης θα δούμε πώς, μία τέτοια επίθεση, μπορεί να αποκλείσει μία μηχανή του σμήνους από την εξυπηρέτηση αιτημάτων εγκεκριμένων χρηστών. +
Για περισσότερες πληροφορίες, link:README.pdf#page=3[1.0 Εισαγωγή]
****

Αρχικά, ερευνήθηκε το δίκτυο 172.19.0.0/16, για μηχανές ευπαθείς σε μία επίθεση DoS, με το σαρωτή δικτύων nmap
footnote:[https://nmap.org/[nmap]]. Από τη σάρωση βρέθηκε η μηχανή με IP 172.19.0.5, στην οποία έτρεχε μία υπηρεσία http στη port 80.
image:images/screenshots/DoS-DDoS/nmap_http.jpg[]
link:README.pdf#page=5[Περιγραφή στη σελίδα 5]

Η επίθεση πραγματοποιήθηκε με τη βοήθεια του εργαλείου hping3
footnote:[link:https://tools.kali.org/information-gathering/hping3[hping3]]. Μέσω αυτού, κατακλύστηκε η port 80 της μηχανής-στόχου με πακέτα SYN (
link:README.pdf#page=7[1.2.1 Διεξαγωγή της επίθεσης]).

.Three-Way Handshake
****
Τα πακέτα SYN αποτελούν το πρώτο μέρος του three-way handshake του TCP. Όπως φαίνεται και στην εικόνα, προκειμένου να εγκαθιδρυθεί η επικοινωνία μεταξύ ενός client και ενός server, ανταλλάσσονται τα εξής πακέτα: SYN,SYN-ACK,ACK. Στην επίθεση DoS/SYN Flooding σκοπός είναι η αποστολή ενός τεράστιου αριθμού πακέτων SYN, αναγκάζοντας τον server να απαντήσει με πακέτα SYN-ACK, χωρίς την αποστολή των πακέτων ACK ώστε να ολοκληρωθεί η διαδικασία. +
image:images/TCP-three-way-handshake.png[] +
link:https://www.researchgate.net/figure/TCP-three-way-handshake_fig3_321698222[Πηγή Εικόνας] +
Για περισσότερες πληροφορίες, link:README.pdf#page=6[1.2 Η επίθεση DoS]
****
Από την πλευρά της μηχανής-στόχου, ο εντοπισμός της επίθεσης έγινε με δύο εργαλεία.

* Netstat
footnote:[https://en.wikipedia.org/wiki/Netstat[Wikipedia,Netstat]] +
Εντοπίστηκε συσσώρευση πακέτων SYN στην port 80, προερχόμενα από διαφορετικές διευθύνσεις IP. +
image:images/screenshots/DoS-DDoS/netstat.png[] +
link:README.pdf#page=7[1.2.2 Εντοπισμός της επίθεσης]

* TCPdump
footnote:[https://www.tcpdump.org/[tcpdump]] 
+
Με το φίλτρο tcp[tcpflags] == tcp-syn επιβεβαιώθηκαν τα αποτελέσματα του netstat. +
image:images/screenshots/DoS-DDoS/tcpdump.png[] +
link:README.pdf#page=8[1.2.2 Εντοπισμός της επίθεσης]

Αφοτου εντοπίστηκε η επίθεση, σχεδιάστηκαν τα αντίμετρα για την αντιμετώπιση της. Η εφαρμογή των αντιμέτρων έγινε με το iptables
footnote:[https://en.wikipedia.org/wiki/Iptables[Wikipedia,iptables]]. +
image:images/screenshots/DoS-DDoS/iptables_nvL.jpg[]
link:README.pdf#page=8[1.2.3 Αντιμετώπιση της επίθεσης]

.Επιπλέον: Python/Scapy
****
Πέραν του εργαλείου hping3, είναι εφικτό να πραγματοποιηθεί η επίθεση και με ένα αυτοσχέδιο εργαλείο, σε γλώσσα Python, με τη βιβλιοθήκη Scapy. Το πρόγραμμα μπορείτε να βρείτε στο φάκελο #DoS-DDoS/tools#. +
Για περισσότερες πληροφορίες, 
link:README.pdf#page=10[1.2.4 Επιπλέον: Εργαλείο για την υλοποίηση της επίθεσης DoS με Python/Scapy]
****

Για την επίθεση DDoS αξιοποιήθηκε το εργαλείο ansible
footnote:[https://docs.ansible.com/ansible/latest/index.html[Ansible Documentation]]. Μέσω αυτού, ενορχηστρώθηκαν οι υπόλοιπες μηχανές του σμήνους, ώστε να διεξάγουν επιθέσεις DoS στη μηχανή-στόχο.

.Distributed Denial-of-Service
****
Οι επιθέσεις Distributed-DoS δεν είναι άλλο από επιθέσεις DoS, που διεξάγονται από πολυάριθμες πηγές. Κάθε πηγή στέλνει
ασταμάτητα και με μικρή συχνότητα πακέτα προς τον ίδιο στόχο επιτυγχάνοντας, έτσι, σημαντικότερα αποτελέσματα. +
Για περισσότερες πληροφορίες,
link:README.pdf#page=12[1.3 Η επίθεση DDoS]
****

Οι παραμετροποιήσεις για την αξιοποίηση του ansible, καθώς και το playbook με τις οδηγίες που ακολούθησαν οι μηχανές του σμήνους, βρίσκονται στο φάκελο #DoS-DDoS/ansible#. Η πλήρης ανάπτυξη του κώδικα,
link:README.pdf#page=13[1.3 Η επίθεση DDoS, σελ. 13].

=== SSH Brute Force Attack
.Secure Shell
****
Το Secure Shell
footnote:[https://en.wikipedia.org/wiki/SSH_(Secure_Shell)[Wikipedia,SSH]]
, εν συντομία SSH, αποτελεί ένα ασφαλές πρωτόκολλο για τη δικτυακή επικοινωνία μεταξύ δύο μελών του ίδιου δικτύου. Μέσω του SSH, οι hosts μπορούν να εγκαθιδρύσουν ένα ασφαλές, κρυπτογραφημένο κανάλι ακολουθώντας την αρχιτεκτονική client-server. +
Για περισσότερες πληροφορίες, 
link:README.pdf#page=14[2.Υλοποίηση συστήματος για την προσομοίωση SSH Brute Force Attack]
****

Μία επίθεση ωμής βίας στο πρωτόκολλο SSH αποπειράται να παραβιάσει τις αρχές ασφαλείας του και να επιτρέψει την πρόσβαση ενός κακόβουλου χρήστη στο υπολογιστικό σύστημα του ευπαθούς στόχου. +
Η προσομοίωση της επίθεσης έγινε με δύο τρόπους: με το Metasploit
footnote:[https://www.metasploit.com/[Metasploit]]
framework και με ένα αυτοσχέδιο εργαλείο (Python/Paramiko).

* Metasploit +
Η επίθεση διεξήχθη από μία εικονική μηχανή με λειτουργικό Kali,Linux, προς την εικονική μηχανή Metasploitable. +
Για περισσότερες πληροφορίες, 
link:README.pdf#page=15[2.1.1 Διεξαγωγή της επίθεσης με Metasploit] +
Από το framework, επιλέχθηκε το module scanner/ssh/ssh_login, το οποίο παραμετροποιήθηκε, όπως φαίνεται στην εικόνα που ακολουθεί. Επιπλέον, φαίνεται και το αποτέλεσμα με το τρέξιμο του module. +
image:images/screenshots/SSH-brute/Inkedmetasploit_LI.jpg[] +
link:README.pdf#page=16[2.1.1 Διεξαγωγή της επίθεσης με Metasploit, σελ. 16]

* Python/Paramiko +
Αξιοποιώντας τη βιβλιοθήκη Paramiko, η λειτουργικότητα της οποίας αφορά την εγκαθίδρυση καναλιών επικοινωνίας με το πρωτόκολλο SSH, σχεδιάστηκε το πρόγραμμα που μπορείτε να βρείτε στο #SSH-Brute-Force/tools#. Είχε τα ίδια αποτελέσματα με αυτά του Metasploit. +
image:images/screenshots/SSH-brute/ssh-brute-paramiko.png[] +
link:README.pdf#page=16[2.1.2 Διεξαγωγή της επίθεσης με εργαλείο Python/Paramiko]

.Επιπλέον: Αξιοποίηση του σμήνους
****
Η επίθεση, που παρουσιάστηκε στις προηγούμενες ενότητες, πραγματοποιήθηκε με ένα μικρό, σε έκταση, αρχείο. Σε μία πραγματική επίθεση θα χρειαζόμασταν ένα με δεκάδες, και ίσως εκατοντάδες, γραμμές από πιθανούς κωδικούς πρόσβασης. Η επίθεση, τότε, θα χρειαζόταν αρκετό χρόνο, μέχρι να βρει το σωστό κωδικό. +
Από τη στιγμή, όμως, που έχουμε στη διάθεση μας ένα σμήνος από μηχανές, είναι δυνατό να εκτελεστεί η επίθεση εκ μέρους κάθε μέλους του. Σε αυτή την ενότητα, αξιοποιήθηκε ένα σμήνος από 15 Docker Engines όπου, η κάθε μηχανή ερευνούσε διαφορετικούς πιθανούς κωδικούς ενός αρχείου 1557 γραμμών. +
Η πλήρης παρουσίαση της επίθεσης, 
link:README.pdf#page=19[2.1.3 Επιπλέον: Αξιοποίηση του Docker swarm].
****

Σε κάθε περίπτωση, η επίθεση αντιμετωπίστηκε, αρχικά, με το Fail2ban
footnote:[https://www.fail2ban.org/wiki/index.php/Main_Page[Fail2ban]]. Για τον επιτυχή αποκλεισμό των κακόβουλων χρηστών, έγιναν οι ακόλουθες παραμετροποιήσεις του αρχείου #jail.local#. +
image:images/screenshots/SSH-brute/config.png[] +
link:README.pdf#page=23[2.2 Αντιμετώπιση της επίθεσης με Fail2ban]

Ωστόσο, η καλύτερη τακτική για την εξασφάλιση του SSH είναι η απενεργοποίηση της επιλογής εισόδου με κωδικό πρόσβασης. +
image:images/screenshots/SSH-brute/pass_no.png[] +
link:README.pdf#page=24[2.3 Εγκαθίδρυση καναλιού μόνο με key] +
Με τη ρύθμιση που προηγήθηκε, η εγκαθίδρυση των καναλιών SSH θα γίνεται μόνο με ένα ζεύγος κλειδιών. Με τη βοήθεια της εργαλειοθήκης του OpenSSH μπορεί να παραχθεί ένα κατάλληλο ζεύγος, τρέχοντας την εντολή #ssh-keygen#.  

=== Local/Remote Port Forwarding

.SSH Port Forwarding
****
Ο μηχανισμός SSH Fort Porwarding δημιουργεί ένα SSH Tunnel, το οποίο προσδίδει αξιοπιστία στην επικοινωνία μεταξύ υπολογιστικών συστημάτων χάρη στην κρυπτογράφηση που παρέχει το πρωτόκολλο SSH. Μπορεί να πραγματοποιηθεί με τρεις τρόπους: τοπικά (Local Port
Forwarding), απομακρυσμένα (Remote Port Forwarding) ή δυναμικά (Dynamic Port Forwarding). +
image:images/port_forwarding.png[] +
link:https://www.ssh.com/ssh/tunneling/[Πηγή Εικόνας] +
Για περισσότερες πληροφορίες,
link:README.pdf#page=25[3. Δημιουργία Local/Remote SSH Forwarding για την παροχή υπηρεσιών στο σμήνος]
****

* Local Port Forwarding +
Η δημιουργία του tunnel έγινε μεταξύ της Manager Engine και της Worker Engine με IP 172.19.0.5. Σκοπός, η πρόσβαση του πίνακα example5 της βάσης δεδομένων που έτρεχε στη δεύτερη. +
image:images/screenshots/SSH-tunnel/local.png[Η εντολή] +
image:images/screenshots/SSH-tunnel/database_tunnel.png[Σύνδεση στη βάση δεδομένων του απομακρυσμένου χρήστη] +
link:README.pdf#page=25[3.1 Δημιουργία Local Port Forwarding] +

* Remote Port Forwarding +
Με ελάχιστες διαφορές, δημιουργήθηκε και ένα tunnel με τη μέθοδο Remote Port Forwarding +
image:images/screenshots/SSH-tunnel/remote.png[] +
link:README.pdf#page=27[3.2 Δημιουργία Remote Port Forwarding] +

=== Δημιουργία VPN στο σμήνος

.VPN
****
Τα Εικονικά Ιδιωτικά Δίκτυα(VPN, Virtual Private Networks) αποτελούν μία τεχνολογία για τη διασύνδεση υπολογιστικών συστημάτων με ασφαλείς μεθόδους. Επιλύουν ζητήματα επέκτασης των ιδιωτικών δικτύων, χωρίς να είναι κοστοβόρα ή να υστερούν σε ασφάλεια.
Για περισσότερες πληροφορίες, 
link:README.pdf#page=28[4. Δημιουργία VPN στο σμήνος]
****

Η δημιουργία του VPN έγινε βάσει των οδηγιών 
link:http://docs.swarmlab.io/SwarmLab-HowTos/labs/sec/ex-5_iptables.adoc.html[]. +
Τα αρχεία που δημιουργήθηκαν από την περάτωση της διαδικασίας, εκτός του φακέλου pki, βρίσκονται στο #swarmVPN/vpn-files#. Τα βήματα παρουσιάζονται, αναλυτικά, στο 
link:README.pdf#page=28[4. Δημιουργία