SE5 IdO sécurité des objets 2025/2026 b1
Serveur virtuel (17/09)
Dans un premier temps, on vient créer un serveur virtuel sur capbreton avec la commande xen-create-image --hostname=SE5.vdetrez --dhcp --dir=/usr/local/xen --size=10G --memory=2G --dist=daedalus --bridge=bridgeStudents
Ensuite, sur capbreton dans le dossier /etc/network/interfaces.d on vient créer un fichier g1_vdetrez pour mettre en place une nouvelle interface dans le VLAN 410.
auto Trunk.410
iface Trunk.410 inet manual
vlan-raw-device Trunk
up ip link set $IFACE up
down ip link set $IFACE down
auto g1_vdetrez
iface g1_vdetrez inet manual
bridge_ports Trunk.410
up ip link set $IFACE up
down ip link set $IFACE down
On a maintenant accès à la machine SE5.vdetrez (en ayant évidemment fait l'erreur de mettre "." à la place de "-") et on vient y configurer nos adresses IPv4.
Mon adresse IPv4 routée est la 172.26.145.100 et mon IPv4 dans le VLAN 410 est 172.16.10.0
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 172.26.145.110
netmask 255.255.255.0
gateway 172.26.145.251
# post-up ethtool -K eth0 tx off
auto eth1
iface eth1 inet static
address 172.16.10.0/24
#
# The commented out line above will disable TCP checksumming which
# might resolve problems for some users. It is disabled by default
#
On vérifie avec la commande ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3e:23:74:41 brd ff:ff:ff:ff:ff:ff
inet 172.26.145.110/24 brd 172.26.145.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2001:660:4401:6050:216:3eff:fe23:7441/64 scope global dynamic mngtmpaddr
valid_lft 853sec preferred_lft 753sec
inet6 2a01:c916:2047:c850:216:3eff:fe23:7441/64 scope global dynamic mngtmpaddr
valid_lft 2591853sec preferred_lft 604653sec
inet6 fe80::216:3eff:fe23:7441/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3e:23:74:42 brd ff:ff:ff:ff:ff:ff
inet 172.16.10.0/24 brd 172.16.10.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe23:7442/64 scope link
valid_lft forever preferred_lft forever
Et on constate que notre serveur a accès à Internet avec la commande ping 8.8.8.8
Point d'accès WiFi (29/09)
Pour l'instant, nous mettons de côté ce point du TP car il n'est pas utile pour la suite.
Sécurisation WiFi par WPA2-PSK
Pour communiquer avec le routeur Cisco, on branche le port série en USB et on se connecte avec la commande minicom -D /dev/ttyUSB0 -b 9600. La première étape fut la création du SSID SE5-SSID10.
dot11 ssid SE5-SSID10
vlan 410
authentication open
authentication key-management wpa version 2
wpa-psk ascii Cisco2025
exit
Puis, on configure l'interface Dot11Radio0
interface dot11radio 0
encryption mode ciphers aes-ccm
ssid SE5-SSID10
station-role root
no shutdown
Après cela, on retourne sur notre serveur virtuel et on y implémente un serveur DHCP pour l'attribution des IP aux machines se connectant sur le routeur. On retrouve cette configuration dans /etc/dhcp/dhcpd.conf
# dhcpd.conf
option domain-name "plil.info";
option domain-name-servers ns.plil.info;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
subnet 172.16.10.0 netmask 255.255.255.0 {
range 172.16.10.100 172.16.10.200;
option domain-name-servers 172.16.10.1;
option routers 172.16.10.1;
default-lease-time 600;
max-lease-time 7200;
}
Puis, on implémente un serveur DNS minimal dans le fichier /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
recursion yes;
allow-query {172.16.10.0/24; 127.0.0.1;};
forwarders {
8.8.8.8;
1.1.1.1;
};
dnssec-validation auto;
listen-on {127.0.0.1; 172.16.10.1;};
listen-on-v6 { none; };
};
Et enfin, on met en place une mascarade entre le VLAN 410 et le routeur du réseau des salles de projets pour donner l'accès à Internet.
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
385 133K MASQUERADE 0 -- * eth0 172.16.10.0/24 0.0.0.0/0
0 0 MASQUERADE 0 -- * eth0 172.16.10.0/24 0.0.0.0/0
Interception de flux (30/09)
Redirection par DNS
Pour cette partie, on va ajouter une zone primaire à notre serveur DNS avec le nom Internet du site que l'on veut rediriger vers notre machine.
Ici, ce sera le merveilleux moodle.com
D'abord, on modifie /etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "moodle.com" {
type master;
file "/etc/bind/db.moodle.com";
};
Puis, on crée la fameuse zone db.moodle.com dans le même répertoire
$TTL 200
@ IN SOA ns.moodle.com. admin.moodle.com. (
5 ;
3600 ;
1800 ;
604800 ;
86400 ;
)
IN NS ns.moodle.com.
ns IN A 172.16.10.1
@ IN A 172.16.10.1
www IN CNAME ns
Pour vérifier si notre configuration est correcte, on exécute ces deux commandes :
sudo named-checkconf
sudo named-checkzone moodle.com /etc/bind/db.moodle.com
Redirection réseau
Dans cette partie, on ajoute une règle iptables pour rediriger le flux TCP vers un port local, le 8080.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 8080
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REDIRECT 6 -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8080
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
385 133K MASQUERADE 0 -- * eth0 172.16.10.0/24 0.0.0.0/0
0 0 MASQUERADE 0 -- * eth0 172.16.10.0/24 0.0.0.0/0
Serveur apache sécurise (04/10)
Dans un premier temps, on va créer un certificat auto-signé :
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/apache/apache-selfsigned.key -out /etc/ssl/apache/apache-selfsigned.crt -subj "/C=FR/ST=Nord/L=Lille/O=Popo/CN=moodle.com"
Puis, on configure Apache2
GNU nano 7.2 /etc/apache2/sites-available/secure-site.conf
<VirtualHost *:443>
ServerName moodle.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/apache/apache.crt
SSLCertificateKeyFile /etc/ssl/apache/apache.key
# Optionnel : log
ErrorLog ${APACHE_LOG_DIR}/ssl-error.log
CustomLog ${APACHE_LOG_DIR}/ssl-access.log combined
</VirtualHost>
# Redirection HTTP ^f^r HTTPS
<VirtualHost *:80>
ServerName moodle.com
Redirect permanent / https://moodle.com/
</VirtualHost>
Maintenant, en prévision de la suite (voir explication dans Machine virtuelle Android), on va créer une autorité de certification nommée CertiFiable :
openssl req -x509 -new -nodes -keyout ca.key -sha256 -days 365 -out ca.crt -subj "/CN=CertiFiable"
Puis, on vient générer une demande de signature de certificat :
openssl req -new -newkey rsa:2048 -nodes -keyout apache.key -out apache.csr -subj "/CN=moodle.com"
Enfin, on vient signer le site avec le certificat de CertiFiable :
openssl x509 -req -in apache.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out apache.crt -days 365 -sha256
Machine virtuelle android
Première tentative
Actuellement, si on navigue sur internet et que l'on se rend sur moodle.com, on atterrit bien sûr le faux Moodle, mais comme le téléphone ne connait pas l'autorité de certification nommé CertiFiable, on a le droit à ce magnifique message de connexion non sécurisée :
Malheureusement, il est aujourd'hui impossible d'ajouter facilement une autorité de certification sur son téléphone.
C'est pour cela qu'une solution proposée est d'installer une machine virtuelle d'une ancienne version d'Android où il était possible d'en ajouter.
En ayant suivi ce tuto (https://help.clouding.io/hc/en-us/articles/4405454393756-How-to-virtualize-Android-with-QEMU-KVM), j'ai réussi à installer une VM sur Zabeth4 (j'ai dû prendre une autre iso car celle du site était inaccessible).
J'ai installé VNC Viewer pour pouvoir manipuler la machine virtuelle.
En étant sur la VM, j'ai pu me rendre compte qu'il n'était pas possible de se connecter au WiFi, c'est la connexion du pc qui est simulé comme un réseau WiFi dans la VM.
J'ai pu réfléchir à deux solutions avant que la VM ne crash d'elle-même et soit impossible à redémarrer...
La première est toute simple, connecter la Zabeth directement au WiFi, ce qui est difficile à distance. La seconde, qui est je pense possible, est de changer la carte réseau dans les fichiers de conf de la VM pour mettre celle supportant le WiFi.
Je n'ai donc pu tester aucune de ces deux solutions, la VM n'étant plus.
Seconde tentative
qemu-system-x86_64 -net nic -net user -m 1024 -enable-kvm -display sdl -drive file=android.img,format=raw
qemu-system-x86_64 -net nic -net user -m 1024 -enable-kvm -display sdl -drive file=android.img,format=raw -cdrom *android-x86*.iso -boot d
qemu-system-x86_64 -m 2048 -enable-kvm -cpu host -smp 2 -display sdl -drive file=android.img,format=raw,if=virtio -usb -device usb-host,vendorid=0x148f,productid=0x5370
Ultime tentative
//TO DO Ajouter méthode routage android Android studio.
Machine android (06/10)
Pour cette dernière partie, j'ai retrouvé une tablette sous Android 4.4 KitKat qui permet d'ajouter des autorités de certification.
C'est donc ce que j'ai fait :
Maintenant, on constate en se connectant sur moodle.com à partir de cette tablette que l'on est bien redirigé vers le faux site et qu'il est sécurisé avec le magnifique cadenas vert.
(cette page web date du 06/10/25, elle n'est plus valable depuis le 10/10/25...)
Nedis Wi-Fi Smart Personal Scales
Dans ce second TP, nous allons jouer avec ce pèse personne de nedis.
Dans un premier temps, j'ai connecté la balance au résau SE5-SSID10.
Puis j'ai remarqué que quand je tentai de me peser, la balance affiche err2.
Après une courte investigation, il s'agit d'une balance qui émet des signaux électriques pour analyser la composition corporelle donc si on se pèse avec des chaussures, cela pose problème.
Pour la suite du projet, on se pèsera avec les mains.
On constate sur ces paquets la requête de la balance pour obtenir une IP, puis le moment ou elle l'obtient. A chaque fois qu'elle redémarre, elle vient récupérer une IP, elle n'aura donc pas forcement la 105.
Je peux donc ping ma balance depuis mon pc (celui qui host ma vm)
tcpdump -i eth1 -n port 53:
14:46:51.115996 IP 172.16.10.105.49153 > 172.16.10.1.53: 13861+ A? m2.tuyaeu.com. (31)
14:46:51.125611 IP 172.16.10.1.53 > 172.16.10.105.49153: 13861 3/0/0 A 3.120.92.134, A 18.184.31.90, A 35.156.44.172 (79)
14:46:51.168250 IP 172.16.10.105.49153 > 172.16.10.1.53: 59035+ A? a3.tuyaeu.com. (31)
14:46:51.177967 IP 172.16.10.1.53 > 172.16.10.105.49153: 59035 3/0/0 A 18.198.62.99, A 18.158.227.228, A 3.67.116.46 (79)
14:46:51.703179 IP 172.16.10.102.57661 > 172.16.10.1.53: 30982+ AAAA? a1.tuyaeu.com. (31)
14:46:51.706085 IP 172.16.10.102.57662 > 172.16.10.1.53: 15654+ A? a1.tuyaeu.com. (31)
14:46:51.713159 IP 172.16.10.1.53 > 172.16.10.102.57661: 30982 3/0/0 AAAA 2a05:d014:afa:af02:262a:be09:e328:ff21, AAAA 2a05:d014:afa:af01:87dc:dc67:35a1:5bfe, AAAA 2a05:d014:afa:af00:1ee2:1f00:e061:e8bf (115)
14:46:51.715736 IP 172.16.10.1.53 > 172.16.10.102.57662: 15654 3/0/0 A 3.78.92.3, A 35.159.150.3, A 3.121.33.91 (79)
56 packets captured
56 packets received by filter
0 packets dropped by kernel
[4343449.827028] device eth1 left promiscuous mode
visiblement notre balance communque avec tuya via m2.tuyaeu.com et a3.tuyaeu.com
et la vm android a1.tuyaeu.com
tcpdump -i eth1 -n port 53: après avoir crée dns, site, etc a1.tuyaeu.com
root@SE5:/etc/apache2/sites-available# tcpdump -i eth1 -n port 53
[5544865.540418] device eth1 entered promiscuous mode
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
12:30:55.146437 IP 172.16.10.1.53 > 172.16.10.100.17620: 23156 5/0/0 CNAME reddit.map.fastly.net., A 151.101.129.140, A
151.101.1.140, A 151.101.65.140, A 151.101.193.140 (129)
12:30:55.168796 IP 172.16.10.1.53 > 172.16.10.100.24249: 64622 2/0/0 CNAME us-central1-gcp.api.sc-gw.com., A 35.190.43.
134 (109)
12:30:55.322498 IP 172.16.10.100.26394 > 172.16.10.1.53: 29420+ A? scontent-cdg4-1.xx.fbcdn.net. (46)
12:30:56.095075 IP 172.16.10.100.62675 > 172.16.10.1.53: 46396+ A? cf-st.sc-cdn.net. (34)
12:30:56.121796 IP 172.16.10.1.53 > 172.16.10.100.62675: 46396 1/0/0 A 3.163.248.4 (50)
12:30:56.539099 IP 172.16.10.1.53 > 172.16.10.100.26394: 29420 1/0/0 A 185.60.219.2 (62)
12:30:57.289763 IP 172.16.10.100.7071 > 172.16.10.1.53: 14247+ A? usc1-gcp-v62.api.snapchat.com. (47)
12:30:57.302767 IP 172.16.10.1.53 > 172.16.10.100.7071: 14247 2/0/0 CNAME usc1-gcp-v62.api.sc-gw.com., A 34.120.159.232
(103)
12:30:58.490060 IP 172.16.10.105.49153 > 172.16.10.1.53: 50294+ A? m2.tuyaeu.com. (31)
12:30:58.490174 IP 172.16.10.1.53 > 172.16.10.105.49153: 50294* 2/0/0 CNAME ns.tuyaeu.com., A 172.16.10.1 (64)
12:30:58.540041 IP 172.16.10.105.49153 > 172.16.10.1.53: 23785+ A? a3.tuyaeu.com. (31)
12:30:58.540132 IP 172.16.10.1.53 > 172.16.10.105.49153: 23785* 2/0/0 CNAME ns.tuyaeu.com., A 172.16.10.1 (64)
12:31:00.979103 IP 172.16.10.100.63625 > 172.16.10.1.53: 63574+ A? gql-fed.reddit.com. (36)
12:31:00.997721 IP 172.16.10.1.53 > 172.16.10.100.63625: 63574 5/0/0 CNAME reddit.map.fastly.net., A 151.101.65.140, A
151.101.129.140, A 151.101.193.140, A 151.101.1.140 (135)
12:31:04.461507 IP 172.16.10.102.63971 > 172.16.10.1.53: 20792+ A? discord.com. (29)
12:31:04.461519 IP 172.16.10.102.54572 > 172.16.10.1.53: 15444+ Type65? discord.com. (29)
12:31:04.493098 IP 172.16.10.1.53 > 172.16.10.102.63971: 20792 5/0/0 A 162.159.138.232, A 162.159.136.232, A 162.159.12
8.233, A 162.159.135.232, A 162.159.137.232 (109)
12:31:04.493306 IP 172.16.10.1.53 > 172.16.10.102.54572: 15444 1/0/5 Type65 (158)
18 packets captured
18 packets received by filter
0 packets dropped by kernel