_________ _ _ _______________ ___________ _______ MindKind10 __ _ __ __/ / | / / | Armoring Slackware 2, by Wyzeman / 10.12 / ' aka: Active and pro Active counter mesure . ----- / \_ _______ ______ _____ __ __ ___________ _______________/ ' /________/ Cette article est en quelque sorte une suite a mon premier article sur la securiter de slackware paru dans mindkind 1. Pourquoi juste un peu la suite ? He bien le premiere article parlais des bases de la securite. cette article etant la notion de securiter a une maniere pro active, par l'utilisation dun IDS (snort), mais aussi je mettendrais sur une utilisation un peu plus MaD admin de se logiciel, c'est a dire le sniffing de packet. Cette article n'est pas non plus a proprement parler un HoW-To snort, car le site web contient une exelente documentation online, mais je survolerais quand meme les quelques commande util pour un "get started", Ce qu'offre surtout cette article, ce sont 2 petit script php en version beta portant sur chacun des 2 facon d'utiliser snort. Ces 2 code on pour principale but de faciliter la vie. Ils seront aussi disponbile sur le CVS de Mindkind, vous pourrez ainsi donc facilement vous procurez les updates au fur et a mesure que le code evolura, ou voir meme proposez vos propre modification et amelioration. part 1: I wanna be the admin who snif 500k of log for u. and i would snif 500 more if it's needed. une des particulariters interressante de snort est sont utilisation en tant que sniffer de packet. Dailleur, c'est la base de tout les IDS, sniffer les packets, pour identifiez les mechants, mais c plaisant de pouvoir samuser avec aussi. Cette premiere parti de l'article demontrera comment s'amuser avec snort et donnera quelque expemple sur un reseau local. Evidament cest plutot limiter si vous faites ca chez vous, vous recolterez a la limite assez d'information pour faire chier votre frere ou votre soeur ou whatever sque la genetique a engendrer, mais ca vous donnera une petite idee de s'que vous permetras un telle logiciel sur un reseau scholair puisque, vous pouvez sniffer a partir de nimporte quel poste du reseau. Faire fonctionner snort en fonction sniffer est en soit un jeu d'enfant. bash-2.05# snort -i eth0 -de -l /root/log & -i pour l interface reseau, si ce n'est pas specifier, la config de snort par defaut indique toute les interface par defaut. Donc c'est pas si mal d'oublier le -i eth0 (ou eth1 ou ed0 (freebsd)). -de pour capturer et diviser les packet -l pour indiquer dans quel repertoir logger. /var/log peu aussi etre une bonne option, mais outre respecter les standarts ce n'est pas vraiment important. lesquade ISO9002 debarquera pas chez vous si vous ne respectez pas ces standard. Maintenant allons portee un oeuil au resultat. bash-2.05# cd /root/log/ bash-2.05# ls 142.137.6.42 192.168.1.5 205.237.62.134 255.255.255.255 66.130.146.134 142.166.200.213 192.168.1.6 207.253.0.36 64.12.24.18 ARP 192.168.1.1 193.110.95.1 216.208.126.162 64.4.12.127 bash-2.05# snort creer un repertoir pour chaque IP, ainsi on si peu si retrouver assez facilement. Bien sur ca aide de connaitre le ip de la connection qui nous interresse. Pour l'exemple je vais utiliser IRC car sont protocole est simple et humainement comprehensible et surtout connu de la plus par de nos lecteur. Un moyen simple de connaitre le ip de sont serveur irc est simplement de faire un /dns de celui ci sur celui ci, dans le cas present : /dns geneva.ch.eu.undernet.org *** Looking up geneva.ch.eu.undernet.org - *** Resolved geneva.ch.eu.undernet.org to 193.110.95.1 miracle le repertoir existe (on sent doutais un peu, surtout que c'est un exemple en environement controler). bash-2.05# cd 193.110.95.1/ bash-2.05# ls TCP:6668-1083 bash-2.05# tout les log de snort sont presenter dans le format suivant protocole-port-id, dans le cas present ce n'est pas tres difficile de se retrouver mais prenons l'exemple suivant bash-2.05# cd 66.130.146.134/ bash-2.05# ls TCP:1098-80 TCP:46930-9113 TCP:47713-9708 TCP:49734-11214 TCP:50517-11581 TCP:51300-12006 TCP:1099-80 TCP:46931-9114 TCP:47714-9709 TCP:49735-11215 TCP:50518-11582 TCP:51301-12007 TCP:1152-110 TCP:46932-9115 TCP:47715-9710 TCP:49736-11216 TCP:50519-11583 TCP:51302-12008 TCP:1153-110 TCP:46933-9116 TCP:47716-9711 TCP:49737-11217 TCP:50520-11584 TCP:51303-12009 TCP:1154-110 TCP:46934-9117 TCP:47717-9712 TCP:49738-11218 TCP:50521-11585 TCP:51304-12010 TCP:1155-110 TCP:46935-9118 TCP:47718-9713 TCP:49739-11219 TCP:50522-11586 TCP:51305-12011 TCP:1156-110 TCP:46936-9119 TCP:47719-9714 TCP:49740-11220 TCP:50523-11587 TCP:51306-12012 TCP:1157-110 TCP:46937-9120 TCP:47720-9715 TCP:49741-11221 TCP:50524-11588 TCP:51307-12013 TCP:1161-110 TCP:46938-9121 TCP:47721-9716 TCP:49742-11222 TCP:50525-11589 TCP:51308-12014 TCP:1162-110 TCP:46939-9122 TCP:47722-9717 TCP:49743-11223 TCP:50526-11590 TCP:51309-12015 TCP:1163-110 TCP:46940-9123 TCP:47723-9718 TCP:49744-11224 TCP:50527-11616 TCP:51310-12016 TCP:1164-110 TCP:46941-9124 TCP:47724-9719 TCP:49745-11225 TCP:50528-11617 TCP:51311-12017 TCP:1165-110 TCP:46942-9125 TCP:47725-9720 TCP:49746-11226 TCP:50529-11618 TCP:51312-12018 TCP:1166-110 TCP:46943-9126 TCP:47726-9721 TCP:49747-11227 TCP:50530-11619 TCP:51313-12019 TCP:1167-110 TCP:46944-9127 TCP:47727-9722 TCP:49748-11228 TCP:50531-11620 TCP:51314-12020 TCP:1168-110 TCP:46945-9128 TCP:47728-9723 TCP:49749-11229 TCP:50532-11621 TCP:51315-12021 TCP:1169-110 TCP:46946-9129 TCP:47729-9724 TCP:49750-11230 TCP:50533-11622 TCP:51316-12022 TCP:20034-2800 TCP:46947-9130 TCP:47730-9725 TCP:49751-11231 TCP:50534-11623 TCP:51317-12023 TCP:34233-6667 TCP:46948-9131 TCP:47731-9726 TCP:49752-11232 TCP:50535-11624 TCP:51318-12024 TCP:34239-6667 TCP:46949-9132 TCP:47732-9727 TCP:49753-11233 TCP:50536-11625 TCP:51319-12025 TCP:34269-6667 TCP:46950-9133 TCP:47733-9728 TCP:49754-11234 TCP:50537-11626 TCP:51320-11972 TCP:34411-6667 TCP:46951-9134 TCP:47734-9729 TCP:49755-11179 TCP:50538-11627 TCP:51321-11973 TCP:4040-445 TCP:46952-9135 TCP:47735-9730 TCP:49756-11235 TCP:50539-11628 TCP:51322-11974 TCP:4139-445 TCP:46953-9136 TCP:47736-9731 TCP:49757-11236 TCP:50540-11591 TCP:51323-11975 TCP:4308-443 TCP:46954-9137 TCP:47737-9732 TCP:49758-11203 TCP:50541-11592 TCP:51324-11976 TCP:4309-443 TCP:46955-9138 TCP:47738-9733 TCP:49759-11204 TCP:50542-11593 TCP:51325-11977 TCP:4310-80 TCP:46956-9139 TCP:47739-9734 TCP:49760-11205 TCP:50543-11594 TCP:51326-11978 et ce n'est pas fini, bien on pourrais dire qu'on est content d'avoir au moin le port, pour les curieux ils sagit de mes log sur hotmail. Bon retournons a nos moutons. Tout ce que vous avez a faire, c'est d'ouvrir le fichier desirer (TCP:6668-1083 dans le cas present) avec votre editeur prefere (pico). Un packet tipique ressemble a ceci : =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/10-12:22:29.235440 0:50:FC:71:82:FB -> 0:E0:29:76:71:EC type:0x800 len:0x51 192.168.1.5:1083 -> 193.110.95.1:6668 TCP TTL:128 TOS:0x0 ID:65432 IpLen:20 DgmLen:67 DF ***AP*** Seq: 0x30E7029 Ack: 0x9B20E79B Win: 0x412E TcpLen: 20 50 52 49 56 4D 53 47 20 23 6D 69 6E 64 6B 69 6E PRIVMSG #mindkin 64 20 3A 6F 75 6C 61 6F 75 70 0A d :oulaoup. =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ bref, mois jour heure.vraiment trop precis mac adresse a mac addresse. moi (192.168.1.5) sur le port 1083 discute a irc (193.110.95.1) sur le port 6668. plus precisement un message sur le chan #mindkind qui se concretise par "oulaoup". Pas tres compliquer a comprendre hein ? Voici une string tout aussi simple a analyser mais pourvu d'un contenue plus interressant. =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/10-12:43:52.097356 0:E0:29:39:20:57 -> 0:5:9A:D4:58:8C type:0x800 len:0x65 66.130.146.134:1083 -> 193.110.95.1:6668 TCP TTL:127 TOS:0x0 ID:20658 IpLen:20 DgmLen:87 DF ***AP*** Seq: 0x30E786C Ack: 0x9B2123AF Win: 0x41C6 TcpLen: 20 50 52 49 56 4D 53 47 20 58 40 63 68 61 6E 6E 65 PRIVMSG X@channe 6C 73 2E 75 6E 64 65 72 6E 65 74 2E 6F 72 67 20 ls.undernet.org 3A 6C 6F 67 69 6E 20 75 63 20 74 65 73 74 0A :login uc test. =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ c'est qu'un exemple, car n'y moi n'y personne sur mon reseau local n'a d'access a X undernet. Cependant, vous comprendrez que c'est le principe qui compte et que ca ne s'applique pas seulement qu'a irc. vous pourriez par exemple sniffer les connection telnet sur votre reseau scholaire. Le script suivant scannera les log sniffer pour vous. Pour l'instant il ne s'applique qua la situation presenter dans cette article, mais vous verez qu'il est facilement modifiable afin de trouver d'autre sorte de data interressante. Qui plus est, comme le script est disponible sur le CVS de mindkind, de nombreux update seront fait au fils du temps afin de le rendre plus performant, precis et varier. #!/usr/local/bin/php -q part 2 : kick out the script kids and get a beer. Telle qu'annoncer cette deuxieme moitier d'article traitera de snort en tant tant que IDS (intrusion detection system) et sera assez simple, car snort n'est pas tres compliquer a utiliser. Le besoin de l'article vien du fait qu'il n'existe aucun code a proprement parler adapter a slackware qui permet d'utiliser snort dans la plenitude de sa capaciter. Le code soumis ici est en version beta, mais tout comme le code de la section precedante il sera disponible sur le CVS afin de faciliter l'access a de futur version ou pour vous permettre de soumettre vos propres amelioration pour que le mode IDS fonctionne, vous devez vous assurez que les fichier snort.conf bad-traffic.rules classification.config exploit.rulez soit dans le meme repertoire (enfin que bad-traffic.rules , exploit.rules et classification.config soit dans le meme repertoire que snort.conf) snort.conf configure votre "reseau" specifie sur quelle addresse la detection doit se faire. classification.config renferme les regles par default, indique la prioriter a definir a chaque attempt. Vous pouvez ajouter des rules dans se fichier, que se soit pour ajouter un type d'attaque ou simplement pour modifier la valeur par defaut general d'une attaque pour un cas particulier. la documentation sur le site de snort done une exelente idee de comment batir ces propres rulez bad-traffic.rulez et exploit.rules ce sont les fichiers qui identifie le genre de packet qui est considerer comme malicious. bon pour lancer snort en fonction NIDS (n stand for network). snort -de -c /etc/snort/snort.conf -s -h 192.168.1.0/24 -D ou alors ajouter dans /etc/rc.d/rc.local /usr/local/bin/snort -de -c /etc/snort/snort.conf -s -h 192.168.1.0/24 -D afin qu'il se lance au demarage. Vous voici avec un snort minimaliste. Mon prochain article (armoring slackware 3), expliquera en detail comment faire vos propre regle efficace en donnant en exemple celle que j'utilise. Oui, je suis d'accord la doc de snort explique bien comment les faire, mais ce n'est pas parce qu'on sait comment qu'on sait quoi faire. C'est cette lacune que mon prochain article tentera de combler. Pour finir, telle que promis, mon script, a quoi sert t'il ? et bien il analyse les tentative d'intrusion identifer par snort et ajoute une regles dans hosts.deny lorsque que le danger est critique (niveau 1) (vous pouvez facilement le modifier pour un niveau 2 si vous etes du genre parano). Ainsi vous vous trouvez proteger de facon casi instantaner face a un aggresseur moyen (genre un script kids qui a des bon contacts). #!/usr/local/bin/php -q Bon vous aurez compris que si vous voulez modifier la "sensibilité" du programme, vous n'avez qua changer la valeur de $CODRED. Donc sur ce, on se revoit dans Armoring Slackware 3 afin de rendre notre Snort plus efficace que les settings par default.