Géolocalisation des menaces sur internet

Écrit par , le
Lead technique, équipe CMS

Implémentation d’un référentiel cartographique des cyber-attaques

Des attaques informatiques à destination des serveurs du monde entier se produisent en permanence sur internet. Ces attaques sont diverses et variées, et utilisent une panoplie de vecteurs différents.

Dans cet article, nous verrons comment détecter ces attaques, comment en garder une trace en base de données puis comment géolocaliser leur origine en temps réel afin de pouvoir les afficher sur une carte.

Un exemple d’une telle carte est disponible ici : http://threats.agencehpj.com/

1. Collecte des données

Afin de pouvoir visualiser nos données sur une carte, nous devons commencer par trouver un moyen de les collecter. Pour ce faire, nous pouvons analyser les données de connexion sur nos serveurs.

Sur RHEL, le fichier /var/log/secure contient les différents logs systèmes relatifs à la sécurité. Ainsi, si un utilisateur essaye de se connecter sur le serveur avec des identifiants invalides, une ligne est ajoutée dans ce fichier :

May 16 16:43:39 hpj sshd[4340]: pam_unix(sshd:auth): authentication failure; 
logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.166.101  user=root
May 16 16:43:40 hpj sshd[4340]: Failed password for root from 192.168.166.101 port 53630 ssh2
May 16 16:43:42 hpj sshd[4340]: Failed password for root from 192.168.166.101 port 53630 ssh2
May 16 16:43:44 hpj sshd[4340]: Failed password for root from 192.168.166.101 port 53630 ssh2

Il est alors facile d’identifier les attaques par bruteforce dès qu’une adresse IP est récurrente dans ce fichier. Le logiciel fail2ban permet de bannir automatiquement les adresses IP des clients effectuant de telles attaques en analysant ce fichier de logs en continue.

Pour installer fail2ban sur CentOS, ajoutez le dépôt EPEL via la commande suivante :

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Installez ensuite fail2ban :

yum install fail2ban

Faites ensuite une copie du fichier de configuration :

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Fail2ban laisse une grande latitude dans sa configuration et permet notamment de déclencher des scripts lors du bannissement d’une adresse IP.

Pour ce faire, il est nécessaire de créer un fichier de configuration d’actions. Par défaut, ces configurations sont présentes dans le dossier /etc/fail2ban/action.d.

Créez y un fichier threats.conf qui sera chargé d’exécuter un appel CURL vers une page externe chargée de stocker les informations liées au bannissement dans une base de données :

#
# Author: Vincent Ollivier
#
# $Revision$
#
[Definition]
# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
actionban = curl –data “1=&2=&3=” http://yourserver.com/insert.php
[Init]
init = ‘Bannissement’

Votre script insert.php devra effectuer une insertion en base de données des différents paramètres POST reçus.

Vous pouvez alors appeler votre fichier d’action lorsqu’un ban se produit grâce au fichier de configuration /etc/fail2ban/jail.local. Par exemple, la configuration suivante appellera votre action Threat lorsqu’une action liée au SSH se produira :

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
threats[name=SSH, port=22]

Une fois vos configurations ajoutés, vous pouvez démarrer votre service fail2ban :

service fail2ban start

2. Affichage des données sur une carte

Les adresses IP sont désormais stockées dans notre base de données, mais nous avons besoin de récupérer les informations sur l’origine géographique de ces adresses afin de pouvoir les afficher sur une carte.

De nombreux services permettent de faire le lien entre une adresse IP et une position géographique. La base de données GeoIP associe notamment les plages d’adresses IP mondiales à des coordonnées géographiques. Grâce à la bibliothèque founie avec cette base de données, il est ainsi possible de récupérer ces coordonnées via l’appel d’une fonction PHP. Nous pouvons alors placer l’origine des différents attaquants sur une carte. L’utilisation d’Ajax permet ensuite de rafraîchir automatiquement la liste des attaquants les plus récents sur la carte.

Dans notre exemple, nous récupérons aléatoirement une série d’attaquants parmi les 500 dernières attaques effectuées sur notre serveur.

En rajoutant un point spécifique correspondant à l’emplacement de votre serveur, vous pouvez alors mettre en image les attaques subites.

3. POUR ALLER PLUS LOIN

De nombreuses améliorations peuvent être apportées à ce système.

D’un point de vue sécurité, il serait intéressant d’analyser d’autres types d’attaques, comme par exemple les tentatives d’exploitation de vulnérabilités sur les services et CMS répandus. Il serait également intéressant de rajouter d’autres serveurs à différents endroits de la planète afin de vérifier si le nombres d’attaques et leurs vecteurs sont les mêmes partout sur Terre.

Du côté de l’affichage des données, de nombreux effets visuels pourraient être ajoutés. Il serait par exemple possible de distinguer les différents types d’attaques sur la carte, par exemple en leur affectant une couleur spécifique.

Au delà de l’aspect ludique et visuel apporté par l’interface cartographique, la mise en place d’un tel système présente plusieurs intérêts pour une entreprise.

Il permet en effet d’obtenir des statistiques précises sur la fréquence et l’origine des attaques. D’une part, ces données contribuent à sensibiliser l’ensemble du personnel aux menaces informatiques. D’autres part, ces données permettent de mieux visualiser les vecteurs d’attaques du moment et d’adapter les stratégies de sécurité à adopter.

 

Références

Base de données GeoIP : https://www.maxmind.com
Sources du projet : https://github.com/MohGeek/HackersMap
Carte HPJ : http://threats.agencehpj.com/