
Article académique et diapositives de présentation analysant la vulnérabilité d'escalade de privilèges Dirty COW sous Linux (CVE-2016-5195), incluant les techniques d'exploitation, le comportement de l'écriture en différé du noyau et les défis de détection.
Ce dépôt contient mon article et les diapositives de présentation sur CVE-2016-5195, une vulnérabilité d'élévation de privilèges sous Linux, rédigés pour le cours « Operating Systems: Design And Security » à la FMI de l'Université de Bucarest.
Dans mon article, j'affirmais que l'on pouvait utiliser Dirty COW pour backdoorer silencieusement des binaires sans s'élever immédiatement à root afin de rendre la détection plus difficile.
Ce n'est en réalité pas vrai car lors de la tentative de réécriture (writeback) de la page modifiée, le noyau remarque que la page est dirty (ce qu'elle ne devrait jamais être) et panique, faisant planter le système.
Pour éviter cela, vous devez immédiatement vous élever à root et désactiver la réécriture automatique par "echo 0 > /proc/sys/vm/dirty_writeback_centisecs". Ma preuve de concept ne le fait pas, donc elle plante rapidement lors des tests dans une VM, après avoir modifié avec succès /etc/passwd (qui n'est pas persisté sur le disque).
https://www.exploit-db.com/exploits/40847 est un exemple de code d'exploitation qui écrase /etc/passwd puis désactive la réécriture pour éviter le plantage.
D'autres méthodes incluent le patching de vDSO (https://github.com/scumjr/dirtycow-vdso) au lieu d'une page adossée à un fichier, ce qui affecte tous les processus du système et ne plante pas, et présente d'autres avantages comme l'évasion de conteneurs et n'est pas affecté par les restrictions SELinux qui pourraient empêcher même d'ouvrir /etc/passwd en lecture seule pour l'attaque.
Bien que vous puissiez effectivement backdoorer le système après être monté à root (comme pour toute autre méthode d'élévation de privilèges), cela impliquerait des opérations normales du système de fichiers et pourrait être détecté par les systèmes de détection d'intrusion, alors que si la réécriture avait fonctionné comme je le pensais à l'origine, elle pourrait contourner la surveillance des opérations d'écriture, puisque le noyau réécrirait simplement la page sans appel système d'écriture, mais en réalité il panique simplement.