Je me suis acheté un clé USB RTL-SDR récemment pour faire du SDR ( Software Defined Radio ). C’est une clé USB qui à l’origine est destiné à la réception des chaines TNT sur PC. Des gens intéressants se sont aperçu que la puce utilisée pouvait être, moyennant le bon driver, utilisée pour recevoir/écouter d’autres fréquences (AM/FM/VHF/etc). Désormais des marques vendent des clés directement adaptées à cet usage avec des puces optimisées. Pour la référence j’ai commandé une clé RTL2832U de la marque Nooelec avec antenne.

Objectif de la manœuvre : voir les avions qui passent au dessus de nos têtes.

Certains avions émettent des signaux ADS-B ce qui permet de déterminer l’identité+trajectoire+vitesse+altitude de chaque appareil : https://fr.wikipedia.org/wiki/Automatic_dependent_surveillance-broadcast

Pour la partie logiciel :

Une fois tout ça installé, driver qui fonctionne, SDRSharp qui arrive à recevoir de la FM ou tout autre chose, on lance RTL1090 puis Virtual Radar et tadaaaaaam les avions apparaissent !

EasyJet
La CIA qui rentre du G7

C’est simple et marrant de voir tout ce qu’on peut capter comme signaux (coucou les électrosensibles).

Edit 2019-09-01 : j’ai mis le rafraîchissement en place toute les heures, c’est efficace a en juger les graphes Fail2ban.

Récemment j’ai pu faire la découverte d’ipset, une extension kernel Linux qui permet de faire des listes d’adresses ipv4/ipv6 et sous-réseaux utilisables avec iptables (et donc shorewall)

C’est très pratique quand vous en avez ras le bol de vous faire poutrer des services (SSH/FTP/Mail/etc) par des robots, fail2ban c’est bien mais si on peut bloquer le gros des méchants déjà connus c’est mieux.

Pour faire simple et à la main, il faut créer une liste en définissant son type (net/ip) puis l’alimenter :

## creation des sets
ipset create blacklist_net -exist hash:net family inet hashsize 16777216 maxelem 16777216 
ipset create blacklist_ipv4 -exist hash:ip family inet hashsize 16777216 maxelem 16777216
## alimentation d'une liste
ipset add blacklist_ipv4 8.8.8.8
ipset add blacklist_net 192.168.12.0/24

Exemples idiots mais vous voyez ou je veux en venir. Une fois la liste créé on peut l’utiliser dans une règle shorewall dans le fichier /etc/shorewall/rules par exemple :

DROP		net:+blacklist_ipv4	$FW
DROP		net:+blacklist_net	$FW
DROP		$FW			net:+blacklist_net
DROP		$FW			net:+blacklist_ipv4

Pour être plus efficace, et parce qu’alimenter ip par ip c’est pas l’objectif, il existe un projet open-source très bien fourni, Firehol, qui regroupe pour les besoins de sa solution un ensemble de listes d’adresses IP mises à jour régulièrement, toutes les heures voir toutes les minutes pour certaines.

Pour automatiser :

  • Première solution, utiliser la solution Firehol
  • Deuxième solution, pisser un script qui va télécharger les listes qui me plaisent et les bidouiller pour les utiliser dans mes ipset derrière.

J’ai mis en ligne une première ébauche d’un script bash+python qui fait tout ça sur mon dépôt Git : https://git.k3nny.fr/Tools/ipset_updater

Note : d’un point de vu technique, l’ajout des ip/subnet par une boucle python ou bash est beaucoup trop long, ipset permet l’import massif en utilisant la restauration de fichier, c’est cette méthode qui est utilisé (voir le script : https://git.k3nny.fr/Tools/ipset_updater/src/branch/master/ipset_update.sh )

Une fois le script lancé on obtient ça :

* 2019-08-28 20:00:10 Runinng list update
Reading lists of URL to download
= Update ipv4
- Downloading spamhaus
- Downloading bi_any_2_7d
- Downloading blocklist
- Downloading stopforumspam
- Downloading haley_ssh
- Downloading blocklist_ssh
- Downloading bi_any_2_1d
- Downloading bi_any__1_7d
- Downloading bi_any_0_1d
- Downloading bi_any_2_30d
= Update net
- Downloading ru
- Downloading emerging
- Downloading cn2
- Downloading cn
- Downloading bogons
- Downloading firehol
- Downloading pk
- Downloading sa
- Downloading kor
= Saved 280625 elements to ipset_ipv4.set
= Saved 24751 elements to ipset_subnets.set
* Create ipset blocklists if not already existing
* Import lists into ipset
== Import ipv4 ipset
== Import subnets ipset
* Saving ipset
* Cleanup ipset files

Avec les listes incluses ça fonctionne déjà assez bien, je constate moins de tentative de connexion ssh intempestives, à vous de faire votre choix de blocage en fonction de vos besoins (blocage par pays, listes de blocages).

  • Je ne suis pas encore passé à Debian Buster, ni à nftables, visiblement nftables implémente les listes directement sans passer par une extension comme ipset.
  • J’ai commencé à modifier le script pour prendre en charge les listes ipv6 mais j’ai eu la flemme

Des ressources pour gratter :

En surfant sur les internets je suis malencontreusement tombé sur un bucket Amazon S3 utilisé par un site que je consultais.

Le problème avec ce service proposé par Amazon c’est qu’il est insécurisé par défaut : https://www.upguard.com/blog/s3-security-is-flawed-by-design .

<salt>Pour caricaturer , auparavant les développeurs web crados y allaient à grand coup de chmod 777 à tout va sur le FTP, désormais on fout tout dans un bucket s3 et on l’ouvre en public. </salt>

Un bucket s3 ouvert en public = tout le bucket accessible à tout va et à n’importe qui. En fouillant dans ce seau, je suis tombé sur des dump de la base SQL de production (oh bah merde alors).

Cela m’a permis d’apprendre à jouer avec les buckets, si jamais vous tombez sur une instance ouverte un jour, voici un script python qui permet dumper la liste de touts les objets présents (remplacer « bucket-tout-moisi ») :

#!/usr/bin/python3
import boto3
import json
from botocore import UNSIGNED
from botocore.client import Config

client = boto3.client("s3", config=Config(signature_version=UNSIGNED))

paginator = client.get_paginator("list_objects_v2")

data = []
for page in paginator.paginate(Bucket="bucket-tout-moisi"):
    for elem in page["Contents"]:
        data.append(elem["Key"])

with open('output.json', 'w') as outfile:
    json.dump(data, outfile)

On creuse et on trouve que ce dump SQL est une base PostgreSQL. Si vous êtes sous Win10, je vous conseille d’installer un sous-système Linux (debian-wsl) + VcXsrv + Terminator puis d’installer postgresql, ça va vite, on importe le dump puis avez un outil simple comme PgAdmin on regarde ce qu’il y’a de beau à gratter.

Oh surprise, cette base contient 2600+ utilisateurs, hash de mot de passe, adresses, des données personnelles, etc,etc.

La table « users » est intéressante elle contient des hashs de mot de passe au format bcrypt, c’est à dire un sel différent pour chaque utilisateur + hash du mot de passe :

$2y$10$wxeXGxk6YJTN8MPXFAeoLewBJ6toW88x.xqiNq7c/Ip0Y8MYhD0DO

C’est pas mal du tout puisque ça permet en cas de fuite de la base de données d’éviter des attaques par table arc-en-ciel.

On peut quand même retrouver quelques mots de passe en utilisant Hashcat et un dictionnaire de mots de passe, en l’occurrence c’est un site français donc j’ai pris la liste des 5000 mots de passe Français les plus fréquents dans le projet Richelieu : https://github.com/tarraschk/richelieu

PS : si un de vos mot de passe est dans cette liste, bon, voilà hein.

Hashcat demande énormément de puissance de calcul puisque pour chaque sel et chaque élément du dictionnaire il va calculer le hash de mot de passe correspondant puis comparer avec tous les hashs de mots de passes de la liste. Temps estimé avec une GTX 1080 : 13h.

En laissant tourner quelques minutes, j’ai pu trouver 18 mots de passes simples.

En corrélant les résultat avec la liste des emails on obtient une liste comme celle-ci :

xxxxxxxxxxxxxxxxxx@wanadoo.fr:$2y$10$wxeXGxk6YJTN8MPXFAeoLewBJ6toW88x.xqiNq7c/Ip0Y8MYhD0DO:toto
xxxxxxxxxxxxxxxxxx@free.fr:$2y$10$wxeXGxk6YJTN8MPXFAeoLewBJ6toW88x.xqiNq7c/Ip0Y8MYhD0DO:motdepasse
xxxxxxxxxxxxxxxxxx@gmail.com:$2y$10$wxeXGxk6YJTN8MPXFAeoLewBJ6toW88x.xqiNq7c/Ip0Y8MYhD0DO:pierre
xxxxxxxxxxxxxxxxxx@numericable.fr:$2y$10$wxeXGxk6YJTN8MPXFAeoLewBJ6toW88x.xqiNq7c/Ip0Y8MYhD0DO:dodo
xxxxxxxxxxxxxxxxxx@laposte.net:$2y$10$wxeXGxk6YJTN8MPXFAeoLewBJ6toW88x.xqiNq7c/Ip0Y8MYhD0DO:coucou
xxxxxxxxxxxxxxxxxx@sfr.fr:$2y$10$wxeXGxk6YJTN8MPXFAeoLewBJ6toW88x.xqiNq7c/Ip0Y8MYhD0DO:password
etc...

Les combinaisons email+mot de passe sont très intéressantes puisqu’en général les gens sont fainéants et réutilisent le même mot de passe partout, donc il y’a fort à parier qu’on puisse se connecter avec les email/mot de passe à divers comptes Facebook/Mail/Twitter/etc

Après avoir gratté et appris à faire joujou avec Hashcat et les buckets s3 j’ai pris contact avec l’éditeur du site en défaut qui à depuis pris les mesures nécessaires pour faire le ménage.