Archives Posts
Nuit du Hack 2008

Nouvelle édition de la Nuit du Hack 2008, le 14 et 15 Juin.
Pour plus d’info ==> http://www.nuitduhack.com/
J’ai déjà fait les deux précédentes, je vous invite à participer activement a celle-ci.

Pour plus d’info ==> http://www.nuitduhack.com/
J’ai déjà fait les deux précédentes, je vous invite à participer activement a celle-ci.
Selon Wikipedia,
Security-Enhanced Linux, abrégé SELinux, est un LSM (Linux security module), qui permet de définir une politique d’accès MAC (mandatory access control) aux éléments d’un système basé sur Linux. Initié par la NSA sur la base de travaux menés avec SCC et l’université d’Utah aux USA (prototypes DTMach, DTOS, projet FLASK), son architecture dissocie l’application de la politique d’accès et sa définition. Il permet notamment de classer les applications d’un système, en différents groupes, avec des niveaux d’accès plus fins. Il permet aussi d’attribuer un niveau de confidentialité pour l’accès à des objets systèmes, comme des descripteurs de fichier, selon un modèle de sécurité multi-niveaux MLS (Multi level Security). SELinux utilise le modèle Bell LaPadula avec Type enforcement de SCC pour l’intégrité. Il s’agit d’un logiciel libre, certaines parties étant sous licences GNU GPL ou BSD.
Sous un système Linux classique le contrôle d’accès est dit de type DAC Discretionary Access Control Ce type de controle d’accès vérifie simplement le propriétaire, le groupe, et les autres (les autres désignent tout ce qui ne fait pas partie du propriétaire et du groupe) en se basant sur le GID et l’UID.
Cependant, les limites de ce système de permission est facile à définir. Imaginons que nous avons un compte sur une système type Linux. Un compte utilisateur avec tout les permissions qui l’en découle. Lorsque ce compte user exécute un processus, le processus hérite des droits du compte user mais aussi de tous ses privilèges.
Transposons ce modèle dans un autre contexte. Je travaille avec un collègue sur un projet professionnelle, et il hérite donc de mes privilèges et droit dans l’environnement professionnel mais il hérite également du droit de rentrer chez moi, dormir dans mon lit etc … Inacceptable non ?
Il est donc impensable de donnez tout les droits en se basant uniquement sur l’UID et le GID. Il faut intégrer une notion fondamentale dans la gestion de sa sécurité : le contexte.
Voici un exemple de droit classique linux.
[root@CentOs www]# ls -l
total 48
drwxr-xr-x 2 root root 4096 jan 16 02:36 cgi-bin
drwxr-xr-x 3 root root 4096 mar 12 22:38 error
drwxr-xr-x 3 root root 4096 mar 16 12:19 html
drwxr-xr-x 3 root root 4096 mar 12 22:38 icons
drwxr-xr-x 14 root root 4096 mar 12 22:42 manual
drwxr-xr-x 2 webalizer root 4096 mar 14 04:02 usage
Et voici les droits SELinux
drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t cgi-bin
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t error
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t html
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t icons
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t manual
drwxr-xr-x webalizer root system_u:object_r:httpd_sys_content_t usage
Ce qui m’intéresse c’est httpd_sys_content_t. C’est a dire que le répertoire html est accessible par l’utilisateur apache uniquement lors du contexte d’utilisation du deamon httpd.
Un utilisateur usurpant ou détournant l’identité d’apache n’aura pas accès au répertoire html car il sortira du contexte d’utilisation du deamon httpd. Fabuleux non ?
Pour le reste, je vous laisse avec l’utilisation de la commande chcon pour modifier les contextes et les permissions de SELinux.
Donc.
man chcon
Avec l’arrivée et la multiplication des hotspots, il devient néccéssaire d’avoir un compte sur les hotspots ou pas…

Afin de ByPass l’accès réseau. Qui se base sur votre compte en banque. Nous avons cherché un moyen de « sortir » du hotspot.
Sachant que le protocole dns étant le seul protocole autorisé a sortir. Nous avons donc constater que le tunneling serait je pense la meilleur solution.
Pour réussir, Il vous faut.
Un serveur VPN, et un laptop evidement.
Nous avons choisi openvpn en mode static key afin de géré cette connection.
Voici la configuration ip du server vpn
br0 Link encap:Ethernet HWaddr 00:18:39:AE:73:A7
inet addr:192.168.30.254 Bcast:192.168.30.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:231701 errors:0 dropped:0 overruns:0 frame:0
TX packets:142476 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13696143 (13.0 MiB) TX bytes:92534590 (88.2 MiB)lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MULTICAST MTU:16436 Metric:1
RX packets:1300 errors:0 dropped:0 overruns:0 frame:0
TX packets:1300 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:139429 (136.1 KiB) TX bytes:139429 (136.1 KiB)tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.10 P-t-P:10.10.10.11 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:542 errors:0 dropped:0 overruns:0 frame:0
TX packets:368 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:38381 (37.4 KiB) TX bytes:239530 (233.9 KiB)vlan1 Link encap:Ethernet HWaddr 00:18:39:AE:73:A8
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:75864 errors:0 dropped:0 overruns:0 frame:0
TX packets:49847 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:84198507 (80.2 MiB) TX bytes:5662097 (5.3 MiB)
On considère que l’interface vlan1 est l’interface public du server vpn. tun0 est l’interface virtuel d’entrée du vpn.
Voici le fichier de conf du server vpn
dev tun
ifconfig 10.10.10.10 10.10.10.11
secret /tmp/static.key
comp-lzo
port 53
verb 3
Pour plus d’info sur la configuration du vpn ici
Il faut copié cette clé sur le laptop que servira de client.
Il faut aussi activé le nat su le server vpn
iptables -t nat -A POSTROUTING -o vlan1 -j MASQUERADE
Voici le fichier de conf du client
dev tun
remote ipwanduservervpn
ifconfig 10.10.10.11 10.10.10.10
port 53
secret static.key
proto tcp-client
comp-lzo
route 192.168.30.0 255.255.255.0
Il vous reste plus qu’a vous connecter au hotspot dans votre gare préféré et de lancer votre connect vpn
et hop vous êtes chez vous :p
Suite à un précédent billet sur l7-filter
J’ai préparé des packets noyau 2.6.18 avec iptables l7 filter compilé prête à l’emploi.
Ils sont disponible sur le dépot http://corbier.homelinux.com/deb/l7-filter/
Faites-en bon usage.
J’ai aussi découvert une manière de cloner les disques virtuels via un outil disponible dans le paquet VirtualBox
VBoxManage clonevdi Master.vdi clone.vdi
En effet, la copie simple ne fonctionne pas (problème d’uuid).
Une autre manipulation peut être intéressante. On peut « compacter » un disque VDI.
VBoxManage modifyvdi Debian-l7-filter.vdi compact
Pour pouvoir faire un filtrage efficace il ne faut pas que s’appuyer sur les ports, en effet un firewall efficace doit pouvoir remonter jusqu’a la couche 7 du modele osi (la couche application), pour par exemple bloqué les protocole p2p ou les jeux en lignes.
Une solution existe sous linux c’est un module d’iptable: ‘l7-filter’.
Voici un exemple d’installation sur debian sarge.
Il faut tout d’abord savoir avec quelle noyau vous voulez l’installez
moi j’ai choisi le ’2.6.15′
Comme la doc l’indique il faut tout d’abort installer les outils de compilation et de manipulation du noyau
sudo apt-get install build-essential fakeroot kernel-package
Il est ensuite préférable de ne pas compiler en root, il faut donc ajouter son utilisateur aux groupes src
adduser mon_user src
Il faut ensuite chercher les sources de son noyau ou du noyau choisi
apt-cache search linux-source
et l’installer avec apt-get
sudo apt-get install linux-source-2.6.15
ensuite on decompresse les sources ( notez que les N° de version du noyau sont a adapté selon votre cas d’utilisation)
cd /usr/src
rm linux
On se place dans /usr/src et on supprime le lien symbolique si il existe deja
tar -xjvf linux-source-2.6.15.tar.bz2
ln -s linux-source-2.6.15 linux
on décompresse et on recréez le lien symbolique
Bon notre noyau est pret à etre modifier
On télécharge le patch L7-filter
http://sourceforge.net/project/showfile … p_id=80085
Layer 7 Patches
wget http://umn.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.2.tar.gz
Telecharge le patch
On telecharge les sources d’iptables
wget http://netfilter.org/projects/iptables/files/iptables-1.3.5.tar.bz2
on extrait les deux archives
tar -xzvf netfilter-layer7-v2.2.tar.gz && tar -xjvf iptables-1.3.5.tar.bz2
ensuite copy le patch pour le noyau et pour iptables
cp netfilter-layer7-v2.2/kernel-2.6.13-2.6.16-layer7-2.2.patch linux && cp netfilter-layer7-v2.2/iptables-layer7-2.2.patch iptables-1.3.5
on applique le patch au noyau
cd linux
patch -p1 < kernel-2.6.13-2.6.16-layer7-2.2.patch
cd ..
on patch également les sources d’iptables
cd iptables-1.3.5
patch -p1 < iptables-layer7-2.2.patch
ensuite on install le iptables patché dans les sources du noyau make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
Voila il nous reste plus qu’a activer ces modules pour la compilation du noyau
cd ../linux
make menuconfig
maintenant il reste a activer les modules suivant comme l’indique la doc l7-filter
* EXPERIMENTAL (Code maturity level options & Prompt for development and/or incomplete code/drivers)
* Netfilter (Device Drivers &Networking support & Networking Options & Network packet filtering)
* Connection tracking (Network packet filtering & IP: Netfilter Configuration & Connection tracking)
* « Connection tracking flow accounting » and « IP tables support » (on the same screen)
* And finally, « Layer 7 match support »
* Optional: Lots of other Netfilter options, ntably « FTP support » and other matches. If you don’t know what you’re doing, go ahead and enable all of them.
sauvegarder le tout et installer comme le spécifie la doc apt-get install cramfsprogs initrd-tools il nous reste a concevoir les packages .deb attention cela peut etre long selon la puissance de votre machine
« fakeroot make-kpkg
append-to-version=.181004 kernel_imageinitrd binary »
maintenant que la compilation a été effectuer avec succes il faut l’installer
cd ..
dpkg -i kernel-image-2.6.15.181004_10.00.Custom_i386.deb
Voila qui est fait il nous reste a rebooter sur le noyau et a installer les protocoles générique de l7-filter
Un fois redémarrez telecharger les protocoles
wget http://superb-west.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2006-05-29.tar.gz
on décompresse
tar -xzvf l7-protocols-2006-05-29.tar.gz
et on l’install
cd l7-protocols-2006-05-29
make install
Voila c’est terminer vous pouvez utiliser l7-filter en modules d’iptables
pour la syntax c’est basique
iptables specify table & chain -m layer7 –l7proto name of protocol -j action
par exemple
iptables -I INPUT -m layer7 –l7proto http -j drop
redirigeras tout les paquets http en entrer vers /dev/null
Enjoy :p