= Εργασία Εξαμήνου Ασφάλεια Δικτύων και Επικοινωνιών
Γουργολίτσα Αικατερίνη
Α.Μ. :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
----

