Création d'une application Rshiny (R)

Code source bientot disponible sur GitHub

Suite à l'achat de mon Raspberry B+, j'ai décidé d'ouvrir le port SSH de ma box pour pouvoir le controller à distance.

A peine quelques jours plus tard, j'ai constaté que des botnet essayaient de bruteforcer l'accès. J'ai donc créé une application Rshiny (web application framework for R) pour analyser ces attaques.

AppStatisticsByIp

Sur ubuntu comme sur NOOBS, les logs des authentifications sont enregistrées dans "/var/log/auth.log". Il est facile de récupérer les tentatives infructueuses de connections. Ces lignes contiennent les mots "Failed" ou "Did".

J'ai donc créé un parseur java qui récupère via la librairie jsch les fichiers auth.log du Raspberry.

CreateCSV

La méthode suivante localise les tentatives de brute force.

addFailed

Pour savoir si les tentatives de hack du Raspberry ont réussies, je récupère également quelques informations supplémentaires.

addFailed

Et voici les commandes exécutés pour obtenir ces fichiers.

ExecuteRemote

Tous ces fichiers sont ensuite enregistrés.

inputRshinyAndJava

Voici un exemple du fichier de logs auth.log :

inputRshinyAndJava

Les auth.log* sont ensuites converties en un seul CSV, facilement compatible avec RShiny.

OutputJava

Grace à la librairie OpenSource Geo2IP, je calcul des variables supplémentaires comme le pays correspondant à l'adresse IP de l'attaquant. Les bases de données Geo2IP peuvent etre mises à jours par des scripts.

GeoLight2DBupdateScripts

Je créé ensuite le CSV avec les variables suivantes :

CSV3

Ici, ce fichier CSV fait 114 155 lignes (et donc tentatives d'attaque).

CSV1

La plupart de ces variables sont qualitatives.

CSV2

Je peux passer à l'étape suivante : le développement d'un client et d'un serveur Rshiny. J'utilise Rstudio.

RshinyArborescence

Rstudio permet meme de développer avec un viewer intégré. Les résultats montrent que la plupart des attaques viennent de la Chine (plus de 95%).

AppStatisticsByCountry

Il est aussi possible de modifier en temps réel le nombre de valeurs visualisables (ex : voir les 5 IP les plus fréquentes ou les 10 premiers pays).

AppStatisticsByIp

J'ai ainsi créé un onglet par variable qualitative avec un barplot et un pie de R. Voici le code source utilisé pour l'affichage des pays dans le fichier server.R de RShiny :

CodeRServeur

Conclusion : Pour éviter ces attaques, il est nécessaire d'installer un logiciel comme Fail to Ban qui blacklist temporairement une adresse IP.

 

Page d'acceuil
Accueil
Page d'acceuil