Professional Documents
Culture Documents
Resumo
Este documento descreve a segurana no sistema Debian. Iniciando com o processo de tornar
mais seguro e fortalecer a instalao padro da distribuio Debian GNU/Linux. Ele tambm
cobre algumas das tarefas mais comuns para configurar um ambiente de rede seguro usando
a Debian GNU/Linux, oferece informaes adicionais sobre as ferramentas de segurana disponveis e fala sobre como a segurana fornecida na Debian pelo time de segurana .
Nota de Copyright
Copyright 2002, 2003, 2004, 2005 Javier Fernndez-Sanguino Pea
Copyright 2001 Alexander Reelsen, Javier Fernndez-Sanguino Pea
Copyright 2000 Alexander Reelsen
permitido copiar, distribuir e/ou modificar este documento desde que sob os termos da GNU
General Public License, Version 2 (http://www.gnu.org/copyleft/gpl.html) ou qualquer verso posterior publicada pela Free Software Foundation. Ele distribudo na esperana
de ser til, porm SEM NENHUMA GARANTIA.
permitido fazer e distribuir cpias em disquetes deste documento desde que a nota de copyright e esta nota de permisso estejam em todas as cpias.
permitido copiar e distribuir verses modificadas deste documento desde que o documento
resultante seja distribudo sob os mesmos termos de distribuio deste documento.
permitido copiar e distribuir tradues deste documento em outro idioma desde que o documento resultante seja distribudo sob os mesmos termos de distribuio deste documento e
que a traduo deste nota de permisso seja autorizada pela Free Software Foundation.
Sumrio
1
Introduo
1.1
Autores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
1.3
Notas de organizao/Retorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4
Conhecimento requerido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5
1.6
Alteraes/Histrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.1
1.6.2
1.6.3
1.6.4
1.6.5
1.6.6
1.6.7
1.6.8
1.6.9
SUMRIO
ii
Crditos e Agradecimentos! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
25
2.1
2.2
2.3
SUMRIO
iii
29
3.2
Particionando o sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.1
3.3
3.4
3.5
3.6
3.7
3.6.1
3.6.2
3.8
4
Removendo Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Aps a instalao
39
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.9.2
SUMRIO
iv
4.10.5 Usando su . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.10.6 Usando o sudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.10.7 Desativao de acesso administrativo remoto . . . . . . . . . . . . . . . . . 52
4.10.8 Restringindo acessos de usurios . . . . . . . . . . . . . . . . . . . . . . . . 52
4.10.9 Auditoria do usurio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.10.10 Revisando perfis de usurios . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.10.11 Ajustando a umask dos usurios . . . . . . . . . . . . . . . . . . . . . . . . 55
4.10.12 Limitando o que os usurios podem ver/acessar . . . . . . . . . . . . . . . 56
4.10.13 Gerando senhas de usurios . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.10.14 Verificando senhas de usurios . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.10.15 Logout de usurios ociosos . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.11 Usando os tcpwrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.12 A importncia dos logs e alertas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.12.1 Usando e personalizando o logcheck . . . . . . . . . . . . . . . . . . . . 61
4.12.2 Configurando para onde os alertas so enviados . . . . . . . . . . . . . . . 62
4.12.3 Usando um servidor de logs . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.12.4 Permisses dos arquivos de log . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.13 Adicionando patches no kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.14 Protegendo-se contra estouros de buffer . . . . . . . . . . . . . . . . . . . . . . . . 66
4.14.1 Patches de kernel para proteo contra estouros de buffer . . . . . . . . . 67
4.14.2 Proteo da Libsafe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.14.3 Testando problemas de estouro em programas . . . . . . . . . . . . . . . . 68
4.15 Transferncia segura de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.16 Limitaes e controle do sistema de arquivos . . . . . . . . . . . . . . . . . . . . . 68
4.16.1 Usando quotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.16.2 Os atributos especficos do sistema de arquivos ext2 (chattr/lsattr) . . . . 69
4.16.3 Verificando a integridade do sistema de arquivos . . . . . . . . . . . . . . 71
4.16.4 Configurando verificao de setuid . . . . . . . . . . . . . . . . . . . . . . 72
4.17 Tornando o acesso a rede mais seguro . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.17.1 Configurando caractersticas de rede do kernel . . . . . . . . . . . . . . . . 72
4.17.2 Configurando Syncookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
SUMRIO
79
5.1.2
Clientes do ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.1.3
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.6.1
5.6.2
5.6.3
5.7.2
5.7.3
5.8.2
5.8.3
SUMRIO
vi
Harden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.2
113
7.1
7.2
7.3
7.2.1
7.2.2
7.4
109
7.4.2
7.4.3
7.4.4
131
8.1
8.2
SUMRIO
8.3
8.4
8.5
vii
8.6
8.7
8.8
8.9
141
9.1.2
9.1.3
9.1.4
9.1.5
9.1.6
9.1.7
9.2
9.3
9.4
9.5
9.3.1
9.3.2
9.4.2
155
SUMRIO
viii
159
SUMRIO
ix
183
B Checklist de configurao
187
191
SUMRIO
195
199
205
207
221
Captulo 1
Introduo
Uma das coisas mais difceis sobre escrever documentos relacionado a segurana que cada
caso nico. Duas coisas que deve prestar ateno so o ambiente e as necessidades de segurana de um site, mquina ou rede. Por exemplo, a segurana necessria para um usurio
domstico completamente diferente de uma rede em um banco. Enquanto a principal preocupao que um usurio domstico tem confrontar o tipo de cracker script kiddie, uma
rede de banco tem preocupao com ataques diretos. Adicionalmente, o banco tem que proteger os dados de seus consumidores com preciso aritmtica. Em resumo, cada usurio deve
considerar o trajeto entre a usabilidade e parania/segurana.
Note que este manual somente cobre assuntos relacionados a software. O melhor software do
mundo no pode te proteger se algum puder ter acesso fsico a mquina. Voc pode colocala sob sua mesa, ou voc pode coloca-la em um cofre fechado com uma arma de frente para
ela. No obstante a computao desktop pode ser muito mais segura (do ponto de vista do
software) que uma fisicamente protegida caso o desktop seja configurado adequadamente e
o programa na mquina protegida esteja cheio de buracos de segurana. Obviamente, voc
dever considerar ambos os casos.
Este documento apenas lhe dar uma viso do que pode aumentar em segurana no sistema
Debian GNU/Linux. Se ler outros documentos relacionados a segurana em Linux, Voc ver
que existem assuntos comuns que se cruzaro com os citados neste documento. No entanto,
este documento no tentar ser a ltima fonte de informaes que dever estar usando, ele
tentar adaptar esta mesma informao de forma que seja til no sistema Debian GNU/Linux.
Distribuies diferentes fazem coisas de forma diferente (inicializao de daemons um exemplo); aqui, voc encontrar materiais que so apropriados para os procedimentos e ferramentas
da Debian.
1.1
Autores
Captulo 1. Introduo
Este manual foi iniciado como um HOWTO por Alexander Reelsen (mailto:ar@rhwd.
de). Aps ter sido publicado na Internet, Javier Fernndez-Sanguino Pea (mailto:jfs@
debian.org) o incorporou no Projeto de Documentao da Debian (http://www.debian.
org/doc). Um nmero de pessoas tem contribudo com este manual (todos os contribuidores
esto listados no changelog) mas os seguintes merecem especial meno pois fizeram contribuies significantes, sees completas, captulos ou apndices):
Stefano Canepa
Era Eriksson
Carlo Perassi
Alexandre Ratti
Jaime Robles
Yotam Rubin
Frederic Schutz
Pedro Zorzenon Neto
Oohara Yuuma
Davor Ocelic
1.2
Voc poder baixar ou ver a verso mais nova do Manual Como Tornar a Debian mais Segura no Projeto de Documentao da Debian (http://www.debian.org/doc/manuals/
securing-debian-howto/). Sinta-se l livre para checar o sistema de controle de verses atravs do endereo servidor CVS (http://cvs.debian.org/ddp/manuals.sgml/
securing-howto/?cvsroot=debian-doc).
Voc poder tambm baixar o verso texto (http://www.debian.org/doc/manuals/
securing-debian-howto/securing-debian-howto.ptbr.txt) do site do projeto de
Documentao da Debian. Outros formatos, com o PDF, (ainda) no esto disponveis. No
entanto, voc poder baixar ou instalar o pacote harden-doc (http://packages.debian.
org/harden-doc) que contm o mesmo documento em formatos HTML, txt e PDF. Note no
entanto, que o pacote pode no estar completamente atualizado com o documento fornecido
pela Internet (mas voc sempre poder usar o pacote fonte para construir voc mesmo uma
verso atualizada).
Captulo 1. Introduo
1.3
Notas de organizao/Retorno
Agora a parte oficial. No momento, eu (Alexandre Reelsen) escrevi a maioria dos pargrafos
deste manual, mas em minha opinio este no deve ser o caso. Eu cresci e vivi com software
livre, ele parte do meu dia a dia e eu acho que do seu tambm. Eu encorajo a qualquer um
para me enviar retorno, dicas, adies ou qualquer outra sugesto que possa ter.
Se achar que pode manter melhor uma certa seo ou pargrafo, ento escreva um documento
ao maintainer e voc ser bem vindo a faze-lo. Especialmente se voc encontrar uma seo
marcada como FIXME, que significa que os autores no tem tempo ainda ou precisam de conhecimento sobre o tpico, envie um e-mail para eles imediatamente.
O tpico deste manual torna isto bastante claro que importante mant-lo atualizado, e voc
pode fazer sua parte. Por favor contribua.
1.4
Conhecimento requerido
A instalao do sistema Debian GNU/Linux no muito difcil e voc dever ser capaz de
instala-lo. Se voc j tem algum conhecimento sobre o Linux ou outros tipo de Unix e voc
est um pouco familiar com a segurana bsica, ser fcil entender este manual, como este
documento no explicar cada detalhe pequeno de caractersticas (caso contrrio voc ter
um livro ao invs de um manual). Se no estiver familiar, no entanto, voc poder dar uma
olhada em Esteja ciente dos problemas gerais de segurana on page 25 para ver onde achar
informaes atualizadas.
1.5
Esta seo descreve todas as coisas que precisam ser corrigidas neste manual. Alguns pargrafos incluem as tags FIXME ou TODO descrevendo qual contedo esta faltando (ou que tipo de
trabalho precisa ser feito). O propsito desta seo descrever todas as coisas que precisam
ser includas em um lanamento futuro do Manual, ou melhorias que precisam ser feitas (ou
que so interessantes de serem adicionadas).
Se sente que pode fornecer ajuda em contribuir com a correo de contedo em qualquer elemento desta lista (ou anotaes inline), contacte o autor principal (Autores on page 1
Expanda informaes de resposta a incidentes, talvez adicione algumas idias
vindas do guia de segurana da Red Hat captulo sobre resposta a incidentes
(http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/
security-guide/ch-response.html).
Escreva sobre ferramentas de monitoramento remoto (para verificar a disponibilidade do
sistema) tal como monit, daemontools e mon. Veja http://linux.oreillynet.
com/pub/a/linux/2002/05/09/sysadminguide.html.
Captulo 1. Introduo
Considere escrever uma seo sobre como fazer operaes em rede com redes baseadas
em sistemas Debian (com informaes tal como o sistema bsico, equivs e FAI).
Verifique se http://www.giac.org/practical/gsec/Chris_Koutras_GSEC.
pdf tem informaes relevantes ainda no cobertas aqui.
Adicione informaes sobre como configurar um notebook com a Debian http://www.
giac.org/practical/gcux/Stephanie_Thomas_GCUX.pdf
Adicione informaes sobre como fazer um firewall usando o sistema Debian
GNU/Linux. A seo relacionada a firewall orientada atualmente sobre um sistema
simples (no protegendo outros. . . ) tambm fale sobre como testar a configurao.
Adicionar informaes sobre como configurar um firewall proxy com a Debian
GNU/Linux iniciando especificamente com pacotes fornecendo servios proxy (como
xfwp, xproxy, ftp-proxy, redir, smtpd, nntp-cache, dnrd, jftpgw, oops,
pdnsd, perdition, transproxy, tsocks). Dever ser apontado para um manual com
mais informaes. Note que o zorp esta agora disponvel como um pacote da Debian e
um firewall proxy (ele tambm fornece pacotes upstream da Debian).
Informaes sobre a configurao de servios com o file-rc
Verifique todas as URLs de referncia e remova/corrija as que no esto mais disponveis.
Adicione informaes sobre as substituies disponveis (na Debian) para servios padres que so teis para funcionalidades limitadas. Exemplos:
lpr local com o cups (pacote)?
lpr remota com o lpr
bind com dnrd/maradns
apache com dhttpd/thttpd/wn (tux?)
exim/sendmail com ssmtpd/smtpd/postfix
squid com tinyproxy
ftpd com oftpd/vsftp
...
Mais informaes relacionadas com patches do kernel relacionados a segurana, incluindo os acima e informaes especficas de como ativar estes patches em um sistema
Debian.
Deteco de Intruso do Linux (lids-2.2.19)
Linux Trustees (no pacote trustees)
NSA Enhanced Linux (http://www.coker.com.au/selinux/)
kernel-patch-2.2.18-openwall
kernel-patch-2.2.18-openwall)
kernel-patch-2.2.19-harden
(http://packages.debian.org/
Captulo 1. Introduo
kernel-patch-freeswan, kernel-patch-int
Detalhes sobre como desligar servios desnecessrios (como o inetd), parte do procedimento de fortalecimento mas pode ser um pouco mais abrangente.
Informaes relacionadas a rotacionamento de senhas que diretamente relacionada a
poltica.
Policy, e educao de usurios sobre a poltica.
Mais sobre tcpwrappers, e wrappers em geral?
O arquivo hosts.equiv e outros maiores buracos de segurana.
Assuntos relacionados a servios de compartilhamento de arquivos tais como Samba e
NFS?
suidmanager/dpkg-statoverrides.
lpr e lprng.
Desligar as coisas do gnome relacionadas a IP
Falar sobre o pam_chroot (ver http://lists.debian.org/debian-security/
2002/debian-security-200205/msg00011.html) e como ele til para limitao de usurios. Introduzir informaes relacionadas ao http://online.
securityfocus.com/infocus/1575. Pdmenu, por exemplo est disponvel na Debian (enquanto o flash no).
Falar sobre como executar servios em ambiente chroot, mais informaes em
http://www.linuxfocus.org/English/January2002/article225.shtml,
http://www.nuclearelephant.com/papers/chroot.html e http://www.
linuxsecurity.com/feature_stories/feature_story-99.html
Fale sobre programas para fazer jaulas chroot. Compartment e chrootuid esto aguardando na incoming. Alguns outros como o (makejail, jailer) podem tambm serem introduzidos.
Adicionar informaes fornecidas por Pedro Zorzenon sobre como fazer chroot do Bind 8
somente para a :(, veja http://people.debian.org/~pzn/howto/chroot-bind.
sh.txt ( incluir todo o roteiro?).
Mais informaes relacionadas a programas de anlise de logs (i.e. logcheck e logcolorise).
roteamento avanado (policiamento de trfego relacionado a segurana)
limitando o acesso do ssh a executar somente certos comandos.
usando o dpkg-statoverride.
mtodos seguros de compartilhar um gravador de CD entre usurios.
Captulo 1. Introduo
1.6
1.6.1
Alteraes/Histrico
Verso 3.1 (Janeiro de 2005)
Captulo 1. Introduo
1.6.2
1.6.3
Captulo 1. Introduo
Adicionadas mais informaes a respeito de contedo esperado em securetty (pois especficas de kernel).
Adicionadas referncias ao snoopylogger (bug da Debian 179409)
Adicionadas referncias ao guarddog (bug da Debian 170710)
Apt-ftparchive est no pacote apt-utils, no no apt (obrigado por Emmanuel Chantreau
apontar isto)
Removido o jvirus da lista AV.
1.6.4
1.6.5
1.6.6
Captulo 1. Introduo
1.6.7
1.6.8
1.6.9
1.6.10
Captulo 1. Introduo
10
1.6.11
1.6.12
Captulo 1. Introduo
1.6.13
11
1.6.14
Alteraes feitas por Javier Fernndez-Sanguino Pea (me). Nota: Eu ainda tenho vrias correes pendentes em minha caixa postal (que tem atualmente o tamanho de 5MB).
Algumas correes de erros contribudas por Tuyen Dinh, Bartek Golenko e Daniel K.
Gebhart.
Nota sobre rootkits relacionados com /dev/kmem contribudo por Laurent Bonnaud
Corrigidos enganos e FIXMEs contribudos por Carlo Perassi.
1.6.15
Captulo 1. Introduo
1.6.16
12
1.6.17
Alteraes feitas por Javier Fernndez-Sanguino Pea (me). Existem muitas coisas aguardando
em minha caixa postal para serem includos. assim estarei fazendo isso no lanamento de volta
da lua de mel :)
Aplicado um patch enviado por Philipe Gaspar com relao ao Squid que tambm fecha
um FIXME.
Sim, outro item da FAQ com relao a banners de servios pego da lista de segurana
debian-security (thread Telnet information iniciada em 26 de Julho de 2002).
Adicionada uma note com relao a referncias cruzadas do CVE no item da FAQ Quanto
tempo o time de segurana da Debian. . . .
Adicionada uma nova seo relacionada a ataques ARP contribuda por Arnaud Arhuman Assad.
Novo item da FAQ com relao ao dmesg e logind e console pelo kernel.
Pequenos detalhes de informaes relacionadas a checagem de assinaturas em pacotes
(ele parecia no ter uma verso beta passada).
Novo item da FAQ com relao a falso positivo de ferramentas de checagem de vulnerabilidades.
Adicionadas nova sees ao captulo que contm informaes sobre assinatura de pacotes e reorganizando-as como um novo captulo sobre Infraestrutura de Segurana na Debian.
Novo tem da FAQ com uma comparao da Debian com outras distribuies Linux.
Nova seo sobre agentes de mensagem de usurios com funcionalidade GPG/PGP no
captulo ferramentas de segurana.
Esclarecimentos de como ativa senhas MD5 na woody, adicionadas referncias PAM
assim tambm como uma nota relacionada a definio de max na PAM.
Adicionado um novo apndice sobre como criar um ambiente chroot (aps brigar um
pouco com makejail e corrigindo, tambm, alguns de seus bugs), integradas informaes
duplicadas em todo o apndice.
Captulo 1. Introduo
13
Adicionadas mais informaes relacionadas ao chroot de SSH e seu impacto na transferncia segura de arquivos. Algumas informaes que foram pegas da lista de discusso
debian-security (da thread de Junho de 2002: transferncias de arquivos seguras).
Novas sees sobre como fazer atualizaes automticas em sistemas Debian assim tambm como dicas de uso de testing ou unstable relacionadas com atualizaes de segurana.
Nova seo relacionada sobre como manter-se atualizado com patches de segurana na
seo Antes do comprometimento assim como uma nova seo sobre a lista de discusso
debian-security-announce mailing.
Adicionadas informaes sobre como gerar automaticamente senhas fortes.
Nova seo com relao a usurios inativos.
Reorganizao da seo sobre como tornar um servidor de mensagens mais seguro com
base na discusso sobre instalao Segura/fortalecida/mnima da Debian (Ou Porque o sistema bsico do jeito que ?) que ocorreu na lista debian-security (em Maio de 2002).
Reorganizao da seo sobre parmetros de rede do kernel, com dados fornecidos pela
lista de discusso debian-security (em Maio de 2002, syn flood attacked?) e tambm adicionado um novo tem da FAQ.
Nova seo sobre com verificar senhas de usuarios e que pacotes instalar para fazer isto.
Nova seo sobre a criptografia PPTP com clientes Microsoft discutido na lista debiansecurity (em Abril de 2002).
Adicionada uma nova seo descrevendo que problemas existem quando direciona um
servio a um endereo IP especfico, esta informao foi escrita baseada em uma lista
de discusso da bugtraq com a thread: Linux kernel 2.4 weak end host (anteriormente
discutida na debian-security como problema no) (iniciada em 9 de Maio de 2002 por Felix
von Leitner).
Adicionadas informaes sobre o protocolo verso 2 do ssh.
Adicionadas duas sub-sees relacionadas a configuraes seguras do Apache (coisas
especficas a Debian, claro).
Adicionada uma nova FAQ relacionada a soquetes simples, um relacionado a /root, um
tem relacionado ao grupo users e outra relacionada a log e permisses de arquivos de
configurao.
Adicionada uma referncia ao problem na libpam-cracklib que ainda pode estar aberto. . .
(precisa ser verificado)
Adicionadas mais informaes com relao a anlise forense (pendente mais informaes
sobre ferramentas de inspeo de pacotes como tcpflow).
Alterado o tem o que posso fazer com relao a comprometimento na listagem e adicionado mais contedo.
Captulo 1. Introduo
14
Captulo 1. Introduo
15
Adicionadas sugestes de Daniel Quinlans com relao a autenticao ssh e configurao de relay do exim.
Adicionadas mais informaes sobre como tornar o bind mais seguro incluindo alteraes propostas por Daniel Quinlan e um apndice com um script para fazer algumas das
alteraes comentadas naquela seo.
Adicionado um ponteiro a outro tem relacionado a fazer chroot do Bind (precisam ser
unidas).
Adicionada uma linha contribuda por Cristian Ionescu-Idbohrn para pegar pacotes com
o suporte a tcpwrappers.
Adicionada um pouco mais de informaes sobre a configurao padro de PAM da
Debian.
Includa uma questo da FAQ sobre o uso de PAM para fornecer servios sem contas
shell.
movidos dois itens da FAQ para outra seo e adicionada uma nova FAQ relacionada
com deteco de ataques (e sistemas comprometidos).
Includas informaes sobre como configurar uma firewall ponte (incluindo um Apndice modelo). Obrigado a Francois Bayart quem enviou isto para mim em Maro.
Adicionada uma FAQ relacionada com o syslogd MARK heartbeat de uma questo respondida por Noah Meyerhans e Alain Tesio em Dezembro de 2001.
Includas informaes sobre proteo contra buffer overflow assim como mais informaes sobre patches de kernel.
Adicionadas mais informaes e reorganizao da seo sobre firewall. Atualizao da
informao com relao ao pacote iptables e geradores de firewall disponveis.
Reorganizao das informaes disponveis sobre checagem de logs, movidas as informaes sobre checagem de logs de deteco de intruso de mquinas para aquela seo.
Adicionadas mais informaes sobre como preparar um pacote esttico para o bind em
chroot (no testado).
Adicionado um tem da FAQ relacionado com servidores/servios mais especficos (podem ser expandidos com algumas das recomendaes da lista debian-security).
Adicionadas mais informaes sobre os servios RPC (e quando so necessrios).
Adicionadas mais informaes sobre capacidades (e o que o lcap faz). Existe alguma boa
documentao sobre isto? e no encontrei qualquer documentao em meu kernel 2.4
Corrigidos alguns enganos.
Captulo 1. Introduo
1.6.18
16
Verso 2.4
1.6.19
Verso 2.3
1.6.20
Verso 2.3
Captulo 1. Introduo
1.6.21
17
Verso 2.2
1.6.22
Verso 2.1
1.6.23
Verso 2.0
Alteraes feitas por Javier Fernndez-Sanguino Pea. Eu queria altera-la para 2.0 quanto
todos os FIXMEs estivessem corrigidos, mas esgotei os nmeros 1.9x :(
Converso do HOWTO em um Manual (agora eu poderei propriamente dizer RTFM)
Adicionadas mais informaes com relao ao tcp wrappers e a Debian (agora mutos
servios so compilados com suporte a eles assim no ser mais um assunto relacionado
ao inetd).
Esclarecidas informaes sobre a desativao de servios para torna-lo mais consistente
(informaes sobre o rpc ainda referenciadas ao update-rc.d)
Adicionada uma pequena nota sobre o lprng.
Captulo 1. Introduo
18
Captulo 1. Introduo
1.6.24
19
Verso 1.99
1.6.25
Verso 1.98
1.6.26
Verso 1.97
1.6.27
Verso 1.96
Captulo 1. Introduo
1.6.28
20
Verso 1.95
1.6.29
Verso 1.94
1.6.30
Verso 1.93
1.6.31
Verso 1.92
Captulo 1. Introduo
1.6.32
21
Verso 1.91
1.6.33
Verso 1.9
1.6.34
Verso 1.8
Captulo 1. Introduo
1.6.35
22
Verso 1.7
1.6.36
Verso 1.6
1.6.37
Verso 1.5
Captulo 1. Introduo
1.6.38
23
Verso 1.4
1.6.39
Verso 1.3
1.6.40
Verso 1.2
Vrias correes gramaticais feitas por James Treacy, novo pargrafo sobre o XDM
1.6.41
Verso 1.1
1.6.42
Verso 1.0
Lanamento inicial
1.7
Crditos e Agradecimentos!
Captulo 1. Introduo
24
25
Captulo 2
A segurana no Debian no to diferente da segurana em qualquer outro sistema; para implementar a segurana de maneira adequada, voc deve primeiro decidir o que voc pretende
fazer com seu sistema. Aps isto, voc ter que considerar que as seguintes tarefas precisam
ser executadas com cuidado se voc realmente quer ter um sistema seguro.
Durante a leitura deste manual voc ver tarefas para fazer antes, durante e aps voc instalar
seu sistema Debian. As tarefas so aes como:
Decidir quais servios voc necessita e limitar o sistema a eles. Isto inclui desativar/desinstalar servios desnecessrios e adicionar filtros como firewall ou tcpwrappers.
Limitar usurios e permisses em seu sistema.
Proteger os servios oferecidos de modo que, em caso de problemas com um servio, o
impacto em seu sistema seja minimizado.
Utilizar ferramentas apropriadas para garantir que o uso desautorizado seja detectado,
de modo que voc possa tomar as medidas apropriadas.
2.2
26
27
Os documentos HOWTO do Projeto de Documentao do Linux (Linux Documentation Project) esto disponveis no Debian GNU/Linux atravs dos pacotes doc-linux-text (verso texto) ou doc-linux-html (verso html). Aps a instalao estes documetnos estaro
disponveis em /usr/share/doc/HOWTO/en-txt e /usr/share/doc/HOWTO/en-html,
respectivamente.
Outros livros sobre Linux recomendados:
Maximum Linux Security : A Hackers Guide to Protecting Your Linux Server and
Network. Annimo. Paperback - 829 pginas. Sams Publishing. ISBN: 0672313413.
Julho 1999.
Linux Security By John S. Flowers. New Riders; ISBN: 0735700354. Maro 1999
Hacking Linux Exposed (http://www.linux.org/books/ISBN_0072127732.
html) de Brian Hatch. McGraw-Hill Higher Education. ISBN 0072127732. Abril, 2001.
Outros livros (que podem ser relacionados a assuntos sobre UNIX e segurana e no especificamente sobre Linux):
2.3
28
Agora que voc tem uma viso geral da segurana no Debian GNU/Linux observe mais algumas consideraes para construir um sistema seguro:
Problemas do Debian so sempre discutidos abertamente, mesmo os relacionados a
segurana. Problemas relacionados a segurana so discutidos abertamente na lista
debian-security e so publicados no servidor como prev o Debian Social Contract
(http://www.debian.org/social_contract):
Ns no esconderemos problemas
Ns manteremos nosso banco de dados de bugs e relatrios abertos ao pblico durante todo o
tempo. Relatrios que os usurios enviarem estaro imediatamente on-line para que os outros
tenham acesso.
O Debian sempre procura corrigir os problemas de segurana. A equipe de segurana verifica muitas fontes relacionadas a segurana, a mais importante sendo Bugtraq
(http://www.securityfocus.com/cgi-bin/vulns.pl), sempre a procura de pacotes que aumentem a segurana e que possam ser includos.
Atualizaes de seguranaa esto em primeira prioridade. Quando um problema aparece
em um pacote Debian, a atualizao de segurana preparada o mais rpido possvel e
includa nas distribuies estvel e instvel para todas as arquiteturas.
Informaes sobre segurana esto centralizadas em http://security.debian.
org/.
O Debian est sempre tentando aumentar sua segurana atravs de novos projetos como
o mecanismo automtico de verificao de assinatura dos pacotes.
O Debian fornece um grande nmero de ferramentas de segurana para administrao
de monitoramento do sistema. Desenvolvedores tentam integrar estas ferramentas com
a distribuio para fazer um sistema opeacional cada vez mais seguro. Estas ferramentas
incluem: verificao da integridade do sistema, firewall, deteco de intrusos, etc.
Mantenedores de pacote esto cientes dos problemas de segurana. Isto leva a pensar que
algumas restries poderiam ser impostas para alguns servios em seu uso normal. O Debian, porm, tenta balanear segurana e facilidade de administrao - os programas no
so desativados quando voc os instala (como o caso nas distribuies da famlia BSD).
Em qualquer caso, implementaes de segurana tipo programas setuid so parte da
poltica Debian Policy (http://www.debian.org/doc/debian-policy/).
Publicando informaes de segurana especfica para o Debian e complementando outros documentos relacionados a segurana (veja Esteja ciente dos problemas gerais de segurana on
page 25), este documento ajuda a produzir sistemas mais seguros.
29
Captulo 3
Antes de instalar qualquer sistema operacional em seu computador, configure uma senha para
a BIOS. Aps a instalao (uma vez que voc tenha habilitado o boot a partir do HD) voc deve
voltar a BIOS e alterar a sequncia de boot desabilitando o boot a partir do disquete (floppy),
cdrom e outros dispositivos. Se voc no fizer assim, um cracker s precisar de acesso fsico e
um disco de boot para acessar o sistema inteiro.
Desabilitar o boot a menos que uma senha seja fornecida bem melhor. Isto pode ser muito
eficaz num servidor, porque ele no reiniciado constantemente. A desvantagem desta ttica
que o reincio exige interveno humana, o que pode causar problemas se a mquina no for
facilmente acessvel.
Observao: muitas BIOS vem de fbrica com senhas padro bem conhecidas e existem programas que recuperam estas senhas, ou seja, alteram a senha atual para a senha original, para
o caso de uma perda da senha pelo administrador. Assim, no dependa desta medida para
proteger o acesso ao sistema.
3.2
3.2.1
Particionando o sistema
Escolha um esquema de partio inteligente
Um esquema de partio inteligente depende de como a mquina ser usada. Uma boa regra
ser razoavelmente generoso com suas parties e prestar ateno aos seguintes fatores:
Qualquer diretrio que um usurio tenha permisses de escrita, como o /home, /tmp
e o /var/tmp/, devem estar separados em uma partio. Isto reduz o risco de um
usurio malicioso utilizar o DoS (Denial of Service) para encher seu diretrio raiz ( /
) e tornar o sistema inutilizvel (Observao: isto no totalmente verdade uma vez que
30
sempre existe algum espao reservado para o usurio root que o usurio normal no
pode preencher), e tambm previne ataques tipo hardlink. 1
Qualquer partio com dados variveis, isto , /var (especialmente /var/log) tambm
deve estar numa partio separada. Em um sistema Debian voc deve criar /var um
pouco maior que em outros sistemas porque o download de pacotes (cache do apt)
armazenado em /var/cache/apt/archives.
Qualquer partio onde voc queira instalar software que no padro da distribuio
deve estar separada. De acordo com a Hierarquia Padro do Sistema de Arquivos, estas
so /opt ou /usr/local. Se estas parties esto separadas, elas no sero apagadas
se voc (tiver que) reinstalar o Debian.
Do ponto de vista da segurana, sensato tentar mover os dados estticos para sua prpria partio e ento montar esta partio somente para leitura. Melhor ainda ser colocar os dados numa mdia somenta para leitura. Veja abaixo para mais detalhes.
No caso de um servidor de email importante ter uma partio separada para o spool de
email. Usurios remotos (conhecidos ou no) podem encher o spool de email (/var/mail
e/ou /var/spool/mail). Se o spool est em uma partio separada, esta situao no tornar o sistema inutilizvel. Porm (se o diretrio de spool est na mesma partio que /var)
o sistema pode ter srios problemas: log no sero criados, pacotes podem no ser instalados
e alguns programas podem ter problemas ao iniciar (se eles usam /var/run).
Para parties que voc no tem certeza do espao necesrio, voc pode instalar o Logical
Volume Manager (lvm-common e os binrios necessrio para o kernel, estes podem ser lvm10,
lvm6, ou lvm5). Usando lvm, voc pode criar grupos de volume que expandem mltiplos
volumes fsicos.
Escolhendo o sistema de arquivos apropriado
Durante o particionamento do sistema voc tambm tem que decidir qual sistema de arquivos
usar. O sistema de arquivos padro em uma instalao Debian para parties Linux o ext2.
Porm recomendado alterar para um sistema de arquivos journalling como ext3, reiserfs,
jfs ou xfs, para minimizar os problemas derivados de uma quebra do sistema nos seguintes
casos:
Para laptops em todos os sistemas de arquivos instalados. Assim se acabar a bateria inesperadamente ou o sistema congelar voc correr menos risco de perda de dados durante
a reinicializao do sistema.
1
Um bom exemplo deste tipo de ataque usando /tmp detalhado em The mysteriously persistently exploitable program (contest) (http://www.hackinglinuxexposed.com/articles/20031111.html) e The mysteriously persistently exploitable program explained (http://www.hackinglinuxexposed.com/articles/
20031214.html) (Observe que o incidente um relato Debian) Ele basicamente um ataque no qual um usurio local usa uma aplicao setuid vulnervel atravs de um hard link para ela analisando qualque atualizao
(ou remoo) do prprio binrio feita pelo administrador do sistema. Dpkg foi recentemente corrigido para prevenir isto (veja 225692 (http://bugs.debian.org/225692)) mas outros binrios setuid (no controlados pelo
gerenciador de pacotes) correm o risco se as parties no estiverem configuradas corretamente.
31
para sistemas que armazenam grande quantidade de dados (como servidores de email,
servidores ftp, sistemas de arquivos de rede . . . .). Assim, em caso de queda, menos tempo
ser gasto para o servidor checar o sistema de arquivos e a probabilidade da perda de
dados ser menor.
Deixando de lado a performance dos sistemas journalling (uma vez que isto pode iniciar uma
verdadeira guerra), normalmente melhor usar o ext3. A razo para isto que ele compatvel com o antigo ext2, assim se existe alguma parte do seu sistema com journalling voc pode
desabilitar este recurso e ainda ter um sistema em condies de trabalhar. Tambm, se voc
precisar recuperar o sistema com um disco de boot (ou CDROM) voc no precisa personalizar
o kernel. Se o kernel 2.4, o suporte a ext3 j est disponvel, se um kernel 2.2 voc ser
capaz de iniciar o sistema de arquivos mesmo se perder as capacidades journalling. Se voc
estiver usando outro sisteama journalling diferente do ext3, voc pode no ser capaz de recuperar o sistema a menos que voc tenha um kernal 2.4 com os mdulos necessrios instalados.
Se seu disco de resgate tem o kernel 2.2 pode ser mais difcil acessar sistemas reiserfs ou
xfs.
Em qualquer caso, a integridade dos dados pode ser melhor usando ext3 uma vez que ele usa
file-data journalling enquanto outros usam apenas meta-data journalling, veja http://lwn.
net/2001/0802/a/ext3-modes.php3.
3.3
O sistema no deve ser imediatamente conectado a internet durante a instalao. Isto pode
parecer estpido mas intalao via internet um mtodo comum. Uma vez que o sistema instalar e ativar servios imediatamente, se o sistema estiver conectado a internet e os servios
no estiverem adequadamente configurados, voc estar abrindo brechas para ataques.
Observe tambm que alguns servios podem ter vulnerabilidades de segurana no corrigidas
nos pacotes que voc estiver usando para a instalao. Isto normalmente ser verdade se voc
estiver instalando a partir de mdia antiga (como CD-ROMs). Neste caso, o sistema poderia
estar comprometido antes de terminar a instalao!
Uma vez que a instalao e atualizaes do Debian podem ser feitas pela internet voc pode
pensar que uma boa idia usar este recurso na instalao. Se o sistema est diretamente
conectado (e no est protegido por um firewall ou NAT), melhor instalar sem conexo com a
grande rede usando um mirror local com os pacotes do Debian e as atualizaes de segurana.
Voc pode configurar mirrors de pacotes usando outro sistema conectado com ferramentas
especficas do Debian (se ele um sistema tipo Debian) como apt-move ou apt-proxy, ou
outras, para fornecer os arquivos para o sistema instalado. Se no puder fazer isto, voc pode
configurar regras de firewall para limitar o acesso ao sistema enquanto estiver atualizando
(veja Atualizao de segurana protegida por um firewall on page 205).
3.4
32
Configurar uma boa senha para o root o requerimento mais bsico para ter um sistema seguro. Veja passwd(1) para mais dicas de como criar boas senhas. Voc tambm pode usar
um programa gerador de senhas para fazer isto para voc (veja Gerando senhas de usurios
on page 57).
Muita informao sobre a escolha de boas senhas pode ser encontrada na internet; dois locais
que fornecem um sumrio decente e racional so How to: Pick a Safe Password (http://
wolfram.org/writing/howto/password.html) do Eric Wolfram e Unix Password Security (http://www.ja.net/CERT/Belgers/UNIX-password-security.html) do Walter Belgers.
3.5
No final da instalao, voc ser perguntado se senhas shadow deve ser habilitada. Responda
sim (yes), ento as senhas sero mantidas no arquivo /etc/shadow. Apenas o root e o grupo
shadow ter acesso de leitura a estes arquivo, assim nenhum usurio ser capaz de pegar uma
cpia deste arquivo para rodar um cracker de senhas nele. Voc pode alternar entre senhas
shadows e senhas normais a qualquer hora usando shadowconfig.
Leia mais sobre senhas Shadow em Shadow Password (http://www.tldp.org/
HOWTO/Shadow-Password-HOWTO.html)
(/usr/share/doc/HOWTO/en-txt
/Shadow-Password.txt.gz).
Alm disso, voc perguntado durante a insatalao se quer usar senhas MD5 .. Isto geralmente uma boa idia uma vez que permite senhas longas e melhor encriptao. MD5 permite
o uso de senhas com mais de 8 caracteres. Isto, se usado sabiamente, pode tornar mais difcil ataques as senhas do sistema. MD5 a opo padro quando instalando a ltima verso
do pacote password. Voc pode alterar isto a qualquer hora aps a instalao executando
dpkg-reconfigure -priority=low passwd. Voc pode reconhecer senhas md5 no arquivo /etc/shadow pelo prefixo $1$.
Isto modifica todos arquivos sob /etc/pam.d pela substituio da linha de senha e incluso
do md5 nela:
Se max no est configurado para mais de 8 a alterao no ser til. Para mais informaes
leia Autenticao do Usurio: PAM on page 47.
Observao: o padro de configurao do Debian, mesmo quando ativada a senha MD5, no
modifica o valor max previamente configurado.
3.6
33
Servios so programas como servidores ftp e servidores web. Uma vez que eles tem que estar
escutando por conexes que requisitem o servio, computadores externos podem conectar-se a
eles. Servios algumas vezes so vulnerveis (i.e. podem estar comprometidos sobre um certo
ataque) e oferecem risco a segurana.
Voc no deve instalar servios que no so necessrios em sua mquina. Todo servio instalado pode introduzir novos, talvez no bvios ou conhecidos, buracos de segurana em seu
computador.
Como voc j deve saber, quando voc instala um servio o padro ele ser ativado. Em
uma instalao Debian padro, sem nenhum servio a mais instalado, o footprint de servios
rodando baixo mesmo quando falamos de servios oferecidos para a rede. o footprint no
Debian 2.1 no to firme quanto no Debian 2.2 (alguns servios do inetd foram habilitados
por padro) e no Debian 2.2 o rpc portmapper habilitado logo aps a installation. Rpc
instalado por padro porque ele necessrio para muitos servios, NFS por exemplo. Ele pode
ser facilmente removido, porm, veja Desabilitando daemons de servio on this page como
desabilit-lo.
Quando voc instala um novo servio de rede (daemon) em seu sistema Debian GNU/Linux
ele pode ser habilitado de duas maneiras: atravs do superdaemon inetd (uma linha ser
adicionada ao /etc/inetd.conf) ou atravs de um programa que serve de interface. Estes
programas so controlados pelos arquivos /etc/init.d, que so chamados no momento da
inicializao atravs do mecanismo SysV (ou outro alternativo) pelo uso de symlinks em /etc
/rc?.d/* (para mais informaes de como isto feito leia /usr/share/doc/sysvinit
/README.runlevels.gz).
Se voc quer manter algum servio, mas que ser usado raramente, use os comandos update,
isto , update-inetd e update-rc.d para remov-los do processo de inicializao.
3.6.1
34
update-rc.d stop XX 2 3 4 5 .
Observe que, se voc no est usando file-rc, update-rc.d -f _service_ remove no
trabalhar apropriadamente, pois embora todos links sejam removidos, aps reinstalao ou
upgrade do pacote estes links sero regenerados (provavelmente no o que voc quer). Se
pensa que isto no intuitivo voc provavelmente est certo (veja Bug 67095 (http://bugs.
debian.org/67095)). Texto da manpage:
3.6.2
Voc deve checar se realmente precisa do daemon inetd. Inetd sempre foi uma maneira de
compensar deficincias do kernel, mas estas deficincias foram corrigidas. Existe possibilidade de ataques DoS (Denial of Service) contra o inetd, ento prefervel usar daemons
individuais do que rodar um servio do inetd. Se voc ainda quer rodar algum servio do
inetd, ento no mnimo alterne para um daemon mais configurvel como xinetd, rlinetd
ou openbsd-inetd.
Voc deve parar todos os servios Inetd desnecessrios, como echo, chargen, discard,
daytime, time, talk, ntalk e r-services (rsh, rlogin e rcp) os quais so considerados
ALTAMENTE inseguros (use ssh no lugar destes).
Voc pode desabilitar os servios editando o arquivo /etc/inetd.conf diretamente, mas o
Debian fornece uma alternativa melhor: update-inetd (o qual comenta os servios de modo
que eles possam facilmente ser reativados). Voc pode remover o daemon telnet para alterar
o arquivo de configurao e reiniciar o daemon (neste caso o servio telnet desabilitado):
35
Se voc quer um servio, mas no o quer disponvel para todos os IP do seu host, voc deve
usar um recurso no documentado no inetd (substitua o nome do servio por servio@ip) ou
use um daemon alternativo como xinetd.
3.7
O Debian vem com uma grande quantidade de software, por exemplo o Debian 3.0 woody inclui
quase 6 CD-ROMs de software e milhares de pacotes. Apesar da grande quantidade de software, a instalao do sistema base utiliza poucos pacotes. 2 voc pode estar mal informado e
instalar mais que o realmente necessrio para seu sistema.
Sabendo o que seu sistema realmente precisa, voc deve instalar apenas o que for realmente
necessrio para seu trabalho. Qualquer ferramenta desnecessria pode ser usada por um usurio malicioso para comprometer o sistema ou por um invasor externo que tenha acesso ao shell
(ou cdigo remoto atravs de servios explorveis).
A presena, por exemplo, de utilitrios de desenvolvimento (um compilador C) ou linguagens interpretadas (como perl, python, tcl. . . ) pode ajudar um atacante a comprometer o
sistema da seguinte maneira:
permitir a ele fazer escalao de privilgios. Isto facilita, por exemplo, rodar exploits
locais no sistema se existe um depurador e compilador prontos para compilar e testar.
fornecer ferramentas que poderiam ajudar um atacante a usar o sistema comprometido
como base de ataque contra outros sistemas 3
claro que um invasor com acesso ao shell local pode baixar suas prprias ferramentas e
execut-las, alm disso o prprio shell pode ser usado para fazer complexos programas. Remover software desnecessrio no impedir o problema mas dificultar a ao de um possvel
atacante. Ento, se voc deixar disponveis ferramentas em um sistema de produo que poderiam ser usadas remotamente para um ataque (veja Ferramentas de verificao remota de
vulnerabilidades on page 131), pode acontecer de um invasor us-las.
2
Por exemplo, no Debian Woody ela gira em torno de 40Mbs, tente isto para ver quanto os pacotes necessrios
ocupam no sistema:
$ size=0 $ for i in grep -A 1 -B 1 "^Section: base"/var/lib/dpkg/available
| grep -A 2 "^Priority: requiredgrep "^Installed-Sizecut -d : -f 2 ; do
size=$(($size+$i)); done $ echo $size 34234
3
Muitas invases so feitas mais para acessar os recursos e executar atividades ilcitas (ataques denial of service,
spam, rogue ftp servers, poluio dns. . . ) do que para obter dados confidenciais dos sistemas comprometidos.
3.7.1
36
Removendo Perl
Remover o perl pode no ser fcil em um sistema Debian pois ele muito usado. O pacote perl-base tem prioridade classificada como requerida (Priority: required), o que j diz
tudo. Voc pode remov-lo mas no ser capaz de rodar qualquer aplicao perl no sistema;
voc ainda ter que enganar o sistema de gerenciamento de pacotes para ele pensar que o
perl-base ainda est instalado. 4
Quais utilitrios usam perl? Voc mesmo pode verificar:
$ for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do [ -f $i ] && {
type=file $i | grep -il perl; [ -n "$type" ] && echo $i; }; done
Estes incluem os seguintes utilitrios em pacotes com prioridade required ou important:
/usr/bin/chkdupexe do pacote util-linux.
/usr/bin/replay do pacote bsdutils.
/usr/sbin/cleanup-info do pacote dpkg.
/usr/sbin/dpkg-divert do pacote dpkg.
/usr/sbin/dpkg-statoverride do pacote dpkg.
/usr/sbin/install-info do pacote dpkg.
/usr/sbin/update-alternatives do pacote dpkg.
/usr/sbin/update-rc.d do pacote sysvinit.
/usr/bin/grog do pacote groff-base.
/usr/sbin/adduser do pacote adduser.
/usr/sbin/debconf-show do pacote debconf.
/usr/sbin/deluser do pacote adduser.
/usr/sbin/dpkg-preconfigure do pacote debconf.
/usr/sbin/dpkg-reconfigure do pacote debconf.
/usr/sbin/exigrep do pacote exim.
/usr/sbin/eximconfig do pacote exim.
/usr/sbin/eximstats do pacote exim.
/usr/sbin/exim-upgrade-to-r3 do pacote exim.
4
Voc pode fazer (em outro sistema) um pacote dummy com o equivs
37
3.8
Nunca demais dar uma olhada na lista debian-security-announce, onde avisos e correes dos pacotes so anunciadas pela equipe de segurana do Debian, ou na mailto:
debian-security@lists.debian.org, onde voc pode participar de discusses sobre assuntos relacionados a segurana Debian.
Para receber importantes atualizaes de segurana e alertas envie email para debian-securityannounce-request@lists.debian.org
(mailto:debian-security-announce-request@
lists.debian.org) com a palavra subscribe como assunto. Voc tambm pode inscreverse nesta lista no endereo http://www.debian.org/MailingLists/subscribe
Esta lista tem pouco volume de mensagens e assinando ela voc ser imediatamente alertado
sobre atualizaes de segurana para a distribuio Debian. Isto lhe permitir rapidamente
baixar os novos pacotes com atualizaes de segurana, as quais so muito importantes na
manuteno de um sistema seguro. (Veja Executar uma atualizao de segurana on page 40
para detalhes de como fazer isto.)
38
39
Captulo 4
Aps a instalao
Assim que o sistema for instalado, voc ainda poder fazer mais para deix-lo mais seguro;
alguns dos passos descritos neste captulo podem ser seguidos. claro que isto depende de
sua configurao, mas para preveno de acesso fsico voc dever ler Altere a BIOS (de novo)
on page 41,Configurar a senha do LILO ou GRUB on page 41,Remover o aviso de root do
kernel on page 42, Desativando a inicializao atravs de disquetes on page 43, Restringindo
o acesso de login no console on page 43 e Restringindo reinicializaes do sistema atravs da
console on page 44.
Antes de se conectar a qualquer rede, especificamente se for uma rede pblica, no mnimo
execute uma atualizao de segurana (veja Executar uma atualizao de segurana on the
next page). Opcionalmente, voc dever fazer um snapshot do seu sistema (veja Fazendo um
snapshot do sistema on page 77).
4.1
Para receber informaes sobre atualizaes e alertas de segurana (DSAs) disponveis e DSAs
voc dever se inscrever na lista de discusso debian-security-announce. Veja O time Debian
Security on page 113 para mais informaes sobre como o time de segurana do Debian funciona. Para mais informaes sobre como se inscrever nas listas de discusses do Debian, leia
http://lists.debian.org.
Os DSAs so assinados pelo time de segurana do Debian e as assinaturas podem ser pegas
atravs do endereo http://security.debian.org.
Voc dever considerar, tambm, em se inscrever na lista de discusso debian-security (http:
//lists.debian.org/debian-security) para discusses gerais de problemas de segurana no sistema operacional Debian. Na lista voc poder entrar em contato com outros administradores de sistemas experientes, assim como tambm desenvolvedores do Debian e autores
de ferramentas de segurana que podem responder suas questes e oferecer recomendaes.
FIXME: tambm adicionar a chave aqui?
4.2
40
Assim que novos bugs so descobertos nos pacotes, os mantenedores do Debian e autores de
software geralmente aplicam patches dentro de dias ou at mesmo horas. Aps uma falha ser
corrigida, um novo pacote disponibilizado em http://security.debian.org.
Se estiver instalando um lanamento do Debian, voc dever ter em mente que desde que
o lanamento foi feito devem existir atualizaes de segurana que podem determinar um
pacote como vulnervel. Tambm existem lanamentos menores (foram sete no lanamento
da 2.2 potato) que incluem estas atualizaes de pacotes.
Voc precisa anotar a data em que a mdia removvel foi feita (se estiver usando uma) e verificar o site de segurana para ter certeza que existem atualizaes de segurana. Se existem
atualizaes e voc no puder baixar os pacotes de um site security.debian.org em outro sistema (voc no est conectado na Internet ainda? est?) antes de se conectar a rede voc dever
considerar (se no estiver protegido por um firewall, por exemplo) adicionar regras de firewall
assim seu sistema somente poder se conectar a security.debian.org e ento executar a atualizao. Um modelo de configurao mostrado em Atualizao de segurana protegida por
um firewall on page 205.
Nota:Desde o Debian woody 3.0, aps a instalao voc ter a oportunidade de adicionar atualizaes de segurana ao sistema. Se disser sim a isto, o sistema de instalao tomar os
passos apropriados para adicionar a fonte de origem para as atualizaes de segurana para
sua origem de pacotes e seu sistema. Se j tiver uma conexo de Internet, o sistema baixar e
instalar qualquer atualizao de segurana que produziu aps a mdia ser criada. Se estiver
atualizando a partir de uma verso anterior do Debian, o perguntou ao sistema de instalao
para no fazer isto, voc dever realizar os passos descritos aqui.
Para atualizar manualmente o sistema, insira a seguinte linha em seu sources.list e voc
obter as atualizaes de segurana automaticamente, sempre que atualizar seu sistema.
deb http://security.debian.org/ stable/updates main contrib non-free
Assim que instalar isto, voc poder usar ou o apt ou dselect para atualizar:
Se quiser usar o apt simplesmente execute (como root):
# apt-get update
# apt-get upgrade
Se quiser usar o dselect ento primeiro execute o [U]pdate, ento [I]nstall e depois,
finalmente, [C]onfigure pata instalar/atualizar os pacotes.
Se quiser, voc tambm poder adicionar linhas deb-src ao seu arquivo /etc/apt
/sources.list. Veja apt(8) para mais detalhes.
Nota: Voc no precisa adicionar a seguinte linha:
41
deb http://security.debian.org/debian-non-US stable/non-US main contrib nonisto porque security.debian.org hospedado em uma localizao fora dos Estados Unidos e
no possui um arquivo separado non-US.
4.3
Se lembra Escolha uma senha para a BIOS on page 29? Bem, ento voc deve agora, uma vez
que no precisa inicializar atravs de uma mdia removvel, alterar a configurao padro da
BIOS, desta forma ela poder somente inicializar a partir do disco rgido. Tenha certeza de que
no perder a senha da BIOS, caso contrrio, se ocorrer uma falha no disco rgido voc no
ser capaz de retornar a BIOS e alterar a configurao e recuper-la usando, por exemplo, um
CD-ROM.
Outro mtodo mais conveniente, mas menos seguro, alterar a configurao para ter o sistema
inicializando a partir do disco rgido e, caso falhe, tentar a mdia removvel. Por agora, isto
feito freqentemente porque a maioria das pessoas no usam a senha de BIOS com freqncia;
pois se esquecem dela facilmente.
4.4
Qualquer um pode facilmente obter uma linha de comando de root e alterar sua senha entrando com o parmetro <name-of-your-bootimage> init=/bin/sh no aviso de boot.
Aps alterar a senha e reiniciar o sistema, a pessoa ter acesso ilimitado como usurio root e
poder fazer qualquer coisa que quiser no sistema. Aps este processo, voc no ter acesso
root ao seu sistema, j que no saber mais sua senha.
Para se assegurar que isto no ocorra, voc dever definir uma senha para o gerenciador de
partida. Escolha entre uma senha global ou uma senha para determinada imagem.
Para o LILO, voc precisar editar o arquivo de configurao /etc/lilo.conf e adicionar
uma linha password e restricted como no exemplo abaixo.
image=/boot/2.2.14-vmlinuz
label=Linux
read-only
password=mude-me
restricted
Quando terminar, re-execute o lilo. Caso omita restricted o lilo sempre perguntar por
uma senha, no importando se foram passados parmetros de inicializao. As permisses
padres do /etc/lilo.conf garantem permisses de leitura e gravao para o root e permite o acesso somente leitura para o grupo do lilo.conf, geralmente root.
42
Caso utilize o GRUB ao invs do LILO, edite o /boot/grub/menu.lst e adicione as seguintes duas linhas no topo do arquivo (substituindo, claro mude-me pela senha designada). Isto
evita que usurios editem os itens de inicializao. A opo timeout 3 especifica uma espera
de 3 segundos antes do grub inicializar usando o item padro.
timeout 3
password mude-me
Para fortalecer futuramente a integridade da senha, voc poder armazenar a senha em um
formato criptografado. O utilitrio grub-md5-crypt gera um hash de senha que compatvel com o algoritmo de senha encriptada pelo grub (md5). Para especificar no grub que uma
senha no formato md5 ser usada, use a seguinte diretiva:
timeout 3
password --md5 $1$bw0ez$tljnxxKLfMzmnDVaQWgjP0
O parmetro md5 foi adicionado para instruir o grub a fazer o processo de autenticao md5.
A senha fornecida uma verso encriptada md5 do mude-me. O uso do mtodo de senhas
md5 preferido em contrapartida da seleo de sua verso texto plano. Mais informaes
sobre senhas do grub podem ser encontradas no pacote grub-doc.
4.5
Os kernels 2.4 do Linux oferecem um mtodo de acessar um shell de root durante a inicializao que ser logo mostrado aps de carregar o sistema de arquivos cramfs. Uma mensagem
aparecer para permitir ao administrador entrar com um interpretador de comandos executvel com permisses de root, este shell poder ser usado para carregar manualmente mdulos
quando a auto-deteco falhar. Este comportamento padro para o linuxrc do initrd. A
seguinte mensagem ser mostrada:
Press ENTER to obtain a shell (waits 5 seconds)
Para remover este comportamento,
/mkinitrd.conf e definir:
voc
precisar
alterar
/etc/mkinitrd
43
ou (preferido):
# dpkg-reconfigure -plow kernel-image-2.4.x-yz
Note que o Debian 3.0 woody permite aos usurios instalarem o kernel 2.4 (selecionando tipos
de kernels), no entanto o kernel padro o 2.2 (salvo para algumas arquitetura no qual o kernel
2.2 ainda no foi portado). Se voc acha que isto um bug, veja Bug 145244 (http://bugs.
debian.org/145244) antes de reporta-lo.
4.6
O MBR padro no Debian antes da verso 2.2 no atua como setor mestre de partida como
recomendado e deixa aberto um mtodo de se fazer a quebra do sistema:
Pressione shift durante a inicializao, e um aviso MBR aparecer
Ento aperte F e o sistema inicializar pelo disquete. Isto pode ser usado para se obter
acesso root ao sistema.
Este comportamento pode ser alterado com:
lilo -b /dev/hda
Agora o LILO foi colocado na MBR. Isto tambm pode ser feito adicionando-se
boot=/dev/hda ao arquivo de configurao lilo.conf. Existe tambm outra soluo que
desativa o prompt MBR completamente:
install-mbr -i n /dev/hda
Por outro lado, esta porta dos fundos, no qual muitas pessoas simplesmente no se preocupam, podem salvar pessoas que tiverem problemas com sua instalao por quaisquer razes.
FIXME verifique se isto realmente verdade no kernel 2.2, ou foi no 2.1? INFO: Os disquetes
de inicializao no Debian 2.2 no instalam o mbr, mas somente o LILO.
4.7
44
login.defs, editando a varivel CONSOLE que define um arquivo ou lista de terminais nos quais o login do root permitido
securetty 1 adicionando/removendo os terminais nos quais o root tem permisso de
acesso. Se voc deseja permitir somente acesso a console local ento voc precisa por
console, ttyX 2 e vc/X (se estiver usando dispositivos devfs), voc pode querer adicionar tambm ttySX 3 se estiver usando um console serial para acesso local (onde X
um inteiro, voc pode querer ter mltiplas instncias 4 dependendo do nvel de consoles virtuais que tem ativado no /etc/inittab 5 ). Para mais informaes sobre
dispositivos de terminais, leia o Text-Terminal-HOWTO (http://tldp.org/HOWTO/
Text-Terminal-HOWTO-6.html)
Quando utilizar PAM, outras alteraes no processo de login, que podem incluir restries a
usurios e grupos em determinadas horas, podem ser configurados no /etc/pam.d/login.
Uma caracterstica interessante que pode ser desativada a possibilidade de fazer login sem
senhas. Esta caracterstica pode ser limitada removendo-se nullok da seguinte linha:
auth
4.8
required
pam_unix.so nullok
Caso seu sistema tenha um teclado conectado, qualquer um (sim, qualquer um) poder reinicializar o sistema sem efetuar login. Isto pode se encaixar ou no em sua poltica de segurana.
Se deseja restringir isto, voc dever alterar o arquivo /etc/inittab assim a linha que inclui
a chamada para ctrlaltdel executar shutdown com a opo -a (lembre-se de executar o
init q aps realizar qualquer modificao neste arquivo). O padro no Debian inclui esta
opo:
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Agora para permitir somente que alguns usurios possam desligar o sistema, como descreve
a pgina de manual shutdown(8), voc dever criar o arquivo /etc/shutdown.allow e
incluir l os nomes de usurios que podem reiniciar o sistema. Quando a combinao de trs
teclas (a.k.a. Ctrl+Alt+del) for feita, o programa verificar se qualquer um dos usurios listados
esto conectados ao sistema. Se nenhum deles estiver, o shutdown no reiniciar o sistema.
1
4.9
45
Quando montar uma partio ext2, existem diversas opes adicionais que pode utilizar para
a chamada de montagem ou para o /etc/fstab. Por exemplo, esta minha configurao do
fstab para a partio /tmp:
/dev/hda7
/tmp
ext2
defaults,nosuid,noexec,nodev
Observe as diferenas na seo opes. A opo nosuid ignore os bits setuid e setgid completamente, enquanto a noexec probe a execuo de qualquer programa naquele ponto de
montagem, e a nodev ignora dispositivos. Isto soa muito bem, mas elas:
somente se aplicam a sistemas de arquivos ext2
podem ser burlados facilmente
A opo noexec evita que os binrios sejam executados diretamente, mas isto facilmente
contornado:
alex@joker:/tmp# mount | grep tmp
/dev/hda7 on /tmp type ext2 (rw,noexec,nosuid,nodev)
alex@joker:/tmp# ./date
bash: ./date: Permission denied
alex@joker:/tmp# /lib/ld-linux.so.2 ./date
Sun Dec 3 17:49:23 CET 2000
No entanto, muitos script kiddies tem exploits que tentam criar e executar arquivos em /tmp.
se eles no tem conhecimento disto, caem nesta restrio. Em outras palavras, um usurio
no pode ser convencido a executar um binrio alterado em /tmp e.g. quando acidentalmente
adicionar /tmp em sua varivel PATH.
Esteja j avisado que muitos scripts dependem de /tmp sendo executvel. Mais notavelmente,
o Debconf tem (ainda?) alguns problemas relacionados a isto, para mais informaes veja o
bug 116448 (http://bugs.debian.org/116448).
A parte a seguir mais um tipo de exemplo. Uma nota, no entanto: /var pode ser ajustado
para noexec, mas alguns programas 6 mantm seus programas sob /var. O mesmo se aplica a
opo nosuid.
/dev/sda6
/dev/sda12
/dev/sda7
/usr
/usr/share
/var
ext2
ext2
ext2
defaults,ro,nodev
0
2
defaults,ro,nodev,nosuid
0
defaults,nodev,usrquota,grpquota0
6
Alguns destes incluem o gerenciador de pacotes dpkg pois os scripts de instalao (post,pre) e remoo
(post,pre) esto em /var/lib/dpkg/ e tambm o Smartlist
2
2
/dev/sda8
/dev/sda9
/dev/sda10
/dev/sda11
/dev/sda13
/dev/fd0
/dev/fd0
/dev/hda
4.9.1
/tmp
/var/tmp
/var/log
/var/account
/home
/mnt/fd0
/mnt/floppy
/mnt/cdrom
46
ext2
ext2
ext2
ext2
ext2
ext2
vfat
iso9660
defaults,nodev,nosuid,noexec,usrquota,grpquo
defaults,nodev,nosuid,noexec,usrquota,grpquo
defaults,nodev,nosuid,noexec
0
2
defaults,nodev,nosuid,noexec
0
2
rw,nosuid,nodev,exec,auto,nouser,async,usrqu
defaults,users,nodev,nosuid,noexec
0
defaults,users,nodev,nosuid,noexec
0
ro,users,nodev,nosuid,noexec
0
Tenha cuidado em ajustar a opo noexec em /tmp quando desejar instalar novos programas, pois alguns programas o utilizam para a instalao. O Apt um dos tais programas
(veja http://bugs.debian.org/116448), isto pode ser resolvido alterando-se a varivel
APT::ExtractTemplates::TempDir (veja apt-extracttemplates(1)). Voc poder
definir esta varivel no arquivo /etc/apt/apt.conf apontando para outro diretrio com
privilgio de execuo ao invs de /tmp.
Com relao a noexec, esteja alertado que ela pode no oferecer tanta segurana assim. Considere este exemplo:
$ cp /bin/date /tmp
$ /tmp/date
(does not execute due to noexec)
$/lib/ld-linux.so.2 /tmp/date
(funciona, pois o comando date no executado diretamente)
4.9.2
Se configurar o /usr como somente leitura, voc no ser capaz de instalar novos pacotes em
seu sistema Debian GNU/Linux. Voc ter primeiro que remont-lo como leitura-gravao,
instalar os pacotes e ento remont-lo como somente-leitura. A ltima verso do apt (no
Debian woody 3.0) pode ser configurada para executar comandos antes e aps instalar pacotes,
assim voc pode querer configur-lo corretamente.
Para fazer isto, modifique o /etc/apt/apt.conf e adicione:
DPkg
{
Pre-Invoke { "mount /usr -o remount,rw" };
Post-Invoke { "mount /usr -o remount,ro" };
};
Note que o Post-Invoke pode falhar com a mensagem de erro /usr busy. Isto acontece basicamente porque est usando arquivos durante a atualizao que foram atualizados. Voc
encontrar estes programas executando
47
# lsof +L1
Interrompa ou reinicie estes programas e execute manualmente o Post-Invoke. Cuidado! Isto
significa que voc provavelmente precisar reiniciar sua seo do X (se estiver executando
uma) cada vez que fizer uma grande atualizao em seu sistema. Voc dever levar em
conta se um sistema de arquivos /usr somente-leitura adequado ao seu sistema. Veja tambm isto discussion on debian-devel about read-only /usr (http://lists.debian.org/
debian-devel/2001/11/threads.html#00212).
4.10
4.10.1
48
A primeira coisa que eu gosto de fazer adicionar o suporte a MD5 nas aplicaes com suporte
a PAM, pois isto nos ajuda a se proteger contra ataques de dicionrio (as senhas podem ser
maiores se estiver usando MD5). As seguintes duas linhas podem ser adicionadas em todos os
arquivos em /etc/pam.d/ que garantem acesso a mquina, como login e ssh.
requisite
pam_securetty.so
Ento voc dever modificar a lista de terminais no qual o usurio root pode se logar no sistema
no arquivo /etc/securetty. Alternativamente, voc poder ativar o mdulo pam_access
e modificar o arquivo /etc/security/access.conf que possui um controle de acesso
mais fino e geral, mas (infelizmente) no possui mensagens de log decentes (o log dentro do
PAM no padronizado e particularmente um problema a ser tratado). Ns voltaremos no
arquivo access.conf um pouco mais a frente.
Em seguida, a seguinte linha dever ser ativada no /etc/pam.d/login para ativar a restrio
dos recursos do usurio.
session
required
pam_limits.so
Isto restringe os recursos do sistema que os usurios tm permisso (veja abaixo em Limitando
o uso de recursos: o arquivo limits.conf on page 50 ). Por exemplo, voc pode restringir o
nmero de logins concorrentes (de um determinado grupo de usurios, ou de todo o sistema),
nmero de processos, tamanho de memria, etc.
Agora, edite o arquivo /etc/pam.d/passwd e altere a primeira linha. Voc dever adicionar
a opo md5 para usar senhas MD5, altere o tamanho mnimo da senha de 4 para 6 (ou mais)
e ajuste o tamanho mximo, se quiser. A linha resultante dever se parecer com isto:
7
Esta dependncia no foi corrigida, no pacote do Debian 3.0. Por favor veja Bug #112965 (http://bugs.
debian.org/112965).
password
required
49
Se planeja proteger o su, faa isto de forma que somente algumas pessoas possam us-lo para
se tornar o usurio root em seu sistema, voc precisar adicionar um novo grupo chamado
wheel em seu sistema (que o mtodo mais limpo, pois nenhum arquivo tem tal permisso
deste grupo ainda). adicione neste grupo o root e outros usurios que devem ter permisso de
su para se tornar root. Ento adicione a seguinte linha no /etc/pam.d/su:
auth
requisite
Isto assegura que somente algumas pessoas do grupo wheel podero usar su para se tornar
o usurio root. Outros usurios no podero ser capazes de se tornar root. De fato eles obtero
uma mensagem de acesso negado ao tentarem se tornar root.
Se deseja que somente alguns usurios se autentiquem em um servio do PAM, muito fcil
fazer isto usando arquivos onde os usurios que tem permisso de fazer login (ou no) so
armazenados. Imagine que voc somente deseja permitir o usurio ref a fazer o login usando
ssh. Assim, coloque o usurio no arquivo /etc/sshusers-allowed e escreva o seguinte
no arquivo /etc/pam.d/ssh:
auth
required
auth
auth
auth
auth
account
account
account
password
password
password
session
session
session
required
required
required
required
required
required
required
required
required
required
required
required
required
pam_securetty.so
pam_unix_auth.so
pam_warn.so
pam_deny.so
pam_unix_acct.so
pam_warn.so
pam_deny.so
pam_unix_passwd.so
pam_warn.so
pam_deny.so
pam_unix_session.so
pam_warn.so
pam_deny.so
Esta linhas lhe oferecero uma boa configurao padro para todas as aplicaes que suportam
PAM (o acesso negado por padro).
4.10.2
50
Voc realmente dever dar uma olhada sria neste arquivo. Aqui voc poder limitar os recursos usados pelos usurios. Se utilizar PAM, o arquivo /etc/limits.conf ser ignorado e
dever usar o /etc/security/limits.conf ao invs deste.
Se voc no restringir o uso de recursos, qualquer usurio com um interpretador de comandos vlido em seu sistema (ou at mesmo um intruso que comprometeu o sistema atravs de
um servio) pode usar a quantidade de CPU, memria, pilhas, etc. que o sistema puder fornecer. Este problema de exausto de recursos pode somente ser corrigido com o uso de PAM.
Note que l existe um mtodo para adicionar limitao de recursos para alguns interpretadores de comandos (por exemplo, o bash possui ulimit, veja bash(1)), mas nem todos os
interpretadores oferecem as mesmas limitaes e tambm o usurio pode mudar seu shell (veja
chsh(1)). Ento melhor colocar as limitaes nos mdulos do PAM.
Mais detalhes podem ser lidos em:
artigo de configurao do PAM (http://www.samag.com/documents/s=1161/
sam0009a/0009a.htm).
Tornando o Linux mais seguro passo a passo (http://seifried.org/security/
os/linux/20020324-securing-linux-step-by-step.html) na seo Limitando
a viso dos usurios.
LASG (http://seifried.org/lasg/users/) na seo Limitando e monitorando usurios.
FIXME: Colocar um belo limits.conf acima deste local
4.10.3
O prximo passo editar a configurao e ao bsica que ser feita aps o login do usurio.
Note que este arquivo no parte da configurao do PAM, um arquivo de configurao
lido pelos programas login e su, assim no faz sentido configur-lo para casos onde nem um
dos programas so indiretamente chamados (o programa getty que executado atravs do
console e requer login e senha, executa o login).
FAIL_DELAY
10
Esta varivel deve se ajustada para um valor alto para tornar difcil ataques brute force atravs
de tentativas de logon no terminal. Caso uma senha incorreta seja digitada, o possvel atacante
(ou o usurio normal!) ter que aguardar 10 segundos para obter um novo aviso de login, que
bastante tempo quando se utiliza programas automatizados para esta tarefa.
FAILLOG_ENAB
yes
51
Se ativar esta varivel, as falhas nas tentativas de login sero registradas. importante mantlas para pegar algum que tente fazer um ataque brute force.
LOG_UNKFAIL_ENAB
yes
Se ajustar a varivel FAILLOG_ENAB para yes, ento voc dever tambm ajustar esta varivel
para yes. Isto gravar nomes de usurios desconhecidos caso o login falhar. Se fizer isto,
tenha certeza que os logs tenham permisses corretas (640 por exemplo, com a configurao
apropriada de grupo tal como adm), pois os usurios podem acidentalmente entrar com suas
senhas como se fossem nomes de usurios e voc no desejar que outros as vejam.
SYSLOG_SU_ENAB
yes
Isto somente permite que sejam registradas tentativas do uso de su no syslog. Muito importante em mquinas em produo, mas note que isto pode criar tambm problemas de privacidade.
SYSLOG_SG_ENAB
yes
yes
50
Caso senhas MD5 sejam ativadas em sua configurao do PAM, ento esta varivel dever ter
o mesmo valor da que usada l.
4.10.4
O arquivo /etc/ftpusers contm uma lista de usurios que no podem logar no sistema
usando ftp. Somente use este arquivo se voc realmente deseja permitir ftp (que no recomendado em geral, pois utiliza autenticao de senhas em texto plano). Caso seu daemon
suporta PAM, voc poder tambm us-lo para permitir e bloquear usurios para certos servios.
FIXME (BUG): m bug que o arquivo ftpusers padro no Debian no inclua todos os usurios administrativos (do base-passwd).
4.10.5
52
Usando su
Se voc realmente precisa que os usurios se tornem superusurio em seu sistema, e.g. para
instalar pacotes ou adicionar usurios, voc pode usar o comando su para alterar sua identidade. Voc dever tentar evitar se logar como usurio root, usando o su ao invs disto.
Atualmente a melhor soluo remover o su e utilizar os mecanismos do sudo que tem uma
lgica mais geral e mais caractersticas que o su. No entanto, o su mais comum e usado em
muitos outros sistemas Unix.
4.10.6
Usando o sudo
O programa sudo permite ao usurio executar comandos definidos com outra identidade de
usurio, at mesmo como usurio root. Se o usurio for adicionado ao arquivo /etc/sudoers
e se autenticar corretamente, ele ser capaz de executar comandos que foram definidos no
/etc/sudoers. Violaes, tais com senhas incorretas ou tentativa de executar um programa
que no tem permisses, so registradas e enviadas para o usurio root.
4.10.7
4.10.8
Algumas vezes voc deve pensar que precisa ter seus usurios criados em seu sistema local
para oferecer acesso a um determinado servio (servio de mensagens pop3 ou ftp). Antes
de fazer isto, primeiro lembre-se que a implementao do PAM no Debian GNU/Linux lhe
permite validar usurios em uma grande variedade de servios de diretrio externos (radius,
ldap, etc.) atravs dos pacote libpam.
Caso os usurios precisem ser criados e o sistema poder ser acessado remotamente, tenha
em mente que os usurios podero ser capazes de se logar no sistema. Voc poder corrigir
isto dando aos usurios um shell nulo (/dev/null) (ele no precisar estar listado no arquivo
53
/etc/shells). Se deseja permitir aos usurios acessar o sistema mas com seus movimentos limitados, voc poder usar o /bin/rbash, que equivalente a adicionar a opo -r ao
bash (RESTRICTED SHELL veja bash(1)). Por favor observe que at mesmo em um shell
restrito, um usurio pode acessar um programa interativo (que pode permitir a execuo de
um subshell) e poder pular as limitaes do shell.
O Debian atualmente fornece em sua verso instvel (e poder ser includa em uma futura
verso estvel) do mdulo pam_chroot (no pacote libpam-chroot). Uma alternativa a ele
o chroot o servio que fornece log remoto (ssh, telnet).8
Se voc deseja restringir quando seus usurios podem acessar o sistema, voc dever personalizar o /etc/security/access.conf a suas necessidades.
Informaes sobre como fazer chroot dos usurios acessando o sistema atravs do ssh
descrito em Ambiente chroot para SSH on page 207.
4.10.9
Auditoria do usurio
Se voc realmente paranico, pode querer adicionar uma configurao em todo o sistema
para auditar o que os usurios esto fazendo no sistema. Esta seo mostra algumas dicas de
utilitrios diversos que podero ser usados.
Auditoria de entrada e sada com o script
Voc poder usar o comando script para auditar ambos o que os usurios executam e quais
so os resultados destes comandos.No possvel definir o script como um interpretador de
comandos (at mesmo se ele for adicionado ao arquivo /etc/shells). Mas voc poder ter
o arquivo de inicializao do shell executando o seguinte:
umask 077
exec script -q -a "/var/log/sessions/$USER"
claro, se voc fizer isto de forma que afete todo o sistema, significa que o shell no continuar lendo arquivos de configuraes pessoais (pois ele ser substitudo pelo script). Uma
alternativa fazer isto nos arquivos de inicializao do usurio (mas ento o usurio poder
remov-la, veja os comentrios sobre isto abaixo)
Voc tambm precisa ajustar os arquivos no diretrio de auditoria (no exemplo /var/log
/sessions/) assim os usurios podero gravar para ele, mas no podero remover o arquivo.
Isto pode ser feito, por exemplo, criando os arquivos de seo de usurio antecipadamente e
definindo a opo append-only usando o chattr.
Uma alternativa til para administradores de sistemas, que inclui informaes sobre data,
pode ser:
8
Libpam-chroot ainda no foi ainda testado, ele funciona com o login mas ele no fcil de ser configurado
para funcionar com outros programas
54
umask 077
exec script -q -a "/var/log/sessions/$USER-date +%Y%m%d"
55
4.10.10
Se deseja ver o que os usurios esto atualmente fazendo quando entram no sistema voc poder usar o banco de dados wtmp que inclui todas as informaes de login. Este arquivo pode
ser processado por vrios utilitrios, entre eles o sac que pode enviar como sada um perfil
sobre cada usurio mostrando o intervalo de tempo que eles geralmente entram no sistema.
No caso de ter a contabilizao ativada, voc tambm poder usar as ferramentas fornecidas
por ele para ser capaz de determinar quando os usurios acessam o sistema e o que eles executam.
4.10.11
Dependendo de sua poltica de usurios voc pode querer alterar como as informaes so
compartilhadas entre os usurios, o que significa, o que cada permisso padro permite.
Esta alterao feita definindo uma configurao apropriada de umask para todos os usurios. Voc poder alterar a configurao de UMASK no arquivos /etc/limits.conf, /etc
/profile, /etc/csh.cshrc, /etc/csh.login, /etc/zshrc e provavelmente em alguns outros (dependendo do tipo de shell que tem instalado em seu sistema). De todos
estes, o ltimo executado tem preferncia. A ordem : limits.conf do PAM, o padro
11
Ttys so criados para logins locais e logins remotos durante sees do ssh e telnet
56
4.10.12
FIXME: necessrio mais contedo. Falar das consequncias de alterar as permisses de pacotes quando atualiza o sistema (e administrao desta parania dever ser atravs de chroot
em seus usurios).
Se voc precisa garantir acesso dos seus usurios ao sistema usando um interpretador de comandos, pense sobre isto muito cuidadosamente. Um usurio pode por padro, a no ser que
esteja em um ambiente severamente restrito (como uma jaula chroot), obter muitas informaes sobre o seu sistema, incluindo:
alguns arquivos de configurao em /etc. No entanto, as permisses padres do Debian
para alguns arquivos sensveis (que podem conter senhas, por exemplo), no tero acesso
devido a informaes crticas. Para ver que arquivos so somente acessveis pelo usurio
root, por exemplo, execute como superusurio o comando find /etc -type f -a
-perm 600 -a -uid 0.
voc instalou pacote, ou vendo no banco de dados de pacotes, ou no diretrio /usr
/share/doc ou adivinhando olhando nos binrios e bibliotecas instalados em seu sistema.
alguns arquivos de registro em /var/log. Tambm note que alguns arquivos de registro
somente so acessveis aos usurios root e grupo adm (tente executar find /var/log
-type f -a -perm 640) e alguns so somente disponveis ao usurio root (tente executar find /var/log -type f -a -perm 600 -a -uid 0).
O que um usurio pode ver em seu sistema? Provavelmente muitas coisas, tente isto (faa uma
breve parada):
find / -type f -a -perm +006 2>/dev/null
find / -type d -a -perm +007 2>/dev/null
A sada mostra a lista de arquivos que um usurio pode ver e os diretrios que ele tem acesso.
57
4.10.13
Existem muitos casos quando um administrador precisa criar muitas contas de acesso de usurios e fornece senhas a a todas elas. claro, o administrador poderia somente ajustar a senha
para ser a mesma da conta de usurio, mas isto no seria uma atitude muito segura. Uma
alternativa melhor gerar um programa gerador de senhas. O Debian oferece os pacotes
makepasswd, apg e pwgen que contm programas (o nome do programa o mesmo do pacote) que podem ser usados para este propsito. O makepasswd gerar senhas aleatrias reais
com uma nfase em segurana at mesmo na pronunciabilidade, enquanto o pwgen tentar
criar senhas pronunciveis ( claro que isto depender de sua lngua me). O apg tem algo-
58
rtmos para oferecer ambos (existe uma verso cliente/servidor deste programa mas no est
includa no pacote do Debian).
O passwd no permite que uma senha seja definida de forma interativa (pois ele utiliza acesso
direto a tty). Se deseja alterar senhas quando cria um grande nmero de usurios, voc poder
cri-las usando o adduser com a opo --disabled-login e ento usar o usermod ou
chpasswd 12 (ambos vm no pacote passwd assim voc j os ter instalados). Se desejar usar
um arquivo com todas as informaes dos usurios como um processo no interativo, ser
melhor usar o newusers.
4.10.14
Senhas de usurios podem algumas vezes ser o ponto vulnervel na segurana de um determinado sistema. Isto devido ao fato de que alguns usurios escolherem senhas fracas para suas
contas (e quanto mais deles tm acesso ao sistema, maiores as chances disto acontecer). At
mesmo se voc estabelecer checagens com o mdulo cracklib do PAM e limitaes de senhas
como descrito em Autenticao do Usurio: PAM on page 47 os usurios ainda sero capazes
de usar senhas simples. Pois o acesso a usurios remotos pode incluir acesso a um shell remoto
(felizmente sobre ssh) tornando possvel deduzir a senha mais difcil para invasores remotos.
Especialmente se eles so capazes de coletar informaes importantes, tais como nomes de
usurios e at dos prprios arquivos passwd e shadow.
Um administrador de sistema dever, dado um grande nmero de usurios, verificar se a
senha que eles tm so consistentes com a poltica local de segurana. Como verificar? Tente
quebr-las assim como um invasor faria se ele tivesse acesso ao hash de senhas (o arquivo
/etc/shadow).
Um administrador poderia usar o john ou crack (ambos crackers de senhas fora bruta)
juntos com um dicionrio apropriado para procurar senhas de usurios e ter um plano de ao
quando uma senha fraca for detectada. Voc pode procurar por pacote Debian que contm
lista de palavras de dicionrio usando apt-cache search wordlist ou visitando os sites
clssicos de pesquisas de dicionrio tais como ftp://ftp.ox.ac.uk/pub/wordlists ou
ftp://ftp.cerias.purdue.edu/pub/dict.
4.10.15
Usurios inativos geralmente so um risco de segurana, um usurio pode estar inativo porque saiu para comer ou porque ocorreu um problema com sua conexo remota, que no foi
restabelecida. Por alguma razo, os usurios inativos podem levar a um comprometimento do
sistema:
porque o console do usurio pode ser destravado e pode ser acessado por um intruso.
12
O chpasswd no trabalha com a gerao de senhas em md5, assim ele precisa ser informado que forma de
criptografia das senhas ser utilizado, com a opo -e.
59
porque um intruso pode ser capaz de reconectar a si mesmo a uma conexo de rede
fechada e enviar comandos ao shell remoto (isto muito fcil de ser feito caso o shell
remoto no seja criptografado como no caso do telnet).
Alguns sistemas remotos podem ter sido comprometidos atravs de uma screen inativa (ou
desconectada).
A desconexo automtica de usurios idle geralmente parte da poltica local de segurana
que deve ser forada. Existem vrias formas de se fazer isto:
Caso o interpretador de comandos do usurio seja o bash, o administrador do sistema
poder definir um valor para a varivel TMOUT (veja bash(1)) que far o shell deslogar
os usurios inativos automaticamente. Note que ela dever ser definida com a opo -o
ou os usurios sero capazes de alter-la (ou desativ-la).
Instale o timeoutd e configure /etc/timeouts de acordo com sua poltica de segurana local. O daemon observar usurios inativos e respectivamente far o logout de
suas sees.
Instale o autolog e o configure para remover usurios inativos.
Os daemons timeoutd ou autolog so os mtodos preferidos, pois, aps tudo, os usurios
podem alterar seu shell padro ou podem alterar para um outro shell que no possua tais
controles.
4.11
Usando os tcpwrappers
60
4.12
61
4.12.1
O pacote logcheck no Debian dividido em trs pacotes: logcheck (o programa principal), logcheck-database (um banco de dados de expresses regulares de um programa) e
logtail (mostra linhas de logs que ainda no foram lidas). O padro do Debian (em /etc
/cron.d/logcheck) executar o logcheck a cada hora e aps reinicializaes.
Esta ferramenta pode ser muito til se personalizada adequadamente para alertar ao administrador de eventos estranhos. O Logcheck pode ser totalmente personalizado assim enviar
mensagens baseadas em eventos encontrados nos logs e passveis de ateno. A instalao
padro inclui perfis para eventos ignorados e violaes de polticas para trs diferentes
configuraes (workstation, server e paranoid). O pacote do Debian inclui um arquivo de
configurao /etc/logcheck/logcheck.conf, instalado pelo programa, que define que
usurio receber as verificaes. Ele tambm oferece um mtodo para os pacotes que fornecem
servios para implementar novas polticas nos diretrios: /etc/logcheck/cracking.d
/_packagename_, /etc/logcheck/violations.d/_packagename_, /etc/logcheck
/violations.ignore.d/_packagename_,
/etc/logcheck/ignore.d.paranoid
/_packagename_,
/etc/logcheck/ignore.d.server/_packagename_ e /etc
/logcheck/ignore.d.workstation/_packagename_. No entanto, so poucos os pacotes que fazem isto. Se tiver uma poltica que pode ser til para outros, por favor envie-a como
relatrio de falha para o pacote apropriado (como um bug wishlist). Para mais informaes,
leia /usr/share/doc/logcheck/README.Debian.
O melhor mtodo de configurar o logcheck editar seu arquivo principal de configurao /etc/logcheck/logcheck.conf aps a instalao. Altere o usurio padro (root)
para quem o relatrio dever ser enviado. Voc dever ajustar o nvel de relatrio l tambm. O pacote logcheck-database possui trs nveis de relatrio para aumentar o detalhamento: workstation, server e paranoid. server (servidor) o nvel padro, paranoid
(paranico) somente recomendado para mquinas de alta segurana executando poucos servios quanto forem possveis e workstation (estao de trabalho) para mquinas relativamente
62
4.12.2
O Debian vem com uma configurao padro do syslog (em /etc/syslog.conf) que registra mensagens em arquivos apropriados dependendo da facilidade do sistema. Voc dever
estar familiarizado com isto; d uma olhada no arquivo syslog.conf e na documentao
caso no estiver registrando. Se voc tem a inteno de manter um sistema seguro voc dever
se atentar aonde as mensagens de log so enviadas, assim elas no passaro desapercebidas.
Por exemplo, o envio de mensagens para o console tambm uma configurao interessante
para muitos sistemas a nvel de produo. Mas para muitos do sistemas tambm importante
adicionar uma nova mquina que servir de servidor de logs (i.e. ela receber os logs de todos
os outros sistemas).
Os e-mails enviados para o root tambm devero ser considerados, muitos controles de segurana (como o snort) enviam alertas para a caixa de correios do root. Esta caixa de correios
normalmente aponta para o primeiro usurio criado no sistema (verifique no /etc/aliases).
Tenha ateno de enviar as mensagens do root para algum lugar onde sejam lidas (ou localmente ou remotamente).
Existem outras contas e aliases em seu sistema. Em um sistema pequeno, provavelmente o
mtodo mais simples de ter certeza que todos estes aliases apontam para a senha de root, e
aquele e-mail do root redirecionado para a caixa de mensagens pessoal do administrador do
sistema.
FIXME: seria interessante em falar como um sistema Debian pode enviar/receber traps SNMP
relacionado a problemas de segurana (jfs). Checar: snmptraglogd, snmp e o snmpd.
4.12.3
Um servidor de logs uma mquina que coleta dados do syslog remotamente atravs da rede.
Se uma de suas mquinas for comprometida, o intruso no ser capaz de cobrir seus rastros,
63
a no ser que ataque tambm o servidor de logs. Assim, esta mquina dever estar especialmente segura. Fazer uma mquina de loghost simples. Apenas inicie o syslogd com a
opo syslogd -r e um novo servidor de logs nasce. Para tornar isto permanentemente na
Debian, edite o arquivo /etc/init.d/sysklogd e adicione a linha
SYSLOGD=""
to
SYSLOGD="-r"
Em seguida, configure as outras mquinas para enviar dados para o servidor de logs. Adicione
uma entrada como a seguinte no arquivo /etc/syslog.conf:
facility.level
@your_loghost
Veja a documentao sobre o que pode ser usado no lugar de facility e level (eles no devem
ser usados na configurao que foi mostrada). Se quiser registrar tudo remotamente, apenas
escreva:
*.*
@your_loghost
em seu arquivo syslog.conf. O log remoto, assim como o local, a melhor soluo (o intruso
pode presumir que cobriu seus rastros aps apagar os arquivos de log locais). Veja as pginas
de manual syslog(3), syslogd(8) e syslog.conf(5) para informaes adicionais.
4.12.4
No s importante decidir como os alertas so usados, mas tambm quem tem acesso a
leitura/modificao dos arquivos de histrico (caso no estiver usando um servidor de logs
remoto). No difcil alterar ou desativar os alertas de segurana em um evento de intruso. Voc tambm dever levar em conta que os arquivos de histrico podem revelar muitas
informaes sobre o sistema para um intruso caso ele tenha acesso a eles.
Algumas permisses de arquivos de log no so ideais aps a instalao (mas claro, isto depende da poltica de segurana local do sistema). Primeiro, os arquivos /var/log/lastlog
e /var/log/faillog no precisam ser lidos por usurios normais. No arquivo lastlog
voc pode ver quem entrou recentemente no sistema e no arquivo faillog ter um resumo
de logins que falharam. O autor recomenda fazer um chmod 660 para ambos. De uma breve
olhada em seus arquivos de log e decida cuidadosamente que arquivos de logs devero se tornar legveis para um usurio com um UID diferente de 0 e um grupo que no sejam adm ou
root. Voc dever facilmente verificar isto em seu sistema com:
64
4.13
O Debian GNU/Linux oferece alguns dos patches para o kernel do Linux que aumentam sua
segurana. Estes incluem:
Deteco de Intruso no Linux (no pacote lids-2.2.19), por Huagang Xie e Philippe
Biondi. Este patch do kernel torna o processo de fortalecimento do seu sistema Linux
uma tarefa fcil permitindo que voc restrinja, oculte e proteja processos, at mesmo
do usurio root. Ele tambm permite que proteja ou oculte certos arquivos para que
at mesmo o root no possa modific-los. Adicionalmente, voc poder tambm definir capacidades para certos processos. Um mximo para o administrador de sistema
paranico. Pgina web http://www.lids.org
Listas de Controle de Acessos POSIX (ACLs) para Linux (no pacote kernel-patch-acl).
Este patch de kernel adiciona listas de controle de acesso, um mtodo avanado de
restringir acesso a arquivos. Ele permite a voc um fino controle de acesso a arquivos e diretrios. Este patch foi adicionado ao kernel 2.6. Pgina do projeto: http:
//acl.bestbits.at/
Linux Trustees (no pacote trustees). Este patch adiciona um gerenciamento avanado decente de permisses do sistema para o kernel do Linux. Objetos especiais
(chamados trustees) so ligados a cada arquivo ou diretrio e so armazenados na
memria do kernel, permitindo pesquisa rpida de todas as permisses. Homepage:
http://trustees.sourceforge.net/
NSA Enhanced Linux (no pacote selinux tambm disponvel de the developers website (http://www.coker.com.au/selinux/))
kernel-patch-2.2.18-openwall, por Solar Designer. Este contm um conjunto til
de restries do kernel, como links restritos, FIFOs em /tmp, um sistema de arquivos
/proc restrito, manipulao especial de descritores de arquivos, rea no executvel de
pilha do usurio e outras. Pgina: http://www.openwall.com/linux/
65
66
No entanto, alguns patches ainda no foram adicionados ainda no Debian. Se sentir que alguns
destes devem ser includos, por favor pergunte por ele em Work Needing and Prospective
Packages (http://www.debian.org/devel/wnpp/). Alguns destes pacotes so:
patch do PaX (http://pageexec.virtualave.net/)
patch HAP (http://www.theaimsgroup.com/~hlein/hap-linux/)
Patch Stealth (http://www.energymech.net/madcamel/fm/)
SubDomain. Uma extenso do kernel feita para oferecer confinamento com poucas permisses para programas possivelmente inseguros. Complemento de subdomnio e extenso para controle de acesso nativo. Enquanto similar ao ambiente chroot, ele clama
ser de fcil construo e mais flexvel que um ambiente chroot.
Contexts (ctx) patch. Uma extenso do kernel feita para implementar servidores privados
virtuais. parecido com o jail no BSD. Homepage: http://www.immunix.org/
subdomain.html
UserIPAcct. No um patch realmente relacionado a segurana, mas ele lhe permite criar
quotas de trfego por usurio em seu sistema. Voc tambm pode obter estatsticas sobre
o trfego de usurio. Homepage: http://ramses.smeyers.be/useripacct.
4.14
O estouro de buffer (buffer overflow) o nome de um comum ataque a softwares 16 que faz o uso
de checagem insuficiente de limites (um erro de programao, mais comum na linguagem C)
para executar o cdigo de mquina atravs de entrada de programas. Estes ataques, contra
programas de servidores que escutam conexes remotamente ou contra softwares locais que
garantem altos privilgios aos usurios (setuid ou setgid) podem resultar no comprometimento de qualquer sistema determinado.
Existem basicamente quatro mtodos de se proteger contra estouro de buffer:
aplicar um patch no kernel para prevenir a execuo da pilha (voc pode usar os patches
OpenWall ou Grsecurity)
usar uma biblioteca, tal como a libsafe (http://www.research.avayalabs.com/
project/libsafe/), para substituir funes vulnerveis e introduzir a checagem
apropriada (para informaes sobre como instalar a libsafe leia isto (http://www.
Linux-Sec.net/harden/libsafe.uhow2.txt)).
corrigir o cdigo fonte usando ferramentas para encontrar fragmentos de onde pode introduzir esta vulnerabilidade.
16
To comum, de fato, que eles so a base de 20% de vulnerabilidades reportadas de segurana todo ano, como
determinado pelas estatsticas do banco de dados dde vulnerabilidades ICATs (http://icat.nist.gov/icat.
cfm?function=statistics)
67
recompilar o cdigo fonte para adicionar checagens apropriadas que previnem buffer overflows, usando, por exemplo, StackGuard (http://www.immunix.org/
stackguard.html) (que usado pelo Immunix (http://www.immunix.org)) ou
o patch Stack Smashing Protector (SSP) (http://www.research.ibm.com/trl/
projects/security/ssp/) para o GCC (que usado pelo Adamantix (http://
www.adamantix.org))
O Debian GNU/Linux em seu lanamento 3.0, fornece software para introduzir todos estes
mtodos exceto a proteo de compilao do cdigo fonte (mas isto foi requisitado no Bug
#213994 (http://bugs.debian.org/213994))
Note que at mesmo se o Debian fornecer um compilador que possua proteo contra estouro
de pilha/buffer, todos os pacotes precisariam ser recompilados para introduzir esta caracterstica. Isto , de fato, o que o Adamantix faz (entre outras caractersticas). O feito desta nova
caracterstica na estabilidade do software algo que dever ser determinado (alguns programas ou arquiteturas de processador podem ter problemas com seu uso).
Em qualquer caso, esteja alerta que at mesmo estas alternativas podem no prevenir buffer overflows, pois existem formas de burl-los, como descrito na revista phracks issue
58 (http://packetstorm.linuxsecurity.com/mag/phrack/phrack58.tar.gz) ou
no aviso COREs Mltiplas vulnerabilidades nas tecnologias de proteo de pilha (http:
//onlne.securityfocus.com/archive/1/269246).
4.14.1
Os patches do kernel relacionados a estouro de buffer incluem o patch Openwall que oferece proteo contra buffer overflows nos kernels do Linux 2.2. Para kernels 2.4 ou superiores, utilize o patch Grsecurity (existente no pacote kernel-patch-2.4-grsecurity) que
inclui o patch do Openwall e muito mais caractersticas (http://www.grsecurity.net/
features.php) (incluindo ACLs e mtodos de rede que dificultam a realizao de OS fingerprinting), ou os mdulos de Segurana do Linux (nos pacotes kernel-patch-2.4-lsm e
kernel-patch-2.5-lsm). Para mais informaes sobre como usar estes patch leia a seo
Adicionando patches no kernel on page 64.
4.14.2
Proteo da Libsafe
A proteo do sistema Debian GNU/Linux com a libsafe bastante fcil, apenas instale o pacote e diga Sim para ter a biblioteca pr carregada globalmente. Tenha cuidado,
no entanto, pois isto pode quebrar alguns programas (notavelmente, programas compilados usando a antiga libc5, assim tenha certeza de ler os relatrios de falhas reportadas
(http://bugs.debian.org/libsafe) antes e testar os programas mais crticos em seu sistema com o programa libsafe.
Nota Importante: A proteo da Libsafe pode no ser efetiva atualmente como descrito em
173227 (http://bugs.debian.org/173227). Considere test-la antes de us-la em um
ambiente de produo e no dependa exclusivamente dela para proteger seu sistema.
4.14.3
68
O uso de ferramentas para deteco de estouro de buffer requer, em qualquer caso, conhecimento de programao para corrigir (e recompilar) o cdigo. O Debian contm, por exemplo:
bfbtester (um verificar de estouro de buffer que faz ataques de fora bruta em binrios e estouro de ambiente) e o njamd. Outros pacotes de interesse podem tambm ser o rats, pscan,
flawfinder e o splint.
4.15
4.16
4.16.1
Usando quotas
importante se ter uma boa poltica de quotas, pois ela evita que os usurios ocupem todo o(s)
disco(s) rgido(s).
Voc poder usar dois sistemas diferentes de quota: quota do usurio e quota do grupo. Voc
provavelmente notar que limites de quota de usurios definem o espao que o usurio pode
utilizar, a quota de grupo equivalente para grupos. Mantenha isto em mente quando estiver
trabalhando com tamanhos de quota.
Existem alguns pontos importantes que devem ser pensados sobre a configurao de um sistema de quotas:
69
4.16.2
Em adio as permisses atuais do Unix, os sistemas de arquivos ext2 e ext3 oferecem um conjunto de atributos especficos que lhe do mais controle sobre os arquivos em seu sistema. De
forma contrria a permisses bsicas, estes atributos no so mostrados com o tradicional comando ls -l ou alterados usando-se o chmod, e voc precisar de dois utilitrios diferentes,
o lsattr e o chattr (que esto no pacote e2fsprogs) para gernci-los. Note que isto significa que estes atributos normalmente no sero salvos quando fizer o backup do seu sistema,
assim se alterar qualquer um deles, ser um tormento salvar comandos chattr sucessivos em
um script que ser usado depois de ter restaurado o backup.
70
Entre todos os atributos disponveis, os dois abaixo so os mais importantes para aumentar a
segurana e so referenciados pelas letras i e a e podem ser somente definidos (ou removidos) pelo superusurio:
O atributo i (imutvel): um arquivo com este atributo no pode ser modificado, excludo ou renomeado, e nenhum link poder ser criado para ele, at mesmo pelo superusurio.
O atributo a (incremental): este atributo tem o mesmo efeito do atributo imutvel,
exceto que voc ainda poder abrir o arquivo em modo incremental. Isto significa que
voc poder adicionar mais contedo a ele, mas ser impossvel modificar o contedo
anterior. Este atributo especialmente til para arquivos de log armazenados em /var
/log/, assim voc dever considerar que eles sero movidos sempre devido aos scripts
de rotacionamento de logs.
Estes atributos tambm podem ser definidos para diretrios, neste caso ningum ter o direito
de modificar o contedo de um diretrio (eg. renomear ou excluir um arquivo, . . . ). Quando
aplicado a um diretrio, o atributo incremental permite somente a criao de arquivos.
fcil ver porque o atributo a aumenta a segurana, dando a programas que no esto rodando sob o superusurio a capacidade de adicionar dados a um arquivo sem modificar seu
contedo anterior. Por outro lado, o atributo i parece ser menos interessante: depois de tudo,
somente o superusurio poder usar as permisses bsicas do Unix para restringir o acesso
a um arquivo, e um intruso que teria acesso a uma conta de superusurio poderia sempre
usar o programa chattr para remover o atributo. Tal intruso ficara primeiramente confuso
quando se ver no ser capaz de remover um arquivo, mas ele devero no assumir que ele
est blindado - acima de tudo, ele entrou no seu sistema! Alguns manuais (incluindo a verso anterior deste documento) sugerem remover os programas chattr e lsattr do sistema
para aumentar a segurana, mas este tipo de estratgia, conhecida tambm por segurana
pela obscuridade, deve ser absolutamente evitada, pois ela fornece uma falsa sensao de
segurana.
Um mtodo de resolver isto usar as capacidades do kernel do Linux, como descrito em Defesa pr-ativa on page 149. A capacidade de interesse aqui chamada
CAP_LINUX_IMMUTABLE: se remov-la do conjunto de capacidades (usando por exemplo,o
comando lcap CAP_LINUX_IMMUTABLE) no ser possvel alterar qualquer atributo a ou
i em seu sistema, at mesmo pelo superusurio! Uma estratgia completa pode ser a seguinte:
1 Defina os atributos a e i nos arquivos que deseja;
2 Execute o comando lcap CAP_LINUX_IMMUTABLE (tambm como lcap
CAP_SYS_MODULE, como sugerido em Defesa pr-ativa on page 149) a um dos
scripts de inicializao;
3 Defina o atributo i neste script e em outros arquivos de inicializao, assim tambm
como no prprio binrio lcap;
71
4 Execute manualmente o comando acima (ou reinicie o seu sistema para ter certeza que
tudo funciona como planejado).
Agora que a capacidade foi removida do seu sistema, um intruso no poder alterar qualquer
atributo em arquivos protegidos, e assim no poder alterar ou excluir os arquivos. Se ele
forar a mquina a reiniciar (que o nico mtodo de restaurar o conjunto de capacidades),
ele ser facilmente detectado, e a capacidade ser removida novamente assim que o sistema
for reiniciado. O nico mtodo de alterar um arquivo protegido seria inicializar o sistema em
modo monousurio ou usar outro disco de inicializao. Duas operaes que requerem acesso
fsico a mquina!
4.16.3
Voc tem certeza que o /bin/login em seu disco rgido ainda o binrio que instalou alguns meses atrs? Se ele for uma verso hackeada, que armazena a senha que digitou em um
arquivo oculto ou o envia por e-mails em texto plano atravs da Internet?
O nico mtodo que tem algum tipo de proteo verificar seus arquivos a cada hora/dia/ms
(eu prefiro diariamente) comparando o md5 do atual e do antigo. Dois arquivos nunca tm o
mesmo md5sum (o digest do MD5 de 128 bits, assim a chance de arquivos terem o mesmo
md5sum 3.4e3803), assim, voc est do lado seguro aqui, a no ser que algum tenha hackeado o algoritmo que cria md5sums em sua mquina. Isto , bem, extremamente difcil e muito
improvvel. Voc realmente dever considerar esta auditoria de seus binrios como muito importante, pois um mtodo fcil de reconhecer alteraes. Ferramentas padres usadas para
isto so sXid, AIDE (Ambiente Avanado de Deteco de Intruses), TripWire, integrit e
samhain.
A instalao do debsums ajudar a verificar a integridade do sistema de arquivos, comparando o md5sum de cada arquivo com o md5sum usado no arquivo de pacotes do Debian.
Tenha cuidado, estes arquivos podem ser facilmente alterados.
Voc pode querer usar o locate para indexar todo o sistema de arquivos, se fizer isto, considere as implicaes disto. O pacote locate no Debian executado como usurio nobody,
e assim ele somente indexa arquivos que so visveis para todos. No entanto, se voc alterar seu comportamento, voc tornar todas as localizaes de arquivos visveis para todos os
usurios. Se deseja indexar todo o sistema de arquivos (no os poucos que o usurio nobody
pode ver) voc poder substituir o locate pelo slocate. O slocate tem a etiqueta de uma
verso avanada e segura do locate da GNU, mas ele atualmente fornece funcionalidade adicional de localizao de arquivos. Quando usar o slocate, o usurio somente ver os arquivos
que ele tem acesso e voc poder ignorar qualquer arquivo ou diretrio no sistema. O pacote
slocate executa seus privilgios de atualizao com altos privilgios se comparado ao locate
e indexa cada arquivo. Os usurios so ento capazes de localizar rapidamente cada arquivo
que podem ver. O slocate no lhes permitem ver novos arquivos; ele faz a filtragem da sada
baseado em sua UID.
FIXME: colocar referncias ao snapshot feito aps a instalao.
72
FIXME: Adicionar uma nota com relao a pacotes que no fornecem debsums de aplicativos
instalados (no mandatrio).
FIXME: Mencionar binrios assinados usando digamos, bsign ou elfsign
4.16.4
4.17
4.17.1
73
Para registrar pacotes com endereos impossveis (devido a roteamento incorreto) em seu sistema, use:
/proc/sys/net/ipv4/conf/all/log_martians = 1
Para mais informaes sobre que coisas podem ser feitas com /proc/sys/net/ipv4/* leia
/usr/src/linux/Documentation/filesystems/proc.txt. Todas as opes esto descritas atravs do /usr/src/linux/Documentation/networking/ip-sysctl.txt 17 .
4.17.2
Configurando Syncookies
Esta opo uma faca de dois gumes. De um lado ela protege o seu sistema contra flood de
pacotes syn; por outro lado ela viola os padres definidos (RFCs).
net/ipv4/tcp_syncookies = 1
Se deseja alterar esta opo cada vez que o kernel estiver funcionando, voc precisar alterla em /etc/network/options definindo syncookies=yes. Ela far efeito sempre quando
/etc/init.d/networking for executado (que tipicamente feito durante a inicializao do
sistema) enquanto o seguinte comando far efeito imediatamente at a reinicializao:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Esta opo somente estar disponvel caso o kernel tenha sido compilado com a opo
CONFIG_SYNCOOKIES. Todos os kernels do Debian so compilados com esta opo embutida,
mas voc poder verific-la executando:
$ sysctl -A |grep syncookies
net/ipv4/tcp_syncookies = 1
Para mais informaes sobre os syncookies TCP, leia http://cr.yp.to/syncookies.
html.
4.17.3
Quando definir opes de configurao do kernel para a rede, voc precisar configur-la de
forma que seja carregada sempre que o sistema for iniciado. O seguinte exemplo ativa muitas
das opes anteriores assim como outras opes teis.
17
No Debian o pacote kernel-image instala o fonte sob /usr/src/kernel-source-2.X.X, apenas subistitua linux com o tipo de kernel que est instalado
74
FIXME Ao invs de fornecer este script, fornecer uma configurao modelo para o
sysctl.conf (veja: sysctl.conf(5)). Tambm envie isto como um bug wishlist para o
pacote.
Crie um script em /etc/network/interface-secure (o nome dado como um exemplo)
e o execute do arquivo /etc/network/interfaces desta forma:
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.255.xxx
broadcast xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
pre-up /etc/network/interface-secure
#!/bin/sh
# Nome do Script: /etc/network/interface-secure
# Modifica o comportamento padro para tornar o sistema seguro contra
# alguns tipos de ataques TCP/IP spoofing
# some TCP/IP spoofing & attacks
#
# Contribudo por Dariusz Puchalak
#
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# proteo contra broadcast de ECHO
echo 0 > /proc/sys/net/ipv4/ip_forward
# desativao de forward de ip
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Proteo contra syn cookies ativa
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians # Registra pacotes estranhos
# (isto inclui pacotes falsos, pacotes com a rota de origem alterada e pacotes
redirecionados)
# mas tenha cuidado com isto em servidores web carreg
echo 1 > /proc/sys/net/ipv4/ip_always_defrag
# opo de desfragmentao sempre
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# proteo ativada contra mensagens
# proteo contra ip spoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# e finalmente mais coisas:
# No aceita redirecionamento de ICMP
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# Desativa pacotes com rota de origem
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
75
4.17.4
Para ter capacidades de firewall, ou para proteger o sistema local ou outros atrs dele, o kernel
precisa ser compilado com capacidades de firewall. O kernel padro do Debian 2.2 (tambm
2.2) fornece o filtro de pacotes chamado ipchains, o Debian 3.0 usando o kernel padro (kernel 2.4) oferece um filtro de pacotes de estado chamado iptables (netfilter). As distribuies
antigas do Debian precisaro de um patch apropriado no kernel (o Debian 2.1 usa o kernel
2.0.34).
De qualquer forma, muito fcil usar um kernel diferente do fornecido pelo Debian. Voc
poder encontrar um kernel pr-compilado como pacotes que podero facilmente instalar
em seu sistema Debian. Voc tambm poder copiar os fontes do kernel usando os pacotes
kernel-source-X e construir pacotes de kernel personalizados usando o make-kpkg.
A configurao de firewalls no Debian discutida mais precisamente em Adicionando capacidades de firewall on page 103.
4.17.5
Sistemas com mais de uma interface de rede em diferentes redes podem ter os servios configurados de forma que escutem somente a um determinado endereo IP. Isto normalmente
evita o acesso a servios quando so requisistados atravs de qualquer outro endereo. No
entanto, isto no significa (que foi at mesma uma concepo correta que tive) que o servio
oferecido ao endereo de hardware (interface de rede). 18
Isto no um assunto relacionado a ARP e no uma violao da RFC (isto chamado
mquina weak end na RFC1122 (ftp://ftp.isi.edu/in-notes/rfc1122.txt), seo
3.3.4.2). Lembre-se, endereos IP no tem nada a ver com a interface fsica.
Nos kernels da srie 2.2 (e anteriores) isto pode ser corrigido com:
# echo 1 > /proc/sys/net/ipv4/conf/all/hidden
# echo 1 > /proc/sys/net/ipv4/conf/eth0/hidden
18
Para reproduzir isto (exemplo oferecido por Felix von Leitner na lista de discusso bugtraq):
mquina A (eth0 conectada a eth0 da mquina B): ifconfig eth0 10.0.0.1 ifconfig eth1
23.0.0.1 tcpserver -RHl localhost 23.0.0.1 8000 echo fnord mquina B: ifconfig eth0
10.0.0.2 route add 23.0.0.1 gw 10.0.0.1 telnet 23.0.0.1 8000
Parece, no entanto, no funcionar com servios funcionando na interface 127.0.0.1, voc precisar fazer os testes
usando soquetes simples.
76
19
Patch do kernel 20
Junto com este texto, existiro algumas ocasies em que ser mostrado como configurar alguns servios (servidor sshd, apache, servio de impresso. . . ) para t-los escutando em um
determinado endereo, o leitor dever ter em mente que, sem as correes fornecidas aqui, a
correo no evitar acesso de dentro do mesmo segmento de rede (local). 21
FIXME: os comentrios na bugtraq indicam que l existe um mtodo especfico do Linux para
escutar em uma determinada interface.
FIXME: Enviar um bug contra o netbase, assim a correo de roteamento ser o comportamento
padro no Debian?
4.17.6
Quando no confia em outras mquinas na sua rede (que deve sempre ser o caso, por ser uma
atitude mais segura) voc dever proteger a si mesmo de vrios ataques ARP existentes.
Como deve saber, o protocolo ARP usado para ligar endereos IP a endereos MAC. (veja
RFC826 (ftp://ftp.isi.edu/in-notes/rfc826.txt) para todos os detalhes). Cada vez
que enviar um pacote para um endereo IP uma resoluo arp feita (primeiro procurando no
cache ARP local, ento se o endereo IP no estiver presente no cache faz o broadcast de uma
requisio arp) para encontrar o endereo de hardware alvo. Todos os pacotes ARP tentam
deixar sua mquina ingnua fazendo-a pensar que o endereo IP da mquina B associado
com o endereo MAC da mquina do invasor. Ento cada pacote que deseja enviar para o
endereo IP associado com a mquina B, ser enviado para a mquina do invasor.
19
O fato deste comportamento ser alterado atravs do roteamento foi descrito por Matthew G. Marsh na thread
do bugtraq:
eth0 = 1.1.1.1/24 eth1 = 2.2.2.2/24 ip rule add from 1.1.1.1/32 dev lo table 1 prio
15000 ip rule add from 2.2.2.2/32 dev lo table 2 prio 16000 ip route add default dev
eth0 table 1 ip route add default dev eth1 table 2
20
Existem alguns patches disponveis para este comportamento como descrito na discusso do bugtraq em http://www.linuxvirtualserver.org/~julian/#hidden e http://www.fefe.de/
linux-eth-forwarding.diff.
21
Um invasor pode ter muitos problemas para contornar o acesso atravs da escuta de endereos IP se ele no
est no mesmo domnio de broadcast (mesma rede) que a mquina que ser atacada. Se a invaso for atravs do
roteador, ser bastante difcil as repostas retornarem a algum lugar.
77
4.18
Antes de por o sistema em produo voc dever tirar um snapshot de todo o sistema. Este
snapshot dever ser usado em um evento de compromisso (veja Depois do comprometimento
do sistema (resposta a incidentes) on page 155). Voc dever refazer este upgrade assim que
o sistema for atualizado, especialmente se seu upgrade for para uma novo lanamento do
Debian.
Para isto voc dever usar uma mdia removvel gravvel que poder ser configurada como
somente-leitura, isto poder ser feito em um disquete (proteja como somente leitura aps o
uso) ou uma unidade de CD-ROM (voc poder usar um CD-ROM regravvel assim poder
at mesmo manter backups de md5sums em diferentes datas).
O seguinte script criar o snapshot:
#!/bin/bash
/bin/mount /dev/fd0 /mnt/floppy
/bin/cp /usr/bin/md5sum /mnt/floppy
echo "Calculando banco de dados md5"
>/mnt/floppy/md5checksums.txt
for dir in /bin/ /sbin/ /usr/bin/ /usr/sbin/ /lib/ /usr/lib/
do
find $dir -type f | xargs /usr/bin/md5sum >>/mnt/floppy/md5checksums-lib.tx
done
78
/bin/umount /dev/fd0
echo "Ps instalao do banco de dados md5 calculada"
Note que o binrio md5sum colocado em uma unidade de disquetes assim ele poder ser
usado depois para verificar binrios no sistema (como no caso de ser atacado por um trojan).
O snapshot no inclui os arquivos sob /var/lib/dpkg/info que incluem os hashs md5
de pacotes instalados (em arquivos que finalizam com .md5sums). Voc poder copiar esta
informao tambm, no entanto voc dever saber:
os md5sums fornecidos por pacotes do Debian incluem todos os arquivos fornecidos por
eles, que torna o banco de dados grande (5 MB contra 600Kb em um sistema Debian
GNU/Linux com um sistema grfico e com aproximadamente 2.5 Gb de programas instalados)
nem todos os pacotes do Debian contm md5sums de arquivos que foram instalados pois
esta no (atualmente) a poltica mandatria.
Assim que o snapshot for feito voc dever se assegurar de proteger a mdia como somente
leitura. Voc poder ento armazen-la para backup ou coloc-la na unidade e us-la fazendo
uma verificao com o cron toda a noite comparando os md5sums originais com estes no
snapshot.
4.19
Outras recomendaes
4.19.1
A Svgalib muito bonita para amantes de console, como eu, mas no passado ela provou diversas vezes que muito insegura. Foram lanadas exploraes de vulnerabilidades contra o zgv
e era simples se tornar usurio root. Tente evitar o uso de programas usando Svgalib sempre
que possvel.
79
Captulo 5
bind
80
= 127.0.0.1
}
As seguintes sees detalham como alguns servios individuais podem ser configurados adequadamente conforme sua utilizao.
5.1
Caso ainda estiver usando o telnet ao invs do ssh, voc dever dar uma parada na leitura
deste manual e alterar isto. O ssh deve ser usado para qualquer login remoto ao invs do
telnet. Em uma era onde fcil capturar o trfego que circula na internet e obter senhas em
texto plano, voc dever usar somente protocolos que utilizam criptografia. Assim, execute
um apt-get install ssh agora em seu sistema.
Encoraje todos os usurios em seu sistema para utilizarem o ssh ao invs do telnet, ou at
mesmo melhor, remova o telnet/telnetd. Em adio, voc dever evitar entrar no sistema
usando o ssh como usurio root e ao invs disto, usar mtodos alternativos para se tornar
o root, como o su ou sudo. Finalmente, o arquivo sshd_config no diretrio /etc/ssh,
tambm dever ser modificado para aumentar a segurana:
ListenAddress 192.168.0.1
Especifica que o ssh somente funcionar na interface especificada, caso tenha mais de
uma interface (e no deseja que o ssh funcione atravs delas) ou em caso de adio de
uma futura interface de rede (onde no deseja receber conexes ssh atravs dela).
PermitRootLogin no
Tenta no permitir o login do usurio Root sempre que possvel. Se algum quiser se
tornar o usurio root usando ssh, agora dois logins so necessrios e o ataque de fora
bruta no ter efeito no root via SSH.
Listen 666
Altera a porta do programa, assim o intruso no ter completa certeza de onde o daemon
sshd executado (esteja avisado, isto segurana por obscuridade).
PermitEmptyPasswords no
Senhas em branco tornam a segurana do seu sistema um fiasco.
AllowUsers alex ref me@algumlugar
Permite somente certos usurios tero acesso via ssh a esta maquina.
usuario@maquina pode tambm ser usado para restringir um determinado usurio de
acessar somente atravs de uma maquina especificada.
AllowGroups wheel admin
Permite somente membros de certos grupos de terem acesso ao ssh nesta maquina. AllowGroups e AllowUsers possuem diretivas equivalentes para bloquear o acesso a maquina. No se surpreenda por eles serem chamados de DenyUsers e DenyGroups.
81
PasswordAuthentication yes
Esta escolha fica completamente por sua conta. mais seguro somente permitir o acesso
a maquina de usurios com chaves ssh colocadas em ~/.ssh/authorized_keys. Se
deseja isto, ajuste esta opo para no.
Desative quaisquer outras formas de autenticao que realmente no precisa, se
no usar, por exemplo RhostsRSAAuthentication, HostbasedAuthentication,
KerberosAuthentication ou RhostsAuthentication, voc dever desativa-las,
at mesmo se forem usadas por padro (veja a pgina de manual sshd_config(5)).
Protocol 2
Desative o protocolo da verso 1, pois ele tem alguns problemas de design que torna fcil a descoberta de senhas. Para mais informaes leia documento relacionando problemas do protocolo ssh (http://earthops.net/ssh-timing.pdf) ou o aviso Xforce
(http://xforce.iss.net/static/6449.php).
Banner /etc/some_file
Adiciona um banner (ele ser lido de um arquivo) para usurios se conectando ao servidor ssh, em alguns pases o envio de avisos antes de acessar um determinado sistema
alertando sobre acesso no autorizado ou monitoramento de usurios dever ser emitido
para ter proteo legal.
Voc tambm poder restringir o acesso ao servidor ssh usando o pam_listfile ou
pam_wheel no arquivo de controle PAM para o ssh restringir os logins ssh. Por exemplo,
se quiser manter qualquer pessoa no listada em /etc/loginusers adicionando esta linha
no /etc/pam.d/ssh:
auth
required
Como nota final, tenha ateno que estas diretivas so vlidas para um arquivo de configurao do OpenSSH. Atualmente, no freqentemente usados trs tipos de implementaes
conhecidas do daemon: ssh1, ssh2 e OpenSSH feito pelo time do OpenBSD. O ssh1 foi o primeiro daemon disponvel e ainda o mais usado (existem rumores que at existe um porte
para Windows). O ssh2 possui mais vantagens sobre o ssh2, exceto que ele lanado sob uma
licena fonte fechado. O OpenSSH um daemon ssh completamente livre, que suporta ambos
os protocolos ssh1 e ssh2. O OpenSSH a verso instalada junto o Debian quando o pacote
ssh escolhido.
Voc pode ler mais informaes sobre como configurar um SSH com suporte a PAM em
arquivos da lista de segurana (http://lists.debian.org/debian-security/2001/
debian-security-200111/msg00395.html).
5.1.1
82
5.1.2
Clientes do ssh
Se estiver usando um cliente SSH com um servidor SSH, voc dever ter certeza que ele suporta
os mesmos protocolos que so especificados no servidor. Por exemplo, se utilizar o pacote
mindterm, ele somente utiliza a verso 1 . No entanto, o servidor ssh utiliza, por padro,
a configurao para aceitar somente conexes para o protocolo da verso 2 (por razes de
segurana).
5.1.3
Se no quiser que seus usurios transfiram arquivos do servidor ssh, voc precisar restringir
acesso ao sftp-server e ao scp. Voc poder restringir o sftp-server configurando o
sub-sistema Subsystem no arquivo /etc/ssh/sshd_config. No entanto para restringir o
acesso ao scp voc dever:
bloquear o login de usurios ao servidor ssh (como descrito acima no arquivo de configurao ou configurao do PAM).
no fornecer shells validas para usurios que no tem permisso de realizar transferncias de arquivos seguras. O shell fornecido, no entanto, programas que podem tornar
a conexo ao ssh til, como o menu (estilo BBS). Caso contrrio, a opo anterior a
preferida.
5.2
83
84
rao padro do Squid bloqueia o acesso a porta 25. Se desejar permitir conexes a porta 25,
apenas adicione-a a lista Safe_ports. No entanto, isto NO recomendado.
Ajustar e configurar um servidor proxy/cache apenas parte da tarefa de manter um site
seguro. Outra tarefa necessria a anlise dos logs do Squid para ter certeza que todas as coisas
esto funcionando como deveriam estar. Existem alguns pacotes no Debian GNU/Linux que
podem ajudar o administrador a fazer isto. Os seguintes pacotes esto disponveis na woody
(Debian 3.0):
calamaris - Analisador de arquivos de log para o Squid ou log do proxy Oops
modlogan - Um analisador de arquivos e log modular.
squidtaild - Programa de monitoramento de logs do Squid.
Quando estiver usando o squid em modo acelerador, ele atuar como servidor web tambm.
Ativando esta opo, a complexidade do cdigo aumenta, tornando-a menos confivel. Por
padro, o squid no configurado para atuar como um servidor web, assim no precisar
se preocupar com isto. Note que se quiser usar esta caracterstica, tenha certeza que realmente necessria. Para encontrar mais informaes sobre o modo acelerador do Squid,
veja Squid Users Guide #Chapter9 (http://squid-docs.sourceforge.net/latest/
html/c2416.html).
5.3
Se realmente precisar usar o FTP (sem transport-lo com sslwrap ou dentro de um tunel SSL
ou SSH), voc dever fazer um chroot dentro do diretrio de usurios do ftp, assim o usurio
ser incapaz de ver qualquer coisa que no seja seu prprio diretrio. Caso contrrio, ele
poder atravessar seu sistema de arquivos raz como se tivesse uma conta shell. Voc poder
adicionar a seguinte linha no seu arquivo proftpd.conf na sua seo global para ativar esta
caracterstica chroot:
DefaultRoot ~
Reinicie o proftpd executando /etc/init.d/proftpd restart e verifique se agora pode
escapar do seu diretrio de usurio.
Para prevenir ataques DoS usando ../../.., adicione a seguinte linha no seu arquivo /etc
/proftpd.conf: DenyFilter \*.*/
Lembre-se sempre que o FTP envia o login e senhas de autenticao em texto plano (isto
no um problema se estiver oferecendo acesso a servios pblicos. Entretanto existem alternativas melhores no Debian para isto, como o sftp (fornecido pelo pacote ssh). Tambm existem implementaes livres do ssh para outros sistemas operacionais, por exemplo: putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/) e o cygwin
(http://www.cygwin.com).
85
No entanto, se voc ainda mantm um servidor FTP enquanto disponibiliza o acesso atravs
do SSH voc deve encontrar um problema tpico. Usurios acessando servidores FTP annimos dentro de sistemas protegidos com o SSH devem tentar efetuar o login no FTP server.
Enquanto o acesso ser recusado, as senhas nunca sero enviadas na rede de forma desprotegida. Para evitar isto, o desenvolvedor TJ Sauders do ProFTPd , criou um patch que evita
que os usurios utilizem um servidor FTP annimo com uma conta vlida do ssh. Mais informaes e o patch esto disponveis em: ProFTPD Patches (http://www.castaglia.org/
proftpd/#Patches). Este patch tambm foi reportado para o Debian, veja Bug #145669
(http://bugs.debian.org/145669).
5.4
Hoje em dia, terminais do X so usados por mais e mais empresas onde necessrio para
vrias estaes de trabalho. Isto pode ser perigoso, porque voc precisa permitir o servidor
de arquivos a se conectar aos clientes (a partir do ponto de vista do servidor X, o X altera a
definio de cliente e servidor). Se voc seguir a (pssima) sugesto de muitas documentaes
voc digitar xhost + em sua mquina. Isto permitir qualquer cliente do X a se conectar
em seu sistema. Para ter um pouco mais de segurana, voc dever usar o comando xhost
+hostname ao invs de somente permitir acessos atravs de mquinas especficas.
Uma soluo muito mais segura, no entanto, usar o ssh para fazer o tnel do X e criptografia para toda a seo. Isto feito automaticamente quando voc faz um ssh para a outra
mquina. Para isto funcionar, voc ter que configurar ambos o cliente ssh e o servidor ssh.
No cliente ssh, a opo ForwardX11 dever estar ajustada para yes no arquivo /etc/ssh
/ssh_config. No servidor ssh, a opo X11Forwarding dever estar ajustada para yes
no arquivo /etc/ssh/sshd_config e o pacote xbase-clients dever estar instalado,
pois o servidor ssh utiliza o /usr/X11R6/bin/xauth quando est configurando uma tela
de pseudo terminal do X. Nos tempos do SSH, agora voc dever deixar de usar o controle de
acesso baseado em xhost completamente.
Para melhor segurana, voc no precisar permitir o acesso ao X a partir de outras mquinas,
isto feito desativando o servidor na porta 6000 simplesmente digitando:
$ startx -- -nolisten tcp
Este o comportamento padro do Xfree 4.1.0 (o Xserver fornecido no Debian 3.0). Se estiver
executando o Xfree 3.3.6 (i.e. voc tem o Debian 2.2 instalada) voc poder editar o arquivo
/etc/X11/xinit/xserverrcc e fazer a alterao nestas seguintes linhas:
#!/bin/sh
exec /usr/bin/X11/X -dpi 100 -nolisten tcp
Se estiver usando o conjunto do XDM altere no arquivo /etc/X11/xdm/Xservers para:
:0 local /usr/bin/X11/X vt7 -dpi 100 -nolisten tcp. Se estiver usando o Gdm
tenha certeza que a opo -nolisten tcp est definida no arquivo /etc/gdm/gdm.conf
(que o padro no Debian) tal como esta:
86
[server-Standard]
name=Standard Server
command=/usr/bin/X11/X -nolisten tcp
Voc tambm poder configurar o timeout padro para o travamento do xscreensaver.
At mesmo se o usurio substituir este valor, voc poder editar o arquivo /etc/X11
/app-defaults/XScreenSaver e alterar a linha:
*lock:
False
True
FIXME: adicionar informaes sobre como desativar as protees de tela que mostra o desktop
do usurio (que pode conter informaes sensveis).
Leia mais sobre a segurana em servidores X Window em XWindow-User-HOWTO
(http://www.tldp.org/HOWTO/XWindow-User-HOWTO.html)
(/usr/share/doc
/HOWTO/en-txt/XWindow-User-HOWTO.txt.gz).
FIXME: Adicionar informaes sobre a discusso na debian-security sobre como alterar os arquivos de configurao no servidor XFree 3.3.6 para fazer isto.
5.4.1
Se somente quiser ter um gerenciador de tela instalado para uso local (tendo um lindo login grfico) tenha certeza que tudo que estiver relacionado com o XDMCP (X Display Manager Control Protocol) est desativado. No XDM voc poder fazer isto atravs da linha em
/etc/X11/xdm/xdm-config:
DisplayManager.requestPort:
5.5
Imagine, voc chegando ao trabalho e a impressora jogando fora uma quantidade impressionante de papel porque algum esta fazendo um DoS em seu daemon de impresso. Desagradvel, no ?
87
Em qualquer arquitetura de impresso do unix, dever existir uma forma de enviar os dados
do cliente para o servidor de impresso. No tradicional lpr e lp, os comandos do cliente
copiam ou fazem um link simblico de dados no diretrio de spool (este o motivo porque
estes programas normalmente so SUID ou SGID).
Para evitar quaisquer anormalidade, voc dever manter o seu servidor de impresso especialmente seguro. Isto significa que precisa configurar seu servio de impresso de forma que s
permita conexes de um conjunto de mquinas confiveis. Para fazer isto, adicione os servidores que deseja permitir a impresso em seu arquivo /etc/hosts.lpd.
No entanto, at mesmo se fizer isto, o lpr aceitar conexes de entrada na porta 515 de qualquer interface. Voc dever considerar fazer um firewall das conexes de redes/hosts que no
tenham permisso de impresso (o daemon lpr no tem a possibilidade de aceitar conexes
em somente um determinado endereo IP).
O Lprng dever ser o preferido em cima do lpr pois ele pode ser configurado para fazer controle de acesso por IP. E voc poder especificar qual interface escutar por conexes (embora
algumas vezes parea um pouco estranho).
Se utilizar uma impressora em seu sistema, mas somente localmente, voc no desejar compartilhar este servio atravs de uma rede. Voc poder considerar o uso de outros sistemas de impresso, tal como o fornecido pelo pacote cups ou pelo PDQ (http://pdq.
sourceforge.net/) que baseado em permisses do usurio no dispositivo /dev/lp0.
No cups, os dados de impresso so transferidos ao servidores via protocolo http. Isto significa que o programa cliente no precisa de qualquer privilgio especial, mas requer que o
servidor escute em uma porta, em algum lugar.
No entanto, se quiser usar o cups, mas somente localmente, voc poder configura-lo para
escutar na interface loopback alterando o arquivo de configurao /etc/cups/cupsd.conf:
Listen 127.0.0.1:631
Existem muitas outras opes de segurana como permitir ou bloquear redes e mquinas neste
arquivo de configurao. No entanto, se voc no precisar delas, ser melhor que limite simplesmente a porta onde o programa espera por conexes. O Cups tambm serve documentaes atravs da porta HTTP. Se no quiser revelar informaes teis em potencial para invasores externos tambm adicione:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Locationi>
Este arquivo de configurao pode ser modificado para adicionar algumas outras caractersticas incluindo certificados SSL/TLS e criptografia. Os manuais esto disponveis em
http://localhost:631/ ou em cups.org.
88
5.6
5.6.1
Voc pode querer ter um daemon de mensagens locais assim ele poder repassar os e-mails
enviados localmente para outro sistema. Isto comum quando voc tem que administrar um
nmero de mquinas e no quer conectar a cada uma delas para ler as mensagens enviadas
localmente. Assim como todos os logs de cada sistema individual podem ser centralizados
usando um servidor de logs central, as mensagens podem ser enviadas para um servidor de
mensagens central.
Tal sistema somente-repasse dever ser configurado adequadamente para fazer isto. O daemon
poder, tambm, ser configurado para somente esperar por conexes no endereo de loopback.
FIXME: Isto dever ser atualizado para o exim4, que o MTA padro da sarge e distribuies
mais atuais (e espera por conexes somente em localhost na configurao padro mnima)
Para fazer isto em um sistema Debian 3.0 usando o pacote exim, voc ter que remover o
daemon smtp do inetd:
$ update-inetd --disable smtp
e configurar o daemon de mensagens para somente esperar por conexes na interface loopback. No exim (o MTA padro) voc poder fazer isto editando o arquivo de configurao
/etc/exim.conf e adicionando a seguinte linha:
local_interfaces = "127.0.0.1"
89
Reinicie ambos os daemons (inetd e exim) e voc ter o exim esperando por conexes somente
no soquete 127.0.0.1:25. Seja cauteloso e desative primeiro o inetd, caso contrrio, o exim no
iniciar pois o daemon do inetd j est esperando por conexes de entrada.
Para o postfix, edite o arquivo /etc/postfix/main.conf:
inet_interfaces = localhost
Se quiser somente mensagens locais, este mtodo melhor que utilizar o mtodo tcp wrappers
no daemon de mensagens ou adicionar regras de firewall para que ningum acesse-o. No
entanto, se precisar que ele escute em outras interfaces, voc dever considerar carrega-lo a
partir do inetd e adicionar um tcp wrapper, assim as conexes de entradas so verificadas
nos arquivos /etc/hosts.allow e /etc/hosts.deny. Tambm, voc dever estar atento
sobre acessos no autorizados sendo tentados sobre o seu daemon de mensagens, se configurar
adequadamente o log de mensagens do seu sistema para qualquer um dos mtodos acima.
Em qualquer caso, para rejeitar tentativas de repasse de mensagens a nvel SMTP, voc dever
alterar o arquivo /etc/exim/exim.conf para incluir:
receiver_verify = true
At mesmo se seu servidor de e-mails no repassar a mensagem, este tipo de configurao
necessrio para o teste de relay em http://www.abuse.net/relay.html para determinar
que seu servidor no capaz de repassar mensagens.
No entanto, se desejar uma configurao somente de leitura, voc poder considerar a alterao do daemon de mensagens para programas que podem somente ser configurados para
redirecionar as mensagens para servidores de mensagens remotas. O Debian atualmente oferece o pacote ssmtp e o nullmailer para este propsito. Em qualquer caso, voc dever
avaliar por si mesmo quaisquer dos agentes de transporte de mensagens 1 fornecido com o
Debian. Veja que programa atende melhor aos propsitos do sistema.
5.6.2
Se quiser oferecer acesso remoto s caixas de mensagens, existe um nmero de daemons POP3
e IMAP disponveis 2 . No entanto, se voc oferecer acesso a IMAP, note que ele um protocolo
de acesso a arquivos, ele pode se tornar equivalente a um acesso shell porque os usurios
podem ser capazes de obter qualquer arquivo atravs dele.
1
para obter uma lista de todos os daemons de mensagens disponveis no Debian, execute o comando:
90
Tente,
por
exemplo,
configurar
como
seu
caminho
para
a
inbox{servidor.com}/etc/passwd, se ele abrir o arquivo com sucesso seu daemon
IMAP no est corretamente configurado para prevenir este tipo de acesso.
Dos servidores de IMAP existentes no Debian, o servidor cyrus (do pacote cyrus-imapd)
contorna isto tendo todos os acessos sendo em um banco de dados mantido em uma parte
restrita do sistema de arquivos. Tambm o uw-imapd (ou instale o uw-imapd ou melhor, se
seus clientes IMAP o suportam, uw-imapd-ssl) poder ser configurado para fazer o chroot
do diretrio dos usurios de mensagens mas isto no ativado por padro. A documentao
fornecida oferece mais informaes sober como configura-lo.
Tambm, voc pode tentar executar um servidor IMAP que no precisa de usurios vlidos sendo criados no sistema local (que tambm oferece acesso a shell). Ambos os pacotes
courier-imap (para IMAP) e courier-pop teapop (para o POP3) e o cyrus-imapd (para
ambos POP3 e IMAP) fornecem servidores com mtodos de autenticao que no dependem
de contas locais de usurios. O cyrus pode usar qualquer mtodo de autenticao que possa
ser configurado atravs do PAM tal como o teapop pode usar bancos de dados (tal como o
postgresql e o mysql) para autenticao do usurio.
FIXME: Verifique: uw-imapd tambm precisa ser configurado com autenticao do usurio
atravs de PAM. . .
5.6.3
91
5.7
Existem diferentes mtodos que podem ser usados para deixar o daemon de servios de Domnio mais seguro, que so parecidos com os mostrados considerados quando tornamos qualquer
determinado servio mais seguro:
configurando o prprio daemon adequadamente assim ele no poder ser abusado de
fora (veja Configurao do Bind para evitar m utilizao on this page) Isto inclui limitar
requisies de clientes: transferncias de zonas e pesquisas recursivas.
limitar o acesso do daemon ao prprio servidor assim se ele for usado para um corrompimento, a falha no sistema ser limitada. Isto inclui executar o daemon como um usurio
no-privilegiado (veja Alterando o usurio do BIND on page 94) e fazer ele rodar dentro
um chroot (see Executando o servidor de nomes em uma jaula chroot on page 95)
5.7.1
Voc dever restringir algumas das informaes que so servidas pelo BIND para clientes externos, assim no podero ser usadas para obter informaes sobre sua empresa que no deseja
dar. Isto inclui adicionar as seguintes opes: allow-transfer, allow-query, allow-recursion e version. Voc pode ou limitar esta seo global (assim aplicando a todas as zonas que so servidas)
ou por zona. Esta informao est includa no pacote bind-doc, leia mais sobre isto em /usr
/share/doc/bind/html/index.html assim que o pacote for instalado.
Imagine que seu servidor (um servidor bsico contendo mltiplos endereos) est conectado
Internet e sua rede interna (seu endereo IP 192.168.1.2), voc no vai querer oferecer
qualquer servio para os computadores. Voc poder restringir o bind incluindo o seguinte no
/etc/bind/named.conf:
options {
allow-query { 192.168.1/24; } ;
allow-transfer { none; } ;
allow-recursion { 192.168.1/24; } ;
listen-on { 192.168.1.2; } ;
forward { only; } ;
forwarders { A.B.C.D; } ;
};
92
A opo listen-on faz o BIND ser executado somente na interface que tem o endereo interno,
mas, at mesmo se esta interface for a mesma que te conecta a internet (caso estiver usando
NAT, por exemplo), as requisies sero aceitas somente se estiverem vindo de suas mquinas internas. Se o sistema tiver mltiplas interfaces e a opo listen-on no estiver presente,
somente usurios internos podero fazer requisies, mas, como a porta est acessvel para
possveis invasores externos, eles podem tentar travar (ou tentar realizar ataques de estouro
de buffer) no servidor DNS. Voc poderia at faz-lo escutar somente em 127.0.0.1, se no estiver oferecendo o servio de DNS em qualquer outro sistema alm do seu.
O registro version.bind na classe chaos contm a verso do processo do bind atualmente em
execuo. Esta informao freqentemente usada por scaneadores automticos e individualmente por pessoas maliciosas que desejam determinar se o bind vulnervel a um ataque especfico. Oferecendo informaes falsas ou no fornecendo informaes ao registro version.bind,
diminui a probabilidade que o servidor seja atacado baseado na verso publicada. Para fornecer sua prpria verso, use a diretiva version da seguinte forma:
options { ... vrias opes aqui ...
version "No disponvel."; };
A alterao do registro version.bind no oferece proteo atualmente contra ataques, mas pode
ser considerado til para a segurana.
Um arquivo simples de configurao named.conf pode ser o seguinte:
acl internal {
127.0.0.1/32;
10.0.0.0/8;
aa.bb.cc.dd;
};
// localhost
// interna
// IP da eth0
acl friendly {
ee.ff.gg.hh;
aa.bb.cc.dd;
127.0.0.1/32;
10.0.0.0/8;
};
//
//
//
//
DNS escravo
IP da eth0
localhost
interna
options {
directory "/var/cache/bind";
allow-query { internal; };
allow-recursion { internal; };
allow-transfer { none; };
};
// A partir daqui, a zona mysite.bogus
// basicamente uma verso no modificada do padro do Debian
logging {
93
Por favor (novamente) verifique o Sistema de Tratamento de Falhas a respeito do bind, especificamente Bug #94760 (relacionado com ACLs em transferncia de zonas) (http://bugs.
debian.org/94760). Sinta-se livre para contribuir para relatar falhas se achar que podem
adicionar informaes teis.
5.7.2
94
Com relao a limitao de privilgios do BIND, voc dever estar ciente que se um usurio
no root executa o BIND, ento o BIND no detectar novas interfaces automaticamente, por
exemplo, se colocar uma placa PCMCIA no notebook. Verifique o arquivo README.Debian na
documentao do named veja o diretrio (/usr/share/doc/bind/README.Debian) para
mais informaes sobre este assunto. Ocorreram muitos problemas de segurana recentes relacionados com o BIND, assim a alterao do usurio mais til quando possvel. Ns detalharemos os passos para fazer isto, no entanto, se quiser fazer isto de uma forma automtica,
tente o script fornecido em Exemplo de script para alterar a instalao padro do Bind. on
page 199.
Para executar o BIND sob um usurio diferente, primeiro crie um usurio separado e um grupo
(no uma boa idia usar o nobody ou nogroup para cada servio que no estiver sendo executado como root). Neste exemplo, o usurio e grupo named sero usados. Voc poder fazer
isto da seguinte forma:
addgroup named
adduser --system --home /home/named --no-create-home --ingroup named \
--disabled-password --disabled-login named
Note que o usurio named ser bastante restringido. Se voc quiser, por alguma razo, ter uma
configurao menos restrita, utilize:
adduser --system --ingroup named named
Agora, edite o arquivo /etc/init.d/bind com seu editor favorito e altere a linha que comea com
start-stop-daemon --start
para3
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
Altere as permisses dos arquivo que so usados pelo Bind, incluindo /etc/bind
/rndc.key:
-rw-r-----
1 root
named
77 Jan
4 01:02 rndc.key
e onde o bind cria seu arquivo de pid, usando, por exemplo, /var/run/named ao invs de
/var/run:
3
Note que dependendo de sua verso do BIND voc pode no ter a opo -g, mais precisamente se estiver
usando a woody e instalando o bind9 (9.2.1-2.woody).
95
$ mkdir /var/run/named
$ chown named.named /var/run/named
$ vi /etc/named.conf
[ ... atualize o arquivo de configurao para sua nova localizao ...]
options { ...
pid-file "/var/run/named/named.pid";
};
[ ... ]
Tambm, para evitar a execuo de tudo como usurio root, altere a linha reload
comentando-a:
reload)
/usr/sbin/ndc reload
E altere para:
reload)
$0 stop
sleep 1
$0 start
Nota: Dependendo de sua verso do Debian, voc dever tambm alterar a linha restart.
Isto foi corrigido na verso do Bind do Debian 1:8.3.1-2.
Tudo que precisa fazer agora reiniciar o bind via /etc/init.d/bind restart, e ento procurar
em seu syslog pelas seguintes duas linhas, como estas:
Sep
Sep
Voil! Seu named agora no executado como root. Se desejar ler mais informaes sobre porque o BIND no pode ser executado por um usurio no-root em sistemas Debian,
verifique o sistema de tratamento de falhas, especificamente Bug #50013: bind should not
run as root (http://bugs.debian.org/50013) e Bug #132582: Default install is potentially insecure (http://bugs.debian.org/132582), Bug #53550 (http://bugs.debian.
org/53550), Bug #128120 (http://bugs.debian.org/52745), e Bug #128120 (http:
//bugs.debian.org/128129). Sinta-se livre para contribuir para os relatrios de falhas
se achar que pode adicionar informaes teis.
5.7.3
Para obter o mximo de segurana no BIND, agora construa uma jaula chroot (veja Parania
geral do chroot e suid on page 99) em torno do seu daemon. Existe um mtodo fcil de se
96
fazer isto: a opo -t (veja a named(8) pgina de manual ou a pgina 100 do Documentao
do Binds 9 (PDF) (http://www.nominum.com/content/documents/bind9arm.pdf)).
Isto instruir o Bind a fazer uma jaula de si mesmo em um diretrio especificado sem a necessidade de configurar uma jaula chroot e se preocupar com as bibliotecas dinmicas. Os nicos
arquivos que precisam estar na jaula so:
dev/null
etc/bind/
- dever ter o named.conf e todas as zonas do servidor
sbin/named-xfer - se fizer transferncias de nomes
var/run/named/ - dever ter a pid e o nome do servidor de cache (se tiver)
este diretrio precisa ter permisses de gravao para o
usurio named.
var/log/named
- se configurar o log para um arquivo, este precisa ter permis
de gravao para o usurio named
dev/log
- o syslogd dever estar escutando aqui caso o named estiver
configurado para realizar logs atravs dele.
Para seu daemon do Bind funcionar adequadamente, ele precisar de permisses nos arquivos
do named. Esta uma tarefa simples, pois os arquivos de configurao esto sempre localizados em /etc/named/. Tenha em mente que ele somente precisa de acesso de leitura aos
arquivos de zonas, a no ser que seja um DNS secundrio ou servidor de cache de nomes. Se
este seu caso, voc ter que dar permisses completas para as zonas necessrias (assim as
zonas transferidas do servidor principal funcionaro).
Adicionalmente, mais detalhes sobre o Bind e chroot pode ser encontrados no ChrootBIND-HOWTO (http://www.tldp.org/HOWTO/Chroot-BIND-HOWTO.html) (relacionado com o Bind 9) e Chroot-BIND8-HOWTO (http://www.tldp.org/HOWTO/
Chroot-BIND8-HOWTO.html) (relacionado com o Bind 8). Este mesmo documento
dever estar disponvel atravs da instalao do doc-linux-text (verso texto) ou
doc-linux-html (verso html). Outro documento til http://web.archive.org/
web/20011024064030/http://www.psionic.com/papers/dns/dns-linux.
Se estiver configurando uma jaula completa do chroot (i.e. no somente -t) para o Bind 8.2.3
no Debian (potato), tenha certeza de possuir os seguintes arquivos nela:
dev/log - o syslogd dever estar escutando aqui
dev/null
etc/bind/named.conf
etc/localtime
etc/group - com somente uma linha simples: "named:x:GID:"
etc/ld.so.cache - gerado com o ldconfig
lib/ld-2.1.3.so
lib/libc-2.1.3.so
lib/ld-linux.so.2 - link simblico para ld-2.1.3.so
lib/libc.so.6 - link simblico para libc-2.1.3.so
sbin/ldconfig - pode ser apagado aps configurar a jaula chroot
97
5.8
FIXME: Adicionar contedo: os mdulos fornecidos com a instalao padro do Apache (sob
/usr/lib/apache/X.X/mod_*) e mdulos que podem ser instalados separadamente pelos pacotes libapache-mod-XXX.
Voc poder limitar o acesso ao servidor Apache se voc somente deseja usar ele internamente
(para propsitos de testes, para acessar os arquivos do doc-central, etc..) e no deseja que
pessoas de fora o acessem. Para fazer isto, use as diretivas Listen ou BindAddress no /etc
/apache/http.conf.
Using Listen:
4
a no ser que utilize a opo instdir quando executar o dpkg mas ento a jaula chroot ser um pouco mais
complexa
98
Listen 127.0.0.1:80
Using BindAddress:
BindAddress 127.0.0.1
Ento reinicie o apache com /etc/init.d/apache restart e voc ver que ele somente
esperar por requisies na interface loopback.
Em qualquer caso, se no estiver usando todas as funcionalidades fornecidas pelo Apache,
voc poder querer dar uma olhada em outros servidores web fornecidos no Debian, como o
dhttpd.
A Documentao do Apache (http://httpd.apache.org/docs/misc/security_
tips.html) fornece informaes relacionadas com medidas de segurana a serem tomadas
no servidor web Apache (estes mesmos passos so oferecidos no Debian atravs do pacote
apache-doc).
Mais informaes sobre restries do Apache configurando uma jaula chroot so mostradas
em Ambiente chroot para Apache on page 221.
5.8.1
A instalao padro do Apache no Debian permite que usurios publiquem contedo sob o
diretrio $HOME/public_html. Este contedo pode ser pego remotamente usando uma URL
tal como: http://your_apache_server/~user.
Se no quiser permitir isto, voc dever alterar o arquivo de configurao /etc/apache
/http.conf comentando a linha:
LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
Mas se um mdulo foi includo estaticamente (voc poder checar isto executando apache
-l) voc dever utilizar a seguinte tcnica:
Userdir disabled
Nota: A palavra chave disabled est somente disponvel nas verses do Apache 1.3 e superior. Se estiver usando verses antigas do apache, voc dever alterar o arquivo de configurao e adicionar:
<Directory /home/*/public_html>
AllowOverride None
Order deny,allow
Deny from all
</Directory>
Um invasor ainda pode usar enumerao de usurio, pois a resposta do servidor ser um 403
Permisso negada e no um 404 No disponvel.
5.8.2
99
Os arquivos de log do Apache, desde a 1.3.22-1, tem como dono o usurio root e grupo adm
com permisses 640, estas permisses so alteradas aps o rotacionamento de logs. Um intruso
que acessou o sistema atravs do servidor web no ser capaz (sem escalao de privilgios)
de remover entradas antigas do log.
5.8.3
Os arquivos do Apache esto localizados sob /var/www. Apenas aps a instalao o arquivo
de configurao padro fornecer algumas informaes sobre o sistema (principalmente que
um sistema Debian executando o Apache). As pginas web padres tem como dono o usurio
root e grupo root por padro, enquanto o processo do Apache executado como o usurio
e grupo www-data. Isto torna difcil para invasores que comprometem o sistema atravs do
servidor web, desfigurarem o site. Voc dever, claro, substituir as pginas padres por suas
prprias (que fornecem informaes que no deseja mostrar para pessoas de fora).
5.9
Se desejar executar o servio finger, primeiro pergunte a voc mesmo porque o deseja. Se
precisar dele, voc ver que o Debian fornece vrios daemons de finger (sada do comando
apt-cache search fingerd):
cfingerd - Daemon de finger configurvel
efingerd - Outro daemon de finger para unix, capaz de ajustes finos em sua sada.
ffingerd - um daemon seguro do finger
fingerd - Servidor remoto de informaes do usurio.
xfingerd - BSD-like daemon de finger com suporte a qmail.
O ffingerd o daemon de finger recomendado se estiver usando-o em servios pblicos.
Em qualquer caso, voc encorajado, quando estiver configurando atravs do inetd, xinetd
ou tcpserver, a: limitar o nmero de processos que podem ser executados ao mesmo tempo,
limitando o acesso ao daemon de finger de um nmero determinado de mquinas (usando o
tcp wrappers) e escutando somente nas interfaces onde deve operar.
5.10
O chroot uma das mais poderosas possibilidades para restringir um daemon, ou um usurio ou outro servio. Apenas imagine uma jaula em torno de seu alvo, onde o alvo no pode
100
escapar dela (normalmente, mas existem vrias condies que permitam que um escape de tal
jaula). Se no confia em um usurio ou em um servio, voc poder criar um ambiente root
modificado para ele. Isto poder usar algum espao do disco para copiar todos os executveis
requeridos, assim como bibliotecas, na jaula. Mas ento, at mesmo se o usurio fizer algo
malicioso, o escopo do ano limitado a jaula.
Muitos servios executados como daemons podero se beneficiar deste tipo de tcnica. Os
daemons que voc instala no Debian no viro, no entanto, dentro de chroot 5 por padro.
Isto inclui: servidores de nomes (tal como o bind), servidores web (tal como o apache), servidores de mensagens (tal como o sendmail e servidores ftp (tal como o wu-ftpd). Provavelmente basta dizer que a complexibilidade do BIND a razo de que ele foi exposto a vrios
ataques nos ltimos anos (see Tornando o BIND mais seguro on page 91).
No entanto, o Debian no oferece muitos programas que podem ajuda-lo a configurar um
ambiente chroot. Veja Criando automaticamente ambientes chroots on this page.
De qualquer maneira, se executar qualquer servio em seu sistema, considere torn-lo mais
seguro o possvel. Isto inclui: revogar os privilgios de root, execut-lo em um ambiente seguro
(tal como uma jaula chroot) ou substitu-lo por um equivalente mais seguro.
No entanto, j esteja avisado que uma jaula chroot pode ser quebrada se o usurio dentro
dela for o superusurio. Assim voc dever estar certo que o servio est sendo executado
por um usurio no privilegiado. Limitando seu ambiente, estar limitando os arquivos lidos/executveis que o servio poder acessar, assim, limitando as possibilidade de uma escalao privilegiada usar as vulnerabilidade de segurana locais do sistema. At mesmo nesta
situao, voc no poder ter certeza completa de que l no existe mtodos para um invasor inteligente quebrar a jaula. Usando somente programas de servidor que tem a reputao
de serem seguidos uma boa medida adicional. At mesmo minsculos furos como arquivos abertos podem serem usados por um invasor com conhecimentos para quebrar o sistema.
Aps tudo isto, o chroot no foi designado como uma ferramenta de segurana, mas como
uma ferramenta de testes.
5.10.1
101
5.11
Voc dever tentar evitar qualquer servio de rede que envia e receba senhas em texto puro
atravs da rede, como o FTP/Telnet/NIS/RPC. O autor recomenda usar o ssh ao invs de
telnet e ftp para qualquer um.
Tenha em mente que migrando do telnet para o ssh, mas continuando a usar outros protocolos
de texto puro no aumenta sua segurana de qualquer modo! O melhor remover o ftp,
telnet, pop, imap, http e substitu-los por seus respectivos servios criptografados. Voc dever
considerar mover estes para suas verses SSL, ftp-ssl, telnet-ssl, pop-ssl, https . . .
A maioria dos listados acima se aplicam para cada sistema Unix (voc os encontrar se ler qualquer documento relacionado a tornar um sistema Linux (e outros tipos e Unix) mais seguro.
5.12
Desativando o NIS
Voc no dever usar o NIS, o Servio de Informaes de Rede, se possvel, pois ele permite o
compartilhamento de senha. Isto pode ser altamente inseguro se sua configurao for corrompida.
Se precisar de compartilhamento de senhas entre mquinas, voc dever considerar a adoo
de outras alternativas. Por exemplo, a configurao de um servidor LDAP e o PAM para contactar o servidor LDAP para autenticao dos usurios. Voc poder encontrar uma configurao detalhada na LDAP-HOWTO (http://www.tldp.org/HOWTO/LDAP-HOWTO.html)
(/usr/share/doc/HOWTO/en-txt/LDAP-HOWTO.txt.gz).
Mais detalhes sobre a segurana em NIS podem ser encontradas em NIS-HOWTO
(http://www.tldp.org/HOWTO/NIS-HOWTO.html)
(/usr/share/doc/HOWTO
/en-txt/NIS-HOWTO.txt.gz).
FIXME (jfs): Adicionar detalhes de como configurar isto no Debian
5.13
102
Servios baseados em RPC tem tido um mal histrico de falhas de segurana, no entanto, o
portmapper por si no (mas ainda fornece informaes teis ao atacante remoto). Note que
alguns dos ataques DDoS (negao de servio distribudos) usam exploits rpc para entrar no
sistema e atuar como o assim chamado agente/manipulador.
Voc somente precisar do RPC se estiver usando um servio baseado em RPC. Os servios
mais comuns baseados em RPC so o NFS (Network File System) e NIS (Network Information
System). Veja a seo anterior para mais informaes sobre o NIS. O Monitor de alteraes de
Arquivos (FAM) fornecido pelo pacote fam tambm um servio RPC, e assim depende do
pacote portmap.
Os servios NFS so muito importante em algumas redes. Se este for o caso para voc, ento
ter que encontrar um balanceamento de segurana e usabilidade para sua rede. (Voc poder ler mais sobre a segurana em NFS no NFS-HOWTO (http://www.tldp.org/HOWTO/
NFS-HOWTO.html) (/usr/share/doc/HOWTO/en-txt/NFS-HOWTO.txt.gz).)
5.13.1
A desativao do portmap bem simples. Existem diversos diferentes mtodos. O mais simples no sistema Debian 3.0 e mais novos desistalar o pacote portmap. Se estiver executando
uma verso antiga do Debian, ter que desativar o servio como visto em Desabilitando daemons de servio on page 33, porque o programa parte do pacote net-base (que no pode
ser removido sem quebrar o sistema).
Isto de fato remove cada link relacionado ao portmap em /etc/rc${runlevel}.d/,
que algo que pode fazer manualmente. Outra possibilidade executar um chmod 644
/etc/init.d/portmap, mas isto mostrar uma mensagem de erro durante a inicializao. Voc tambm poder comentar a parte start-stop-daemon no script /etc/init.d
/portmap.
5.13.2
Infelizmente em alguns casos a remoo dos servios RPC no uma opo. Alguns servios
de desktop locais (notavelmente o fam da SGI) so baseados em RPC e assim precisam de
um portmapper local. Isto significa que sob algumas situaes, os usurios que estiverem
instalando um ambiente de desktop (como o GNOME) instalaro tambm o portmapper.
Existem diversas formas de limitar o acesso ao portmapper e aos servios de RPC:
Bloqueando o acesso as portas usadas por estes servios com um firewall local (veja Adicionando capacidades de firewall on the facing page).
Bloquear o acesso a estes servios usando tcp wrappers, pois o portmapper (e alguns servios RPC) so compilados com a libwrap (veja Usando os tcpwrappers on page 59.
Isto significa que voc poder bloquear o acesso a eles atravs do hosts.allow e
hosts.deny na configurao do tcp wrappers.
103
Desde a verso 5-5, o pacote portmap pode ser configurado para somente realizar conexes na interface loopback. Para fazer isto, modifique o arquivo /etc/default
/portmap, e descomente a seguinte linha: #OPTIONS=-i 127.0.0.1 e reinicie o
portmapper. Isto suficiente para permitir que servios RPC locais funcionem enquanto
ao mesmo tempo evite que sistemas remotos os acessem (no entanto, veja Desativando
assuntos relacionados a weak-end de mquinas on page 75.
5.14
5.14.1
Voc poder usar regras de firewall como uma forma de restringir o acesso a seu sistema local
e, at mesmo, limitar comunicaes feitas atravs dele. As regras de firewall tambm podem
ser usadas para proteger processos que podem no estar corretamente configurados, no fornecendo servios para algumas redes, endereos IP, etc. . .
No entanto, este passo mostrado por ltimo neste manual basicamente porque muito melhor no depender solenemente das capacidades de firewall para proteger um dado sistema.
A segurana em um sistema feita atravs de camadas, o firewall deve ser a ltima a ser adicionada, uma vez que todos os servios foram ajustados para serem mais seguros. Voc pode
facilmente imaginar uma configurao em que o administrador descuidadamente remove as
regras de firewall por alguma razo (problemas com a configurao, descuido, erro humano
. . . ), este sistema pode estar aberto para um ataque se no existir outro reforo no sistema para
protege-lo.
Por outro lado, tendo regras de firewall no sistema local tambm evita que coisas ruins aconteam. At mesmo se os servios fornecidos esto configurados de forma segura, um firewall
pode proteger de m configuraes ou de servios instalados recentemente que ainda no foram configurados adequadamente. Tambm, uma configurao forte evitar que cavalos de
tria chamem a origem de funcionarem a no ser que o cdigo do firewall seja removido. Note
que um intruso no precisa de acesso de superusurio para instalar um cavalo de tria localmente que pode ser controlado remotamente (pois a escuta a porta permitido caso no sejam
portas privilegiadas e as capacidades no foram removidas).
Assim, uma configurao apropriada de firewall aquela com a poltica padro deny, que :
104
conexes de entrada so permitidas somente para servios locais por mquinas permitidas.
conexes de sada somente so permitidas para servios usados pelo seu sistema (DNS,
web browsing, pop, email. . . .) 6
a regra forward bloqueia tudo (a no ser que esteja protegendo outros sistemas, veja
abaixo).
todas as outras conexes de entrada ou sada so negadas.
5.14.2
Um firewall tambm pode ser instalado no Debian para proteger, com regras de filtragem, o
acesso a sistemas atravs dela, limitando sua exposio na Internet. O firewall pode ser configurado para evitar que sistemas de fora da rede local acesse servios (portas) que no so
pblicas. Por exemplo, em um servidor de mensagens, somente a porta 25 (onde o servio de
e-mail foi definido) precisa ser acessada de fora. Um firewall pode ser configurado para, at
mesmo se existem outros servios disponibilizados publicamente, descartar qualquer pacote
(isto conhecido como filtragem) direcionado a mquina.
Voc pode at mesmo configurar a mquina Debian GNU/Linux como uma firewall bridge,
i.e. um firewall de filtragem completamente transparente para a rede que deixa de lado um
endereo IP e assim no pode ser atacada diretamente. Dependendo do kernel que tiver instalado, voc poder precisar fazer a instalao do patch de bridge no firewall e ento ir para a
seo 802.1d Ethernet Bridging quando estiver configurando o kernel e uma nova opo netfilter
( firewalling ) support. Veja Configurando uma ponte firewall on page 195 para mais detalhes
sobre como fazer isto em um sistema Debian GNU/Linux).
5.14.3
Configurando o firewall
claro que a configurao do firewall sempre dependente de sistema e rede. Um administrador dever conhecer de antemo qual a estrutura da rede e os sistemas que deseja proteger,
os servios que precisam ser acessados e se ou no outras consideraes de rede (como NAT
ou roteamento) devem ser levadas em conta. Seja cuidadoso quando configurar seu firewall,
como Laurence J. Lane diz no pacote iptables:
As ferramentas podem ser facilmente mal utilizadas, causando uma enorme quantidade de peso na conscincia e cortando o acesso a um sistema. No terrivelmente incomum para um administrador de
sistemas remotos travar si prprio fora de um sistema centenas de milhares de milhas de distncia.
tambm possvel que algum deixe ele prprio fora de um computador em que o teclado est sob seus
dedos. Por favor, use com a devida precauo.
6
De forma diferente de firewalls pessoais em outros sistemas operacionais, o Debian GNU/Linux (ainda) no
fornece uma interface de gerao de firewall que possa fazer regras de limitao por processo ou usurio. No
entanto, o cdigo do iptables pode fazer isto (veja o mdulo owner na pgina de manual iptables(8))
105
106
107
108
109
Captulo 6
6.1
Harden
O pacote harden tenta tornar a instalao e administrao fcil para mquinas que precisam
de boa segurana. Este pacote deve ser usado por pessoa que desejam uma ajuda rpida para
melhorar a segurana do sistema. Para fazer isto, ele conflita com pacotes com falhas conhecidas, incluindo (mas no limitado a): falhas conhecidas de segurana (como estouro de buffer),
uso de senhas em texto plano, esquecimento de controle de acesso, etc. Ele automaticamente
instala algumas ferramentas que aumentam a segurana de alguma forma: ferramentas de deteco de intruso, ferramentas de anlise de segurana, etc. O Harden instala os seguintes
pacotes virtuais (por exemplo pacotes sem contedo, que apenas dependem de outros):
110
6.2
Bastille Linux
111
Responder questes passo a passo sobre a segurana requerida pelo seu sistema (usando
InteractiveBastille(8))
Usar a configurao padro de segurana (entre trs: Fraca, Moderada, e Paranica) em
um determinado sistema (servidor e estao de trabalho) e deixar o Bastille decidir que
poltica de segurana que ser implementada (usando BastilleChooser(8))
Pegar um arquivo de configurao pr-definido (deve ser fornecido pelo Bastille ou
feito pelo administrador) e implementar uma poltica de segurana determinada (usando
AutomatedBastille(8))
112
113
Captulo 7
O Debian tem um Security Team (Time de Segurana), composto por cinco membros e duas
secretrias que manipulam a segurana na distribuio stable (estvel). Manipular a segurana
significa que eles acompanham as vulnerabilidades que aparecem nos software (vendo foruns
como bugtraq o vuln-dev) e determinam se a distribuio stable afetada por eles.
O Debian Segurity Team tambm o contato para problemas que so coordenados pelos desenvolvedores ou organizaes como CERT (http://www.cert.org) que podem afetar muitos
vendedores. Isto , quando os problemas no so especficos do Debian. Existem dois contatos
com o Security Team:
team@security.debian.org (mailto:team@security.debian.org) o qual s lido
pelos membros do security team .
security@debian.org (mailto:security@debian.org) o qual lido por todos os desenvolvedores Debian (incluindo o security team). Emails enviados para esta lista no
so publicados na internet (esta no uma lista de email pblica).
Informaes sensveis devem ser enviadas para o primeiro email e, em alguns casos, deve ser
encriptada com a Debian Security Contact key (key ID 363CCD95).
Quando um provvel problema for recebido pelo Security Team, ele investigar se a distribuio stable foi afetada e, caso positivo, uma correo ser feita no cdigo fonte base. Esta
correo algumas vezes incluir algum patch (que normalmente mais recente que a verso
distribuda pelo Debian). Aps o teste da correo, novos pacotes so preparados e publicados em security.debian.org e podem ser baixados com o apt (veja Executar uma atualizao de segurana on page 40). Ao mesmo tempo um Debian Security Advisory (DSA)
publicado no web site e enviado para a listas de email incluindo debian-security-announce
(lists.debian.org/debian-security-announce) e bugtraq.
Outras perguntas frequentes do Debian Security Team podems er encontradas em Questes
relacionadas ao time de segurana da Debian on page 176.
7.2
114
7.2.1
115
7.2.2
Compatibilidade CVE
116
Usurios que querem procurar por um nome CVE em particular podem usar o sistema de busca disponvel em debian.org para recuperar avisos disponveis (em ingls e traduzidos para outros idiomas).
Uma busca pode ser feita para um nome
especfico (como aviso CAN-2002-0001 (http://search.debian.org/?q=advisory+
%22CAN-2002-0001%22ps=50o=1m=all)) ou para nomes parciais (como todos os avisos
de 2002 para CAN-2002 (http://search.debian.org/?q=advisory+%22CAN-2002%
22ps=50o=1m=all)). Observe que voc precisa entrar com a palavra advisory junto com
o nome CVE para recuperar apenas avisos de segurana.
Em alguns casos voc pode nO encontrar um CVE em avisos publicados porque:
No Debian os produtos no so afetados pela vulnerabilidades.
Ainda no existe uma viso abordando a vulnerabilidade (ele pode ter sido informado
para a security bug (http://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=
security) mas uma correo ainda no ter sido testada a atualizada)
Um aviso foi publicado antes que um CVE fosse assinado para a vulnerabilidade em
questo (procure por uma atualizao no web site)
7.3
Uma vez que o Debian normalmente suportado em um grande nmero de arquiteturas, administradores algumas ficam admirados se uma dada arquitetura levar mais tempo para receber atualizaes de segurana. De fato, exceto em raras circunstncias, atualizaes esto
disponveis para todas as arquiteturas ao mesmo tempo.
Enquanto antigamente a tarefa de construir atualizaes de segurana era feita a mo, hoje
no mais (como Anthony Towns descreve em a mail (http://lists.debian.org/
debian-devel-announce/2002/debian-devel-announce-200206/msg00002.
html), enviado para a lista debian-devel-announce em 6 de junho de 2002.)
Pacotes atualizados pelo time de segurana (para security.debian.org:/org/
security.debian.org/queue/unchecked ou ftp://security.debian.org/pub/
SecurityUploadQueue) tem suas assinaturas checada com um patch adequado dentro de
quinze minutos, uma vez isto feito eles so adicionados a lista de auto construtores. Ento, os
pacotes podem ser disponibilizados para todas as arquiteturas num tempo de trinta minutos a
uma hora do momento em que foram atualizados. Porm, atualizaes de segurana so um
pouco diferentes da atualizao normal envidada pelos mantenedores de pacotes, uma vez
que, em alguns casos, antes de ser publicadas, elas precisam esperar at serem testadas, um
aviso ser escrito ou, ainda, precisam esperar uma semana ou mais para evitar publicao da
falhar at que todos os vendedores tenham chance de corrig-la.
Assim, a atualizao de segurana trabalha da seguinte maneira (chamada AcceptedAutobuilding):
Algum encontra um problema de segurana.
117
7.3.1
118
119
Construindo um pacote
A mais importante guideline quando fazendo um novo pacote que corrige um problema de
segurana mazer o mnimo de alteraes necessrio. As pessoas sabem exatamente o comportamento de um lanamento, assim qualquer alterao feita pode quebrar o sistema de algum. Isto especialmente verdade para bibliotecas: o desenvolvedor deve estar certo de
nunca alterar a API ou a ABI, mesmo que seja uma pequena mudana.
Isto significa que mudar para uma nova verso no uma boa soluo, em vez disto s as
alteraes relevantes devem ser feitas. Geralmente os mantenedores esto dispostos a ajudar
que precisa, se no, o time de segurana da Debian pode.
Em alguns casos no possvel fazer o backport de uma correo de segurana, por exemplo
quando uma grande quantidade do cdigo fonte precisa ser modificado ou reescrito. Se isto
acontece pode ser necessrio mover para uma nova verso, mas isto deve sempre ser coordenado com o time de segurana.
Relacionado a isto existe outro importante aspecto: desenvolvedores devem sempre testar suas
alteraes. Se existe uma falha que permita explorao, o desenvolvedor deve testar e verificar
se ela aconteceu em um pacote no corrigido ou em um pacote corrigido. O desenvolvedor
deve tentar o uso normal tambm, algumas vezes uma correo de segurana pode quebrar o
uso normal sutilmente.
Finalmente algumas coisas que os desenvolvedores devem ter em mente:
Esteja certo que voc assinalou a distribuio correta em seu debian/changelog. Para a
distrituio estvel (stable) voc deve assinalar como stable-security e para a distribuio
em teste, testing-security. No assinale <codename>-proposed-updates.
Verifique o nmero da verso. Ele deve ser maior que o pacote atual, mas menor que
verses do pacote em distribuies anteriores. Para a distribuio testing isto sigfinifica
que deve haver uma verso maior na distribuio unstable. Se ainda no existe (testing
e unstable tem a mesma verso por exemplo) atualize a nova verso para a unstable
primeiro.
No faa atualizaes source-only se seu pacote tem alguns pacotes binary-all. A infraestrutura de construo no construir aqueles.
Quando compilar um pacote fao isto em um sistema limpo, o qual tem s tem instalados
pacotes da distribuio para a qual voc est construindo. Se voc no tem um sistema
assim pode tentar a debian.org machine (veja http://db.debian.org/machines.cgi) ou
configurar um chroot (os pacotes pbuilder e debootstrap podem ajudar neste caso).
Realizando o uplaod com as correes de segurana
Aps o desenvolvedor ter criado e testado um novo pacote ele precisa realizar o upload pois
assim a correa ser instalada nos archives. Por segurana os arquivos para upload devem
ser colocados em ftp://security.debian.org/pub/SecurityUploadQueue/ .
120
Uma vez que o upload foi aceito o pacote ser automaticamente reconstrudo para todas as
arquiteturas e armazenado para verifirao pelo time de segurana.
Uploads aguardando por aceitao e verificao s so acessveis pelo time de segurana. Isto
necessrio uma vez que podem ser correes para problemas de segurana que ainda no
foram descobertos.
SE um mebro do time de segurana aceita um pacote ele ser instalado em security.debian.org
assim como o apropriado <codename>-proposed-updates em ftp-master ou non-US archive.
O aviso de segurana
Os avisos de segurana so escritos e postados pelo time de segurana. Porm, eles certamente
no pensam se um mantenedor pode fornecer o texto para eles (pelo menos uma parte). As
informaes que devem fazer parte de um aviso so descritas em Debian Security Advisories
on page 114.
7.4
Esta seo tambm pode ser chamada como atualizar seu sistema Debian GNU/Linux em
segurana e meree sua prpria seo basicamente porque uma parte importante da infraestrutura de segurana. Assinatura de pacote uma coisa importante porque evita alteraes de
pacotes distribudos em mirros. Atualizao automatica de software um recurso importante
mas tambm importante remover ameaas de segurana que poderiam ajudar a distribuir
cavalos de tria e comprometer os sistemas durante as atualizaes. 3 .
Atualmente (maio de 2005) o Debian no fornece assinatura de pacotes para as distribuies
lanadas woody ou sarge (3.0 ou 3.1). Elas no possuem este recurso. Existe uma soluo para
isto que ser fornecida na prxima distribuio (codename etch). Este novo recurso estar
disponvel no apt 0.6 (atualmente disponvel numa distribuio experimental, veja Pacotes experimentais apt on page 128).
Isto melhor descrito em Strong Distribution HOWTO (http://www.cryptnet.net/fdp/
crypto/strong_distro.html) por V. Alex Brennen.
7.4.1
Alguns sistemas operacionais j tiveram problemas com atualizaes automticas como Mac OS X Software
Update vulnerabity (http://www.cunap.com/~hardingr/projects/osx/exploit.html). FIXME: probably the Internet Explorer vulnerability handling certificate chains has an impact on security updates on Microsoft
Windows.
121
7.4.2
Caso voc queira adicionar os novos recursos de checagem de segurana e no queira rodar a
verso experimental do apt (embora ns realmente apreciemos o teste dele) voc pode usar o
script abaixo, fornecido por Anthony Towns. Este script pode automaticamente fazer algumas
novas checagens de segurana para permitir ao usurio certificar-se que o software que est
baixando corresponde aquele distribudo pelo Debian. Isto para desenvolvedores Debian
usarem em sistemas sem a funcionalidade de uploading dos sistemas tradicionais, ou mirrors
que tem quase tudo mas no como o Debian, ou mirrors que fornecem dados da verso unstable sem conhecimento dos problemas de segurana.
Este cdigo, renomeado como apt-check-sigs, deve ser usado da seguinte maneira:
# apt-get update
# apt-check-sigs
(...resultados...)
# apt-get dist-upgrade
Primeiro voc precisa:
122
rm -rf /tmp/apt-release-check
mkdir /tmp/apt-release-check || exit 1
cd /tmp/apt-release-check
>OK
>MISSING
>NOCHECK
>BAD
arch=dpkg --print-installation-architecture
am_root () {
[ id -u -eq 0 ]
123
get_md5sumsize () {
cat "$1" | awk /^MD5Sum:/,/^SHA1:/ |
MYARG="$2" perl -ne @f = split /\s+/; if ($f[3] eq $ENV{"MYARG"}) {
print "$f[1] $f[2]\n"; exit(0); }
}
checkit () {
local FILE="$1"
local LOOKUP="$2"
Y="get_md5sumsize Release "$LOOKUP""
Y="echo "$Y" | sed s/^ *//;s/ */ /g"
if [ ! -e "/var/lib/apt/lists/$FILE" ]; then
if [ "$Y" = "" ]; then
# No file, but not needed anyway
echo "OK"
return
fi
echo "$FILE" >>MISSING
echo "MISSING $Y"
return
fi
if [ "$Y" = "" ]; then
echo "$FILE" >>NOCHECK
echo "NOCHECK"
return
fi
X="md5sum < /var/lib/apt/lists/$FILE | cut -d\ -f1 wc -c < /var/li
/apt/lists/$FILE"
X="echo "$X" | sed s/^ *//;s/ */ /g"
if [ "$X" != "$Y" ]; then
echo "$FILE" >>BAD
echo "BAD"
return
fi
echo "$FILE" >>OK
echo "OK"
}
echo
echo "Checking sources in /etc/apt/sources.list:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo
124
(echo "You should take care to ensure that the distributions youre downloadin
"
echo "are the ones you think you are downloading, and that they are as up to"
echo "date as you would expect (testing and unstable should be no more than"
echo "two or three days out of date, stable-updates no more than a few weeks"
echo "or a month)."
) | fmt
echo
cat /etc/apt/sources.list |
sed s/^ *// | grep ^[^#] |
while read ty url dist comps; do
if [ "${url%%:*}" = "http" -o "${url%%:*}" = "ftp" ]; then
baseurl="${url#*://}"
else
continue
fi
echo "Source: ${ty} ${url} ${dist} ${comps}"
rm -f Release Release.gpg
lynx -reload -dump "${url}/dists/${dist}/Release" >/dev/null 2>&1
wget -q -O Release "${url}/dists/${dist}/Release"
if ! grep -q ^ Release; then
echo " * NO TOP-LEVEL Release FILE"
>Release
else
origline=sed -n s/^Origin: *//p Release | head -1
lablline=sed -n s/^Label: *//p Release | head -1
suitline=sed -n s/^Suite: *//p Release | head -1
codeline=sed -n s/^Codename: *//p Release | head -1
dateline=grep "^Date:" Release | head -1
dscrline=grep "^Description:" Release | head -1
echo " o Origin: $origline/$lablline"
echo " o Suite: $suitline/$codeline"
echo " o $dateline"
echo " o $dscrline"
125
fi
okaycomps=""
for comp in $comps; do
if [ "$ty" = "deb" ]; then
X=$(checkit "echo "${baseurl}/dists/${dist}/${comp}/b
Y=$(checkit "echo "${baseurl}/dists/${dist}/${comp}/b
if [ "$X $Y" = "OK OK" ]; then
okaycomps="$okaycomps $comp"
else
echo " * PROBLEMS WITH $comp ($X, $Y)"
fi
elif [ "$ty" = "deb-src" ]; then
X=$(checkit "echo "${baseurl}/dists/${dist}/${comp}/s
Y=$(checkit "echo "${baseurl}/dists/${dist}/${comp}/s
if [ "$X $Y" = "OK OK" ]; then
okaycomps="$okaycomps $comp"
else
echo " * PROBLEMS WITH component $comp ($X, $
fi
fi
done
126
o Okay:$okaycomps"
done
echo "Results"
echo "~~~~~~~"
echo
allokay=true
cd /tmp/apt-release-check
diff <(cat BAD MISSING NOCHECK OK | sort) <(cd /var/lib/apt/lists && find . -t
cd /tmp/apt-release-check
if grep -q ^ UNVALIDATED; then
allokay=false
(echo "The following files in /var/lib/apt/lists have not been validated."
echo "This could turn out to be a harmless indication that this script"
echo "is buggy or out of date, or it could let trojaned packages get onto"
echo "your system."
) | fmt
echo
sed s/^/
/ < UNVALIDATED
echo
fi
127
128
7.4.3
The additional scheme of signing each and every packages allows packages to be checked
when they are no longer referenced by an existing Packages file, and also third-party packages
where no Packages ever existed for them can be also used in Debian but will not be default
scheme.
Este esquema de assinatura pode ser implementado usando debsig-verify e debsigs. Estes dois pacotes podem assinar e verificar assinaturas embutidas em pacotes .deb. Debian j
tem a capacidade de fazer sito, mas a implementao de policiamento e ferramentas no ser
iniciada at as releases posteriores ao woody.
As ltimas verses do dpkg (a partir de 1.9.21) incorporam um patch (http://lists.
debian.org/debian-dpkg/2001/debian-dpkg-200103/msg00024.html) que fornece esta funcionalidade to logo debsig-verify seja instalado.
NOTA: Atualmente /etc/dpkg/dpkg.cfg trabalha com no-debsig como padro.
NOTA 2: Signatures from developers are currently stripped when they enter off the package
archive since the currently preferred method is release checks as described previously.
7.4.4
O release do apt 0.6 inclui apt-secure que uma ferramenta que permitir a um administrador
de sistema testar a integridade dos pacotes baixados atravs do esquema acima. Esta release inclui a ferramenta apt-key para adicionar novas chaves ao chaveiro do apt, o qual por
padro inclui apenas o arquivo de assinatura de chaves atual do Debian.
Se quer testar este recurso voc precisa adicionar a distribuio experimental ao seu
sources.list e rodar
# apt-get -t experimental install apt
Estas alteraes so baseadas no patch para apt (disponvel em Bug #203741 (http://bugs.
debian.org/cgi-bin/bugreport.cgi?bug=203741)) o qual fornece esta implementao.
129
Este recurso ainda est em desenvolvimento, se voc acredita que pode encontrar bugs nele
por favor tenha certeza que est usando a ltima verso e, se estiver rodando a ltima verso,
envie o bug para o pacote apt package usando a tag experimental.
Observe que, usar esta verso experimental do apt no exige nada mais de sua parte a menos
que voc no use sources Debian, neste caso um passo extra de confirmao ser requerido
pelo apt-get. Isto evitado fornecendo Release e Release.gpg em non-Debian sources. O arquivo Release pode ser gerado com apt-ftparchive (disponvel em apt-utils 0.5.0 e posteriores), o Release.gpg apenas uma assinatura destacada. Para gerar ambos siga este simples
procedimento:
$ rm -f dists/unstable/Release
$ apt-ftparchive release dists/unstable > dists/unstable/Release
$ gpg --sign -ba -o dists/unstable/Release.gpg dists/unstable/Release
130
131
Captulo 8
8.1
As ferramentas fornecidas pelo Debian para realizar verificao remota de vulnerabilidade so:
1
nessus
raccess
whisker
nikto (substituto de whisker)
bass (non-free)
satan (non-free)
1
132
A ferramenta mais completa e atualizada , de longe, o nessus que composta por um cliente
(nessus) usado com uma GUI e um servidor (nessusd) que inicia os ataques programados.
Nessus inclui verificao de vulnerabilidades remotas para a grande maioria de sistemas incluindo dispositivos de rede, servidores ftp e www, etc. Os ltimos plugins de segurana tem
a capacidade de analisar um stio Web e tentar descobrir as pginas interativas disponveis
que podem ser atacadas. Existem tambm clientes Java e Win32 (no incluidas no Debian) que
podem ser usados para acessar o servidor de gerenciamento.
Note que se voc est usando woody, os pacotes do Nessus esto realmente desatualizados (veja bug #183524 (http://bugs.debian.org/183524)). No difcil portar os pacotes disponveis no unstable para woody, mas se voc encontrar dificuldades, pode pensar em usar os pacotes portados fornecidos por um dos co-mantenedores e disponveis em
http://people.debian.org/~jfs/nessus/ (essas verses podem no estar atualizadas
como as verses disponveis no unstable).
Whisker um varredor de verificao de vulnerabilidades Web, que inclui tticas anti-IDS (a
maioria no so mais anti-IDS). um dos melhores varreadores baseados em CGI disponveis,
sendo capaz de detectar servidores WWW e iniciar um dado conjunto de ataques contra ele. O
banco de dados usado para a varredura pode ser facilmente modificado para fornecer novas
informaes.
Bass (Bulk Auditing Security Scanner - BULK Varreador de auditoria de segurana) e SATAN
(Security Auditing Tool for Analyzing Networks - Ferramenta de auditoria de segurana para
anlise de redes) devem ser na opinio da maioria das pessoas, mais como programas de provas de conceitos do que como ferramentas para serem usadas em auditorias. Ambas so
bastantes antigas e no so mais atualizadas. Contudo, SATAN foi a primeira ferramenta para
fornecer avaliao das vulnerabilidades de maneira simples (atravs de uma GUI) e Bass
ainda uma ferramenta de avaliao de alta performace.
8.2
Debian fornece algumas ferramentas usadas para a varredura remota de hosts (mas no para
verificao de vulnerabilidades). Estas ferramentas so, em alguns casos, usadas pelos verificadores de vulnerabilidades como o primeiro tipo de ataque executado contra os hosts
remotos na tentativa de determinar os servios disponveis. Atualmente Debian fornece os
seguintes programas:
nmap
xprobe
queso
knocker
isic
icmpush
133
8.3
Auditoria Interna
Atualmente, somente a ferramenta tiger utilizada no Debian pode ser usada para executar
auditorias internas de hosts (tambm chamadas de caixa branca) de fato para determinar se
o sistema de arquivos est corretamente configurado, que processos esto rodando no hosts,
etc..
8.4
Debian fornce trs pacotes que podem ser utilizados para auditar cdigos fontes em C/C++ e
encontrar erros de programao que podem conduzir para potenciais falhas de segurana:
flawfinder
rats
splint
8.5
134
Uma rede privada virtual (VPN - Virtual Private Network) um grupo de dois ou mais sistemas computacionais, tipicamente conectados a uma rede privada com acesso pblico de rede
limitado, que se comunicam seguramente atravs de uma rede pblica. VPNs podem conectar
um simples computador a uma rede privada (cliente-servidor), ou uma LAN remota a uma
rede privada (servidor-servidor). VPNs, muitas vezes, incluem o uso de criptografia, autenticao forte de usurios ou hosts remotos, e mtodos para esconder a topologia da rede privada.
Debian fornece a maioria dos pacotes para configurar uma rede privada virtual criptografada:
vtun
tunnelv
cipe
vpnd
tinc
secvpn
pptpd
freeswan, que est obsoleto e substituido por
openswan (http://www.openswan.org/)
FIXME: Atualizar as informaes aqui j que foram escritas com o FreeSWAN em mente. Verificar Bug #237764 e a mensagem: <200412101215.04040.rmayr@debian.org>.
O pacote OpenSWAN provavelmente a melhor escolha, desde que ele promete interoperar
com quase tudo que usa o protocolo IP seguro, IPSec (RFC 2411). Entretanto, os outros pacotes
listados acima podem tambm ajud-lo a ter um tnel seguro rapidamente. O protocolo de
tunelamento ponto a ponto (PPTP) um protocolo para VPN proprietrio da Microsoft.
suportado no Linux, mas conhecido por ter srios problemas de segurana.
Para mais informaes veja VPN-Masquerade HOWTO (http://www.tldp.org/HOWTO/
VPN-Masquerade-HOWTO.html) (cobrindo IPSec e PPTP), VPN HOWTO (http://www.
tldp.org/HOWTO/VPN-HOWTO.html) (cobrindo PPP sobre SSH), e Cipe mini-HOWTO
(http://www.tldp.org/HOWTO/mini/Cipe+Masq.html), e PPP and SSH mini-HOWTO
(http://www.tldp.org/HOWTO/mini/ppp-ssh/index.html).
Tambm vale a pena verificar o Yavipin (http://yavipin.sourceforge.net/), mas este
programa ainda no possue um pacote Debian disponvel.
8.5.1
135
Se voc deseja fornecer um servidor de tunelamento para um ambiente misto (com clientes
Microsoft e Linux) e IPSec no uma opo (desde que s fornecido no Windows 2000 e
Windows XP), voc pode usar PoPToP (Servidor de Tunelamento Ponto a Ponto) disponvel no
pacote pptpd.
Se voc deseja usar autenticao e criptografia da Microsoft com o servidor fornecido pelo
pacote ppp, veja o seguinte trecho do FAQ:
8.6
Infra-estrutura de Chave Pblica (PKI - Public Key Infrastructure) uma arquitetura de segurana introduzida para fornecer um nvel adicional de confiana para trocas de informao em
redes inseguras. Utiliza os conceitos de chaves de criptografia pblica e privada para verificar
a identidade de um remetente (assinatura) e para assegurar a privacidade (criptografia).
Quando considerar uma PKI, voc encontrar uma variedade de situaes:
uma Autoridade Certificadora (CA - Certificate Authority) que pode distribuir e verificar
certificados, e que pode trabalhar sobre uma dada hierarquia.
um Diretrio para manter certificados pblicos de usurio
um Banco de Dados (?) para manter Listas de Revogao de Certificados (CRL - Certificate Revocation Lists)
dispositivos que interagem com a CA a fim de imprimir em smart cards/ tokens USB ou
qualquer outra forma para armazenar seguramente os certificados.
aplicaes aptas a utilizarem certificados que podem usar certificados fornecidos por
uma CA para realizar uma comunicao criptografada e verificar certificados dados contra CRL (para solues de autenticao e assinatura de uma nica vez completa)
136
8.7
Infra-estrutura SSL
Debian fornece alguns certificados SSL com a distribuio de modo que eles podem ser instalados localmente. Eles so encontrados no pacote ca-certificates, que fornece um repositrio central dos certificados que foram submetidos para o Debian e aprovados (ou seja,
verificados) pelo mantenedor do pacote e utis para qualquer aplicao OpenSSL que verifica
conexes SSL.
FIXME: leia o debian-devel para verificar se algo foi adicionado a ele.
8.8
Ferramentas Anti-vrus
137
Se voc usar este ltimo pacote e estiver usando um Debian oficial, o banco de dados no ser atualizado com
as atualizaes de segurana. Voc poder usar o clamav-freshclam e o clamav-getfiles para gerar novos
pacotes clamav-data ou atualizar do repositrio do mantenedor, atravs da localizao:
138
Alguns outros projetos anti-vrus livres que podem ser includos numa futura verso Debian
GNU/Linux:
Open Antivirus (http://sourceforge.net/projects/openantivirus/) (veja
Bug #150698 (ITP oav-scannerdaemon (http://bugs.debian.org/150698) e Bug
#150695 (ITP oav-update (http://bugs.debian.org/150695) ).
Existe tambm um pacote virussignatures, que fornece assinaturas para todos os pacotes.
Este pacote contm um script para fazer o download das ltimas assinaturas de virus de http:
//www.openantivirus.org/latest.php.
FIXME: Verificar se scannerdaemon o mesmo que o daemon varredor open anti-virus (ver
ITPs).
Por outro lado, Debian nunca ir fornecer softwares anti-vrus comerciais como: Panda
Antivirus, NAI Netshield, Sophos Sweep (http://www.sophos.com/), TrendMicro Interscan (http://www.antivirus.com), ou RAV (http://www.ravantivirus.com).
Para mais apontadores veja em Linux antivirus software mini-FAQ (http://www.
computer-networking.de/~link/security/av-linux_e.txt). Isto no signifca que
estes softwares possam ser instalados corretamente em um sistema Debian.
Para mais informaes de como configurar um sistema de deteco de vrus, veja o artigo
de Dave Jones Building an E-mail Virus Detection System for Your Network (http://www.
linuxjournal.com/article.php?sid=4882).
8.9
Agentes GPG
muito comum, atualmente, assinar digitalmente (e algumas vezes criptografar) e-mails. Voc
pode, por exemplo, verificar que muitas pessoas participando em listas de discusso assinam
seus e-mails. Assinaturas de chave pblica so atualmente o nico mecanismo para verificar
que um email foi enviado pelo remetente e no por qualquer outra pessoa.
Debian GNU/Linux fornece clientes de emails com funes embutidas para assinatura de
emails que interagem com o gnupg ou pgp:
Evolution.
mutt.
kmail.
sylpheed. Dependendo de como a verso estvel deste pacote evolua, voc pode precisar usar a verso bleeding edge, sylpheed-claws.
gnus, que quando instalado com o pacote mailcrypt , uma interface emacs interface
para o gnupg.
139
(http://www.dewinter.com/gnupg_howto/
HOWTO
(http://www.cryptnet.net/fdp/crypto/
140
141
Captulo 9
9.1.1
O Debian oferece uma ferramenta especfica para verificar se o sistema precisa de atualizao
(veja o programa Tiger abaixo), mas muitos usurios preferem verificar manualmente se as
atualizaes de segurana esto disponveis.
Se voc configurou o seu sistema como descrito em Executar uma atualizao de segurana
on page 40 voc s precisa fazer:
# apt-get update
# apt-get upgrade -s
O primeiro comando baixa a lista de pacotes disponveis nos sources de pacotes configurados.
A opo -s faz somente uma simulao, isto , no baixa ou instala os pacotes e sim diz quais
devem ser baixados/instalados. Voc poder saber que pacotes foram consertados pelo Debian
e esto disponveis para atualizao. Por exemplo:
# apt-get upgrade -s
Reading Package Lists... Done
Building Dependency Tree... Done
2 packages upgraded, 0 newly installed, 0 to remove and 0
not upgraded.
Inst
Inst
Conf
Conf
142
Neste exemplo, voc pode observar que precisa atualizar os pacotes cvs e cupsys, os quais esto
sendo retornados do arquivo de atualizao de segurana do woody. Se quiser entender porque
estes pacotes so necessrios, v em http://security.debian.org e verifique quais Alertas de Segurana do Debian foram publicados e esto relacionados com esses pacotes. Neste
caso, os alertas relacionados so DSA-233 (http://www.debian.org/security/2003/
dsa-233) (para cvs) e DSA-232 (http://www.debian.org/security/2003/dsa-232)
(para cupsys).
9.1.2
Um outro mtodo para atualizao de segurana automtica uso do cron-apt. Este pacote
fornece uma ferramente para atualizar o sistema em intervalos regulares (usando um job do
cron). Ele faz a atualizao da lista de pacotes e baixa os pacotes novos por padro. Ele tambm
pode ser configurado para enviar mails para o administrador do sistema.
Note que voc pode querer verificar a verso da distribuio, como descrito em Checando
releases das distribuies on page 121, se voc pretende atualizar automaticamente o seu sistema (mesmo somente baixando pacotes). Caso contrrio voc no ter certeza que os pacotes
baixados realmente so de origem confivel.
9.1.3
Se voc est procurando por uma ferramenta que rapidamente verifique e relata vulnerabilidades de segurana do sistema, tente o pacote tiger. Este pacote fornece um conjunto de scripts
shell, programas em C e arquivos de dados usados para realizar auditorias de segurana. O
pacote do Debian GNU/Linux tem melhorias adicionais voltadas para a distribuio Debian,
provendo mais funcionalidade do que os scripts Tiger fornecidos por TAMU (ou at TARA,
uma verso do tiger distribuida por ARSC). Veja o arquivo README.Debian e a pgina de
manual tiger(8) para mais informaes.
Uma dessas melhorias o script deb_checkadvisories. Este script recebe uma lista de
DSAs (Alertas de Segurana do Debian) e verifica com a base de pacote instalada, informando
quaisquer pacotes que esto vulnerveis conforme o Time de Segurana do Debian. Ele um
pouco mais genrico do que o script check_signatures implementado pelo Tiger, pois este
capaz de verificar MD5sums de programas vulnerveis conhecidos.
J que o Debian atualmente no distribui uma lista de MD5sums de programas vulnerveis
conhecidos (utilizado por algum outro sistema operacional como Sun Solaris), a soluo checkagainst-DSA usada. Ambas as solues DSA e MD5sums sofrem do problema de que as
assinaturas devem ser atualizadas regularmente.
143
Atualmente esse problema resolvido fazendo novas verses do pacote Tiger, mas o mantenedor do pacote nem sempre pode fazer uma nova verso toda vez que um DSA anunciado.
Uma melhoria interessante, que ainda no est implementada, poderia fazer este trabalho prativamente. Isto , fazer o download dos DSAs da web, construir a lista de DSAs e ento rodar
a verificao. The DSAs are currently updated from the maintainers local CVS update of the
WML sources used to build http://security.debian.org (the web server, that is).
Um programa para analisar sintaticamente os DSAs publicados, receber atravs de
e-mail ou disponibilizar no security.debian.org, e ento gerar o arquivo usado pelo
deb_checkadvisories para confirmar vulnerabilidades seria bem-vindo. Envie-o como um
relatrio de bug para o pacote tiger.
Uma vez instaldo, a verificao mencionada definida pela configurao padro do programa
(veja /etc/tiger/cronrc):
# Check for Debian security measures every day at 1 AM
#
1 * *
deb_checkmd5sums deb_nopackfiles deb_checkadvisories
#
Existe uma verificao adicional que voc pode querer acrescentar apesar de ainda no fazer
parte dos scripts padres do cron. O script check_patches funciona da seguinte maneira:
execute apt-get update
verifique se h novos pacotes disponveis
Se voc estiver rodando o sistema estvel e adicionar a linha de fonte apt security.debian.org
em /etc/apt/sources.list (como descrito em ref id=security-update>), este script ser
capaz de informar se existem pacotes novos que devem ser instalados. J que somente A If you
are running a stable system and add the security.debian.org apt source line to your /etc/apt
/sources.list (as described in Executar uma atualizao de segurana on page 40), this
script will be able to tell you if there are new packages that you need to install. Since the only
packages changing in this setup are security updates, then you have just what you wanted.
Claro que isso no funcionar se voc estiver rodando a verso testing ou sid/unstable, j que
atualmente, os novos pacote provavelmente tm mais funcionalidades que as atualizao de
segurana.
You can add this script to the checks done by the cron job (in the above configuration file)
and tigercron would mail (to whomever Tiger_Mail_RCPT was set to in /etc/tiger
/tigerrc) the new packages:
# Check for Debian security measures every day at 1 am
#
1 * *
deb_checkmd5sums deb_nopackfiles check_patches
#
# TRANSLATION @ UNIFACS
9.1.4
144
9.1.5
Ao menos que voc tenha tempo para aplicar patches de segurana toda vez que uma vulnerabilidade descoberta, voc no deve usar a verso instvel do Debian para sistemas em
produo. A principal razo para isto que no h atualizaes de segurana para a verso
unstable (veja Como a segurana tratada na testing e unstable? on page 178).
O fato que algumas questes relacionadas segurana podem surgir na distribuio instvel
e no na stable. Isto porque novas funcionalidades so constantemente adicionadas s aplicaes, assim como novas aplicaes so includas sem serem totalmente testadas.
Para se fazer atualizaes de segurana na verso unstable, voc pode fazer uma atualizao
completa para nova verso (que atualiza muito mais do que somente os pacotes afetados). Embora existam algumas excees, patches de segurana geralmente s so portadas para a verso
stable. A idia principal que entre as atualizaes, nenhum cdigo novo deve ser adicionado,
somente consertos para questes importantes.
9.1.6
Se voc estiver utilizando uma verso em testing, existem algumas questes relacionadas
disponibilidade das atualizaes de segurana que devem ser levadas em conta:
Quando um conserto de segurana preparado, o Time de Segurana lana o patch para
a verso stable (desde que a estvel tenha alguma verso anterior). Os mantenedores de
pacotes so responsveis por preparar o patch para a verso unstable, geralmente baseado
nos novos lanamentos. Algumas vezes as alteraes acontecem quase ao mesmo tempo
e em outras um dos lanamentos disponibiliza o conserto de segurana antes. Os pacotes
para a distribuio stable so testados bem mais a fundo do que para a unstable, j que
esta ir fornecer na maioria dos casos a ltima verso do lanamento (que pode incluir
novos e desconhecidos bugs)
Atualizaes de segurana esto disponveis para a verso unstable geralmente quando os
mantenedores fazem um novo pacote e para a verso stable quando o Time de Segurana
publica um DSA e faz um novo upload. Observe que nada disso altera a verso em
testing.
Se nenhum (novo) bug detectado na verso unstable do pacote, ele passa para a verso
em testing depois de algum. Este tempo geralmente de dez dias, embora dependa de
algumas coisas como a prioridade de upload e se o pacote est ou no bloqueado para
145
entrar na em teste por causa de dependncias. Note que se o pacote estiver bloqueado, a
prioridade de upload no afetar o tempo que ele leva para entrar na verso em teste.
Esse comportamento pode ser alterado conforme o estado de lanamento da distribuio.
Quando uma distribuio est perto de ser lanada, o Time de Segurana ou os mantenedores
dos pacotes devem fornecer atualizaes de segurana diretamente para a verso em teste.
9.1.7
Voc tambm pode optar por usar a opo --quiet (-q) para diminuir a quantidade de informaes de sada
do apt-get. Caso nenhum pacote esteja sendo instalado, nenhuma informao mostrada na tela.
2
Note que alguns pacotes podem no usar o debconf e a atualizaes iro parar para que o usurio entre com
alguma configurao.
146
9.2
Isso uma prtica comum, j que muitos usurios preferem manter o sistema estvel, podendo atualizar
alguns pacotes para a verso unstable para obter novas funcionalidades. Esta necessidade surge devido ao desenvolvimento de alguns projetos ser mais rpido que o tempo gasto entre os lanamentos da verso stable do Debian.
4
Uma maneira fcil de fazer isso utilizar um Live CD, tipo o Knoppix Std (http://www.knoppix-std.
org/) que inclue ambas as ferramentas de verificao de arquivos e a base de dados de integridade do seu sistema.
147
Algumas das ferramentas citadas nesta seo, como aide, integrit ou samhain j esto
preparadas para fazer revises peridicas (atravs do crontab nas duas primeiras e atravs de
um daemon standalone na samhain) e pode avisar o administrador por diferentes canais (geralmente e-mail, mas samhain tambm pode enviar pages, traps SNMP ou alertas do syslog)
quando ocorrem alteraes no sistema de arquivos.
Claro que se voc for executar uma atualizao do sistema, deve ser tirado novamente um
snapshot para acomodar as alteraes sofridas durante a atualizao de segurana.
9.3
O Debian GNU/Linux inclue ferramentas para deteco de intruso, que nada mais do que
a prtica de detectar atividades imprprias ou maliciosas no seu sistema local, ou outros sistemas que estejam na sua rede privada. Este tipo de defesa importante se o sistema for altamente crtico ou voc for realmente paranico. Os tipos mais comuns de deteco de intruso
so deteco estatstica de anomalias e deteco baseada em algum padro.
Sempre tenha em mente que para melhorar a segurana do sistema com a instalao de uma
dessas ferramentas, voc deve ter um mecanismo de alertas e respostas elaborado. Deteco
de intruso perda de tempo se voc no for alertar ningum.
Quando um ataque em particular for detectado, a maioria das ferramentas de deteco de intruso ir tanto gerar um log do evento com o syslogd enviar um e-mail para o super-usurio
(o destinatrio geralmente configurvel). Um administrador precisa configurar propriamente
as ferramentas para que falsos positivos no gerem alertas. Alertas tambm devem informar
um ataque que pode estar acontecendo e ele no ser til, digamos, um dia depois que ocorrer.
Ento tenha certeza que existe uma poltica apropriada para tratar os alertas e que os mecanimos tcnicos para implementar essa poltica sejam viveis.
Uma fonte interessante de informaes CERTs Intrusion Detection Checklist (http://www.
cert.org/tech_tips/intruder_detection_checklist.html)
9.3.1
As ferramentas de deteco de intruso baseada em rede monitoram o trfego em um segmento de rede e utilizam essas informaes como fonte dos dados para serem analisados. Especificamente, os pacotes da rede so examinados, e eles so verificados para ver se existe uma
certa assinatura de pacotes maliciosos.
O Snort um sniffer de pacotes bastante flexvel ou logger que detecta os ataques utilizando um dicionrio de assinatura de ataques. Ele detecta uma variedade de ataques e probes, como estouro de buffer, varredores de portas stealth, ataques CGI, probes SMB e muito
mais. O Snort tambm tem a capacidade de gerar alertas em tempo real. Voc pode usar
o snort tanto para uma srie de mquinas na sua rede quanto para o seu prprio servidor. Ele uma ferramenta que deve ser instalada em todos os roteadores para manter os
148
olhos na rede. Para instal-lo basta usar o apt-get install snort, seguir as perguntas, e verificar o log. Para um arcabouo de segurana um pouco mais amplo, veja Prelude
(http://www.prelude-ids.org).
O pacote snort do Debian tem diversas configuraes de segurana ativadas por padro.
Entretanto, voc deve customizar o programa tendo em mente os servios particulares que
voc roda no seu sistema. Tambm seria interessante procurar algumas verificaes especficas
para estes servios.
Nota: Os pacotes do snort disponveis no woody no esto to atualizados e podem
at
estar
bugados
(http://lists.debian.org/debian-devel/2003/
debian-devel-200308/msg02105.html), voc pode obter um backport (e assinatura) do Snort fornecido pelo mantenedor do pacote em http://people.debian.org/
~ssmeenk/snort-stable-i386/.
Existem outras ferramentas mais simples que podem ser utilizadas para detectar ataques em
rede. O portsentry um pacote interessante que pode ajudar a descobrir varreduras contra
seus hosts. Outras ferramentas como ippl ou iplogger tambm podem detectar alguns
ataques IP (TCP e ICMP), mesmo que eles no forneam os tipos de tcnicas que o snort
fornece.
Voc pode testar qualquer uma dessas ferramentas com o pacote do Debian idswakeup, um
script em shell que gera alarmes falsos e inclue muitas assinaturas de ataques comuns.
9.3.2
149
instalar Trojans, ou criar usurios. Tais eventos podem ser detectados com os programas para
verificao de integridade do arquivo.
9.4
9.4.1
Evitando os root-kits
Loadable Kernel Modules (LKM)
9.4.2
Detectando root-kits
Existem dois mecanismosestratgias para defender seu sistema de root-kits LKM, a defesa
pr-ativa e a reativa. O trabalho de deteco pode ser simples e fcil, ou difcil e cansativo,
dependendo da estratgia escolhida.
Defesa pr-ativa
A vantagem para este tipo defesa que ela previne qualquer dano ao sistema logo de incio.
Uma estratgia para esse tipo de defesa conhecida como pegar eles primeiro, que carregar
na memria um mdulo LKM designado para proteger o sistema de outros LKMs maliciosos.
A segunda estratgia remover algumas funcionalidades do prprio kernel. Por exemplo,
voc pode desabilitar a opo de carrergar mdulos no kernel. Entretanto, note que existem
root-kits que podem funcionar at mesmo neste caso. Alguns deles podem mexer com o /dev
/kmem (memria do kernel) diretamente para torn-los indetectveis.
O Debian GNU/Linux tem poucos pacotes que podem ser usados para montar uma defesa
pr-ativa:
150
9.5
Esta provavelmente a mais instvel e divertida seo, apenas espero que algumas das ideias
duh, isso parece loucura possam ser realizadas. A seguir algumas idias para melhorar a
5
151
152
Esta estratgia tambm faz com que uma variedade de exploits de segurana e de negao de servios (DoS) sejam difceis ou impossveis de serem realizados (j que a maioria
deles conta com a permisso de sobrescrever um arquivo atravs de algum programa
SETUID que a princpio no esteja fornecendo um comando shell arbitrrio). This strategy
also makes a variety of security and denial of service (DoS) exploits either impossible or
more difficult (since many of them rely on overwriting a file through the actions of some
SETUID program that isnt providing an arbitrary shell command).
Uma inconvenincia desse tipo de estratgia aparece durante a compilao e instalao de alguns binrios do sistema. Por outro lado, isso previne que um comando make
install sobrescreva os arquivos. Quando voc se esquece de ler o Makefile e executa
um chattr -i nos arquivos a serem sobrescritos, (tambm nos diretrios nos quais sero adicionados os arquivos) - o comando make falha. Ento voc deve usar o comando
chattr para desativar a flag de imutvel e rodar o make novamente. Voc tambm pode
optar por mover os binrios e as bibliotecas antigas para dentro de um diretrio .old/ ou
para um arquivo tar por exemplo.
Note que esta estratgia tambm impede que voc atualize seu prprio sistema de pacotes, j que os arquivos que os pacotes a serem atualizados fornecem no podem ser
sobrescritos. Voc pode fazer um script ou usar outro mecanismo parecido para desativar a permisso de imutvel em todos os binrios antes de fazer um apt-get update.
Voc pode brincar um pouco com o cabeamento UTP cortando 2 ou 4 fios, tornando
um cabo de trfego unidirecional. Ento use pacotes UDP para enviar informao para
uma mquina de destino que atuaria como um servidor de log seguro ou at mesmo um
sistema de armazenamento de cartes de crdito.
9.5.1
Construindo um honeypot
153
snort, para configurar a captura de todo o trfego de rede de entrada para o honeypot
e detectar os ataques.
osh, um SETUID root, segurana aprimorada, shell restrita com sistema de log (veja o
artigo de Lance Spitzner abaixo).
Claro que todos os daemons sero usados por seu servidor honeypot falso (ento no
assegurar o honeypot).
The Deception Toolkit, que utiliza um sistema de induo ao erro para reagir aos ataques.
Homepage: Deception Toolkit (http://all.net/dtk/dtk.html)
Verificadores de integridade (veja Verificando a integridade do sistema de arquivos on
page 71) e o Toolkit do Coroner (tct) para fazer auditorias ps-ataque.
Voc pode ler mais sobre como construir honeypots no excelente artigo de Lanze
Spitzner To Build a Honeypot (http://www.net-security.org/text/articles/
spitzner/honeypot.shtml) (das sries Know your Enemy), ou de David Raikow
Building your own honeypot (http://www.zdnetindia.com/techzone/resources/
security/stories/7601.htm). O Projeto Honeynet (http://project.honeynet.
org/) tambm fornece informaes valiosas relacionadas construo de honeypots e auditoria dos ataques feitos nelas.
154
155
Captulo 10
Depois do comprometimento do
sistema (resposta a incidentes)
10.1
Comportamento comum
Se voc estiver presente fisicamente quando o ataque ocorrer, sua primeira obrigao retirar
a mquina da rede, desconectando o cabo de rede da placa (se isso no for influenciar as transaes dos negcios). Desativando a rede na camada 1 a nica forma de manter o invasor
longe da mquina comprometida (conselho sbio de Philip Hofmesiter).
Entretanto, alguns rootkits ou backdoors so capazes de detectar este tipo de evento e reagir a
ele. Ver um rm -rf / sendo executado quando voc desativa a rede no muito engraado.
Se voc se nega a correr o risco e tem certeza que o sistema foi comprometido, voc deve desconectar o cabo de energia (todos eles se existirem mais de um) e cruzar os dedos. Isso pode ser
extremo mas, de fato, ir evitar qualquer bomba lgica que o invasor possa ter programado.
Nesses casos o sistema comprometido no deve ser reiniciado. Os discos rgidos tambm devem
ser colocados em outro sistema para serem analisados, ou deve ser usado outro tipo de mdia
(um CD-ROM) para inicializar o sistema e analis-lo. Voc no deve usar os discos de recuperao do Debian para inicializar o sistema, mas voc pode utilizar o shell fornecido pelos discos
de instalao (use Alt+F2 para acess-lo) para analis-lo. 1
O mtodo mais recomendado para restaurar um sistema comprometido utilizar um CDROM
com todas as ferramentas (e mdulos do kernel) necessrias para acessar o sistema. Voc
pode utilizar o pacote mkinitrd-cd para compilar tal CDROM2 . Voc tambm pode achar
o CDROM FIRE (http://biatchux.dmzs.com/) til, j que um live CDROM com ferramentas para anlise forense ideal neste tipo de situao. No existe (ainda) uma ferramenta baseada no Debian com a funcionalidade do FIRE, nem uma maneira fcil de compilar o CDROM
1
Se voc for um aventureiro, voc pode efetuar o logon no sistema e salvar as informaes de todos os processos em execuo (vrias dessas informaes esto em /proc/nnn/). possvel pegar todo cdigo executvel da
memria, mesmo se o invasor tiver excludo os arquivos executveis do disco. Ento puxe o cabo de fora.
2
. De fato, esta a ferramenta utilizada para compilar os CDROMs para o projeto Gibraltar (http://www.
gibraltar.at/) (um firewall em CDROM baseado na distribuio Debian).
156
com pacotes especficos e com mkinitrd-cd (voc ter que ler a documentao fornecida com
o programa para fazer seus prprios CDROMs).
Se voc realmente quer consertar um sistema comprometido rapidamente, voc deve tirar o
sistema da sua rede e reinstalar todo o sistema operacional do zero. Claro, isto pode no ser
efetivo porque voc no saber como o invasor comprometeu o sistema. Neste caso, voc deve
verificar tudo: firewall, integridade de arquivos, host de log, arquivos de log entre outros. Para
mais informaes do que fazer siga um guia, veja Sans Incident Handling Guide (http://
www.sans.org/y2k/DDoS.htm) ou CERTs Steps for Recovering from a UNIX or NT System
Compromise (http://www.cert.org/tech_tips/root_compromise.html).
Algumas perguntas freqentes de como lidar com um sistema Debian GNU/Linux esto disponveis em Meu sistema vulnervel! (Voc tem certeza?) on page 172.
10.2
Lembre-se que se voc tem certeza de que o sistema foi comprometido voc no pode confiar
no software instalado ou em qualquer informao retornada por ele. Aplicaes podem ser
alteradas, mdulos do kernel podem ser instalados e etc.
A melhor coisa a se fazer uma cpia de backup completa do sistema de arquivo (usando o
dd) depois de inicializar o sistema de uma mdia segura. Os CDROMs do Debian GNU/Linux
podem ser utilizados para isto, j que eles fornecem um shell no console 2 quando a instalao
iniciada (acesse atravs do Alt+2 e pressione Enter). Do shell, efetue o backup das informaes para outro host se possvel (talvez um servidor de arquivos de rede atravs de NFS/FTP).
Ento qualquer anlise da invaso ou reinstalao pode ser feita enquanto o sistema comprometido est off-line.
Se voc tiver certeza de que um mdulo do kernel com cavalo de tria comprometeu o sistema, voc pode usar a imagem do kernel do CDROM do Debian no modo rescue. Inicie o
GNU/Linux no modo single user para que nenhum outro processo com o cavalo de tria seja
executado depois do kernel.
10.3
O CERT (Computer and Emergency Response Team) uma organizao que pode te ajudar
a recuperar o sistema comprometido. Existem CERTs espalhados por todo o mundo 3 e voc
3
Esta a lista de alguns CERTS, para uma lista completa veja o FIRST Member Team information (http://
www.first.org/about/organization/teams/index.html) (FIRST significa Forum of Incident Response
and Security Teams): AusCERT (http://www.auscert.org.au) (Austrlia), UNAM-CERT (http://www.
unam-cert.unam.mx/) (Mxico) CERT-Funet (http://www.cert.funet.fi) (Finlndia), DFN-CERT (http:
//www.dfn-cert.de) (Alemanha), RUS-CERT (http://cert.uni-stuttgart.de/) (Alemanha), CERTIT (http://idea.sec.dsi.unim.it) (Itlia), JPCERT/CC (http://www.jpcert.or.jp/) (Japo), UNINETT CERT (http://cert.uninett.no) (Noruega), HR-CERT (http://www.cert.hr) (Crocia) CERT Polskay (http://www.cert.pl) (Polnia), RU-CERT (http://www.cert.ru) (Rssia), SI-CERT (http://www.
arnes.si/si-cert/) (Eslovnia) IRIS-CERT (http://www.rediris.es/cert/) (Espanha), SWITCH-CERT
157
deve contatar seu CERT local caso ocorra algum incidente de segurana que comprometa seu
sistema. As pessoas do CERT local so orientadas a ajud-los.
Fornecer informaes sobre os incidentes de segurana para o CERT local (ou para o centro de coordenao do CERT), mesmo que voc no precise de assistncia, pode ajudar os
outros a determinar se uma vulnerabilidade est disseminada na Internet e indicar que novas ferramentas de combate ao verme esto sendo utilizadas. Estas informaes so usadas para fornecer comunidade da Internet alertas sobre as atividades atuais dos incidentes de segurana (http://www.cert.org/current/), e para publicar notas sobre incidentes (http://www.cert.org/incident_notes/) e at mesmo alertas de segurana
(http://www.cert.org/advisories/). Para informaes mais detalhadas de como (e
porqu) relatar um incidente leia o CERTs Incident Reporting Guidelines (http://www.
cert.org/tech_tips/incident_reporting.html).
Voc pode usar mecanismos menos formais se precisar de ajuda na recuperao de um sistema comprometido ou quiser discutir informaes do incidente. Estes mecanismos incluem a
lista de discusso sobre incidentes (http://marc.theaimsgroup.com/?l=incidents) e
a lista de discusso sobre intrusos (http://marc.theaimsgroup.com/?l=intrusions).
10.4
Anlise forense
Se voc deseja recolher mais informaes do ataque, o pacote tct (O Coroners Toolkit de Dan
Farmer e Wietse Venema) contm utilitrios que realizam uma anlise pstuma do sistema.
O tct permite que o usurio colete informaes sobre arquivos excludos, processos em execuo e muito mais. Veja a documentao para mais informaes. Voc tambm pode conferir
os pacotes similares Sleuthkit and Autopsy (http://www.sleuthkit.org/) desenvolvidos
por Brian Carrier.
Algumas outras ferramentas que podem ser usadas para anlise forense tambm so fornecidas pela distribuio Debian:
Fenris.
Strace.
Ltrace.
Qualquer um desses pacotes podem ser usados para analisar binrios anmalos (como os backdoors) para determinar como eles funcionam e o que eles fazem no sistema. Outras ferramentas comuns so o ldd (no pacote libc6), strings e objdump (ambos no pacote binutils).
Se voc tentar fazer uma anlise forense de um sistema comprometido com backdoors ou binrios suspeitos, voc deve faz-la em um ambiente seguro (por exemplo em uma imagem bochs
ou flex86, ou em um ambiente chroot utilizando um usurio com poucos privilgios). Caso
contrrio seu prprio sistema pode ser comprometido tambm!
(http://www.switch.ch/cert/) (Suia), TWCERT/CC (http://www.cert.org.tw) (Taiwan), e CERT/CC
(http://www.cert.org) (US).
158
Tambm, lembre-se que a anlise forense deve ser feita sempre na cpia de backup dos dados,
nunca nos dados originais, em caso dos dados serem alterados durante a anlise e as evidncias
serem perdidas.
FIXME: This paragraph will hopefully provide more information about forensics in a Debian
system in the coming future.
FIXME: talk on how to do a debsums on a stable system with the MD5sums on CD and with
the recovered file system restored on a separate partition.
FIXME add pointers to forensic analysis papers (like the Honeynets reverse challenge or David
Dittirchs papers (http://staff.washington.edu/dittrich/).
159
Captulo 11
11.1
11.1.1
Neste exemplo, baseado nos dados da Securityfocus, pode ser visto que o Windows NT mais seguro que
o Linux, o que uma afirmao questionvel. Apesar de tudo, as distribuies do Linux geralmente oferecem
mais aplicaes comparadas ao Windows NT da Microsoft. Estas situaes de contagem de vulnerabilidades so
melhor descritas em Why Open Source Software / Free Software (OSS/FS)? Look at the Numbers! (http://www.
dwheeler.com/oss_fs_why.html#security) por David A. Wheeler
160
oferecidos com o lanamento da distribuio estvel. Por exemplo, o kernel, Bind, Apache,
OpenSSH, XFree, gcc, zlib, etc. so todos idnticos entre as distribuies de Linux.
Por exemplo, a Red Hat foi infeliz e ofereceu quando 1.2.3 era a atual, que em seguida foram
encontrados problemas de segurana. Na Debian, por outro lado, foi sortuda e forneceu 1.2.4
que j possui a correo da falha. Este foi o caso no grande problema do rpc.statd (http:
//www.cert.org/advisories/CA-2000-17.html) diversos anos atrs.
Existe muita colaborao entre os respectivos times de segurana das maiores distribuies
Linux. Atualizaes de segurana conhecidas so raramente, se existirem, deixadas de lado
por desenvolvedores de uma distribuio. O conhecimento de uma vulnerabilidade de segurana nunca mantida isolada do conhecimento de desenvolvedores de outra distribuio,
pois as correes so normalmente coordenadas com o autor ou atravs do CERT (http:
//www.cert.org). Como um resultado, as atualizaes necessrias de segurana so geralmente lanadas ao mesmo tempo e a segurana relativa de diferentes distribuies so bem
parecidas.
Uma das principais vantagens da Debian com relao a segurana a facilidade de atualizaes
do sistema atravs do uso do apt. Aqui existem muitos outros aspectos da segurana na
Debian a serem considerados:
A Debian fornece mais ferramentas de segurana que outras distribuies, veja Ferramentas de segurana no Debian on page 131.
A instalao padro da Debian pequena (menos funcionalidades), e assim mais segura.
Outras distribuies, em nome da funcionalidade, tem a tendncia de instalarem diversos
servios por padro e algumas vezes no esto corretamente configurados (lembre-se dos
worms Ramen ou Lion (http://www.sans.org/y2k/lion.htm)). A instalao da
Debian no limitada como o OpenBSD (no existem daemons ativos por padro), mas
tem um bom compromisso. 2
A Debian documenta as melhores prticas de segurana em documentos como este.
11.1.2
A distribuio Debian conta com um nmero grande e crescente de pacotes de software, provavelmente mais do que os fornecidos por muitos sistemas operacionais proprietrios. Quanto
mais pacotes instalados, maior o potencial de falhas de segurana em um determinado sistema.
Mais e mais pessoas esto examinando o cdigo fonte por problemas. Existem muitos alertas
relacionados com a auditoria de cdigo fonte dos maiores componentes de software includos
na Debian. Desta forma, tais auditorias de software mostram brechas de segurana, elas so
corrigidas e um aviso enviado para listas tal como Bugtraq.
2
Sem mencionar o fato que algumas distribuies, tal como a Red Hat ou Mandrake, tambm esto permitindo
que o usurio selecione perfis de segurana ou usando assistentes para ajudar na configurao de firewalls pessoais.
161
Falhas que esto presentes na distribuio Debian normalmente tambm afetam outros distribuidores e vendedores. Verifique a seo Especfico da Debian: yes/no no topo de cada
aviso de segurana (DSA).
11.1.3
11.1.4
11.1.5
Um dos grandes potenciais da Debian a grande variedade de escolhas disponveis entre pacotes que oferecem a mesma funcionalidade (servidores de DNS, servidores de e-mail, servidores
ftp, servidores web, etc.). Isto pode confundir o administrador novato ao tentar determinar que
pacote o mais adequado para voc. O melhor para uma determinada situao depende de
um balanceamento entre suas caractersticas e necessidades de segurana. Aqui esto algumas
questes que devem ser feitas a voc mesmo quando decidir entre pacotes parecidos:
Existem um maintainer do cdigo fonte do programa? Quando foi o ltimo lanamento?
O pacote est maduro? o nmero de verso realmente no mostra sua maturidade. Tente
analisar o histrico de atualizaes do software.
Este programa atormentado por falhas? Tem avisos de segurana relacionados a ele?
Este programa oferece todas as funcionalidades que precisa? ele oferece mais do que
voc realmente precisa?
11.1.6
162
Voc encontrar informaes neste documento sobre como tornar alguns servios (FTP, Bind)
mais seguros na Debian GNU/Linux. Para servios no cobertos aqui, verifique a documentao do programa, ou informaes gerais sobre o Linux. Muitas das regras de segurana para
sistemas Unix tambm se aplicam a Debian. Na maioria dos casos, o mtodo para tornar um
servio X mais seguro na Debian parecido com torn-lo mais seguro em qualquer outra distribuio de Linux (ou Unix, nesta importncia).
11.1.7
Se no gosta que os usurios que se conectam ao seu servio de POP3 recebam informaes
sobre seu sistema (por exemplo), voc pode querer remover (ou alterar) o banner que este
servio mostra para os usurios. 3 Fazer isto depende do programa que est executando para
um determinado servio. Por exemplo, no postfix, voc poder ajustar o banner SMTP no
arquivo /etc/postfix/main.cf:
11.1.8
O time de segurana da Debian no tem a possibilidade de analisar todos os pacotes includos na Debian procurando por vulnerabilidades de segurana em potencial, pois no existem
recursos para auditar o cdigo fonte de todo o projeto. No entanto, a Debian se beneficia da
auditoria de cdigo fonte feita por desenvolvedores que criam o programa.
Como um fato de importncia, um desenvolvedor da Debian pode distribuir um Trojan em um
pacote e no existe possibilidade de verificar isto. At mesmo se for introduzido na estrutura
da distribuio, seria impossvel identificar todas as situaes onde o trojan seria executado.
Este o motivo porque a Debian vem com a clusula de licena sem garantias.
No entanto, os usurios da Debian podem ter confiana no fato que que cdigo estvel tem
uma audincia ampla e a maioria dos problemas foram descobertos durante o uso. A instalao de verses no testadas de programas em sistemas crticos algo no recomendado (se
no puder fornecer a auditoria de cdigo necessria). Em qualquer caso, se for descoberta
uma vulnerabilidade de segurana introduzida na distribuio, o processo usado para incluir
pacote (usando assinaturas digitais) se certifica que o problema pode ser rastreado at o desenvolvedor. O projeto Debian no tem examinado isto levemente.
3
Note que isto segurana pela obscuridade e provavelmente este esforo no valer a pena em longo termo.
11.1.9
163
claro, voc pode alterar as permisses padres da Debian em seu sistema. A poltica atual
relacionada com arquivos de log e configurao que eles sejam lidos por todos a no ser que
eles contenham informaes sensveis.
Tenha cuidado se fizer estas alteraes pois:
Alguns processos podem no ser capazes de gravar arquivos de log se restringir suas
permisses.
Alguns aplicativos podem deixar de funcionar se o arquivo de configurao que eles
dependem no puder ser lido. Por exemplo, se voc remover a permisso de leitura para
todos do /etc/samba/smb.conf, o smbclient deixar de funcionar se for executado
por um usurio normal.
FIXME: Verificar se isto est escrito na Poltica. Alguns pacotes (i.e. daemons de ftp) parecem
forar permisses diferentes.
11.1.10
Como fato de importncia, as mesmas questes so vlidas para qualquer outro usurio. Como
a instalao da Debian no coloca qualquer arquivo sob aquele diretrio, no existe informaes
sensveis a serem protegidas l. Se voc sentir que estas permisses so muito largas para
seu sistema, considere altera-las para 750. Para os usurios, leia Limitando acesso a outras
informaes de usurios on page 57.
A lista de discusso Debian security thread (http://lists.debian.org/
debian-devel/2000/debian-devel-200011/msg00783.html) tem mais sobre este
assunto.
11.1.11
Aps instalar o grsec/firewall, comecei a receber muitas mensagens de console! como remov-las?
164
KLOGD=""
para:
KLOGD="-c 4"
Use um nmero menor para -c se estiver ainda vendo as mensagens. Uma descrio dos
diferentes nveis de logs podem ser encontrados no arquivo /usr/include/sys/syslog.h:
#define
#define
#define
#define
#define
#define
#define
#define
11.1.12
LOG_EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
0
1
2
3
4
5
6
7
/*
/*
/*
/*
/*
/*
/*
/*
165
166
capaz de regravar um site de internet. Dados gravados por servidores web, incluindo
arquivos de logs, tero que ter como dono www-data.
backup: Assim as responsabilidades de backup/restaurao podem ser localmente delegadas para algum sem permisses completas de usurio root.
operator: O operador historicamente (e praticamente) a nica conta de usurio que
pode efetuar login remotamente, e no depende do NIS/NFS.
list: Os arquivos de listas de discusses e dados tem como dono este usurio e grupo. Alguns programas de listas de discusses podem ser executadas tambm sobe este usurio.
irc: Usado por daemons de irc. necessrio um usurio alocado estaticamente somente
por causa de um bug no ircd, que faz SETUID()s de si mesmo para a UID especificada
na inicializao.
gnats.
nobody, nogroup: Daemons que no tem necessidade de serem donos de quaisquer arquivos so executados sob o usurio nobody e grupo nogroup. Assim, nenhum arquivo
existente no sistema devem ter como donos este usurio ou grupo.
Outros grupos que no tem um usurio associado:
adm: O grupo adm usado para tarefas de monitoramento do sistema. Os membros
deste grupo podem ler a maioria dos arquivos de log em /var/log e podem usar o
xconsole. Historicamente, o /var/log foi /usr/adm (e depois /var/adm), isto explica
o nome do grupo.
tty: Os dispositivos TTY tem como dono este grupo. Eles so usados pelas ferramentas
write e wall para permitir escrever para pessoas conectadas em outras TTYs.
disk: Acesso direto a disco. Muito equivalente ao acesso root.
kmem: /dev/kmem e arquivos similares so lidos por este grupo. Isto mais uma relquia do BSD, mas alguns programas que precisam de acesso de leitura direto a memria
do sistema podem fazer SETGID para o grupo kmem.
dialout: Acesso direto e completo a portas seriais. Membros deste grupo podem reconfigurar o modem, discar para qualquer lugar, etc.
dip: O nome do grupo vem de Dial-up IP, e membros que pertencem ao grupo dip
podem usar ferramentas como o ppp, dip, wvdial, etc. para realizar uma conexo. Os
usurios neste grupo no podem reconfigurar o modem, mas podem executar programas
para fazerem uso dele.
fax: Permite que membros usem programas de fax para ler/enviar faxes.
voice: Voicemail, til para sistemas que usam modens como secretrias eletrnicas.
167
cdrom: Este grupo pode ser usado localmente para dar ao grupo de usurios acesso a
unidade de CDROM.
floppy: Este grupo pode ser usado localmente par dar a um grupo de usurios acesso a
unidade de disquetes.
tape: Este grupo pode ser usado localmente para dar a um grupo de usurios acesso a
uma unidade de fita.
sudo: Membros dentro deste grupo no precisam digitar sua senha quando estiverem
fazendo o uso do sudo. Veja /usr/share/doc/sudo/OPTIONS.
audio: Este grupo pode ser usado localmente para dar a um grupo de usurios acesso a
um dispositivo de audio.
src: Este grupo dono de cdigo fonte, incluindo arquivos em /usr/src. Ele pode ser
usado para dar a um usurio a habilidade de gerenciar cdigo fonte do sistema.
shadow: O arquivo /etc/shadow lido por este grupo. Alguns programas que precisam ser capazes de acessar o arquivo tem SETGID ajustados para shadow.
utmp: Este grupo pode gravar para o arquivo /var/run/utmp e similares. Programas
que precisam se capazes de gravar para ele usam SETGID para utmp.
video: Este grupo usado localmente para dar a um conjunto de usurios permisses de
acesso a dispositivos de vdeo.
staff: Permite que usurios adicionem modificaes locais ao sistema (/usr/local,
/home) sem necessidade de privilgios de usurio root. Compare com o grupo adm,
que mais relacionado a segurana/monitoramento.
users: Enquanto usurios de sistemas Debian usam seus grupos privados de sistema por
padro (cada usurio tem seu prprio grupo), alguns preferem usar um grupo de sistema
mais tradicional, no qual cada usurio membro de seu grupo.
Quais so as diferenas entre os grupos adm e staff?
Componentes do grupo adm so geralmente administradores e neste grupo as permisses
os permitem ler arquivos de log sem utilizar su. O grupo staff so geralmente administradores junior e de suporte, permitindo que trabalhem em /usr/local e criarem diretrios em
/home.
11.1.13
Porque existe um novo grupo quando adiciono um novo usurio? (ou porque a Debian cria um novo grupo para cada usurio?)
O comportamento padro na Debian que cada usurio tem seu prprio e privado grupo.
O esquema tradicional do UN*X coloca todos os usurios no grupo users. Grupos adicionais
foram criados e usados para restringir o acesso a arquivos compartilhados associados com
168
11.1.14
169
State
7
7
170
11.1.15
171
necessrio pois seu /etc/lilo.conf precisa ser mexido devido ao sistema de arquivos raz
(/) ser um disco ram e no um disco rgido real.
Assim que a restrio do LILO for removida, tente o seguinte:
Pressione as teclas Alt, shift e Control antes do sistema terminar o processo de inicializao, assim voc ter acesso ao aviso de comandos do LILO.
Digite linux single, linux init=/bin/sh ou linux 1 na linha de comandos.
Isto lhe dar um aviso de comandos do shell em modo monousurio (ele perguntar por
uma senha, mas voc j a conhece)
Remonte sua partio raz (/) usando o comando mount.
# mount -o remount,rw /
Altere a senha do usurio root com o comando passwd (como voc o superusurio, o
sistema no perguntar a senha anterior).
11.1.16
Como posso configurar um servio para meus usurios sem lhes dar uma
conta de acesso ao shell?
Por exemplo, se voc quer configurar um servio POP, voc no precisar definir uma conta
para cada usurio que esteja usando. melhor configurar uma autenticao baseada em diretrio atravs de um servio externo (como Radius, LDAP ou banco de dados SQL). Apenas instale a biblioteca PAM apropriada (libpam-radius-auth, libpam-ldap, libpam-pgsql
ou libpam-mysql), leia a documentao (para iniciantes, veja Autenticao do Usurio:
PAM on page 47) e configure o servio que ser ativado pelo PAM para usar o mtodo de
autenticao que escolheu. Isto feito editando-se os arquivos sob o diretrio /etc/pam.d/
para seu servio e modificando o
auth
required
required
pam_ldap.so
No caso de diretrios LDAP, alguns servios oferecem esquemas LDAP que devem ser includos em seu diretrio e so necessrios para a utilizao de autenticao LDAP. Se estiver
usando um banco de dados relacional, uma dica til usar a clusula where quando estiver
configurando os mdulos do PAM. Por exemplo, se tiver um banco de dados com os seguintes
atributos na tabela:
172
(user_id, user_name, realname, shell, password, UID, GID, homedir, sys, pop,
Tornando os servios campos de atributos boleanos, voc poder usa-los para permitir ou negar acesso a diferentes servios apenas inserindo as linhas apropriadas nos seguintes arquivos:
/etc/pam.d/imap:where=imap=1.
/etc/pam.d/qpopper:where=pop=1.
/etc/nss-mysql*.conf:users.where_clause = user.sys = 1;.
/etc/proftpd.conf:SQLWhereClause ftp=1.
11.2
11.2.1
Muitos scanners de avaliao de vulnerabilidades indicaro falso positivos quando forem usados em sistemas Debian, pois podem somente usar checagem de verses para determinar se
uma determinada verso de pacote vulnervel, mas realmente no testam a vulnerabilidade
de segurana propriamente dita. Pois a Debian no muda os nmeros de verses quando
corrige um pacote (muitas vezes a correo feita em verses novas so reproduzidas nas atuais), algumas ferramentas tendem a achar que um sistema Debian atualizado est vulnervel,
quando no est.
Se voc acha que o seu sistema est atualizado com patches de segurana, voc pode querer
usar as referncias cruzadas com o banco de dados de vulnerabilidades publicados com os
DSAs (veja Debian Security Advisories on page 114) para afastar a possibilidade de falsos
positivos, se a ferramenta que estiver usando inclui referncias do CVE.
11.2.2
Um trao de ataque nem sempre significa que seu sistema foi comprometido, e voc dever
fazer os passos tradicionais para determinar se o sistema est comprometido (veja Depois
do comprometimento do sistema (resposta a incidentes) on page 155). Tambm, note que
o fato de ver os ataques nos logs pode significar que seu sistema est vulnervel a ele (um
invasor determinado pode ter usado outras vulnerabilidades que no sejam a que voc viu, no
entanto).
11.2.3
173
Dec 30 07:33:36 debian -- MARK -Dec 30 07:53:36 debian -- MARK -Dec 30 08:13:36 debian -- MARK -Isto no indica qualquer tipo de comprometimento e os usurios que esto mudando de verso
da Debian devem achar isto estranho. Se o seu sistema no tem uma carga alta (ou muitos
servios ativos), estas linhas devem aparecer entre seus logs. Isto uma indicao que seu
daemon do syslogd est sendo executado de forma apropriada. Texto extrado da pgina de
manual syslogd(8):
-m intervalo
O syslogd registra uma marca de horrio regularmente. O
intervalo padro entre duas linhas -- MARK -- de 20 minutos.
Isto pode ser alterado com esta opo.
O intervalo de zero, desativa totalmente este recurso.
11.2.4
No se preocupe muito. Verifique para ver se estas mensagens so devido a tarefas do cron
(normalmente /etc/cron.daily/find ou logrotate):
$ grep 25 /etc/crontab
25 6
* * *
root
test -e /usr/sbin/anacron || run-parts --report
/etc/cron.daily
$ grep nobody /etc/cron.daily/*
find:cd / && updatedb --localuser=nobody 2>/dev/null
11.2.5
1
1
1
1
12:35:25
12:36:25
12:37:25
13:43:11
linux
linux
linux
linux
kernel:
kernel:
kernel:
kernel:
possible
possible
possible
possible
SYN
SYN
SYN
SYN
flooding
flooding
flooding
flooding
on
on
on
on
port
port
port
port
X.
X.
X.
X.
Sending
Sending
Sending
Sending
Verifique se existe um nmero alto de conexes ao servidor usando o netstat, por exemplo:
cookie
cookie
cookie
cookie
174
11.2.6
Estas so devido a uma tarefa do cron sendo executada (neste exemplo, a cada cinco minutos).
Para determinar que programa responsvel por estas tarefas, verifique as tarefas nos diretrios: /etc/crontab, /etc/cron.d, /etc/crond.daily e do root crontab sob /var
/spool/cron/crontabs.
11.2.7
175
Notifique seu CERT (http://www.cert.org) local (caso ele exista, caso contrrio voc
dever considerar o contato direto com o CERT). Isto pode ou no ajudar voc, mas, pelo
menos, informar o CERT de ataques que estejam acontecendo. Esta informao muito
valiosa em determinar que ferramentas e ataques esto sendo usados pela comunidade
chapu preto.
11.2.8
Olhando os logs (caso no tenham sido mexidos) usando sistemas de deteco de intruso
(veja Configure um sistema de Deteco de Intrusos on page 147), traceroute, whois e
ferramentas parecidas (incluindo anlise forense), voc pode ser capaz de detectar um ataque
at a sua origem. O mtodo que pode reagir a esta informao depende solenemente de sua
poltica de segurana e o que voc considera um ataque. Um scan remoto um ataque? um
teste de vulnerabilidade um ataque?
11.2.9
11.2.10
Ao invs de atualizar para uma verso nova, a Debian adapta as correes para a verso que
fornecida com o lanamento estvel. A razo disto para ter certeza que o lanamento estvel
altere o mnimo possvel, assim as coisas no alteraro ou quebraro de forma inesperada como
resultado de uma correo de falha. Voc pode verificar se est executando uma verso segura
de pacote olhando nos logs de alteraes do pacote ou comparando seu nmero de verso
exato (verso do autor - trao- lanamento da Debian) com o nmero de verso indicado no
aviso de segurana da Debian.
11.2.11
176
Programas especficos
11.3
11.3.1
a informao enviada pelo Time de segurana da Debian (veja abaixo) com relao a descoberta e correo de uma vulnerabilidade relacionada a segurana em um pacote disponvel
na Debian GNU/Linux. DSAs assinados so enviados lista de discusses pblicas (debiansecurity-announce) e postados no web site da Debian (ambos na pgina inicial e na rea de
segurana (http://www.debian.org/security/)).
OS DSAs incluem informaes sobre o pacote afetado, o problema de segurana descoberto e
onde obter pacotes atualizados (com seus respectivos clculos MD5).
11.3.2
mais provvel que este problema esteja sendo causado por algo em sua mquina. A lista
debian-security-announce (http://www.debian.org/security/faq) tem um filtro que
somente permite postagem de mensagens de um dos membros do time de segurana da Debian.
mais provvel que algumas peas do software de e-mail estejam alterando as mensagens,
quebrando assim a assinatura. Tenha certeza que seu programa no faa qualquer encodificao ou decodificao MIME ou converso de tab/espaos.
Acusados conhecidos so fetchmail (com a opo mimedecode ativada), formail (somente do
procmail 3.14) e o evolution.
11.3.3
177
Assim que o time de segurana recebe a notificao de um incidente, um dos membros revisa
e considera o impacto no lanamento estvel da Debian (i.e. se vulnervel ou no). Se o
seu sistema vulnervel, ns trabalharemos para corrigir o problema. O mantenedor do pacote tambm contactado, caso ele j no tenha contactado o time de segurana. Finalmente,
a correo testada e novos pacotes so preparados, que ento so compilados em todas as
arquiteturas estveis e aps isto feito o upload. Aps isto feito, um aviso de segurana publicado.
11.3.4
A regra de conduta mais importante quando criar um novo pacote que corrige um problema de
segurana fazer menos alteraes possveis. Nossos usurios e desenvolvedores se preocupam com o exato comportamento de um lanamento quando feito, assim qualquer alterao
que ns fazemos, pode possivelmente tornar o programa no funcional no sistema de algum.
Isto especialmente verdadeiro no caso de bibliotecas: tenha certeza de nunca alterar a interface de aplicao do programa (API) ou a interface de aplicao do Binrio (ABI), no importa
quanto pequena a alterao seja.
Isto significa que no uma boa soluo mover para uma nova verso do autor do pacote, ao
invs disto as alteraes importantes devem ser feitas na verso atual (backportadas). Geralmente os autores ajudam se necessrio, seno o time de segurana da Debian poder ser capaz
de ajudar.
Em alguns casos no possvel adaptar uma atualizao de segurana para uma verso antiga,
por exemplo, quando foi necessria a alterao de uma grande quantidade de cdigo fonte. Se
isto acontecer, necessrio mover para uma nova verso do autor, mas isto deve ser coordenado de forma muito pr ativa com o time de segurana.
11.3.5
Quebras de segurana na distribuio estvel garante um pacote em security.debian.org. Qualquer outra coisa no. O tamanho do comprometimento no o problema real aqui. Normalmente o time de segurana preparar pacotes juntos com o mantenedor do pacote. Fornecendo
os rastros dos testes de algum (confivel) sobre o problema e tendo todos os pacotes necessrios compilados e enviados para o time de segurana, at mesmo problemas de segurana
simples faro o pacote ser enviado para security.debian.org. Por favor, veja baixo.
11.3.6
Ao invs de atualizar para uma nova verso, ns adaptamos as correes para a verso estvel
que fornecida com o lanamento estvel. A razo para fazermos isto para ter certeza que
178
a verso estvel mude o mnimo possvel assim as coisas no sero alteradas ou quebraro
de forma inesperada como resultado de um problema de segurana. Voc poder verificar se
est executando uma verso segura de um pacote olhando nos logs de alteraes do pacote
(changelog), ou comparando seu nmero de verso exato com o nmero de verso indicado
no aviso de segurana da Debian (DSA).
11.3.7
11.3.8
Eu uso uma verso antiga da Debian, ela suportada pelo time de segurana?
No. Infelizmente o time de segurana da Debian no pode tomar conta de ambos os lanamentos estveis (oficialmente, tambm a unstable) e outros lanamentos antigos. No entanto,
voc poder esperar por atualizaes de segurana por um perodo limitado de tempo (normalmente alguns meses) imediatamente seguindo o lanamento de uma nova distribuio da
Debian.
11.3.9
11.3.10
Diversos distribuidores (a maioria de GNU/Linux, mas tambm de BSD e derivados) coordenam avisos de segurana para alguns incidentes e concordam em ter uma limite de tempo
particular de lanamento, assim todos os distribuidores so capazes de lanar um aviso em
conjunto. Isto foi decidido com a inteno de no existirem discriminaes entre alguns distribuidores que precisam de mais tempo (e.g. quando o distribuidor passou pacotes atravs de
grandes testes de qualidade ou precisa manter o suporte a diversas arquiteturas ou distribuies binrios). Nosso prprio time de segurana tambm prepara avisos de forma pr ativa.
179
Toda vez que estiver acontecendo, outros problemas de segurana sero analisados antes de
um aviso ser lanado, e assim deixando alguns nmeros de avisos de lado temporariamente.
11.3.11
11.3.12
Qual
a
diferena
security@lists.debian.org?
entre
security@debian.org
debian-
Quando envia uma mensagem para security@debian.org, ela enviada apara a lista de discusso de desenvolvedores (debian-private). Todos os desenvolvedores da Debian esto inscritos
nesta lista e as postagens so mantidas privadas (i.e. no so arquivadas no site pblico da
internet). A lista de discusso pblica, debian-security@lists.debian.org, aberta para qualquer pessoa que deseja se inscrever (http://www.debian.org/MailingLists/) e existem arquivos que podem ser pesquisados disponveis aqui (http://lists.debian.org/
search.html).
11.3.13
Contribuindo com este documento, corrigindo pargrafos marcados com FIXME ou fornecendo novos contedos. A documentao importante e reduz a carga de perguntas
de assuntos simples. A traduo desta documentao em outros idiomas tambm de
grande ajuda.
Empacotando aplicativos que so teis para a checagem e fortalecimento de um sistema
Debian GNU/Linux. Se no for um desenvolvedor, envie uma falha sobre o WNPP
(http://www.debian.org/devel/wnpp/) e pergunte pelo software que acha que
poderia ser til, mas que atualmente no fornecido.
Audite os programas na Debian ou resolva bugs de segurana e reporte assuntos para
security@debian.org. Trabalhar em outros projetos como o Projeto de Auditoria e Segurana do Kernel do Linux (http://kernel-audit.sourceforge.net/) ou o Projeto de Segurana e Auditoria do Linux (http://www.lsap.org/) tambm aumenta a
segurana da Debian GNU/Linux, pois as contribuies eventualmente tambm ajudaro aqui.
Em todos os casos, po favor revise cada problema antes de envi-lo para security@debian.org.
Se for capaz de fornecer patches, isto aceleraria o processo. No redirecione mensagens de
180
11.3.14
11.3.15
No, o time de segurana da Debian no verifica cada pacote e no existe um mtodo de checagem automtico (lintian) para detectar novos pacotes maliciosos, pois estas tarefas so quase
impossveis de serem detectadas automaticamente. Mantenedores, no entanto, so completamente responsveis pelos pacotes que adicionam na Debian, e todos os pacotes so primeiramente assinados por um desenvolvedor autorizado. O desenvolvedor tem a responsabilidade
de analisar a segurana de todos os pacotes que ele mantm.
11.3.16
O time de segurana da Debian trabalha rapidamente para enviar avisos e produzir pacotes corrigidos para o repositrio estvel assim que uma vulnerabilidade descoberta.
Um relatrio pblicado na lista de discusso debian-security (http://lists.debian.
org/debian-security/2001/debian-security-200112/msg00257.html) mostrou
que no ano de 2001, houve uma mdia de 35 dias para corrigir problemas relacionados a segurana. No entanto, 50% dos problemas foram solucionados em um intervalo de 10 dias, e 15%
dos problemas foram corrigidos no mesmo dia quando o aviso foi lanado.
No entanto, quando perguntam esta questo as pessoas tendem a se esquecer que:
Os DSAs no so enviados at que:
os pacotes estejam disponveis para todas as arquiteturas suportadas pela Debian (o
que leva muito tempo para pacotes que so partes do ncleo do sistema, especialmente considerando o nmero de arquiteturas suportadas pelo lanamento estvel).
novos pacotes so constantemente testados para ter certeza que nenhuma nova falha
foi introduzida
Os pacotes devem ser disponibilizados antes do DSA ser enviado (na queue incoming ou
nos mirrors).
O Debian um projeto baseado em trabalho voluntrio.
A Debian licenciada com uma clusula sem garantias.
181
Se quiser uma anlise mais precisa do tempo que o time de segurana leva para trabalhar em
vulnerabilidades, voc dever considerar que os novos DSAs (veja Debian Security Advisories on page 114) publicados no website de segurana (http://security.debian.org), e
os metadados usado para ger-los, incluem links para bancos de dados de vulnerabilidades.
Voc poder baixar os fontes do servidor web (a partir do CVS (http://cvs.debian.org))
ou usar as pginas HTML para determinar o tempo que a Debian levou para corrigir a vulnerabilidade e co-relacionar estes dados com bancos de dados pblicos.
182
183
Apndice A
Passo-a-passo do processo de
fortalecimento
Abaixo est uma ps-instalao, um procedimento passo-a-passo para tornar no sistema Debian 2.2 GNU/Linux mais seguro. Esse procedimento uma alternativa para tornar os servios
de redes mais seguros. Ser mostrado o processo completo do que deve ser feito durante a configurao. Tambm, veja Checklist de configurao on page 187.
Instale o sistema, levando em conta as informaes sobre o particionamento que foi citada anteriormente neste documento. Depois da instalao bsica, v instalao personalizada. No selecione os pacotes de tarefa. Selecione senhas no formato shadow.
Usando dselect, exclua todos os pacotes desnecessrios, exceto os selecionados, antes
de proceder com o [I]nstall. Mantenha um nmero reduzido de pacotes para o sistema.
Atualize todos os softwares para a ltima verso disponvel dos pacotes em security.debian.org como explicado anteriormente em Executar uma atualizao de segurana on page 40.
Implementar as sugestes apresentadas neste manual com relao s cotas de usurios,
definies de login e lilo
Fazer uma lista de servios que esto rodando no seu sistema. Tente:
$ ps -aux
$ netstat -pn -l -A inet
# /usr/sbin/lsof -i | grep LISTEN
Voc precisar instalar o lsof-2.2 para o terceiro comando acima funcionar (execute
como super-usurio). Voc deve estar ciente de que o lsof pode traduzir a palavra
LISTEN para suas configuraes de localizao.
184
Para excluir servios desnecessrios, primeiro determine qual pacote fornece o servio
e como ele inicializado. Isto pode ser feito verificando os programas que escutam no
soquete. O shell script abaixo, que utiliza os programas lsof e dpkg, faz isso:
#!/bin/sh
# FIXME: this is quick and dirty; replace with a more robust script s
for i in sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u ; do
pack=dpkg -S $i |grep bin |cut -f 1 -d : | uniq
echo "Service $i is installed by $pack";
init=dpkg -L $pack |grep init.d/
if [ ! -z "$init" ]; then
echo "and is run by $init"
fi
done
Se voc encontrar algum servio desnecessrio, exclua o pacote associado (com dpkg
-purge), ou desabilite a inicializao automtica durante a fase de boot usando o comando update-rc.d (veja Desabilitando daemons de servio on page 33).
Para os servios inetd (iniciados pelo superdaemon), verifique quais servios esto ativados em /etc/inetd.conf atravs de:
$ grep -v "^#" /etc/inetd.conf | sort -u
Ento desative estes servios desnecessrios comentando a linha referente em /etc
/inetd.conf, excluindo o pacote ou utilizando o comando update-inetd.
Se voc utiliza servios wrapped (aqueles que utilizam /usr/sbin/tcpd), verifique
se os arquivos /etc/hosts.allow e /etc/hosts.deny so configurados de acordo
com sua poltica de servio.
Se o servidor usa mais que uma interface externa, dependendo do seu servio, voc pode
limitar o servio para escutar em uma interface especfica. Por exemplo, se voc quiser
somente acesso interno para o FTP, voc deve configurar o daemon FTP para escutar
somente na sua interface de gerncia, no em todas interfaces (i.e, 0.0.0.0:21).
Reinicie o computador, ou troque o modo de single user para multiuser usando os comandos:
$ init 1
(....)
$ init 2
Ento verifique agora os servios que esto disponveis, e se necessrio, repita os passos
acima.
185
Agora instale os servios necessrios, se no tiver feito isso ainda, e os configure corretamente.
Use o comando shell abaixo para determinar com que usurio cada servio disponvel
est sendo executado:
186
187
Apndice B
Checklist de configurao
Este apndice retrata resumidamente os pontos de outras sees neste manual em um checklist no formato. A idia disponibilizar um sumrio para a pessoa que j leu o manual buscar uma informao rapidamente. Existem outros checklists bons disponveis, incluindo o Securing Linux Step by Step (http://seifried.org/security/os/linux/
20020324-securing-linux-step-by-step.html) de Kurt Seifried e CERTs Unix Security Checklist (http://www.cert.org/tech_tips/usc20_full.html).
FIXME: Isso baseado na verso 1.4 do manual e talvez precise de atualizao.
Limite o acesso fsico e as capacidade de inicializao
Ative a senha de BIOS
Desative a inicializao por floppy/cdrom/. . .
Configure uma senha para o LILO ou GRUB (/etc/lilo.conf ou /boot/grub
/menu.lst, respectivamente); verifique se o arquivo de configurao do LILO ou
GRUB est protegido contra gravao.
No permita a inicializao MBR pelo disquete sobrescrevendo a MBR (talvez no?)
Particionamento
Separe os dados de escrita do usurio, dados que no so do sistema, e dados que
so trocados rapidamente em tempo de execuo para suas prprias parties
Configure as opes de mount nosuid,noexec,nodev em /etc/fstab na parties ext2 como /tmp.
Higiene de senhas e segurana no login
Configure uma senha segura para o super-usurio
Ative o MD5 e o shadow de senha
Instale e use o PAM
188
* Adicione suporte MD5 para o PAM e tenha certeza que (falando de forma generalizada) as entradas nos arquivos em /etc/pam.d/ que garantem acesso
mquina tenham o segundo campo configurado como requisite ou
required.
* Modifique o /etc/pam.d/login para permite somente logins locais para o
super-usurio.
* Tambm marque tty:s autorizado em /etc/security/access.conf e geralmente configure este arquivo para limitar ao mximo possvel o login do
super-usurio.
* Adicione o mdulo pam_limits.so se voc deseja configurar os limites por usurios
* Modifique /etc/pam.d/passwd: configure o tamanho mnimo para as senhas
(6 caracteres talvez) e ative o MD5
* Adicione o grupo wheel para /etc/group se desejar; adicione a entrada
pam_wheel.so group=wheel para /etc/pam.d/su
* Para controles customizados por usurios, utilize o mdulo pam_listfile.so
* Tenha um arquivo /etc/pam.d/other e o configure com um grau de segurana reforado
Configure limites em /etc/security/limits.conf (note que /etc/limits
no usado se voc j estiver usando o PAM)
Aumente a segurana em /etc/login.defs; tambm, se voc ativar o MD5 e/ou
PAM, tenha certeza de fazer tambm as alteraes correspondentes aqui, tambm
Desative o acesso ftp ao super-usurio em /etc/ftpusers
Desative login de rede ao super-usurio; use o su(1) ou sudo(1). (considere instalar o sudo)
Usar o PAM para reforar barreiras adicionais aos logins?
Outras questes de segurana local
Modificaes no kernel (veja Configurando caractersticas de rede do kernel on
page 72)
Patches no Kernel (veja Adicionando patches no kernel on page 64)
Tighten up log file permissions (/var/log/{last,fail}log, Apache logs)
Certifique-se que a verificao
/checksecurity.conf
SETUID
est
ativada
em
/etc
189
190
191
Apndice C
apache_1.3.20-1_i386.deb
debconf_0.9.77_all.deb
dialog_0.9a-20010527-1_i386.deb
fileutils_4.1-2_i386.deb
klogd_1.4.1-2_i386.deb
libbz2-1.0_1.0.1-10_i386.deb
libc6_2.2.3-6_i386.deb
libdb2_2.7.7-8_i386.deb
libdbd-mysql-perl_1.2216-2_i386.deb
libdbi-perl_1.18-1_i386.deb
libexpat1_1.95.1-5_i386.deb
libgdbmg1_1.7.3-27_i386.deb
libmm11_1.1.3-4_i386.deb
libmysqlclient10_3.23.39-3_i386.deb
libncurses5_5.2.20010318-2_i386.deb
libpcap0_0.6.2-1_i386.deb
libpcre3_3.4-1_i386.deb
libreadline4_4.2-3_i386.deb
libstdc++2.10-glibc2.2_2.95.4-0.010703_i386.deb
logrotate_3.5.4-2_i386.deb
mime-support_3.11-1_all.deb
mysql-client_3.23.39-3_i386.deb
mysql-common_3.23.39-3.1_all.deb
mysql-server_3.23.39-3_i386.deb
perl-base_5.6.1-5_i386.deb
perl-modules_5.6.1-5_all.deb
perl_5.6.1-5_i386.deb
php4-mysql_4.0.6-4_i386.deb
php4_4.0.6-1_i386.deb
php4_4.0.6-4_i386.deb
snort_1.7-9_i386.deb
sysklogd_1.4.1-2_i386.deb
zlib1g_1.1.3-15_i386.deb
Pacotes instalados (dpkg -l):
ii
ii
ii
ii
ii
ii
ii
ii
ii
adduser
ae
apache
apache-common
apt
base-config
base-files
base-passwd
bash
3.39
962-26
1.3.20-1
1.3.20-1
0.3.19
0.33.2
2.2.0
3.1.10
2.03-6
192
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
bsdutils
console-data
console-tools
console-toolscron
debconf
debianutils
dialog
diff
dpkg
e2fsprogs
elvis-tiny
fbset
fdflush
fdutils
fileutils
findutils
ftp
gettext-base
grep
gzip
hostname
isapnptools
joe
klogd
ldso
libbz2-1.0
libc6
libdb2
libdbd-mysql-p
libdbi-perl
libexpat1
libgdbmg1
libmm11
libmysqlclient
libncurses5
libnewt0
libpam-modules
libpam-runtime
libpam0g
libpcap0
libpcre3
libpopt0
libreadline4
libssl09
libstdc++2.10
2.10f-5.1
1999.08.29-11.
0.2.3-10.3
0.2.3-10.3
3.0pl1-57.2
0.9.77
1.13.3
0.9a-200105272.7-21
1.6.15
1.18-3.0
1.4-11
2.1-6
1.0.1-5
5.3-3
4.1-2
4.1-40
0.10-3.1
0.10.35-13
2.4.2-1
1.2.4-33
2.07
1.21-2
2.8-15.2
1.4.1-2
1.9.11-9
1.0.1-10
2.2.3-6
2.7.7-8
1.2216-2
1.18-1
1.95.1-5
1.7.3-27
1.1.3-4
3.23.39-3
5.2.20010318-2
0.50-7
0.72-9
0.72-9
0.72-9
0.6.2-1
3.4-1
1.4-1.1
4.2-3
0.9.4-5
2.95.2-13
193
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
libstdc++2.10libwrap0
lilo
locales
login
makedev
mawk
mbr
mime-support
modutils
mount
mysql-client
mysql-common
mysql-server
ncurses-base
ncurses-bin
netbase
passwd
pciutils
perl
perl-base
perl-modules
php4
php4-mysql
ppp
pppconfig
procps
psmisc
pump
sed
setserial
shellutils
slang1
snort
ssh
sysklogd
syslinux
sysvinit
tar
tasksel
tcpd
telnet
textutils
update
util-linux
zlib1g
2.95.4-0.01070
7.6-4
21.4.3-2
2.1.3-18
19990827-20
2.3.1-46.2
1.3.3-5
1.1.2-1
3.11-1
2.3.11-13.1
2.10f-5.1
3.23.39-3
3.23.39-3.1
3.23.39-3
5.0-6.0potato1
5.0-6.0potato1
3.18-4
19990827-20
2.1.2-2
5.6.1-5
5.6.1-5
5.6.1-5
4.0.6-4
4.0.6-4
2.3.11-1.4
2.0.5
2.0.6-5
19-2
0.7.3-2
3.02-5
2.17-16
2.0-7
1.3.9-1
1.7-9
1.2.3-9.3
1.4.1-2
1.48-2
2.78-4
1.13.17-2
1.0-10
7.6-4
0.16-4potato.1
2.0-2
2.11-1
2.10f-5.1
1.1.3-15
194
195
Apndice D
Prximo passo, adicione as opes corretas na seo IP: Netfilter Configuration. Ento, compile
e instale o kernel. Se voc quiser fazer isso no jeito do Debian, instale o kernel-package e
execute make-kpkg para criar um pacote Debian customizado do kernel que possa ser instalado no servidor usando o dpkg. Uma vez que o novo kernel compilado e instalado, instale
o pacote bridge-utils.
Quando estes passos forem feitos, voc pode completar a configurao de sua ponte. A prxima seo apresenta duas possveis configuraes para a ponte, cada uma com um mapa de
rede hipottico e os comandos necessrios.
D.1
A primeira configurao usa a ponte como um firewall com traduo de endereos de rede
(NAT) que protege o servidor e os clientes da rede interna. Um diagrama da configurao da
rede mostrado abaixo:
196
( transparent firewall ).
your real gateway on the
config a gateway on your
for the other computers.
D.2
Uma segunda possvel configurao um sistema que funciona como um firewall transparente
para a LAN com um espao de endereos IP pblicos.
197
|
|---- Mail Server (62.3.3.27 gw 62.3.3
Os seguintes comando mostram como esta ponte pode ser configurada.
# Create the interface br0
/usr/sbin/brctl addbr br0
# Add the Ethernet interface to use with the bridge
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
# Start up the Ethernet interface
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
#
#
#
#
#
( transparent firewall ).
your real gateway on the
config a gateway on your
for the other computers.
D.3
As regras bsicas a seguir podem ser usadas em qualquer uma das duas configuraes mostradas acima.
iptables
iptables
iptables
iptables
#
#
#
#
#
-F
-P
-A
-A
FORWARD
FORWARD DROP
FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state --state I
FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
198
199
Apndice E
200
USER=named
GROUP=named
INITD=/etc/init.d/bind
INITDBAK=$INITD.preuserchange
INITDERR=$INITD.changeerror
START="start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g $GROUP
AWKS="awk /start-stop-daemon --start/ { print \"$START\"; noprint = 1; };
[ id -u -ne 0 ] && {
echo "This program must be run by the root user"
exit 1
}
RUNUSER=ps -eo user,fname |grep named |cut -f 1 -d " "
if [ "$RUNUSER" = "$USER" ]
then
echo "WARN: The name server running daemon is already running as $USER"
echo "ERR: This script will not many any changes to your setup."
exit 1
fi
if [ ! -f $INITD ]
then
echo "ERR: This system does not have $INITD (which this script tries to ch
RUNNING=ps -eo fname |grep named
[ -z "$RUNNING" ] && \
echo "ERR: In fact the name server daemon is not even running (is it i
echo "ERR: No changes will be made to your system"
exit 1
fi
# Check if named group exists
if [ -z "grep $GROUP /etc/group" ]
then
echo "Creating group $GROUP:"
addgroup $GROUP
else
echo "WARN: Group $GROUP already exists. Will not create it"
fi
201
echo "WARN: The script $INITD has been changed, trying to test the changes."
echo "Restarting the named daemon (check for errors here)."
$INITD restart
if [ $? -ne 0 ]
then
echo "ERR: Failed to restart the daemon."
restore
exit 1
fi
202
if [ "$RUNUSER" = "$USER" ]
then
echo "All has gone well, named seems to be running now as $USER."
else
echo "ERR: The script failed to automatically change the system."
echo "ERR: Named is currently running as $RUNUSER."
restore
exit 1
fi
exit 0
O script anterior, execute-o no bind customizado do Woody (Debian 3.0), ir produzir o arquivo initd abaixo depois de criar o usurio e grupo named:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
test -x /usr/sbin/named || exit 0
start () {
echo -n "Starting domain name service: named"
start-stop-daemon --start --quiet \
--pidfile /var/run/named.pid --exec /usr/sbin/named
echo "."
}
stop () {
echo -n "Stopping domain name service: named"
# --exec doesnt catch daemons running deleted instances of named,
# as in an upgrade. Fortunately, --pidfile is only going to hit
# things from the pidfile.
start-stop-daemon --stop --quiet \
--pidfile /var/run/named.pid --name named
echo "."
}
case "$1" in
start)
start
;;
stop)
stop
203
;;
restart|force-reload)
stop
sleep 2
start
;;
reload)
/usr/sbin/ndc reload
;;
*)
echo "Usage: /etc/init.d/bind {start|stop|reload|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
204
205
Apndice F
destination
206
destination
destination
destination
security.debian.org
anywhere
LOG level warnin
207
Apndice G
G.1
Voc pode facilmente criar um ambiente restrito com o pacote makejail, j que ele automaticamente segue as trilhas do servidor daemon (com strace) e faz com que ele execute em um
ambiente restrito.
A vantagem de programas que automaticamente geram um ambiente chroot que eles so
capazes de copiar qualquer pacote para o ambiente chroot (mesmo seguindo as dependncias
do pacote e certificar que foi completada). Ento, fornecer as aplicaes dos usurios bem
mais fcil.
Para configurar o ambiente usando os exemplos fornecidos pelo makejail, use o comando:
# makejail /usr/share/doc/makejail/examples/sshd.py
Leia o arquivo exemplo para ver que outras mudanas devem ser feitas para o ambiente. Algumas dessas mudanas, como copiar os diretrios home do usurio, no podem ser feitas
automaticamente. Tambm limite a exposio de informaes sensveis, copiando os dados de
um certo nmero de usurios dos arquivos /etc/shadow ou /etc/group.
O seguinte exemplo de ambiente tem sido (levemente) testado, foi construdo com o arquivo
de configurao fornecido no pacote e inclue o pacote fileutils:
.
|-- bin
|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
|-|
-|-- dev
|
|-|
|-|
|-|
|-(...)
|
|-|
|-(...)
|
-|-- etc
|
|-|
|
|
|
|
|-|
|-|
|--
ash
bash
chgrp
chmod
chown
cp
csh -> /etc/alternatives/csh
dd
df
dir
fdflush
ksh
ln
ls
mkdir
mknod
mv
rbash -> bash
rm
rmdir
sh -> bash
sync
tcsh
touch
vdir
zsh -> /etc/alternatives/zsh
zsh4
null
ptmx
pts
ptya0
tty
tty0
urandom
alternatives
|-- csh -> /bin/tcsh
-- zsh -> /bin/zsh4
environment
hosts
hosts.allow
208
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|-|
|-|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|-|-|-|-|-|-|-|
|
|-|-|-|
|
|
|
|
|
|-|---
hosts.deny
ld.so.conf
localtime -> /usr/share/zoneinfo/Europe/Madrid
motd
nsswitch.conf
pam.conf
pam.d
|-- other
-- ssh
passwd
resolv.conf
security
|-- access.conf
|-- chroot.conf
|-- group.conf
|-- limits.conf
|-- pam_env.conf
-- time.conf
shadow
shells
ssh
|-- moduli
|-- ssh_host_dsa_key
|-- ssh_host_dsa_key.pub
|-- ssh_host_rsa_key
|-- ssh_host_rsa_key.pub
-- sshd_config
home
-- userX
lib
|-- ld-2.2.5.so
|-- ld-linux.so.2 -> ld-2.2.5.so
|-- libc-2.2.5.so
|-- libc.so.6 -> libc-2.2.5.so
|-- libcap.so.1 -> libcap.so.1.10
|-- libcap.so.1.10
|-- libcrypt-2.2.5.so
|-- libcrypt.so.1 -> libcrypt-2.2.5.so
|-- libdl-2.2.5.so
|-- libdl.so.2 -> libdl-2.2.5.so
|-- libm-2.2.5.so
|-- libm.so.6 -> libm-2.2.5.so
|-- libncurses.so.5 -> libncurses.so.5.2
|-- libncurses.so.5.2
|-- libnsl-2.2.5.so
|-- libnsl.so.1 -> libnsl-2.2.5.so
209
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|---
libnss_compat-2.2.5.so
libnss_compat.so.2 -> libnss_compat-2.2.5.so
libnss_db-2.2.so
libnss_db.so.2 -> libnss_db-2.2.so
libnss_dns-2.2.5.so
libnss_dns.so.2 -> libnss_dns-2.2.5.so
libnss_files-2.2.5.so
libnss_files.so.2 -> libnss_files-2.2.5.so
libnss_hesiod-2.2.5.so
libnss_hesiod.so.2 -> libnss_hesiod-2.2.5.so
libnss_nis-2.2.5.so
libnss_nis.so.2 -> libnss_nis-2.2.5.so
libnss_nisplus-2.2.5.so
libnss_nisplus.so.2 -> libnss_nisplus-2.2.5.so
libpam.so.0 -> libpam.so.0.72
libpam.so.0.72
libpthread-0.9.so
libpthread.so.0 -> libpthread-0.9.so
libresolv-2.2.5.so
libresolv.so.2 -> libresolv-2.2.5.so
librt-2.2.5.so
librt.so.1 -> librt-2.2.5.so
libutil-2.2.5.so
libutil.so.1 -> libutil-2.2.5.so
libwrap.so.0 -> libwrap.so.0.7.6
libwrap.so.0.7.6
security
|-- pam_access.so
|-- pam_chroot.so
|-- pam_deny.so
|-- pam_env.so
|-- pam_filter.so
|-- pam_ftp.so
|-- pam_group.so
|-- pam_issue.so
|-- pam_lastlog.so
|-- pam_limits.so
|-- pam_listfile.so
|-- pam_mail.so
|-- pam_mkhomedir.so
|-- pam_motd.so
|-- pam_nologin.so
|-- pam_permit.so
|-- pam_rhosts_auth.so
|-- pam_rootok.so
|-- pam_securetty.so
210
|
|
|
|
|
|
|
|
|
|
|
|
|-|
|-|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--
|-|-|-|-|-|-|-|-|-|-|---
pam_shells.so
pam_stress.so
pam_tally.so
pam_time.so
pam_unix.so
pam_unix_acct.so -> pam_unix.so
pam_unix_auth.so -> pam_unix.so
pam_unix_passwd.so -> pam_unix.so
pam_unix_session.so -> pam_unix.so
pam_userdb.so
pam_warn.so
pam_wheel.so
sbin
-- start-stop-daemon
usr
|-- bin
|
|-- dircolors
|
|-- du
|
|-- install
|
|-- link
|
|-- mkfifo
|
|-- shred
|
|-- touch -> /bin/touch
|
-- unlink
|-- lib
|
|-- libcrypto.so.0.9.6
|
|-- libdb3.so.3 -> libdb3.so.3.0.2
|
|-- libdb3.so.3.0.2
|
|-- libz.so.1 -> libz.so.1.1.4
|
-- libz.so.1.1.4
|-- sbin
|
-- sshd
-- share
|-- locale
|
-- es
|
|-- LC_MESSAGES
|
|
|-- fileutils.mo
|
|
|-- libc.mo
|
|
-- sh-utils.mo
|
-- LC_TIME -> LC_MESSAGES
-- zoneinfo
-- Europe
-- Madrid
var
-- run
|-- sshd
211
212
-- sshd.pid
27 directories, 733 files
G.2
2
8
1
1
1
1
1
1
1
./etc:
total 24
drwxr-xr-x
2 root
root
guest
root
root
root
root
root
root
root
root
guest
root
root
root
root
root
root
root
root
4096
4096
531160
43916
16684
23960
9916
24780
4
Mar
Mar
Feb
Nov
Nov
Mar
Jul
Nov
Mar
18
15
6
29
29
18
26
29
30
13:36
16:53
22:36
13:19
13:19
13:36
2001
13:19
16:29
.
..
bash
ls
mkdir
more
pwd
rm
sh -> bash
drwxr-xr-x
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--
8
1
1
1
1
guest
root
root
root
root
./lib:
total 1848
drwxr-xr-x
2 root
drwxr-xr-x
8 guest
-rwxr-xr-x
1 root
-rwxr-xr-x
1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
libnss_files.so.2
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
213
guest
root
root
root
root
4096
54
428
44
52
Mar
Mar
Mar
Mar
Mar
15
15
15
15
15
16:53
13:23
15:56
15:53
13:23
..
group
hosts
passwd
shells
root
guest
root
root
root
root
root
root
root
4096
4096
92511
1170812
20900
9436
248132
71332
34144
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
18
15
15
15
15
15
15
15
15
13:37
16:53
12:49
12:49
13:01
12:49
12:48
13:00
16:10
.
..
ld-linux.so.2
libc.so.6
libcrypt.so.1
libdl.so.2
libncurses.so.5
libnsl.so.1
root
root
root
root
root
29420
105498
25596
7760
24328
Mar
Mar
Mar
Mar
Mar
15
15
15
15
15
12:57
12:51
12:51
12:59
12:57
libpam.so.0
libpthread.so.0
librt.so.1
libutil.so.1
libwrap.so.0
4096
4096
4096
4096
Mar
Mar
Mar
Mar
15
15
15
15
13:00
16:53
15:55
15:37
.
..
bin
lib
4096
4096
10332
13052
25432
43768
218456
9692
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
15
15
15
15
15
15
15
15
15:55
13:00
15:55
13:13
12:40
15:15
12:40
13:17
.
..
env
id
scp
sftp
ssh
tty
./usr:
total 16
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
4
8
2
2
root
guest
root
root
root
guest
root
root
./usr/bin:
total 340
drwxr-xr-x
drwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-r-xr-xr-x
-rwxr-xr-x
-r-sr-xr-x
-rwxr-xr-x
2
4
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
./usr/lib:
total 852
drwxr-xr-x
drwxr-xr-x
2 root
4 root
root
root
-rw-r--r-1 root
libcrypto.so.0.9.6
-rw-r--r-1 root
-rwxr-xr-x
1 root
G.3
root
root
root
214
2
9
1
1
1
1
1
1
1
1
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
Observe que no existem arquivos SETUID. Isso torna mais difcil para usurios remotos fugir o ambiente
chroot. Entretanto, isso tambm previne que os usurios alterem suas senhas, j que o programa passwd no
pode modificar os arquivos /etc/passwd ou /etc/shadow.
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-r-xr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-r-xr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rws--x--x
-rwxr-xr-x
-rws--x--x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
./dev:
total 8
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
215
drwxr-xr-x 2 root
drwxr-xr-x 9 root
crw-r--r-- 1 root
./etc:
total 208
drwxr-xr-x 4 root
drwxr-xr-x 9 root
-rw------- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
drwxr-xr-x 2 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
drwxr-xr-x 2 root
-rw-r----- 1 root
-rw------- 1 root
-rw-r----- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw------- 1 root
-rw-r--r-- 1 root
-rw------- 1 root
-rw-r--r-- 1 root
-rw------- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
./etc/pam.d:
total 24
drwxr-xr-x 2 root
drwxr-xr-x 4 root
lrwxrwxrwx 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
-rw-r--r-- 1 root
./etc/security:
total 32
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
216
217
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
lrwxrwxrwx 1 root
lrwxrwxrwx 1 root
-rwxr-xr-x 1 root
drwxr-xr-x 2 root
./lib/security:
total 668
drwxr-xr-x 2 root
drwxr-xr-x 3 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
-rwxr-xr-x 1 root
./sbin:
total 3132
drwxr-xr-x 2 root
218
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
drwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
./tmp:
total 8
drwxr-xr-x
drwxr-xr-x
./usr:
total 8
drwxr-xr-x
drwxr-xr-x
lrwxrwxrwx
lrwxrwxrwx
lrwxrwxrwx
9
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
2
9
1
1
1
root
root
root
root
root
root
root
root
root
root
219
220
221
Apndice H
Introduao
O utilitrio chroot muitas vezes usado para enjaular um daemon dentro de uma estrutura
restrita. Voce pode us-lo para isolar um servio do outro, desta forma um problema de segurana em um pacote de software especfico no interfere em todo o servidor. A utilizao do
script makejail torna a configurao e atualizao da rvore enjaulada muito mais fcil.
FIXME: Apache tambm pode ser enjaulado usando http://www.modsecurity.
org que est disponvel em libapache-mod-security (para Apache 1.x) e
libapache2-mod-security (para Apache 2.x).
H.1.1
Licena
This document is copyright 2002 Alexandre Ratti. It has been dual-licensed and released under the GPL version 2 (GNU Public License) the GNU-FDL 1.2 (GNU Free Documentation
Licence) and is included in this manual with his explicit permission. (from the original document (http://www.gabuzomeu.net/alex/doc/apache/index-en.html))
H.2
Instalando o servidor
Este procedimento foi testado no Debian GNU/Linux 3.0 (Woody) com makejail 0.0.4-1 (em
Debian/testing).
Efetue o login como root e crie um novo diretrio para jaula:
$ mkdir -p /var/chroot/apache
Crie um novo usurio e novo grupo. O servidor Apache enjaulado ir executar com este
usurio/grupo, que no utilizado para mais nada no sistema. Neste exemplo, ambos
usurio e grupo so chamados de chrapach.
222
# cp /usr/share/doc/makejail/examples/apache.py /etc/makejail/
Edite o arquivo /etc/makejail/apache.py. Voc precisa alterar as opes chroot,
users e groups. Para executar esta verso do makejail, voc tambm pode adicionar a opo packages. Veja a documentao do makejail (http://www.floc.net/
makejail/current/doc/). Veja o exemplo mostrado abaixo:
chroot="/var/chroot/apache"
testCommandsInsideJail=["/usr/sbin/apachectl start"]
processNames=["apache"]
testCommandsOutsideJail=["wget -r --spider http://localhost/",
"lynx --source https://localhost/"]
preserve=["/var/www",
"/var/log/apache",
"/dev/log"]
users=["chrapach"]
groups=["chrapach"]
packages=["apache", "apache-common"]
userFiles=["/etc/password",
"/etc/shadow"]
groupFiles=["/etc/group",
"/etc/gshadow"]
forceCopy=["/etc/hosts",
"/etc/mime.types"]
223
224
APACHECTL=/usr/sbin/apachectl
trap "" 1
export LANG=C
export PATH
test -f $DAEMON || exit 0
test -f $APACHECTL || exit 0
# ensure we dont leak environment vars into apachectl
APACHECTL="env -i LANG=${LANG} PATH=${PATH} chroot $CHRDIR $APACHECTL"
if egrep -q -i "^[[:space:]]*ServerType[[:space:]]+inet" $CONF
then
exit 0
fi
case "$1" in
start)
echo -n "Starting web server: $NAME"
mount -t proc proc /var/chroot/apache/proc
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON \
--chroot $CHRDIR
;;
stop)
echo -n "Stopping web server: $NAME"
start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo
umount /var/chroot/apache/proc
;;
reload)
echo -n "Reloading $NAME configuration"
start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" \
--signal USR1 --startas $DAEMON --chroot $CHRDIR
;;
reload-modules)
echo -n "Reloading $NAME modules"
start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo \
--retry 30
start-stop-daemon --start --pidfile $PIDFILE \
--exec $DAEMON --chroot $CHRDIR
;;
restart)
225
$0 reload-modules
exit $?
;;
force-reload)
$0 reload-modules
exit $?
;;
*)
0.0
189
190
191
192
193
1.1
0.0
0.0
0.0
0.0
0.0
2936 1436 ? S
1.1 2960 1456
1.1 2960 1456
1.1 2960 1456
1.1 2960 1456
1.1 2960 1456
226
Certifique-se que os processos do Apache esto sendo executados na jaula chroot procurando no sistema de arquivo /proc: ls -la /proc/process_number/root/.
onde process_number um dos PID listados acima (por exemplo: segunda coluna; PID
189). As entradas para a rvore restrita devem ser listadas:
drwxr-sr-x
drwxrwsr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
dr-xr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
Para
automatizar
este
teste,
voc
pode
digitar:ls -la /proc/cat
/var/chroot/apache/var/run/apache.pid/root/.
FIXME: Add other tests that can be run to make sure the jail is closed?
A razo pela qual eu gosto disso que a configurao da jaula no to complicada e o servidor
pode ser atualizado em somente duas linhas:
H.3
Veja tambm
Se voc est procurando por mais informaes voc pode considerar as referncias que foram
utilizadas para fazer este tutorial:
makejail homepage (http://www.floc.net/makejail/) , this program was written
by Alain Tesio)
Chrooting
daemons
and
system
processes
HOWTO
(http://www.
nuclearelephant.com/papers/chroot.html) by Jonathan, Network Dweebs,
21/10/2002