UP | HOME

Pwned by abandonware

Table of Contents

1. Introduction

Informations - Rediffusion

Conférence faite par des employés de Synacktiv. La conférence se veut un premier pas dans la sécurisation Linux via le prisme d'un émulateur (DOSBox) qui a besoin d'autorisations tout en les régulant pour ne pas se faire poutrer par un exécutable malveillant.

2. Contexte

DOSBox est un émulateur de système DOS. Une fois lancé, il peut monter en lecture et écriture le disque de l'hôte. Wine est un émulateur plus générique pour Windows, qui va monter automatiquement le dossier home de l'utilisateur.

Est-il possible, ayant accès aux fichiers de l'utilisateur, de lui péter son système en backdoorant un exéctuable ou un script ?

2.1. Avec un script .bat

Il n'est pas possible d'exécuter un script .bat avec DOSBox qui écrit un programme malveillant sur l'hôte pour plusieurs raisons :

  • le nom des fichiers est en majuscules (avec une commande de type echo coucou > test)
  • le retour à la ligne est celui de Windows (\r\n) et ne sera pas compris par Linux si on cherche à exécuter le fichier ensuite
  • les fichiers ont un nom d'une taille maximum de 8 caractères

L'idée serait donc d'écrire un programme en C pour pouvoir écrire ce fichier.

2.2. Détection de l'environnement

Il est possible de détecter DOSBox grâce à la commande ver. Il est indiqué la version de DOS ainsi que DOSBox. Il est aussi possible de le détecter avec un script BAT : on essaie de monter D dans ~. Windows refusera mais c'est possible sur Linux.

Il est plus compliqué de détecter Wine, mais son nom peut être retrouvé dans le fichier ntdll.dll.

2.3. Comment se protéger

Plusieurs options :

  • avoir confiance en l'éditeur et dans le distributeur : un vieux logiciel a pu être repacké et tous les distributeurs ne font pas de check de sécurité
  • lire le code source, mais le binaire peut différer et c'est très chronophage et nécessite des compétences en RE et/ou en développement

Ou alors, on liste ce que l'on souhaite éviter : l'accès aux fichiers et à Internet.

Il est possible de faire ça avec une sandbox :

  • Docker, dur à utiliser avec une interface graphique
  • une VM, mais il n'y a pas plus d'intérêt à utiliser DOSBox
  • utiliser une technologie qui s'appuie sur les namespaces (FireJail, BubbleWrap, Flatpack…)

On va se concentrer sur un mécanisme générique : les Linux Security Module, et plus particulièrement sur SELinux et AppArmor, les plus connus. Il existe d'autres solutions, souvent complémentaire, comme Yama ou Lockdown.

3. SELinux

Cette solution a été développé en 2001 par la NSA, mais Linus n'était pas chaud pour l'ajouter à Linux.

Son principe est de mettre un label à chaque processus et fichier afin de limiter les accès à des bulles. Cela nécessite cependant un système de fichier compatible. Il est possible de voir ce label avec l'option -Z dans ls et ps.

Par exemple (et par défaut), un processus avec le label ssh ne peut pas lire un fichier avec le label http. Et ce même s'il est exécuté en root.

Ce n'est cependant pas le cas, SELinux est configuré pour pouvoir laisser un minimum de liberté aux utilisateurs. Beaucoup de choses sont "cachées", mais configurables.

2 astuces :

  • ne jamais mettre la valeur setenforce à 0, cela désactive SELinux
  • la copie de fichier ne va pas forcément garder le label. Il faut utiliser restorecon pour le restaurer

Google utilise cette solution pour Android (depuis la 5.0) et les distributions basées Fedora ont une préconfiguration dédiée.

SELinux rend la rétroingénierie et le pentest très difficile. Il apporte une bonne protection. Cependant, il n'est pas bien supporté par Ubuntu ou Debian.

4. AppArmor

AppArmor a quelques différences avec SELinux :

  • il est plus simple et utilisé par défaut sur Debian
  • n'a pas de label par fichier, seuls les processus en ont un
  • le profil est lié à un chemin, on perd la configuration, ou profile, si on déplace le binaire

Un fichier de configuration va contenir des listes d'actions. Il existe 2 modes qui vont définir ce que l'on fait lorsqu'un programme voudra en exécuter une :

complain
reporte l'action dans le journal
enforce
bloque l'action sans la reporter

Lorsqu'un programme appelle un autre programme, on effectue une transition.

Ubuntu contient le profile AppArmor de quelques applications, mais la majorité n'en a pas.

4.1. Comment faire un profile

L'outil officiel pour écrire des profiles ne marche pas très bien et est en retard sur certaines fonctionnalités. Il est mieux d'écrire à la main la configuration.

La méthode Synacktiv pour écrire rapidement un profile fonctionnel :

  1. écrire un profile simple très restrictif en mode enfore
  2. essayer de lancer l'application (elle va sûrement crasher parce qu'elle n'a pas assez de droits)
  3. vérifier la dernière action qu'elle a souhaité faire
  4. l'ajouter dans le profile
  5. retourner au 2.

Il est possible d'inclure d'autres fichiers dans les profiles, plusieurs fichiers d'abstraction contenant des règles pour des programmes C ou des programmes ayant besoin du son se trouvent dans /etc/apparmor.d.

4.2. Quelques astuces

Le profile private-file-strict permet de bloquer toutes les actions sur les fichiers.

Il est possible de mettre le flag U pour définir des changements de profiles lors des transitions. Il faut cependant éviter, cela autorise le programme à faire ce qu'il veut.

La règle deny va être prioritaire sur une même rège qui autoriserait une action et ne laisse pas de trace dans le journal. Cela permet d'éviter le spam d'informations alors que l'on sait que le programme fonctionne sans avoir accès à cette règle. Une règle deny ne laisserait pas de trace même avec un profile complain.

5. Durcir Wine sans AppArmor

Pour pouvoir durcir Wine sans utiliser AppArmor, il est possible de :

  • avoir un utilisateur à part sans droit, certains fichiers systèmes peuvent cependant rester accessible
  • utiliser la sandbox de Wine, mais elle reste très vulnérable et facilement contournable

6. Conclusion

  • il ne faut pas lancer n'importe quoi sur sa machine
  • il faut durcir son système
  • il faut comprendre comment ce durcicement fonctionne pour pouvoir l'appliquer au mieux

Date: 2023-12-15 ven. 00:00

Author: rick

Email: rick@gnous.eu

Created: 2024-11-25 lun. 18:55

Validate