Product SiteDocumentation Site

10.4. Evitando os rootkits

10.4.1. Loadable Kernel Modules (LKM)

Loadable kernel modules são arquivos contendo componentes carregados dinamicamente no kernel e são usados para expandir a funcionalidade do mesmo. O benefício principal de se usar módulos é a habilidade de adicionar dispositivos adicionas, como uma placa de rede Ethernet ou uma placa de som, sem ter que aplicar um patch no código-fonte e recompilar todo o kernel. Entretanto, os crackers vêm usando os LKMs para criar rootkits (knark e adore), abrindo backdoors nos sistemas GNU/Linux.
Os backdoors LKM estão cada vez mais sofisticados e mais difíceis de serem detectados que os rootkits tradicionais. Eles podem esconder processos, arquivos, diretórios e até mesmo conexões sem precisar modificar o código fonte dos binários. Por exemplo, um LKM malicioso pode forçar o kernel a esconder processos específicos do procfs, então mesmo uma cópia original do binário ps pode não listar informações precisas sobre os processos que estão rodando no sistema.

10.4.2. Detectando rootkits

Existem duas estratégias para defender seu sistema de rootkits LKM, a defesa pró-ativa e a reativa. O trabalho de detecção pode ser simples e fácil, ou difícil e cansativo, dependendo da estratégia escolhida.

10.4.2.1. Defesa pró-ativa

A vantagem para este tipo defesa é que ela previne qualquer dano ao sistema logo de início. Uma estratégia para esse tipo de defesa é conhecida como pegar eles primeiro, que é carregar na memória um módulo LKM designado para proteger o sistema de outros LKMs maliciosos. A segunda estratégia é remover algumas funcionalidades do próprio kernel. Por exemplo, você pode desabilitar a opção de carrergar módulos no kernel. Entretanto, note que existem rootkits que podem funcionar até mesmo neste caso. Alguns deles podem mexer com o /dev/kmem (memória do kernel) diretamente para torná-los indetectáveis.
O Debian GNU/Linux tem poucos pacotes que podem ser usados para montar uma defesa pró-ativa:
lcap - A user friendly interface to remove capabilities (kernel-based access control) in the kernel, making the system more secure. For example, executing lcap CAP_SYS_MODULE[64] will remove module loading capabilities (even for the root user).[65] There is some (old) information on capabilities at Jon Corbet's http://lwn.net/1999/1202/kernel.php3 section on LWN (dated December 1999).
Se você realmente não precisa de muitos recursos do kernel no seu sistema GNU/Linux, você pode desabilitar o suporte aos módulos carregáveis durante a configuração do kernel. Para desabilitar este suporte, somente altere o CONFIG_MODULES=n durante o estágio de configuração da construção do seu kernel, ou no arquivo .config. Isto irá prevenir os rootkits LKM, mas você irá perder esta funcionalidade poderosa no kernel do Linux. Desabilitar a opção para carregar módulos no kernel pode muitas vezes sobrecarregar o kernel. Neste caso, é melhor deixar o kernel com o suporte.

10.4.2.2. Defesa reativa

A vantagem da defesa reativa é que ela não consome os recursos do sistema. Ela trabalha comparando a tabela de chamadas ao sistema com uma cópia autêntica conhecida, o arquivo em disco System.map. Claro que a defesa reativa somente notificará ao administrador do sistema depois que o sistema já estiver sido comprometido.
Detection of some root-kits in Debian can be accomplished with the chkrootkit package. The http://www.chkrootkit.org program checks for signs of several known root-kits on the target system, but is not a definitive test.


[64] There are over 28 capabilities including: CAP_BSET, CAP_CHOWN, CAP_FOWNER, CAP_FSETID, CAP_FS_MASK, CAP_FULL_SET, CAP_INIT_EFF_SET, CAP_INIT_INH_SET, CAP_IPC_LOCK, CAP_IPC_OWNER, CAP_KILL, CAP_LEASE, CAP_LINUX_IMMUTABLE, CAP_MKNOD, CAP_NET_ADMIN, CAP_NET_BIND_SERVICE, CAP_NET_RAW, CAP_SETGID, CAP_SETPCAP, CAP_SETUID, CAP_SYS_ADMIN, CAP_SYS_BOOT, CAP_SYS_CHROOT, CAP_SYS_MODULE, CAP_SYS_NICE, CAP_SYS_PACCT, CAP_SYS_PTRACE, CAP_SYS_RAWIO, CAP_SYS_RESOURCE, CAP_SYS_TIME, and CAP_SYS_TTY_CONFIG. All of them can be de-activated to harden your kernel.
[65] You don't need to install lcap to do this, but it's easier than setting /proc/sys/kernel/cap-bound by hand.