JournalDétection

/etc/ld.so.preload : le fichier à vérifier en premier

Une seule ligne dans ce fichier suffit à injecter du code dans chaque programme du serveur. Voici comment le contrôler, garder la preuve et le nettoyer.

À retenir+

  • Sur un serveur sain, le fichier n'existe pas ou il est vide.
  • S'il contient une ligne, on garde la preuve avant de toucher à quoi que ce soit.
  • On le vide après avoir isolé la machine, puis on prévoit une réinstallation.

Ce que fait ce fichier

Avant de lancer un programme, le chargeur de Linux lit /etc/ld.so.preload. Chaque bibliothèque qui y figure est chargée dans le programme, avant toutes les autres. La fonction existe pour le débogage. Un attaquant s'en sert pour entrer dans ls, ps, sshd ou cron sans modifier leurs binaires, et leur faire cacher ses fichiers et ses processus.

La vérification

ls -la /etc/ld.so.preload
cat /etc/ld.so.preload

Si la commande répond que le fichier n'existe pas, ou si le fichier est vide, tout va bien. Une ligne, en revanche, demande une enquête.

Les rares usages légitimes

Sur Raspberry Pi OS, on peut y trouver libarmmem. L'outil de journalisation Snoopy s'y inscrit aussi. Dans les deux cas, la bibliothèque appartient à un paquet installé :

dpkg -S libarmmem

Une bibliothèque qu'aucun paquet ne possède, placée dans /lib sous un nom anodin, est un signal fort de compromission.

Garder la preuve

Copiez le fichier et chaque bibliothèque listée sur une clé USB ou un disque externe, jamais sur le disque suspect :

cp -a /etc/ld.so.preload /mnt/ir/
for l in $(cat /etc/ld.so.preload); do
  cp -a "$l" /mnt/ir/; sha256sum "$l"; dpkg -S "$l" || echo "aucun paquet : $l"
done

Nettoyer

Une fois la machine isolée du réseau et les preuves sorties, videz le fichier sans le supprimer :

truncate -s 0 /etc/ld.so.preload

Les processus déjà lancés gardent la bibliothèque en mémoire. Il faut au minimum les relancer. Sur une machine compromise à ce niveau, la seule remise en état fiable est une réinstallation.

Ce qu'on a vu sur le terrain

Sur un serveur infecté par le malware perfctl, le fichier contenait /lib/libgcwrap.so. Cette bibliothèque cachait le mineur aux outils de la machine, et se chargeait jusque dans le démon Hermian. On a corrigé ce dernier point le 18 octobre (#92). Hermian a signalé la ligne en critique.

Ces commandes viennent de notre guide de réponse à incident Linux.