katerina_gourgolitsa
4 years ago
3 changed files with 831 additions and 0 deletions
@ -0,0 +1,337 @@ |
|||
= Εργασία Εξαμήνου Ασφάλεια Δικτύων και Επικοινωνιών |
|||
Γουργολίτσα Αικατερίνη |
|||
Α.Μ. :171193 |
|||
|
|||
:toc: right |
|||
:toc-title: Πίνακας περιεχομένων |
|||
:toclevels: 4 |
|||
:icons: font |
|||
:tabs: |
|||
|
|||
.*Docker* + |
|||
Αρχικά θα πρέπει να κάνουμε μία προεργασία και να εγκαταστήσουμε τον docker και κάποια εργαλεία που θα χρησιμοποιήσουμε στην συνέχεια για την υλοποήση της εργασίας. |
|||
|
|||
.Εγκατάσταση Docker |
|||
---- |
|||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - |
|||
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" |
|||
sudo apt update |
|||
|
|||
sudo apt install -y docker-ce |
|||
echo "or" |
|||
sudo apt install docker* |
|||
|
|||
sudo systemctl status docker |
|||
sudo usermod -aG docker username #οπου username το όνομα του χρήστη που θα δουλεύει με docker kate |
|||
---- |
|||
|
|||
.Docker compose |
|||
|
|||
---- |
|||
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
|||
sudo chmod +x /usr/local/bin/docker-compose |
|||
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose |
|||
---- |
|||
|
|||
.Swarmlab-sec |
|||
---- |
|||
cd /tmp |
|||
mkdir test |
|||
cd test |
|||
git clone https://git.swarmlab.io:3000/swarmlab/swarmlab-sec.git |
|||
cd swarmlab-sec |
|||
mkdir project |
|||
cd project |
|||
../install/usr/share/swarmlab.io/sec/swarmlab-sec create |
|||
../install/usr/share/swarmlab.io/sec/swarmlab-sec up size=3 σηκώνουμε 3 clusters |
|||
---- |
|||
|
|||
.Εγκατάσταση εργαλείων |
|||
---- |
|||
sudo apt update |
|||
sudo apt install hping3 |
|||
sudo apt install medusa |
|||
sudo apt-get install fail2ban |
|||
sudo apt install apache2 |
|||
sudo apt install openvpn |
|||
|
|||
---- |
|||
|
|||
== Dos/DDos Attacks |
|||
|
|||
=== Βρίσκουμε την ip |
|||
Αρχικά συνδεόμαστε στον Master και βρίσκουμε την ip |
|||
---- |
|||
../install/usr/share/swarmlab.io/sec/swarmlab-sec login |
|||
ifconfig |
|||
---- |
|||
Εδώ θα πάρουμε την ip 172.19.0.2 + |
|||
image:images/1_ifconfig.png[] + |
|||
|
|||
=== Εύρεση live hosts |
|||
Βρίσκουμε τους live hosts ,τις ips διευθύνσεις των workers και ενεργές πόρτες. |
|||
|
|||
---- |
|||
nmap -sP 172.19.0.* |
|||
nmap -p 172.19.0.3 |
|||
---- |
|||
image:images/1_nmap.png[] + |
|||
image:images/1_nmap_port.png[] + |
|||
|
|||
=== Επίθεση DOS |
|||
Για να ξεκινήσουμε την επίθεση πρέπει πρώτα να έχουμε εγκαταστήσει το hping3(όπως αναφέρθηκε παραπάνω ) ,αφού πρώτα συνδεθούμε στον worker_1 (ssh docker@172.19.0.3 ,password:docker).Επειτα τρέχουμε την παρακάτω εντολή για να επιτεθούμε στον worker_2 με ip 172.19.0.4. |
|||
|
|||
---- |
|||
sudo hping3 -V -c 400 -d 120 -S -p 22 --flood --rand-source 172.19.0.4 |
|||
---- |
|||
όπου, + |
|||
|
|||
-c:αριθμός πακέτων (400) + |
|||
-d:μέγεθος πακέτων(120) + |
|||
-S:τύπος των πακέτων(SYN) + |
|||
-p:αριθμός port (22) + |
|||
-flood:κατακλυσμος από πακέτα + |
|||
-rand-source:εμφάνιση τυχαίων source ips + |
|||
|
|||
|
|||
=== Παρακολούθηση επίθεσης |
|||
Για να παρακολουθήσουμε την επίθεση συνδεόμαστε στον worker_2 2 (ssh docker@172.19.0.4,password:docker) και τρέχουμε την παρακάτω εντολή |
|||
|
|||
---- |
|||
sudo tcpdump scr 172.19.0.3 |
|||
ή την εντολή tcpdump port 22 && 'tcp[tcpflags]== tcp-ack' |
|||
|
|||
---- |
|||
tcpflags ==tcp-syn :καταμέτρηση για τα πακέτα SYN που φτάνουν. + |
|||
|
|||
image:images/1_tcpdump.png[] + |
|||
image:images/1_tcpdump2.png[] + |
|||
|
|||
Το netstat εξετάζει τις συνδέσεις TCP .Εδώ η κίνηση στην πόρτα 22. |
|||
Το tcpdump μας δίνει μια περιγραφή για τα πακέτα που εντόπισε, όπως για παράδειγμα πληροφορίες για το μέγεθος και το περιεχόμενο των πακέτων. Τέλος, μόλις ολοκληρωθεί η διαδικασία εμφανίζεται το πλήθος των πακέτων που καταγράφηκαν, το πλήθος των πακέτων που εντοπίστηκαν με βάση το φίλτρο και το πλήθος των πακέτων που απορρίφθηκαν. |
|||
|
|||
.netstat |
|||
image:images/1_netstat.png[] + |
|||
|
|||
Το netstat όπως βλέπουμε δεν κατάφερα να λειτουργήσει σωστά. |
|||
|
|||
|
|||
=== Αντιμετώπιση επίθεσης |
|||
Για την προστασία έναντι των επιθέσεων αυτών θα τροποποιήσουμε το iptables ,όπως παρουσιάζεται και στην συνέχεια. |
|||
|
|||
---- |
|||
sudo iptables -I INPUT -s 172.19.0.3 -j DROP |
|||
sudo iptables -L |
|||
sudo iptables -nvL |
|||
---- |
|||
|
|||
.iptables -L |
|||
image:images/1_iptables_L.png[] + |
|||
|
|||
.iptables -nVL |
|||
image:images/1_iptables_nvL.png[] + |
|||
|
|||
|
|||
== SSH Brute Force Attacks |
|||
=== Medusa |
|||
Το SSH είναι ένα ασφαλές πρωτόκολλο το οποίο επιτρέπει τη μεταφορά δεδομένων και την επικοινωνία μεταξύ δύο μελών του ίδιου δικτύου. |
|||
Για την επίτευξη μιας SSH Brute Force επίθεσης χρησιμοποιήσαμε το εργαλείο medusa και ένα pass.txt αρχείο με διάφορους κωδικούς.Θα επιτεθουμε και πάλι στον worker_2 με Ip 172.19.0.4 |
|||
|
|||
---- |
|||
medusa -u docker -P pass.txt -h 172.19.0.4 -M ssh |
|||
|
|||
---- |
|||
|
|||
|
|||
.medusa |
|||
image:images/2_medusa.png[] + |
|||
H επίθεση ήταν επιτυχής και βρήκαμε τον κωδικό του worker_2. |
|||
|
|||
|
|||
=== Αντιμετώπιση της επίθεσης |
|||
Για να αντιμετωπίσουμε την επίθεση θα χρησιμοποιήσουμε το εργαλείο Fail2Ban.Το Fail2Ban είναι ένα πλαίσιο λογισμικού πρόληψης εισβολών που προστατεύει τους διακομιστές των υπολογιστών από βίαιες επιθέσεις. |
|||
Εμείς στην εργασία, τροποποιούμε το αρχείο jail.local ,όπως παρουσιάζεται στην συνέχεια,αφού πρώτα αντιγράψουμε το jail.conf στο αρχείο jail.local με την παρακάτω εντολή ,καθώς ενδέχεται να ενημερωθεί και το ίδιο το αρχείο και να χαθούν οι ρυθμίσεις που έχει εισάγει ο διαχειριστής. |
|||
|
|||
|
|||
---- |
|||
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
|||
---- |
|||
|
|||
---- |
|||
[sshd] |
|||
enabled = true |
|||
port = ssh |
|||
action = iptables-multiport |
|||
logpath = /var/log/auth.log |
|||
maxretry = 5 |
|||
---- |
|||
enables=true: για την ενεργοποίηση του μηχανισμού + |
|||
port=ssh Η πόρτα της ssh (22) + |
|||
action = iptables-multiport iptables για την απαγόρευση εισόδου + |
|||
logpath = /var/log/auth.logπου βρίσκεται το Αρχείο καταγραφής + |
|||
maxretry = 5 Μέγιστος αριθμός προσπαθειών |
|||
|
|||
Τρέχουμε παλι την παρακάτω εντολή και παρατηρούμε ότι δεν δεν μπορεί να πραγματοποιηθεί η επίθεση . |
|||
---- |
|||
medusa -u docker -P pass.txt -h 172.19.0.4 -M ssh |
|||
|
|||
---- |
|||
|
|||
.fail2ban |
|||
image:images/2_fail_access.png[] + |
|||
Επιπλεόν δεν ήταν επιτυχης η προσπάθεια για συνδέσεις μέσω key. |
|||
|
|||
== Local/Remote SSH Forwarding |
|||
Το SSH Tunneling, είναι η δυνατότητα χρήσης του ssh για τη δημιουργία αμφίδρομης κρυπτογραφημένης σύνδεσης δικτύου μεταξύ μηχανών μέσω των οποίων μπορούν να ανταλλάσσονται δεδομένα, συνήθως TCP / IP. |
|||
Παρέχει επίσης έναν τρόπο για να ασφαλίσετε την κυκλοφορία δεδομένων οποιασδήποτε δεδομένης εφαρμογής μέσω προώθησης θύρας, ουσιαστικά διοχέτευση οποιασδήποτε θύρας TCP / IP μέσω SSH. Αυτό σημαίνει ότι η κυκλοφορία δεδομένων της εφαρμογής κατευθύνεται να ρέει μέσα σε μια κρυπτογραφημένη σύνδεση SSH, έτσι ώστε να μην μπορεί να υποβλεφθεί ή να υποκλαπεί κατά τη μεταφορά. |
|||
|
|||
Αρχικά τρέχουμε την υπηρεσία και βλέπουμε και την ip του μηχανήματός μας |
|||
---- |
|||
sudo apachectl start |
|||
sudo netstat -antlupe |
|||
---- |
|||
.apache |
|||
image:images/3_apache.png[] + |
|||
|
|||
=== Local port forwarding |
|||
Στο local port forwarding , ο πελάτης επιθυμεί να αποκτήσει πρόσβαση σε κάποια υπηρεσία μιας απομακρυσμένης μηχανής. |
|||
Για την υλοποίηση του Local port forwarding τρεχουμε την παρακάτω εντολή |
|||
---- |
|||
ssh -nNT -L 8000:localhost:80 kate@127.0.0.11 |
|||
---- |
|||
image:images/3_ssh_local.png[] + |
|||
Η παραπάνω εντολή δημιουργεί μια σήραγγα ssh μεταξύ του υπολογιστή και του διακομιστή και προωθεί όλη την κίνηση από το localhost: 80 στο localhost: 8000 . |
|||
|
|||
=== Remote port forwarding |
|||
Στο remote port forwarding σκοπός είναι η αποκτήση πρόσβασης σε υπηρεσίες ή πόρους του απομακρυσμένου εξυπηρετητή, οι οποίες δεν είναι διαθέσιμες .Γι ‘αυτό το λόγο ,προωθείται η κίνηση από μία πύλη της τοπικής μηχανής σε μια πύλη της απομακρυσμένης μηχανής. |
|||
Για την υλοποίηση του remote port forwarding τρεχουμε την παρακάτω εντολή |
|||
---- |
|||
ssh -nNT -R 4000:localhost:3000 user@127.0.0.11 |
|||
|
|||
---- |
|||
image:images/3_ssh_remote.png[] + |
|||
|
|||
Η παραπάνω εντολή δημιουργεί μια σήραγγα ssh μεταξύ του υπολογιστή σας και του διακομιστή και προωθεί όλη την κίνηση από το localhost: 3000 (στον υπολογιστή σας) στο localhost: 4000 (στο πλαίσιο του διακομιστή). + |
|||
|
|||
βλέπουμε την σελίδα του apache αν τρέξουμε curl localhost:4000. |
|||
image:images/3_curl.png[] + |
|||
|
|||
== VPN |
|||
Ένα εικονικό ιδιωτικό δίκτυο (VPN) επεκτείνει ένα ιδιωτικό δίκτυο σε ένα δημόσιο δίκτυο και επιτρέπει στους χρήστες να στέλνουν και να λαμβάνουν δεδομένα σε κοινόχρηστα ή δημόσια δίκτυα σαν να ήταν οι υπολογιστικές τους συσκευές συνδεδεμένες απευθείας στο ιδιωτικό δίκτυο. |
|||
|
|||
=== Δημιουργία VPN |
|||
Στον φάκελο swarmlab-sec δημιουργούμε έναν νέο φάκελο τον vpn.Εκεί φτάχνουμε δύο νέα αρχεία + |
|||
το create-vpn.sh και το create-user.sh. |
|||
|
|||
.create-vpn.sh |
|||
|
|||
---- |
|||
#!/bin/bash |
|||
IP=127.0.0.1 # Server IP |
|||
P=1194 # Server Port |
|||
OVPN_SERVER='10.80.0.0/16' # VPN Network |
|||
|
|||
#vpn_data=/var/lib/swarmlab/openvpn/openvpn-services/ # Dir to save data ** this must exist ** |
|||
vpn_data=$PWD/openvpn-services/ |
|||
if [ ! -d $vpn_data ]; then |
|||
mkdir -p $vpn_data |
|||
fi |
|||
|
|||
NAME=swarmlab-vpn-services # name of docker service |
|||
DOCKERnetwork=swarmlab-vpn-services-network # docker network |
|||
docker=registry.vlabs.uniwa.gr:5080/myownvpn # docker image |
|||
|
|||
docker stop $NAME #stop container |
|||
sleep 1 |
|||
docker container rm $NAME #rm container |
|||
|
|||
# rm config files |
|||
rm -f $vpn_data/openvpn.conf.*.bak |
|||
rm -f $vpn_data/openvpn.conf |
|||
rm -f $vpn_data/ovpn_env.sh.*.bak |
|||
rm -f $vpn_data/ovpn_env.sh |
|||
|
|||
# create network |
|||
sleep 1 |
|||
docker network create --attachable=true --driver=bridge --subnet=172.50.0.0/16 --gateway=172.50.0.1 $DOCKERnetwork |
|||
|
|||
#run container see ovpn_genconfig |
|||
docker run --net=none -it -v $vpn_data:/etc/openvpn -p 1194:1194 --rm $docker ovpn_genconfig -u udp://$IP:1194 \ |
|||
-N -d -c -p "route 172.50.20.0 255.255.255.0" -e "topology subnet" -s $OVPN_SERVER |
|||
|
|||
# create pki see ovpn_initpki |
|||
docker run --net=none -v $vpn_data:/etc/openvpn --rm -it $docker ovpn_initpki |
|||
|
|||
# see ovpn_copy_server_files |
|||
#docker run --net=none -v $vpn_data:/etc/openvpn --rm $docker ovpn_copy_server_files |
|||
|
|||
#create vpn see --cap-add=NET_ADMIN |
|||
sleep 1 |
|||
docker run --detach --name $NAME -v $vpn_data:/etc/openvpn --net=$DOCKERnetwork --ip=172.50.0.2 -p $P:1194/udp --cap-add=NET_ADMIN $docker |
|||
|
|||
sudo sysctl -w net.ipv4.ip_forward=1 |
|||
|
|||
#show created |
|||
docker ps |
|||
---- |
|||
|
|||
• IP=127.0.0.1 : localhost μέσα σε ένα κοντέινερ θα επιλυθεί στη στοίβα δικτύου αυτού του κοντέινερ |
|||
• P=1194 :port |
|||
• OVPN_SERVER='10.80.0.0/16' :καθορισμος διευθύνσεων και μασκών για τους Vpn clients |
|||
• vpn_data=$PWD/openvpn-services/ :κατάλογος για προσάρτηση δεδομένων |
|||
• NAME=swarmlab-vpn-services : ονομα του docker services |
|||
• docker run --net=none -it -v $vpn_data:/etc/openvpn -p 1194:1194 --rm $docker ovpn_genconfig -u udp://$IP:1194 \ -N -d -c -p "route 172.50.20.0 255.255.255.0" -e "topology subnet" -s $OVPN_SERVER :create config |
|||
• # create pki see ovpn_initpki docker run --net=none -v $vpn_data:/etc/openvpn --rm -it $docker ovpn_initpki :κλειδιά |
|||
• docker run --detach --name $NAME -v $vpn_data:/etc/openvpn --net=$DOCKERnetwork --ip=172.50.0.2 -p $P:1194/udp --cap-add=NET_ADMIN $docker : Run docker vpn service |
|||
|
|||
Πριν τρέξουμε το αρχείο αλλάζουμε τα δικαιώματα ως εξής |
|||
---- |
|||
chmod 700 create-vpn.sh |
|||
---- |
|||
Πέρνουμε τα παρακάτω αποτελέσματα αφού τρέξουμε την εντολή *./create-vpn.sh.* + |
|||
image:images/4_vpn_create_vpn.png[] + |
|||
|
|||
=== Δημιουργία χρήστη |
|||
.create-user.sh |
|||
|
|||
---- |
|||
USERNAME=test1 |
|||
vpn_data=$PWD/openvpn-services/ |
|||
docker=registry.vlabs.uniwa.gr:5080/myownvpn |
|||
|
|||
docker run -v $vpn_data:/etc/openvpn --rm -it $docker easyrsa build-client-full $USERNAME nopass |
|||
docker run -v $vpn_data:/etc/openvpn --log-driver=none --rm $docker ovpn_getclient $USERNAME > $USERNAME.ovpn |
|||
---- |
|||
Πριν τρέξουμε το αρχείο αλλάζουμε τα δικαιώματα ως εξής |
|||
---- |
|||
chmod 700 create-user.sh |
|||
---- |
|||
Πέρνουμε τα παρακάτω αποτελέσματα αφού τρέξουμε την εντολή *./create-user.sh.* + |
|||
image:images/4_vpn_user.png[] + |
|||
|
|||
=== Τροποποίηση αρχείου test1.ovpn και σύνδεση |
|||
Τροποποιούμε το αρχείο test1.ovpn ,όπως φαίνεται στη συνέχεια |
|||
---- |
|||
client |
|||
nobind |
|||
dev tun |
|||
comp-lzo |
|||
resolv-retry infinite |
|||
keepalive 15 60 |
|||
remote-cert-tls server |
|||
remote 192.168.1.5 1194 udp |
|||
float |
|||
---- |
|||
|
|||
image:images/4_vpn_test1ovpn.png[] + |
|||
|
|||
αντιγράφουμε το αρχείο |
|||
---- |
|||
cp test1.ovpn ../myproj/project/test1.vpn |
|||
---- |
|||
Στη συνέχεια εκτελούμε την παρακάτω εντολή για να γίνει η σύνδεση |
|||
|
|||
---- |
|||
openvpn --config ./test1.ovpn |
|||
---- |
|||
|
@ -0,0 +1,494 @@ |
|||
<!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">Α.Μ.</span> |
|||
<br><span id="revremark">171193</span> |
|||
</div> |
|||
</div> |
|||
<div id="content"> |
|||
<div id="preamble"> |
|||
<div class="sectionbody"> |
|||
<div class="paragraph"> |
|||
<div class="title"><strong>Docker</strong><br></div> |
|||
<p>Αρχικά θα πρέπει να κάνουμε μία προεργασία και να εγκαταστήσουμε τον docker και κάποια εργαλεία που θα χρησιμοποιήσουμε στην συνέχεια για την υλοποήση της εργασίας.</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="title">Εγκατάσταση Docker</div> |
|||
<div class="content"> |
|||
<pre>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - |
|||
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" |
|||
sudo apt update |
|||
|
|||
sudo apt install -y docker-ce |
|||
echo "or" |
|||
sudo apt install docker* |
|||
|
|||
sudo systemctl status docker |
|||
sudo usermod -aG docker username #οπου username το όνομα του χρήστη που θα δουλεύει με docker kate</pre> |
|||
</div> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="title">Docker compose</div> |
|||
<div class="content"> |
|||
<pre> sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
|||
sudo chmod +x /usr/local/bin/docker-compose |
|||
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose</pre> |
|||
</div> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="title">Swarmlab-sec</div> |
|||
<div class="content"> |
|||
<pre>cd /tmp |
|||
mkdir test |
|||
cd test |
|||
git clone https://git.swarmlab.io:3000/swarmlab/swarmlab-sec.git |
|||
cd swarmlab-sec |
|||
mkdir project |
|||
cd project |
|||
../install/usr/share/swarmlab.io/sec/swarmlab-sec create |
|||
../install/usr/share/swarmlab.io/sec/swarmlab-sec up size=3 σηκώνουμε 3 clusters</pre> |
|||
</div> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="title">Εγκατάσταση εργαλείων</div> |
|||
<div class="content"> |
|||
<pre>sudo apt update |
|||
sudo apt install hping3 |
|||
sudo apt install medusa |
|||
sudo apt-get install fail2ban |
|||
sudo apt install apache2 |
|||
sudo apt install openvpn</pre> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="sect1"> |
|||
<h2 id="_dosddos_attacks">1. Dos/DDos Attacks</h2> |
|||
<div class="sectionbody"> |
|||
<div class="sect2"> |
|||
<h3 id="_βρίσκουμε_την_ip">1.1. Βρίσκουμε την ip</h3> |
|||
<div class="paragraph"> |
|||
<p>Αρχικά συνδεόμαστε στον Master και βρίσκουμε την ip</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>../install/usr/share/swarmlab.io/sec/swarmlab-sec login |
|||
ifconfig</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Εδώ θα πάρουμε την ip 172.19.0.2<br> |
|||
<span class="image"><img src="images/1_ifconfig.png" alt="1 ifconfig"></span><br></p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_εύρεση_live_hosts">1.2. Εύρεση live hosts</h3> |
|||
<div class="paragraph"> |
|||
<p>Βρίσκουμε τους live hosts ,τις ips διευθύνσεις των workers και ενεργές πόρτες.</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>nmap -sP 172.19.0.* |
|||
nmap -p 172.19.0.3</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p><span class="image"><img src="images/1_nmap.png" alt="1 nmap"></span><br> |
|||
<span class="image"><img src="images/1_nmap_port.png" alt="1 nmap port"></span><br></p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_επίθεση_dos">1.3. Επίθεση DOS</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να ξεκινήσουμε την επίθεση πρέπει πρώτα να έχουμε εγκαταστήσει το hping3(όπως αναφέρθηκε παραπάνω ) ,αφού πρώτα συνδεθούμε στον worker_1 (ssh docker@172.19.0.3 ,password:docker).Επειτα τρέχουμε την παρακάτω εντολή για να επιτεθούμε στον worker_2 με ip 172.19.0.4.</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>sudo hping3 -V -c 400 -d 120 -S -p 22 --flood --rand-source 172.19.0.4</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>όπου,<br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>-c:αριθμός πακέτων (400)<br> |
|||
-d:μέγεθος πακέτων(120)<br> |
|||
-S:τύπος των πακέτων(SYN)<br> |
|||
-p:αριθμός port (22)<br> |
|||
-flood:κατακλυσμος από πακέτα<br> |
|||
-rand-source:εμφάνιση τυχαίων source ips<br></p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_παρακολούθηση_επίθεσης">1.4. Παρακολούθηση επίθεσης</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να παρακολουθήσουμε την επίθεση συνδεόμαστε στον worker_2 2 (ssh docker@172.19.0.4,password:docker) και τρέχουμε την παρακάτω εντολή</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>sudo tcpdump scr 172.19.0.3 |
|||
ή την εντολή tcpdump port 22 && 'tcp[tcpflags]== tcp-ack'</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>tcpflags ==tcp-syn :καταμέτρηση για τα πακέτα SYN που φτάνουν.<br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p><span class="image"><img src="images/1_tcpdump.png" alt="1 tcpdump"></span><br> |
|||
<span class="image"><img src="images/1_tcpdump2.png" alt="1 tcpdump2"></span><br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Το netstat εξετάζει τις συνδέσεις TCP .Εδώ η κίνηση στην πόρτα 22. |
|||
Το tcpdump μας δίνει μια περιγραφή για τα πακέτα που εντόπισε, όπως για παράδειγμα πληροφορίες για το μέγεθος και το περιεχόμενο των πακέτων. Τέλος, μόλις ολοκληρωθεί η διαδικασία εμφανίζεται το πλήθος των πακέτων που καταγράφηκαν, το πλήθος των πακέτων που εντοπίστηκαν με βάση το φίλτρο και το πλήθος των πακέτων που απορρίφθηκαν.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<div class="title">netstat</div> |
|||
<p><span class="image"><img src="images/1_netstat.png" alt="1 netstat"></span><br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Το netstat όπως βλέπουμε δεν κατάφερα να λειτουργήσει σωστά.</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_αντιμετώπιση_επίθεσης">1.5. Αντιμετώπιση επίθεσης</h3> |
|||
<div class="paragraph"> |
|||
<p>Για την προστασία έναντι των επιθέσεων αυτών θα τροποποιήσουμε το iptables ,όπως παρουσιάζεται και στην συνέχεια.</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>sudo iptables -I INPUT -s 172.19.0.3 -j DROP |
|||
sudo iptables -L |
|||
sudo iptables -nvL</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<div class="title">iptables -L</div> |
|||
<p><span class="image"><img src="images/1_iptables_L.png" alt="1 iptables L"></span><br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<div class="title">iptables -nVL</div> |
|||
<p><span class="image"><img src="images/1_iptables_nvL.png" alt="1 iptables nvL"></span><br></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="sect2"> |
|||
<h3 id="_medusa">2.1. Medusa</h3> |
|||
<div class="paragraph"> |
|||
<p>Το SSH είναι ένα ασφαλές πρωτόκολλο το οποίο επιτρέπει τη μεταφορά δεδομένων και την επικοινωνία μεταξύ δύο μελών του ίδιου δικτύου. |
|||
Για την επίτευξη μιας SSH Brute Force επίθεσης χρησιμοποιήσαμε το εργαλείο medusa και ένα pass.txt αρχείο με διάφορους κωδικούς.Θα επιτεθουμε και πάλι στον worker_2 με Ip 172.19.0.4</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>medusa -u docker -P pass.txt -h 172.19.0.4 -M ssh</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<div class="title">medusa</div> |
|||
<p><span class="image"><img src="images/2_medusa.png" alt="2 medusa"></span><br> |
|||
H επίθεση ήταν επιτυχής και βρήκαμε τον κωδικό του worker_2.</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_αντιμετώπιση_της_επίθεσης">2.2. Αντιμετώπιση της επίθεσης</h3> |
|||
<div class="paragraph"> |
|||
<p>Για να αντιμετωπίσουμε την επίθεση θα χρησιμοποιήσουμε το εργαλείο Fail2Ban.Το Fail2Ban είναι ένα πλαίσιο λογισμικού πρόληψης εισβολών που προστατεύει τους διακομιστές των υπολογιστών από βίαιες επιθέσεις. |
|||
Εμείς στην εργασία, τροποποιούμε το αρχείο jail.local ,όπως παρουσιάζεται στην συνέχεια,αφού πρώτα αντιγράψουμε το 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="listingblock"> |
|||
<div class="content"> |
|||
<pre>[sshd] |
|||
enabled = true |
|||
port = ssh |
|||
action = iptables-multiport |
|||
logpath = /var/log/auth.log |
|||
maxretry = 5</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>enables=true: για την ενεργοποίηση του μηχανισμού<br> |
|||
port=ssh Η πόρτα της ssh (22)<br> |
|||
action = iptables-multiport iptables για την απαγόρευση εισόδου<br> |
|||
logpath = /var/log/auth.logπου βρίσκεται το Αρχείο καταγραφής<br> |
|||
maxretry = 5 Μέγιστος αριθμός προσπαθειών</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Τρέχουμε παλι την παρακάτω εντολή και παρατηρούμε ότι δεν δεν μπορεί να πραγματοποιηθεί η επίθεση .</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>medusa -u docker -P pass.txt -h 172.19.0.4 -M ssh</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<div class="title">fail2ban</div> |
|||
<p><span class="image"><img src="images/2_fail_access.png" alt="2 fail access"></span><br> |
|||
Επιπλεόν δεν ήταν επιτυχης η προσπάθεια για συνδέσεις μέσω key.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="sect1"> |
|||
<h2 id="_localremote_ssh_forwarding">3. Local/Remote SSH Forwarding</h2> |
|||
<div class="sectionbody"> |
|||
<div class="paragraph"> |
|||
<p>Το SSH Tunneling, είναι η δυνατότητα χρήσης του ssh για τη δημιουργία αμφίδρομης κρυπτογραφημένης σύνδεσης δικτύου μεταξύ μηχανών μέσω των οποίων μπορούν να ανταλλάσσονται δεδομένα, συνήθως TCP / IP. |
|||
Παρέχει επίσης έναν τρόπο για να ασφαλίσετε την κυκλοφορία δεδομένων οποιασδήποτε δεδομένης εφαρμογής μέσω προώθησης θύρας, ουσιαστικά διοχέτευση οποιασδήποτε θύρας TCP / IP μέσω SSH. Αυτό σημαίνει ότι η κυκλοφορία δεδομένων της εφαρμογής κατευθύνεται να ρέει μέσα σε μια κρυπτογραφημένη σύνδεση SSH, έτσι ώστε να μην μπορεί να υποβλεφθεί ή να υποκλαπεί κατά τη μεταφορά.</p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Αρχικά τρέχουμε την υπηρεσία και βλέπουμε και την ip του μηχανήματός μας</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>sudo apachectl start |
|||
sudo netstat -antlupe</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<div class="title">apache</div> |
|||
<p><span class="image"><img src="images/3_apache.png" alt="3 apache"></span><br></p> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_local_port_forwarding">3.1. Local port forwarding</h3> |
|||
<div class="paragraph"> |
|||
<p>Στο local port forwarding , ο πελάτης επιθυμεί να αποκτήσει πρόσβαση σε κάποια υπηρεσία μιας απομακρυσμένης μηχανής. |
|||
Για την υλοποίηση του Local port forwarding τρεχουμε την παρακάτω εντολή</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>ssh -nNT -L 8000:localhost:80 kate@127.0.0.11</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p><span class="image"><img src="images/3_ssh_local.png" alt="3 ssh local"></span><br> |
|||
Η παραπάνω εντολή δημιουργεί μια σήραγγα ssh μεταξύ του υπολογιστή και του διακομιστή και προωθεί όλη την κίνηση από το localhost: 80 στο localhost: 8000 .</p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_remote_port_forwarding">3.2. Remote port forwarding</h3> |
|||
<div class="paragraph"> |
|||
<p>Στο remote port forwarding σκοπός είναι η αποκτήση πρόσβασης σε υπηρεσίες ή πόρους του απομακρυσμένου εξυπηρετητή, οι οποίες δεν είναι διαθέσιμες .Γι ‘αυτό το λόγο ,προωθείται η κίνηση από μία πύλη της τοπικής μηχανής σε μια πύλη της απομακρυσμένης μηχανής. |
|||
Για την υλοποίηση του remote port forwarding τρεχουμε την παρακάτω εντολή</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>ssh -nNT -R 4000:localhost:3000 user@127.0.0.11</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p><span class="image"><img src="images/3_ssh_remote.png" alt="3 ssh remote"></span><br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Η παραπάνω εντολή δημιουργεί μια σήραγγα ssh μεταξύ του υπολογιστή σας και του διακομιστή και προωθεί όλη την κίνηση από το localhost: 3000 (στον υπολογιστή σας) στο localhost: 4000 (στο πλαίσιο του διακομιστή).<br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>βλέπουμε την σελίδα του apache αν τρέξουμε curl localhost:4000. |
|||
<span class="image"><img src="images/3_curl.png" alt="3 curl"></span><br></p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="sect1"> |
|||
<h2 id="_vpn">4. VPN</h2> |
|||
<div class="sectionbody"> |
|||
<div class="paragraph"> |
|||
<p>Ένα εικονικό ιδιωτικό δίκτυο (VPN) επεκτείνει ένα ιδιωτικό δίκτυο σε ένα δημόσιο δίκτυο και επιτρέπει στους χρήστες να στέλνουν και να λαμβάνουν δεδομένα σε κοινόχρηστα ή δημόσια δίκτυα σαν να ήταν οι υπολογιστικές τους συσκευές συνδεδεμένες απευθείας στο ιδιωτικό δίκτυο.</p> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_δημιουργία_vpn">4.1. Δημιουργία VPN</h3> |
|||
<div class="paragraph"> |
|||
<p>Στον φάκελο swarmlab-sec δημιουργούμε έναν νέο φάκελο τον vpn.Εκεί φτάχνουμε δύο νέα αρχεία<br> |
|||
το create-vpn.sh και το create-user.sh.</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="title">create-vpn.sh</div> |
|||
<div class="content"> |
|||
<pre>#!/bin/bash |
|||
IP=127.0.0.1 # Server IP |
|||
P=1194 # Server Port |
|||
OVPN_SERVER='10.80.0.0/16' # VPN Network |
|||
|
|||
#vpn_data=/var/lib/swarmlab/openvpn/openvpn-services/ # Dir to save data ** this must exist ** |
|||
vpn_data=$PWD/openvpn-services/ |
|||
if [ ! -d $vpn_data ]; then |
|||
mkdir -p $vpn_data |
|||
fi |
|||
|
|||
NAME=swarmlab-vpn-services # name of docker service |
|||
DOCKERnetwork=swarmlab-vpn-services-network # docker network |
|||
docker=registry.vlabs.uniwa.gr:5080/myownvpn # docker image |
|||
|
|||
docker stop $NAME #stop container |
|||
sleep 1 |
|||
docker container rm $NAME #rm container |
|||
|
|||
# rm config files |
|||
rm -f $vpn_data/openvpn.conf.*.bak |
|||
rm -f $vpn_data/openvpn.conf |
|||
rm -f $vpn_data/ovpn_env.sh.*.bak |
|||
rm -f $vpn_data/ovpn_env.sh |
|||
|
|||
# create network |
|||
sleep 1 |
|||
docker network create --attachable=true --driver=bridge --subnet=172.50.0.0/16 --gateway=172.50.0.1 $DOCKERnetwork |
|||
|
|||
#run container see ovpn_genconfig |
|||
docker run --net=none -it -v $vpn_data:/etc/openvpn -p 1194:1194 --rm $docker ovpn_genconfig -u udp://$IP:1194 \ |
|||
-N -d -c -p "route 172.50.20.0 255.255.255.0" -e "topology subnet" -s $OVPN_SERVER |
|||
|
|||
# create pki see ovpn_initpki |
|||
docker run --net=none -v $vpn_data:/etc/openvpn --rm -it $docker ovpn_initpki |
|||
|
|||
# see ovpn_copy_server_files |
|||
#docker run --net=none -v $vpn_data:/etc/openvpn --rm $docker ovpn_copy_server_files |
|||
|
|||
#create vpn see --cap-add=NET_ADMIN |
|||
sleep 1 |
|||
docker run --detach --name $NAME -v $vpn_data:/etc/openvpn --net=$DOCKERnetwork --ip=172.50.0.2 -p $P:1194/udp --cap-add=NET_ADMIN $docker |
|||
|
|||
sudo sysctl -w net.ipv4.ip_forward=1 |
|||
|
|||
#show created |
|||
docker ps</pre> |
|||
</div> |
|||
</div> |
|||
<div class="ulist"> |
|||
<ul> |
|||
<li> |
|||
<p>IP=127.0.0.1 : localhost μέσα σε ένα κοντέινερ θα επιλυθεί στη στοίβα δικτύου αυτού του κοντέινερ</p> |
|||
</li> |
|||
<li> |
|||
<p>P=1194 :port</p> |
|||
</li> |
|||
<li> |
|||
<p>OVPN_SERVER='10.80.0.0/16' :καθορισμος διευθύνσεων και μασκών για τους Vpn clients</p> |
|||
</li> |
|||
<li> |
|||
<p>vpn_data=$PWD/openvpn-services/ :κατάλογος για προσάρτηση δεδομένων</p> |
|||
</li> |
|||
<li> |
|||
<p>NAME=swarmlab-vpn-services : ονομα του docker services</p> |
|||
</li> |
|||
<li> |
|||
<p>docker run --net=none -it -v $vpn_data:/etc/openvpn -p 1194:1194 --rm $docker ovpn_genconfig -u udp://$IP:1194 \ -N -d -c -p "route 172.50.20.0 255.255.255.0" -e "topology subnet" -s $OVPN_SERVER :create config</p> |
|||
</li> |
|||
<li> |
|||
<p># create pki see ovpn_initpki docker run --net=none -v $vpn_data:/etc/openvpn --rm -it $docker ovpn_initpki :κλειδιά</p> |
|||
</li> |
|||
<li> |
|||
<p>docker run --detach --name $NAME -v $vpn_data:/etc/openvpn --net=$DOCKERnetwork --ip=172.50.0.2 -p $P:1194/udp --cap-add=NET_ADMIN $docker : Run docker vpn service</p> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Πριν τρέξουμε το αρχείο αλλάζουμε τα δικαιώματα ως εξής</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>chmod 700 create-vpn.sh</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Πέρνουμε τα παρακάτω αποτελέσματα αφού τρέξουμε την εντολή <strong>./create-vpn.sh.</strong><br> |
|||
<span class="image"><img src="images/4_vpn_create_vpn.png" alt="4 vpn create vpn"></span><br></p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_δημιουργία_χρήστη">4.2. Δημιουργία χρήστη</h3> |
|||
<div class="listingblock"> |
|||
<div class="title">create-user.sh</div> |
|||
<div class="content"> |
|||
<pre>USERNAME=test1 |
|||
vpn_data=$PWD/openvpn-services/ |
|||
docker=registry.vlabs.uniwa.gr:5080/myownvpn |
|||
|
|||
docker run -v $vpn_data:/etc/openvpn --rm -it $docker easyrsa build-client-full $USERNAME nopass |
|||
docker run -v $vpn_data:/etc/openvpn --log-driver=none --rm $docker ovpn_getclient $USERNAME > $USERNAME.ovpn</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Πριν τρέξουμε το αρχείο αλλάζουμε τα δικαιώματα ως εξής</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>chmod 700 create-user.sh</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Πέρνουμε τα παρακάτω αποτελέσματα αφού τρέξουμε την εντολή <strong>./create-user.sh.</strong><br> |
|||
<span class="image"><img src="images/4_vpn_user.png" alt="4 vpn user"></span><br></p> |
|||
</div> |
|||
</div> |
|||
<div class="sect2"> |
|||
<h3 id="_τροποποίηση_αρχείου_test1_ovpn_και_σύνδεση">4.3. Τροποποίηση αρχείου test1.ovpn και σύνδεση</h3> |
|||
<div class="paragraph"> |
|||
<p>Τροποποιούμε το αρχείο test1.ovpn ,όπως φαίνεται στη συνέχεια</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>client |
|||
nobind |
|||
dev tun |
|||
comp-lzo |
|||
resolv-retry infinite |
|||
keepalive 15 60 |
|||
remote-cert-tls server |
|||
remote 192.168.1.5 1194 udp |
|||
float</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p><span class="image"><img src="images/4_vpn_test1ovpn.png" alt="4 vpn test1ovpn"></span><br></p> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>αντιγράφουμε το αρχείο</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>cp test1.ovpn ../myproj/project/test1.vpn</pre> |
|||
</div> |
|||
</div> |
|||
<div class="paragraph"> |
|||
<p>Στη συνέχεια εκτελούμε την παρακάτω εντολή για να γίνει η σύνδεση</p> |
|||
</div> |
|||
<div class="listingblock"> |
|||
<div class="content"> |
|||
<pre>openvpn --config ./test1.ovpn</pre> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div id="footer"> |
|||
<div id="footer-text"> |
|||
Last updated 2021-01-24 12:50:25 +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> |
Binary file not shown.
Loading…
Reference in new issue