
Porte dérobée au niveau du noyau pour iptables qui accepte tous les paquets avec le RFC 3514 evil bit activé, contournant les règles du pare-feu. Inclut des constructions in-tree et out-of-tree pour Linux.
iptable_eviliptable_evil est une backdoor très spécifique pour iptables qui autorise tous les paquets avec le bit maléfique activé, quelles que soient les règles du pare-feu.
L'implémentation initiale se trouve dans iptable_evil.c, qui ajoute une table à iptables et nécessite la modification d'un en-tête du noyau pour y insérer un emplacement. La seconde implémentation est une version modifiée du module central ip_tables et de ses dépendants pour autoriser tous les paquets maléfiques.
Je l'ai testé sur la version 5.8.0-48 du noyau Linux, mais cela devrait s'appliquer à presque toutes les versions du noyau avec une implémentation complète d'iptables.
RFC3514, publié le 1er avril 2003, définit le bit de poids fort précédemment inutilisé du champ de décalage de fragment IP comme un indicateur de sécurité. Pour les systèmes conformes à la RFC, un 1 dans cette position de bit indique une intention malveillante et entraînera le blocage du paquet.
Par défaut, ce bit est désactivé, mais peut être activé dans votre logiciel si vous assemblez l'intégralité de votre paquet IP (comme le font certains outils de piratage), ou dans le noyau Linux en utilisant ce correctif (miroir dans ce dépôt ici).
Lorsqu'un paquet est reçu par le noyau Linux, il est traité par iptables et soit envoyé vers l'espace utilisateur, rejeté ou modifié selon les règles configurées. En particulier, chaque table iptables utilise la fonction ipt_do_table dans ip_tables.c pour décider d'accepter ou non un paquet donné. Je l'ai modifiée pour qu'elle accepte automatiquement tout paquet avec le bit maléfique activé et ignore tout traitement ultérieur.
J'ai également essayé d'ajouter une autre table (iptable_evil.c) qui accepterait tous les paquets maléfiques et transmettrait les autres aux tables standard pour traitement, mais je n'ai jamais compris comment passer les paquets à la table suivante et j'ai décidé que la backdoor ipt_do_table suffisait comme preuve de concept.
J'avais besoin de réaliser et de rédiger un projet assez conséquent en sécurité informatique pour l'un de mes cours, et cela m'a semblé une idée intéressante. C'est probablement plus de travail que ce qu'il attendait pour cela, mais ¯\_(ツ)_/¯.
La table evil nécessite la modification des en-têtes du noyau, donc son installation nécessite de fonctionner avec un noyau produit par la construction complète de l'arborescence.
replace-existing dans votre arborescence source du noyau, en écrasant les fichiers existants.iptable_evil.c vers linux-X.Y.Z/net/ipv4/netfilterip_tables.c vers linux-X.Y.Z/net/ipv4/netfilteriptables -t filter -Liptables -t evil -L (la sortie sera confuse, mais le module sera chargé)C'est beaucoup plus simple et rapide, mais ne prend pas en charge la table evil et marque le noyau comme 'contaminé'. Il devrait être possible de copier les fichiers ko produits par cette méthode vers un autre ordinateur avec exactement la même version du noyau, mais je ne l'ai pas testé.
makermmod iptable_*rmmod ip_tablesinsmod ip_tables.koinsmod iptable_filter.koPour tester cela, vous devez soit reconstruire l'intégralité de votre noyau avec ce correctif, soit créer vos propres paquets à l'aide d'un outil comme Scapy. J'ai choisi la première option car je construisais déjà le noyau pour la table evil.
Sur la première capture d'écran, j'ai bloqué tout le trafic vers cette VM dans iptables, mais je peux toujours me connecter via SSH car mes paquets ont le bit maléfique activé, comme le montre la deuxième capture d'écran.

Lors de la connexion à la VM backdoorée depuis une VM qui ne définit pas le bit maléfique, la connexion SSH finira par expirer.

Les captures de paquets des connexions SSH avec et sans backdoor se trouvent dans le dossier docs/ de ce dépôt pour votre consultation.
iptables_uwu de Ben Cox (principalement pour donner les noms des choses à rechercher) : https://github.com/benjojo/iptables-uwuiptables et de la façon d'ajouter des cibles et des modules : https://inai.de/documents/Netfilter_Modules.pdf