E ae galera, blz? Como andam as coisas por aí?

Bem, venho aqui mostrar técnicas de segurança (Ou não) em sistemas gerenciadores de Boot (LILO pra ser mais exato).

Na verdade, vou lhes mostrar como implementar senha no boot, e o mais interessante, como burlá-la!!!

É uma técnica muito simples, não posso dizer que foi desenvolvida por mim, mas nunca ví nada a respeito. Então resolvi postar aqui para vcs.


Um pouco sobre Gerenciadores de boot:

Os Gerenciadores de boot são usados para que possamos escolher o sistema operacional que queremos carregar no boot. Eles são instalados na MBR (Master Boot Record, ou Trilha 0) e são iniciados antes que qualquer SO instalado em seu HD, assim possibilitando a escolha do boot. Por exemplo, podemos ter instalados em nosso PC, um Windows XP e uma distro Linux, se o loader (Outro nome dado aos Gerenciadores de boot) estiver corretamente instalado e configurado, ele vai nos dar a opção de escolher entre um dos Sistemas Operacionais.

Mas o que poucas pessoas sabem, é que dá pra, facilmente, por uma senha no boot. Podemos ter uma senha Global (Para todos os SO's, ou melhor dizendo, para todas as imagens de Kernel a serem carregadas), ou por Imagem (Cada SO tem uma senha diferente). E o que menos pessoas sabem, é que dá para burlá-la facilmente. E é isso que vou mostrar.


Implementando senhas no boot:

Pra começar, vamos falar sobre o LILO (Linux Loader). Ele é o loader mais famoso do mundo GNU/Linux.

O arquivo de configuração do LILO é o /etc/lilo.conf. Normalmente ele é configurado quando instalamos nosso Linux, e dificilmente vc terá que alterá-lo (Até porque isso pode trazer problemas sérios), mas no nosso caso vamos ter que alterá-lo.

Pra quem nunca viu um arquivo lilo.conf, vou mostrar pra vcs um exemplo básico desse arquivo.

Código :
# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
append="hdc=ide-scsi"
boot = /dev/hda
message = /boot/boot_message.txt
prompt
timeout = 1200
# Override dangerous defaults that rewrite the partition table:
change-rules
 reset
# VESA framebuffer console @ 1024x768x256
vga = 773
# End LILO global section
# Linux bootable partition config begins
image = /boot/vmlinuz
 root = /dev/hda2
 label = Linux
 read-only
# Linux bootable partition config ends

Não vou explicar todas as linhas de configuração do arquivo, mas vou falar sobre algumas importantes.

image: Informa o Kernel, e sua respectiva localização, que deve iniciar.
label: É o título da imagem, o que aparece no LILO
root: Informa a partição raiz do sistema (Nesse caso /dev/hda2)

Lembrete: Gostaria de lembrar que tudo que está depois de um "#" é um comentário, ok?

Bem, o que vai ser mais útil pra gente é essa parte:

Código :
# Linux bootable partition config begins
image = /boot/vmlinuz
 root = /dev/hda2
 label = Linux
 read-only
# Linux bootable partition config ends

Aí estão todas as informações sobre a partição do Linux.

Mas ainda não chegamos onde queremos né? Como ponho a senha?!? Vou explicar...

Existe uma opção, que vem desativada por padrão, que vc pode implementar no lilo.conf, que é a de por senha no Boot.

Como já disse acima, temos dois tipos de senha, a Global (Pra todas as partições) e outra divididas por Imagens (Cada SO tem uma senha). Mas como implementar isso?

Basta vc adicionar uma linha no lilo.conf. A linha é a seguinte:

password="senha" (No lugar de "senha" vc põe sua senha, sem aspas e sem espaços)

Pronto! Vc tem sua senha no LILO! Mas vcs devem querer saber como diferenciar se ela é Global ou não né?

Simples! Basta verificar a localização dessa linha no arquivo. Se ela estiver depois de uma imagem=(...) (Onde (...) é a localização da imagem do kernel) e antes de uma imagem, ou seja, estiver dentro das configurações da imagem (Naquela parte que mostramos acima, que disse que iria ser útil), ela não é Global, ela serve só para a imagem em que essa linha está presente, caso queria adicionar outras senhas para outras imagens, tem que adicionar essa mesma linha nas configurações da imagem que deseja. Mas se estiver no inicio do arquivo, antes de qualquer configuração de imagem (Linha image=(...) ), ela é global, e com ela vc boota em qualquer SO instalado e que o LILO esteja gerenciando.


Burlando senhas no boot:

Acho que depois dessa explicação toda, vcs já sabem como fazer pra burlar essa "proteção" né? Mas se não sabem, vou explicar...

Como vcs devem ter percebido, a senha fica lá no lilo.conf totalmente desprotegida, sem criptografia nenhuma, aos olhos de qualquer um. Que horror!

Mas aí entra um pouquinho mais de lógica. Se vc não consegue iniciar no sistema, como vai conseguir a senha?

Novamente digo: SIMPLES!

O que acha de dar um boot por um CD, ou talvez até mesmo um Disket. O arquivo está lá, pra ser visto por qualquer um. Basta um simples comando e vc tem a senha do LILO.

Que tal rodar esses comandos:

# mount /dev/hda2 /mnt/QUALQUER_COISA
# cat /mnt/QUALQUER_COISA/etc/lilo.conf | more


Pronto, só analizar o conteúdo e procurar a linha password=, depois do sinal de igual ("=") vc vai ter sua senha, vai poder bootar o sistema.

E isso pode ser muito mais grave em casos de Admins que usam a mesma senha pra um monte de coisas (Se não tudo). Aí ferrou-se tudo!

Vc pode rodar esse comando em servers também. O que te garante que todas as senhas são diferentes? Hehehehe


Soluções para senhas no boot:

No caso da pessoa ter um acesso físico ao PC, poder dar boot por um CD e montar a partição pra ver o arquivo, é dificil de impedir, o que vc pode fazer é por senha na BIOS (Mas nada que tirar um JUMPER não resolva). O único modo seria os desenvolvedores do LILO desenvolverem um sistema de Login mais seguro um pouco, assim diminuiria a facilidade de se quebrar esssa proteção.

No caso de abrir o arquivo num server remoto para achar uma senha que possa te dar mais permissões no servidor, basta vc (Admin) tirar as permissões de leitura desse arquivo para users menos privilegiados, dando esse direito apenas para o root.



Então galera, é isso! Qualquer Dúvida, Sugestão, Crítica, Elogio, postem aqui!


...by Cloudy - Darkers Team [ wWw.Darkers.com.br ]