Como verificar se uma flag de taint do kernel está presente no Linux

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar o status de taint (contaminação) do kernel Linux. Exploraremos como determinar se o kernel está sendo executado em um estado potencialmente não suportado ou modificado, examinando o arquivo /proc/sys/kernel/tainted.

Após a verificação inicial, você aprenderá como verificar as razões específicas para qualquer taint do kernel, inspecionando o buffer de mensagens do kernel usando o comando dmesg. Finalmente, você explorará como inspecionar os símbolos do kernel usando /proc/kallsyms, o que pode ser útil para entender o estado do kernel e os módulos carregados.

Verificar o status de taint com cat /proc/sys/kernel/tainted

Nesta etapa, aprenderemos como verificar o status de "taint" (contaminação) do kernel Linux. O kernel pode se tornar "tainted" se módulos não-GPL (General Public License) forem carregados ou se certos eventos ocorrerem que possam indicar um problema ou uma configuração não padrão. Verificar o status de taint é uma maneira rápida de ver se seu kernel está sendo executado em um estado potencialmente não suportado ou modificado.

Podemos verificar o status de taint do kernel lendo o conteúdo de um arquivo especial no sistema de arquivos /proc. O sistema de arquivos /proc é um sistema de arquivos virtual que fornece informações sobre processos e outras informações do sistema.

Abra seu terminal, caso ainda não esteja aberto. Você pode fazer isso clicando no ícone Xfce Terminal no lado esquerdo da área de trabalho.

Agora, use o comando cat para exibir o conteúdo do arquivo /proc/sys/kernel/tainted. O comando cat é usado para concatenar e exibir o conteúdo do arquivo.

Digite o seguinte comando e pressione Enter:

cat /proc/sys/kernel/tainted

A saída será um único número.

0
  • Um valor de 0 significa que o kernel não está tainted.
  • Qualquer valor diferente de zero indica que o kernel está tainted. O número específico é uma máscara de bits onde cada bit representa uma razão diferente para o taint.

Por exemplo, se a saída fosse 1, indicaria que um módulo proprietário foi carregado. Se fosse 4, poderia indicar que um aviso do kernel ocorreu.

Em nosso ambiente LabEx, o kernel não deve estar tainted inicialmente, então você deve ver 0. Este é um bom sinal, indicando um estado de kernel limpo.

Entender o status de taint é importante para depurar problemas do kernel ou garantir que você está executando uma configuração de kernel padrão.

Clique em Continuar para prosseguir para a próxima etapa.

Verificar detalhes de taint no dmesg

Na etapa anterior, verificamos o status de taint do kernel usando /proc/sys/kernel/tainted. Embora esse arquivo nos forneça um código numérico indicando se o kernel está tainted, ele não nos diz por que ele está tainted. Para obter informações mais detalhadas sobre as mensagens do kernel, incluindo as razões para o tainting, podemos usar o comando dmesg.

O comando dmesg é usado para examinar o buffer de anel do kernel (kernel ring buffer). Este buffer armazena mensagens do kernel, incluindo informações do driver do dispositivo, erros e avisos. Quando o kernel se torna tainted, uma mensagem geralmente é registrada no buffer de anel explicando a razão.

Abra seu terminal, caso ainda não esteja aberto.

Agora, digite o seguinte comando e pressione Enter:

dmesg

Este comando produzirá uma quantidade potencialmente grande de texto, mostrando todas as mensagens do kernel desde que o sistema foi iniciado.

Para encontrar informações específicas relacionadas ao tainting, podemos combinar dmesg com o comando grep. grep é uma ferramenta poderosa para pesquisar padrões de texto. Vamos pesquisar linhas contendo a palavra "taint".

Digite o seguinte comando e pressione Enter:

dmesg | grep taint

O símbolo | é chamado de pipe (tubo). Ele pega a saída do comando à esquerda (dmesg) e a envia como entrada para o comando à direita (grep). Portanto, este comando primeiro obtém todas as mensagens do kernel e, em seguida, as filtra para mostrar apenas as linhas que contêm a palavra "taint".

Se o seu kernel não estiver tainted (como esperado neste ambiente), este comando pode não produzir nenhuma saída. Isso é normal e indica que nenhum evento de taint foi registrado.

Se o kernel estivesse tainted, você veria linhas semelhantes a esta (a mensagem exata depende da razão para o tainting):

[  ... ] kernel: Linux version ... (tainted: G)
[  ... ] kernel: Disabling lock debugging due to kernel taint

A parte (tainted: G) indica que o kernel está tainted, e a letra G significa especificamente que um módulo proprietário foi carregado. Outras letras indicam diferentes razões de taint (por exemplo, P para módulo proprietário, F para carregamento forçado de módulo, R para módulo de licença restrita, etc.).

Usar dmesg | grep taint é uma etapa crucial no diagnóstico de problemas do kernel quando /proc/sys/kernel/tainted mostra um valor diferente de zero.

Clique em Continuar para prosseguir.

Inspecionar símbolos do kernel com cat /proc/kallsyms

Nesta etapa, exploraremos outro arquivo importante no sistema de arquivos /proc: /proc/kallsyms. Este arquivo contém os endereços e nomes de todos os símbolos do kernel (funções e variáveis) que não são explicitamente marcados como static. É uma ferramenta crucial para depuração do kernel e compreensão do funcionamento interno do kernel.

O arquivo /proc/kallsyms lista cada símbolo do kernel com seu endereço de memória, tipo e nome. O formato de cada linha é tipicamente:

<address> <type> <symbol_name>
  • <address>: O endereço de memória onde o símbolo está localizado.
  • <type>: Um único caractere indicando o tipo de símbolo (por exemplo, t ou T para texto/código, d ou D para dados, b ou B para BSS, r ou R para dados somente leitura, w ou W para símbolo fraco, U para símbolo indefinido). Letras minúsculas indicam um símbolo local, letras maiúsculas indicam um símbolo global.
  • <symbol_name>: O nome da função ou variável do kernel.

Abra seu terminal, caso ainda não esteja aberto.

Agora, vamos visualizar o conteúdo de /proc/kallsyms usando o comando cat. Esteja ciente de que este arquivo é muito grande, então a saída rolará rapidamente.

Digite o seguinte comando e pressione Enter:

cat /proc/kallsyms

Você verá uma longa lista de linhas, cada uma representando um símbolo do kernel.

...
ffffffff... T sys_read
ffffffff... T sys_write
ffffffff... D jiffies
...

Para tornar esta saída mais gerenciável e encontrar símbolos específicos, podemos novamente usar grep. Por exemplo, vamos pesquisar símbolos relacionados a "schedule" (agendamento), que é uma função central do kernel para gerenciar processos.

Digite o seguinte comando e pressione Enter:

cat /proc/kallsyms | grep schedule

Isso filtrará a saída para mostrar apenas as linhas contendo a palavra "schedule".

ffffffff... T schedule
ffffffff... T schedule_timeout
ffffffff... T schedule_hrtimeout_range
...

Esta saída filtrada é muito mais fácil de ler e permite que você encontre os endereços e tipos de funções ou variáveis específicas do kernel nas quais você possa estar interessado.

Explorar /proc/kallsyms fornece informações valiosas sobre a estrutura do kernel e as funções disponíveis. É um recurso fundamental para qualquer pessoa que faça desenvolvimento de kernel ou depuração avançada.

Você agora aprendeu como verificar o status de taint do kernel e inspecionar símbolos do kernel usando o sistema de arquivos /proc e comandos básicos do Linux.

Clique em Continuar para concluir este laboratório.

Resumo

Neste laboratório, aprendemos como verificar o status de taint (contaminação) do kernel Linux. Começamos usando o comando cat /proc/sys/kernel/tainted para determinar rapidamente se o kernel está tainted, entendendo que um valor de 0 indica um estado limpo e qualquer valor diferente de zero significa um kernel tainted, com o número específico representando uma máscara de bits (bitmask) das razões.

Em seguida, prosseguimos para verificar os detalhes de qualquer taint, examinando o buffer de mensagens do kernel usando dmesg. Isso nos permite ver mensagens específicas relacionadas aos eventos que causaram o kernel a se tornar tainted, fornecendo mais contexto do que apenas o código numérico. Finalmente, exploramos como inspecionar símbolos do kernel usando cat /proc/kallsyms, o que pode ser útil para depuração avançada e compreensão do estado interno do kernel, embora esta etapa não tenha sido totalmente detalhada no conteúdo fornecido.