Contourner un pare-feu avec le DNS Tunnelling et Iodine

iodine-image Iodine Crystals

L’article d’aujourd’hui va porter sur le DNS Tunnelling.

C’est quoi ? :

Il s’agit d’une technique permettant de contourner un pare-feu et d’accéder à certaines ressources sur le net quand le réseau est filtré.

Le principe est le suivant :

On installe Iodine sur un serveur qui est accessible depuis le net.

On lance l’instance de Iodined sur le serveur.

On installe Iodine sur le client.

On lance Iodine sur le client ce qui va créer un tunnel DNS entre le client et le serveur.

On lance une connexion SSH permettant de créer un proxy Socks sur le client.

On configure le navigateur ou proxychains pour router son trafic vers le serveur.

Tout le trafic sera encapsulé dans des requêtes DNS ce qui permet de contourner la sécurité et d’accéder à des ressources qui ne vous sont normalement pas accessibles.

Cette technique est souvent utilisée par les backdoors pour exfiltrer des données.

Elle permet aussi d’avoir une connexion Internet depuis un hotspot sans authentification.

La pratique :

Sur le serveur:

apt-get install iodined -y
useradd iodined
usermod iodined --lock
mkdir /var/empty
iodined -u iodined -t /var/empty -c -f -D -P motdepasse 10.0.0.1 nomdedomaineduserveur

On sauvegarde les règles iptables existantes :

iptables-save > iptables-backup

On active le forwarding des paquets au niveau du kernel:

echo 1 > /proc/sys/net/ipv4/ip_forward

On ajoute quelques règles pour router le trafic entre les deux interfaces (eth0 – internet / dns0 – tunnel DNS)

iptables -A FORWARD -i dns0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o dns0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Le serveur est prêt. Il répondra aux requêtes DNS demandées sur le nom de domaine qui lui est configuré.

Votre serveur devrait obtenir l’IP 10.0.0.1 sur l’interface dns0.

Depuis notre client, pour ouvrir le tunnel DNS, on fait comme suit :

apt-get install iodine -y
useradd _iodined
usermod _iodined --lock
mkdir /var/empty
iodine -f -u _iodined -T CNAME ipduserveur -t /var/empty -p motdepasse nomdedomaineduserveur

J’ai ajouté le paramètre -T CNAME ipduserveur car mon client Iodine me renvoyait le message « GOT NXDOMAIN AS REPLY ». Ce paramètre permet de définir le serveur de DNS Tunnelling avec son IP.

Le tunnel est prêt. Votre client devrait obtenir l’IP 10.0.0.2.

On lance ensuite une connexion SSH depuis le client avec les paramètres adéquats afin de créer un proxy Socks :

ssh -D 8080 root@10.0.0.1

Entrez votre mot de passe et une fois la connexion réussie, vérifiez sur votre client que tout est bien fonctionnel en tapant :

lsof -i :8080

Il ne vous reste plus qu’à configurer votre navigateur pour utiliser le proxy Socks, ou encore configurer proxychains pour router toute application qui ne gérerai pas nativement le Socks.