SYN, SYN-ACK, ACK …

Steal This Blog

Archives Posts

Forensic sur log apache avec pyflag

avril 17th, 2008 by Corbier

Contexte

Dans le cadre de mon travail je suis parfois obliger de faire des retours sur incident dans le cadre de dysfonctionement ou d’attaque.

J’ai donc choisi d’utiliser pyflag.

L’installation se fait facilement a coup de ./configure make make install

Récupération des log’s

J’ai donc récupéré les logs httpd sur le serveur du client ainsi que les logs tomcat. Le problême constaté est que le service tomcat tombe régulièrement (genre tous les deux jours).

Une fois pyflag configuré, il nous reste à nous connecter à l’adresse http://127.0.0.1:8000

Afin d’intégrer les log apache, il est nécessaire de créer un log Preset qui contiendra l’ensemble des log à analyser.

Un assistant apparaît pour injecter les logs. Quelques points me semble essentiel.

Sélectionnez Apache Log ;)

Ainsi que le format debian_forensic cliquez sur next et les logs apparaissent sous la forme de tableau

Ensuite il nous reste a nommer notre preset.

Cliquez sur Load a Log file

Sélectionner les logs a injecter dans le base mysql

L’upload est assez rapide.

Je peux donc travailler sur mes log’s

La suite au prochaine épisode :p

Archives Posts

L7-Filter Installation (partie 1)

avril 11th, 2008 by Corbier

J’avais fait un précédent billet sur l7-filter mais il n’est plus à jour. J’ai donc décidé d’en refaire un nouveau pour debian Etch noyau 2.6.18 avec iptables-1.3.5

L7-Filter o_O ?

C’est un module pour netfilter servant à filtrer le trafic par applicatif. L’utilisation se fait à l’aide d’expression régulière (pattern) servant de prise d’empreinte pour les protocoles.

Dans un premier temps installons les outils nécessaires à la compilation de noyau.

apt-get install build-essential fakeroot kernel-package

Puis installons les sources du noyau.

apt-get install linux-source-2.6.18

Maintenant que les sources sont téléchargé dans /usr/src il faut les extraire.

cd /usr/src & tar xvjf linux-source-2.6.18.tar.bz2

Créons un lien symbolique vers les sources.

ln -s linux-source-2.6.18 linux

Il faut maintenant télécharger l7-filter

wget http://switch.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.17.tar.gz

tar xvzf netfilter-layer7-v2.17.tar.gz

Afin de profiter des fonctionnalités de l7filter il faut patcher le noyau.

cp netfilter-layer7-v2.17/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch linux

cd linux

Procédons au patch.

patch -p1 < kernel-2.6.18-2.6.19-layer7-2.9.patch

cd ..

Il faut ensuite préparer iptables à recevoir l7-filter. Pour ce faire téléchargeons les sources afin de les patcher.

wget http://ftp.netfilter.org/pub/iptables/snapshot/iptables-1.3.5-20061006.tar.bz2 & tar xvjf iptables-1.3.5-20061006.tar.bz2

Copions le patch

cp netfilter-layer7-v2.17/iptables-1.3-for-kernel-pre2.6.20-layer7-2.17.patch iptables-1.3.5-20061006/

cd iptables-1.3.5-20061006

patch -p1 < iptables-1.3-for-kernel-pre2.6.20-layer7-2.17.patch

Ensuite il faut installer iptables patché dans les sources du noyau.

chmod +x extensions/.layer7-test

make KERNEL_DIR=/usr/src/linux

make install KERNEL_DIR=/usr/src/linux

cd..

Enfin il nous reste à activer les modules afin de compiler le noyau.

cd linux

make menuconfig

Comme l’indique la doc, il faut activer les modules suivants :

* 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.

Il faut ensuite compiler les sources du noyau et créez les packages .deb.

make-kpkg

fakeroot make-kpkg –append-to-version=.666666 –initrd kernel_image

Et c’est parti pour une longue compilation.

Une fois ceci fait nous avons les packages dans /usr/src

linux-doc-2.6.18.181004_2.6.18.181004-10.00.Custom_all.deb

linux-image-2.6.18.181004_2.6.18.181004-10.00.Custom_i386.deb

linux-manual-2.6.18.181004_2.6.18.181004-10.00.Custom_all.deb

linux-source-2.6.18.181004_2.6.18.181004-10.00.Custom_all.deb

Installons-les.

dpkg -i *.deb

Un reboot est nécessaire. N’oubliez pas de vérifier dans votre /boot/grub/menu.lst que le noyau est disponible ;)

Une fois rebooté regardons les commandes disponibles pour l7filter

iptables -m layer7 –help

iptables v1.3.8-20071014

LAYER7 match v1.3.8-20071014 options:

–l7dir <directory> : Look for patterns here instead of /etc/l7-protocols/

(–l7dir must be specified before –l7proto if used!)

–l7proto [!] <name> : Match the protocol defined in /etc/l7-protocols/name.pat

Il est donc possible de modifier le path de recherche des patterns via –l7dir

Ainsi que spécifier un protocole via – -l7proto

Justement jetons un coup d’œil a ces fameux patterns.

Il faut les télécharger et les installer.

wget http://surfnet.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2008-02-20.tar.gz

tar xzf l7-protocols-2008-02-20.tar.gz

cd l7-protocols-2008-02-20

make install

cd /etc/l7-protocols/protocols/

Prenons par exemple le protocole http.

Voici le pattern http qui match ce protocole.

http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*(connection:|content-type:|content-length:|date:)|post [\x09-\x0d -~]* http/[01]\.[019]

On voit qu’en fait l7-filter match sur les entêtes http. Ce qui nous indique bien qu’il s’agisse du protocole http

Cependant selon la documentation :

  • l7-filter matching isn’t foolproof: there may be both false positives (one protocol can look like another) and false negatives (applications can do obscure things that we didn’t count on). Patterns that are known to regularly generate false positives are marked « overmatching » on the protocols page, but others may also do so occasionally.
  • Almost every type of Internet traffic has legitimate uses. For instance, P2P protocols, while widely used to violate copyright, are also an efficient way to distribute open source software and legally free music.
  • Programs can respond to being blocked by port-hopping, switching between TCP and UDP, opening a new connection for every trivial operation, using encryption, or employing other evasion tactics. Trying to block such protocols has consequences on two levels:
    1. In the case of port/protocol-hopping, you make it harder for yourself to identify protocols that already act this way.
    2. You encourage programmers to include these « features » in new programs, making it harder for everyone in the future. For example: In early 2006, Bittorrent started moving towards end-to-end encryption because many networks were either blocking it or severely restricting its bandwidth.
  • l7-filter patterns are not generally designed with blocking in mind. We consider a protocol to be well identified if the identification is useful for controlling its bandwidth. This means, for instance, that for P2P applications, we do not focus on catching connections that are not downloads.
  • Blocking with l7-filter provides no security, since any reasonably determined person can easily circumvent it.

Considérant ceci il semblerait que l7-filter soit plus utiliser dans le cadre de restriction de bande passante.

Dans un prochaine article nous verrons le traffic control sous linux avec l7filter.

Archives Posts

OpenVPN Web GUI 0.3.x

mars 25th, 2008 by Corbier

Lorsque nous avons un serveur VPN comportant beaucoup d’utilisateurs, il devient rapidement difficile à administrer. Surtout dans le cadre de révocation de client, ajout de nouveaux utilisateurs etc …

Pour cela j’ai découvert un GUI web permettant de :

  • shows the version of openvpn service;
  • shows the list of connected peers (uses status log file, version 2);
  • shows the brief configuration of openvpn server;
  • shows the list of all openssl certificates (actually, not ALL of them, but only those, which are made to be used for openvpn service);
  • shows the content of a certificate (not a private key);
  • builds the private key, CSR and public certificates;
  • downloads private key, CSR or public certificate;
  • downloads configuration sertificate files;
  • new: downloads private key, CSR and public certificate in a ZIP file (along with custom files, provided by you).
  • Ce projet est encore en développement, cependant il reste a suivre de près car les fonctionnalités annoncé m’ont l’air prometteuse.

    La liste des dépendances est la suivante : apache2, php5, php5-session, php-pcre, smarty. Il faut obsolument que php soit installé avec le support ssl (–with-openssl).

    Une fois les dépendances satisfaites, il ne reste plus qu’a télécharger et décompressé l’archive ==> http://openvpn-web-gui.sourceforge.net/

    Il faut éditer le fichier config.inc pour renseigner les différents chemins du fichier de configuration de openvpn et du fichier de log.

    IMPORTANT : il faut qu’openvpn génére un fichier de log version 2. Il faut donc ajouter status-version 2 au fichier de conf

    Voici la liste des utilisateurs connectés :

    OpenVpn Web Gui 1

    Ainsi que la liste des certificats et des users creés :

    OpenVpn Web Gui 2

    Archives Posts

    CentOs et SElinux

    mars 16th, 2008 by Corbier

    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

    Archives Posts

    L7filter ou comment iptables remonte couche 7

    décembre 1st, 2007 by Corbier

    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_image initrd 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

    « Previous Entries Next Entries »