dernière mise à jour : 08-oct-2006

Le principe du test est le suivant. Tous les soirs, j'enregistre un fichier log de p0f. Celui-ci écoute tranquillement les demandes de connexion à ma machine et déduit du message reçu le système d'exploitation de la machine hôte. Un script python récupère ces fichiers log puis effectue des statistiques sur les machines et ce qu'elles cherchent sur la mienne. Pour avoir une vue d'ensemble, le script trace quelques graphiques éloquents. Pour les détails, il y a aussi une sortie texte (voir plus bas).

Conclusions

  1. il n'y a quasiment que des Windows® qui viennent[1], ce qui veut dire que les logiciels malveillants n'investissent que cette plate-forme
  2. on a une tentative de connexion toutes les 11.7s en moyenne, une toutes les 200s si on ne regarde que les machines hors du voisinage d'adresse IP[2], c'est-à-dire celles qui diffusent à grande échelle les virus et autres logiciels malveillants
  3. stopper les 4 services microsoft-ds (port n°445), loc-srv (port n°135), netbios-ssn (port n°139) et ms-sql-s (port n°1433) permet d'éviter 99.7% des tentatives d'intrusion ![3]
  4. avoir un pare-feu bien configuré réduit d'un facteur 2 le nombre de tentatives[4]
  5. la fréquence des tentatives de connexion varie dans la journée, elle est au plus fort le soir, chez les particuliers !
  6. les vieux Windows® (95, 98, Millenium) sont manifestement moins prisés par les logiciels malveillants, en tout cas pour ce qui est de les diffuser
  7. les attaques provenant de machines non Windows®[5] sont le fait de pirates introduits sur des serveurs web officiels, ils s'intéressent aux services SSH (port 22), SMTP (port 25) et serveur web (port 80)
  8. la plate-forme Macintosh est totalement épargnée

Maintenant qu'on a une bonne idée de l'activité des machines sur Internet, il n'y a plus qu'à relire les billets sur la sécurité informatique accessibles depuis la rubrique À retenir du menu puis essayer de verrouiller sa machine au mieux...

Si vous voulez effectuer le même genre d'expérience sur votre machine, vous pouvez télécharger les scripts python depuis la page py0f 0.1.0 - first release (en).

Graphiques

Le graphique en camemberts présenté en introduction montre bien évidemment la répartition des systèmes d'exploitation émetteurs et des ports ciblés. On peut aussi avoir un graphique traçant l'activité des émetteurs :

attempts chart

Sur la gauche, c'est l'activité moyenne des 10 machines les plus actives de chaque log, en nombre de tentatives à l'heure. Sur la droite, c'est la fréquence moyenne des tentatives de connexion par log pour toutes les tentatives relevées. On constate que cela a tendance à varier dans le temps. Les deux facteurs les plus influents sont l'heure de la journée et la présence ou non d'un pare-feu sur la machine qui reçoit les tentatives (en rouge).

Sortie texte de py0f

$ ./dev/py0f/p0f-stats.py ~/p0f/ --reject-from-ip *mon-ip* -g
Loaded 34670 attempts while ignored 9142 attempts
Total recording time: 112h 54min 00s
Average frequency: 1 connection every 11.7s
* OS stats:
       [20607/34670]   59.4%   Windows XP Pro SP1, 2000 SP3
       [9295/34670]    26.8%   Windows 2000 SP2+, XP SP1 (seldom 98 4.10.2222)
       [3487/34670]    10.1%   Windows 2000 SP4, XP SP1
       [326/34670]     0.9%    Windows XP SP1, 2000 SP3 (2)
       [305/34670]     0.9%    Windows XP/2000 (RFC1323, w+, no tstamp) [GENERIC]
       [125/34670]     0.4%    Windows XP/2000 while downloading (leak!)
       [124/34670]     0.4%    Windows XP Pro SP1, 2000 SP3 (NAT!)
       [89/34670]      0.3%    Windows XP (RFC1323, w+) [GENERIC]
       [71/34670]      0.2%    Windows XP/2000 [GENERIC]
       [60/34670]      0.2%    Windows 2000 SP4, XP SP 1 (2)
       [43/34670]      0.1%    Windows XP, 2000 SP2+
       [30/34670]      0.1%    Windows XP/2000 via Cisco
       [18/34670]      0.1%    Windows 98 (10)
       [11/34670]      0.0%    Windows SP3
       [10/34670]      0.0%    Windows NT 4.0 (older)
       [9/34670]       0.0%    Windows XP/2000 (RFC1323 no tstamp) [GENERIC]
       [7/34670]       0.0%    Windows 98 (4)
       [7/34670]       0.0%    Windows 2000 SP4, XP SP1 (firewall!)
       [6/34670]       0.0%    Windows 2000 SP2+, XP SP1 (seldom 98 4.10.2222) (firewall!)
       [5/34670]       0.0%    Windows XP SP1, 2000 SP4 (3)
       [5/34670]       0.0%    Windows XP Pro SP1, 2000 SP3 (firewall!)
       [4/34670]       0.0%    Windows 98 [GENERIC]
       [3/34670]       0.0%    Windows XP/2000 (RFC1323) [GENERIC]
       [2/34670]       0.0%    Linux 2.4 (late, uncommon) (up: 158 hrs)
       [2/34670]       0.0%    Linux 2.4 (late, uncommon) (up: 204 hrs)
       [2/34670]       0.0%    Linux 2.4/2.6 <= 2.6.7 (up: 2726 hrs)
       [2/34670]       0.0%    Linux 2.5 (sometimes 2.4) (4) (up: 6998 hrs)
       [2/34670]       0.0%    Linux 2.4 (late, uncommon) (up: 1372 hrs)
       [2/34670]       0.0%    Linux 2.4 (late, uncommon) (up: 1325 hrs)
       [2/34670]       0.0%    Linux 2.5 (sometimes 2.4) (4) (up: 98 hrs)
       [2/34670]       0.0%    Linux 2.5 (sometimes 2.4) (4) (up: 92 hrs)
       [2/34670]       0.0%    Windows 98 (15)
       [2/34670]       0.0%    Windows XP/2000 (firewall!) [GENERIC]
       [1/34670]       0.0%    Linux 2.5 (sometimes 2.4) (4) (NAT!) (up: 4057 hrs)
       [1/34670]       0.0%    Linux 2.4/2.6 <= 2.6.7 (up: 1934 hrs)
       [1/34670]       0.0%    Linux 2.4/2.6 <= 2.6.7 (up: 522 hrs)
* source IP stats:
       [422/34670]     1.2%    82.231.xxx.xxx
       [421/34670]     1.2%    82.231.xxx.xxx
       [416/34670]     1.2%    82.231.xxx.xxx
       [381/34670]     1.1%    82.231.xxx.xxx
       [353/34670]     1.0%    82.231.xxx.xxx
       [32677/34670]   94.3%   < threshold or unknown
* destination IP stats:
       [34670/34670]   100.0%  82.231.xxx.xxx
* destination port stats:
       [17154/34670]   49.5%   microsoft-ds - Microsoft Naked CIFS (445)
       [11455/34670]   33.0%   loc-srv - epmap Location Service (135)
       [5182/34670]    14.9%   netbios-ssn - NETBIOS session service (139)
       [427/34670]     1.2%    ms-sql-s - Microsoft SQL Server (1433)
       [121/34670]     0.3%    www - http WorldWideWeb HTTP (80)
       [16/34670]      0.0%    radmin-port - RAdmin Port (4899)
       [15/34670]      0.0%    smtp - mail (25)
       [9/34670]       0.0%    ssh - SSH Remote Login Protocol (22)
       [3/34670]       0.0%    pop3 - pop-3 POP version 3 (110)
       [3/34670]       0.0%    imap2 - imap Interim Mail Access P 2 and 4 (143)
       [2/34670]       0.0%    socks - socks proxy server (1080)
       [283/34670]     0.8%    < threshold or unknown

NB: l'option --reject-from-ip *mon-ip* permet de ne pas comptabiliser les demandes de connexion provenant de ma machine, par exemple quand je vais relever mon courrier ou lire une page web.

Analyse des logs venant de Linux

On peut aussi filtrer les tentatives venant de machines Linux, par exemple pour savoir de qui s'agit-il exactement, depuis un navigateur web. J'ai identifié à plusieurs reprise des serveurs web tout à fait officiels, et donc piratés. Les résultats sont les suivants :

Mon Sep 04 21:30:11 2006: from 218.98.xxx.xxx to port 80 (www)
Tue Aug 29 22:29:51 2006: from 195.73.xxx.xxx to port 22 (ssh)
Tue Aug 29 22:29:54 2006: from 195.73.xxx.xxx to port 22 (ssh)
Sat Sep 16 14:11:33 2006: from 218.236.xxx.xxx to port 22 (ssh)
Sun Sep 17 20:35:22 2006: from 24.232.xxx.xxx to port 22 (ssh)
Sun Sep 17 20:35:25 2006: from 24.232.xxx.xxx to port 22 (ssh)
Sun Sep 17 21:08:41 2006: from 24.232.xxx.xxx to port 22 (ssh)
Sun Sep 17 21:08:44 2006: from 24.232.xxx.xxx to port 22 (ssh)
Mon Sep 18 22:19:31 2006: from 202.53.xxx.xxx to port 22 (ssh)
Mon Sep 18 22:19:34 2006: from 202.53.xxx.xxx to port 22 (ssh)
Mon Sep 25 22:10:43 2006: from 61.230.xxx.xxx to port 25 (smtp)
Mon Sep 25 22:10:46 2006: from 61.230.xxx.xxx to port 25 (smtp)
Mon Sep 25 22:20:12 2006: from 218.167.xxx.xxx to port 25 (smtp)
Mon Sep 25 22:20:15 2006: from 218.167.xxx.xxx to port 25 (smtp)
Wed Sep 27 20:44:20 2006: from 61.230.xxx.xxx to port 25 (smtp)
Wed Sep 27 20:44:23 2006: from 61.230.xxx.xxx to port 25 (smtp)
Wed Sep 27 20:46:18 2006: from 61.230.xxx.xxx to port 25 (smtp)
Wed Sep 27 20:46:21 2006: from 61.230.xxx.xxx to port 25 (smtp)
Sat Oct 07 21:31:45 2006: from 213.60.xxx.xxx to port 80 (www)

Notes

[1] 19 tentatives de connexion non Windows® sur 35000 soit environ 0.05% !

[2] identifiant de la machine sur le réseau

[3] consulter la page Ports NetBios et associés sur IP pour savoir ce que sont ces ports

[4] parce que la machine cible ne répond pas aux tentatives

[5] ce sont des Linux, il y a une tentative toutes les 6 heures et une machine différente toutes les 12 heures !