Eu entendo isso /dev/kmem
e /dev/mem
forneço acesso à memória (ou seja, RAM não processada) do sistema. Também estou ciente de que isso /dev/kmem
pode ser completamente desabilitado no kernel e que o acesso pode ser restrito /dev/mem
.
Parece-me que ter acesso bruto à memória pode ser útil para desenvolvedores e hackers, mas por que eu precisaria acessar a memória completamente /dev/mem
? AFAIK não pode ser desativado no kernel (ao contrário /dev/kmem
). Ter acesso à memória bruta que pode ser potencialmente abusada / explorada parece-me apenas pedir problemas.
Existe algum uso prático para isso? Algum programa de usuário exige que ele funcione corretamente?
/dev/mem
. Não tenho certeza se isso ainda é relevante./dev/mem
. Carregue um módulo, execute o código no modo kernel. Além disso, o fortalecimento contra invasores com acesso root só vale a pena se houver coisas que o root não pode fazer, o que tende a não ser o caso em instalações típicas.man mem
, o acesso de gravação ao / dev / mem é desativado pelos patches de bloqueio do kernel usados para dar suporte à "inicialização segura" (o bloqueio pode ser ativado sem a inicialização segura). Phoronix.com/…Respostas:
Existe um deck de slides da Scale 7x 2009 intitulado: Minando o kernel do Linux: injeção de código malicioso via / dev / mem que continha esses dois marcadores.
De tudo o que encontrei na pesquisa até agora, parece que essas duas balas são as pioneiras em usos legítimos.
Referências
fonte
X server
no meu servidor e, portanto, não precisar/dev/mem
. Existe uma maneira de desativar/dev/mem
completamente o kernel? Eu só consegui encontrar "Acesso de filtro a / dev / mem" (CONFIG_STRICT_DEVMEM
).Vale a pena notar que, mesmo se você desabilitou
/dev/mem
e/dev/kmem
a memória ainda pode ser despejada; dê uma olhadaman proc
para revelar/proc/kcore
; é a memória física do sistema. Um kit de ferramentas forenses realmente bom rekall tem uma ferramenta que já faz isso ; despeja a memória (e os/boot
arquivos) para que possam ser analisados.Por uma questão de fato, o Ubuntu por padrão desabilita
/dev/kmem
:O Ubuntu não desativa
/dev/mem
porque é necessário pelos aplicativos .Como desativar
/proc/kcore
?Não ative
CONFIG_PROC_KCORE
ao criar o kernel.Como você desativa
/dev/mem
?Bem, olhar por cima
man mem
nos dá alguns detalhes sobre como ele foi criado:Você deve ser capaz de apenas
rm -rf /dev/mem
; você pode desativar durante a fase de construção do kernel não habilitandoCONFIG_STRICT_DEVMEM
.Como desativar
/dev/kmem
?Certifique-se de que
CONFIG_DEVKMEM
não esteja ativado na construção do kernel.Como evitar ataques de inicialização a frio?
E se eu era capaz de desativar
/proc/kcore
,/dev/mem
,/dev/kmem
e depois usou uma partição swap encriptado ou não usar swap em tudo? Bem, sua memória pode ser congelada e acessada dessa maneira. Como você evita esse ataque? Você criptografa sua RAM; Como você criptografa sua RAM? Você não pode. Veja TRESOR para detalhes .fonte
/dev/kmem
no meu kernel e não vejo nenhum/proc/kcore
no meu sistema. Mas tenho/dev/mem
, e gostaria de desativá-lo./proc/mem
deve ser/dev/mem
, da mesma forma para/proc/kmem
.Como você sabe,
/dev/mem
fornece acesso à memória física de um sistema em execução./dev/kmem
fornece acesso à memória virtual do kernel. Ambos os dispositivos de caracteres podem ser desativados persistentemente por meio das opções de configuração do kernel (o código é a fonte de informações mais autoritativa e, portanto, é usado como referência). Desativar as duas primeiras opções abaixo desativará os dispositivos correspondentes.CONFIG_DEVKMEM
: determina se/dev/kmem
é criado na inicializaçãoCONFIG_DEVMEM
: determina se/dev/mem
é criado na inicializaçãoCONFIG_STRICT_DEVMEM
: se/dev/mem
existir, determina se o acesso a ele é restritoDependendo da sua distribuição, sua configuração atual do kernel pode ser vista usando algo como
zless /proc/config.gz
ouless /boot/config-$(uname -r)
.Penso que a intenção inicial
/dev/mem
era apoiar a interação com periféricos mapeados na memória . As implicações negativas óbvias na segurança de ter esses dispositivos virtuais disponíveis (por exemplo, um invasor capaz de corrigir rapidamente a memória de outro processo ou mesmo do kernel) são conhecidas há pelo menos uma década. A restrição de acesso a/dev/mem
é suportada no kernel da linha principal desde o início de 2008 e/dev/kmem
também tem sido opcional desde então .Há uma década, parece que isso
X
depende/dev/mem
, acho que ainda não é verdade. Para testar as alegações sobre aX
necessidade de/dev/mem
excluir o dispositivo virtual do meu laptop ontem, ele está funcionando aparentemente perfeito desde então. Em 2017, parece não haver uso prático para esses dispositivos fora da pesquisa e do desenvolvimento.Do ponto de vista da segurança, é uma boa ideia remover esses dispositivos. Ainda é importante notar que um invasor remoto , com privilégios elevados, pode ler a memória fora do seu espaço de endereço. A memória de outros aplicativos de espaço do usuário pode ser acessada usando
/proc/<pid>/mem
. A memória do kernel pode ser acessada usando/proc/kcore
.fonte
Eu não incluí
/dev/mem
no meu sistema desde o início. Eu uso o Gentoo Linux, então isso pode ser uma surpresa, pois com esta distribuição Linux, você praticamente constrói todos os pacotes, incluindo o kernel do Linux.Eu nunca notei nenhum problema devido à falta de
/dev/mem
, mesmo ao usar o X.org X11. Ainda hoje, notei que o surgimento do pacotex11-drivers/xf86-video-vesa
imprime uma mensagem informando que ele requer/dev/mem
, assim:Como não instalei o driver VESA para o XServer intencionalmente, ou mesmo apenas como um substituto, nunca precisei usar e, portanto, não o notei - até agora.
Mas isso prova que a) o X11 não precisa
/dev/mem
mais eb) que alguns drivers de vídeo do X11 ainda podem ser necessários.Drivers de vídeo mais recentes para hardware específico provavelmente funcionarão sem ele. Assim como o X.org-X11 moderno (no Gentoo
x11-base/xorg-server
), nem precisa ser mais um root , é assim que o progresso se parece ...fonte