Dirty Cow na Slackware Linux?

dirty_cow

Essa era uma dúvida que também me deixava com aquela coceirinha no cérebro, afinal a vulnerabilidade Dirty Cow é um dos assuntos mais comentados no campo da segurança em sistemas GNU/Linux, já que várias versões do kernel Linux se mostraram afetadas, porém alguns distribuidores começaram a disponibilizar pacotes com atualizações para a correção de suas respectivas distribuições, podendo ser citadas aqui a Red Hat, CentOS, Ubuntu, Debian, entre outras, por exemplo.

A busca sobre as versões afetadas ainda retornam informações confusas, mas como pode ser visto no site do CERT, a vulnerabilidade aparentemente afeta a grande maioria das versões do kernel Linux posteriores à versão 2.6.22, mas já corrigida nas versões 4.8.3, 4.7.9 e 4.4.26.

A mesma página que nos trás essas informações, oferece uma lista de distribuições onde consta, ao lado de cada uma, os seus respectivos status com relação à vulnerabilidade. Até o momento em que escrevo esse artigo, a Slackware Linux aparece na lista com status de “desconhecido” para a presença da vulnerabilidade.

Acessando a página oficial da Slackware, vemos que até o momento não há alertas de segurança para a vulnerabilidade, e a mais recente atualização nesse sentido foi em primeiro de outubro, relativa ao Mozilla Thunderbird.

Sabemos que o kernel Linux mais recente, disponibilizado até o momento na distribuição, é a versão de número 4.4.23, liberada também no dia primeiro de outubro, inclusive na árvore current, e que não consta entre as versões imunes, mas que devido a não existir confirmação de ser afetada nos perguntamos, o que fazer? Bem, temos algumas opções:

  • Aguardar o comunicado oficial dos mantenedores da distro, para então saber se há necessidade ou não de atualização, mas correndo o risco de ter a segurança de nossos sistemas comprometidos;
  • Baixar e aplicar o patch de atualização, alterando a versão atual para a qual é sabido não ser vulnerável, que é a 4.4.26;
  • Ou aproveitar a deixa e atualizar o kernel para a versão estável mais recente, que é a 4.8.4, e que também atende à nossa necessidade.

Já que de qualquer forma seria necessário reiniciar o equipamento, para que o kernel da versão corrigida passasse a ser utilizado no lugar do anterior, escolhi a última das três opções, atualizando para a versão estável mais recente no momento.

Compilando e instalando um novo kernel

O procedimento não é muito complicado, mas pode deixar o sistema inoperante caso seja conduzido de forma errada, portanto, caso queira realizá-lo, pode seguir os passos que realizei, porém por sua conta e risco.

De qualquer maneira, o recomendado é manter os backups sempre atualizados com os dados que deseja reter, facilitando a recuperação em caso de necessidade. Vai continuar? Então siga em frente!

Primeiramente verifique a versão do seu sistema:

# uname -a

Ou apenas:

# uname -m

Veja se aparecerá a informação de que é um kernel x86_64, para o caso de ser 64 bits, ou mesmo i686 ou x86 para versões de 32 bits.

Baixe o kernel Linux estável mais recente a partir do site The Linux Kernel Archives:

# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.4.tar.xz

Mova o arquivo para a pasta do sistema onde fica o código fonte do kernel:

# mv linux-4.8.4.tar.xz /usr/src/

Vá para a pasta onde o mesmo foi movido e o descompacte:

# cd /usr/src/

# xz -d linux-4.8.4.tar.xz

# tar -xvf linux-4.8.4.tar

Remova o link simbólico existente:

# rm linux

Crie um link simbólico para o diretório com o novo código fonte do kernel:

# ln -s linux-4.8.4 linux

Acesse o diretório onde o conteúdo do arquivo foi descompactado:

# cd linux

A partir dele, temos algumas opções de configuração do novo kernel mas, primeiramente, só para o caso de não ser a primeira vez que um kernel é compilado em seu sistema, o ideal é “limpar” os arquivos anteriores, porém preservando a configuração, utilizando o comando a seguir:

# make clean

Agora, para evitar muita demora e maiores erros na hora de configurar o novo kernel, utilize a opção de comando de configuração que aproveita a configuração anterior e apenas questiona sobre as novas funcionalidades:

# make oldconfig

Com esse comando todas as configurações anteriormente selecionadas pelo time de desenvolvedores é preservada, e as perguntas sobre as novas funcionalidades também tem as respostas padrão previamente selecionadas. Caso não queira realizar modificações, basta manter a tecla enter pressionada e todas as opções padrão serão escolhidas durante a apresentação das perguntas.

No meu caso, a versão instalada é de 32 bits, portanto a primeira pergunta foi se eu desejava compilar um kernel de 64 bits, opção que deixei desmarcada. Outra pergunta era referente à compressão a ser usada, à qual escolhi a opção bzimage. Para o restante mantive as respostas padrão para as perguntas. Tão logo elas terminem, o arquivo com a configuração do novo kernel estará pronto.

Agora compile o kernel:

# make bzImage

Tenha atenção para a letra I maiúscula. Ela deve ser digitada desta forma mesmo.

Caso seu sistema possua mais de um processador, é possível acelerar esse processo dividindo a carga da compilação entre eles, por exemplo, para um sistema com 6 processadores você poderá usar o comando acima com a opção -j <nº de processadores>, o que conforme o exemplo sugerido seria:

# make -j6 bzImage

Tão logo o processo de compilação seja concluído, você pode compilar os módulos:

# make modules

Esse processo é bem mais rápido, e tão logo seja concluído você já poderá instalá-los:

# make modules_install

Agora é preciso mover a imagem do kernel compilado para a pasta à qual se destina, em /boot. Geralmente esta imagem tem o nome de vmlinuz, portanto ao mover a nova imagem, renomei-a de forma diferente, assim como fiz no exemplo abaixo. Isso facilitará sua vida nos passos seguintes:

# mv arch/x86/boot/bzImage /boot/vmlinuz-4.8.4-x86

Módulos instalados, e imagem no lugar, agora deve alterar o bootloader para que receba o novo kernel como opção de carregamento. É aqui que entra a facilidade citada anteriormente, pois caso simplesmente substituíssimos a imagem anterior pela nova, e algo desse errado, teríamos mais trabalho para restabelecer o sistema, ao passo de que agora só precisamos escolher o kernel que queremos carregar.

Para editar o lilo, acesse seu arquivo de configuração em /etc, como no exemplo abaixo:

# vi /etc/lilo.conf

Altere o conteúdo do arquivo, adaptando-o para a partição correspondente em seu sistema. As últimas linhas do arquivo anteriormente eram assim:

# Linux bootable partition config begins
image = /boot/vmlinuz
  root = /dev/sda2
  label = Linux
  read-only
# Linux bootable partition config ends

Agora ficaram assim:

# Linux bootable partition config begins
image = /boot/vmlinuz-4.8.4-x86
   root = /dev/sda2
   label = Slackware_4.8.4
   read-only

image = /boot/vmlinuz
  root = /dev/sda2
  label = Linux
  read-only
# Linux bootable partition config ends

Isso insere a opção de carregamento do novo kernel. Salve o arquivo e saia. Agora execute a gravação da nova configuração na MBR:

# lilo

Feito isso, basta reiniciar o sistema e escolher a opção no menu de inicialização que corresponde ao nome que definiu para o carregamento do novo kernel, verificando se o mesmo será carregado normalmente.

Caso o procedimento não funcione, ainda poderá carregar o sistema através da opção existente anteriormente e tentar realizar o procedimento novamente para ver onde pode ter ocorrido algo errado.

Se tudo correer bem ao final do carregamento do sistema, você pode confirmar a versão em uso através do terminal novamente com o comando uname, verá algo parecido com o exemplo a seguir:

# uname -r

4.8.4

Também é recomendável adicionar os pacotes referentes ao kernel à blacklist, evitando que o mesmo seja sobrescrito quando utilizar o slackpkg para realizar alterações no sistema:

# vi /etc/slackpkg/blacklist

kernel-generic
kernel-generic-smp
kernel-huge
kernel-huge-smp
kernel-modules
kernel-modules-smp

Salve o arquivo e saia. Replique o procedimento em todos os seus sistemas, e aplique as atualizações disponíveis para aqueles que não sejam Slackware Linux.

Como tudo funcionou por aqui, agora já sabe porque a dúvida não me perturba mais e, caso tenha realizado os procedimentos acima com sucesso, também pode voltar à tranquilidade pois a vulnerabilidade não afeta mais o seu ambiente.

Quando se sentir mais a vontade para explorar as opções disponíveis para a configuração do kernel, você poderá realizar o processo novamente, mas agora verificando as especificações do seu equipamento e desmarcando as opções que não se encaixam, como por exemplo drivers de rede que não sejam os que dispõe, sistemas de arquivos com os quais não lida, entre outros, deixando assim o núcleo do sistema mais enxuto e rápido.

Se a cada procedimento tomar o cuidado de adicionar a nova imagem com um nome diferente no diretório /boot, além de mais uma seção ao lilo, poderá sempre carregar o kernel anterior em caso de remover alguma funcionalidade essencial do sistema e, caso tudo dê certo, remover a entrada para o kernel anterior, bem como a sua imagem do diretório de inicialização.

Espero ter ajudado e até a próxima!

LPIC 2 versão 4.0 – Recursos gratuitos e online para estudo

Studying-book

Olá pessoal! Para aqueles que estão acompanhando o Linux Certification Virtual Summit as informações aqui não serão novidade, porém caso não esteja assistindo as palestras dos profissionais participantes as dicas a seguir poderão te ajudar a se preparar para a versão 4.0 da certificação LPIC nível 2.

A entrevista do quarto dia do evento trouxe como entrevistado Andrew Mallet, profissional que atua com treinamentos e software livre há mais de 15 anos, é o criador e mantenedor do site The Urban Penguin, onde oferece dicas e serviços relacionados a software livre, incluindo todos os níveis das certificações LPI, além de tratar sobre programação, shell scripting, entre outros assuntos. É detentor de certificações LPIC, Red Hat e SuSe, e também ministra cursos online através do site Pluralsight.

Respondendo às diversas perguntas sobre sua vida profissional, ligação com os softwares livres e sobre como se preparar para os exames para a obtenção da LPIC 2, ele também nos ofereceu dicas de fontes de consulta gratuitas a material de preparação e, embora em inglês, podem ser de grande valia para seus estudos.

Uma dessas fontes de informações é o site http://lpic2.unix.nl/, que disponibiliza um livro online voltado específicamente para a obtenção da certificação de nível 2, e que trás uma cobertura completa de todos os tópicos exigidos, de forma direta, e com diversos exemplos de opções para os comandos cobrados.

A obra digital é escrita por diversos profissionais de TI e mantida em constante atualização desde 2001, acompanhando as mudanças de conteúdo nas diversas versões da prova. No momento em que escrevo este artigo a versão disponível no site é a que cobre a versão 4.0 do exame, sendo a mais recente.

Outra fonte de estudos é composta de vídeoaulas disponibilizadas pelo próprio Andrew em seu site, e que cobre alguns dos tópicos exigidos como o gerenciamento de capacidade e manipulação do kernel Linux. Outros vídeos, sobre diversos assuntos e níveis das certificações LPIC, podem ser vistos em seu canal disponível no Youtube.

Uma das informações interessantes sobre a certificação, e oferecida por Andrew durante a entrevista, é de que a versão 4.5 da LPIC 2 deve ser ativada em janeiro de 2017, portanto caso esteja se preparando para a versão 4.0, e queira garantir a sua certificação antes da mudança do conteúdo, recomendo a intensificação dos estudos e marcação das provas tão logo esteja preparado, evitando assim a adaptação da rotina para a inclusão dos assuntos adicionados à nova versão.

Abraços e bons estudos!

Linux Certification Virtual Summit – 17 a 23 de outubro, 2016

Certificado

Um ciclo de palestras virtuais sobre certificações Linux será realizado entre os dias 17 e 23 de outubro. Durante o Linux Certification Virtual Summit, diversos profissionais estarão compartilhando seus conhecimentos, falando sobre o que fazer, e como fazer, para obter a sua certificação em administração de sistemas GNU/Linux, comentando e oferecendo dicas para os exames das principais fornecedoras disponíveis no mercado. As inscrições são gratuitas.

A abertura será realizada por John “Maddog” Hall, que falará sobre a importância de se aprender sobre os sistemas GNU/Linux e o impacto que causam no mundo atual. Nos dias seguintes teremos palestras falando sobre as certificações Linux+ da CompTIA, Linux Essencials da Linux Foundation, LPIC do Linux Professional Institute, além das certificações RHCSA e RHCE da Red Hat Inc. Segue abaixo a programação:

Dia 17

Mastering CompTIA Linux+ – Jason Eckert focará nos objetivos de exame CompTIA Linux+ 104, onde detalhará o que você precisa saber a respeito de shell scripting, gerenciamento de dados, interfaces com o usuário e tarefas administrativas.

Mastering CompTIA Linux+ – Jesse Varsalone discutirá sobre fóruns online, comandos que você precisa saber para ser aprovado nos exames e a importância de se conhecer os sistemas GNU/Linux no mundo da segurança cibernética.

Dia 18

Linux Essencials – Sirko Kemter discutirá seu envolvimento no projeto Fedora, além dos comandos e conceitos necessários para ser aprovado no exame Linux Essencials.

Dia 19

LPIC – 1 Certified Linux Administrator – David Morgan discutirá a respeito da certificação do Linux Professional Institute, oferecendo técnicas para ser aprovado nos exames 101 e 102.

Dia 20

LPIC – 2 Certified Linux Engineer – Andrew Mallet focará no exame LPIC – 2 201 onde falará sobre os comandos que deve se conhecer sobre o kernel Linux, inicialização de sistema, além de dispositivos e sistemas de arquivos.

LPIC – 2 Certified Linux Engineer -Mark Clarke falará sobre os passos que seguiu para obter a certificação LPIC – 2 e também sobre a companhia Jumping Bean.

Dia 21

LPIC – 3 Linux Enterprise Professional 303 Security Exam – Bruno Guerreiro Diniz oferecerá dicas sobre como ser aprovado no exame 303-200, incluindo tópicos como criptografia, segurança de hosts, controle de acesso, e segurança de redes.

LPIC – 3 Mixed Environment Certification – Glaysson Barboza falará sobre como foi aprovado no exame e trará dicas que você poderá usar para também ser aprovado.

Dia 22

Red Hat Certified Systems Administrator – Tyrone Terrence McKinney lhe mostrará de forma prática as habilidades necessárias para ser aprovado no exame. Nesta sessão ele focrá no entendimento e uso de ferramentas essenciais, execução de sistemas e configuração de storages locais.

Red Hat Certified Systems Administrator – Asghar Ghori revelará os comandos mandatórios para ser aprovado no exame RHCSA. Ele também explorará as formas de se implantar, configurar e manter sistemas, além das habilidades para criar e configurar sistemas de arquivos.

Dia 23

Red Hat Certified Engineer – Sander Van Vugt’s manterá a discussão centrada nos comandos para a configuração e gerenciamento de sistemas, incluindo a configuração de endereços IPv6, firewalls e roteadores.

Red Hat Certified Engineer -Devin Acosta’s focará na instalação, configuração e troubleshooting de serviços de rede, além de informações sobre como se tornar um arquiteto certificado Red Hat.

Para se increver, basta acessar o link para a página oficial do evento.