noyau: désactivation de / dev / kmem et / dev / mem

8

Je comprends cela /dev/kmemet je /dev/memdonne accès à la mémoire (c.-à-d. La RAM brute) du système. Je suis également conscient que cela /dev/kmempeut être complètement désactivé dans le noyau et que l'accès peut être restreint /dev/mem.

Il me semble, avoir un accès brut à la mémoire peut être utile pour les développeurs et les pirates, mais pourquoi devrais-je avoir besoin d'accéder à la mémoire /dev/mem. AFAIK il ne peut pas être désactivé dans le noyau (contrairement à /dev/kmem). Avoir accès à une mémoire brute qui peut être potentiellement exploitée / abusée me semble être un problème.

Y a-t-il une utilité pratique pour cela? Y a-t-il des programmes utilisateur qui nécessitent qu'il fonctionne correctement?

user1968963
la source
1
lwn.net/Articles/147901 suggère que le serveur X pourrait utiliser /dev/mem. Je ne suis pas sûr que ce soit toujours d'actualité.
Mat
Cet article de LJ suggère la même chose: linuxjournal.com/magazine/anthony-lineberry-devmem-rootkits
slm
Avez-vous également désactivé les modules chargeables? Parce que c'est encore plus dangereux que ça /dev/mem. Chargez un module, exécutez le code en mode noyau. Et en plus de cela, durcir contre les attaquants avec un accès root ne vaut que s'il y a des choses que root ne peut pas faire, ce qui n'a pas tendance à être le cas dans les installations typiques.
Gilles 'SO- arrête d'être méchant'
@Gilles - J'utilise des modules signés cryptographiquement. Seuls les modules signés avec ma clé privée peuvent être chargés.
user1968963
En plus de STRICT_DEVMEM décrit dans man mem, l' accès en écriture à / dev / mem est désactivé par les correctifs de verrouillage du noyau utilisés pour prendre en charge le "démarrage sécurisé" (le verrouillage peut être activé sans démarrage sécurisé). phoronix.com/…
sourcejedi

Réponses:

6

Il y a un jeu de diapositives de Scale 7x 2009 intitulé: Undermining the Linux Kernel: Malicious Code Injection via / dev / mem qui contenait ces 2 puces.

Qui en a besoin?

  • Serveur X (mémoire vidéo et registres de contrôle)
  • DOSEmu

D'après tout ce que j'ai trouvé à partir des recherches jusqu'à présent, il semblerait que ces 2 balles soient les pionniers pour des utilisations légitimes.

Références

slm
la source
que faire si je ne tourne pas X serversur mon serveur et que je n'en ai donc pas besoin /dev/mem. Existe-t-il un moyen de désactiver /dev/memcomplètement le noyau? Je n'ai trouvé que "Filtrer l'accès à / dev / mem" ( CONFIG_STRICT_DEVMEM).
user1968963
1
Un serveur X moderne, sous Linux, peut vivre sans / dev / mem, car les cartes graphiques ont leur propre nœud de périphérique. C'est le cas avec le i915 par exemple.
jørgensen
3

Il convient de noter que même si vous avez désactivé /dev/memet /dev/kmemque la mémoire peut encore être vidée; jetez un oeil à man procrévéler /proc/kcore; c'est la mémoire physique du système. Une très bonne boîte à outils forensics rekall a un outil qui fait déjà cela ; il vide la mémoire (et les /bootfichiers) afin qu'ils puissent être analysés.

En fait, Ubuntu désactive par défaut/dev/kmem :

Il n'y a aucune utilisation moderne de /dev/kmemplus que les attaquants qui l'utilisent pour charger les rootkits du noyau. CONFIG_DEVKMEMest réglé sur "n". Bien que le /dev/kmemnœud de périphérique existe toujours dans Ubuntu 8.04 LTS à Ubuntu 9.04, il n'est en fait attaché à rien dans le noyau.

Ubuntu ne se désactive pas /dev/memcar il est nécessaire aux applications .

Certaines applications (Xorg) nécessitent un accès direct à la mémoire physique depuis l'espace utilisateur. Le fichier spécial /dev/memexiste pour fournir cet accès. Dans le passé, il était possible d'afficher et de modifier la mémoire du noyau à partir de ce fichier si un attaquant avait un accès root. L' CONFIG_STRICT_DEVMEMoption du noyau a été introduite pour bloquer l'accès à la mémoire hors périphérique (initialement nommé CONFIG_NONPROMISC_DEVMEM).

Comment désactiver /proc/kcore?

Ne pas activer CONFIG_PROC_KCORElors de la construction du noyau.

Comment désactivez-vous /dev/mem?

Eh bien, regarder plus man memloin nous donne quelques détails sur la façon dont il a été créé:

mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem

Vous devriez pouvoir juste rm -rf /dev/mem; vous pouvez désactiver pendant la phase de construction du noyau en ne l'activant pas CONFIG_STRICT_DEVMEM.

Comment désactiver /dev/kmem?

Assurez-vous que ce CONFIG_DEVKMEMn'est pas activé lors de la construction du noyau.

Comment empêcher les attaques de démarrage à froid?

Et si je pouvais désactiver /proc/kcore, /dev/mem, /dev/kmempuis utilisé une partition de swap crypté ou n'a pas utilisé du tout échange? Eh bien, votre mémoire pourrait être gelée et accessible de cette façon. Comment empêchez-vous cette attaque? Vous cryptez votre RAM; comment cryptez-vous votre RAM? Tu ne peux pas. Voir TRESOR pour plus de détails .


la source
J'ai désactivé /dev/kmemmon noyau et je n'en vois aucun /proc/kcoresur mon système. Mais je l'ai /dev/mem, et je voudrais le désactiver.
Martin Vegter
Il y a des fautes de frappe dans cette réponse. /proc/memdevrait être /dev/mem, de même pour /proc/kmem.
rlf
@ bbb31 nice one. Je pensais qu'il pouvait y avoir quelque chose qui me manquait. Si tel avait été le cas, je voulais vous donner une chance de clarifier.
rlf
"Comment empêchez-vous cette attaque? Vous cryptez votre RAM; comment cryptez-vous votre RAM? Vous ne pouvez pas." Remarque: À l'avenir, vous devriez pouvoir le faire (au moins sur certains types de matériel) - cela arrive bientôt! lwn.net/Articles/776688
比尔 盖子
1

Comme vous le savez, /dev/memdonne accès à la mémoire physique d'un système en cours d'exécution. /dev/kmemdonne accès à la mémoire virtuelle du noyau. Ces deux périphériques de caractères peuvent être désactivés de manière persistante via les options de configuration du noyau (le code est la source d'information la plus fiable, il est donc utilisé comme référence). La désactivation des deux premières options ci-dessous désactivera les appareils correspondants.

Selon votre distribution, votre configuration actuelle du noyau peut être vue en utilisant quelque chose comme zless /proc/config.gzou less /boot/config-$(uname -r).

Je pense que l'intention initiale de /dev/memétait de soutenir l'interaction avec les périphériques mappés en mémoire . Les implications de sécurité négatives évidentes de la disponibilité de ces périphériques virtuels (par exemple, un attaquant pouvant patcher à la volée la mémoire d'un autre processus ou même le noyau) est connue depuis au moins une décennie. Restreindre l'accès à /dev/mema été pris en charge dans le noyau de la ligne principale depuis le début de 2008 , et /dev/kmemest également facultatif depuis cette date également.

Il y a une décennie, il semble que cela Xdépendait /dev/mem, je ne pense pas que ce soit toujours vrai. Pour tester les affirmations sur la Xnécessité, /dev/memj'ai supprimé le périphérique virtuel de mon ordinateur portable hier et il fonctionne parfaitement depuis. En 2017, il ne semble pas y avoir d'utilisation pratique de ces appareils en dehors de la recherche et du développement.

Du point de vue de la sécurité, il est judicieux de supprimer ces appareils. Il convient de noter qu'un attaquant distant , avec des privilèges élevés, peut lire la mémoire en dehors de son espace d'adressage. La mémoire d'autres applications de l'espace utilisateur est accessible à l'aide de /proc/<pid>/mem. La mémoire du noyau est accessible à l'aide de /proc/kcore.

rlf
la source
0

Je n'ai pas inclus /dev/memsur mon système depuis le début. J'utilise Gentoo Linux, donc cela peut ne pas être surprenant, car avec cette distribution Linux, vous construisez pratiquement tous les packages vous-même, y compris le noyau Linux.

Je n'ai jamais remarqué de problèmes en raison de l'absence de /dev/mem, même lorsque j'utilise X.org X11. Aujourd'hui encore, j'ai remarqué qu'une émergence du package x11-drivers/xf86-video-vesaimprime un message indiquant qu'il nécessite /dev/mem, comme ceci:

* This driver requires /dev/mem support in your kernel
*   Device Drivers --->
*     Character devices  --->
*       [*] /dev/mem virtual device support

Étant donné que je n'ai pas installé le pilote VESA pour le XServer intentionnellement, ou même si ce n'est que comme solution de repli, je n'ai jamais eu à l'utiliser et je ne l'ai donc pas remarqué - jusqu'à présent.

Mais cela prouve le point que a) X11 n'a plus besoin /dev/mem, et b) que certains pilotes vidéo X11 peuvent toujours le faire de toute façon.

Les pilotes vidéo plus récents pour un matériel spécifique fonctionneront très probablement sans lui. Tout comme le X.org-X11 moderne (sur Gentoo, x11-base/xorg-server) n'a même plus besoin d'être suid root , voilà à quoi ressemble le progrès ...

luttztfz
la source