Open-Source : Réseau d’entreprise sécurisé … ou pas

Bijour …

Alors voilà, maintenant que la présentation de notre projet pour ma licence pro CDED est terminée, je peux montrer l’architecture de notre réseau sans avoir peur d’être plagié par des concurrents ^^.

Donc le but de notre réseau est d’avoir :

  • Une sécurité assez élevée sans pour autant compromettre l’utilisation du réseau par les utilisateurs (le problème de tout admin …).
  • Un coût très faible autant niveau architecture logicielle que matérielle
  • Une maintenance aisée du réseau (ajout/suppression de postes/utilisateurs)

Le contexte de notre projet :

Une petite entreprise veut revoir son réseau et ses logiciels/sites web pour plus de productivité, avec pas mal d’intéractions avec l’extérieur (Obligation d’utiliser une base de données extérieur au réseau, plusieurs site web publié avec utilisation de certificats pour le chiffrement (pour l’authentification ça aurait été un peu trop :p), …).

Ce qui a donné le réseau suivant pour notre groupe :

Network-Skipify-final-cipher

L’architecture est plus ou moins classique, on sépare les serveurs des utilisateurs, côté chiffrement :

  • Toute communication est chiffrée entre les serveurs (3DES en phase 1 et AES en phase 2) on a poussé le vice jusqu’à chiffrer les communication avec les clients Linux du réseau (bien sûr toute communication non chiffrée sur le réseau des serveurs est automatiquement rejetée).
  • Les communications vers la base de données sont chiffrés par un tunnel (ssh avec une simple redirection de ports).
  • Les communications depuis les internautes sont chiffrés par un certificat valide en AES

Coté architecture matérielle :

  • 4 serveurs sous debian 5.0 patché avec GrSecurity pour les ACL et le W^X (ma licence étant spé développement, on a pas pu pousser la chose très loin … dommage, ce patch me semble très prometteur, et devrait devenir une norme dans le domaine de l’hébergement).
  • 1 client XP ajouté au domaine NT (utilisation du remote announce de samba pour l’utilisation du PDC hors du réseau sécurisé des serveurs), ainsi qu’un client linux avec authentification direct à l’annuaire LDAP

Coté architecture logicielle :

  • Sur le reverse proxy / Firewall :
    • Apache2 avec modsecurity couplé avec l’IDS, modevasive (pour les bruteforces et DoS de faible ampleur), mod proxy pour la mise en place d’un reverse proxy pour protéger le serveur web
    • IDS Prelude couplé avec Snort
    • Utilisation d’arpwatch pour les attaques en interne (un script kidy qui réussit à pirater le wifi, la connexion d’un employé au réseau local via son IPhone ;), ….)
    • Fail2Ban pour les bruteforces sur le service SSH
    • IPTable comme firewall
  • Sur le serveur WWW et d’appli : apache2 avec le mod rails pour les applis web en ruby (déploiement et màj des applis simplifié par capistrano …)
  • sur le PDC un serveur Samba avec OpenLDAP

Et hop … on obtient un réseau pas mal sécurisé et gratuit (faut juste payer l’informaticien ;)).

Par contre, en discutant avec les profs après déploiement de l’architecture sur 8 machines virtuelles (vmware … le proprio saymal mais bon), on s’est rendu compte de quelques problèmes (et ouai … je suis encore un élève ;)) :

  • Comme un noob j’avais laissé la configuration IPv6, toute la partie IPsec que j’avais déployée etait alors totalement inutile puisque centré sur l’IPv4 seulement, heureusement, j’avais fait des bind explicite sur les adresses IPv4, seul les serveurs http et dns était accessible en IPv6.
  • Sinon, le problème propre au déploiement sur machines virtuelles (comme un noob encore une fois), déploiement de toutes les machines en bridge sur le réseau de l’IUT (l’admin réseau ne m’a pas vu … mais un autre groupe s’est fait gaulé ^^). N’importe qui aurait pu se connecter sur notre réseau en connaissant nos ip. A ma décharge je dirais deux choses : je savais pas qu’en host-only c’est pas seulement l’hote et la mv, mais l’hote et toutes les mv qui peuvent discuter ensemble, ce qui ne corrige en rien le problème des connexions direct sur notre réseau depuis d’autre machines virtuelles, puisque tout les groupes ont montés leurs réseau sur la même machine

Donc voilà … un petit retour sur l’utilisation de l’open-source pour la sécurité et le déploiement d’un réseau entièrement gratuit, qui se rapproche plus d’une multi-national (bien qu’encore très très très loin) que du réseau familial … qui malheureusement est encore présent dans beaucoups d’entreprises en france (et même des grosses boites … pour qui la sécurité consiste à placer des filtres extrèmement lourd sur leurs proxy et mettre à jour des AV …).

Marre du spam sur wordpress ??

Plopinou …

Une rapide technique pour baisser d’un nombre assez important le spam sur un blog wordpress, en profitant de la gentillesse des spammers ^^.
En effet, la plupart du temps :

  • les ip tournent (donc impossible de bannir toutes les ip)
  • les adresses mails sont générées à la volées et comme c’est sur le domaine de gmail, bannir le domaine est impossible
  • Les commentaires changent …

Il reste donc une information qu’ils donnent, et qu’ils ne semblent pas changer … l’url de leurs sites, qui terminent toujours par « map.html » … sympa non ??

Donc pour leurs envoyer un message plein d’amour et de paix on peut gentillement modifier le fichier wp-comments-post.php : (après la ligne 38)
[sourcecode language=php]
if(preg_match("#^.*/map.html$#",$comment_author_url))
die("Go home and die!!!");
[/sourcecode]
Et voilà … 90% du spam de vos blogs devraient disparaitre. (reste plus qu’à trouver un filtre pour les casinos et on héradique toutes forme de spam sur les blogs ^^ (pas complexe je pense, mais ça fait un bail que j’en ai plus chopé donc je peux pas créer la regexp :D) ).

Petite note : J’ai testé le code ci-dessous pendant une journée et ma liste de commentaires indésirables est encore vide … ce qui est un miracle !!! Je chopais entre 25 et 50 spams par jour … (ok c’est pas beaucoup … mais c’est quand même ça de moins).

EDIT : Ne pas oublier de refaire la modification, après une mise à jour de wordpress (comme tous les fichiers sont réecrit, on perd les modifications et on remarque tout de suite le spam qui revient ;))

Sécurité : IDS Prelude et SNORT

Bijour …

Bé voilà … la dernière partie (ou pas) concernant l’IDS Prelude, et donc ici ben verra juste comment compiler SNORT et le connecter au prelude-manager.

Comme d’hab :
[sourcecode language=bash]
apt-get install make libpcre3-dev libpcap0.8-dev gcc libprelude-dev
cd /usr/src
wget http://dl.snort.org/snort-current/snort-2.8.4.1.tar.gz
tar -xvf snort-2.8.4.1.tar.gz
cd snort-2.8.4.1
./configure -enable-dynamicplugin –enable-prelude
make && make install
mkdir /etc/snort
cp etc/* /etc/snort/
apt-get install snort-rules-default
[/sourcecode]
Ensuite il vous faut modifier le fichier /etc/snort/snort.conf et modifier les lignes concernant :
[sourcecode language=bash]
var RULE_PATH ../rules
var PREPROC_RULE_PATH ../preproc_rules
[/sourcecode]
et les remplacez par :
[sourcecode language=bash]
var RULE_PATH rules
var PREPROC_RULE_PATH preproc_rules
[/sourcecode]
Ensuite … c’est pareil que pour la synchronisation avec prelude-lml et prelude-correlator, ce qui donne :
[sourcecode language=bash]
screen -S registration
prelude-admin registration-server prelude-manager
[/sourcecode]
Notez le mot de passe, puis faites Ctrl+a puis d

screen
prelude-adduser register snort "idmef:w" 127.0.0.1 --uid 0 --gid 0

Après 15-20 minutes, donnez-lui le mot de passe demandé, ensuite faites Ctrl+a puis d, lancez un screen -r registration répondez y et si la réponse est « Registration successful » c’est bon … vous pouvez configurer snort et voir apparaitre les alertes sur prewikka (si vous l’avez configuré comme dans l’un de mes derniers tuto …).

Sécurité : Coupler l’IDS Prelude avec mod_security

Bijour …

Une (très)+ petite suite avec l’IDS Prelude (toujours pas snort ^^), pour pouvoir profiter des logs qu’écrit le mod-security, il faut mettre à jour un fichier :
/etc/prelude-lml/ruleset/modsecurity.rules
et le remplacer par celui que l’on peut trouver ici

Pour ce faire :
Il faut modifier le fichier /etc/prelude-lml/prelude-lml.conf
Cherchez la ligne :
qui correspond à :
file = /var/log/apache2/access.log
copiez-là en-dessous et changez access par error
ce qui devrait vous donner :
file = /var/log/apache2/access.log
file = /var/log/apache2/error.log
Puis :
[sourcecode language=bash]
cd /etc/prelude-lml/ruleset/
mv modsecurity.rules modsecurity.rules.bak
wget https://dev.prelude-ids.com/repositories/entry/prelude-lml/plugins/pcre/ruleset/modsecurity.rules?format=raw –no-check-certificate
mv modsecurity.rules\?format\=raw modsecurity.rules
/etc/init.d/prelude-lml restart
[/sourcecode]
Et ensuite, en allant sur l’url de votre prewikka (installé précédemment), vous devriez voir apparaitre toutes les erreurs/tentatives de hack/… qui sont effectuées sur votre serveur web.

Sécurité : Installation de l’IDS Prelude sur debian

Plop à tous …
Aujourd’hui je suis en forme alors … je fait un « gros tuto » ^^ from scratch, comme très peu de tuto sont à jour de ce côté là autant tout faire de zéro ;).

[La super intro trop naze]
Je dois tout d’abord avouer que je savais pas trop ce que c’était un IDS avant que je l’installe ^^ (enfin j’avais une petite idée, mais je ne m’attendais pas à un truc aussi complet avec prelude). Donc voilà ça sert à quoi ?? ça permet d’avoir une idée des menaces/évènement en « temps réel » sur votre réseau/machine, et avec prelude on peut faire pas mal de chose, que ce soit suivre l’authentification des utilisateurs sur le réseau jusqu’à la détection d’attaque sur un service en particulier (http, avec la possibilité de coupler la chose avec le mod_security), ou bien la « préparation » d’une attaque avec la détection des « Services Recognition » et encore plein d’autre réjouissance.

Pourquoi j’installe ça ?? C’est toujours et encore pour le super projet de licence en Dev ^^ (et ouai on fait du réseau en Dev :D). Et comme je savais que j’allais faire un tuto dessus, je me suis mis de côté la manipulation (ça peut toujours me servir).

Donc voilà, pour ce tuto il nous faut au moins un serveur (avec plusieurs se serait le pied, car on peut faire un truc tentaculaire en connectant plusieurs sondes/logger sur le prelude-manager, ce qui peut être très intéressant sur un grand réseau).
[/La super intro trop naze]

Pour commencer l’installation … tout débute par un gentil apt-get install comme toutes les histoires d’amour à la debian … par contre je vous conseil pas d’éxecuter la commande direct … autant y aller paquet par paquet (en suivant le tuto quoi …), parce que certain mettent pas mal de temps à s’installer.

Sinon, pour les barbares …
[sourcecode language=bash]apt-get install mysql-server prelude-manager prelude-lml prelude-correlator prewikka libapache2-mod-python librelude-dev snort-rules-default arpwatch screen[/sourcecode]

Donc vous remarquerez qu’il faut :

  • Un serveur apache (pas vraiment obligatoire, mais c’est super sympa avec prewikka) avec le mod python (et le mod_security si votre serveur est destiné à héberger des applications web)
  • Un serveur mysql (ça c’est malheureusement obligatoire, j’aurais bien voulu m’en passer mais bon …).
  • Prelude-lml est un logiciel qui va parser tous les logs (ou presque … faut configurer la chose quoi) de votre machine (on peut l’installer sur tous les serveurs d’un réseau, histoire d’avoir un bon suivi)
  • Prelude-manager est un logiciel qui s’occupe de tous centraliser (la logique voudrait qu’on en install qu’un seul ^^).
  • ArpWatch permet de détecter certaine attaque de type arp poisonning (assez sympa …)
  • Snort-rules-default qui contient pas mal de règle de détection …
  • Screen qui sera juste utilisé pour l’installation qui peut être longue … très longue 😉

Vous aurez remarqué que l’on installe pas snort … on compilera la version dont on a besoin dans un autre tuto plus tard.
Donc première chose que l’on fait :

[sourcecode language=bash]apt-get install mysql-server prewikka libapache2-mod-python librelude-dev snort-rules-default arpwatch screen[/sourcecode]

Répondez bien à toutes les questions (genre mots de passe de base de données, gardez-les dans un coin)

Installation de prelude-manager
[sourcecode language=bash]
apt-get install prelude-manager
[/sourcecode]
Lorsqu’il en est à :
prelude-manager
ça peut durer plusieurs minutes (pour ma part 20 minutes) … donc vous pouvez aller jouer à WoW … (on peut pas avancer sans lui …).

Installation de prelude-lml
Une fois le truc d’au-dessus terminé :
[sourcecode language=bash]
screen -S registration-lml
prelude-admin registration-server prelude-manager
[/sourcecode]
Cette commande vous donne un mot de passe qu’il faudra noter (c’est un One Time Password, c’est un mdp unique … c’est pour ça qu’il est resté dans le screenshot, il n’est plus valable ;)) … ce qui doit vous donner :
prelude-registration-server
On fait un Ctrl+a et ensuite d pour détacher la console et lancez

screen -S register-lml
apt-get install prelude-lml
prelude-admin register prelude-lml "idmef:w admin:r" 127.0.0.1 --uid 0 --gid 0

et voilà … vous pouvez jouer à WoW pendant une heure ou deux, puis lorsque la dernière commande vous demande un mot de passe :
prelude-otp-lml
Rentrez le mot de passe que vous avez noté, puis faites faite de nouveau Ctrl+a puis d et faite un screen -r registration-lml.
Il vous demandera si vous voulez autoriser la connexion, répondez y :
prelude-manager-otp-registration
Qui vous donnera normalement ceci :
registration-prelude-manager-ok

Tapez exit puis screen -r register-lml et si vous avez un beau Successful qui s’affiche c’est bon …
successful-prelude-lml
Tapez exit et passez à la suite …
C’est bon z’avez suivi ??? On continu ^^.

Installation de prelude-correlator

C’est pareil qu’au-dessus (et il ne me semble pas très utile donc vous pouvez zapper ^^), sinon :
[sourcecode language=bash]
screen -S registration-correlator
prelude-admin registration-server prelude-manager
[/sourcecode]
Notez le mot de passe et faites Ctrl + a puis d pour détacher le terminal et faites :

screen -S register-correlator
apt-get install prelude-correlator
prelude-admin register prelude-correlator "idmef:w admin:r" 127.0.0.1 --uid 0 --gid 0

et voilà … vous pouvez ENCORE jouer à WoW pendant une heure ou deux, puis lorsque la dernière commande vous demande un mot de passe rentrez celui que vous venez de noter.
Puis faites Ctrl + a et d puis screen -r registration-correlator et répondez y … si vous avez un beau Successfull qui s’affiche c’est bon … Je vous avez prévenu c’est du déjà vu ^^.

Donc maintenant on peut faire :
[sourcecode language=bash]
/etc/init.d/prelude-manager start
/etc/init.d/prelude-lml start
/etc/init.d/prelude-correlator start #si vous l’avez installé
[/sourcecode]
Et maintenant on passe à un truc cool histoire de se détendre les yeux avant de passer à la compilation de snort …

Installation de prewikka :

C’est un superbe frontend écrit en perl qui permet d’avoir l’ensemble des informations récupéré d’un coup d’oeil. Normalement, vous l’avez installé avec l’apt-get d’avant donc y’a juste à rajouter le module python dans apache (a2enmod python) et rajouter ce superbe VirtualHost à faire pâlir grand-mère :

Changez bien sûr le servername …


ServerName prewikka.mondomaine.org
ServerAdmin admin@domain.com

SetHandler mod_python
PythonHandler prewikka.ModPythonHandler
PythonOption PrewikkaConfig /etc/prewikka/prewikka.conf


SetHandler none

Alias /prewikka /usr/share/prewikka/htdocs
Alias /htdocs /usr/share/prewikka/htdocs

C’est violent hein ?? AVANT de redémarrer apache (sinon vous tomberez sur une page blanche qui boucle) ouvrez le fichier /etc/prewikka/prewikka.conf donnez les info de votre base de données renseignez normalement lors de l’installation de prelude-manager (si vous ne vous souvenez plus du mot de passe, regardez du côté de /etc/prelude-manager/prelude-manager.conf).

puis un gentil /etc/init.d/apache2 restart et logguez vous sur la page via le compte admin avec le mdp admin. Vous ne devriez pas avoir grand chose pour le moment … si ce n’est les deux logiciels « prelude-manager » et « prelude-lml ».

Voilà … la suite sera pour plus tard … sinon c’est l’indigestion …

Annuaire LDAP et authentification UNiX/Linux

Bé voilà bonsoir … dans ma série tuto « memo-inutile » voici …

Encore des trucs inutile pour le commun des mortels …l’authentification centralisée par un annuaire LDAP (OpenLDAP dans mon cas).
Alors bon, ça fait suite à l’un de mes tuto/louange à ce lien ^^ (jsuis trop fainéant pour reprendre l’ensemble du tuto ;)).

Dans mon cas, je devais monter le réseau de mon groupe de projet pour ma licence en Dev (et on nous demande de monter des réseaux ^^), et pour avoir un réseau potable avec plein de machines j’ai eu la géniallissime idée de mettre en place un PDC (Samba/LDAP) pour gérer un parc informatique de …… 8 machines :p 😀 (je devrais peut-être rajouter 3/4 lignes de smiley pour exprimer le fond de ma pensé façon kevin).

Sur le coup bon ben c’est amusant (et ouai … mon gros kif c’est les fichiers de conf et les lignes de commandes … c’est grave ???) de suivre le tuto de damstux (cf. le lien plus haut) qui fonctionne très bien juqu’au moment où l’on veut insérer des machines unix, on à beau modifier les fichiers de conf nsswitch.conf, pam_ldap.conf et libnss-ldap comme dans le tuto, rien ne fonctionne.

Donc pour réussir à se faire logguer des utilisateurs depuis l’annuaire LDAP rien de plus simple … suffit de modifier 4 autres fichiers (et ouai quand y’en a plus … y’en a encore ^^). En imaginant bien sûr que votre serveur LDAP fonctionne (genre que l’authentification fonctionne avec des machines windows ^^ wouah le test 😉 jvai pousser au suicide des apprenti-sysadmin :D).

Bien entendu, il faut suivre le tuto de damstux jusqu’au bout (y compris les modifs sur les fichiers nsswitch.conf, libnss-ldap.conf et pam_ldap.conf côté client) et poursuivre ici ^^ .

CES FICHIERS SONT A MODIFIER COTE CLIENT SEULEMENT (à part si vous voulez laisser les utilisateurs ce connecter à la machine en question … is it secure ??).
Le premier fichier à modifier : /etc/pam.d/common-account (commentez tous le reste)
[sourcecode language=bash]
account sufficient      pam_ldap.so
account required        pam_unix.so try_first_pass
[/sourcecode]

Le deuxième fichier à modifier : /etc/pam.d/common-auth (commentez tous le reste)
[sourcecode language=bash]
auth    sufficient      pam_ldap.so
auth    required        pam_unix.so nullok_secure try_first_pass
[/sourcecode]

Le troisième fichier à modifier : /etc/pam.d/common-password (commentez tous le reste)
[sourcecode language=bash]
password   sufficient   pam_ldap.so
password   required   pam_unix.so nullok obscure md5
[/sourcecode]

Le quatrième fichier à modifier : /etc/pam.d/common-session (commentez tous le reste)
ici on rajoute la possibilité de créer le dossier home si il n’existe pas … sinon on va droit dans le mur (l’utilisateur se log et n’a pas de home 😉 à mettre dans le groupe sdf koi^^). Attention, il faut le mettre avant les deux autres directives, sinon ça ne marche pas (j’ai lu pas mal de tuto qui les mettait dans un mauvais ordre et ça plantait le tout donc …)
[sourcecode language=bash]
session required pam_mkhomedir.so skel=/etc/skel/
session sufficient pam_ldap.so
session required pam_unix.so
[/sourcecode]

Il vous faudra aussi (peut-être modifier le fichier /etc/ldap/ldap.conf) remplacer 1.3.3.7 par l’ip du serveur LDAP et la base par la votre …
[sourcecode language=bash]
BASE dc=mon,dc=reseau,dc=lan
URI ldap://1.3.3.7
[/sourcecode]
Attention … si vous vous plantez, vous n’arriverez plus à vous logguer (et n’oubliez pas d’arroser …), et sinon, ben voilà vous pouvez importer votre base d’utilisateur et vous logguer depuis n’importe quelle machine configurée pour utiliser l’annuaire LDAP avec n’importe quelles utilisateurs de l’annuaire (encore heureux ;)).

Et voilà …