February 2010 Archives

28-02-2010 21:54:18

[Secu] Mise en place de Tripwire avec AIDE sous FreeBSD

Un jour ou l'autre, vous vous ferez pirater. C'est comme ├ža, les 0days sont publiés et la diffusion des patchs et leur application n'étant pas immédiates, on reste forcément vulnérable pendant une période. De la meme manière, les technos évoluent et des problèmes peuvent survenir à tout moment. C'est une fatalité. L'objectif est donc de réagir au plus vite, de détecter ces intrusions, et de les éradiquer aussitot.

Un des outils permettant de controler l'intégrité de ses serveurs est le Tripwire. Cet outil va créer une base de données de fichiers à surveiller en enregistrant les informations du fichier comme l'uid, gid, nom, heure de création, modification, le hash du fichier, sa taille... bref toutes les informations permettant d'identifier un fichier. Ensuite il vérifiera régulièrement l'état de ce fichier et s'il constate des différences, nous enverrons une alerte par mail.

Nous travaillerons ici avec AIDE sur un système FreeBSD. Les répertoires peuvent changer si vous utilisez Linux.
[cloud@r00t ~]$ psearch aide
security/aide             A replacement and extension for Tripwire
En règle général, Tripwire est configuré par défaut pour controler tous les fichiers systèmes et de configuration de base du système. Personnellement je délègue cette tache à mon analyseur de rootkit rkhunter ou chkrootkit.Ici nous allons configurer AIDE afin qu'il analyse notre répertoire web en ajoutant une exception sur un répertoire d'upload qui varie donc fréquemment. Le fichier de configuration va donc ressembler à ca :
[cloud@r00t ~]$ cat /usr/local/etc/aide.conf
/usr/local/www/apache22		R
!/usr/local/www/apache22/upload		R
R est un template de droits existants. Les différents templates sont :
# Templates: 
# (default) R :  [R]ead-only (+p+i+n+u+g+s+m+md5+tiger+rmd160+sha1-a)
#       L :  [L]og file (+p+i+n+u+g-s-a-m-md5-tiger-rmd160-sha1)
#       N :  ignore [N]othing (+p+i+n+u+s+g+s+a+m+c+md5+tiger+rmd160+sha1)
#       E :  ignore [E]verything (-p-i-n-u-s-g-s-a-m-c-md5-tiger-rmd160-sha1)

#       p :  permission and file mode bits      a: access timestamp
#       i :  inode number                       m: modification timestamp
#       n :  number of links (ref count)        c: inode creation timestamp
#       u :  user id of owner                 md5: MD5 signature
#       g :  group id of owner              tiger: tiger signature
#       s :  size of file                  rmd160: RMD160 signature
#                                            sha1: SHA1 signature
Rien de bien compliqué. On indique les répertoires dont l'on souhaite surveiller l'intégrité et les droit associés avec + ou -.

Une fois cela terminé, nous allons créer la base de donnée avec la commande suivante :
[cloud@r00t ~]$ sudo aide -i

AIDE, version 0.13.1

### AIDE database at /var/db/aide/databases/aide.db.new initialized.
Nous avons donc un fichier aide.db.new que nous allons copier et qui servira de référence.
[cloud@r00t ~]$ sudo cp /var/db/aide/databases/aide.db.new /var/db/aide/databases/aide.db
Le base de donnée ressemble à ceci :
[cloud@r00t ~]$ sudo cat /var/db/aide/databases/aide.db
@@begin_db
# This file was generated by Aide, version 0.13.1
# Time of generation was 2010-02-28 21:05:20
@@db_spec name lname attr perm uid gid inode lcount size mtime ctime md5 
/usr/local/www/apache22 0 3005 40755 0 0 378392 6 512 MTI2MjYyNzc5Mg== MTI2MjYyNzc5Mg== 0
/usr/local/www/apache22/data 0 3005 40755 0 0 378393 2 512 MTI2MjYyNzc5Mg== MTI2MjYyNzc5Mg== 0
/usr/local/www/apache22/error 0 3005 40755 0 0 378396 3 1024 MTI2MjYyNzc5Mg== MTI2MjYyNzc5Mg== 0
/usr/local/www/apache22/icons 0 3005 40755 0 0 378420 3 3584 MTI2MjYyNzc5Mg== MTI2MjYyNzc5Mg== 0
Maintenant que notre base est créée, l'objectif va etre de controler régulièrement si des modifications ont été apportées sur ces répertoires avec l'option -C (check)
Si aucune modification n'apparait, le résultat sera le suivant :
[cloud@r00t ~]$ sudo aide -C

AIDE, version 0.13.1

### All files match AIDE database. Looks okay!
Si des modifications ont été faites, on observera alors la chose suivante :
[cloud@r00t ~]$ sudo touch /usr/local/www/apache22/test
[cloud@r00t ~]$ sudo aide -C
AIDE found differences between database and filesystem!!
Start timestamp: 2010-02-28 21:15:19

Summary:
  Total number of files:        258
  Added files:                  1
  Removed files:                0
  Changed files:                1


---------------------------------------------------
Added files:
---------------------------------------------------

added: /usr/local/www/apache22/test

---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /usr/local/www/apache22

--------------------------------------------------
Detailed information about changes:
---------------------------------------------------


Directory: /usr/local/www/apache22
  Mtime    : 2010-01-04 18:56:32              , 2010-02-28 21:15:16
  Ctime    : 2010-01-04 18:56:32              , 2010-02-28 21:15:16
Le Tripwire a donc bien détecté l'ajout du fichier ainsi que la date de modification du répertoire apache22/ .

Automatisons maintenant la recherche via un petit script que nous exécuterons toutes les 5 minutes via un cron. Le principe du script va etre le suivant : nous allons faire un check avec AIDE et stocker le résultat dans un fichier. Si tout est OK, nous ne faisons rien. Si AIDE voit une modification, il envoi un mail à l'admin avec le rapport pour le prévenir puis recrée une base afin d'éviter que l'admin ne se fasse spamer.
Voici le script Bash :
#!/usr/local/bin/bash

mail_admin="admin@site.com"
file_res="/root/aideres.txt"

aide -C > $file_res
res=`cat $file_res | grep -O "All files match AIDE database. Looks 
okay!"`
res=`wc -l $file_res | awk -F' ' '{print $1}'`

if [ $res -gt 5 ]
then
	mail -s "Integrity Alert Tripwire" $mail_admin < $file_res
	aide -i
	cp /var/db/aide/databases/aide.db.new /var/db/aide/databases/aide.db
fi

rm $file_res
On rend notre script exécutable et on crée notre cron :
[cloud@r00t /root]$ sudo chmod +x aide_alert.sh
[cloud@r00t /root]$ sudo crontab -e
*/5 * * * *	/root/aide_alert.sh
Voilà nous avons maintenant un système de controle d'intégrité avec remontées d'alertes pour notre répertoire web !

Posted by cloud | Permanent link | File under: FreeBSD, Security, Coding

28-02-2010 16:38:10

Publication de 2 articles dans le nouveau Hakin9

Un petit post pour vous informer que vous pouvez retrouver 2 articles écrits par moi meme dans le nouveau numéro de Hakin9.

Au menu, 2 sujets que vous avez pu déjà voir ici que j'ai développé, à savoir :
  • Les premiers virus iPhone sont là ! : Cet article développe la vulnérabilité des iPhone jailbreakés déjà développée ici avec des détails sur les contres mesures et comment exploiter la vulnérabilité pour créer un botnet ou voler de l'argent.
  • FreeBSD local r00t exploit : Cet article reprend en détail l'explication du 0day de Kingcope et une explication de LD_PRELOAD.


En espérant que j'ai été clair dans mes explications et que cela vous intéresse :)

Posted by cloud | Permanent link | File under: Fun / Divers

16-02-2010 20:33:48

[Secu] Les metadata, sources de fuites d'informations

Les méta données sont des données insérées lors de la création de document par nos outils préférés comme MS Office, Adobe, Photoshop ... Les informations ajoutées peuvent etre le nom de l'auteur, le chemin de stockage, le nom de la machine, les domaines internes, les comptes utilisateurs... Bref tous pleins d'informations non maitrisées et qui ne sont pas censées etre connues en dehors du SI d'une société ou d'un établissement. Ces fuites d'informations peuvent servir à préparer une attaque ciblée ou meme à bruteforcer des comptes ou encore diffuser un malware via des adresses internes ou en remplacant un fichier sur le réseau.

Un logiciel permet d'automatiser très simplement cette recherche de méta données : FOCA, Fingerprinting and Organisation with Collected Archives. Celui ci a été présenté lors de la Blackhat09. Ce logiciel va se baser sur les moteurs de recherche Google et Bing afin de trouver tous les documents d'un certain type pour un domaine donné. Celui ci va ensuite analyser les données et fournir un rapport avec tous les nom utilisateurs, comptes, domaines, chemins, noms de serveurs trouvés dans les méta données.

Bien entendu il est possible de supprimer ces données directement avec les outils qui les crée comme MS Office ou avec Photoshop mais il faut y penser. Avant toute publication, il est donc nécessaire de mettre en place une procédure de suppression de ces méta données pour éviter toute fuite. Je vous laisse tester cet outil pour vous rendre compte par vous meme ce qu'on peut trouver :]

Merci Clément pour m'avoir fait découvrir cet outil :)

Posted by cloud | Permanent link | File under: Security

14-02-2010 23:19:08

[Astuce] Boucles et scripts sous FreeBSD

Un petit post pour une astuce FreeBSD et pour éviter que je me repose cette question.

Lorsque l'on réalise un script sh et que l'on souhaite une boucle, on a l'habitude quand on vient du monde de Linux d'écrire quelque chose du genre :
for i in `seq 1 10`; do echo $i; done
Sauf que sous FreeBSD, seq ne fait pas parti du système de base :). Nous allons donc utiliser une autre commande moins connu, jot.
Notre script précédent va donc devenir :
for i in `jot 10 1`; do echo $i; done
Si vous utilisez Bash, il est toujours possible d'écrire le meme script comme ceci:
for i in {1..10}; do echo $i; done
Pour plus d'info, je vous laisse faire un man jot.

Posted by cloud | Permanent link | File under: FreeBSD, Coding