Você está na página 1de 282

Hardening

em Linux
Sandro Melo

A RNP Rede Nacional de Ensino


e Pesquisa qualificada como
uma Organizao Social (OS),
sendo ligada ao Ministrio da
Cincia, Tecnologia e Inovao
(MCTI)

responsvel

pelo

Programa Interministerial RNP,


que conta com a participao dos
ministrios da Educao (MEC), da
Sade (MS) e da Cultura (MinC).
Pioneira no acesso Internet no
Brasil, a RNP planeja e mantm a
rede Ip, a rede ptica nacional
acadmica de alto desempenho.
Com Pontos de Presena nas
27 unidades da federao, a rede
tem mais de 800 instituies
conectadas. So aproximadamente
3,5 milhes de usurios usufruindo
de uma infraestrutura de redes
avanadas para comunicao,
computao e experimentao,
que contribui para a integrao
entre o sistema de Cincia e
Tecnologia, Educao Superior,
Sade e Cultura.

Ministrio da
Cultura
Ministrio da
Sade
Ministrio da
Educao
Ministrio da
Cincia, Tecnologia
e Inovao

Hardening

em Linux

Sandro Melo

Hardening

em Linux

Sandro Melo

Rio de Janeiro
Escola Superior de Redes
2014

Copyright 2014 Rede Nacional de Ensino e Pesquisa RNP


Rua Lauro Mller, 116 sala 1103
22290-906 Rio de Janeiro, RJ

Diretor Geral
Nelson Simes
Diretor de Servios e Solues
Jos Luiz Ribeiro Filho

Escola Superior de Redes


Coordenao
Luiz Coelho
Edio
Lincoln da Mata
Reviso tcnica
Edson Kowask e Wendel Soares
Equipe ESR (em ordem alfabtica)
Adriana Pierro, Celia Maciel, Cristiane Oliveira, Derlina Miranda, Elimria Barbosa,
Evellyn Feitosa, Felipe Nascimento, Lourdes Soncin, Luciana Batista, Luiz Carlos Lobato ,
Renato Duarte e Yve Marcial.
Capa, projeto visual e diagramao
Tecnodesign
Verso
1.0.0
Este material didtico foi elaborado com fins educacionais. Solicitamos que qualquer erro encontrado ou dvida com relao ao material ou seu uso seja enviado para a equipe de elaborao de
contedo da Escola Superior de Redes, no e-mail info@esr.rnp.br. A Rede Nacional de Ensino e
Pesquisa e os autores no assumem qualquer responsabilidade por eventuais danos ou perdas, a
pessoas ou bens, originados do uso deste material.
As marcas registradas mencionadas neste material pertencem aos respectivos titulares.
Distribuio

Escola Superior de Redes

Rua Lauro Mller, 116 sala 1103


22290-906 Rio de Janeiro, RJ
http://esr.rnp.br
info@esr.rnp.br
Dados Internacionais de Catalogao na Publicao (CIP)
M528h
Melo, Sandro.

Hardening em Linux / Sandro Melo. Rio de Janeiro: RNP/ESR, 2014.

278 p. : il. ; 27,5 cm.

Bibliografia: p.263.
ISBN 978-85-63630-27-8


1. Segurana de Computadores (Administrao). 2. Linux (Software). 3. Segurana de

software. I. Titulo.

CDD 005.268

Sumrio
Escola Superior de Redes
A metodologia da ESRix
Sobre o curso x
A quem se destinax
Convenes utilizadas neste livrox
Permisses de usoxi
Sobre o autorxii

1. Hardening em sistema Linux ps-instalao


Exerccio de nivelamento 1 Introduo de hardening2
O que hardening2
Exerccio de fixao 1 Vulnerabilidades5
Ps-instalao6
Exerccio de fixao 2 Pacotes instalados7
Atualizaes de segurana via Debsecan8
Arquivos com permisso de Suid bit10
Recomendaes e boas prticas10
Remoo de Suid bit10
Segurana no sistema de arquivos12
Exerccio de fixao 2 Particionamento12
Execuo do procedimento 12
Segurana no terminal 18
Desabilitar o uso de CTRL+ALT+DEL18
Exerccio de fixao 2 CTRL+ALT+DEL19

iii

Limitar o uso dos terminais texto19


Bloquear o terminal com a varivel TMOUT20
Gerenciamento de privilgios21
Bloquear o login do root nos terminais texto21
Determinar datas de expirao para contas de usurios22
Remover shells vlidas de usurios que no precisam delas23
Instalao de pacotes especficos 24
Segurana do Grub25
Habilitar senha nas verses antigas do Grub (verses 1 e 2)26
Roteiro de Atividades 127
Atividade 1.1 Hardening Linux Apticron27
Atividade 1.2 Hardening Linux Debsecan27
Atividade 1.3 Hardening Linux Debsecan via cron28
Atividade 1.4 Hardening Linux atualizao28
Atividade 1.5 Hardening Linux pacotes desnecessrios28
Atividade 1.6 Hardening Linux vlock29
Atividade 1.7 Hardening Linux regras de montagem29
Atividade 1.8 Hardening Linux Chkrootkit rkhunter29
Atividade 1.9 Hardening Linux Baseline30

2. Hardening em sistema Linux controles de segurana para contas de usurios


Introduo31
Exerccio de nivelamento 1 Controles de segurana para usurios32
Controles de autenticao com a utilizao do PAM 32
Sinalizadores de controle33
Caminho do mdulo33
Exerccio de fixao 1 PAM36
Procura por senhas fracas37
Utilizao do John the Ripper37
Utilizao de quota 38
Exerccio de fixao 2 Quota40
Utilizao de ACL Posix 1e41
Habilitao do suporte ao recurso de ACL43
Comando de administrao de ACL43

iv

Comando sudo (Super User Do fazer como super usurio)44


Preveno Escape Shell46
Duas formas de desabilitar Escape Shell47
Roteiro de Atividades 249
Atividade 1 PAM49
Atividade 2 Procura por senhas fracas50
Atividade 3 Quotas50
Atividade 4 ACL51
Atividade 5 Comando sudo53

3. Hardening em sistema Linux Registro de eventos (log) e HIDS


Exerccio de nivelamento 1 Registro de eventos (log) e HIDS 57
Trilha de comandos58
Trilha de comando58
Registro de eventos Logs do sistema60
Conformidade com as recomendaes60
Boas prticas para arquivos de log61
Logs do sistema 62
Syslog-NG63
Recursos (facility)63
Nvel de registro (prioridade)63
Servidor Syslog centralizado71
Comando logger71
Estrutura de Servidor e Cliente72
Configurao do servidor de logs72
Configurao do cliente74
Configurao do STUNNEL75
Definio da poltica de rotacionamento de logs76
Servidor NTP78
Contabilizao de processos79
Auditoria com HIDS80
Roteiro de Atividades 383
Atividade 3.1 Hardening Linux Registro de eventos (logs)83
Atividade 3.2 Auditoria HIDS84

4. Servios de Redes Parte 1


Checklist nos servios do sistema87
Exerccio de fixao 1 Checklist de Rede92
Gerenciamento de servios de redes em Inetd e Xinetd 94
Segurana em servios de redes96
Fingerprint de servio97
Exerccio de fixao 1 Levantamento de informao e Fora Bruta102
Hardening do servio SSH102
Mitigao de ataque de Fora Bruta 106
Roteiro de Atividades 4109
Atividade 4.1 # service fail2ban restart109

5. Servios de Redes Parte 2


Hardening111
Remoo de mdulos no utilizados115
Ocultando a verso do servidor116
Hardening do servio DNS/BIND121
PS-Watcher: Monitorao de servios ativos127
Roteiro de Atividades 5129
Atividade 5.1 Sistemas de deteco de intruses (IDS) em redes WLAN129

6. Hardening em sistema Linux Proxy Web


Introduo131
Exerccio de nivelamento 1 Proxy web 131
Implementao de um Proxy Web com Squid Instalao e Configurao do Proxy Cache133
Criao de ACLs139
Exerccio de Fixao Proxy web 141
ACL Time Regras temporarizadas 141
Roteiro de Atividades 6147
Atividade 6.1 Hardening Linux Proxy web Squid147

7. Firewall Parte 1
Introduo149
Arquitetura de firewall150

vi

Fundamentos para o IPtables155


Trabalhando com IPtables156
Tabelas158
Listando (-L) as regras em tabelas e chains160
Proposta de regras164
Roteiro de Atividades 7181
Atividade 7.1 Hardening Linux Firewall Linux181

8. Segurana de Permetro Parte 2


Exerccio de nivelamento 1 Firewalls183
Regras de controle184
Construindo um script de firewall192
Trabalhando com traduo de endereamento IP200
Trabalhando com redirecionamento de portas202
Usando a Tabela Mangle204
Analisando o contedo dos datagramas207
Port Knocking Conceito e prtica208
Roteiro de Atividades 8211
Atividade 8.1 Hardening Linux Firewall Linux211

9. Tuning de Kernel
Tuning de Kernel215
Tuning TCP216
Tuning ICMP222
Definido resposta a Ping222
Tuning IP225
Habilitando repasse de Pacotes (IP_FORWARD)225
Segurana de Kernel Segurana na ltima fronteira231
Definio de rea do usurio232
Definio de camada de Kernel232
Utilizao do mdulo Yama233
Tomoyo234
Configurao e administrao do Tomoyo235

vii

Roteiro de Atividades 9241


Atividade 9.1 Hardening Linux Tuning de Kernel241

10. Auditoria na camada de Kernel


Exerccio de nivelamento 1 Auditoria na camada de Kernel 243
Auditoria na camada de Kernel243
Roteiro de Atividades 10263
Atividade 10.1 Hardening em Sistema Linux263
Atividade 10.2 Hardening Linux Registro de Eventos (logs) e Auditoria263

viii

Escola Superior de Redes


A Escola Superior de Redes (ESR) a unidade da Rede Nacional de Ensino e Pesquisa (RNP)
responsvel pela disseminao do conhecimento em Tecnologias da Informao e Comunicao (TIC). A ESR nasce com a proposta de ser a formadora e disseminadora de competncias
em TIC para o corpo tcnico-administrativo das universidades federais, escolas tcnicas e
unidades federais de pesquisa. Sua misso fundamental realizar a capacitao tcnica do
corpo funcional das organizaes usurias da RNP, para o exerccio de competncias aplicveis ao uso eficaz e eficiente das TIC.
A ESR oferece dezenas de cursos distribudos nas reas temticas: Administrao e Projeto
de Redes, Administrao de Sistemas, Segurana, Mdias de Suporte Colaborao Digital e
Governana de TI.
A ESR tambm participa de diversos projetos de interesse pblico, como a elaborao e
execuo de planos de capacitao para formao de multiplicadores para projetos educacionais como: formao no uso da conferncia web para a Universidade Aberta do Brasil
(UAB), formao do suporte tcnico de laboratrios do Proinfo e criao de um conjunto de
cartilhas sobre redes sem fio para o programa Um Computador por Aluno (UCA).

A metodologia da ESR
A filosofia pedaggica e a metodologia que orientam os cursos da ESR so baseadas na
aprendizagem como construo do conhecimento por meio da resoluo de problemas tpicos da realidade do profissional em formao. Os resultados obtidos nos cursos de natureza
terico-prtica so otimizados, pois o instrutor, auxiliado pelo material didtico, atua no
apenas como expositor de conceitos e informaes, mas principalmente como orientador do
aluno na execuo de atividades contextualizadas nas situaes do cotidiano profissional.
A aprendizagem entendida como a resposta do aluno ao desafio de situaes-problema
semelhantes s encontradas na prtica profissional, que so superadas por meio de anlise,
sntese, julgamento, pensamento crtico e construo de hipteses para a resoluo do problema, em abordagem orientada ao desenvolvimento de competncias.
Dessa forma, o instrutor tem participao ativa e dialgica como orientador do aluno para as
atividades em laboratrio. At mesmo a apresentao da teoria no incio da sesso de aprendizagem no considerada uma simples exposio de conceitos e informaes. O instrutor
busca incentivar a participao dos alunos continuamente.

ix

As sesses de aprendizagem onde se do a apresentao dos contedos e a realizao das


atividades prticas tm formato presencial e essencialmente prtico, utilizando tcnicas de
estudo dirigido individual, trabalho em equipe e prticas orientadas para o contexto de atuao do futuro especialista que se pretende formar.
As sesses de aprendizagem desenvolvem-se em trs etapas, com predominncia de tempo
para as atividades prticas, conforme descrio a seguir:
Primeira etapa: apresentao da teoria e esclarecimento de dvidas (de 60 a 90 minutos).
O instrutor apresenta, de maneira sinttica, os conceitos tericos correspondentes ao tema
da sesso de aprendizagem, com auxlio de slides em formato PowerPoint. O instrutor levanta
questes sobre o contedo dos slides em vez de apenas apresent-los, convidando a turma
reflexo e participao. Isso evita que as apresentaes sejam montonas e que o aluno se
coloque em posio de passividade, o que reduziria a aprendizagem.
Segunda etapa: atividades prticas de aprendizagem (de 120 a 150 minutos).
Esta etapa a essncia dos cursos da ESR. A maioria das atividades dos cursos assncrona e
realizada em duplas de alunos, que acompanham o ritmo do roteiro de atividades proposto no
livro de apoio. Instrutor e monitor circulam entre as duplas para solucionar dvidas e oferecer
explicaes complementares.
Terceira etapa: discusso das atividades realizadas (30 minutos).
O instrutor comenta cada atividade, apresentando uma das solues possveis para resolv-la,
devendo ater-se quelas que geram maior dificuldade e polmica. Os alunos so convidados a
comentar as solues encontradas e o instrutor retoma tpicos que tenham gerado dvidas,
estimulando a participao dos alunos. O instrutor sempre estimula os alunos a encontrarem
solues alternativas s sugeridas por ele e pelos colegas e, caso existam, a coment-las.

Sobre o curso
O curso consiste na anlise de ameaas, minimizao de riscos e execuo de atividades
corretivas das vulnerabilidades identificadas em servidores na plataforma Linux.
Apresenta os conceitos tericos e atravs de atividades prticas a fim de reforar e garantir
a segurana de servidores Linux para as mais diversas aplicaes. Sero apresentadas
diversas tcnicas, procedimentos e ferramentas para que os servidores Linux tenham
a segurana de seus servios elevada. Os assuntos tratados possibilitaro melhoria da
segurana de servidores considerando o modelo DAC como tambm do modelo MAC, pois
sero realizados procedimentos de segurana com ferramentas no contexto da userland e
tambm recursos de segurana de Kernel.

A quem se destina
Este curso destinado administradores de redes e de servidores Linux interessados em
proteger suas redes e realizar ajustes detalhados (tunning) em seus servidores web, atravs
da implementao de mdulos de segurana e Web Application Firewall (WAF).

Convenes utilizadas neste livro


As seguintes convenes tipogrficas so usadas neste livro:
Itlico
Indica nomes de arquivos e referncias bibliogrficas relacionadas ao longo do texto.

Largura constante
Indica comandos e suas opes, variveis e atributos, contedo de arquivos e resultado da sada
de comandos. Comandos que sero digitados pelo usurio so grifados em negrito e possuem
o prefixo do ambiente em uso (no Linux normalmente # ou $, enquanto no Windows C:\).

Contedo de slide q
Indica o contedo dos slides referentes ao curso apresentados em sala de aula.

Smbolo w
Indica referncia complementar disponvel em site ou pgina na internet.

Smbolo d
Indica um documento como referncia complementar.

Smbolo v
Indica um vdeo como referncia complementar.

Smbolo s
Indica um arquivo de adio como referncia complementar.

Smbolo !
Indica um aviso ou precauo a ser considerada.

Smbolo p
Indica questionamentos que estimulam a reflexo ou apresenta contedo de apoio ao
entendimento do tema em questo.

Smbolo l
Indica notas e informaes complementares como dicas, sugestes de leitura adicional ou
mesmo uma observao.

Permisses de uso
Todos os direitos reservados RNP.
Agradecemos sempre citar esta fonte quando incluir parte deste livro em outra obra.
Exemplo de citao: TORRES, Pedro et al. Administrao de Sistemas Linux: Redes e Segurana.
Rio de Janeiro: Escola Superior de Redes, RNP, 2013.

Comentrios e perguntas
Para enviar comentrios e perguntas sobre esta publicao:
Escola Superior de Redes RNP
Endereo: Av. Lauro Mller 116 sala 1103 Botafogo
Rio de Janeiro RJ 22290-906
E-mail: info@esr.rnp.br

xi

Sobre o autor
Sandro Melo doutorando no TIDD-PUC/SP, Mestre em Engenharia da Computao no
IPT/USP, Mestre em Engenharia de Redes pelo IPT/USP; Ps-graduado em Administrao
de Redes Linux pela UFLA-MG; Ps-graduado em Anlise de Sistemas e Graduao em
Processamento de Dados pela Universidade Mackenzie, atua na rea de TI desde de 1997,
realizando neste perodo vrios projetos de implantao de servios de rede e segurana.
Atualmente atua como Coordenador do Curso de Redes de Computadores na BANDTEC
responsvel pela cadeira de Sistemas Operacionais, Computao Distribuda e Centralizada
e Segurana e Auditoria. um evangelista do Software Livre, sendo embaixador Fedora,
Proctor BSDA e LPI, tambm atua como professor convidado responsvel por ctedras
inerentes a Segurana e Computao Forense em sistema Linux, j tendo a oportunidade
de atuar na UFLA/ARL (MG), IBTA (Campinas), UNISALES (ES), Faculdade Pitgoras (Guarapari-ES, Teixeira de Freitas-BA), Universidade Potiguar (RN), ITA (SP), IEASAM (PA), Uniron
(RO), FAAR(RO), FACID (PI) entre outras. Sendo idealizador e coordenador dos cursos de
Ps Graduao Segurana e Computao Forense nas entidades: Universidade Maurcio de
Nassau (AL) , Faculdade FACID (PI), Faculdade CET(PI), Faculdade Atual (RR), Iquali/EEEMBA
(BA); Instrutor autorizado FreeBSDBrasil e convidado da Academia Clavis.
Edson Kowask Bezerra profissional da rea de segurana da informao e governana
h mais de quinze anos, atuando como auditor lder, pesquisador, gerente de projeto e
gerente tcnico, em inmeros projetos de gesto de riscos, gesto de segurana da informao, continuidade de negcios, PCI, auditoria e recuperao de desastres em empresas de
grande porte do setor de telecomunicaes, financeiro, energia, indstria e governo. Com
vasta experincia nos temas de segurana e governana, tem atuado tambm como palestrante nos principais eventos do Brasil e ainda como instrutor de treinamentos focados em
segurana e governana. professor e coordenador de cursos de ps-graduao na rea de
segurana da informao, gesto integrada, de inovao e tecnologias web. Hoje atua como
Coordenador Acadmico de Segurana e Governana de TI da Escola Superior de Redes.
Wendel Soares formado em Segurana da Informao pela Faculdade Rogacionista e
especialista em redes de computadores. Foi por oito anos administrador de redes do Ministrio da Defesa Exrcito Brasileiro, trabalhando com redes de segurana de TI. Colaborador
da Escola Superior de Redes desde 2008, tendo lecionado cursos de Linux e Segurana de
Redes. Atualmente trabalha como Especialista de redes para uma Multinacional Americana.

xii

1
Rever conceitos relacionados segurana; Compreender conceitos importantes
sobre hardening em Linux; Avaliar um Baseline; Realizar procedimentos de
instalao diferenciados.

procedimentos aps a instalao.

conceitos

Conceitos de Segurana; Conceitos de hardening; Baseline; Proposta de

O corao do sistema Linux o seu kernel e tambm seu Sistema Operacional. Combinados,
eles formam a base onde esto todas as suas aplicaes que rodam no computador. Comparativamente falando, o Sistema Operacional Linux e seu kernel so razoavelmente seguros.
Um grande nmero de opes de segurana esto inclusas no kernel e uma grande variedade de ferramentas e configuraes de segurana open-source j esto inclusas nas mais
variadas distribuies. Adicionalmente, o Linux oferece excepcional controle sobre quem,
como e quais recursos e aplicaes os usurios podem ter acesso. Ento, onde est o risco?
Normalmente, o problema est nos detalhes. A segurana do sistema depende de uma
enorme quantidade de elementos de configurao em nvel, tanto de Sistema Operacional
quanto de aplicaes. O prprio Sistema Operacional e seu kernel so bastante complexos,
e sua correta configurao no um processo trivial. Sistemas Operacionais baseados no
kernel Linux possuem infinitas configuraes, e cada ajuste pode causar srios problemas
de segurana. Vulnerabilidades e falhas de segurana no so fceis de encontrar.
Para estar apto para numerar esses pontos, precisamos adquirir slidos conhecimentos
sobre os requisitos bsicos de segurana do nosso Sistema Operacional e seu ncleo.
Hardening em Linux um processo de proteo do Sistema Operacional, seu kernel e suas
aplicaes contra ameaas conhecidas ou no atravs da aplicao de tcnicas especficas
de controle, minimizao de riscos e execuo de atividades corretivas.

Captulo 1 - Hardening em sistema Linux Ps-instalao

objetivos

Hardening em sistema Linux


ps-instalao

Exerccio de nivelamento 1 e
Introduo de hardening
Como possvel perceber a necessidade de segurana nos servios e nas mquinas servidoras de uma organizao?

Execute um fork attack como usurio comum no shell da mquina virtual e avalie a partir do
resultado o quanto uma instalao padro de Linux segura.

Fork Attack:

:(){ :|:& };:

O que hardening
a proteo do sistema por meio da reduo de suas possveis vulnerabilidades.

Devemos:
1 Configurar o sistema.
1 Instalar pacotes destinados a algum procedimento de segurana.
1 Modificar o permissionamento para melhorar e reforar a segurana.
De acordo com a Wikipedia, hardening um processo de mapeamento das ameaas, mitigao dos riscos e execuo das atividades corretivas com foco na infraestrutura e com o
objetivo principal de torn-la preparada para enfrentar tentativas de ataque.
J segundo a ITSecurity.com, hardening o processo de otimizar as configuraes de segurana de um sistema, um termo comumente aplicado a Sistemas Operacionais.
A palavra hardening tem origem no idioma ingls e significa endurecimento, mas no contexto da Segurana Computacional tambm o processo de proteger um sistema atravs da
reduo de suas possveis vulnerabilidades, por meio de configuraes que implementam
controles especficos. Esse processo implica realizar vrias configuraes, instalao de
pacotes destinados a algum procedimento de segurana e modificao de permissionamento com o objetivo de melhorar e reforar a segurana do ambiente. Antes de iniciar a
explanao sobre o tema, interessante perguntar: o que hardening?
Ao considerar a principal traduo de hardening, que significa endurecer-se, exatamente
isso o que desejamos fazer com um Sistema Operacional antes de colocar um servidor em
produo. Essa ideia fica mais clara se for considerada a traduo como fortalecimento, que

Hardening em Linux

do ponto de vista emprico pode ser explicado como um conjunto de configuraes e melho-

ramento, ajustes finos que vo gerar controles para que o sistema torne-se mais seguro.
Administradores sem muita experincia em segurana preparam seus servidores com uma
instalao bsica e depois que suas aplicaes j esto funcionando, acabam deixando da
maneira que ficou, pois a possibilidade de fazer com que aplicao pare de funcionar realizando um procedimento de segurana grande. Eis que muitas vezes surge a seguinte frase:
Ah, j est funcionando sem ningum mexer!

Saiba mais
O sistema Linux torna-se
bastante seguro quando
devidamente trabalhado. Dessa forma,
necessrio rever suas
configuraes-padro.
Adicionar controles
especficos pode tornar
qualquer servidor mais
seguro e preparado
para a internet.

Os Sistemas Operacionais modernos trazem muitos controles para melhorar a segurana


e gerenciar melhor o uso dos recursos, mas quando se trata de Sistema Operacional
moderno, desenhado para prover servios de redes, muito comum que esses controles
estejam desabilitados. Uma prova disso que a maioria das distribuies so vulnerveis
a um ataque de fork bomb, ou seja, um ataque simples que consiste em exaurir os recursos,
abrir um processo aps o outro at no termos mais recursos e o servidor travar.
Um ataque de fork bomb no Linux facilmente efetuado executando a seguinte instruo
em uma shell:

:(){ :|:& };:

Esse um exemplo de funo que executada de forma recursiva. um meio conhecido


e frequentemente usado por administradores de sistemas para testar as limitaes dos
processos de usurio, embora os limites de execuo de processos de usurio em um
sistema Linux possa ser configurado via / etc / security / limits.conf e PAM. comum no ter
nenhuma definio estabelecida em um sistema Linux. Dessa forma, um usurio comum
pode causa uma Denial of Service (DoS) atravs de um fork bomb.
Uma vez que um fork bomb executado em um sistema, pode no ser possvel mais
retomar o funcionamento normal sem reiniciar o sistema como a nica soluo. Isso acontece porque a nica soluo destruir todas as instncias do sistema, mas a ao to
rpida que raramente haver uma oportunidade para interromper o ataque.
Entendendo o Fork Bomb via /bin/bash:
11 :(): a definio da funo chamada :, uma funo que no aceita argumentos.
A sintaxe para a funo vai Bash :
:(){
:|:&
};:
11 :|:: em seguida, dentro do corpo da funo, feita uma chamada usando a tcnica de
programao chamada recurso, motivando a gradual alocao de recurso do Sistema
Operacional, tendo por consequncia um travamento do sistema;
11 &: coloca a chamada de funo em segundo plano para que cada processo-filho criado
no morra e fique consumindo recursos do sistema;

11 :: faz a chamada para execuo novamente.


Um exemplo mais prtico poderia ser:

fork_bomb() {

fork_bomb | fork_bomb &



}; fork_bomb

Captulo 1 - Hardening em sistema Linux Ps-instalao

11 ;: finaliza a definio da funo;

Um ataque de fork bomb motivo suficiente para se pensar em um hardening. Entretanto,


no momento que se inicia a implementao das tcnicas de hardening, necessrio pensar
em trs fatores: segurana, risco e flexibilidade, como ilustrado na figura a seguir:

Se no existe segurana 100% ento o que existe?


Implementao
de segurana
Flexibilidade
do usurio
Risco assumido
pela empresa

Figura 1.1
Segurana,
flexibilidade e risco.

O desafio saber dosar muito bem esses trs fatores para definir um conjunto de controles
que possam proporcionar ao sistema equilbrio entre produtividade e segurana. Muitas
perguntas podem ocorrer durante o processo, como: Qual o nvel de segurana desejado?
Quanto o sistema vai ficar em conformidade com a polticas de segurana definidas? Quo
auditvel dever ficar o sistema?
Outro grande desafio que os fatores segurana e flexibilidade ou mesmo segurana
e risco so inversamente proporcionais e consequentemente impactam diretamente no
risco. um fato que no possvel ter segurana 100%, mas, por outro lado, quanto mais
segurana, menores sero o risco e a flexibilidade.
Uma vez que no possvel ter 100% de segurana, deve-se elaborar o maior nmero possvel de controles para tornar um Sistema Operacional mais seguro. Dessa forma, o hardening permite mitigar possveis vulnerabilidades.

Para pensar
fato: ao diminuir, por meio de um processo de hardening, as possibilidades de vulnerabilidades que possam trazer ameaas, sero reduzidos tambm os riscos ao sistema.

Qual sada?
Com Metodologia...

Hardening em Linux

Levantamento
de Riscos e
Vulnerabilidades

Negcio

Ferramentas
Polticas

Capacitao

Figura 1.2
Dificultadores: no
possvel ter 100%
de segurana.

notrio que, quando so implementados controles, o sistema passa a prover um ambiente


mais rgido, possibilitando pouca flexibilidade. Por outro lado, se em um sistema damos
grande flexibilidade ao usurio, fato que a segurana ser diminuda e os riscos vo
aumentar. Por exemplo: um cenrio de Sistema Operacional onde no exista qualquer
diretriz de segurana e se permita que qualquer tipo de programa possa ser executado por
qualquer usurio. Somando-se a isso ainda existem complicadores, que podem ser divididos
em dois grupos:
11 Vulnerabilidade conhecida: servidor com um sistema legado que naquele momento no
pode ser desligado, por exemplo;
11 Vulnerabilidade desconhecida: uma vulnerabilidade do Sistema Operacional que ainda
no foi reportada pelo fabricante ou uma correo no publicada (ilustrado na figura 1.2).

Qual sada?
Tem um complicador...
Implementao
de segurana

!
!
?

Conhecido
Desconhecido

Risco assumido
pela empresa

Exerccio de fixao 1 e
Vulnerabilidades
Cite duas vulnerabilidades conhecidas nos equipamentos servidores da sua organizao.

No existe regra direta para a dosagem desses trs fatores ilustrados nas figuras 1.2. e 1.3,
devido ao fato de que depende de cada situao e de acordo com o tipo de necessidade.
Por isso, toda implementao de um servidor deve ter seu planejamento de segurana
bem definido antes de sua instalao, ou seja, a elaborao do baseline que formalizar o
hardening fundamental.
Deve-se lembrar que o conjunto de tcnicas e ferramentas para implementao de um
hardening, normalmente utilizadas em um Sistema Operacional Linux sejam interessantes
do ponto de vista de garantia dos servios e realmente agreguem segurana. No ser
incomum o fato de que um conjunto de aes pr-estabelecidos em uma baseline no se
apliquem em todas as situaes. Cada caso um caso. preciso analisar e descobrir que
controles sero mais adequados para a necessidade em questo e tambm qualificar o
quanto de segurana foi estabelecido no respectivo contexto.
A segurana na camada do Sistema Operacional iniciada no hardening, mas no termina
nele. E deve ser aderente, ou seja, estar em conformidade com as polticas das empresas.

Captulo 1 - Hardening em sistema Linux Ps-instalao

Figura 1.3
Ferramentas,
polticas e
capacitao.

Flexibilidade
do usurio

Diante disso, conveniente lembrar que ferramentas so importantes, mas no so o fim


e sim o meio para a execuo dos procedimentos do processo, que, somados a outras
aes, como a capacitao das pessoas envolvidas, fator determinante de sucesso, pois a
impercia um inimigo de qualquer trabalho. Explicando de um ponto de vista prtico, esse
processo envolve:
11 A remoo ou desativao de servios desnecessrios;
11 Remoo de contas de usurios-padro;
11 Desinstalao de pacotes desnecessrios;
11 Definio do processo de atualizao;
11 Definio de controles para auditoria;
11 Definir controles para limites do uso dos recursos pelas aplicaes e/ou usurios;
11 Instalao de pacotes de ferramentas de segurana e auditoria.

Ps-instalao
Aps o planejamento da instalao e sua execuo, o sysadmin vai iniciar a execuo do hardening, que tambm foi previamente planejado no Baseline. fato que um bom processo de
hardening tem como princpio menor recurso e menor privilgio.
Um bom exemplo da aplicao desse princpio verificar a lista de pacotes instalados, pois
sero identificados possveis pacotes que no necessrios para a finalidade do servidor ou
aplicaes que demandaro ter o permissionamento revisto.
Os comandos a seguir podem ser utilizados:
No Debian:

# dpkg -l | awk {print $2,$3} | sed 1,7d

gravando o resultado em um arquivo


# dpkg -l | awk {print $2,$3} | sed 1,7d > /root/pacotes
No Red Hat:

# rpm qa

gravando o resultado em um arquivo


# rpm qa > /root/pacotes
A CIS Security tambm cita a remoo de programas que no esto em uso e ressalta que
tais programas podem ser usados por um exploit (cdigo que explora a vulnerabilidade de
Hardening em Linux

um programa para ganhar um acesso no autorizado ao sistema) para um ataque tanto local

quanto remoto, dependendo do programa.


Exemplos de programas que podem ser desnecessrios, dependendo do tipo de servidor:
11 lynx: cliente http/ftp que possibilita transferncia de malware;
11 wget: cliente http/ftp que possibilita transferncia de malware;

Boas prticas recomendadas na ISO/IEC


27002:2008: no que diz
respeito a programas
instalados, a norma
ISO/IEC 27002:2008
recomenda que seja
removido todo utilitrio
ou software desnecessrio do sistema. Dessa
forma, executar esse
procedimento durante
o hardening possibilitar a conformidade
com o que recomendado na ISO/IEC
27002:2008.

11 netcat (nc): canivete suo que possibilita transferncia de malware ou at mesmo


criar backdoors;
11 hping: montador de pacotes que possibilita criar backdoors via rawsocket.
Todas as prticas propostas neste livro devero ser executadas nas mquinas virtuais elaboradas para essa finalidade.
Por outro lado, existe tambm a questo dos pacotes bsicos que devem ser instalados em
um servidor, como, por exemplo, um bom sistema de registro de eventos (logs), um servio
de sincronizao de relgio (NTP) e ferramentas que auxiliem o administrador a uma resposta inicial de incidente.
Outro ponto importante: que os comandos foram testados em duas mquinas virtuais
(uma Debian e outra Ubuntu). No caso das excees, no momento oportuno ser informado. Isso tambm importante para lembrar que, embora as sugestes recomendadas
sejam aplicadas de qualquer distribuio Linux, dever o sysadmin avaliar como fazer em
sua distribuio caso ela seja diferente da utilizada como base para este livro. O fato de ser
Debian 7 no limita ou mesmo tornam exclusivos os conceitos e recursos a esse cenrio,
pois administradores mais experientes devero saber interpretar as diferenas entre as
distribuies, alm do fato de os procedimentos serem baseados no modo Command Line
(CLI), o que torna a reproduo praticamente universal, pois fica vinculado apenas shell
usada, que foi /bin/bash.

Exerccio de fixao 2 e
Pacotes instalados
Alguns desses programas apresentados esto instalados na sua organizao? Por qu?

Avalie a proposta da realizao de instalao com o mnimo de pacotes possveis.

Saiba mais
A ao de avaliar os
programas instalados
em um respectivo
Sistema Operacional
deve estar elencada
em qualquer baseline.
Um bom exemplo
que valida essa boa
prtica o Sistema
Operacional Windows,
que tambm vem com
programas cliente
como o tftp, que so
comumente usados por
malware para transferncias de arquivos.

Muitos outros aplicativos podem entrar nessa lista, como: nmap, tcpdump, telnet (client), ftp
(client) e shred, pois, devido aos recursos que proporcionam, devem ser devidamente avaliados.
Caso a remoo do pacote seja a melhor deciso, esta pode ser realizada da seguinte forma:

# apt-get remove --purge wget


Uma alternativa rever o permissionamento dos binaries com o comando chmod, deixando-os apenas com direitos para o root e em casos extremos definir regras via sudo
para utilizao desse aplicativos, considerando sempre as questes de segurana. O sudo
um recurso que pode ser til, embora deva ser usando sempre com cautela e ser ensinado no Captulo 2.
A gesto de atualizao de pacotes uma tarefa necessria, pois vital segurana. Diante
disso, preciso ter controles definidos para habilitar recursos no Sistema Operacional que

Captulo 1 - Hardening em sistema Linux Ps-instalao

Cite as vantagens.

facilitem essa tarefa importante. Em distribuies Like Debian com Ubuntu, um aplicativo
interessante o apticron, que informa por e-mail pacotes que devem ser atualizados. O apticron um shell script que usa as informaes do apt-listchanges. Para instalar o apticron:

# apt-get install -y apticron


Durante a instalao inserida uma entrada no /etc/cron.d, similar a esta:

# cat /etc/cron.d/apticron
15 * * * * root if test -x /usr/sbin/apticron; then /usr/sbin/
apticron --cron; else true; fi
As configuraes do apticron ficam no /etc/apticron. Normalmente basta inserir o e-mail do
administrador. Segue um exemplo de configurao:

# cat /etc/apticron/apticron.conf | grep -v #


EMAIL=sandro.melo@bandtec.com.br
DIFF_ONLY=1
LISTCHANGES_PROFILE=apticron
NOTIFY_NEW=0CUSTOM_SUBJECT=RNP Security: Aviso de atualizao de
pacotes

Atualizaes de segurana via Debsecan


A maioria das distribuies Linux possibilita a atualizao via repositrio de pacotes disponveis na internet. No caso de distribuies Like Debian, como o Ubuntu, possvel fazer
uma avaliao com o comando debsecan (Debsecan tool Debian Security Analyzer) sobre
registro de vulnerabilidade do CVE (www.mitre.org).
Essa ferramenta verifica a base de pacotes instalados, correlacionando com informaes de
vulnerabilidades publicadas.
Devido ao fato de o debsecan sempre trazer a informao completa dos pacotes com
notificao de vulnerabilidades, interessante primeiro consultar os pacotes que possuem
correo pronta, aplic-la e gerar uma lista branca com os pacotes j corrigidos (whitelist),
para que seja possvel ter uma administrao do que j foi efetivamente atualizado.
Identificao da disponibilidade dos pacotes do sistema que demandam atualizao:

# debsecan --suite lenny --only-fixed --format packages


libasn1-8-heimdal
libcurl3

Hardening em Linux

libcurl3-gnutls
libcurl3-nss
libgssapi3-heimdal
libhcrypto4-heimdal
libheimbase1-heimdal
libheimntlm0-heimdal
8

CVE
Common Vulnerabilities and Exposures.
Define-se como um
padro no tratamento e
divulgao de informaes sobre vulnerabilidades reportadas. o
padro usado na rea
de segurana da informao para enumerar
as vulnerabilidades.
Esses identificadores
fornecem pontos de
referncia na troca
de dados para que os
produtos de segurana
da informao e servios possam falar uns
com os outros, ou seja,
produtos e servios
certificados com o CVE
podem proporcionar
uma melhor cobertura,
integrao e segurana
reforada em seu
ambiente.

libhx509-5-heimdal
libkrb5-26-heimdal
libroken18-heimdal
libt1-5
libwind0-heimdal
libxml2
python-libxml2
Onde:
11 --suite: define o release;
11 --only-fixed format : para definir a forma em que as informaes sero apresentadas.
Nesse cenrio, recomendado que todos os pacotes listados, aps serem atualizados,
sejam inseridos na whitelist. Assim sendo, segue o procedimento de atualizao via apt-get:

#debsecan --suite wheezy --only-fixed --format simple | awk { print


$1 }

> llst_update

Aps gerar a lista, use novamente o debsecan para atualizar os respectivos pacotes:

# apt-get install -y $(# debsecan --suite

wheezy --only-fixed

--format packages)
Aps o trmino, atualize a whitelist:

debsecan ---add-whitelist $(cat list_update)

Verifique a atualizao da whitelist:

# debsecan --show-whitelist
Existe opo de gerar uma entrada no crontab para que o debsecan seja executado via cron.
Basta executar o comando:

Uma entrada similar a essa ser criada no diretrio /etc/cront.d:

# cron entry for debsecan


MAILTO=root

19 * * * * daemon test -x /usr/bin/debsecan && /usr/bin/debsecan


--cron
# (Note: debsecan delays actual processing past 2:00 AM, and runs
only
# once per day.)
Uma forma interessante de uso do debsecan forar o envio de e-mail apenas com informaes das atualizaes necessrias disponveis.

Captulo 1 - Hardening em sistema Linux Ps-instalao

# debsecan-create-cron

debsecan --suite wheezy --only-fixed

--format report --mailto root

--update-history

Arquivos com permisso de Suid bit


A permisso de Suid bit possibilita que um determinado binrio possa ser executado por
outros ou por membros do grupo com os mesmos direitos do usurio efetivo, ou seja,
usurio dono. Isso cria a possibilidade se o usurio dono de um determinado binrio for o
usurio root, com a atribuio do direito especial de suidbit a esse binrio, o binrio poder
ser executado por outro usurio comum do sistema com o mesmo poder do root.
Muitos binrios no sistema j vm com a permisso de Suid bit, devido ao fato de que alguns
desses binrios cujo dono o usurio root necessitam em algum contexto serem usados
por um usurio comum. Exemplos clssicos desses comandos so o su, o ping, e o passwd,

Suid bit
Permisso que s
trabalha com arquivos
executveis serve para
o propsito de um
usurio comum poder
executar um determinado binrio com o
poder do dono efetivo.
Essa permisso representada pela letra s.

entre muitos outros. Mas uma coisa deve ser avaliada: ser que todos esses binrios que
j esto com a permisso de Suid bit sero usados por algum usurio comum do sistema?
Ser que os usurios comuns do sistema precisam de todos esses comandos disposio?
Ser que no servidor em questo usurios comuns tero shell vlida? Demanda-se que o
administrador fique atento para esses detalhes. Como o sistema possui muitos binrios
com Suid bit, problemas como a combinao de shells com Suid bit podem passar despercebidos. Dessa forma, o conceito de menor privilgio e menor recurso deve sempre ser
um balizador para decises.Ento, o que pode ser feito? Retirar todas as permisses de Suid
bit do sistema e somente deixar as permisses para os binrios que sejam fundamentais
para operaes de um determinado usurio. No entanto, no existe regra geral: haver
casos diferentes, pois os binrios que julgam-se importantes para um servidor firewall, por
exemplo, podem no ser para um servidor de e-mail.

Recomendaes e boas prticas


uma boa prtica que o acesso informao e s funes dos sistemas de aplicaes por
usurio e pessoal de suporte seja restrito de acordo com o definido na poltica de controle
de acesso. Dessa forma, a remoo da permisso de Suid bit dos diversos binrios que a
possuem deve ser mais um procedimento de hardening.
A CIS SECURITY tambm recomenda a remoo da permisso de Suid bit dos diversos binrios que a possuem.

Remoo de Suid bit


Para a remoo de todas as permisses de Suid bit dos binrios, necessrio fazer uma
pesquisa no sistema e gerar lista com todos para melhor anlise. Nesta exemplificao
ser criado um diretrio chamado teste, dentro do /root para que seja gravada a lista de
arquivos com Suid bit, que ser gerada pelo comando find.

Hardening em Linux

# cd /root

10

# mkdir teste
# find / -perm -04000 > /root/teste/lista.suid

dBoas prticas recomendadas na ABNT NBR


ISO/IEC 27002:2008:
por recomendao
relacionada ao item
11.6.1, o acesso
informao e s
funes dos sistemas
de aplicaes por
usurio e pessoal de
suporte deve ser
restrito de acordo com
o definido na poltica de
controle de acesso.
Dessa forma, impondo
limites e controles
sobre Suid bit o usurio
estar em conformidade com a norma.

O nmero 4000 representa a permisso de Suid bit. Embora seja passado o parmetro
-04000, a parte importante so os quatro ltimos dgitos. Os trs zeros so as permisses-padro do sistema (0 para usurio, 0 para grupo e 0 para outros), e o 4 representa a permisso Suid bit. Podemos ter no lugar do 4 o nmero 2, que o direito especial denominado
Sgid bit, ou 1, que representa stick bit.
Vamos fazer uma listagem detalhada em um desses binrios para ver como a permisso de
Suid bit representada:

# ls -l /bin/su
Nas permisses do usurio, representado um s no lugar do x para indicar Suit bit. Isso
representa que a permisso de Suid bit est ativada, mas a permisso de execuo (x)
intrnseca ao Suid bit.
Com a lista gerada com todos os binrios, podemos avaliar quais binrios realmente necesBastion Host

sitam continuar com a permisso de Suid bit. Considere um exemplo de um Bastion Host,

Qualquer mquina configurada para desempenhar algum papel crtico


na segurana da rede
interna; constituindo-se na presena pblica
na internet, provendo
os servios permitidos
segundo a poltica de
segurana da empresa.

que o firewall da uma rede. Podemos deixar dois binrios com o Suid bit definidos para
os binrios passwd e su. Deixar o passwd para que um usurio comum possa mudar a sua
senha de acesso caso seja um administrador e acesse essa mquina remotamente assumindo que em um contexto como esse o root no faz login diretamente, tanto local ou
remotamente. J o comando su vai ser de vital importncia, pois caso o usurio root no
tenha acesso direto, o administrador ento ter de efetuar o login com seu usurio comum e
poder usar o su para se tornar o usurio root.
Como retirar todas as permisses de Suid bit dos binrios:

# chmod -s -Rv /
Onde:
11 -s: retira a permisso de Suid bit;
11 -R: recursivo, do / (barra) para baixo;
11 -v: o modo verbose (mostra o que est sendo feito pelo comando).

# ls -l /bin/su

somente para os dois binrios que julgarmos realmente necessrio.

# chmod +s /usr/bin/passwd

# chmod +s /bin/su

# ls -l /usr/bin/passwd

# ls -l /bin/passwd
Pode ser que para um determinado servidor s o passwd e o su no sejam suficientes. Provavelmente outros binrios precisem estar com o Suid bit ativado. Cabe ao administrador
analisar o que ser necessrio para cada tipo de servio. Uma soluo alternativa ao Suid bit

Captulo 1 - Hardening em sistema Linux Ps-instalao

Logo aps remover o Suid bit de todo o sistema, basta definir a permisso de Suid bit

a adoo do comando sudo, que ser tratado no captulo 2.


11

Segurana no sistema de arquivos


Na instalao de um sistema Linux, as boas prticas nas instalaes aconselham a particionar o disco e colocar os principais diretrios em parties separadas. Isso pode proporcionar maior segurana, pois cada partio tem sua tabela separada e pode ter regras de
montagem melhor elaboradas.
Logo, se toda instalao est concentrada em uma nica partio, j se inicia um servidor
com grande limitao. Mas se temos um exemplo onde o diretrio / (barra) est em uma
partio e o /home em outra, no caso de algum problema no sistema ou at em uma
reinstalao, pode-se atuar na partio /home sem interferir, em um primeiro momento,
nas informaes vinculadas ao diretrio /home. As definies de montagem que devem ser
avaliadas para esse contexto so:
11 Nodev: tira o suporte a arquivos de dispositivos;
11 Noexec: desabilita o suporte execuo dos arquivos;
11 Nosuid: deixa desabilitado o suporte ao direito especial de suidbit;
11 Noatime: desativa o registro de tempo/data de acesso dos arquivos (denominado atime);
11 Ro: define que ser somente leitura.

Exerccio de fixao 2 e
Particionamento
Como feita a segurana dos particionamentos das mquinas servidoras na sua organizao?

Entretanto, relevante destacar que a segurana de um particionamento no se resume


a isso. Todas essas parties so montadas nos diretrios, e um erro que muitos administradores de sistemas Linux cometem no ler a documentao para conhecer melhor os
recursos e descobrir que o comando mount possibilita a utilizao de algumas opes muito
interessantes, que permitem melhorar muito a segurana nas parties. Caso todos os diretrios estivessem na mesma partio no / (barra) , no seria possvel ter essas opes e
usufruir desses recursos.
Mostramos neste captulo que possvel retirar a permisso de Suid bit dos binrios, mas s
isso no resolveria. Pode-se cortar o mal pela raiz com as opes do mount, dizendo que
na partio em questo os binrios com permisso de Suid bit no tero efeito, ou seja, esse
um recurso muito interessante para montagem: desabilitar a execuo de binrios com
suitbit em uma partio definida, aumentando a segurana do sistema atravs da limitao

Hardening em Linux

de um recurso poderoso.

12

Execuo do procedimento
A primeira opo do mount que ser mostrada o nosuid, que faz com que binrios com
permisso de Suid bit no tenham efeito na partio na qual esto definidos. Para um
exemplo prtico, adicione um usurio:

# adduser teste

Faa uma cpia das shells do seu sistema para o diretrio home desse usurio e atribua s
shells a permisso de Suid bit.

# cp /bin/*sh* /home/teste

# chmod 4755 /home/teste/*sh*


Efetue login em outro terminal com um usurio comum que foi criado anteriormente e tente
executar uma dessas shells.

$ cd /home/teste

$ ./sh

# id
Na sada do comando id, pode-se ver que esse usurio conseguiu permisses de root.
recomendvel, para fins de melhor conhecimento do sistema, que esse teste seja feito em
todas as shells disponveis. Assim, possvel estimar melhor o poder de uma ameaa em um
contexto similar a esse.
Para resolver isso, basta remontar a partio onde est montado o /home, mas com a
opo de nosuid.

# mount -o remount,rw,nosuid /home

# mount
O comando mount sem parmetros nos mostra quais as parties esto montadas e suas
respectivas opes. Com a partio remontada com nosuid, faa o teste novamente e veja
que as shells continuam com o Suid bit ativado. Entretanto, quando forem executadas, no

Outra opo interessante de montagem que pode ser usada o noexec, que impossibilita
a execuo de qualquer binrio ou arquivo executvel dentro da partio na qual essa
opo est ativada. Essa opo pode ser aplicada a todos os diretrios que contenham
binrios necessrios s funes do sistema. Um clssico exemplo aplic-la a diretrios
como /home e /tmp. Crackers podem se aproveitar do diretrio /tmp, onde por padro
qualquer usurio pode escrever para introduzir backdoors ou qualquer outro programa
malicioso para tentar ter acesso completo a um sistema comprometido.
Para melhor entendimento, pode-se fazer o mesmo o que feito com o nosuid. Basta
remontar a partio com a opo noexec e tentar executar umas das shells que foram
copiadas para o /home.

# mount -o remount,rw,noexec /home

# mount

Captulo 1 - Hardening em sistema Linux Ps-instalao

vo mais possibilitar o acesso no nvel de root.

13

# ./sh
Essa simulao mostra que no possvel executar a shell. Na tentativa de execut-la, recebemos a mensagem de permisso negada, ou seja, nessa partio, nada de execuo.
A terceira opo que podemos usar a noatime, que no especificamente uma opo para
aumentar a segurana, mas sim para melhorar a performance, pois faz com que o kernel do
Linux execute uma rotina a menos quando o noatime est definido e destinado atualizao do tempo de acesso de arquivo. Veja um exemplo para entender como funciona:
O comando stat, usado para verificar informaes de metadados de sistema de arquivos de
um arquivo:

# stat /etc/passwd
A sada desse comando nos retorna informaes importantes, nas quais destacam-se as
informaes do Access (atime), do Modify (mtime) e do Change (ctime).
So criados dois arquivos, um no diretrio /root e outro no /tmp, assumindo que o /root
e o /tmp esto em parties diferentes.

# touch /root/teste1
Depois da criao dos dois arquivos, so consultadas as informaes de metadados, mas
com foco nas informaes do Access, do Modify e do Change.

# stat /root/teste1

# stat /tmp/teste2
Agora que as informaes j foram coletas, basta fazer os testes e ver o que ser mudado. O
prximo procedimento consiste em visualizar o contedo dos arquivos com o comando cat,
supondo que eles tenham algum contedo, e logo em seguida vamos verificar novamente o
status dos arquivos.

# cat /root/teste1
# cat /tmp/teste2
# stat /root/teste1
# stat /tmp/teste2
Olhando com ateno, ser verificado que o tempo do Access (atime) dos arquivos esto
diferentes, ou seja, quando foi visualizado o contedo dos arquivos, evidentemente foi feito
um acesso a ele, mas somente de leitura do seu contedo. Por consequncia, o seu tempo

Hardening em Linux

de acesso (Access) foi modificado.

14

O experimento ilustra um teste de modificao de permisso com o comando chmod e a


consulta das informaes de metadados com o comando stat, para verificar como e sistema
guarda esse tipo de informao.

# chmod 777 /root/teste1


# chmod 777 /tmp/teste2

# stat /root/teste1
# stat /tmp/teste2
percebido que o tempo Access no foi modificado, mas o Change (ctime) foi alterado.
Assim sendo, quando for mudada uma informao de metadados, como, por exemplo,
uma permisso de um arquivo, o Change ser mudado, registrando a ltima data e a
hora da mudana.
Outro experimento para avaliar o que modificado ao inserir um contedo nesses arquivos,
ou seja, que tipo de metadados so modificados considerando as informaes do experimento anterior.

# echo abc > /root/teste1


# echo abc > /tmp/teste2
# stat /root/teste1
# stat /tmp/teste2
observado que o Change foi alterado novamente, mas no alterado sozinho: o Modify
(mtime) tambm foi, pois agora no ocorreu s uma mudana de metadados (no caso o
tamanho), mas uma alterao no contedo do arquivo.

Com esses experimentos foi possvel exemplificar a diferena entre o Access, o


Modify e o Change. Agora j conseguimos fazer a alterao na partio e ver o que
ser melhorado.

Para essa exemplificao, a partio vinculada ao diretrio /tmp, que ser usada para
demonstrar que basta remontar a partio com a opo noatime para desligar esse controle
do sistema.

# mount -o remount,rw,noatime /tmp


# mount

seguida verificar o que foi modificado em relao s informaes de metadados dos arquivos.

# cat /root/teste1
# cat /tmp/teste2
# stat /root/teste1
# stat /tmp/teste2
Ser observado que o Access (atime) do arquivo teste2 dentro do /tmp no ser modificado,
justamente por causa da opo noatime, que foi parametrizada na remontagem da partio.
Isso pode ser muito til para diretrios de logs, onde o acesso feito constantemente pelo
sistema, uma vez que arquivos de logs so atualizados constantemente. Dessa forma,
com noatime parametrizado em uma partio, o kernel deixa de executar uma rotina de
atualizao dos metadados de tempo de acesso, o que ajuda na performance do sistema.
Outro ponto relevante que o tempo de Access (atime) de um arquivo em uma partio com

Captulo 1 - Hardening em sistema Linux Ps-instalao

Com a partio remontada com a opo noatime, deve-se listar o contedo dos arquivos e em

15

noatime sempre ser o primeiro tempo registrado, ou seja, a data de acesso no momento
da criao do arquivo. Nesse contexto, mesmo com a mudana do tempo de modificao
(mtime), o administrador ter o tempo de Access (atime) como data efetiva da criao, e o
tempo de modificao (mtime) como tempo da ltima modificao.
A tabela 1.1 um bom exemplo da maneira com a qual um administrador pode planejar a
aplicao dessas opes especiais de montagem separando de forma estratgica diretrios
importantes com regras de montagens diferentes.
Ponto de Montagem

nosuid

nodev

noexec

noatime

/boot

/home

/usr

/tmp

/var

/var/log

/var/spool/squid

/var/personal

Saiba mais
Essas no so as
nicas opes que o
comando mount pode
oferecer. Para ver todas
as opes possveis,
consulte o man do
comando mount.

Tabela 1.1
Opes para
as parties do
arquivo /etc/fstab.

Segue um exemplo de como essa tabela ficaria no /etc/fstab.

# vi /etc/fstab

/dev/hda1

/boot

ext3

defaults,nosuid

0 2

/dev/hda3
/ ext3
defaults 0 1
/dev/hda4

/home

ext3

defaults,nosuid,noexec

0 2

Hardening em Linux

/dev/hda5
/usr ext3
defaults,nosuid 0 2

16

/dev/hda6

/tmp

ext3

defaults,nosuid,noexec

0 2

/dev/hda7

/var

ext3

defaults,nosuid,noexec

0 2

/dev/hda8

/var/log

ext3

defaults,nosuid,noexec,noatime

0 2

/dev/hda9

/var/spool/squid ext3

defaults,nosuid,noexec,noatime

0 2

/dev/hda10

/var/personal ext3

defaults,nosuid,noexec,noatime

0 2

/dev/hda2

none

sw

0 2

/dev/hdb

/media/cdrom0 iso9660 ro,user,noauto

0 0

/dev/fd0

/media/floppy0 auto

0 0

swap

rw,user,noauto

Tabela 1.2
Como a tabela
anterior ficaria no
/etc/fstab.

Para que as regras de montagem fiquem definitivas no sistema, devem ser feitos ajustes no
/etc/fstab. Para validar, interessante que se reinicie o sistema, para que todas as modificaes entrem em vigor e tenhamos a certeza de que nenhum erro foi cometido durante a
parametrizao do /etc/fstab. Isso, claro, se as regras de montagem no so efetuadas
durante a instalao.
Com essas opes ativadas, importante lembrar que podemos ter um pequeno problema
quando formos instalar um novo pacote com o apt-get ou dpkg. Esses utilitrios, em muitos
casos, executam e gravam informaes nos diretrios /var e /tmp e, caso estejam parametrizados com a opo noexec, nada poder ser instalado corretamente, gerando erros na
gesto de pacotes. Ento, podemos habilitar as regras de montagem no momento em que
formos colocar o servidor em produo. Uma alternativa criar um script bem simples com
os comandos para remontar essas parties e poder instalar os pacotes.

# vi /root/noexec#!/bin/bash

case $1 in
start)

mount -o remount,rw,noexec /var


mount -o remount,rw,noexec /tmp

mount

echo Parties SEM permisso de execuo


;;

mount -o remount,rw,exec /var


mount -o remount,rw,exec /tmp

mount

echo Parties COM permisso de execuo

;;
*) echo erro use $0 {start|stop}
exit 0
;;

Captulo 1 - Hardening em sistema Linux Ps-instalao

stop)

17

esac
exit 1
Para ativar a regra de noexec na partio:

# ./noexec start
O script vai deixar as parties sem permisso de execuo, o que ser til quando formos
instalar os outros pacotes. Para voltar partio a noexec, basta digitar:

# ./noexec stop
O script vai permitir novamente que possa ser executado algo dentro dessas parties,
possibilitando a instalao de novos pacotes. Para melhorar, pode-se copiar esse script para
um diretrio do PATH do root. Por exemplo, o /sbin. Dessa maneira, ser possvel executar
o script de qualquer diretrio do sistema.

Segurana no terminal
Em muitos momentos, um administrador pode inicialmente concentrar seus esforos para
mitigar a possibilidade de ameaas remotas. Mas se o esforo for exclusivo para esse ponto
de vista, deve-se assumir que o todo no mitigado, pois servidores que no esto conectados diretamente internet tambm esto correm riscos.
Existem vrios tipos diferentes de vulnerabilidades que possibilitam ameaas, um
exemplo a possibilidade de um cracker conseguir passar pela segurana de permetro

Cracker

definida por firewalls atravs de um ataque a uma vulnerabilidade de um navegador

Pessoa que faz a quebra


(ou cracking) de um
sistema de segurana, de
forma ilegal ou sem tica.

(ataque do tipo side client) e, atravs da estao de trabalho comprometida, chegar at


outros servidores.
Outra preocupao importante com a ameaa interna. Por exemplo, quando um funcionrio mal-intencionado tem acesso local (fsico) a um servidor. Isso pode acontecer durante
a ausncia do administrador que, ao sair de sua sala, se esquece e deixa o terminal do
servidor com o login ativo como usurio de root.
Para esse tipo de situao, pode-se aplicar alguns procedimentos para atribuir um grau de
segurana fsica ao servidor, sejam eles destinados a servios que estaro disponveis na
internet ou dedicados rede local. Mas em momento algum parametrizaes no sistema
podem substituir um aparato de segurana fsica, como uma sala de CPD/Datacenter com
controle biomtrico, apenas vo agregar mais segurana ao todo.

Desabilitar o uso de CTRL+ALT+DEL


Deixar o CTRL+ALT+DEL desabilitado no sistema Linux pode ser uma boa ideia, pois
no permitir que algum pressione essa sequncia de teclas e faa com que o servidor
reinicie. Isso bom principalmente quando o servidor Linux est no mesmo armrio que
Hardening em Linux

um servidor com o sistema Windows. Assim, evitamos que em algum momento algum

18

pressione CTRL+ALT+DEL no teclado de um servidor Linux e cause uma reinicializao


desnecessria do sistema.
Em algumas distribuies Linux que ainda usam o /etc/inittab, essa parametrizao pode
ser feita editando o /etc/inittab e comentando a linha a seguir:

# ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Pode-se tambm mapear as teclas para executar um outro comando qualquer, por exemplo:

# ca:12345:ctrlaltdel:/bin/echo Esse recurso foi desabilitado


Depois das alteraes, deve-se ativar as mudanas realizadas no arquivo /etc/inittab. Isso
feito com o comando:

# init q
No entanto, existem excees: um bom exemplo so as verses mais recentes do Ubuntu,
que embora seja uma distribuio Like Debian, possui configurao diferente para esse
procedimento. necessrio editar o arquivo # vi /etc/init/control-alt-delete.conf. Comente a
linha a seguir:

#exec shutdown -r now Control-Alt-Delete pressed


Para essa mudana ser efetivada, execute este comando:

# initctl reload-configuration

Exerccio de fixao 2 e
CTRL+ALT+DEL
Qual a principal vantagem de desabilitarmos o uso do CTRL+ALT+DEL?

Limitar o uso dos terminais texto


Dependendo do caso, na instalao de um servidor pode ser interessante deixar o login
habilitado em todos os terminais texto, por exemplo, para poder parametrizar ou impedir o
login nos terminais 4, 5 e 6.
Em distribuies Linux que usam o /etc/inittab, esse procedimento realizado comentando

# vi /etc/inittab
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
Depois das alteraes, precisamos atualizar novamente o arquivo /etc/inittab.

# init q
Para as outras distribuies que no possuem o /etc/inittab, possivelmente o arquivo que
permite esse tipo de parametrizao o /etc/default/console-setup, onde deve-se comentar
as seguintes linhas:

ACTIVE_CONSOLES=/dev/tty[1-6]

Captulo 1 - Hardening em sistema Linux Ps-instalao

as linhas do respectivos terminais que desejamos desabilitar.

19

Troque por esta, que vai liberar apenas 1 tty modo texto. No preciso configurar para o
modo grfico, pois automaticamente ser feita a utilizao da prxima. Nesse caso, o modo
X pode ficar na tty2 ou na tty7, mesmo que estejam desabilitadas.

ACTIVE_CONSOLES=/dev/tty[1]
Feito isso, hora de editar as tty para impedir a utilizao. O arquivo est em /etc/init/tty1.
conf at tty6.conf, lembrando que no possvel editar todas, pois uma delas ter de estar
habilitada para ser usada.

Bloquear o terminal com a varivel TMOUT


Quando usamos a shell bash, temos uma varivel de ambiente entre tantas outras que
normalmente no vm parametrizadas por padro. Essa varivel a TMOUT, que controla
em quanto tempo o terminal fica aberto sem atividade. Ela pode ser parametrizada com o
comando exporte manualmente ou via terminal. Para fins de teste, defina um tempo, lembrando que essa varivel parametrizada em segundos.

# TMOUT=15
Definido o valor 15, ela foi definida para fechar o terminal aps 15 segundos de ociosidade.
Logo, se o terminal no for utilizado durante 15 segundos, ele ser fechado e o usurio,
obrigado a efetuar o processo de login novamente.
Para definir o valor padro da varivel TMOUT, pode-se defini-la dentro do arquivo global de
variveis do sistema, o arquivo /etc/profile ou no .bashrc do home usurio. Caso a parametrizao da varivel TMOUT seja feita no TMOUT, ser exportada automaticamente toda vez
que o sistema for iniciado ou se for parametrizada no .bashrc do home do usurio, a varivel ser exportada automaticamente quando o usurio executar o login, respectivamente.
Dessa maneira, com a varivel TMOUT parametrizada, o sistema voltar para a tela de login
se nenhum comando for executado no intervalo pr-estabelecido.
Exemplificando o /etc/profile:

# echo export TMOUT=300 >> /etc/profile


Exemplificando o /root/.bashrc:

# echo export TMOUT=300 >> /root/.bashrc


Caso a opo seja pelo .bashrc, interessante tambm parametrizar o .bashrc do /etc/
skel, para que os usurios que forem criados no futuro tambm tenham a varivel TMOUT
definida.
Exemplificando o /etc/skel/.bashrc:

# echo export TMOUT=300 >> /etc/skel/.bashrc

Hardening em Linux

Bloquear o terminal com o programa Vlock

20

A instalao do pacote vlock para complementar a segurana de terminais interessante,


pois mesmo com o conceito de temporizao definido na varivel tmout para fechamento
automtico, em alguns momentos o administrador pode querer fechar os terminais manualmente. Nesses casos, o vlock pode ser uma ferramenta interessante.

# apt-get install vlock

d
Boas prticas
recomendadas na
ABNT NBR ISO/IEC
27002:2008: a limitao
de tempo imposta pela
ativao da varivel
TMOUT possibilita
conformidade com o
item 11.5.5, embora
no seja explicitado o
acesso a terminal.

Para travar todos os terminais, digite:

# vlock a
O vlock executado com o parmetro -a bloqueia o uso de todos os terminais. Os terminais s
sero liberados mediante autenticao com a senha do usurio que os travou. Assim sendo,
deve-se assumir que pequenos detalhes em configuraes, como uma varivel de ambiente da
shell (tmout) e um simples programa, podem proporcionar grande ajuda para manter um servidor seguro, inclusive com controles de segurana para todos os terminais protegidos. Mesmo
assumindo que a segurana local est tambm vinculada a controles de segurana fsica.

Gerenciamento de privilgios
Deve-se ter em mente que o usurio root o usurio mais conhecido em sistemas *nix (o
termo *nix aborda os sistemas baseados em Unix). Quando algum cracker ou funcionrio
mal-intencionado (insider) tentar obter acesso ao sistema, seu foco em muitos momentos
vai ser conseguir a senha do usurio root se ele tiver sorte e consegui-la, ter acesso ao
sistema. Como evitar isso?
Devemos adotar alguns procedimentos para evitar que o usurio root tenha acesso direto
ao sistema. A alternativa obrigar os administradores a utilizar seus usurios comuns para
efetuar o login e depois usarem o sudo ou o su para entrar em uma sesso de root.
Mas interessante no s limitar o usurio root: recomendvel impor limites tambm
para os usurios comuns, permitindo que somente o(s) usurio(s) do(s) administrador(es)
possa(m) ter um pouco mais de privilgios. Assim sendo, no cria-se uma janela de oportunidade para que um cracker possa se aproveitar de um usurio comum facilmente.

Bloquear o login do root nos terminais texto


No recomendvel deixar o login como root habilitado para os terminais texto. O ideal
bloquear o login do root em todos os terminais texto, focando o procedimento de login para
ser iniciado com um usurio comum e, quando for necessria a realizao de alguma tarefa
administrativa, usar a conta do usurio root usando o comando su.
Criao do usurio comum:

Uma das maneiras pelas quais podemos bloquear o login do root editar o arquivo /etc/
securetty e comentar as linhas referentes aos terminais que queremos desabilitar para o
root. Comentar as seguintes linhas:

# vi /etc/securetty

#tty1
#tty2
#tty3
#tty4
#tty5

Captulo 1 - Hardening em sistema Linux Ps-instalao

# adduser tuxrnp

#tty6
21

#tty7
#tty8
#tty9
#tty10
#tty11
#tty12
Agora que as linhas dos terminais esto comentadas, podemos tentar efetuar o processo de
login em outro terminal com o usurio root. Ser percebido que o usurio root no tem mais
permisso para efetuar um login direto via um terminal local.

Determinar datas de expirao para contas de usurios


Se o servidor for alocar grande quantidade de usurios, pode-se especificar datas de
expirao para essas contas. Dessa maneira, se um usurio usa a sua conta todos os dias,
quando sua senha expirar ele poder modific-la e renovar a conta. Mas, se por algum
motivo uma conta de um usurio no est sendo usada, ela ser desativada no tempo escolhido, dando-nos a segurana de que essa conta no ser usada com ms intenes.
Utiliza-se o comando chage para modificar os parmetros do arquivo /etc/shadow, onde so
feitos esses controles.
Primeiro, interessante visualizar a configurao padro de uma conta de um usurio, por
exemplo, do usurio teste.

# chage -l teste
O uso do comando chage possibilita fazer algumas modificaes:

# chage -M 30 -W 5 -I 2 teste
# chage -l teste
Onde:
11 -M: o tempo mximo de validade da conta;
11 -W: o tempo de aviso;
11 -I: o tempo antes de a conta ser desativada.
Com essa configurao, est sendo parametrizado que a conta do usurio vlida por
30 dias. Quando estiverem faltando 5 dias para a conta expirar, o usurio comear a ser
avisado quando realizar o procedimento de login. Depois desses 30 dias, o usurio ter 2
dias para poder modificar a senha e para que a conta seja renovada. Enquanto ele no fizer
isso, no conseguir efetuar um login no sistema, mas se nesses 2 dias o usurio no modi Hardening em Linux

ficar a senha, a conta ser desativada e somente o usurio root poder reativ-la.

22

Em suma, essa uma forma de controlar senhas e contas de usurios que tm contas com
shell vlida. Normalmente, esse tipo de controle aplicvel sem muito esforo em um contexto onde o servidor dedicado a um determinado servio e existem atividades de login
exclusivamente administrativas.

Saiba mais
Essa uma das
maneiras pelas quais
se pode bloquear o
acesso do root pelos
terminais, mas existem
outras possibilidades,
que sero abordadas
em outros tpicos.

Remover shells vlidas de usurios que no precisam delas


Usurios que no usam shell no tm a necessidade de t-la, ou seja, todo aquele usurio
que de sistema ou cliente de servio , com exceo dos usurios que utilizam servios
como TELNET ou SSH, e tambm que realizam login no sistema atravs do terminal local (tty).
Para remover as shells vlidas de todos os usurios que no precisam de uma shell vlida,
recomendvel primeiro criar um ou mais usurios estratgicos que pertencem ao grupo
de administradores. Os usurios pertencentes a esse grupo tero permisso para realizar
o login e posteriormente usar o su para se tornarem root, uma vez que isso esteja devidamente parametrizado.
Nessa simulao, primeiro devemos criar o grupo administradores. Logo em seguida, criaremos um usurio administrador e o adicionaremos ao grupo.

# groupadd administradores
# adduser toor
# gpasswd -a toor administradores
Visualize o arquivo /etc/passwd e identifique se todos os usurios de sistema tambm
possuem shells vlidas.

# cat /etc/passwd | less


Em um segundo momento, pode-se criar um Script shell que automatiza a remoo de todas
as shells vlidas de todos os usurios, exceto daqueles que forem especificados como parte
do grupo de administradores e o usurio root:

# cd /root
# vi invalidos.sh#!/bin/bash

for USER in $(cat /etc/passwd| cut -f 1 -d : | grep -v root | grep

do

usermod -s /bin/false $USER

done

# chmod +x /root/invlidos.sh
#./invalidos.sh
Resumindo esse script: ele executa um for que pegar somente a primeira coluna do arquivo
/etc/passwd, que so os nomes dos usurios que no esto especificados no grep -v. Isso
armazenado dentro da varivel USER. Logo depois, com o comando usermod, esse script
passa todas as shells dos usurios que esto na varivel USER para /bin/false, ou seja, uma

Captulo 1 - Hardening em sistema Linux Ps-instalao

-v toor | grep -v tuxrnp)

shell invlida.
23

Depois da execuo do script, visualize novamente o arquivo /etc/passwd e veja como ficou.

# cat /etc/passwd | less


Repare que todas as shells dos usurios passaram a ser /bin/false, menos as dos usurios
root, toor e tuxrnp.
Deve-se adotar a poltica ao criar um usurio novo, para que ele seja criado com uma shell
invlida. Caso precise de uma shell vlida, depois basta mudar isso no arquivo /etc/passwd.
Para fazer isso, preciso editar os seguintes arquivos:
No Debian:

# vi /etc/adduser.conf
Nesse arquivo, podemos mudar a varivel DSHELL para uma shell invlida.

DSHELL=/bin/false
No Red Hat:

# vi /etc/default/useradd
Dessa maneira, os usurios sero criados por padro com a shell /bin/false, uma shell invlida.
Para finalizar essa tarefa, deve-se visualizar o arquivo /etc/shells, um arquivo texto que
contm os nomes de caminho completos das shells de login vlidos. Esse arquivo consultado pelo comando chsh (utilizado para mudar a shell de um usurio) e fica disponvel para
consulta por outros programas.

# cat

/etc/shells

fortemente recomendvel ficar atento, porque h programas que consultam esse


arquivo para descobrir se um usurio um usurio normal. Por exemplo, daemons (processos que so executados em background) de ftp tradicionalmente desaprovam acesso
aos usurios com interpretadores de comando no includos nesse arquivo, todavia isso
tem de ser avaliado, pois no uma regra absoluta para todas as implementaes de
servidores FTP disponveis.

Instalao de pacotes especficos


Embora um sysadmin deva ter em mente que prepara um servidor utilizando as boas prticas de segurana, com o objetivo de que este no seja vtima de algum tipo de incidente de
segurana, ele tambm deve assumir que, se no existe segurana 100%, existe sempre um
risco assumido ainda que no seja mensurvel. Diante desse contexto, recomendvel que
durante o processo de hardening seja feita a instalao de aplicaes que podero auxili-lo
em execuo de Auditorias futuras ou em uma Resposta a Incidente de Segurana.

# apt-get install y rkhunter chkrootkit unhide debsecan mtr-tiny

Hardening em Linux

apticron htop vim vlock whowatch

24

Algumas ferramentas:
11 rkhunter: serve para fazer a identificao de rootkit e apoio Resposta Incidente;
11 chkrootkit: identifica o rootkit e d apoio Resposta Incidente;
11 unhide: ferramenta para identificao de rootkit e apoio Resposta Incidente;

11 lsof: til para a gesto de processos;


11 htop: arrojada ferramenta para a gesto de processos;
11 vlock: ferramenta de travamento de terminal texto;
11 debsecan: para o suporte gesto de atualizaes de segurana;
11 apticron: til para o suporte gesto de atualizaes de segurana;
11 whowatch: ferramenta interessante para a gesto de uso de terminais;
11 vim: editor de texto.
Um ponto crtico para servidores Linux so os cdigos maliciosos do tipo rootkit, uma categoria de malware usada por invasores. Um Host IDS, que o tema tratado no captulo 3, em
muitos casos poder ser uma forma de identificao da presena de um rootkit no sistema,
mas o uso de ferramentas como chkrootkit e rkhunter recomendvel, pois possibilitam
auditar o sistema em busca de possveis rootkits, que so necessrios em um servidor Linux.
Durante a instalao de pacotes, deve-se ativar o exec nas parties /var e /tmp. Essa tarefa
pode ser feita com o uso do script noexec. Em alguns casos, pode ser interessante somente
ativar os controles adicionais de montagem no momento em que o servidor estar sendo
promovido a produo, para que durante o processo de instalao, homologao e testes,
esses controles no sejam um problema.
recomendvel tambm a atualizao de todo o sistema, no somente dos pacotes que esto
com notificao de vulnerabilidade, pois antes de instalar e configurar os servios para os
quais se destina o servidor, o melhor momento para atualizao completa do sistema.

# apt-get install update && apt-get install y upgrade

Segurana do Grub
Habilitar senha Grub uma tarefa recomendada, que pode agregar mais valor segurana
fsica, mas obvio que esse tipo de procedimento no substitui controles tradicionais de
segurana fsica.
Nesse momento, o Grub est em sua terceira verso, mas ainda comum ter distribuies
Linux que usam a segunda verso.

grub/grub.cfg. A forma de configurar uma senha e outros parmetros no GRUB mudou na


verso 3 de tal forma que a configurao/parametrizao se divide em vrios arquivos do
diretrio /etc/default/grub.
Mudar ou incluir a varivel timeout=0 no arquivo /etc/default/grub, para no mostrar menu
no momento da inicializao.
Gerar hash da senha SHA512 por meio do comando:

#grub-mkpasswd-pbkdf2
Enter password:
Reenter password:
Your PBKDF2 is grub.pbkdf2.sha512.10000.706A070CD168B759801D2790C6D4
8D5C3842B9165CF08600918CD9A496B6BFF9CD9BB8F7C99DEC431DF3AD0D466709
ECE041FC00C5C1B58F00A879E0322959B7.6FC5058001DFFC1CD6B35F9A5DA66ED6C

Captulo 1 - Hardening em sistema Linux Ps-instalao

Na verso 2, a parametrizao se concentra em nico arquivo de configurao, que /boot/

25

8745E4999E064E712C9BF302E8F2547CD0B591C33A340F229FD79D2252E23CFC4141
0C9A3300537E54C9CE6F7008100
Adicionando o cdigo de proteo a seguir no final do arquivo /etc/grub.d/00_header. Cdigo:

cat << EOF


set superusers=testuser
password_pbkdf2 testuser grub.pbkdf2.sha512.10000.706A070CD168B75980
1D2790C6D48D5C3842B9165CF08600918CD9A496B6BFF9CD9BB8F7C99DEC431DF
3AD0D466709ECE041FC00C5C1B58F00A879E0322959B7.6FC5058001DFFC1CD6B35F
9A5DA66ED6C8745E4999E064E712C9BF302E8F2547CD0B591C33A340F229FD79D22
52E23CFC41410C9A3300537E54C9CE6F7008100
EOF
O testuser o usurio que est sendo definido na configurao do Grub, combinando a
senha gerada pelo comando grub-mkpasswd-pbkdf2.
Para efetivar as configuraes, deve-se executar:

# update-grub
Dessa forma, o arquivo /boot/grub/grub.cfg ser recompilado e ser adicionado proteo.
Proteja o arquivo /boot/grub/grub.cfg:

chmod 600 /boot/grub/grub.cfg


chattr +i /boot/grub/grub.cfg
Proteja o arquivo /etc/grub.d/00_header:

chmod 600 /etc/grub.d/00_header


chattr +i /etc/grub.d/00_header

Habilitar senha nas verses antigas do Grub (verses 1 e 2)


O arquivo de Configurao do GRUB, onde possvel parametrizar senha, o arquivo /boot/
grub/menu.lst, utilizando o parmetro password --md5 <senha>. A senha criada com o
auxlio do comando md5crypt via shell do grub, ou via o comando grub-md5-crypt na shell
do sistema. Alm da parametrizao da senha, recomendvel tambm alterar a varivel
timeout=0, para no mostrar menu do grub na inicializao, exemplo:

timeout=0
password --md5 <senha md5>
J na verso GRUB2, a senha criada com o auxlio do comando grub-mkpasswd-pbkdf2, e a

Hardening em Linux

parametrizao da senha no arquivo 00_header.

26

Proteger o arquivo /boot/grub/menu.lst.

chmod 600 /boot/grub/menu.lst


chattr +i /boot/grub/menu.lst

Roteiro de Atividades 1
Na prtica de reconhecimento das ferramentas aptinfo, debsecan e vlock, ser necessrio que
o aluno use a mquina virtual preparada como Virtuabox. Dessa forma, ser possvel aplicar
todos os conhecimentos (tcnicas e ferramentas) de hardening propostos at o momento.

Atividade 1.1 Hardening Linux Apticron


Verifique se o apticron est instalado, revise a sua configurao e teste. Descreva os
comandos executados e os resultados.

Atividade 1.2 Hardening Linux Debsecan


Verifique se o debsecan est instalado, revise a sua configurao e teste. Atualize todos os
pacotes que j possuem correes disponveis e atualize a whitelist. Descreva os comandos

Captulo 1 - Roteiro de Atividades 1

executados e os resultados.

27

Atividade 1.3 Hardening Linux Debsecan via cron


Configure o debsecan para funcionar via cron, enviando somente informaes e novas
atualizaes pendentes. Descreva os comandos executados e os resultados.

Atividade 1.4 Hardening Linux atualizao


Realize a atualizao completa do seu sistema Linux. Descreva os comandos executados
e os resultados.

Atividade 1.5 Hardening Linux pacotes desnecessrios


Verifique o permissionamento das ferramentas consideradas crticas, deixando somente
execuo permitida para o root (exemplo: nmap, netcat, shred, tcpdump, telnet etc.).

Hardening em Linux

Descreva os comandos executados e os resultados.

28

Atividade 1.6 Hardening Linux vlock


Avalie o funcionamento da ferramenta vlock e a configurao dos terminais. Descreva os
comandos executados e os resultados.

Atividade 1.7 Hardening Linux regras de montagem


Visualize as regras de montagens ativas. Descreva os comandos executados e os resultados.

Atividade 1.8 Hardening Linux Chkrootkit rkhunter


Execute o comando chkrootkit e o comando rkhunter para avaliar o sistema, sendo que, no

Captulo 1 - Roteiro de Atividades 1

caso do rkhunter, utilize a opo de gerao de hash para melhor para posterior auditoria.

29

Atividade 1.9 Hardening Linux Baseline


Avalie o baseline proposto (planilha xls fornecida como material de apoio) e apresente suas

Hardening em Linux

observaes. Como deve ser configurado um baseline para a sua organizao?

30

Compreender e usar mdulos PAM; realizar auditoria de senhas de usurios; criar


definio de uso do sistema de arquivos; delegar tarefas administrativas via sudo;
criar permissionamentos mais elaborados e amplos com ACL.

conceitos

Utilizao do mdulo PAM; segurana de terminal; auditoria de senhas; quota de


sistema de arquivos; comandos via sudo; permissionamento via ACL.

Introduo
Mdulos PAM.

11 Sinalizadores de Controle.
11 Procura por senhas fracas.
11 Utilizao do John the Ripper.
11 Utilizao de Quota.
11 Utilizao de ACL Posix 1e.
11 Comando sudo (Superuser Do).
11 Preveno Escape Shell.
A criao de usurios e grupos em sistemas Linux importante para definir que recursos
podem ser acessados por quais usurios e/ou grupos e ainda permite ao Sistema Operacional gerenciar a execuo dos processos de cada usurio de forma adequada.
Manter o controle do que seus usurios esto fazendo uma parte fundamental para
o gerenciamento de usurios. O Sistema Operacional Linux possui vrios mdulos que
ampliam a segurana e a gerncia sobre seus utilizadores. Administradores sem experincia
em segurana normalmente preparam seus servidores com uma instalao bsica e, depois
que suas aplicaes esto disponveis, nenhum procedimento feito para manter a integridade do sistema e estabelecer sua trilha de auditoria.

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

objetivos

Hardening em sistema Linux


controles de segurana para
contas de usurios

31

Exerccio de nivelamento 1 e
Controles de segurana para usurios
1. Como voc avalia a necessidade de uso de controles especficos para recursos de autenticao em sua organizao?

2. Na poltica de segurana de sua empresa j existem definies para a criao de controles no uso de terminais ou mesmo quanto ao tratamento do tempo de ociosidade de
um terminal?

3. Como voc avalia na sua organizao o controle do uso do recurso de armazenamento?


Existem critrios de quotas definidos?

4. Em sua empresa, existe qual critrio de auditoria de senhas para que seja possvel identificar senhas fracas?

Controles de autenticao com a utilizao do PAM


Mdulos de Autenticao Plugveis (PAM) so uma interface de mdulo que corresponde
ao tipo de autorizao baseada em um mdulo. Um mdulo PAM pode usar apenas uma ou
todas as quatro interfaces possveis. Essas interfaces so: account, auth, password e session.
Cada uma delas ser especificada no arquivo de configurao de um servio, se for apropriada para o mdulo e o administrador desejar usar essa interface:
11 account: essa interface verifica se uma conta tem autorizao para usar o sistema, o que
pode significar verificar se existe, se est vencida ou se tem acesso permitido em determinado horrio, vinculada a um grupo ou atravs de determinado servio;
11 auth: interface que serve para autenticar usurios. Isso pode ocorrer atravs de senhas,
banco de dados ou outro mecanismo. Alm disso, esses mdulos tambm tm permisso
para definir credenciais, como membros de grupo ou mesmo baseados em tokens Kerberos;

Hardening em Linux

11 password: a interface password usada para verificar e definir a autenticao de senha


ou o critrio de definio de senha;
11 session: responsvel pela configurao e gerenciamento de sesses de usurio.
Pode incluir tarefas de organizao, como montar diretrios, criar arquivos etc.
Com esse recurso, possvel auxiliar os mtodos de autenticao tradicionais, possibilitando que executem novas funes. Um bom exemplo o programa de login, que se baseia
no /etc/passwd e no /etc/shadow do sistema.
32

Mas ser que esses dois arquivos possibilitariam a criao de um controle definindo o

Alm de ser parte da


maioria das distribuies Linux, esse
recurso tambm
encontrado em outros
sistemas, como Solaris.

simultneos que um usurio pode fazer o login?


A resposta para essas perguntas : no, mas o PAM pode fazer isso com os seus mdulos
que so plugados ao programa de login. O PAM no faz s isso: ele possui muitos mdulos
com funes bem diferentes, e no somente ao programa de login que se aplica; o PAM j
tem suporte a muitos programas. Dessa forma, o uso do PAM em um processo de Hardening
deve sempre ser considerado.
Para certifica-se se um determinado programa tem suporte a PAM, possvel consultar se
este foi compilado com suporte a libpam.so.

# ldd /bin/su
# ldd /bin/login
# ldd /usr/sbin/sshd
Como possvel saber se um determinado programa tem suporte ao PAM? Outra forma
acessar o diretrio /etc/pam.d. Dentro desse diretrio, deve existir um arquivo com o nome
do programa. No entanto, essa no uma regra absoluta.
Por exemplo, vejamos se existe um arquivo chamado login dentro do /etc/pam.d.

# ls -l /etc/pam.d
Veja como exemplo o arquivo login. Existem muitos outros tambm. Alguns sero abordados
mais frente.

Sinalizadores de controle
Para cada interface, o arquivo de configurao especifica um sinalizador de controle, que
determina o que o PAM far em seguida, com base no resultado da verificao realizada.
Existem quatro sinalizadores de controle: optional, required, requisite e sufficient:
11 optional: os mdulos opcionais no afetam o sucesso nem a falha da autenticao, a
menos que no haja outros mdulos para determinada interface;
11 required: para que o usurio possa continuar, dever ser retornado um resultado de
sucesso. A notificao de usurio no ocorre at todos os mdulos para uma interface
estarem satisfeitos;
11 requisite: o usurio s poder continuar se o mdulo resultar com sucesso. A notificao
do usurio acontece imediatamente em caso de falha no primeiro mdulo requisite ou
required de uma interface;
11 sufficient: um resultado de sucesso combinado sem falhas do mdulo required ou
requisite viabiliza uma boa autenticao, pressupondo que nenhum outro mdulo vir a
seguir. A falha de um mdulo sufficient ignorada.

Caminho do mdulo
O caminho do mdulo informa ao PAM a localizao do mdulo. Normalmente, um nome
de caminho completo, que contm o nome e a extenso do mdulo, como /lib/security/
pam_unix.so. Se no for especificado um caminho, o PAM assume como padro /lib/security
para poder localizar o mdulo.

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

Saiba mais

horrio em que um determinado usurio pode realizar um login? Ou o nmero de terminais

33

Pam_time
uma boa prtica em sistema Like Unix no deixar o login como root habilitado para
conexo direta. O ideal a execuo do login com um usurio comum inicialmente, e
depois obter acesso como root quando precisar executar alguma tarefa administrativa.
Usando um conceito de autenticao em duas camadas, o que gera uma contramedida
contra ataques de fora bruta, destinado ao usurio root.
Foi mostrado que possvel travar o login de root em todos os terminais comentando as
linhas dos terminais no arquivo /etc/securetty. Outra forma interessante para criar um controle para a conta do usurio root descomentar a linha que refere-se a pam_time.so para
bloquear o login de root utilizando o conceito baseado horrio de acesso.
Edite o arquivo /etc/pam.d/login e descomente a seguinte linha:

# vi /etc/pam.d/login
account requisite

pam_time.so

Essa linha est tratando da conta dos usurios (account) com o mdulo pam_time.so. At
aqui essa linha no est fazendo nada, pois a maioria dos mdulos do PAM depende de um
arquivo de configurao adicional.
O mdulo pam_time.so trabalha em conjunto com o arquivo /etc/security/time.conf pelo
nome do mdulo e do arquivo de configurao.
Para definir o horrio de acesso, deve-se editar o arquivo /etc/security/time.conf e acrescentar a seguinte linha no final do arquivo:

# vi /etc/security/time.conf
login;tty*;root;!Al0000-2359
Onde:
1 login: indica o servio;
1 tty*: indica os terminais onde a poltica ser aplicada;
1 root: determina que a poltica ser aplicada para o usurio root.
1 !Al0000-2359: indica o horrio permitido. O caractere ! estabelece que aquele
horrio no permitido.

Sintaxe: services;ttys;users;times
Com essa configurao, est definido que o root no pode efetuar login em nenhum
terminal, em nenhum dia ou horrio. Dessa maneira, cria-se um controle que bloqueia a
usurio root para que este no tenha acesso direto ao login do sistema.
Para validar o controle, basta tentar realizar um login em outro terminal como root, o que no

Hardening em Linux

dever ocorrer. Todavia, essa proposta imagina que haver um usurio definido que ter acesso ao

34

recurso login e, a partir dele, ser permitido usar o comando su ou sudo para usar a conta do root.

Pam_limit
A seguir ser mostrado como definir uma poltica para no permitir que um usurio faa
login em mais de um console, consecutivamente com a utilizao da biblioteca pam_limits.so.

Primeiro preciso habilitar o mdulo que vai possibilitar a utilizao desse recurso. Para
isso, necessrio editar o /etc/pam.d/login e inserir a linha a seguir:

# vi /etc/pam.d/login
session

required

pam_limits.so

Com o mdulo habilitado, temos de editar o arquivo de configurao adicional desse


mdulo. Na sequncia, deve-se ir at o diretrio /etc/security, editar o arquivo limits.conf e
inserir a seguinte linha:

# vi /etc/security/limits.conf
usurio

hard

maxlogins

Com isso, criado um controle que limita o usurio para que utilize somente um terminal.
Para testar, basta executar o login em um terminal com o usurio e tentar efetuar login em
outro simultaneamente.
Outra utilizao da biblioteca pam_limits.so a parametrizao para limitar os processos
dos usurios ou um grupo, o que importante para a execuo de um sistema estvel.
Exemplificao para coibir um forkbomb:

rnpadmin hard nproc 300


@systelcom hard nproc 150
@ sysprinters soft nproc 100

Nessa parametrizao, ficou definido que membros de um grupo de estudantes podero


abrir 150 processos; membros do grupo sysprinters, 100; e sysop, 200 processos. J o
usurio rnpadmin poder criar at 300 processos. Todavia, esse tipo de configurao deve
ser bem avaliado, para que seja dimensionado o nmero de processo ideal.

Pam_wheel
Nessa exemplificao, ser usado como exemplo um usurio denominado toor e um grupo
denominado administradores, feitos para criar mais uma camada de controle com o objetivo de aumentar ainda mais a segurana na autenticao:

# adduser toor
# groupadd administradores
# usermod G toor administradores
A proposta somar ao procedimento de limitao de logins, j mencionado, uma poltica
que no permita o uso do comando su por qualquer usurio, possibilitando o uso do su
somente para os usurios do grupo administradores.
Essa configurao vai ser pouco diferente das outras, pois no precisa de um arquivo de
configurao adicional. Basta limitar a utilizao do programa su, com a edio do arquivo
su, que est dentro do diretrio /etc/pam.d.

# vi /etc/pam.d/su
auth

required

pam_wheel.so group=administradores

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

@sysop hard nproc 200

35

Essa configurao trata a autenticao do usurio (auth) com o mdulo pam_wheel.so,


utilizando o grupo administradores. Uma vez parametrizado, somente usurios que pertencerem ao grupo administradores que podero usar o comando su.
Para testar, execute o login com o usurio toor em um terminal e com o tux em outro.
Ento necessrio tentar fazer o su com os dois usurios. Caso as configuraes tenho sido
feitas de forma correta, ser observado que somente o usurio toor conseguir, pois s ele
pertence ao grupo administradores.
Por questes de segurana, toda a atividade do comando su deve ser monitorada. Os procedimentos a seguir servem para registrar em arquivo de log o uso do comando su pelos usurios.
Modifique o arquivo /etc/login.defs e descomente a seguinte linha:

SULOG_FILE /var/log/sulog
Logo em seguida, necessrio criar o arquivo sulog em /var/log.

# touch /var/log/sulog
Para validao, deve-se fazer um teste e usar em paralelo o comando tail para melhor
visualizao do log, podendo-se desviar a sada padro do arquivo para ver o contedo do
arquivo de log em tempo real, para um determinado terminal. No exemplo foi escolhido o
terminal 12.

# tail -f /var/log/sulog > /dev/tty12 &


Na sequncia, devemos efetuar login com o usurio toor e usar o comando su para alternar
para o usurio root.

$ su
Feito isso, visualize os registros do log no terminal 12.
Com alguns ajustes nos arquivos de configurao do PAM, possvel limitar bastante os
privilgios comuns e at mesmo limitar o prprio root, o que em muitas situaes pode
ser til. Sendo tambm possvel fazer essas e outras configuraes utilizando o PAM, o que
ajuda um sysadmin a ter grande controle e mostra que o uso do recurso PAM uma grande
ferramenta para gerenciar privilgios.

Exerccio de fixao 1 e
PAM
1. Cite duas vulnerabilidades conhecidas nos servidores da sua organizao, relacionadas

Hardening em Linux

autenticao, que o recurso do PAM pode mitigar.

36

2. Existem definies restritivas do uso do comando su nos servidores de sua organizao?

Procura por senhas fracas


A senha de login de um usurio algo pessoal: nem mesmo os administradores devem
saber as senhas dos usurios. Normalmente, quando as contas de usurio so cadastradas
em um sistema, ou o cadastro feito com uma senha inicial que dever ser trocada no primeiro login efetuado pelos usurios ou, em alguns casos, o administrador solicita ao usurio
que digite a senha. Entretanto, se no existem controles que definem o critrio para ter uma
senha forte, cria-se a oportunidade para o usurio digitar uma senha fraca, que pode ser
totalmente composta por nmeros e com poucos dgitos, palavras existentes em dicionrios
de bruteforce e at mesmo uma data simblica. Essas so senhas muito fceis de serem
descobertas, s vezes nem sendo necessrio um programa de bruteforce (Fora Bruta)
elaborado para serem quebradas.
Para realizar esse trabalho de auditoria em busca de senhas fracas, pode ser interessante
usar uma ferramenta da mesma categoria e funcionalidade utilizada por um cracker.
No mundo Unix, a ferramenta recomendada para essa tarefa o John the Ripper.

Utilizao do John the Ripper


O John the Ripper uma ferramenta de bruteforce clssica do mundo Unix, que tenta
descobrir as senhas do arquivo /etc/shadow usando uma WordList (lista com senhas a serem
tentadas) padro que pode ser incrementada ou usada randomicamente.
fato que, quando a senha do usurio for mal elaborada e estiver contida no
dicionrio, ou mesmo se a senha for igual ao login, ser facilmente descoberta

importante destacar que uma ferramenta como o John the Ripper no o tipo de ferramenta que se deve deixar instalada em um servidor. Isso seria o mesmo que fechar a porta
de casa, mas deixar um p-de-cabra embaixo do tapete. recomendvel sempre colocar ferramentas desse tipo em outra mquina, ou seja, a mquina do prprio administrador. Para
auditar, basta copiar o /etc/shadow do servidor para a mquina do administrador e test-lo.
Para realizar um experimento para compreender o funcionamento do John the Ripper, crie
um usurio chamado teste, definindo a senha como 123456. Instale o John the Ripper.
# adduser teste
# apt-get install john
Com o John the Ripper instalado, entre no diretrio /usr/share/john e visualize o arquivo de
WordList chamado password.lst.

# cd /usr/share/john
# cat password.lst
interessante, sempre que realizar uma auditoria em busca de senhas fracas, incrementar
essa WordList, tornando a busca ainda mais refinada. Outra possibilidade incrementar a
WordList com outras disponveis na internet.
Copie o /etc/shadow do servidor para o /root da mquina do administrador para colocar
o John the Ripper em ao. Pode-se copiar o arquivo via scp (utilitrio do ssh para fazer

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

por essa ferramenta.

cpias remotas).
37

# scp root@IP_do_Servidor:/etc/shadow /root


Com o /etc/shadow, execute o teste do John the Ripper.

# john /root/shadow
Ser percebido que senhas fracas so quebradas facilmente. Todas essas senhas que o
John the Ripper descobre so armazenadas em um arquivo chamado john.pot, no diretrio
/usr/share/john.
Ento, se for necessrio fazer a verificao novamente, deve-se apagar esse arquivo.

# rm -f john.pot
# john /root/shadow
Com esse experimento que percebemos que senhas fracas em um servidor so um grande
problema, mas com uma simples ferramenta pode-se descobrir as senhas fracas. Devemos
fazer esse tipo verificao de tempos em tempos, caso os usurios mudem as senhas com
frequncia. Se deixarmos os usurios com senhas fracas, teremos uma grande porta de
entrada para um cracker.

Utilizao de quota
O recurso de quota uma ferramenta importante para definir controle com o foco do uso

Saiba mais
Quando a instalao
do John the Ripper
realizada a partir de um
pacote pr-compilado,
o arquivo john.pot fica
no diretrio .john, na
home do usurio.

do recurso. Nesse caso, o sistema de arquivos. Dessa forma, usar quota mais um valor de
segurana a partir do Sistema de arquivos, sendo um deles o de controlar a utilizao dos
sistemas de arquivos entre todos os usurios, criando controles que impeam um nico
usurio de ter poder de escrita em seu diretrio pessoal ou exceder os limites fsicos de
espao em um sistema de arquivos, comprometendo a sua utilizao pelos outros usurios.
Alm disso, tal procedimento ajudar bastante a ter um backup de tamanho controlado.
Para comear a configurao do recurso de quota, devemos identificar quais os parmetros
de montagem do diretrio, neste exemplo, o diretrio /home.

# mount
O recurso quota deve ser especificado para parties e no para diretrios, o que demanda
a edio do arquivo /etc/fstab (sistemas de arquivos montados) para configurar a partio
que deve ter suporte, caso isso no tenha ocorrido durante a instalao. Veja o exemplo:

# vi /etc/fstab
/dev/hda6 /home ext3

defaults,usrquota,grpquota

No quarto campo da linha, temos as opes que parametrizam a forma como a partio
ser montada. Devemos usar o parmetro usrquota para configurar quotas para usurios e
grpquota para configurao de quotas para grupos de usurios.

Hardening em Linux

Aps a parametrizao do /etc/fstab necessrio entrar no ponto de montagem da partio

38

especificada, no nosso caso, /home, e criar os dois arquivos de controle de quota:


11 aquota.user: gerencia quotas para os usurios;
11 aquota.group: gerencia quotas para os grupos.
Conforme a exemplificao, o sistema Linux atualmente trabalha com o QUOTA 2, que uma
evoluo do antigo sistema de quotas disponvel no Linux.

d Boas prticas
recomendadas na
ABNT NBR ISO/IEC
27002:2008: o uso do
John the Ripper
torna-se uma opo
interessante no que diz
respeito ao processo
de auditoria de senhas.
Para buscar conformidade com os itens
11.5.3 e 11.3.1,
orientado que as
senhas sejam
controladas atravs de
um processo de
gerenciamento formal e
que os usurios sejam
solicitados a seguir
boas prticas de
segurana da informao na seleo e no
uso de senhas.

# apt-get install quota


# cd /home
# quotacheck vagumF
# /etc/init.d/quota stop
# /etc/init.d/quota start
Os arquivos de controle de quota devem ter suas permisses modificadas de maneira que
s o root tenha permisso de leitura e gravao sobre eles, ou seja, o valor 600, conforme o
exemplo nos comandos:

# chmod 600 quota.user


# chmod 600 quota.group
Aps isso, devemos remontar o sistema de arquivos para que as configuraes de quota
para a partio entrem em vigor. Todavia, como na maioria das vezes o sistema de arquivos
estar ocupado com processo vinculado partio, recomendvel que seja reiniciado o
sistema. Para tanto, devemos digitar o comando reboot:

# reboot
Para verificar o sistema aps inicializar, devemos executar o comando repquota para consultar o status de quota para aquela partio ou parties.

# repquota -v -a -s

chamado tuxrnp, que ser criado para esse propsito. Lembramos que possvel definir
quota de duas maneiras, por tamanho e por quantidade de arquivos. Neste primeiro
exemplo ser configurada a quota por tamanho.
Criao do usurio:

# adduser tuxrnp1
Definio de quanto do sistema de arquivos o usurio tuxrnp poder usar. O comando
para configurar quotas o edquota.

# edquota -u tuxrnp1
Sero definidas quotas para o usurio, estabelecendo o limite de 30 MB de espao em disco
e limite mximo de 40 MB.

Disk quotas for user tuxrnp (uid 1009):

Saiba mais
A quota do usurio ser
de 30 MB, mas ele ter
um bnus de 10 MB
por um determinado
tempo (chamado de
grace period), totalizando 40 MB.

Filesystem

blocks

soft

hard inodes

/dev/hda6

30000

40000

soft

hard

Onde:
11 blocks: nmero de blocos utilizados pelo usurio 1M equivale mais ou menos a
1.000 blocos;
11 soft limit: limite em blocos que o usurio poder utilizar (o limite mximo definido
em hard limit);

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

Para exemplificar o uso de conta, ser demonstrado o uso do recurso com o usurio

39

11 hard limit: limite em blocos que o usurio poder usar valor que nunca ultrapassado.
Consulte o status geral dos usurios j definidos, inclusive para tuxrnp.

# repquota -v a -s
Consulta de informaes de quota do usurio tuxrnp.

# quota -u tuxrnp1
O grace period no fixo, e pode ser mudado conforme a nossa necessidade.

# edquota t

Exerccio de fixao 2 e
Quota

Saiba mais

1. Cite duas vulnerabilidades conhecidas nos equipamentos servidores da sua organizao.

Para fazer um teste, efetue login em outro terminal, como usurio tuxrnp. Ser exemplificado um script que pode ser chamado de lota disco, que aumentar o tamanho de um
arquivo at estourar o limite pr-definido de quota.

$ echo teste > a; while true; do cat a >> b; cat b >> a; done
Depois da execuo do script com o limite da quota estourado, basta voltar ao terminal do
root e examinar o status da quota.

# repquota -v -a
Para uma segunda exemplificao, s que agora usando outro mtodo, o da quota por
quantidade, ser criado outro usurio.

# adduser rnpteste
# adduser tuxrnp2
Sero definidas quotas para o usurio tuxrnp2: limite de 50 arquivos, com o mximo
chegando a 60 arquivos.

# edquota -u tuxrnp2

Disk quotas for user tux2 (uid 1009):


Filesystem

Hardening em Linux

/dev/hda6

blocks
0

soft
0

hard
0

inodes

soft

hard

50

60

A quota do usurio ser de 50 arquivos, mas ele ter um bnus de 10 arquivos,


independente do tamanho, por um determinado tempo.
Onde:
1 inodes: nmero de inodes (arquivos utilizados pelo usurio);
1 soft limit: nmero de inodes (arquivos) que o usurio poder criar;

40

Grace period um
perodo de tolerncia
em que o usurio,
aps ter estourado sua
quota, receber avisos
de que ultrapassou
seu soft limit, e que
deve tomar alguma
providncia para voltar
a respeitar seu limite
de quota. Entretanto,
vlido lembrar que esse
perodo de tolerncia
no se aplica ao hard
limit, pois, uma vez
que o valor de hard
limit seja superado,
o sistema no mais
permitir gravao de
arquivos, independente
do valor do grace
period. O grace period
padro de 7 dias.

1 hard limit: nmero mximo de inodes que o usurio poder criar.


Consulte o status desse usurio:

# repquota -v -a -s
Consulte a quota do usurio tux2:

# quota -u rnpteste
# quota -u tuxrnp2
Para validar a configurao, basta realizar um teste com um script. O ideal efetuar login em
outro terminal como usurio tuxrnp2 e rodar o script, que pode ser chamado de script gera-arquivos, para gerar entradas de arquivos at estourar o limite definido pela quota.

$ i=1; while true ; do touch $i; let i++; done


Depois que a quota estourar, basta voltar ao terminal do root e examinar o status da quota.

# repquota -v -a
Posix (acrnimo para
Portable Operating
System Interface, que
pode ser traduzido
como Interface Portvel
entre Sistemas Operacionais) uma famlia
de normas definidas
pelo IEEE e designada
formalmente por IEEE
1003, que tem como
objetivo garantir a portabilidade do cdigo-fonte de um programa
a partir de um Sistema
Operacional que atenda
as normas Posix para
outro sistema Posix.
Dessa forma, as regras
atuam como uma interface entre Sistemas
Operacionais distintos.
A designao internacional da norma
ISO/IEC 9945.

Podemos verificar os detalhes mais avanados sobre o uso das quotas nas parties.

# quotastats
Caso seja necessrio desativar o recurso de quota de uma partio, basta usar o comando
quotaoff:

# quotaoff -v /home
Onde:
11 -v: exibe mensagens para cada sistema de arquivos onde as quotas de disco so ativadas.
Para fazer uma verificao na quota da partio, para ver se est tudo bem:

# quotacheck -vcug /home


Ative a quota da partio novamente:

# quotaon -v /home

Utilizao de ACL Posix 1e


O recurso de ACL atende algumas das diretrizes de segurana propostas no Posix 1e,
criando a possibilidade de tratativas de direitos mais amplas para um arquivo ou diretrio
em um sistema Like Unix. Sem o uso de ACL, existem limitaes complicadas como, por
exemplo, a simples tarefa de definir segurana de grupo para um arquivo, pois atravs dos
direitos possvel somente ter um grupo, conforme ilustrado:

- rwx r--r--

1 root

admin

4096

2013-03-08 05:00 arquivo.conf

No exemplo, vemos que rwx define o direito do dono que o usurio root; r-- define o
direito do grupo que admin, e r-- define o direito de outros usurios sobre o arquivo.
Esse conceito de permissionamento acaba, em ambientes mais complexos, sendo um limitador, pois s possvel definir um nico grupo.
Nesse cenrio, caso seja necessrio atribuir direitos a outro grupo ou mudar o grupo atual
do arquivo, o que traz uma limitao para o sysadmin. Embora ainda exista a possibilidade

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

Posix 1e

41

de manipular as permisses considerando o direito de outros, em muitos casos isso no vai


resolver o problema da limitao de ser possvel atribuir critrios de permissionamento considerando: o dono, o grupo e outros. Diante disso, o que fazer? A resposta e ativar o recurso de acl
no sistema de arquivo, o que trar grande flexibilidade para definio de permissionamento.
A implementao do recurso de ACL em sistema Like Unix j existe h algum tempo no
kernel do Linux. Desde a srie 2.4, de 1999, j era possvel, atravs de aplicao de patches,
mas j na verso 2.5.46 (desenvolvimento) passou a ser um recurso totalmente integrado ao
kernel. Dessa forma, a srie 2.6 j sair com pleno suporte a ACL.
simples confirmar que o kernel de uma determinada distribuio est com suporte a ACL:
basta consultar as informaes do arquivo /boot/config<kernel version>.

# uname -a
Linux hardening 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23
UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
# uname -r
3.2.0-29-generic
# grep -i acl /boot/config-3.2.0-29-generic
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m

Hardening em Linux

# CONFIG_CIFS_ACL is not set


CONFIG_9P_FS_POSIX_ACL=y
Embora tenhamos o recurso no kernel, so necessrias as ferramentas na userland para
administrao do recurso de ACL. Para instalar as ferramentas de administrao de ACL em
distribuio like debian, como Ubuntu, podemos usar o comando aptitude ou apt-:

# apt-get update
# apt-get install acl

42

Habilitao do suporte ao recurso de ACL


Para usar o ACL, devemos parametrizar a partio desejada no /etc/fstab ou remontar a partio com suporte a ACL. No entanto, remontar habilita o recurso em tempo de execuo.
Parametrizar via /etc/fstab garante que toda vez que o servidor for inicializado, o recurso
ser ativado. Dessa forma, necessrio editar o arquivo /etc/fstab e adicionar o parmetro
acl nas opes do sistema de arquivo desejado:

# vim /etc/fstab
/dev/sda6 /var/log ext4 default,noexec,nosuid,noatime,acl 0 2
Conforme j informado, essa parametrizao s ter efeito no prximo boot. Para ativar o
suporte no momento da execuo, execute o comando mount para remontar a partio:

# mount

-o remount,acl /var/log

# ls l /var/log
Na lista do ls l /var/log, alm dos nove dgitos de direitos, tambm haver um sinal de
+ indicando o suporte a ACL.

Comando de administrao de ACL


Setfacl: permite parametrizar os direitos de ACLs em arquivos e diretrios:

11 -m, --modify: modifica os ACL de um arquivo ou diretrio.


11 -x, --remove: suprime as entradas ACLs.

11 -L, --logical: acompanhamento dos links simblicos.


11 -R, --recursiva: aplicao dos ACLs de maneira recursiva.
Getfacl: permite consultar informaes de ACL de um arquivo ou diretrio:
11 -R: permite ver os ACLs de maneira recursiva.
11 -L: para seguir links simblicos.
Exemplo de configurao de ACL para logs, combinando com direitos via chmod, onde ser
definido que o dono ter pleno direito, o grupo ter direito de acesso a subdiretrios e
leitura de arquivo, e outro usurio no ter direito. Tudo isso sendo parametrizado usando o
recurso de permissionamento clssico, com as ferramentas chmod e chown:

# chmod Rv 750 /var/log


# chown root.sysadmin /var/log
Mas tambm ser demandado direito de leitura a membros do grupo sysop a todos os logs
de /var/log e direito de leitura a membros do grupo webmaster ao diretrio /var/log/httpd.

# vim /etc/fstab
/dev/sda6 /var/log ext4 default,noexec,nosuid,noatime,acl 0 2
# mount

-o remount,acl /var/log

# setfacl R -m g:sysop:rx /var/log


# setfacl R -m g:webmaster:rx /var/log/httpd

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

11 -b, --remove-all: suprime todas as entradas ACLs.

43

Para consultar informaes sobre o permissionamento de ACL aplicado:

# getfacl R /var/log
# getfacl R /varlog/httpd

Comando sudo (Super User Do fazer como super usurio)


O comando sudo permite aos usurios executar comandos como outro usurio. Uma
vantagem em usar o sudo a de poder conceder aos usurios definidos acesso restrito,
embora privilegiado, a programas como Super User durante a execuo. Dessa forma o
uso do comando sudo acaba sendo uma alternativa interessante ao uso da permisso
especial de suid bit.
Entre vantagens do uso do sudo, podemos destacar:
11 muito comum em um ambiente onde existam mltiplos administradores com difcil
controle do acesso root, pois a necessidade de vrias pessoas executarem atividades
que demandam recursos administrativos um complicador. Isso pode motivar algo no
recomendado, que tornar a conta root uma conta compartilhada. Todavia, nem todos
que necessitam executar recursos administrativos precisam ter acesso root;
11 Frequentemente argumentado em lista de segurana que o uso do sudo pode ser um
problema de segurana, pois a configurao errada do sudo fatalmente traz risco de
conformidade com uma poltica de segurana. Um bom exemplo o fato de o programa
sudo ser configurado de modo que os membros de um grupo designado no precise de
autenticao adicional para executar um determinado comando como root, o que resulta
em maior produtividade. No entanto, deve ser avaliado pela equipe de segurana se
deve-se ou no ser permitida essa produtividade. Na opinio do autor, melhor optar
pelo uso de autenticao em qualquer regra definida via sudo;
11 fato que o uso do sudo tem de ser bem avaliado e planejado, pois a execuo de um
comando via sudo execut-lo com poder de root. Evidentemente, o sudo passa a ser
mais um programa que demanda suit bit no sistema, devido forma como funciona.
Instalao do sudo:

# apt-get install sudo


Depois que o sudo estiver instalado o prximo passo editar o arquivo /etc/sudoers, que
onde so parametrizados quais usurios podem ter acesso aos comandos definidos.
recomendvel editar o /etc/sudoers com o comando visudo, que abre o arquivo utilizando o
editor de texto padro que pode ser parametrizado pela varivel de ambiente EDITOR:

# export

EDITOR=/usr/bin/vim

Hardening em Linux

# visudo

44

Exemplicao do uso do sudo com a criao de uma regra para o usurio rpntestes executar
o comandos ifconfig e Iptables:

# visudo
rnpteste

ALL= /sbin/ifconfig, /sbin/iptables

Nesse primeiro exemplo, foi definida a permisso de execuo para que o usurio rnpteste
possa executar os comandos ifconfig e iptables como se fosse root. Todavia, da forma que foi
parametrizado, ainda assim ser solicitada a senha do usurio na primeira vez que executar
esses comandos via sudo. Lembrando que para execut-los devemos sempre preceder a
digitao do comando sudo da seguinte maneira:

Su - rnpteste
$ sudo ifconfig
$ sudo iptables
Exemplo 2:
rnpteste ALL = NOPASSWD: /bin/reboot , /bin/halt
Nesse exemplo, h a permisso para que o usurio rnpteste possa executar os comandos
reboot e halt, mas dessa vez sem que seja necessrio que ele digite a senha. Isso possvel
devido ao uso do parmetro NOPASSWD.
Exemplo 3:

rnpteste ALL = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root


Nesse terceiro exemplo foi parametrizada a execuo do comando passwd, o que vai permitir que o usurio rnpteste mude a senha de qualquer usurio cujo login esteja no intervalo de A a Z, exceto o root.
Esses trs exemplos iniciais ilustram como podem ser disponibilizados alguns comandos via
sudo. Dessa forma, a maioria das distribuies Linux que trazem comandos com a permisso
suid bit removidas e as necessidades particulares tratadas pelo uso do sudo.

Organizao de regras do sudo


Para tornar mais interessante, devem ser usados os parmetros adicionais de configuraes
do sudo, como:
11 User_Alias: especifica um alias para um nico usurio, o que no muito til, ou um
grupo de usurios que tero acesso a um conjunto de comandos. No entanto, esse grupo
s ter valor dentro do contexto de execuo do sudo. Um usurio pode aparecer em
vrias alias e ser vinculado a vrios grupos de comandos.
Alm de nome de usurios:
11 User_List definido atravs de um ou mais IDs de usurio;
11 Nomes de sistema de grupo e ID (prefixo % e #%, respectivamente);
11 Grupos de usurio de rede netgroups (prefixo +);
11 Usurios no Unix, nomes de grupo e IDs (prefixo %: e %: #, respectivamente);
11 E outros User_Aliases.
Cada item da lista pode ser pr-fixado com zero ou mais ! operadores, o que possibilita
negar o valor, ou seja, criar uma regra de exceo.
Exemplos:

User_Alias USERS_SYSOP =

eregon, Aragon, frodo

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

de Suid bit ativada podem, durante o processo de Hardening, terem essas permisses de

45

User_Alias USERS_SYSADMIN = harry,hermione,drago


User_Alias WEBMASTERS = bidu,monica,magali
11 Runas_Alias: possibilita especificar que outro usurio sudo ser capaz de funcionar no
lugar do root. Por padro, o sudo est vinculado ao usurio root, mas pode-se querer
executar como outro usurio.
Exemplos:

Runas_Alias OPERATOR = root, operator


Runas_Alias DATABASE = oracle, Sybase
11 Host_Alias: especifica os hosts em que os direitos se aplicam. Isso normalmente no
usado, ao menos que se deseje fazer trabalhos sysadmin para um grupo de outros
servidores.
Exemplo:

Host_Alias MAC = 12.13.0.0/255.255.255.0


11 Cmnd_Alias: especifica um alias para um comando especfico ou um conjunto de
comandos.
Exemplos:

Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump, /


usr/sbin/restore
Cmnd_Alias KILL = /usr/bin/kill, /usr/bin/pkill
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias DOWNOFF = /usr/sbin/shutdown, /usr/sbin/halt, /usr/sbin/
reboot,
Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, /usr/
local/bin/tcsh, /usr/bin/rsh, /usr/local/bin/zsh
Exemplificao de criao de regras combinados as declaraes de User_Alias com Cmnd_
Alias.:

USERS_SYSOP

ALL = !SU, !SHELLS, DUMPS, KILL, PRINTING, DOWNOFF

USERS_SYSADMIN

ALL = ALL

USERS_WEBMASTER ALL =

!SU, !SHELLS, INTERNET

Preveno Escape Shell


Para verificao da possibilidade de Escape Shell, basta digitar dentro do ambiente de

Hardening em Linux

comandos, como ftp, more, less, vi e vim:

46

11 !sh
Assim que retornar a shell, digitar o comando id para identificar que o usurio est
ativo na shell:
11 :!sh
11 #id

O administrador deve sempre lembrar que sudo executa um programa, e esse programa
est sendo executado com poder de root, inclusive a chamada interna para executar
outros programas. Isso pode ser um problema de segurana, uma vez que no incomum
para um programa permitir que Escape Shell, ou seja, a execuo de uma shell, pode
possibilitar que um usurio tenha uma shell com poder de root. Ento devemos ter muito
cuidado com programas que possuem esse tipo de recurso. Exemplos clssicos: vim, vi,
ftp, more e less entre outros.

Duas formas de desabilitar Escape Shell


11 Parmetro restrict: deve ser evitado dar aos usurios acesso a comandos que permitem que o usurio execute comandos arbitrrios. No entanto, muitos editores tm
um modo restrito, onde os Escape Shell esto desativados, embora sudoedit seja a
melhor soluo para execuo de editor via sudo. Mas devido ao grande nmero de programas que oferecem Escape Shell, muitas vezes impraticvel utilizar determinados
comandos;
11 Parmetro noexec: muitos sistemas like Unix que suportam bibliotecas compartilhadas tm a capacidade de substituir as funes da biblioteca padro, apontando uma
varivel de ambiente (geralmente LD_PRELOAD) a uma biblioteca alternativa compartilhada. Em tais sistemas, a funcionalidade noexec sudo pode ser usada para impedir que

dynamics compiled
and estaticaly compiled
referem-se s duas
formas de gerar um
pacote instalvel.
No pacote compilado
estaticamente, so
includos todos os
arquivos e bibliotecas
de que o programa
precisa para funcionar.
Ele pode rodar em
qualquer distribuio
Linux: basta descompactar o pacote e
executar. No compilado
dinamicamente, todos
os arquivos so compilados separadamente,
de forma que uma
mesma biblioteca nunca
carregada duas vezes,
maximizando o uso
do espao e fazendo
com que o sistema
fique muito mais leve e
rpido, porm faz com
que surjam problemas
de dependncias
(o programa x precisa
da biblioteca y
para funcionar).

um programa executado pelo sudo execute chamadas para outros programas. Note, no
entanto, que esta s se aplica aos nativos dinamicamente compilados. Executveis
compilados estaticamente e binrios rodando sob emulao no so afetados.
O bom senso no que tange gerncia de permissionamento deve ser usado, ou
seja: usar o recurso mnimo e o mnimo direito. Ento, se a definio de direitos com
chmod for necessrio, no utilize acl. Se o ajuste com acl atende, no use sudo e, se
regras de sudo atendem, no use suid bit

Captulo 2 - Hardening em sistema Linux Controles de segurana para contas de usurios

Dinamicamente e
estaticamente
compilados:

47

48

Hardening em Linux

Roteiro de Atividades 2
Atividade 1 PAM
1. Crie os seguintes usurios:
11 eregon
11 Aragon
11 Frodo
11 Bidu
11 Monica
11 Magali
11 Harry
11 Hermione
11 Drago

2. Crie os grupos:
11 sysop
11 sysadmin

Captulo 2 - Roteiro de Atividades 2

11 webmaster

49

3. Defina uma regra utilizando o recurso PAM, permitindo acesso via SSH somente durante
o horrio das 7h s 19h para os usurios:
11 eregon
11 Aragon
11 Monica
11 Magali
11 Harry
11 Drago

Atividade 2 Procura por senhas fracas


1. Utilize o John the Ripper para avaliar as senhas dos usurios do sistema.
Apresente suas observaes.

Atividade 3 Quotas
1. Crie quotas de 200 MB por grupo no diretrio /home para todos os usurios criados
no exerccio 1.

Hardening em Linux

2. Crie quotas de 200 MB no diretrio /tmp para todos os usurios.

50

Atividade 4 ACL
1. Edite o /etc/fstab e ative o suporte a ACL nas parties vinculadas aos diretrios /var/log
e /var/personal.

2. Remonte a partio para ativar o suporte a ACL nas parties vinculadas aos diretrios
/var/log e /var/personal em tempo de execuo:

# mount

-o remount,acl /var/log

# mount

-o remount,acl /var/log

# setfacl R -m g:webmaster:rx /var/log/httpd

3. Crie regras de ACL permitindo acesso e leitura aos arquivos de diretrio em /var/log para
o grupo syslog:

# setfacl R -m g:sysop:rx /var/log

4. Crie regras de ACL permitindo acesso de leitura a arquivos de diretrio em /var/personal


para o grupo syslog:

Captulo 2 - Roteiro de Atividades 2

# setfacl R -m g:sysop:rx /var/personal

51

5. Crie regras de ACL permitindo acesso de leitura a arquivo de diretrio em /var/log/httpd


para o grupo webmaster:

# setfacl R -m g:sysop:rx /var/log/httpd

6. Consulte as informaes sobre o permissionamento de ACL aplicado:

# getfacl R /var/log
# getfacl R /var/personal

7. Salve as informaes de ACL dos diretrios /var/log e /var/personal para o arquivo acl.txt.

# getfacl R /var/log /var/personal > /root/acl.txt

8. Apague todas as ACL.

# getfacl R -b /var/log

Hardening em Linux

# getfacl R b /var/personal

52

9. Consulte para verificar se foram removidas.

# getfacl R /var/log /var/personal

10. Restaure as informaes da ACL:

setfacl --restore=/root/acl.txt

11. Consulte para verificar se foram restauradas:

# getfacl R /var/log /var/personal > /root/acl.txt

Atividade 5 Comando sudo


1. Este exerccio tem como objetivo criar um cenrio com erros comuns e avaliar o nvel
de ameaa que certas configuraes no sudo podem trazer a um sistema Linux.
Dessa forma, acesse o ambiente shell da VM do Debian como root e verifique o arquivo
/etc/sudoers, adicionando e validando a configurao sugerida:

_ User_Alias USERS_SYSOP =

eregon, aragon, frodo, rnpteste

User_Alias USERS_SYSADMIN = harry,hermione,drago

Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump, /


usr/sbin/restore
Cmnd_Alias KILL = /usr/bin/kill, /usr/bin/pkill
bill

ALL = ALL, !SU, !SHELLS

Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm


Cmnd_Alias DOWNOFF = /usr/sbin/shutdown, /usr/sbin/halt, /usr/sbin/
reboot,

Captulo 2 - Roteiro de Atividades 2

User_Alias WEBMASTERS = bidu,monica,magali

53

Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, /usr/


local/bin/tcsh, /usr/bin/rsh, /usr/local/bin/zsh
USERS_SYSOP

ALL = !SU, !SHELLS, DUMPS, KILL, PRINTING, DOWNOFF

USERS_SYSADMIN

ALL = ALL

USERS_WEBMASTER ALL =

!SU, !SHELLS, INTERNET

2. Adicione as novas regras no /etc/sudoers e avalie o problema do Escape Shell.


a. Crie um novo Cmnd_Alias:

Cmnd_Alias

EDIT= /usr/bin/vim /etc/hosts, /usr/bin/less /var/log/

syslog, /usr/bin/more /var/log/authlog

b. Edite a regras para USERS_SYSOP:

USERS_SYSOP

ALL = !SU, !SHELLS, DUMPS, KILL, PRINTING, DOWNOFF,

EDIT

3. Aps avaliar o risco do Escape Shell, avalie o uso do parmetro NOEXEC:

USERS_SYSOP

Hardening em Linux

DOWNOFF, EDIT

54

ALL = NOEXEC: !SU, !SHELLS, DUMPS, KILL, PRINTING,

4. Reedite o /etc/sudoers, trocando o uso do comando vim pelo sudoedit:

5. Este exerccio ser baseado em uma VM com Linux Fedora. O objetivo criar um cenrio
com erros comuns e avaliar o nvel de ameaa que certas configuraes no sudo podem
trazer a um sistema Linux. Dessa forma, acesse o ambiente shell da VM e, como root,
verifique o arquivo /etc/sudoers adicionando e validando cada configurao. Assim, temos
o grande desafio Sudo the flag (um trocadilho com Capture the flag), que consiste em
identificar as configuraes que possibilitam escala de privilgio para usurio root. O
desafio consiste em identificar cada uma das falhas (flag) e explicar como ela poderia ser
uma ameaa. Quem encontrar mais falhas ou seja, conquistar mais bandeiras vence.

Captulo 2 - Roteiro de Atividades 2

6. Sugerir correes efetivas para todos os problemas identificados no Sudo the flag.

55

56

Hardening em Linux

3
Customizar a trilha de comandos com timestamp; Customizar a configurao estruturada de logs; Configurar um servidor de logs remotos; Contabilizar o uso de recursos
do sistema pelos processos; Configurar um sistema de deteco de modificaes no
sistema Host Intrusion Detect System (HIDS).

sistema Linux; Configurao de um servidor de logs; Contabilizao de processos;


Deteco de alterao no sistema HIDS.

conceitos

Trilha de comandos do terminal (history); Customizando registro de eventos de um

Neste captulo, veremos como customizar a trilha de comandos do history, conceitos de


registro de eventos (logs), contabilizao de processo e HIDS.
11 Trilha de comandos.
11 Registro de eventos logs do sistema.
11 Syslog-NG.
11 Servidor Syslog Centralizado.
11 Configurao do STUNNEL.
11 Rotacionamento de logs.
11 Contabilizao de processos.
11 Auditoria com HIDS.

Exerccio de nivelamento 1 e
Registro de eventos (log) e HIDS
1. Como voc percebe a necessidade de preservar a trilha de comandos (histrico) executados em um servidor Like Unix?

q
Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

objetivos

Hardening em sistema Linux


Registro de eventos (log) e HIDS

57

2. Como so tratados em sua empresa os registros de eventos (logs) dos servios fornecidos? Existe um servidor concentrador de registros de eventos (logs)?

3. Na poltica de segurana da sua empresa, existem definies de controles sobre mudanas


no sistema que possam caracterizar um possvel ataque ou mesmo uma mudana?

Trilha de comandos
Todos os comandos digitados pelo usurio so mantidos em um histrico.

11 Usurio pode consultar quando precisar.


22 Esse recurso permite que o usurio possa retornar aos comandos que j digitou
simplesmente voltando com a seta do teclado.
Essa funcionalidade o history:
11 Cada usurio possui o seu arquivo com o seu histrico.
Podemos analisar algumas das configuraes-padro dos sistemas Linux relacionadas ao
histrico (trilha) de comandos. Por exemplo, possvel usar o comando history para visualizar o histrico do usurio que estamos utilizando.

# history
Existem algumas variveis de ambiente importantes, entre elas a HISTFILE, que armazena a
localidade do arquivo de histrico do usurio que pode ser visualizado para que tenhamos
a certeza da localidade do arquivo de histrico (trilha) de comandos.

# set | grep HISTFILE


Neste exemplo, est sendo usado o usurio root. Dessa forma, possvel identificar o
arquivo de histrico, que o /root/.bash_history.

# cat /root/.bash_history | less

Trilha de comando
Shell bash:
11 Armazena os comandos digitados originalmente no arquivo ~/.bash_history, aps a
sesso ser finalizada.
22 Todo usurio tem seu prprio arquivo .bash_history.

Hardening em Linux

interessante ajustar as variveis para reter um nmero grande de comandos armaze-

58

nados no arquivo .bash_history:


11 Deve-se ajustar as variveis HISTFILESIZE e HISTSIZE, que podem ser parametrizadas
via arquivo .bashrc.
11 Outra varivel importante e recomendada a HISTTIMEFORMAT, pois por meio desta
possvel ativar um controle com timestamp para a trilha de comando.

Pode-se executar essas parametrizaes manualmente via arquivo .bashrc do respectivo


usurio j criado e depois inserir no /etc/skel/.bashrc.
Em servidores onde existem mais de um administrador, interessante termos a trilha de
comandos separada. Para isso, basta fazer um ajuste fino na varivel HISTFILE do usurio
root, inserindo uma linha redefinindo o favor da varivel no arquivo /root/.bashrc, conforme
ilustrado a seguir:

export HISTFILE=/root/.bash_history_$(who am i | awk { print $1


};exit)
Em muitos casos interessante customizar aes de Hardening via
shellscript, conforme exemplificado no script da prxima figura.
Esse script pode ser criado no diretrio /root com o nome ctrl_
history.sh.
#!/bin/bash
HISTFILESIZE=30000
HISTSIZE=20000
HISTTIMEFORMAT=- %d/%m/%Y %H:%M:%S -
RULES=HISTTIMEFORMAT=- %d/%m/%Y %H:%M:%S -
BASHRC_GERAL=/etc/bashrc
BASHRC_SKEL=/etc/skel/.bashrc
BASHRC_ROOT=/root/.bash_history_$(who am i | awk { print $1
};exit)

{
_ARQ=$1
POLICE_RONLY=readonly -n $VAR_HIST
for VAR_HIST in HISTFILE HISTFILESIZE HISTSIZE HISTTIMEFORMAT

do

grep $POLICE_RONLY $_ARQ || echo $POLICE_RONLY


done
}
func_files()
{
for ARQ in $BASHRC_GERAL $BASHRC_SKEL $BASHRC_ROOT
do
if [ -f $ARQ ]

>> $_ARQ

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

func_readonly_hist()

59

then

grep HISTTIMEFORMAT $ARQ || echo $RULES >> $ARQ

func_readonly_hist $ARQ

fi
done
}
func_user()
{
for USER_HOME in $(cut -f 6 -d : /etc/passwd)
do
if [ -f $USER_HOME/.bashrc ]

then

grep HISTTIMEFORMAT $USER_HOME/.bashrc ||

d Boas prticas

echo $RULES >>

$USER_HOME/.bashrc

recomendadas na
ABNT NBR ISO/IEC
27002:2008: a proposta
de trilha de comando
de root segregada por
administrador e com o
valor de timestamp
possibilita plena
conformidade com a
recomendao do item
10.10.4.

. $USER_HOME/.bashrc

Fi

done
}
func_files && func_user

Registro de eventos Logs do sistema


Necessidade de registrar atividades dos usurios e servios do sistema:

11 Muito importante para os administradores.


22 Administrao se torna muito mais auditvel e detalhada quando se tem controle
sobre todos os logs que o Linux tem a oferecer.
Logs:
11 Ajudam tambm a descobrir se no sistema houve algum acesso indevido, registros de
tentativas que podem sugerir uma tentativa de invaso ou mesmo intruses.
As distribuies Linux, por padro, j trazem habilitada boa parte dos registros de eventos

Hardening em Linux

(logs) necessrios a uma administrao, ou seja, muitas das atividades que acontecem j
so registradas pelo sistema. Entretanto, fortemente recomendvel refinar os controles de
logs para que seja possvel ter registro ainda mais detalhado e organizado.

Conformidade com as recomendaes


O registro de eventos uma necessidade de normas de segurana como NBR IEC 27002 e
PCI DSS, entre outros. Normas e documentos de boas prticas de segurana dedicam vrios
tpicos importncia dos logs.

60

As boas prticas recomendadas na ABNT NBR ISO/IEC 27002:2008 informam que, tradicionalmente, um bom log tem de ter informaes que possibilitem uma avaliao, auditoria ou
mesmo uso durante a resposta a um incidente de segurana. Essa recomendao muito
bem destacada, do item 10.10.1 ao 10.10.5, que definem diretrizes orientando o registro,
monitoramento e reteno de informaes para auditorias sobre atividades no sistema,
sejam elas autorizadas ou no. Assim, prioridade adotar uma poltica de segurana na qual
os registros devam atender a caractersticas como:
11 Identificao dos usurios;
11 Datas e horrios de entrada (login e logout);
11 Identidade do terminal, nome da mquina ou IP;
11 Registro das tentativas de acesso aos aceitos e rejeitados;
11 Registro das tentativas de acesso a outros recursos e dados aceitos e rejeitados;
11 Alterao de arquivos;
11 Uso de privilgios, aplicativos e utilitrios do sistema.

Boas prticas para arquivos de log


Alguns critrios so sugeridos para implantao de uma poltica de arquivos de log, no que
tange a centralizao, arquivamento e acesso.
Logs centralizados:

11 Mais fceis de analisar.


22 Quando temos um servidor dedicado a essa tarefa, evitamos que dados importantes sejam perdidos por acidente, excludos ou alterados de propsito, caso
ocorra um incidente.
Provises para backup de arquivos de log:
11 Arquivos de log so dados importantes.

definir um procedimento para backup peridico, que deve tambm estar alinhado
ao termo de reteno j estabelecido.
Proteo dos arquivos de log:
11 Arquivos de log do Sistema Operacional devem ter acesso restrito a administradores
e operadores.
22 Considerando o tipo de informao que h em um determinado arquivo de log,
uma vez que algumas vezes podem incluir senhas e outras informaes sensveis
e confidenciais.
Perodo de conservao dos arquivos de log:
11 Arquivar logs mantidos eternamente no uma soluo razovel.
22 Outro ponto importante a forma como o log ser mantido, pois um arquivo de
log compactado ocupa muito menos espao que um no compactado e, caso seja
um arquivo do tipo ASCII, ainda sim pode ser facilmente auditado com a ajuda de
ferramentas como zcat ou bzca. Por isso, no h motivos para no realizarmos
procedimento de rotacionamento de logs com o uso de compactao de dados.

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

22 Precisam ter definido um procedimento de arquivamento (backup). interessante

61

Logs do sistema
Diretrio /var/log:

11 Tradicionalmente, nos sistemas Linux, onde ficam registrados todos os logs do sistema.
22 Esses logs so controlados pelo servio Syslog, o programa padro do Linux para
essa tarefa de logs, mas tambm comum em outros unix e dispositivos de rede
como accesspoints, roteadores, firewall, IPS, IDS e outros.
Dentro do diretrio /var/log, destacam-se alguns logs que no so escritos em formato texto
(ASCII). Ento, no so lidos por um editor de texto comum. Eles esto em formatos binrios
e somente os seus comandos relacionados podem mostrar o seu contedo. Um desses logs
o /var/log/wtmp, que contm a informao de todos os ltimos registros e logins dos usurios. As informaes desse arquivo s podem ser visualizadas pelo comando last.

# last

# last root

# last toor
Existe tambm o /var/log/btmp, que bem semelhante ao wtmp, mas mostra as ltimas
tentativas de login que falharam, o que pode ser muito til em uma auditoria ou mesmo em
uma Resposta a Incidente, pois, dependendo das informaes que ele fornea, podemos
identificar um possvel ataque de Fora Bruta. O seu contedo pode ser visualizado com o
comando lastb.

# lastb

# lastb root

# lastb toor
Outro arquivo o /var/log/lastlog, que nos mostra quando cada usurio realizou o processo
de login pela ltima vez e permite ter uma viso bem interessante. Pode-se visualizar o seu
contedo com o comando lastlog.

# lastlog
O arquivo /var/run/utmp permite uma viso bem detalhada de quais usurios esto ativos
naquele momento, em qual terminal, horrio e mais algumas informaes, at mesmo se
for uma conexo remota, via ssh ou telnet. O seu contedo pode ser visualizado por dois
Hardening em Linux

comandos, o w e o who, que mostram informaes bem semelhantes, ambos tratando o que

62

foi registrado no /var/run/utmp.

# w

# who

Boas prticas
recomendadas na
ABNT NBR ISO/IEC
27002:2008: as
informaes de log e
contabilizao de
processo que so
usadas pelos
comandos: w, who,
last, lastb, lastlog e
lastcomm so de
grande utilidade para
auditoria no que tange
a informaes de
logins dos usurios do
sistema. Esses
recursos, que j so
padro, j permitem a
conformidade com o
item 11.5 da norma.

Syslog-NG
Syslog-NG:

11 Tem como objetivo dar alternativa gil e flexvel para organizar melhor os logs fornecidos por um sistema Linux.
Atualmente, existem muitas opcoes de logs no Linux; isso tambm vale para outros
sabores de Unix. No caso do Linux, e muito comum observar que a maioria das instalacoes
atuais que usavam o Deamon Syslog tradicional passaram a usar ou o RSYSLOG ou mesmo o
prprio SYSLOG-NG.
Mas antes de montar uma estrutura para organizar os registros das atividades do sistema,
necessrio entender melhor o protocolo Syslog.
A definio do formato dos registros do protocolo Syslog, que dividida em 19 recursos,
tambm pode ser chamada de facility. Entretanto, esses recursos podem ser divididos
em nove nveis os quais tambm so definidos como prioridade de acordo com o grau
crtico da ao que ser registrada.

Recursos (facility)
11 auth: mensagens de segurana/autorizao/autenticao que falharam, desaprovadas
pelo sistema;
11 Authpriv: mensagens de segurana/autenticao/autorizao;
11 cron: atividades do cron e at;
11 daemon: deamons do sistema (sshd, inetd, pppd etc.);
11 Kern: mensagens do Kernel;
11 Ipr: mensagens de impresso;
11 Mail: subsistema de e-mail (sendmail, postfix, qmail etc.);

11 user: mensagens genricas no mbito do usurio;


11 uucp: informaes do servio UUCP;
11 syslog: mensagens internas do syslog;
11 local0 a local7: nveis definidos localmente, e geralmente usados para locais especficos
com logs remotos de Access point.

Nvel de registro (prioridade)


11 emerg: indicam condies de emergncias do sistema;
11 Alert: problemas no sistema que necessitam de ateno imediata;
11 Crit: problemas fatais e condies crticas do sistema;
11 Debug: informaes decodificadas de depurao dos processos em andamento;
11 err: mensagens de condies de erro geradas pelo STDERR;
11 Info: informaes de programas em execuo;
11 Notice: mensagens de condies normais, mas relevantes;
11 Warning: aviso padro de execuo de um processo;
11 None: mensagens genricas.

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

11 news: mensagens de sistemas de newsgroups;

63

Por muito tempo o aplicativo padro do Linux para gerenciamento de logs foi o Syslogd;
todavia, muitas distribuies esto trazendo alternativas, como Syslog-ng e Rsyslog.
Ser usado neste captulo um deamon muito melhorado em relao ao tradicional Syslod. O alvo
neste captulo ser o deamon do Syslog-NG, que tem muitos mais recursos que o seu antecessor.
Antes de instalar e vermos os arquivos de configurao do Syslog-NG, vamos entender como
ele funciona.
A estrutura do Syslog-NG como um quebra-cabea: h vrias peas separadas e temos de
mont-las conforme desejamos para ter o nosso log personalizado.
O Syslog-NG possui trs peas bsicas: Source (Origem), Filter (Filtro) e Destination (Destino).
Essas trs peas unidas formaro o nosso log. Veja uma representao grfica desse
quebra-cabea na figura a seguir.

Origem

LOG =

Filtro

Origem

Destino

Filtro

Destino

Com esse conceito em mente, pode-se instalar o Syslog-NG.

# apt-get install syslog-ng


Depois de instalado o Syslog-NG, cria-se uma estrutura personalizada para os logs. Vamos
utilizar o diretrio /var/personal, que est em uma partio separada, para alocar essa nossa
nova estrutura personalizada.
O arquivo de configurao base do Syslog-ng normalmente est localizado em /etc/syslog-ng/
syslog-ng.conf, no qual definida a forma como ser organizada nossa estrutura de logs e
tambm recursos do prprio servio. Entretanto, para tirar proveito, importante entender
como funciona o protocolo Syslog.
Primeiros vamos renomear o syslog-ng.conf original e criar um novo.

# cd /etc/syslog-ng

Hardening em Linux

# mv syslog-ng.conf syslog-ng.conf_original

64

Logo em seguida, temos a exemplificao de como criar uma nova com a estrutura a seguir,
considerando as configuraes globais.

# vi syslog-ng.conf
#OPCES GLOBAIS

Figura 3.1
Representao
de mdulos de
configurao.

options { long_hostnames(off);};
#OPES DE ORIGEM
source src { unix-dgram(/dev/log); internal();};
# OPCES DE FILTROS
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(auth, authpriv); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };
filter f_uucp { facility(uucp); };
filter f_news { facility(news); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info .. warn)

#vi syslog-ng.conf
and not facility(auth, authpriv, cron, daemon, mail, news); };

filter f_info { level(info); };


# vim /etc/syslog-ng/syslog-ng.conf
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_cnews { level(notice, err, crit) and facility(news); };
filter f_cother { level(debug, info, notice, warn) or
facility(daemon, mail); };
filter ppp { facility(local2); };

# OPCES DE DESTINO
destination authlog { file(/var/personal/auth.log owner(root)

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

filter f_emergency { level(emerg); };

group(root) perm(0640)); };
65

destination syslog { file(/var/personal/syslog owner(root)


group(root) perm(0640)); };
destination cron { file(/var/personal/cron.log owner(root)
group(root) perm(0640)); };
destination daemon { file(/var/personal/daemon.log owner(root)
group(root) perm(0640)); };
destination kern { file(/var/personal/kern.log owner(root)
group(root) perm(0640)); };
destination lpr { file(/var/personal/lpr.log owner(root)
group(root) perm(0640)); };
destination mail { file(/var/personal/mail.log owner(root)
group(root) perm(0640)); };
destination user { file(/var/personal/user.log owner(root)
group(root) perm(0640)); };
destination uucp { file(/var/personal/uucp.log owner(root)
group(root) perm(0640)); };
destination mailinfo { file(/var/personal/mail.info owner(root)
group(root) perm(0640)); };
destination mailwarn { file(/var/personal/mail.warn owner(root)
group(root) perm(0640)); };
destination mailerr { file(/var/personal/mail.err owner(root)
group(root) perm(0640)); };
destination newscrit { file(/var/personal/news/news.crit
owner(root) group(root) perm(0640)); };
destination newserr { file(/var/personal/news/news.err
owner(root) group(root) perm(0640)); };
destination newsnotice { file(/var/personal/news/news.notice
owner(root) group(root) perm(0640)); };
destination debug { file(/var/personal/debug owner(root)
group(root) perm(0640)); };
destination messages { file(/var/personal/messages owner(root)
group(root) perm(0640)); };
destination console { usertty(root); };

Hardening em Linux

destination console_all { file(/dev/tty8); };

66

destination xconsole { pipe(/dev/xconsole); };


destination ppp { file(/var/personal/ppp.log owner(root)
group(root) perm(0640)); };
# OPCES DE LOG (Montagem do log)

log { source(src); filter(f_authpriv); destination(authlog); };


log { source(src); filter(f_syslog); destination(syslog); };
log { source(src); filter(f_cron); destination(cron);};
log { source(src); filter(f_daemon); destination(daemon); };
log { source(src); filter(f_kern); destination(kern); };
log { source(src); filter(f_lpr); destination(lpr); };
log { source(src); filter(f_mail); destination(mail); };
log { source(src); filter(f_user); destination(user); };
log { source(src); filter(f_uucp); destination(uucp); };
log { source(src); filter(f_mail); filter(f_info);
destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn);
destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err);
destination(mailerr); };
log { source(src); filter(f_news); filter(f_crit);
destination(newscrit); };
log { source(src); filter(f_news); filter(f_err);
destination(newserr); };
log { source(src); filter(f_news); filter(f_notice);
destination(newsnotice); };

log { source(src); filter(f_messages); destination(messages); };


log { source(src); filter(f_emergency); destination(console); };
log { source(src); filter(f_cnews); destination(xconsole); };
log { source(src); filter(f_cother); destination(xconsole); };
log { source(src); filter(ppp); destination(ppp); };
Feita essa configurao, e lembrando a figura do quebra-cabea, vamos entender o arquivo
do Syslog-NG.
Para analis-lo por partes: primeiro, a origem.

source src { unix-dgram(/dev/log); internal();};


As linhas comeam com a palavra source (origem), e logo em seguida vem src, que pode ser
qualquer palavra desde que depois possamos entender a que se refere.
Essa origem que aponta para /dev/log so logs locais, ou seja, a origem em questo so
todos os logs gerados pelo nosso sistema. Essa a nossa primeira pea do quebra-cabea,
a nossa origem, mas ainda no estamos fazendo nada com ela.

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

log { source(src); filter(f_debug); destination(debug); };

67

Depois da origem, ns temos algumas linhas relacionadas parte de filtro.


Vamos a alguns exemplos.

filter f_authpriv { facility(auth, authpriv); };


As linhas de filtro comeam com a palavra filter, e em seguida vem f_authpriv, para a qual,
assim como nas linhas de origem, ns podemos definir o nome que quisermos, mas sempre
bom adotarmos um padro para um melhor controle. Por exemplo, adotamos o padro de
que todos os filtros comecem com f_ e o nome do filtro.
Essa linha est criando um filtro somente com as facilidades (facility), auth e authpriv em
todos os nveis (level), ou seja, esse filtro engloba todas as mensagens de autenticao,
sejam elas avisos, informaes, emergncias, crticas ou qualquer um dos outros nveis.

filter f_syslog { not facility(auth, authpriv); };


Esse exemplo o contrrio do primeiro, pois est criando um filtro chamado f_syslog, que
engloba todas as facilidades e nveis, com exceo das facilidades auth e authpriv.

filter f_cron { facility(cron); };

filter f_kern { facility(kern); };


Exemplo de dois filtros: o f_cron, que registrar todas as mensagens relacionadas ao cron; e
o f_kern, que registrar todas as mensagens relacionadas ao kernel.

filter f_messages { level(info .. warn)


and not facility(auth, authpriv, cron, daemon, mail, news); };
Esse j um filtro mais elaborado. Com o nome de f_messages, engloba todas as facilidades,
com exceo de auth, authpriv, cron, daemon, mail e news, nos nveis info at warn.
Os filtros so nossa segunda pea do quebra-cabea. Fizemos todos os filtros que desejamos, mas at aqui no os utilizamos.
A parte seguinte do arquivo a que trata os destinos (destination). Esses destinos so onde
os logs sero gravados.
Vejamos o exemplo.

destination authlog { file(/var/personal/auth.log owner(root)


group(root) perm(0640)); };

destination syslog { file(/var/personal/syslog owner(root)

Hardening em Linux

group(root) perm(0640)); };

destination cron { file(/var/personal/cron.log owner(root)


group(root) perm(0640)); };
Seguindo o mesmo padro das outras configuraes, origem e filtro, os destinos comeam
com a palavra destination, e depois vem o nome que escolhermos. Esses destinos
apontam para dentro do diretrio /var/personal (diretrio que adotamos na nossa estrutura
personalizada) e para os arquivos que sero criados, que so os arquivos de logs.

68

Saiba mais
Para visualizar todas
as facilidades, nveis e
ordens de criticidade
dos nveis, podemos
consultar o man
do syslog.

Esses arquivos tm como usurio-dono (owner) o root, como grupo-dono (group) o root, e
como permisso (perm) 640.
Pode-se pensar em definir o destino tradicionalmente como um arquivo, mas tambm possvel parametrizar o destino para um arquivo Fifo, uma aplicao ou um servidor remoto.
Bom, ainda no definimos qual ser o contedo desses destinos, mas eles so nossa terceira
pea do quebra-cabea. Com as trs peas definidas, podemos formar o nosso log. agora
que vamos unir a origem, os filtros e o destino, ou seja, vamos encaixar as peas.

log { source(src); filter(f_authpriv); destination(authlog); };


As linhas que realmente geram os logs se iniciam com a palavra log. Em seguida, so encaixadas as peas: primeiro o source (origem, que no nosso caso o src, que a origem local);
depois os filtros (estamos usando somente o f_authpriv); e, por fim, o destino, que em
qual arquivo essas informaes sero gravadas (estamos usando o destino authlog, que o
arquivo /var/personal/auth.log).
Resumindo: todas as informaes com origem em nosso sistema que se encaixem no filtro
f_authpriv (autenticao de usurios) sero gravadas no destino /var/personal/auth.log.

log { source(src); filter(f_mail); filter(f_info);


destination(mailinfo); };
Essa linha semelhante anterior, com uma nica diferena: est aplicando dois filtros ao
mesmo tempo.
Caso a instalao padro da distribuio Linux em uso no seja o Syslog-ng, toda a estrutura de novos arquivos de logs seria criada, pois o Syslog-NG no funciona da mesma
maneira que as outras opes de servidores de log. Assim sendo, todos esses destinos
que definimos no arquivo de configurao do Syslog- NG ou precisam ser criados manualmente ou a diretriz create_dirs() deve ser utilizada para que a criao da estrutura de

Caso queira criar automaticamente, vamos a um exemplo de script para automatizar a tarefa:

# cd /root

# vi estrutura.sh

#!/bin/bash

dir=/var/personal

arq=auth.log syslog cron.log daemon.log kern.log lpr.log mail.log


user.log uucp.log mail.info mail.warn mail.err news.crit news.err
news.notice debug messages ppp.log

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

arquivos acontea automaticamente.

69

if [!-d $dir]; then


mkdir $dir
fi

for est in $arq


do
touch $dir/$est
chmod 640 $dir/$est
chattr +a $dir/$est
done
clear
echo Estrutura Personalizada Criada

# ./estrutura.sh
Observe que esse script utiliza o comando chattr +a. O comando chattr muda o atributo de
um arquivo ou diretrio, e o atributo +a faz com que nesses arquivos s sejam adicionadas
informaes, impossibilitando que parte delas ou at mesmo os arquivos inteiros sejam
apagados. Isso importante para seguir as boas prticas de segurana que a norma recomenda. Embora o usurio root ainda tenha a possibilidade de remover o atributo e manipular o arquivo, essa janela de possibilidade fica sendo exclusiva do root.
No entanto, s ser necessrio o uso de um script como esse se o servidor de log escolhido
no fizer a criao automtica. No caso do syslog-ng, basta inserir a funo create_dirs().
Outro ponto que esse rigor motiva que tambm seja necessrio manipular o atributo
antes de qualquer processo de rotacionamento.
Depois de executar o script, vamos verificar se os arquivos foram criados.

# ls -l /var/personal
Com a estrutura criada, podemos reiniciar o servio do Syslog-NG e testar se est funcionando.

# /etc/init.d/syslog-ng restart
Para testar, podemos reiniciar alguns servios ou realizar o processo de login em outros ter-

Hardening em Linux

minais e checar se tudo est comeando a ser registrado na nossa nova estrutura de logs.

70

Veja um exemplo:

# /etc/init.d/cron restart

# ls -l /var/personal/

# cat /var/personal/cron.log

Servidor Syslog centralizado


Criao de servidor concentrador de logs dos servidores:

11 tima e necessria implementao, porque, entre outras razes, todos os sistemas


diretamente expostos internet encontram-se nas linhas de frente para a internet.
Durante um momento crtico:
11 Se um desses servidores estiver comprometido, no ser surpresa saber se os seus
logs tambm estaro.
22 provvel que o invasor apague toda a evidncia que puder. Dessa forma, manter
cpias logs em um segundo sistema dificultar que eles encubram os rastros.
A razo relevante que um servidor centralizado com logs permite que a equipe administrativa fique de olho a partir de um nico local, em vez de precisar efetuar o processo
de logon em todos os servidores frequentemente para analisar logs.
importante lembrar que os servios rede DNS e NTP devero tambm estar configurados
corretamente, pois so muito importantes na gerao do logs, tanto para melhor identificao dos hosts e respectivos domnios vinculados, como tambm o horrio correto nos
servidores para que no exista dificuldade na correlao de logs de servidores diferentes.
Um servidor de log centralizado procurar resolver um nome de domnio totalmente qualificado (FQDN) das mquinas que esto enviando informaes para ele, mas se no houver
no mnimo um servidor DNS de Cache, como qualquer servio de rede, se o daemon syslog
for incapaz de resolver o endereo, ele continuar tentando at o tempo de timeout, o que
no interessante.
Da mesma forma, se os horrios dos sistemas no estiverem sincronizados, o servidor de
log centralizado registrar horrios em eventos que no correspondem aos horrios da
confusa do que o normal.
Para sincronizar os horrios e manter a consistncia dos logs da rede, devemos editar o
arquivo /etc/ntp.conf e apontar para uma fonte de tempo centralizada e confivel. Alm
disso, ativar o ntpd para manter sincronizados os horrios dos diferentes servidores, ou
seja, essa operao tem de ser realizada em todos os servidores.

Comando logger
O comando logger possibilita enviar uma mensagem nos logs do sistema. Dessa forma, essa
pode ser uma ferramenta interessante tanto para validar o funcionamento do servidor de
log como tambm para o uso de scripts shell.
A mensagem de log enviada ao daemon que est gerenciando o log, sendo possvel especificar a prioridade, nvel e um nome.

logger [opes] [mensagem]

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

mquina que est enviando as mensagens. Isso tornar a classificao de eventos mais

71

Onde:
11 mensagem a mensagem que ser enviada ao daemon syslog;
11 opes:
22 -d usa um datagrama, em vez de uma conexo de fluxo para esse socket;
22 -i registra o PID do processo;
22 -s envia a mensagem para sada padro (STDOUT) e para o deamon;
22 -f [arquivo] envia o contedo do arquivo especificado como mensagem ao deamon;
22 -t [nome] especifica o nome do processo responsvel pelo log que ser exibido antes
do PID na mensagem do syslog;
22 -p [prioridade] especifica a prioridade da mensagem do syslog, especificada como
facilidade.nvel.
Exemplo:

logger -i -t hardening Definir controles de Hardening -i -f /tvar/


log/syslog -p security.warn

Estrutura de Servidor e Cliente


As configuraes realizadas at agora so para registrar os logs localmente. Apesar de
termos todos os logs organizados, no temos a certeza de segurana em relao a eles, pois
quando um cracker consegue acesso a uma mquina, uma de suas tarefas ser apagar os
rastros que deixou. Isso implica apagar os logs ou modific-los. necessrio tomar providncia em relao a isso adicionando um atributo aos arquivos, o que no o suficiente.
Vamos trabalhar com o conceito de Servidor e Cliente. Configuremos uma mquina em
nossa rede para ser o servidor de logs, e todos os outros servidores sero clientes desse
servidor de logs. Os clientes registraro os logs localmente, mas gravaro seu logs tambm
no servidor de logs. Se um cracker conseguir limpar os rastros no servidor invadido, ele ter
de conseguir o acesso ao servidor de logs para limp-lo tambm. Isso se ele descobrir que
existe um servidor de logs.

Configurao do servidor de logs


Podemos aproveitar toda a configurao que fizemos e acrescentar as seguintes linhas no
syslog-ng.conf:

# vi /etc/syslog-ng.conf

# OPES DE ORIGEM
## Origem Mquinas Remotas

Hardening em Linux

source servremotos { udp();};

72

Estamos criando uma nova origem (source), com nome de servremotos. Essa origem aponta
para o protocolo udp, o protocolo com que o Syslog e o Syslog-NG trabalham.
Com essa linha, fazemos com que nosso servidor aceite os logs originados pelos
outros servidores.

# OPCES DE FILTRO
## Filtro para o Servidor Remoto 1
filter f_servremoto1 { netmask(192.168.0.1); };
## Filtro para o Servidor Remoto 2
#filter f_servremoto2 { netmask(192.168.0.2); };
Estamos criando novos filtros para separar as informaes vindas de cada servidor.
Na opo netmask, estamos especificando os IPs dos servidores remotos.

# OPCES DE DESTINO
## Destino dos Logs do Servidor 1
destination servremoto1 { file(/var/personal/servremoto1.log
owner(root) group(root) perm(0640)); };
## Destino dos Logs do Servidor 2
destination servremoto2 { file(/var/personal/servremoto2.log
owner(root) group(root) perm(0640)); };
Essa uma das grandes vantagens do Syslog-NG em relao ao Syslog. Podemos fazer com
que cada servidor remoto tenha o seu arquivo de logs separado, o que ajuda muito na administrao, pois podemos ter foco em qual servidor desejamos analisar. J no Syslog, todos os
logs das mquinas remotas ficam nos mesmos arquivos de logs locais do servidor de logs.

# OPCES DE LOG (Montagem do log)


## Log do Servidor Remoto 1
log { source(servremotos); filter(f_servremoto1); ;

## Log Servidor Remoto 2


log { source(servremotos);filter(f_servremoto2);filter(f_authpriv)
destination(servremoto2); };
No final, estamos gerando os nossos logs dos servidores remotos. No caso do servidor
remoto 1, no especificamos nenhum filtro adicional, ento sero aplicados todos os filtros a
ele. No servidor 2, s sero registradas informaes relacionadas ao filtro f_authpriv.
Outro recurso muito interessante do Syslog-ng o uso de macros, que, alm de facilitar
muito a criao de regras de logs, ainda possibilita montar organizaes de logs melhor
estruturadas de forma rpida e objetiva. Algumas macros teis:
11 DAY: retorna o nmero do dia da data corrente;
11 MONTH: retorna o nmero do ms da data corrente;
11 YEAR: retorna o nmero do ano da data corrente;
11 HOST: retorna o nome ou IP do servidor;
11 FACILITY: retorna o nome da facility, o que possibilita filtrar por facility o log;

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

destination(servremoto1); };

73

11 PRIORITY: retorna o nome da priority, o que possibilita filtrar pelo nvel do log;
11 PROGRAM: retorna o nome do programa que enviou a mensagem de log; no entanto,
no totalmente confivel, pois depende de como a mensagem enviada.
A seguir, exemplos de uso, pensando em um contexto de um concentrado de log que
vai receber logs de muitos servidores. necessrio separar os logs por servidor e por
perodo, considerando ano, ms e dia, mas esperando o tipo de log (Facility) e o nvel da
mensagem (Priority):

destination servidores_remotos { file(/var/personal/SERVIDORES_


REMOTOS/$HOST/$YEAR/$MONTH/$DAY/$FACILITY.$PRIORITY owner(root)
group(root) perm(0640)); };
log { source(servremotos) ;destination(servidores_remotos); };
Agora, exemplos de uso pensando em um contexto de um concentrado de log que vai
receber logs de muitos servidores. preciso separar os logs por servidor e por perodo,
considerando ano, ms, dia e o tipo de programa que enviou a mensagem de log:

destination logs_programas { file(/var/personal/SERVIDORES_


REMOTOS/$HOST/$YEAR/$MONTH/$DAY/$PROGRAM.log owner(root)
group(root) perm(0640)); };
log { source(servremotos) ;destination(logs_programas); };

Configurao do cliente
A configurao dos clientes mais simples, pois podemos aproveitar a configurao inicial
que fizemos e acrescentar as seguintes linhas:

# vi /etc/syslog-ng/syslog-ng.conf

# OPCES DE DESTINO

destination servlog { udp(192.168.0.10 port(514)); };


O nome do destino servlog, que aponta para o IP do servidor de logs na porta 514/UDP,
porta padro do Syslog e do Syslog-NG.

# OPCES DE LOG (Montagem do log)

## Registro dos Logs no Servidor

Hardening em Linux

log { source(src); destination(servlog); };


Tudo que de origem local ser encaminhado para o servidor de logs. Feito isso, temos de
reiniciar o Syslog-NG em ambos os servidores.

# /etc/init.d/syslog-ng restart
Para testar, podemos reiniciar algum servio no servidor 1 e no servidor 2 e verificar se o
servidor de logs registrar as informaes nos arquivos determinados.

74

Configurao do STUNNEL
Devido simplicidade do protocolo Syslog, em alguma implementao pode ser interessante realizar comunicao entre o cliente e o servidor de log atravs de um canal criptografado. Para isso, primeiro devemos instalar o STUNNEL. Esse programa cria um canal
criptografado entre o servidor syslog-ng e os clientes.

# apt-get install stunnel sslcert


Altere o valor da varivel ENABLE:

# vi /etc/default/stunnel4
ENABLED=1Configurao do servidor, ou seja, as configuraes do servidor de concentrador
de logs:

# vi /etc/stunnel/stunnel.conf
cert = /etc/stunnel/syslogserver.pem
key = /etc/stunnel/syslogserver.pem
; Servicelevelconfiguration
[5140]
accept = 5140
connect = 514
Em seguida, necessrio configurar o cliente, ou seja, todos os servidores que encaminharo logs:

# vi /etc/stunnel/stunnel.conf

key = /etc/stunnel/syslogclient.pem
client = yes
; Servicelevelconfiguration
[5140]
accept = 514
connect = 5140
necessrio criar os certificados do servidor e do cliente:

# makesslcert /usr/share/sslcert/ssleay.cnf /etc/stunnel/syslogserver.pem


# makesslcert /usr/share/sslcert/ssleay.cnf /etc/stunnel/syslogclient.pem
Aps criar os certificados, ser copiado o certificado do cliente, alterada sua permisso e
iniciado o servio do STUNNEL.

# scp /etc/stunnel/syslogclient.pem sysadmin@remoteclient:/etc/stunnel/


# ssh sysadmin@remoteclient chmod 400 /etc/stunnel/syslogclient.pem

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

cert = /etc/stunnel/syslogclient.pem

# /etc/init.d/stunnel4 start
75

Definio da poltica de rotacionamento de logs


Todos os logs que criamos sero valiosos para analisarmos o nosso sistema, mas eles
tendem a crescer muito rpido, o que pode ocasionar estouro de disco ou da partio onde
est o diretrio de logs. Pensando nisso, podemos criar uma poltica de logs e utilizar o
recurso de rotacionamento de logs nativo do sistema, que o LogRotate.
O arquivo de configurao do rotacionamento o /etc/logrotate.conf, no Debian, e o /etc/
rotate.conf, no Red Hat. Vamos visualizar algumas opes globais do LogRotate.

# vi /etc/logrotate.conf
weekly
Essa opo faz com que os logs sejam rotacionados semanalmente.

rotate 4
Rotate 4 define que sero mantidos os quatro ltimos rotacionamentos, para no fugir
do controle.

mail root
Essa opo faz com que, em que casos de erro de no existncia dos logs, eles sejam
enviados para o usurio root.

create
Com essa opo, estamos configurando para que sejam criados novos arquivos de log
(vazios) aps os antigos rodarem.

compress
Essa opo faz com que as cpias de logs sejam compactadas, mantendo sempre o ltimo
rodado descompactado.
No vamos utilizar as configuraes globais. Vamos montar uma poltica de rotacionamento
para toda a estrutura de logs personalizada que criamos no /var/personal. Assim, sero
verificados os logs diariamente e, caso o arquivo alcance o tamanho de 3 MB, ele ser rotacionado e, aps o processo o Syslog, ser reinicializado para que continue trabalhando normalmente. Esse processo ser feito no mximo cinco vezes, o que representado por rotate
5. Quando chegar ao sexto rotacionamento, ele apaga o primeiro e renomeia os outros.
Vamos mostrar alguns logs como exemplo. A estrutura pode ser aplicada a todos os logs,
basta adicion-los.
Podemos adicionar essa estrutura no final do arquivo logrotate.conf.

/var/personal/*.err /var/personal/*.info /var/personal/*.notice {

Hardening em Linux

daily

76

size 3M
sharedscripts
postrotate
/usr/bin/killall -1 syslogd

endscript
rotate 5
}
Exemplo de configurao de logrotate com compresso bzip2:

/var/log/*.log {
missingok
rotate 10
daily
compress
delaycompress
compresscmd /usr/bin/bzip2
compressoptions --best
compressext .bz2
create 0644 root root
}
Exemplo mais arrojado de configurao com compresso bzip2 e mantendo logs antigos
separados em outro diretrio:

/var/personal/ {
maillast sandro.melo@grupobem.com.br

size=100M
olddir /var/personal/logs_antigos
rotate 5
weekly
compress
delaycompress
compresscmd /usr/bin/bzip2
compressoptions --best
compressext .bz2

create 0644 root root


sharedscripts

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

missingok

77

postrotate
/opt/apache/bin/apachectl restart
endscript
}
Mesmo que o rotacionamento seja dirio, podemos for-lo a rodar quando quisermos.
Basta executar o seguinte comando:

# logrotate /etc/logrotate.conf
Depois, visualize o diretrio de logs e veja o que aconteceu.

# ls -l /var/personal
O controle das aes do logrotate feito pelo utilitrio de agendamento de tarefas do
sistema, o cron. O cron possui uma configurao especfica para tarefas que so rodadas
durante certo perodo (diariamente, mensalmente etc.).
Confira o script de controle das aes do logrotate no cron:

# cat /etc/cron.daily/logrotate
Verifique em qual o horrio o logrotate executar.

# cat /etc/crontab
Podemos ver que o rotacionamento acontecer periodicamente, de acordo com as configuraes. Dessa forma, os arquivos no crescero eternamente.

Servidor NTP
O servidor NTP tem por funo estabelecer uma sincronia entre o relgio do sistema e a
referncia mundial de tempo, o padro Horrio Universal Coordenado (UTC), atravs do protocolo NTP. Isso traz a vantagem de o usurio no precisar ficar alterando o relgio do seu
sistema, pois ele estar somente buscando as configuraes de um servidor. Ele trabalha
com uma associao de hierarquia dos servidores, que so denominadas stratum.
O stratum 0 a origem da hierarquia dos servidores de tempo, onde esto os equipamentos
de fonte de horrios reais precisos (receptores GPS e relgios atmicos). Logo abaixo, no
stratum 1, esto os servidores pblicos diretamente sincronizados com os equipamentos
de preciso. No stratum 2, esto os servidores pblicos utilizados por padro pelos demais
servidores e clientes ntp do mundo, para evitar sobrecarga no stratum 1.
Por questes de trfego de rede, configuraremos no nosso exemplo um nico servidor NTP.
As demais mquinas atualizaro o seu horrio a partir desse servidor, sendo clientes dele:

Hardening em Linux

No servidor

78

1. Instalar o Servidor NTP.

# apt-get install ntp ntp-server


2. Vamos entrar agora no arquivo de configurao do servidor NTP:

# vi /etc/ntp.conf

Saiba mais
O sistema Linux
proporciona um
grande nmero de
logs, o que possibilita
ao administrador ter
grande controle sobre
o sistema. Sabendo
administrar esses logs
corretamente, eles
se tornam uma arma
poderosa para que seja
possvel prevenir erros
e at mesmo responder
melhor as tentativas
de invaso.

Ns veremos somente algumas opes desse arquivo, pois a configurao do servidor


bem simples.
11 server 127.127.1.0 nesse parmetro, configurado o IP ou nome do servidor ao qual o
ntp deve se sincronizar (por exemplo, http://ntp.cais.rnp.br um exemplo de servidor de
stratum 2 no Brasil);
11 statsdir /var/log/ntpstats/ diretrio onde vo ficar os logs de estatsticas do meu servidor NTP;
11 driftfile /var/lib/ntp/ntp.drift arquivo onde ficar configurado o valor estimado de erro
de frequncia entre o relgio do sistema e o servidor de sincronia de stratum anterior.
3. Que comando executo para monitorar a minha comunicao com os servidores
de sincronizao?

# ntpq -p 192.168.100.100
4. Onde posso encontrar referncias aos servidores NTP pblicos de stratum 1 e 2?
http://ntp.isc.org/bin/view/Servers/WebHome
5. Depois disso, vamos reiniciar o daemon do ntp-server para sincronizar e passar a ser um
servidor NTP.

# /etc/init.d/ntp-server restart
6. Vamos verificar o log em outro terminal para ver o processo de sincronizao.

# tail -f /var/log/syslog

Nos clientes
1. Instalar o cliente NTP.

2. Para as mquinas da rede que forem os clientes NTP, possvel fazer a sincronizao do
horrio com o servidor atravs do comando ntpdate:

# ntpdate 192.168.100.100
3. Caso no exista um servidor NTP na rede, podemos simplesmente reiniciar o daemon
do ntpdate.

# /etc/init.d/ntpdate restart

Contabilizao de processos
Tem por objetivo apoiar decises relacionadas a plano de capacidade ou a auditoria de
um processo que porventura esteja consumindo muito recurso da mquina.
11 Contabilizao dos processos pode tambm possibilitar controle sobre quais processos e quais respectivos usurios.
22 Para isso, basta usar o comando lastcomm, que no vem instalado por padro na
maioria das distribuies Linux. necessrio instalar o pacote acct.
Instalao do pacote acct, que traz o comando lastcomm.

# apt-get install acct

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

# apt-get install ntpdate

79

Verifique se o arquivo /var/account/pacct, que onde fica a informao de contabilizao,


foi criado.

# ls /var/account/pacct
Teste o lastcomm.

# lastcomm
Dessa maneira, mostrada uma viso geral de todos os ltimos comandos digitados pelos
usurios. Para consultar informaes de somente um usurio, execute o lastcomm da
seguinte forma.

# lastcomm root
# lastcomm toor
Podemos tambm fazer a consulta pelo comando no lugar do usurio.

# lastcomm ls

Concluso

Saiba mais

Registro de eventos (logs) e auditoria de comandos so atividades demandadas em qualquer


ambiente de TI. A importncia de se ter um ambiente com a capacidade de ser auditada,
com o registro da trilha de todos os comandos, enorme.
Pensando em uma situao de alta criticidade em que seja necessrio responder a um incidente de segurana ou mesmo ter informaes para uma percia forense computacional, ter
uma estrutura de logs organizada com rplicas em outro servidor vital.

Auditoria com HIDS


Uso de HIDS para identificao de modificaes em um servidor:

11 Pode ser um mecanismo funcional no somente para identificar mudanas no


programadas, mas tambm mudanas que podem ter ocorrido em um incidente
de segurana.
AIDE:
11 um HIDS prtico, de implementao simples e com certeza soma em um processo
de Hardening, criando a possibilidade de realizao de auditoria para verificar
mudanas no sistema.
Para instalar o AIDE:

apt-get install aide


O diretrio padro onde fica o arquivo de configurao o /etc/aide, e o arquivo o aide.conf.
Outro diretrio importante onde ficam as principais regras de onde e como devero ser
Hardening em Linux

identificadas as informaes sobre logs:

80

# cd aide.conf.d/
Os arquivos da base so criados em /var/lib/aide com as informaes para auditoria:

/var/lib/aide/aide.db /var/lib/aide/aide.db.new

Todas as informaes
do comando lastcomm
esto dentro do
arquivo /var/account/
pacct e s podem ser
visualizadas atravs
de comandos como o
lastcomm.

provvel que as configuraes padro que indicam onde o AIDE deve verificar no
atendam a todos os casos, e consequentemente ajustes devero ser feitos. Uma interessante
modificao no auditar diretrios que possuem frequentes modificaes, como o caso
de arquivos de logs. O AIDE no a melhor ferramenta nesse caso: o interesse ter foco
em arquivos e diretrios de configurao importantes. Assim sendo, usar os recursos de
exceo uma boa soluo:
Edite o arquivo aide.conf ignorando toda a pasta /var/log, !/var/spool/ e /var/cache/squid.

#vim aide.conf
All=R+a+sha1+rmd160
/etc p+i+u+g # check somente permisses, inode, usurios
e grupos do etc
/bin All # aplica as regras definidas na varivel All para
todos os arqs do /bin
/sbin All # idem /sbin
/var All # idem /var
/usr/bin All # idem /usr/bin
/usr/sbin All # idem /usr/sbin
/etc ConfFiles
#
!/var/log/.* # ignora o diretrio /var/log
!/var/spool/.* # ignora o diretrio de spool

*Aps fazer qualquer modificao, necessrio executar o comando:


# update-aide.conf
A ferramenta Ambiente Avanado de Deteco de Intruso (AIDE) cria uma base de dados
para comparaes posteriores a partir de alguns algoritmos de hash criptogrficos e informaes de metadados dos arquivos, como grupo, dono, tamanho e hora de modificao.

Uso do AIDE
Criar uma cpia do arquivo de configurao no diretrio /var/lib/aide, chamado aide.conf.
autogenerated, que vai ser usado pelo comando gerador de bases do AIDE.

# cd /var/lib/aide
# cp aide.conf.autogenerated

aide.conf

# aide --init
Foi gerado o arquivo /var/lib/aide/db.aide.new. Para ser feita a auditoria, necessrio renomear o arquivo para /var/lib/aide/db.aide ou usar o comando:

# aideinit

Captulo 3 - Hardening em sistema Linux Registro de eventos (log) e HIDS

!/var/cache/squid.

81

Quando executado, o comando aideinit criar o arquivo var/lib/aide/db.aide.new e tambm o


/var/lib/aide/db.aide.
Realizao de uma auditoria:

# nice -n -19 aide C --config=/var/lib/aide/aide.conf | tee /etc/


relatorio.txt
Os Host Intrusion Detection System (HIDS) so um mecanismo importante na identificao
de malwares e de modificaes s configuraes do sistema. Dessa forma, mesmo que
a norma seja enftica na questo de vrus (que, no contexto de sistemas Like Unix, so
diferentes de sistemas Microsoft devido forma como suas propostas de DAC foram desenhadas), devemos levar em considerao suas recomendaes, trazendo-as para o contexto

Hardening em Linux

do Sistema Operacional Linux.

82

Roteiro de Atividades 3
Atividade 3.1 Hardening Linux Registro de eventos (logs)
1. Configure a varivel HISTTIMEFORMAT no .bashrc dos usurios sysop e syadmin.

2. Configure a varivel HISTTIMEFORMAT no .bashrc do /etc/skel.

3. Configure a varivel HISTFILE no .bashrc do usurio root para que seja possvel ter uma
trilha diferente para cada usurio que fizer su para root.

4. Configure o Syslog-ng para estruturar os logs gravando-os e organizando-os em arquivos,


com a FACILITY e a PRIORITY. Apresente suas observaes.

Captulo 3 - Roteiro de Atividades 3

5. Crie uma regra no Syslog-ng para concentrar em um nico arquivo todos os logs.

83

6. Crie um servidor de Log remoto e realize testes.

7. Crie um canal seguro entre o cliente e o servidor de logs utilizando o STUNNEL.

Atividade 3.2 Auditoria HIDS


1. Aps a configurao, deve-se inicializar o AIDE. Para melhor contextualizao, ser
necessrio criar uma simulao de modificao de arquivos estratgicos, modificando
metadados e contedo. Para isso, execute os seguintes comandos:

# echo # >> /etc/hosts.allow


# echo # >> /etc/hosts.deny
# echo # >> /etc/services
# chmod 700 /etc/passwd
# chmod 700 /etc/shadow
# chmod 700 /etc/services

2. Ativar a contabilizao de processos e usar o comando lastcomm para listar informaes

Hardening em Linux

apuradas de contabilizao dos processos.

84

Captulo 3 - Roteiro de Atividades 3

3. Realize uma auditoria com o AIDE.

85

86

Hardening em Linux

4
Identificar servios de rede ativos; Reforar a segurana do servio SSH; Implementar
mecanismo contra ataque de Fora Bruta.

conceitos

Menor Privilgio e Menor Recurso para servios de rede; Servios TCP e UDP;
Hardening de SSH.

Checklist nos servios do sistema


Instalao e configurao de servios bsicos no Linux:

11 No complicado. Depois da instalao, j estaro funcionando.


22 No entanto, preciso avaliar, testar e revisar suas configuraes.
Instalar e configurar servios bsicos em um sistema Linux no to complicado. Muitos
servios, depois de instalados, j esto funcionando, mas com configurao padro. Alguns
j vm instalados e habilitados por padro j na instalao do sistema Linux. Entretanto,
ao pensar em segurana, sabemos que no se deve colocar um servio em produo com
configuraes padro sem que estas sejam avaliadas, testadas e revisadas.
Muitos administradores, talvez por serem iniciantes, no sabem tirar proveito de ferramentas clssicas para verificar e avaliar se o servio est funcionando corretamente, alm
de verificar em qual porta o servio est trabalhando e se est recebendo requisies
corretamente. Em alguns casos, tambm necessrio ver se nenhum incidente de segurana motivou alguma mudana no funcionamento do servio ou mesmo se foi um vetor de
ameaa para um acesso indevido que possibilitou um invasor fazer alteraes no sistema
que poderiam prejudic-lo.
Diante desse cenrio, comearemos este captulo mostrando alguns comandos que podem
formar uma lista de aes e recursos que podero ser chamados de checklist, o que permitir uma avaliao, embora pontual, mais interessante dos servios de redes ativos.
Primeiramente, recomendvel identificar a porta definida pelo servio, mas isso geralmente uma tarefa simples, pois os servios possuem portas pr-definidas. Podemos ver
algumas portas padro do sistema no arquivo /etc/services. Exemplos de algumas portas:

# cat /etc/services

Captulo 4 - Servios de Redes Parte 1

objetivos

Servios de Redes Parte 1

# cat /etc/services | grep -i ssh


87


ssh

22/tcp

ssh

22/udp

# SSH Remote Login Protocol

Aps ter identificado as informaes das portas em que os servios so ativados, devemos
usar algum comando que permita consultar informaes de porta, como o netstat, lsof e
fuser. Esses comandos vo fornecer algumas informaes sobre os servios de rede do ativo
no sistema. vlido lembrar que so encontradas implementaes do netstat em outros
Sistemas Operacionais Unix e tambm Windows, mas que no necessariamente possuem as
mesmas opes ou os recursos funcionaro da mesma forma.

# netstat -nltp
Onde:
11 -n: a opo para fazer o netstat no resolver os IPs para nomes;
11 -l: lista os sockets que esto ouvindo (listen), ou seja, que esto prontos para receber
uma conexo;
11 -t: lista somente os sockets no protocolo TCP. Podemos tambm utilizar o -u para protocolos UDP;
11 -p: lista informaes sobre o processo do servio vinculado porta consultada.
Com isso, podemos ver vrias informaes sobre os sockets que esto aguardando conexes.
Exemplo:

Proto Recv-Q Send-Q Endereo Local Endereo Remoto Estado


tcp

0.0.0.0:22

0.0.0.0:*

OUA

11 Proto: o protocolo em que esse socket est trabalhando;


11 Endereo Local: indicado que a porta 22 pode responder a qualquer interface de rede
no sistema (0.0.0.0:22);
11 Endereo Remoto: mostra que no h nenhuma conexo relacionada quela porta, cujo
Estado OUA, ou seja, aguarda conexes.
Podemos usar o netstat com o -a no lugar do -t para consultar todos os sockets, tanto os
que esto ouvindo como os que no esto ouvindo e os com conexes estabelecidas, o
que muito interessante para o sysadmin. Quando se solicita informaes de conexes
estabelecidas, podemos ver a qual interface e porta (cliente e do servio) est conectada, e
a origem da conexo.

Hardening em Linux

# netstat -nat

88

Proto Recv-Q Send-Q Endereo Local

Endereo Remoto

Estado

tcp

200.123.123.123:143

ESTABELECIDA

tcp6

10.0.0.1:32778

::ffff:10.0.0.1:22 ::ffff:192.168.0.8:32796

ESTABELECIDA

Com a sada do comando netstat, anteriormente ilustrada, sabemos quais sockets esto disponveis e podemos ver qual processo (servio) est rodando nesse socket com o comando fuser.

# fuser -v 22/tcp

USER

PID ACCESS COMMAND

22/tcp

root

3943 f....

sshd

Onde -v o modo verbose.


Podemos ver qual usurio est rodando o processo, o PID (nmero do processo) e o programa que est rodando, que nesse caso o sshd. Para cada processo que est rodando,
o sistema cria um diretrio com seu PID no /proc, onde possvel obter algumas de suas
informaes. Uma delas o arquivo cmdline, que mostra o caminho completo do programa
e nos permite saber que aquele programa real, e no um programa forjado.

# cat /proc/3943/cmdline
/usr/sbin/sshd
Outra ferramenta que podemos usar o lsof, que nos mostra informaes parecidas com o
netstat e o fuser, s que em uma nica ferramenta. O comando lsof mostrar os sockets que
esto ouvindo, que esto estabelecidos e, entre outros, nos mostrar tambm o usurio, o
PID e o programa que est rodando. Ou seja, percebemos que o comando lsof uma juno
entre o netstat e o fuser. Porm, em algumas distribuies Linux ou mesmo dependendo da
instalao, o comando lsof pode no ser instalado por padro, sendo necessrio instal-lo
via pacotes ou pelo source.

# lsof -i

Os raw sockets so
considerados por
muitos como um potencial foco de problemas
de segurana devido
ao fato de que poucos
administradores verificam as atividades de
raw sockets de
seus sistemas.

user

36u

IPv4

22723 TCP 10.0.0.1:38138-

>64.233.161.19:www (ESTABLISHED)
ssh

8342

>192.168.0.8:ssh

root

3u

IPv4 100376 TCP 10.0.0.1:54751-

(ESTABLISHED)

Onde -i lista todos os processos ou arquivos relacionados a uma interface de rede. Se no


for especificada uma interface de rede, como ilustrado, ele mostrar todas as interfaces.
Uma coisa que muitos administradores tambm se esquecem de olhar so os raw sockets,
sockets que no dependem de um protocolo especfico e permitem acesso direto a protocolos de baixo nvel como ICMP, TCP, UDP e IP.
Podemos ver se existe algum raw socket aberto no nosso sistema utilizando o netstat com
outra opo.

Saiba mais
Veja mais detalhes na
documentao
do hping.

# netstat nlw
Onde -w lista os raw sockets.
Provavelmente no haver nenhum aberto via Raw Socket, ento se retorna uma resposta
vazia. Mas deve-se tambm ter muita ateno com a comunicao Raw Sockets, pois
comum backdoors mais sutis que utilizam o raw socket. Um bom exemplo uma backdoor
que utilize o protocolo ICMP para permitir a execuo de comandos remotamente.

Captulo 4 - Servios de Redes Parte 1

Saiba mais

firefox-b 4652

89

Sada de uma resposta positiva, utilizando o netstat para listar os raw sockets:

Proto Recv-Q Send-Q Endereo Local Endereo Remoto


raw

0.0.0.0:255

0.0.0.0:*

Estado
7

Um ltimo programa sugerido, que pode ser usado para validao de portas ativas, o
nmap, um portascanner muito poderoso para varreduras de portas. Nesse caso, temos a

Portascanner

possibilidade de fazer uma anlise interna ou externa de um determinado servidor ou grupo

Ferramenta que faz uma


varredura nas portas,
testando a segurana
do firewall e verificando
se as portas esto
abertas ou fechadas
para acesso atravs da
internet.

de servidores para que seja possvel inventariar quais portas/servios esto disponveis. O
nmap no vem por padro nas distribuies Linux, sendo necessrio instal-lo.
Exemplo de uso para portas TCP:

# nmap -sT n P0 10.0.0.1



PORT

STATE SERVICE

9/tcp

open

discard

13/tcp

open

daytime

21/tcp

open

ftp

22/tcp

open

ssh

Onde:
11 -sT: faz a varredura completa de portas TCP;
11 -n: no resolver nomes via DNS;
11 -P0: no realizar teste para verificar se o servidor alto est ativo
(icmp Request e ack na porta 80);
11 10.0.0.1: representa seu IP.
Exemplificao de uso nmap tendo como alvo a interface loopback:

# nmap -sT

n P0 localhost


# nmap -sT

n P0 -p 22 localhost


PORT

STATE SERVICE

22/tcp open

ssh

Exemplo de uso para portas UDP:

Hardening em Linux

# nmap -sU

90

n P0 10.0.0.1



PORT

STATE

SERVICE

9/udp

open|filtered discard

53/udp

open|filtered domain

111/udp

open|filtered rpcbind

Onde:
11 -sT: faz a varredura completa de portas TCP;
11 10.0.0.1: representa seu IP.
No contexto local:

# nmap sU

n P0 localhost

# nmap -sU n P0 -p 53 localhost

PORT

STATE

SERVICE

53/udp open|filtered domain


Exemplo de uso para portas TCP e UDP simultaneamente:

# nmap -sU sT

n P0 10.0.0.1

Em alguns casos, o uso do nmap pode ser interessante para fazer o checklist de todas as
portas ativas no servidor.

# nmap -sU sT

n P0 -F 10.0.0.1

Onde -F representa todas as portas de servios clssicos no (/etc/services do nmap). Ou usar


a opo -p- porta a porta at de 1 a 65535. Sendo assim, possvel consultar todas as portas
que esto disponveis em nosso sistema.

# nmap -sU -sT

n P0 -p- 10.0.0.1

Podemos ver tambm os banners dos servios que esto rodando. Para um invasor, essa
pode ser uma informao preciosa.

# nmap sV

n P0 10.0.0.1

PORT

STATE SERVICE VERSION

22/tcp

open

ssh

OpenSSH 3.8.1p1 (protocol 2.0)

25/tcp

open

smtp

Exim smtpd 4.50

111/tcp open

rpcbind 2 (rpc #100000)

113/tcp open

ident

OpenBSD identd

MAC Address: 00:50:BF:63:D0:E7 (Mototech)


O nmap possui muitas opes. Podemos consultar em outro momento seu manual, para ver
todas as opes de uso.

Captulo 4 - Servios de Redes Parte 1

91

No devemos deixar o nmap instalado em um servidor sem controles rgidos de


permissionamento, pois, por padro, um usurio comum pode execut-lo para
realizao de varredura do tipo TCP Connect. Apesar de ser uma ferramenta que
fornece informaes preciosas, ele pode fornecer essas mesmas informaes para
um usurio mal-intencionado ou mesmo para algum que teve algum tipo de acesso
arbitrrio ao sistema.

Exerccio de fixao 1 e
Checklist de Rede
Cenrio de um incidente de segurana Estudo de caso
Considere o cenrio proposto em um incidente de segurana ocorrido na Fbrica de
Brinquedos Gift & Gift Ltda., onde o administrador de um servidor DNS achou estranho o
acesso ao disco, uma vez que j eram mais de 23h de uma sexta-feira, e o acesso est muito
grande. Naquela hora no havia ningum mais na empresa, alm dele, que estava acompanhando uma migrao de um dos servidores de bancos de dados.
Ao consultar a mquina, o administrador percebeu que, alm da porta 53 do DNS e 25 do
MTA Exim, destinado a mensagens internas do sistema, havia uma outra porta ativa, a porta
666, como indicado na tabela 4.1.
Conexes Internet Ativas (sem os servidores)
Proto Recv-Q Send-Q EndLocal EndRemoto Estado PID/Program name
tcp 0 0 0.0.0.0:53 0.0.0.0:* OUA 2747/portmap
tcp 0 0 127.0.0.1:25 0.0.0.0:* OUA 3106/exim4
tcp 0 0 0.0.0.0:666 0.0.0.0:* OUA 3628/inetd

Figura 4.1
Tabela de servios
TCP em estado
Listen.

Command Pid User FD Type Device Size Node Name


bind 2747 daemon 3u IPv4 10629 UDP *:dns
exim4 3106 Debian-exim 3u IPv4 12046 TCP localhost:smtp (LISTEN)
bind 3323 root 6u IPv4 12845 UDP *:dns
inetd 3676 root 4u IPv4 20467 TCP *:sombra (LISTEN)

Figura 4.2
Tabela de sada
do comando
lsof.

Conexes Internet Ativas (servidores e estabelecidas)


Proto Recv-Q Send-Q EndLocal EndRemoto Estado
tcp 0 0 0.0.0.0:111 0.0.0.0:* OUA
tcp 0 0 127.0.0.1:25 0.0.0.0:* OUA
tcp 0 0 0.0.0.0:666 0.0.0.0:* OUA
tcp 4234 0 92.168.0.150:666 212.168.0.171:32776 ESTABELECIDA

Hardening em Linux

tcp 0 978 212.168.0.171:32776 92.168.0.150:666 ESTABELECIDA

92

Intrigado com a porta 666, o administrador resolveu consultar mais detalhes sobre o
processo que estava ativo na respectiva porta. Buscou mais informaes com o comando
lsof a sada do comando lsof mostrada na tabela 4.2.
Notou um nome estranho e muito sugestivo para o respectivo servio, o que estava notoriamente qualificando como uma possvel backdoor. Com essa identificao, a prova de uma
violao do sistema est qualificada, caracterizando um incidente de segurana crtico.

Tabela 4.3
Tabela de sada do
comando netstat.

Diante dessas informaes, o administrador resolveu coletar mais informaes das atividades
de conexes estabelecidas com o servidor, buscando identificar se a suposta Backdoor estava
sendo utilizada. Usou novamente o comando netstat, objetivando ter todas as informaes
sobre as conexes estabelecidas. A sada do comando netstat mostrada na tabela 4.3.
Antes de tomar qualquer ao reativa, o administrador precisava saber que aplicao estava
ativa na respectiva porta. Ento, habilmente recorre novamente ao shell do sistema, mas
dessa vez usou o comando fuser para ter mais informaes.
Ao usar o comando fuser, como ilustrado na figura 4.1, ficou claro que o processo vinculado
ao deamon inetd na realidade a shell bash, o que deixava notrio que aquela porta era
uma clssica backdoor implementada no inetd.conf, o que tambm ratificava o fato de o
servidor em questo estar comprometido.

xninja# fuser -v 666/tcp


USER PID ACCESS COMMAND
666 root 2321 f . . . . inetd
root 2321 f . . . . bash
xninja#
Diante do que foi relatado, assinale V (verdadeiro) ou F (falso):
( ) Uma Backdoor como a ilustrada pode ser instalada por um invasor, mas tambm por um
insider (empregado mal-intencionado) ou um gray hat (pseudo consultor prestador de servio).
( ) Uma backdoor dessa categoria to engenhosa que no detectvel no sistema, mesmo
por um administrador experiente que realize o procedimento de checklist de servios de
rede, relacionando os processos e servios ativos.
( ) muito comum em uma invaso de sistemas o invasor instalar rootkits que, alm de
implementarem backdoors no sistema, adulteraram binrios de comandos clssicos (netstat,
fuser, ps, lsof e outros) para evitar que o administrador as identifique. Entretanto, a backdoor
encontrada foi implementada utilizando recursos do prprio sistema.

Runlevel
Depois de terem sido realizadas todas as checagens e elencados todos os servios que
esto ativos no nosso sistema, importante avaliar se realmente necessrio que todos os
servios inicialmente identificados como ativos deveriam estar ativos. Caso no, podemos
desativar os que no so necessrios, melhorando a performance e a segurana do sistema.
No Debian, podemos consultar os diretrios dos nveis de execuo (run level), baseados no
System V, que onde ficam todos os programas que sero ativados na inicializao do sistema.
O nvel de execuo padro do Debian o nvel 2. Cada distribuio Linux organiza seu
sistema de nveis de execuo de uma maneira diferente. Para identificar como cada uma
delas trabalha, podemos consultar o arquivo /etc/inittab, que controla o processo init, o
primeiro processo a ser iniciado no sistema. Consultando o diretrio do nvel de execuo
padro do Debian para identificar os servios inicializados por padro:

# ls -l /etc/rc2.d

Captulo 4 - Servios de Redes Parte 1

Figura 4.1
Sada do
comando fuser

93

Repare que so todos links simblicos que apontam para o diretrio /etc/init.d, diretrio
onde ficam todos os scripts que controlam os daemons do sistema. Caso no queira que
determinado servio seja ativado na execuo, basta apagar o link simblico dele do diretrio do nvel de execuo que est sendo utilizando, que nesse exemplo o runlevel 2.
Como exemplo, podemos remover o link simblico do exim4, um servidor de e-mail padro do
Debian. Todavia, em muitos casos um MDA interno relevante para os servios que ficaram
ativos, tudo uma questo de qual a finalidade do servidor. Imagine que a finalidade nesse
exemplo de J em um servidor firewall: no existe necessidade de deixarmos um servidor de
e-mail rodando com um MTA, o que deixa sua porta SMTP (25) aberta, possibilitando que um
cracker aproveite-se dela, mas em muitos casos com MDA interno pode ser interessante.

# rm -f

S20exim4


ou

# mv S20exim4 K20exim4
Com isso, quando o sistema iniciar no nvel 2 padro, o exim4 no iniciar mais. possvel
fazer isso com todos os servios que forem classificados como desnecessrios e personalizar tambm os outros nveis de execuo.
No deve-se esquecer tambm de verificar o diretrio /etc/rcS.d, pois nele ficam os links
simblicos dos servios que so iniciados antes dos servios do nvel de execuo padro.
Mesmo que esses servios sejam primordiais para o funcionamento do seu sistema, uma
boa prtica verificar se no existe algum servio que seja considerado desnecessrio para
essa ocasio.

Standalone versus Super Daemon


O modelo Inetd (Network Super Daemon), onde /etc/services mapeia o nome do servio a
nmero de porta. Exemplo:

ulistserv 372/tcp ulistproc


/etc/inetd.conf : Arquivo principal de configurao
ftp stream tcp nowait root /usr/sbin/tcpd proftpd
O substituto para inetd e do aplicativo Xinetd desenvolvido originalmente para RedHat e
portado para outras distribuies. O Xinetd considerado mais flexvel, e funciona com um
mecanismo de controle de acesso mais elaborado, o que torna-o mais seguro.
11 /etc/xinetd.conf: arquivo de configurao principal do Xinetd;

Hardening em Linux

11 /etc/Xinetd/: contm arquivos para servios gerenciados pelo Xinetd.

94

Gerenciamento de servios de redes em Inetd e Xinetd


Para ativar um servio via Inetd, basta descomentar a correspondente linha de configurao
do servio no arquivo inetd.conf e depois reinicializar o servidor inetd.
Reiniciar o daemon Inetd:

# pkill HUP inetd

Outra forma era executar o deamon do inetd:

# service inetd restart


Caso o Super Deamon seja baseado no Xinetd, que uma evoluo do inetd desenvolvida
pela Redhat.
O arquivo de configurao principal o xinetd.conf. Fazer mudanas em xinetd.conf algo
muito especfico, pois um arquivo muito simples, mas habilitar ou desabilitar servios
demanda editar as configuraes concentradas no diretrio /etc/Xinetd.

Arquivo de configurao xinetd.conf, onde a recomendao trivial


ativar o log via Syslog.
defaults
{

# Please note that you need a log_type line to be able to use
log_on_success
# and log_on_failure. The default is the following :
log_type = SYSLOG daemon info

}

includedir /etc/xinetd.d
O Xinetd possibilita melhoras de controle de acesso para servios, o que um timo motivo
para usar Xinetd em vez do antigo inetd. Outro ponto positivo que as configuraes de
servios esto separadas por arquivos, o que traz uma modularidade que possibilita melhor
administrao e organizao.
Toda mudana de configurao, tanto no xinetd.conf como nos arquivos dentro do diretrio
/etc/Xinetd, demanda que o servio seja reinicializado:

# /etc/rc.d/init.d/xinetd restart
Durante o processo de Hardening, deve-se identificar os servios de rede ativos via Super
servios que devem ser bloqueados, como:
11 Finger, echo e ntalk;
11 Telnet (use o ssh ou um servidor telnet com ssl);
11 FTP (se possvel, user sftp ou scp);
11 rwho, rsh , rlogin e rexec (recomenda-se ssh, scp e sftp).
Uma recomendao verificar o permissionamento dos arquivos do diretrio /etc/Xinetd,
em 600:

# chmod v 600 /etc/xinetd.d/*

Captulo 4 - Servios de Redes Parte 1

Deamon e avaliar se realmente devem estar ativos, caso no devem ser desativados. Tpicos

95

E antes de ir para produo, definir o atributos do arquivos para imutvel:

# chattr +i /etc/xinetd.d/ *

&&

lsattr /etc/xinetd.d/*

E tambm recomendado rever o permissionamento dos scripts dos deamons que ficam concentrados em /etc/init.d. Esse scripts devem estar disponveis para leitura apenas para o root:

# chmod -V 700 /etc/rc.d/init.d/*

Gerenciando inicializao de servios


Em distribuies like Debian, como Ubuntu, existe alguma forma de gerenciar os que devem
ou no serem ativados no boot do sistema. Entre as formas de gerenciamento, destacam-se:
11 update-rc.d;
11 service;
11 rcconf;
11 invoke-rc.d.

Segurana em servios de redes


Boas prticas de segurana de redes:

11 Aplicao de controles e segregao nos servios de redes ativos.


22 Usar configurao combinada entre dois arquivos:
33 TCPWRAPPERS.
No contexto de servios de redes, entre as boas prticas de segurana de redes, importante
a aplicao sempre que possvel de controles segregao nos servios de redes ativos, principalmente nos servios administrativos. Para isso, pode ser interessante usar a configurao
combinada entre dois arquivos, para limitar o uso dos servios de rede, que configuram o
recurso conhecido como TCPWRAPPERS (/etc/hosts.deny e /etc/hosts.allow), combinada
com limitaes de conexo configuradas via o recurso PAM (/etc/pam.d e /etc/security).
Isso tudo, posteriormente aliado a uma poltica bem definida de Firewall, e com
uma estrutura de registro de eventos (logs), vai com certeza agregar ainda mais
segurana ao sistema.

Utilizando o TCPWRAPPERS, podemos restringir o acesso de todos os servios de rede e


liber-lo somente aos IPs que desejados.
importante destacar que o servio de rede em questo tem de ter sido compilado com
suporte para o uso do TCPWRAPPERS; dessa forma, para confirmar, recomendvel usar o
comando ldd. Veja o exemplo:

Hardening em Linux

# ldd /usr/sbin/sshd

96

Primeiro bloqueia-se o servio de ssh para todos no arquivo /etc/hosts.deny.

# vi /etc/hosts.deny
sshd: ALL

Em seguida, liberamos para quem desejamos.

# vi /etc/hosts.allow
sshd: 10.0.0.1 10.0.0.3
Nesse exemplo, est sendo definido que somente esses dois IPs podem fazer conexes SSH
no servidor; todos os outros sero bloqueados.
Para validar a configurao, podemos tentar conectar via SSH no servidor a partir de um
desses IPs que esto liberados e de um que no est liberado.

Ferramentas de varreduras e levantamento de informao


Devemos levar em considerao no checklist de rede a avaliao de que tipo de informao
fornecida pelo servios de rede, para que seja possvel rever as configuraes para
remov-las. fato que a obscuridade de informaes de servios de rede uma boa prtica,
mas no uma ao definitiva que resolva um problema de vulnerabilidade, por exemplo.
O administrador tem de ter em mente que no fornecer informaes sobre seu sistema via
servios de rede uma boa prtica, mas mant-los atualizados e devidamente configurados
ainda mais importante.
Bons exemplos de ferramentas teis para essa coleta de informaes: footprint, fingerprint
e enumerao, comumente utilizadas por invasores.

Fingerprint de servio
Submundo da internet: divulgao de ferramentas que fazem fingerprint em servios

comum.
11 Por isso, importante que um administrador:
22 Remova informaes desnecessrias.
22 Saiba validar que tipo de informao est disponibilizando.
muito comum no universo underground (submundo da internet) a divulgao de ferramentas que realizam fingerprint em servios, pois a identificao da verso de um servio
uma informao fundamental para um scriptkid aplicar o uso de um determinado exploit,
ainda no sendo incomum ferramentas que fazem esse tipo de consulta em grande escala.
Dessa forma, importante que um administrador remova as informaes desnecessrias,
mas que tambm saiba validar que tipo de informao est disponibilizando. Ferramentas
como httprint, amap e nmap podem ser muito teis nesses momentos.

Scanner de fingerprint de servio desenvolvido pelo THC (www.thc.org).


Utilizao:

# amap -sT -d -b -o amap_report.txt 12.18.1.14


Onde:
11 -sT: define o mtodo TCP de varredura;
11 -d: define sada em modo hexadecimal;
11 -b: define sada em modo ASCII;
11 -o: define que o resultado da varredura dever ser gravado no arquivo informado

Captulo 4 - Servios de Redes Parte 1

Amap

aps o parmetro.
97

Httprint
Ferramenta til na identificao ou levantamento de informaes do servidor HTTP, como
verso, tipo e recurso disponvel SSL e suporte a uma linguagem especfica, como PHP.
Exemplo de uso:

# httprint -s signatures.txt -o

httprint_report.html -h 12.18.1.14

Onde:
11 -s: informa o arquivo que contm as assinaturas de fingerprint;
11 -o: define que o resultado da varredura dever ser gravado no arquivo informado
aps o parmetro;
11 -h: informa o IP do alvo.
O Nikto.pl um scanner de vulnerabilidades web que pode ser usado na enumerao e
identificao de possveis vulnerabilidades. recomendvel que antes de seu uso faamos a
atualizao da sua base de conhecimento de vulnerabilidade, baixando as atualizaes dos
plug-ins de ataque, utilizando a opo -update, conforme ilustrado.
Consulta dos plug-ins disponveis:

# nikto.pl

-list-plugins

Atualizao dos plug-ins:

# ./nikto.pl -update
Para uma anlise simples, basta usar a opo -host:

# ./nikto.pl -host 12.18.1.14


Podemos tambm gerar um relatrio HTML com o resultado da anlise:

# ./nikto.pl -host 12.18.1.14

-Format htm -output nikto_report.html

Onde:
11 -list-plug-ins: lista os plug-ins ativos;
11 -update: conecta no site do projeto para baixar novos plug-ins e atualizaes;
11 -host: define o alive;

Saiba mais

11 -format: define o formato de sada;


11 -output: define o nome do arquivo de sada do relatrio.
As ferramentas que se destacam na realizao desse tipo de teste so THC Hydra e
Medusa. Ambas possuem suporte a vrios tipos de ataques de Fora Bruta e a diferentes
servios de redes.

Hardening em Linux

Exemplo do uso de Hydra para um ataque de Fora Bruta:

98

hydra

-l root -P PASSFILE.txt -o LOG.txt

12.18.1.14 ssh

Onde:
11 -l root: login alvo;
11 -P PASSFILE.txt: Lista/dicionrio de senhas;
11 -o LOG.txt: Log criado com informaes da execuo do ataque;

Um teste interessante
estressar os servios
de rede que possuem
autenticao, tanto
para avaliar a sua
performance como
tambm para ter uma
viso geral sobre o
comportamento do
servio sobre um
ataque de Fora Bruta.
Isso possibilita ao
administrador avaliar
melhor o servio e
as informaes de
registro de eventos
(logs) geradas.

11 12.18.1.14: IP do alvo;
11 ssh: nome do mdulo do respectivo servio que ser atacado.
Mais um exemplo do uso de Fora Bruta, agora utilizando o medusa para o ataque :

medusa -u root -P PASSFILE.txt -h 12.18.1.14 -M ssh


Onde:
11 -u root: login alvo;
11 -P PASSFILE.TXT: lista/dicionrio de senhas;
11 -o LOG.txt: log criado com informaes da execuo do ataque;
11 -h 12.18.1.14: IP do alvo;
11 -M ssh: nome do mdulo do respectivo servio que ser atacado.
As ferramentas Hydra e Medusa so projetos distintos mas ambas tem a mesma finalidade e
muitas funcionalidades em comum.

rea

Feature

Medusa 2.1

Hydra 7.1

Licena

GPL-2

GPL-3

Core

Parallel Method

pthread

fork()

Generic Wrapper
Module

sim

AFP

sim

sim

CVS

sim

sim

FTP

sim

sim

Explcito FTPS
mpdulo AUTH TLS
Mode conforme definido na RFC 4217)

sim

sim

I FTPS (FTP sobre SSL


(990/tcp)

sim

sim

Basic Auth

sim

sim

NTLM Auth
(Windows
Integrated)

sim

sim

Digest Authentication

MD5, MD5-sess

MD5

FTP

HTTP

HTTP Proxy

sim

ICQ

sim

Captulo 4 - Servios de Redes Parte 1

Tabela comparativa entre Medusa e Hydra:

99

rea

Feature

Medusa 2.1

Hydra 7.1

IMAP

Method LOGIN
Support

sim

sim

Suporte ao Mtodo
AUTH-PLAIN Support

sim

sim

Suporte ao Mtodo
AUTH-NTLM

sim

sim

Suporte a SSL

IMAPS, STARTTLS

IMAPS,
STARTTLS

LDAP
Microsoft SQL

sim
Port Auto-Detection

sim

MS-SQL

sim

sim

Pre-4.1 Authentication

sim

sim

Pre-4.1 Hash Passing

sim

4.1+ Authentication

sim

sim

NCP (NetWare)

sim (ncpfs)

sim (ncpfs)

NNTP

Sim (Original AUTHINFO)

sim (Original
AUTHINFO)

MySQL

Oracle

Database

sim (via Wrapper script)

Listener
SID
PcAnywhere

sim

Suporte a Encryption
Level

None

None

Suporte a Authenication Mode(s)

Native PCA, ADS, NT,


Windows

Native PCA

PCNFS

Hardening em Linux

POP3

100

sim
Suporte ao mtodo
AUTH-USER

sim

sim

Suporte ao mtodo
AUTH-LOGIN

sim

sim

Suporte ao mtodo
AUTH-PLAIN

sim

sim

Suporte ao mtodo
AUTH-NTLM

sim

sim

Suporte ao SSL

POP3S, STARTTLS

POP3S

PostgreSQL

sim

sim

RDP (Terminal Server

sim (via Wrapper Script)

sim

REXEC

sim

sim

rea

Feature

Medusa 2.1

RLOGIN

Suporte rhost

sim

Suporte Password

sim

sim

sim

sim

RSH

Hydra 7.1

SAPR3

sim

SIP

sim

SMTP

Authentication
Modes

clear-text, LMv1,
NTLMv1, LMv2, NTLMv2

clear-text,
LMv1,
NTLMv1,
LMv2,
NTLMv2

Hash Passing

sim

sim

Suporte ao mtodo
AUTH-LOGIN

sim

sim

Suporte ao mtodo
AUTH-PLAIN

sim

sim

Suporte ao mtodo
AUTH-NTLM

sim

sim

Suporte a SSL

STARTTLS

STARTTLS

Suporte a VRFY

sim

sim

sim

sim

SNMP
SOCKS5

sim

SSHv2

sim (baseado na libssh2)

sim
(baseado na
libssh)

SVN

sim

sim

TeamSpeak
Telnet

sim
Generic Telnet

sim

sim

Cisco (AAA/nonAAA)

sim

sim

Cisco enable password

VNC

sim

AS/400 (TN5250)
Support

sim

Suporte ao mtodo
Password-less/
Password-only

sim

Suporte ao mtodo
Anti-Brute Force
Slowdown

sim

Suporte ao mtodo
Username/Password

sim

sim

Captulo 4 - Servios de Redes Parte 1

SMB (Microsoft
Windows/Samba)

101

rea

Feature

Medusa 2.1

Hydra 7.1

VmWare Authentication Daemon

Suporte ao
mtodo Non-SSL
Authentication

sim

sim

SSL Authentication

sim

Web Form Module

sim

sim

d Boas prticas

Exerccio de fixao 1 e
Levantamento de informao e Fora Bruta
1. Realize um ataque de Fora Bruta com o HYDRA, tendo como alvo o servidor SSH;
2. Faa um ataque de Fora Bruta com o MEDUSA, tendo como alvo o servidor SSH.
At esse ponto os procedimentos tratados tinham como meio parametrizaes de recursos
do Sistema Operacional. No entanto, um Hardening no deve se limitar a isso. O Hardening
deve, sim, iniciar na camada do Sistema Operacional, mas deve se entender aos servios que
sero providos pelo respectivo servidor. A partir de agora e nos prximos captulos, sero
tratados procedimentos de Hardening de servios comuns em servidores Unix .

Hardening do servio SSH


Hardening de servio:

11 Deve ter foco na possibilidade de eliminar recursos disponveis por padro, que
podem ser um vetor para ameaas, normalmente por causa da falta de controles.
Com relao ao servio SSH, existem vrias parametrizaes que podem somar na segurana do servio.
Uma possibilidade de controle o uso do recurso disponvel nas bibliotecas PAM. Tratando o
SSH diretamente, podemos fazer alguns ajustes no seu arquivo de configurao para deix-lo
mais restritivo, combinando mais uma vez com controles via PAM.
Podemos usar novamente o PAM para restringir o acesso ao nosso servidor via SSH em
determinados horrios. Primeiro devemos habilitar o mdulo no arquivo de configurao do
programa SSH.

# vi /etc/pam.d/ssh
account required

pam_time.so

Logo em seguida, editar o arquivo /etc/security/time.conf para fazer a restrio de tempo:

# vi /etc/security/time.conf

Hardening em Linux

ssh;*;!toor;Al0730-1900
Nesse exemplo, foi permitido que o acesso via SSH no nosso servidor seja feito todos os
dias, mas somente das 7h30 s 19h, exceto para o usurio toor, que poder acessar em
qualquer horrio.
Outras aes interessantes e necessrias no servio, para torn-lo mais seguro:
11 Alterar a porta padro 22 para outra porta alta;
11 Configurar o servio para ouvir somente no IP definido;
102

recomendadas na
ABNT NBR ISO/IEC
27002:2005: vlido
destacar que ferramentas como NMAP,
NIKTO, HTTPRINT,
HTTPSQUASH e AMAP
so ferramentas
poderosas, que podem
ser teis em um
processo de auditoria,
mas no devem ser
instaladas no servidor,
mas sim exclusivamente na estao
administrativa para
garantir sua integridade
e mitigar a possibilidade de mal uso,
fazendo conformidade
com as diretrizes do
item 15.3 da norma.

11 Proibir o login como super-usurio;


11 Utilizar apenas a verso 2 do protocolo SSH;
11 Aplicar restries de login relacionadas ao tempo de inatividade;
11 Liberar acesso apenas para usurios especficos;
11 No permitir senhas em branco;
11 Desabilitar o uso de senha;
11 Refinando o uso do SFTP;
11 Ter controles contra ataques de Fora Bruta.

Modificao da porta padro


A porta padro do SSH alvo constante de ataque de Fora Bruta, sendo significativa a estatstica de ataques acumulados anualmente e apresentados no relatrio do Cert.br. Diante
disso, uma ao simples mas eficaz alterar a porta padro 22 para outra escolha do
administrador. Para isso, devemos editar o arquivo de configurao do servidor SSH
(/etc/ssh/sshd_config).

# vi /etc/ssh/sshd_config
Port 63322

recomendvel
que a porta de
acesso do SSH seja
mudada, definindo
uma porta acima de
1024, definida pelo
sysadmin, o que traria
dificuldade inicial para
aes de varreduras de
portas. Quando modificada a porta padro
do SSH para qualquer
outra e algum tentar
se conectar em nosso
servidor via SSH, ele
precisar especificar
a porta em que o SSH
est trabalhando.
Nesse cenrio, teoricamente somente os responsveis pelo servidor
sabero qual a porta
definida para conexo
ao servio SSH.

Caso o servidor tenha mais de uma interface de rede, pode-se limitar o servidor para que
responda somente na interface que se deseja.ListenAddress 10.0.0.1

Proibir o login como super-usurio


Essa uma das opes primordiais que devem ser mudadas. O SSH, por padro, permite
que o root possa fazer conexes SSH de primeira. Caso no seja desativada essa opo definindo o no, de nada adiantariam as configuraes que foram feitas no PAM at agora, salvo
se a configurao for feita via PAM no arquivo de configurao /etc/pam.d/ssh. Uma alternativa no permitir que o root tenha acesso direto atravs do SSH.

PermitRootLogin no

Forar o uso da verso 2 do protocolo


A verso 1 do protocolo SSH possui falhas serissimas de segurana, ento deve-se configurar o servidor SSH com suporte exclusivo para a verso 2:

Protocol 2
Por fim, no arquivo de configurao do ssh, devemos habilitar o uso de um banner, mensagem que aparecer quando algum tentar conectar em nosso servidor.
Essa configurao pode ser feita ou via a modificao do /etc/issue.net com a mensagem
que deseja ou usando o opo banner, do arquivo de configurao do servidor de SSH.
Coloque sempre mensagens de aviso, com uma mensagem clara e restritiva de que tudo o que for
feito ser registrado. Mas ateno: caso seja habilitado o banner no SSH, no se esquea de mudar
o issue.net, pois normalmente os sistemas Linux trazem a distribuio e a verso nesse arquivo.
No seria interessante um possvel atacante conseguir saber qual o Sistema Operacional e/ou
a distribuio que est sendo usada atravs de uma simples tentativa de conexo SSH.

Captulo 4 - Servios de Redes Parte 1

Saiba mais

Configurar o servio para ouvir somente nos IPs definidos

103

Banner /etc/issue.net
Aplicar restries de login relacionadas ao tempo de inatividade.

Liberar acesso apenas para usurios especficos


Quando o servio SSH destinando as aes administrativas e/ou o acesso restrito a usurios administrativos, uma ao recomendvel restringir o acesso exclusivo aos usurios
administrativos que realmente devem ter acesso ao servidor. Isso pode ser parametrizado
via conta de usurio ou via grupo, de duas formas, ou definindo quais usurios ou grupos
tero acesso ou quais usurios e grupos no tero acesso.
11 AllowUsers: define quais usurios tero acesso;
11 DenyUsers: define quais usurios no tero acesso;
11 AllowGroups: define quais grupos tero acesso;
11 DenyGroups: define quais grupos no tero acesso.
Para realizar a parametrizao, basta colocar os nomes de usurios ou grupos separados
por espao. A parametrizao de usurio fica assim:

AllowUsers joao syadmin rpnadmin sysop


Exemplo de parametrizao de grupo Allowgroups administrators:

Allowgroups

administrators

recomendvel parametrizar usando o conceito de definir que tem permisso, ou seja,


preciso criar uma whitelist, pois mais restritivo e fcil de administrar.
Sendo possvel, recomendvel usar somente chaves para autenticao.

No permitir senhas em branco


Impedir que senhas em branco sejam aceitas:

PermitEmptyPasswords no

Desabilitar o uso de senha


O esquema de autenticao baseada em senha o padro de um servidor SSH; no entanto,
interessante parametrizar para que a autenticao fique vincula a conceitos de chaves
simtricas (chave pblica e privada). Essa parametrizao pode ser definida pela opo PasswordAuthentication, conforme exemplificado:

PasswordAuthentication no
Para criao das chaves usa-se o comando ssh-keygen, que as cria por padro no diretrio
.ssh, dentro do home do usurio:

Hardening em Linux

ssh-keygen -t rsa -b 4096

104

Aps a criao, necessrio enviar a chave pblica para a usurio na mquina correspondente:

ssh-copy-id -i .ssh/id_rsa.pub

usuario@10.0.0.1

O prximo login via ssh deve ocorrer sem senha.

No permitir senhas em branco


Impedir que senhas em branco sejam aceitas:

PermitEmptyPasswords no

Desabilitar o uso de senha


O esquema de autenticao baseada em senha o padro de um servidor SSH. Todavia,
interessante parametrizar para que a autenticao fique vincula a conceitos de chaves
simtricas (chave pblica e privada). Essa parametrizao pode ser definida pela opo
PasswordAuthentication, conforme exemplificado:

PasswordAuthentication no
Para a criao das chaves, usa-se o comando ssh-keygen, que as cria por padro no diretrio
.ssh, dentro do /home do usurio utilizado:

ssh-keygen -t rsa -b 4096

Durante a gerao da chaves, solicitada a criao de uma senha. Caso seja escolhida uma senha, ela ser solicitada toda vez que a chave for utilizada. Caso queira
conexo direta com chaves, mas sem senha, basta, durante a solicitao de criao
de senha, pressionar a tecla enter. Esse segundo cenrio interessante quando se
deseja execuo de scripts remotos.
Aps a criao, necessrio enviar a chave pblica para o usurio na mquina correspondente:

ssh-copy-id -i .ssh/id_rsa.pub

usuario@10.0.0.1

Refinando o uso do SFTP


recomendvel ativar logs de operaes do SFTP, caso esse recurso esteja ativo, conforme
o exemplo:

Subsystem sftp

/usr/libexec/openssh/sftp-server -l INFO -f AUTH

Em situaes especficas, podemos desejar desabilitar o servio. Para isso, basta comentar
a linha. Outra possibilidade parametrizar a conta de um especfico usurio para que seja
definido o uso exclusivo do SFTP. Para isso, devemos definir o binrio do servio do SFTP
como a shell do usurio:

# usermod -s /usr/lib/openssh/sftp-server usersftp


# grep ^# sftp-server /etc/passwd
Depois de todas as configuraes feitas, necessrio reinicializar o ssh para que as modificaes entrem em vigor.

# /etc/init.d/ssh restart

Captulo 4 - Servios de Redes Parte 1

# echo usermod -s /usr/lib/openssh/sftp-server >> /etc/shells

105

Mitigao de ataque de Fora Bruta


J foi mencionado neste captulo o grande nmero de ataques de Fora Bruta tendo como
alvo a porta 22. Inicialmente, at foi sugerida a troca da porta 22 por outra porta alta
escolha do servidor. Todavia, independente ou no da troca da porta padro, recomendvel a instalao de algum controle para conter, registrar e mitigar ataques de Fora Bruta
tendo como alvo o servidor SSH ou mesmo outros servios.

Instalao do Fail2ban
# sudo apt-get install y fail2ban
A configurao fica centralizada nos arquivos:
11 /etc/fail2ban/jail.conf
11 /etc/fail2ban/fail2ban.conf
No arquivo fail2ban.conf so parametrizadas informaes inerente aos registros de eventos:

# cd /etc/fail2ban/
# grep v # fail2ban.conf | grep .

[Definition]
loglevel = 3
logtarget = /var/log/fail2ban.log
socket = /var/run/fail2ban/fail2ban.sock
A configurao que define as diretrizes de funcionamento ficam concentradas no arquivo
jail.conf. Como boa prtica, recomendvel fazer uma cpia do arquivo original antes de
qualquer alterao.

# cd /etc/fail2ban/
# cp jail.conf jai.conf_ORIGINAL v
O arquivo jail.conf definido em sesses, onde a primeira sesso denominada default
permite a parametrizao do funcionamento do fain2ban atravs de algumas opes:
Ignoreip: onde so definidos os IPs que no vo ser bloqueados pelo programa, ou seja,
uma whitelist;
11 bantime: onde definido o tempo em segundos em que o IP ficar banido ou bloqueado;
11 maxretry: define o nmero mximo em que o IP pode tentar efetivar um processo de
login no servidor SSH at ser bloqueado;

Hardening em Linux

11 Logpath: define o arquivo de log onde ser registrada as tentativas de login que falharam;

106

11 destemail: define o e-mail para o qual devero ser encaminhadas as notificaes


de bloqueio;
11 banaction: define qual ao ser tomada.

A segunda parte da configurao do jail.conf onde so parametrizadas informaes


inerentes aos servios que podem ser protegidos pelo fail2ban, tanto para o propsito de
mitigao contra ataques de Fora Bruta, como tambm ataques de Negao de Servio
baseadas em flood de conexes, entre os servios que j vm com predefinies:
11 Servidor web apache;
11 Servidor FTP vsftpd;
11 Servidor FTP proftpd;
11 Servidor FTP pure-ftpd;
11 Servidor FTP wuftpd;
11 Servidor de SMTP postfix;
11 Servidor de correio couriersmtp e courierauth;
11 Servio de autenticao sasl;
11 Servidor de POP3/IMAP dovecot;
11 Servidor de DNS (ataques named-refused-tcp).
Exemplo de uma configurao para o servidor SSH:

[ssh]
enabled

= true

port

= ssh

filter

= sshd

logpath

= /var/log/auth_fail2ban.log

maxretry = 6
Nessa configurao, informado que o controle est ativo pelo parmetro enabled=true.
Dessa forma, a cada seis tentativas, conforme parametrizado por maxretry=6, o IP origem
da tentativa de conexo ser bloqueado.
O ideal mudar para enabled=true e parametrizar todos os controles de servios que

Captulo 4 - Servios de Redes Parte 1

desejamos que sejam protegidos pelo Fail2ban:

107

108

Hardening em Linux

Roteiro de Atividades 4
Atividade 4.1 # service fail2ban restart
Sistemas de deteco de intruses (IDS) em redes WLAN
Na prtica de Hardening de servio de rede, o foco eliminar servios desnecessrios que
por padro estejam ativos e reavaliar as configuraes do servidor SSH.
1. Revise todos os servios ativos TCP e de defina quais devem realmente estar ativos;
2. Revise todos os servios ativos UDP e de defina quais devem realmente estar ativos;
3. Avalie as conexes baseadas em Rawsocket;
4. Realize um Hardening no SSH.
11 Mude a porta padro;
11 Defina que somente o grupo sysadmin pode realizar login;
11 Desabilita o login direto via usurio root;
11 Defina o servio SSH para ouvir somente no IP definido e no localhost;
11 Ative registro de eventos do SFTP.
5. Crie controles com FAIL2BAN contra ataques de Fora Bruta e Negao de Servio.
6. Avalie os controles do Fail2ban com o HYDRA.
7. Avalie os controles do Fail2ban com o MEDUSA.
8. Habilite autenticao exclusiva via chaves simtricas.
Guarde as informaes levantadas, pois no captulo 5 ser proposto Harderning do
Apache e, aps realizados os procedimentos, deveremos repetir esses exerccios
para comparar e avaliar as melhorias obtidas.
9. Realize uma avaliao de um servidor usando as ferramentas NMAP, AMAP, HTTPRINT,
HTTPSQUASH e NIKTO, no servidor Apache.
9.1.Leitura de banner:

# echo GET http 1.0 | nc <IP ALVO> 80

# nmap -sV -n -P0 -p 80,443 <IP ALVO>


9.3.Coleta de informaes via fingerprint no servio http:

# cd /pentest/enumeration/www/httprint/Linux/
# ./httprint -h <IP ALVO> -s signatures.txt

Captulo 4 - Roteiro de Atividades 4

9.2.Leitura de banner via nmap:

109

9.4.Coleta de informaes de servio http:

# cd /pentest/enumeration/complemento/httsquash
#./httsquash -r <IP ALVO>
9.5.Coleta de informaes via amap:

# amap -bq <IP ALVO>80


# amap -bq <IP ALVO>
9.6.Coletando informaes via fingerprint de servio com httpp:

# nmap --script http-enum <IP ALVO>


9.7.Coletando informaes com o nmap usando o script http-enum:

# nmap --script http-enum -p <IP ALVO>


9.8.Coletando informaes com o nmap usando o script http-headers:

# nmap - -script http-headers <IP ALVO>


9.9.Coletando informaes com o nmap usando o script http-methods:

# nmap --script http-methods <IP ALVO>


9.10.Coletando informaes com o nmap usando o script http-php-version:

# nmap --script http-php-version <IP ALVO>


9.11.Coletando informaes com o nmap usando todos os scripts:

# nmap --script http-enum,http-headers,http-methods,http-php-

Hardening em Linux

version <IP ALVO>

110

5
Aprender hardening em servidores Apache, PHP e servidores BIND; Fazer configurao do PS-WATCHER; Identificar servios de rede ativos; Reforar a segurana do
servio SSH; Implementar mecanismo contra ataque de Fora Bruta.

Hardening
Primeiro passo:

conceitos

Servio Web, baseado no Apache com PHP; Servio DNS, baseado no BIND.

11 Verificar se o servio est desatualizado.


22 Se estiver desatualizado: vai permitir que ataques de Negao de Servio (DOS) e/
ou de execuo remota de comandos possam estar presentes vinculados a potenciais vulnerabilidade publicadas.
Diante disso, recomenda-se verificar informaes de vulnerabilidade pontuais com o
comando debsecan:

debsecan

| grep apache

Caso exista, devemos aplicar a atualizao.


recomendvel rever as regras de diretrio, definida como ServerRoot. E recomendvel
identificar o diretrio padro das configuraes do servio do Apache, definido na diretriz
ServerRoot dentro do arquivo apache2.conf, pois os ajustes de configurao so feitos
nesses arquivos.
Uma maneira simples de identificar como esto distribudos os arquivos de configurao
de um determinado pacote: basta consultar informaes do pacote. Em distribuies like
Debian, para identificar a estrutura de arquivos de configurao e binrios, basta usar o
comando dpkg no pacote instalado da seguinte forma::

# dpkg -L apache2-common
Estrutura da organizao dos arquivos de configurao do pacote do Apache 2 na distribuio Ubuntu:

/etc/apache2: Diretrio principal de configurao do apache

Captulo 5 - Servios de Redes Parte 2

objetivos

Servios de Redes Parte 2

111

/etc/apache2/conf.d: Diretrio de arquivos de configuraes


adicionais
/etc/apache2/mods-available : configuraes de mdulos disponveis
/etc/apache2/ mods-enabled: configuraes de mdulos ativos
/etc/apache2/ sites-available : configuraes de sites disponveis
/etc/apache2/sites-enabled: configuraes de sites ativos
Normalmente, na maioria das distribuies Linux, as configuraes pr-definidas na criao
dos pacotes atendem bem. No entanto, segue uma exemplificao da configurao ideal,
onde o usurio root deve ser o dono dos arquivos e o permissionamento de grupo deve
estar vinculado ao grupo root.

cd /etc/apache 2
chown root.root /etc/apache2
chmod -R 750 /etc/apache2
Antes de qualquer modificao, em qualquer arquivo de configurao do Apache, recomendvel manter uma cpia do arquivo original, conforme o exemplo:

# cp apache2.conf apache2.conf_ORIGINAL
# grep -v ^# apache2.conf_ORIGINAL | grep . >

apache2.conf

recomendvel verificar se o usurio de sistema responsvel pelo deamon do Apache (http)


tem uma shell invlida. Adiante, necessrio identificar o usurio na distribuio em uso
vinculado ao Apache. No Ubuntu, o usurio www-data.
Para certificar o usurio utilizado pelo Apache, devemos identificar as definies para
opes User e Group no arquivo de configurao apache.conf.

# These need to be set in /etc/apache2/envvars


User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
Os valores das variveis so estabelecidos no arquivo /etc/apache2/envvars:export

APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
O servio do Apache deve ser iniciado pelo usurio root, ou seja, o processo principal. Mas
com a definio de User, ele muda para o usurio definido pela diretiva. Dessa forma, os
processos que atendem as conexes estaro vinculados a um usurio no privilegiado.

Hardening em Linux

Um vez identificado o usurio, devemos verificar qual shell est definida:

112

# grep ^www-data /etc/passwd


www-data:x:33:33:www-data:/var/www:/bin/sh
# grep www-data /etc/group
www-data:x:33:

Saiba mais
Em algumas distribuies, as configuraes
so concentradas em
poucos arquivos, mas
no Ubuntu a configurao dividida em
vrios arquivos. Dessa
forma, embora todas as
orientaes deste captulo sejam aplicveis ao
Apache verso, o administrador deve primeiro
entender como esto
organizadas as configuraes do Apache em
sua distribuio.

Caso seja necessrio alterar a shell para uma shell no vlida:

# ls -l /bin/false
-rwxr-xr-x 1 root root 22896 Apr

# dpkg -S

2012 /bin/false

/bin/false

coreutils: /bin/false

chsh -s /bin/false www-data

# grep www-data /etc/passwd


www-data:x:33:33:www-data:/var/www:/bin/false
Verificar se o servio est sendo inicializado por um usurio no privilegiado, pois como
j sugerido no processo de Hardening de outros servios, uma boa prtica em sistema
Like Unix executar um servio sempre que possvel com um usurio de sistema, ou seja,
colocar como meta no processo de Hardening Menor privilgio, Menor recurso em
qualquer deciso.
Nas distribuies Linux, o nome do usurio responsvel pelo deamon do Apache pode ser
diferente. Isso no um problema, desde que no seja um usurio no privilegiado, ou seja,
o importante no ser vinculado conta root.
A estrutura e Logs do Apache muito bem elabora, haja vista que base para processamento de avaliaes estatsticas de acesso ao sites. Ele gerida pelo prprio deamon.
No entanto, em algum caso, se for necessrio, podemos enviar tambm logs para o deamon
do syslog. Para isso, devemos inserir nas configuraes do Apache:

#ErrorLog file-path|syslog[:facility]
ErrorLog syslog:user
Ter uma viso das conexes vinculadas ao Apache e tambm os domnios virtuais que esto
sendo hospedados pelo servidor, auxiliar na avaliao de como se encontra o funciona-

Habilitao da publicao das informaes sobre processos


Para o funcionamento desse recurso, necessrio ter o mdulo status ativo, e a conexo
deve ser restrita aos IPs administrativos. Devemos tambm inserir a respectivas configuraes no apache.conf:<Location /server-status>

SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1

Captulo 5 - Servios de Redes Parte 2

mento do servidor, tendo informaes sobre o recurso utilizado:

113

Allow from 192.168.56.0/24


</Location>
Ativao do modulo status:# a2enmod status
Quando mod_status carregado para o servidor, a sua capacidade est disponvel em todos
os arquivos de configurao, incluindo por Diretrio arquivos (por exemplo, .htaccess).
O mdulo mod_status, configurado com acesso no restrito, pode fornecer a um potencial
invasor informaes que podem ser usadas para refinar um ataque ou mesmo elaborao
de exploit direcionados. Diante disso, a correta configurao da diretiva Allow from torna-se imprescindvel na configurao desse recurso.
Para habilitao da publicao das informaes gerais do funcionamento do Apache e
demais diretrizes de configurao, com o objetivo de ajudar a avaliar como o Apache est
funcionando, quais mdulos esto ativos, pois permitir ao sysadmin ter informaes suficientes para definir o que poder ser feito Hardening do apache, quais so as diretivas que
devero ser modificadas ou desabilitadas, quais mdulos devero ser habilitados e quais
devero ser desabilitados. Para o funcionamento desse recurso, necessrio ter o mdulo
info ativo e, da mesma forma que no recurso server-status, a conexo deve ser restrita
aos IPs administrativos. Assim, para configurao do recurso, necessrio inserir a respectivas configuraes no apache.conf:<Location /server-info>

SetHandler server-info
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.56.0/24
</Location>
Ativao do mdulo info:# a2enmod info
Aps inserir as configuraes, necessrio reinicializar o Apache e fazer um checklist para
verificar se o servio foi ativado:
Reinicializao do Apache:

# service apache2 restart


Verificao de informaes dos processos ativos na porta 80, que pode ser realizada com os
comandos: lsof, netstat e fuser. Veja os exemplos:

# fuser -v 80/tcp

Hardening em Linux

USER
80/tcp:

root

3921 F.... apache2

www-data

3924 F.... apache2

www-data

3931 F.... apache2

# lsof -n -i :80
COMMAND

114

PID ACCESS COMMAND

PID

USER

FD

TYPE DEVICE SIZE/OFF NODE NAME

apache2 3921

root

3u

IPv4

16609

0t0

TCP *:http (LISTEN)

apache2 3924 www-data

3u

IPv4

16609

0t0

TCP *:http (LISTEN)

apache2 3931 www-data

3u

IPv4

16609

0t0

TCP *:http (LISTEN)

# netstat -nltp | grep


tcp

A cada modificao
nos arquivos de configurao do apache2,
devemos reinicializar
o servio, e recomendvel realizar
o checklist com os
comandos lsof, netstat
e fuser, para validar
se est ativo. Em caso
tambm de existirem
sites publicados via
conexes HTTP3, o
checklist deve ser aplicado porta 443.

0 0.0.0.0:80

0.0.0.0:*

LISTEN

3921/apache2

Remoo de mdulos no utilizados


Considerando o conceito de Menor recurso, com as informaes disponibilizadas pelo
server-info, o administrador deve avaliar quais so os mdulos do Apache que devem
realmente estar ativos, para a proposta do servidor em questo. Assim, recomendvel
remover alguns mdulos, caso eles realmente no sejam necessrios para aquele contexto:

Mdulo de suporte a Webdav


Uma vez que tenhamos a certeza de que no se demanda o uso do recurso WebDAV, recomendamos desativar mdulos WebDAV. uma ao necessria para melhorar a segurana
do servidor web, reduzindo a quantidade de caminhos de cdigo potencialmente vulnerveis expostos

rede e diminuindo o potencial para acesso no autorizado a arquivos via


controles padro ou mesmo mal configurados de acesso WebDAV.
Para desabilitar:

# a2dismod dav dav_fs dav_lockMdulo autoindex


O mdulo autoindex gera automaticamente um index.html, que lista o contedo de pastas
no servidor quando no se tem uma pgina index publicada.
Considerando o conceito de segurana por obscuridade, onde se pensa em fornecer
sempre o mnimo de informao, e recomendado no ser habilitado o mdulo autoindex,
pois pode revelar informaes teis para um atacante, como convenes de nomenclatura e
caminhos de diretrios, ou mesmo arquivos que acidentalmente no deveriam estar publicados em uma respectiva pasta.

# a2dismod

autoindex

Mdulos de proxy
Em projetos de segurana para infraestrutura web, o uso de servidores proxy pode funcionar como um controle de segurana interessante. Todavia, quando devidamente configurado e com conceito de permetros de rede bem definidos. Mas se o servidor web em
questo no ser um proxy web para outro servidor, recomendvel identificar se existem
mdulos de proxy desativados.

# a2dismod

proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp

proxy_http proxy_scgi

Captulo 5 - Servios de Redes Parte 2

Saiba mais

:80

115

Mdulo Userdir
Em configuraes de servidor web onde no haver necessidade de publicao de home de
usurio, recomendvel desabilitar o mdulo Userdir.

# a2dismod userdir

Suporte a SSIs
um recurso antigo e na maioria das vezes desnecessrio. Dessa forma, caso no esteja
sendo utilizado por nenhuma aplicao, recomendvel desabilit-lo. Recursos que no so
utilizados oficialmente e esto ativos podem ser uma oportunidade para que ataques os
usem de forma maliciosa, consumindo recursos do servidor:

vi /etc/apache2/mods-enabled/mime.conf
#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml

Configurao do mdulo Expires


Essa configurao trata mais da questo de performance, pois possibilita definir um tempo
de vida para objetos estticos dos sites publicados via Apache. Habilitar esse mdulo ajuda
a melhorar qualidade de acesso dos clientes.<IfModule mod_expires.c>

ExpiresActive On
ExpiresDefault access plus 1 years
ExpiresByType image/gif access plus 1 years
ExpiresByType image/jpeg access plus 1 years
ExpiresByType image/png access plus 1 years
ExpiresByType image/ico access plus 1 years
ExpiresByType text/css access plus 1 years
ExpiresByType text/txt access plus 1 years
ExpiresByType text/javascript access plus 1 years
ExpiresByType application/x-unknown-content-type access plus 1 years
ExpiresByType application/x-javascript access plus 1 years
</IfModule>

Hardening em Linux

Ocultando a verso do servidor


Por padro, o servidor retorna resposta HTTP contendo muitas informaes, como a
verso do Apache, php e, dependendo da configurao, em alguns casos at mesmo a
verso do Sistema Operacional. Isso ruim, pois no desejamos ter um servio que fornea
informaes detalhadas para um atacante: quanto menos informaes sobre a implementao do servio fornecido, melhor. Diante disso, outra ao baseada no conceito de segurana por obscuridade configurar o Apache para ocultar informaes sobre o sistema.
Essas informaes surgem quando uma tela de erro ocorre. Para ocultar as informaes
116

do sistema, necessrio editar o arquivo /etc/apache2/conf.d/security e modificar a diretriz


ServeR Tokens para Prod:
Os seguintes valores so possveis ServerTokens:
11 ServerTokens Prod: informa somente que o servidor Apache. Exemplo: Server: Apache;
11 ServerTokens Major: informa que o servidor Apache e a verso. Exemplo: Server: Apache/2;
11 ServerTokens Minor: informa que o servidor Apache e a verso completa. Exemplo:
Server: Apache/2.2;
11 ServerTokens Min displays: informa que o servidor Apache, alm da verso completa
e o release. Exemplo: Server: Apache/2.2.17;
11 ServerTokens OS displays: informa que o servidor Apache, a verso completa, release
e Sistema Operacional. Exemplo: Server: Apache/2.2.17 (Ubuntu);
11 ServerTokens Full displays: informa que o servidor Apache, a verso completa e
o release, verso do PHP e informaes adicionais do Sistema Operacional. Exemplo:
Server: Apache/2.2.17 (Ubuntu PHP/5.3.5 (If you dont specify any ServerTokens value,
this is the default).

Module Security (Modsecurity)


O mdulo de segurana, o mod_security, um mdulo do Apache que ser instalado para
bloquear o monitoramento de requisies e respostas HTTP tanto quanto a negao de
pacotes suspeitos.
Instalao do Modsecurity:

# apt-get install -y modsecurity-crs libapache2-modsecurity


Definindo as configuraes bsicas:# cd /etc/modsecurity
# grep -v ^# modsecurity.conf-recommended |grep . > modsecurity.conf
Ativao do Modsecurity:

# a2enmod mod-security
# service restart apache2
Acompanha informaes do registro de eventos do Modsecurity em:

tail -f

/var/log/apache2/modsec_audit.log

Apache-Error: [file core.c] [line 3558] [level 3] Invalid URI in


request GET /help/../../../../../../../../../../../../../../../../etc/shadow
HTTP/1.1
Stopwatch: 1362354524153078 676 (- - -)
Stopwatch2: 1362354524153078 676; combined=39, p1=0, p2=0, p3=7,
p4=6, p5=20, sr=0, sw=6, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.6.3 (http://www.modsecurity.org/).

Captulo 5 - Servios de Redes Parte 2

--f1a41278-H--

117

Server: ApacheControle sobre arquivos htaccess


Devemos verificar se est ativo o controle, impossibilitando acesso .htaccess:

AccessFileName .htaccess
<Files ~ ^\.ht>
Order allow,deny
Deny from all
Satisfy all
</Files>

Desabilitar pgina de error


A disponibilizao de informaes sobre o servidor em pginas de erro habilitada por
padro. recomendvel remover informaes do servidor de pginas de erro. Para isso,
basta alterar o arquivo /etc/apache2/conf.d/security modificando o valor da diretriz ServerSignature para Off:

vi

/etc/apache2/conf.d/security

ServerSignature Off

Incluir restries para acesso a .old .swp e .bak


possvel indicar cpias de scripts feitas por administradores com nomes de cgis + .swp,
.bak e .old, tendo acesso ao cdigo dos scripts.
Remover todos os arquivos do tipo .old, .swp e .bak que possam ser lidos por clientes web e
tambm incluir restries, como:

<Files ~ \.(bak|old|$ >


Order allow,deny
Deny from all
</Files>

<Location /server-status>
SetHandler server-status

Hardening em Linux

AuthType Basic
AuthName Server Status
AuthUserFile /etc/apache2/htpasswd
Require valid-user
Order deny,allow
Deny from all
118

Allow from 127.0.0.1


Allow from 192.168.56.0/24
</Location>

<Location /server-info>
SetHandler server-info
AuthType Basic
AuthName Server Status
AuthUserFile /etc/apache2/htpasswd
Require valid-user
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.56.0/24
</Location>
O Hardening da linguagem PHP apresentado neste captulo tem como foco um modelo
web. Dessa forma consiste, em muitos momentos, em desabilitar recursos poderosos da
linguagem PHP que, para um contexto web, no so necessrios. Todavia, no incomum
programadores que no levam isso em considerao. Nesse contexto, devemos solicitar que
o cdigo seja revisto, pois no se deve aprovar um cdigo que no tenha boas prticas de
programao segura ou mesmo use recursos que no so ideais para uma publicao web.
Em suma, todas a sugestes deste captulo devem ser aplicadas sempre que possvel,
mas no devemos deixar de aplicar uma configurao em detrimento da segurana,
para que uma determinada aplicao que foi mal elaborada seja colocada em produo.
preciso que os programadores busquem informaes sobre desenvolvimento usando
boas prticas de segurana e customizaes de segurana do seu ambiente PHP.
Recomendamos que sejam ativadas na sua rea de hospedagem diretivas de PHP inerente
aplicao PHP, pois algumas diretrizes tornam restritivas a ao de algumas funes, o que
pode ter como consequncia a falha em sua aplicao web, tornando-o parcialmente ou
mesmo totalmente inoperante, o que motivar reviso e at mesmo modificao no seu
cdigo. Diante disso, devemos avaliar cada mudana que for feita e identificar o impacto em
nossa aplicao. Lembramos que no damos suporte aplicao do cliente.
Seguem algumas recomendaes para o php-cgi.ini que se encontra na sua rea de hospedagem, que s devem se aplicadas pelo programador do site aps homologao da aplicao:

# ativar o modo de segurana


safe_mode = on

Captulo 5 - Servios de Redes Parte 2

segurana, lembrando que esta poder afetar diretamente o funcionamento da sua

119

A linguagem PHP pode tambm ser utilizada para aplicaes em ambiente shell, embora no
seja a melhor linguagem para esse propsito. Algumas funes so muito poderosas, mas
para um contexto web no so recomendadas. Diante disso, recomendvel desativ-las
usando a opo disable_functions para este propsito, conforme o exemplo:

#desabilitar funcoes
disable_functions = php_uname, getmyuid, getmypid, passthru, leak,
listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_
exec, dl, set_time_limit, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd,
posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,
posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,
posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam,
posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_
isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid,
posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_
times, posix_ttyname, posix_uname, proc_open, proc_close, proc_
get_status, proc_nice, proc_terminate, phpinfo
#desabilitar mensagens gerais debug opcional
display_errors = Off
register_globals = Off

# desabilitar funcoes de incluso de arquivos


allow_url_fopen = off
allow_url_include = off

# desabilitar funcoes de upload de arquivos


file_uploads = Off

# ativar modo de segurana sql


sql.safe_mode = Off
Outras recomendaes importantes, tambm inerentes segurana de sua rea
de hospedagem:
11 Revise todo o cdigo de sua aplicao web e faa um novo upload, com o mximo de

Hardening em Linux

brevidade, pois uma vez que um invasor teve acesso sua rea de hospedagem, ele pode

120

ter inserido trechos de cdigos em seus arquivos com o objetivo de permitir acesso arbitrrio, caso o meio pelo qual ele explorou a vulnerabilidade seja corrigido. Esse tipo de
artimanha facilmente implementado usando funes com passthru;

11 Atualize seu antivrus e demais programas que possam identificar Malware, pois est
cada vez mais comum a proliferao de Malwares desenhados para interceptar senhas
ou mesmo contaminar os programas comumente usados para a publicao de sites.
Uma vez interceptada a senha, o Malware passa automaticamente a realizar o download
de pginas, inserir modificaes e fazer um novo upload;
11 Caso utilize SSH, recomendamos que passe a realizar as conexes utilizando chaves, pois
mesmo que um Malware consiga interceptar sua senha e envi-la para um invasor, sem a
chave ele no conseguir efetuar login em sua rea de hospedagem;
11 Dispomos de mdulos para segurana especficos para o Apache (servidor web), tais como
suhosin e mod_security e estes podem ser configurados em sua rea de hospedagem.
Diante do que foi relatado, recomendvel que todo o cdigo seja revisto com o mximo
de urgncia, pois no temos como garantir problemas de segurana vinculados programao da aplicao do cliente. Podemos, sim, ser reativos e ajudar no momento em que
o incidente identificado, como foi o caso aqui. E esse site se encontra com problemas
srios e vulnervel no que tange sua programao e na maneira em que as variveis
tratam os dados que so passados. E tenha em mente tambm que muitas invases
podem motivar problemas maiores, pois uma vez tendo acesso sua rea, o invasor pode
us-la para outros propsitos.
fato que para eliminar todos os problemas, validando-os de forma a ter certeza que cada
vulnerabilidade foi corrigida, recomendvel que o programador durante a fase de testes
faa todas as simulaes. Por esse motivo, buscamos destacar as linhas de logs mais relevantes do incidente. Dessa forma, o programador da aplicao pode analisar como foi explorado e, se quiser, pode criar um ambiente de simulao para tentar reproduzir o incidente
como prova de conceito de que os problemas foram identificados e resolvidos.
Destacamos alguns links relevantes do site do projeto Open Web Application Security Project
(OWASP), que rene informaes muito importantes para desenvolvimento de aplicaes web.
OWASP Ataques de PHP Injection:
11 http://www.owasp.org/index.php/Path_Traversal
11 http://www.owasp.org/index.php/Code_Injection
11 http://www.owasp.org/index.php/Top_10_2007-Injection_Flaws
11 http://www.owasp.org/index.php/Comment_Injection_Attack
11 http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
11 http://www.owasp.org/index.php/Testing_for_IMAP/SMTP_Injection_(OWASP-DV-011)

OWASP Ataques de SQL Injection:


11 http://www.owasp.org/index.php/SQL_Injection
11 http://www.owasp.org/index.php/Testing_for_SQL_Injection_(OWASP-DV-005)

Hardening do servio DNS/BIND


Um servidor de DNS baseado no BIND normalmente exerce uma das quatro funes em
uma rede:
11 DNS Autoritativo: sendo o servidor principal de um ou mais domnios;

Captulo 5 - Servios de Redes Parte 2

11 http://www.owasp.org/index.php/Parameter_Delimiter

11 DNS Secundrio: responsvel pela rplica de domnios;


121

11 DNS Cache: atuar somente como servidor de consulta;


11 DNS Forwarder: encaminha consultas para outros servidores.
O ideal para implementao de servidores DNS e ter um servidor dedicado para cada
funo separadamente de outros servios; dessa forma, a instalao de um Sistema Operacional em um servidor que vai suportar um servio DNS deve ser a mais enxuta possvel,
devidamente direcionada para seu propsito.
Alm das boas prticas de implementao, devemos configurar o BIND com ajuste finos que
ajudem e reforcem a segurana de um servidor DNS.

Configuraes recomendadas
A seguir, sero elencadas algumas configuraes recomendadas na configurao do BIND:
11 Executar o BIND como usurio;
11 Evitar as tcnicas de enumerao de vero;
11 Limitar consultas recursivas;
11 Limitas consultas sempre que possvel;
11 Limitar consulta ao cache do servidor sempre que possvel;
11 Uso de listas negras para evitar ataques de origem conhecida;
11 Configurao de registros de eventos (logs).

Configurar da diretriz version


Verifique se os processos do servidor BIND que atendero as consultas esto sendo executados por um usurio de sistema destinado para o fim, que no tenha home definido e nem
shell vlida, ou seja, o BIND no deve ser executado pelo usurio com ID 0 (usurio roto).
A configurao da diretriz option recomendvel, pois por padro um servidor BIND
fornece informao da verso utilizada, assim o administrador pode impossibilitar a
enumerao. Para a diretriz version ter efeito sobre todo o servidor, ela deve ser inserida
no arquivo named.conf, dentro da sesso options, ou em arquivo que esteja diretamente
vinculado via diretriz include.

options {
version None;
};

Limita consulta recursivas


Explicitar que o recurso de consultas recursivas estar limitados a IP pr-definidos.

Hardening em Linux

acl localhost {

122

127.0.0.1;

};

acl clients_corp

192.168.0.0/24;

192.168.1.0/24;
`92.168.2.0.0/24;
};
allow-recursion {

localhost;

clients_corp;
};
Onde clients_corp uma ACL pr-definida na qual estaro relacionados os IP e Redes que
podero realizar uma pesquisa recursiva. Para a diretriz allow-recursion ter efeito sobre
todo o servidor, ela deve ser inserida no arquivo named.conf dentro da sesso options ou
em arquivo que esteja diretamente vinculado via diretriz include.

Limitao de consultas ao cache do servidor DNS


allow-query

localhost;
clients_corp;

};

A diretriz allow-query limita as consultas ao servidor de Cache. Essa diretriz restringe


somente a lista de servidores informada o direito a consultas. Para que a diretriz allow-query
tenha efeito sobre todo o servidor, ela deve ser inserida no arquivo named.conf dentro da
sesso options ou em arquivo que esteja diretamente vinculado via diretriz include.
Tratando-se de um servidor DNS Cache, pode ser interessante ativar a diretriz allow-query-cache
na sesso options da mesma forma. Exemplo:

allow-query-cache {
localhost;
clients_corp;
};

Restrio de transferncia de zona


Para isso, devemos utilizar a diretriz allow-transfer.

allow-transfer {
localhost;
clients_corp;
};
recomendvel centralizar o uso da diretriz allow-transfer na sesso zone, ou seja, onde
so definidas as configuraes das zonas primrias.

Captulo 5 - Servios de Redes Parte 2

recomendvel para qualquer tipo de servidor DNS a limitao de transferncia de zona.

123

Lista negra
O conceito de lista negra no mnimo deve ser utilizado para eliminar a possibilidade de
perda de tempo com consultas forjadas com IP origem invlido (no roteveis segundo a RFC
1918). No entanto, tambm pode ser til para o sysadmin restringir uma determinada range
de IPs a realizar consultas a um servidor DNS especfico.

acl privados {

10/8;

192.168/16;

172.16/12;

};

blackhole {

privados;


};

Configurao de registros de eventos (logs)


O uso da diretriz logging recomendvel tanto pelo fato de que o registro de evento uma
necessidade para conformidade com qualquer norma ou boas prticas de segurana, quanto
pelo fato de possibilitar ao administrador avaliar de forma palpvel o funcionamento do
servio, diagnosticar problemas e tambm identificar possveis abusos e ataques maliciosos.
A configurao dividida em duas partes. A primeira parte, que definida pela diretriz
channel, consiste em definir o nvel do log, como ele ser rotacionado e em que arquivo ser
armazenado. Importante lembrar que a diretriz channel deve estar inserida na sesso loggin.

logging {

channel audtiria_log {
file /var/run/named/auditoria.log versions 10 size
20m;
severity debug;
print-time yes;
};

Hardening em Linux

Quando se usa a diretriz severity, possvel ter oito nveis de logs:

124

11 critical: logs de nvel de criatividade mais alto;


11 error: informaes de erro;
11 warning: notificaes de problemas;
11 notice: log de informaes bsicas;
11 info: logs de informaes gerais do funcionamento do servidor;

Existe outra forma de


definir essa questo
de nveis: usar diretiva
syslog, que vai
parametrizar o Bind
para organizar os nveis
usando a mesma forma
de organizao dos logs
no protocolo syslog.

11 debug [ level ]: logs de erros muito detalhados para auxiliar a depurao de um problema;
11 none: nenhum nvel de severidade
Uma vez definido o channel, cria-se a regra de log, relacionada com a categoria que se
deseja. A seguir, alguns exemplos.
Log de informaes sobre o processamento dos arquivos de configurao do Bind:

category config {
audtiria_log;
};
Log de informaes de DNSSEC, caso esteja habilitado no servidor:

category dnssec {
audtiria_log;
};
Informaes gerais de comunicao de rede:

category network {
audtiria_log;
};
Concentra informaes gerais de consultas que foram requisitadas ao servidor Bind:

category security {
audtiria_log;
};
Informaes sobre atualizaes de zonas:

category update {
audtiria_log;
};
Parametrizao para logs de transferncias de zonas recebidas:

category xfer-in {
audtiria_log;
};
Parametrizao de logs de transferncia de zona enviadas:

category xfer-out {
audtiria_log;
};
A seguir, outro exemplo definindo o channel para logs para debug, mas habilitando apenas
as categorias de logs padres (default) e logs gerais (general):

Captulo 5 - Servios de Redes Parte 2

Saiba mais

125

// Optional debug log file, may be enabled dynamically.


channel debug_log {
file /var/run/named/debug.log;
severity dynamic;
print-time yes;
};
category default {
debug_log;
};
category general {
debug_log;
};
};
Considerando os exemplos apresentados de configurao logs, no final, utilizando todos,
teramos:

logging {
channel audtiria_log {
file /var/run/named/auditoria.log versions 10 size
20m;
severity debug;
print-time yes;

category config {
audtiria_log;
};
category dnssec {
audtiria_log;

Hardening em Linux

};

126

category network {
audtiria_log;
};
category security {

audtiria_log;
};
category update {
audtiria_log;
};
category xfer-in {
audtiria_log;
};
category xfer-out {
audtiria_log;
};
channel debug_log {
file /var/run/named/debug.log;
severity dynamic;
print-time yes;
};

category default {
debug_log;
};
category general {
debug_log;
};
};

};

PS-Watcher: Monitorao de servios ativos


Monitora os servios, com o objetivo de mant-los ativos.
11 Ao muito importante.
11 Deve ser uma ao em um processo de Hardening de servio de redes, pois a disponibilidade tambm um pilar de segurana.
Criar controle que possa aumentar a garantia de que os servios estejam disponveis
um valor agregador no processo de Hardening.

Captulo 5 - Servios de Redes Parte 2

127

possvel monitorar computadores e servios de rede com uma ampla variedade de solues diferentes. Entre elas existem boas solues FOSS de monitoramento, como o Nagios,
Zabbix ou OpenNMS, mas ainda assim, requer um planejamento e ajustes. Todavia, quando
precisa resolver problemas menores ou pontuais, com dados de processo em um sistema,
o processo de monitoramento pode ser realizado pela ferramenta ps-watcher.
O ps-watcher um dos bons exemplos de ferramenta do mundo Unix que faz uma coisa
e faz bem. Ele permite que sejam acessadas todas as informaes do processo em um
sistema e que seja possvel tomar alguma ao com base nessas informaes. O ps-watcher
fornece uma interface consistente (com algumas ressalvas) para as informaes do processo
variadas, disponvel em diferentes mquinas Unix e Linux, j tendo pacotes prontos para
algumas das distribuies Linux, entre elas Ubuntu e Debian.
Depois de ter ps-watcher instalado, o prximo passo criar um arquivo de configurao que
contm as regras que desejamos usar para monitorar ou agir sobre o que o comando ps
fornece de informao. Junto com o arquivo de configurao fornecido, podemos usar a linha
de comando opes para ajustar o comportamento de ps-watcher e ajudar na depurao.
Periodicamente extrada uma lista de processos obtidos via ps, onde cada item da lista
contm o nome do processo (apenas o que esta listado na cmd campo, no o comando
completo e argumentos) e seu ID de processo (PID).
Em um arquivo de configurao, especificada uma lista de expresses regulares para extrair
informaes dos processos para posterior anlise. Para cada conjunto de informaes extradas do processo, realizada uma avaliao. Cada conjunto de informaes avaliada pode
se referir a variaveis que so estabelecidas pelo PS e dizem respeito ao processo combinado
avaliado, como, por exemplo, a quantidade de memoria consumida pelo processo, ou o tempo
total em que este est em execuo. Algumas outras variaveis podem ser definidas, tal como
o numero de vezes em que o processo foi executado. Durante a anlise, se identificada uma

Hardening em Linux

instabilidade, o processo pode ser morto e reinicializado novamente.

128

Roteiro de Atividades 5
Atividade 5.1 Sistemas de deteco de intruses (IDS) em redes WLAN
Na prtica, sero testadas as configuraes refinadas para melhorar a segurana de servios
clssicos, como HTTP e o suporte a PHP e BIND.
1. Aplique todas as configuraes recomendadas neste captulo no servidor WEB.
2. Realize todos os testes propostos no captulo 4 e avalie o que as configuraes de Hardening proporcionaram de melhorias.
3. Realize o Hardening no BIND, aplicando todas as configuraes propostas.
4. Configure o PS-WATCHER para controlar SSH, HTTP, BIND e FAIL2BAN, e realize testes

Captulo 5 - Roteiro de Atividades 5

para avaliar o seu funcionamento.

129

130

Hardening em Linux

6
Aprender conceitos de servidor Proxy Web; Instalar o SQUID; Entender os conceitos
de ACL; Conhecer ACL de Autenticao; Gerar relatrio.

de Logs; Contabilizao de Processos; Deteco de alterao no sistema HIDS.

conceitos

Servidor de Proxy Web; Instalao do SQUID Proxy Web; Configurao de um servidor

Introduo
Neste captulo, sero apresentados conceitos de Proxy Web e tambm como executar a
implementao de um servidor com a finalidade de Proxy Web baseado na ferramenta FOSS
Squid. Vrios aspectos da configurao, controle de contedo e autenticao tambm sero
mostrados neste captulo.

Exerccio de nivelamento 1 e
Proxy web
Como voc avalia o uso indiscriminado da web em uma corporao?

Existe controle de acesso ao contedo em sua empresa?

Avalie a possibilidade de gerao de relatrios informando o contedo dos usurios de uma


empresa como ferramenta de apoio gesto do uso da web em ambiente corporativo.

Captulo 6 - Hardening em sistema Linux Proxy Web

objetivos

Hardening em sistema Linux


Proxy Web

131

Proxy:

11 Serve como ponto intermedirio entre um cliente e um servidor.


Podemos criar proxy para vrios tipos de protocolo:
11 stmp, pop3, http etc.
Servidor proxy Squid:
11 Tem funo de proxy web.
22 Mantm um cache de contedo acessado de todos os clientes web de uma rede.
A funo bsica de um proxy na rede servir como um ponto intermedirio, um procurador entre a conexo de um cliente e um servidor. Normalmente, entre uma rede local e
um servio de rede na internet, existe a possibilidade de criao de proxy para vrios tipos
de protocolo, como smtp, pop3, http, entre outros. O servidor proxy Squid tem a funo de
proxy web, ou seja, mantm um cache de contedo web acessado de todos os clientes web
de uma determinada rede.
O Squid uma soluo de software livre para proxy cache para a Web com suporte a protocolos HTTP, HTTPS e FTP, entre os principais. A implementao desse servidor em uma rede
possibilita reduzir a largura de banda e melhora os tempos de resposta fazendo cache e
reutilizao de pginas da web frequentemente acessadas. Permite tambm a definio de
controles de acesso amplos e pode ser um acelerador web. Existem verses para diversos
Sistemas Operacionais, incluindo Windows, e est licenciado sob a GNU GPL.
Embora sua principal caracterstica seja o proxy-caching sob os protocolos HTTP e FTP, o
Squid suporta tambm:
11 Proxying de conexes SSL;
11 Hierarquia de cache;
11 Acelerao HTTP;
11 Caching de pesquisas DNS;
11 SNMP.
O squid, como servidor proxy cache, funciona de forma objetiva, onde quando uma solicitao de uma estao na rede solicitar um mesmo contedo web esttico, ele ser fornecido
via estrutura de cache. Para que isso funcione adequadamente, recomendvel definir
regras de Firewall no permetro da rede que redirecione conexes web para a porta do
servidor proxy squid utilizada, que normalmente a porta padro 3128. O uso de servidor
proxy web soma valor segurana da rede, alm de possibilitar o melhor uso do link sso,
pois a nica mquina que far conexo web diretamente para a internet o servidor proxy,
e os clientes da rede se comunicam diretamente com ele.
Porm, se o contedo no tiver sido acessado antes e por consequncia no estiver
presente no cache, ento o servidor vai baixar esse contedo para o seu cache. Dessa

Hardening em Linux

forma, para que l exista uma cpia para uma consulta futura proveniente dos clientes,

132

reduzindo assim o tempo de acesso e o consumo de banda para uso de internet.

Controle de contedo acessado na web

Rede Interna
10.0.0.0/24

Squid
Internet

Rede Interna
10.1.0.0/24

Figura 6.1
Como
controlado o
contedo acessado
na internet.

Cache web

Implementao de um Proxy Web com Squid


Instalao e Configurao do Proxy Cache
Squid:

11 Ferramenta open source para configurao de um proxy cache.


22 Suporta dados de protocolos como FTP, Gopher e HTTP.
22 Tem suporte a SSL, mtodos de autenticao e polticas de controle de conexo
baseadas em ACL (Access Control List Lista de Controle de Acesso).
Para realizar a configurao de um proxy cache, ser apresentada uma ferramenta open
programas para a realizao de proxy cache para clientes web. Suporta dados de protocolos
como FTP, Gopher e HTTP. Tambm traz suporte a SSL, mtodos de autenticao e polticas de
controle de conexo baseadas em ACL (Access Control List Lista de Controle de Acesso).
A prxima etapa a ser realizada a instalao dos pacotes usados para a configurao do
Squid, que ser baseada em Debian GNU/Linux (embora o Squid possa ser encontrado em
formato para compilao ou em outras distribuies que fazem uso de kernel Linux). Portanto, aconselhamos que o conhecimento dos mtodos de gerenciamento de pacotes seja
um pr-requisito para a configurao na distribuio que mais agrada ao usurio.
Na instalao dos pacotes, o gerenciamento ser feito via APT. Poder ser usado qualquer
mirror FTP ou HTTP de rvore stable do Debian GNU/Linux que contenha o pacote do
servidor Squid abordado nessa configurao. Aps a realizao de todo esse procedimento
realizado, ser instalado o pacote do Squid:.

# apt-get install y squid

Captulo 6 - Hardening em sistema Linux Proxy Web

source de grande utilizao para esse tipo de procedimento, que o Squid, um dos melhores

133

Um procedimento normal de verificao em um sistema Ubuntu Linux, para saber se o


pacote foi instalado ou no, pode ser realizado atravs do comando dpkg:

# dpkg -l | grep squid

Configuraes bsicas como Proxy Cache


Antes de serem iniciadas as configuraes, um procedimento importante a ser executado
o backup dos arquivos de configuraes originais, para manter uma cpia de segurana,
caso ocorra algum imprevisto durante o procedimento de configurao do servidor. Por isso,
devemos manter uma cpia do arquivo original do servidor Squid, que o squid.conf.
Geralmente, em um servidor com Debian GNU/Linux, o arquivo de configurao do servidor
squid, o squid.conf, est localizado em /etc/squid. Geralmente, essa a localizao padro,
mas tambm podemos encontrar no diretrio /etc. Tudo vai depender de como o pacote da
distribuio utilizada foi criado:
Cpia de segurana do arquivo de configurao original e criao de um arquivo sem
os comentrios.

# cd /etc/squid
# cp squid.conf squid.conf.original
# cat squid.conf.original | grep -v ^# | grep . > squid.conf
Dentro do arquivo de configurao do squid, em /etc/squid/squid.conf, o primeiro parmetro
a ser gerenciado ou criado ser aquele que indica o Squid para trabalhar como servidor de
cache web apenas para conexes a partir da interface voltada para a sada da rede local.
Isso porque, uma vez definida a poltica de acesso excepcionalmente para a rede local,
recomendvel que o Squid deve ser habilitado exclusivamente para rede local, ou seja, o
socket de conexo (porta) no ser publicado via interface externa (internet).
A finalidade ter uma proteo maior contra a possibilidade de o servidor ser atribudo com
a funo de proxy annimo e fazer parte de listas de proxy annimos publicadas na internet.
Outro motivador que no cenrio de proxy para rede LAN no necessria a publicao
para interface externa, colocando mais uma vez em prtica o conceito de menor privilgio e
menor recurso.
Essa caracterstica utilizada muitas vezes por invasores para mascarar os IPs de
origem da invaso ou por usurios mal-intencionados que desejam burlar polticas
de controle de acesso pr-estabelecidas.
Para isso, basta habilitar a porta para acesso ao proxy, que por padro listada na porta
3128 (supondo que a interface do proxy voltada para a rede esteja com o IP 10.0.0.1). Alm
disso, recomendvel tambm ativar o squid na interface loopback:

Hardening em Linux

http_port 127.0.0.1:3128
http_port 10.0.0.1:3128
Tambm interessante a configurao do nome de exibio do servidor, pois quando o
Squid retornar algum erro durante o acesso, o nome do servidor estar presente no rodap
dessas pginas de erro:

visible_hostname servidor.empresa.com.br
134

Caso o nome completo do servidor seja identificado na configurao, esse nome dever
estar presente no arquivo de resoluo local do servidor, o /etc/hosts relacionado com o IP
do servidor ao qual est associado esse nome.
Somente essas alteraes so necessrias para a simples ativao do Squid como um proxy
cache bsico. Agora o servio do Squid pode ser iniciado atravs do script de inicializao
dentro do diretrio /etc/init.d:

# /etc/init.d/squid stop
# /etc/init.d/squid start
Outra forma de iniciar o squid via o comando service:

# service squid stop


# service squid start
Aps a inicializao do servio, devemos verificar as portas ativas na pilha de rede do servidor.:

# netstat -nltp | more


# netstat -nlup | more
Tambm importante a verificao dos processos ativos nas respectivas portas alocadas
pelo Squid, usando o fuser:

# fuser -v 3128/tcp
# fuser -v 3130/udp
# fuser -v 32768/udp
Uma terceira forma de consultar processos vinculados porta com o comando lsof:

# lsof n i :3128
# lsof n i :3130
# lsof n i :32768
Demanda-se tambm utilizar o comando Nmap para consultar se as portas esto ativas para

# nmap sT -sU -n -P0 p 3128,3130,33768 10.0.0.1


# nmap sT -sU -n -P0 p 3128,3130,33768 127.0.0.1
Aps isso, os clientes de acesso web, como os browsers das mquinas da rede, j podem ser
configurados para acessarem a internet atravs do proxy. Os acessos dos clientes podem ser
monitorados atravs dos logs relacionados ao Squid, que se localizam em /var/log/squid, utilizando por meio dos terminais inativos tty10, tty11 e tty12 para visualizao da sada do log.:

# tail -f /var/log/squid/cache.log >> /dev/tty10 &


# tail -f /var/log/squid/store.log >> /dev/tty11 &
# tail -f /var/log/squid/access.log >> /dev/tty12 &

Captulo 6 - Hardening em sistema Linux Proxy Web

conexes externas e tambm ativas na interface Loopback:

135

Uso de ACLs no Squid


Um dos principais conceitos presentes na configurao do Squid o uso de Listas de
Controle de Acesso (ACLs), para determinar diferentes regras de acesso atravs de vrios
mtodos. Elas podem estabelecer nveis de controle de acesso aos determinados contedos
requisitados pelos clientes.
As ACLs sempre possuiro um formato especfico dentro do arquivo de configurao do proxy.:

acl

nome

tipo

[arquivo | string]

Onde:
11 acl: declara que ser uma lista de controle de acesso;
11 nome: a identificao da ACL, o nome relativo que referencia essa regra;
11 Tipo: dado o formato de ACL a ser analisado, onde entre esses tipos os quais podemos
ter, por exemplo, controle por IP de origem, por destino, por data ou hora, por palavra,
por protocolo etc.;
11 String ou arquivo: definimos qual a palavra-chave, o domnio, o IP ou a outra forma de
controle (atravs do tipo de ACL) ou define-se um conjunto deles dentro de um arquivo
no sistema.
Agora, dentro do arquivo de configurao (/etc/squid/squid.conf ), poderia ser alocada uma
linha com uma nova ACL, que, por exemplo, controla tudo o que se origina da rede local:

acl minharede src 192.168.0.0/255.255.255.0


Nessa linha, foi criada a ACL chamada minharede, que controla todas as requisies que possuem um determinado IP de origem (src); no caso, todo o range da rede
192.168.0.0/255.255.255.0.
Com essa ACL, define-se esse tipo de controle para a rede. Mas como o Squid vai trabalhar esse controle em especfico? Ele sabe que deve analisar tudo que se origina na rede
192.168.0.0, mas o que fazer com essas requisies?
Para isso que existem os controles dentro do arquivo do Squid chamados http_access,
que determinam como essas requisies sero tratadas (permitidas ou no) em relao ao
acesso ao documento requisitado.
O formato do parmetro http_access :

http_access

[deny|allow]

acl

Dentro do arquivo de configurao do Squid, ser includa uma nova linha que identifica o
controle presente na ACL chamada minharede, para que seja permitido o seu acesso:.

http_access allow minharede

Hardening em Linux

Estrutura de CACHE do Squid


No Squid, podemos definir diversos parmetros para o armazenamento de cache de
pginas, onde podero ser definidos os vrios nveis de diretrios ou parties diferentes
existentes para controlar o acesso s informaes em cache.
O diretrio de cache seria o pai dos nveis de diretrios de swap do proxy. Pode ser usada
tambm uma partio, mas o Squid no criar esse diretrio e nem montar a partio:
ambos devem estar disponveis previamente.
136

11 # Mbytes: espao em disco (MB) para esse diretrio (padro 100MB);


11 # Nvel-1: o nmero do primeiro nvel de diretrios criado aps o diretrio pai;
11 # Nvel-2: o nmero do segundo nvel de diretrios criado aps o nvel-1.

# cache_dir Diretrio Mbytes Nivel-1 Nivel-2


Onde:
11 Mbytes: o espao em disco (MB) para esse diretrio (o padro 100 MB);
11 Nivel-1: o nmero do primeiro nvel de diretrios criado aps o diretrio pai;
11 Nivel-2: o nmero do segundo nvel de diretrios criado aps o nvel-1.
Pode-se identificar uma estrutura de cache especfica para o proxy, na linha seguinte, por
esse exemplo, com 512 MB, 128 diretrios e 256 subdiretrios.:

cache_dir /var/spool/squid 512 128 256


Depois de editados os parmetros correspondentes, o arquivo de configurao final dever
ter um aspecto similar ao da pgina seguinte:

http_port 10.0.0.1:3128
icp_port 0
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_dir ufs /var/spool/squid 500 32 256
refresh_pattern ^ftp:

1440

20%

refresh_pattern ^gopher: 1440

0%

1440

refresh_pattern .

20%

4320

10080

acl all src 0.0.0.0/0.0.0.0

acl localhost src 127.0.0.1/255.255.255.255


acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563

# https, snews

acl SSL_ports port 873

# rsync

acl Safe_ports port 80

# http

acl Safe_ports port 21

# ftp

acl Safe_ports port 443 563

# https, snews

acl Safe_ports port 70

# gopher

acl Safe_ports port 210

# wais

Captulo 6 - Hardening em sistema Linux Proxy Web

acl manager proto cache_object

137

acl Safe_ports port 1025-65535 # unregistered ports


acl Safe_ports port 280

# http-mgmt

acl Safe_ports port 488

# gss-http

acl Safe_ports port 591

# filemaker

acl Safe_ports port 777

# multiling http

acl Safe_ports port 631

# cups

acl Safe_ports port 873

# rsync

acl Safe_ports port 901

# SWAT

acl purge method PURGE


acl CONNECT method CONNECT
acl minharede src 10.0.0.0/255.255.255.0
acl minhamaquina src 10.10.0.3
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow minharede
http_access allow minhamaquina
http_access deny all
http_reply_access allow all
coredump_dir /var/spool/squid
visible_hostname proxy.morpheio.xxx.br

Registro de atividades
No que diz respeito segurana de rede, a utilizao de um proxy cache em uma permite
tambm que sejam gerados registros de atividades dos usurios e que os mesmos
Hardening em Linux

registros sejam mantidos por tempo definido para corporao, possibilitando investiga-

138

es futuras e tambm a monitorao do controle de acesso. Esses registros mantm a


seguinte estrutura de dados:
a. Identificao dos usurios: no Squid, por padro tem-se o registro de IP de acesso pelo
cliente; porm, com o proxy utilizando autenticao, so vinculadas informaes com o
respectivo login do usurio;

b. Data e horrios de entrada: no Squid, esses dados so registrados por padro;


c. Identidade do terminal ou, quando possvel, sua localizao: no Squid, essa diretriz
de recomendao no aplicvel;
d. Registro das tentativas de acesso aos aceitos e rejeitados: no Squid, esses dados so
registrados por padro;
e. Registro das tentativas de acesso a outros recursos e dados aceitos e rejeitados: no
Squid, esses dados so registrados por padro.

Estrutura de registros de eventos do Squid


Embora seja um padro de configurao nativa a estrutura de arquivos de logs sugerida a
seguir, ela ser definida no arquivo /etc/squid/squid.conf para estabelecer a estrutura de logs.
Por padro, determina-se a diretiva que identifica o arquivo de registros de conexes HTTP
de clientes ativos no proxy, gravados em /var/log/squid/access.log:

cache_access_log /var/log/squid/access.log
A seguir se estabelece o parmetro contendo o arquivo de registro de informaes como
hora e data em que o cache foi inicializado e o que foi armazenado, informaes presentes
em /var/log/squid/cache.log:

cache_log /var/log/squid/cache.log
Outra estrutura muito importante o arquivo com o registro dos objetos que foram armazenados em consultas estabelecidas pelos clientes (pginas, figuras etc.), que dever ser
armazenado em /var/log/squid/store.log:

cache_store_log /var/log/squid/store.log

Criao de ACLs
Possibilita filtrar o contedo web dos usurios.

Existem trs tipos de ACLs:


11 urlpath_regex.
11 url_regex.

Outro recurso motivador para o uso de um proxy-web o conceito de filtro de contedo,


que possibilita filtrar o contedo web dos usurios. Para realizar essa configurao, sero
definidos trs tipos de ACLs, combinando seus diversos recursos. Os tipos utilizados sero:
11 urlpath_regex: filtro de uma string na URL;
11 url_regex: filtro de complemento de uma URL;
11 dstdomain: filtro de uma URL.
Para uma efetiva organizao, define-se a poltica de contedo controlado em diversos
arquivos localizados dentro de um diretrio chamado /etc/squid/listanegra, que ser criado:

Captulo 6 - Hardening em sistema Linux Proxy Web

11 dstdomain.

139

# mkdir /etc/squid/listanegra
E a estrutura de arquivos dentro desse diretrio seguir a seguinte lgica:
11 palavraquente: ter palavras-chave que sero filtradas;
11 excecoes: sites que sero excees regra;
11 download: extenses que sero filtradas;
11 sitequente: sites de contedo pornogrfico (exemplo: www.uol.com.br/playboy);
11 urlquente: URL de sites pornogrficos;
11 audiovideo: sites com contedo de downloads e vdeos;
11 dominios_agressivos: sites com contedo que tenha como tema agresses;
11 drogas: sites sobre drogas;
11 jogospassatempos: sites de jogos como cassinos on-line;
11 violencia: sites com fotos de violncia ou acidentes;
11 warez: sites de pirataria;
11 hacking: sites de contedo hacking, com vrus, trojans e crackings.
As ACLs sero declaradas na sequncia dentro do arquivo de configurao do Squid, nesta
sequncia, desta forma:
Relao de sites que sero excees s polticas definidas:

acl excecoes dstdomain /etc/squid/listanegra/site_excecoes


Tratamento especial atravs de string dentro de uma URL:

acl palavraquente url_regex -i /etc/squid/listanegra/palavraquente


acl download url_regex -i /etc/squid/listanegra/download
acl sitequente url_regex -i /etc/squid/listanegra/sitequente
Tratamento a partir de uma URL ou endereamento IP:

acl urlquente dstdomain


acl audiovideo dstdomain

/etc/squid/listanegra/urlquente
/etc/squid/listanegra/ audiovideo

acl agressivos dstdomain /etc/squid/listanegra/dominios_agressivos


acl drogas dstdomain /etc/squid/listanegra/ drogas
acl jogospassatempos dstdomain /etc/squid/listanegra/
jogospassatempos
acl violencia dstdomain

Hardening em Linux

acl warez dstdomain


acl hacking

/etc/squid/listanegra/violencia

/etc/squid/listanegra/warez

dstdomain /etc/squid/listanegra/hacking

E agora sero feitas as chamadas das polticas de acesso para as ACLs criadas, atravs da
diretiva http_access:
Relao de sites que sero excees s polticas definidas:

http_access allow excecoes !palavraquente !download !sitequente


!urlquente !audiovideo !agressivos !drogas !jogospassatempos

140

!violencia !warez !hacking


Outra forma muito til de uso das ACLs de contedo gerar controles de bloqueio de download baseado em extenses. Veja o exemplo:

acl download_extensoes url_regex -i \.exe$ \.com$ \.bat$

\.pif$

\.scr$ \.mp3$ \.vqf$ \.tar.gz$ \.gz$ \.rpm$ \.zip$ \.rar$ \.avi$ \.mpeg$
\.mpe$ \.mpg$ \.qt$ \.ram$ \.rm$ \.iso$ \.raw$ \.wav$ \.mov$ \.7z$
O uso de recursos de expresso regular (regex) para informar que h um terminal com a
extenso. Por isso o uso do $ e a contra barra, \, antes do ponto. O ponto deve ser interpretado como ponto, pois em regex um caractere curinga.
Exemplo de uso:

http_access deny download_extensoes

Exerccio de Fixao e
Proxy web
Avalie o valor agregado que o controle de contedo web pode trazer em uma corporao.

Calcule o custo direto de um grupo de funcionrios, considerando que eles perdem 2h


diretas com o uso inadequado da web, ou seja, acessando contedo fora do foco. Assuma
o valor homem hora mdio de R$ 3 para um cenrio de 500 funcionrios. Qual o custo fixo
para uma corporao?

Considere o valor calculado na questo anterior, multiplique pelas 44 semanas teis de um

ACL Time Regras temporarizadas


Controle de acesso baseado em tempo um dos recursos mais interessantes do Squid. Ao
usar esse tipo de ACL, podemos especificar um perodo de tempo, na forma de dia(s) ou
intervalo de tempo. Em seguida, os pedidos durante esse perodo de tempo sero correspondidos ou identificados por essa ACL.
O formato do tipo tempo ACL :

Captulo 6 - Hardening em sistema Linux Proxy Web

ano, para ter o valor dentro de um ano:

141

acl ACL_NAME time [dia -abreviao] [hora_inicial-hora_final]


Dias

Abreviao

Traduo

Sunday

Domingo

Monday

Segunda-feira

Tuesday

Tera-feira

Wednesday

Quarta-feira

Thursday

Quinta-feira

Friday

Sexta-feira

Saturday

Sbado

All Weekdays

Dias teis da semana

Tabela 6.1
Criao de ACLs.

Exemplo de uso:
Criao de trs ACLs, uma para o horrio da manh, outra para o horrio do almoo e outra
para o horrio da tarde.

acl manha time MTWHF 09:00-12:59


acl almoco time D 13:00-13:59
acl

tarde time MTWHF 14:00-18:00

Para exemplificar o uso, sero criadas ACLs de contedo:

acl tranqueira dstdomain youtube.com facebook.com orkut.com

bbb.

globo.com
Os domnios da ACL tranqueira sero liberados exclusivamente no horrio do almoo.
Primeiro exemplo:

http_access allow youtube !manha !tarde


Outra forma:

http_access allow youtube almoco

Outras diretivas importantes para funcionamento do proxy


Define-se que a limpeza automtica de cache seja semanal. Caso isso no seja definido, o
padro uma vez por ms. Isso ser definido atravs da diretiva reference_age:

reference_age 1 week
Outro fator de segurana importante a impossibilidade de se realizar cache de pginas

Hardening em Linux

seguras, para evitar que informaes invlidas sejam consultadas posteriormente. Define-se

142

esse padro atravs do parmetro no_cache:

no_cache deny SSL_ports


Quando o servidor de proxy web configurado, podemos usar a autenticao, pois um
recurso muito interessante para controle de acesso.
O recurso de autenticao torna o gerenciamento dos logs de acesso muito mais prtico e

interessante, pois possibilita a viso clara do uso do recurso pelo usurio. O Squid trabalha
com o conceito de autenticadores externos para realizar tal funo, ou seja, programas
parte para realizar os padres de autenticao suportados pelo prprio proxy.
Para se especificar um autenticador externo para acesso ao cache do Squid muito til para
manter o controle de usurios em relao ao nome/senha para acesso ao proxy , devemos
informar ao Squid quem o programa externo responsvel pela tarefa. Dos tipos de autenticadores externos, podem ser usados vrios tipos, como autenticadores de padro NCSA (como
em servidores web), em uma base LDAP, em uma base Samba ou um domnio Microsoft.
Neste exemplo, utilizado o autenticador padro de servidor web, o ncsa_auth, por fazer
parte da base do prprio Squid:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd


O arquivo squid.conf vem comentado, informando outros mtodos de autenticao, e a
forma como o Squid foi concebido torna fcil para o administrador utilizar um outro mtodo
para autenticar usurios. Para exemplificar o que dito, seguem instrues sobre como
proceder para autenticar usurios Squid na base de usurios LDAP, que em servidores Linux
comumente implementado utilizando o OpenLDAP.

# vi /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/ldap_auth -b
dc=teste,dc=xxx,dc=br -f uid=%s 192.168.0.124
Devemos definir o nmero de processos-filho para a realizao do procedimento de autenticao, pois valores mais baixos servem para dificultar o uso de programas de bruteforce
que tentam, atravs de ataques de dicionrios, adivinhar a senha do usurio:

auth_param basic children 5


Outra importante definio o tempo de expirao da senha para a autenticao do usurio
atravs de uma conexo cliente (esse tempo dado em segundos):

authenticate_ttl 300
Agora ser determinada uma ACL chamada password, do tipo proxy_auth, para ativar o
recurso de autenticao.:

Depois disso, o controle de acesso via diretiva http_access deve ser especificado, para fazer
a chamada da ACL. No caso do Squid, a ordem das ACLs presentes importante durante a
anlise do arquivo pelo servidor; por consequncia, essa ACL dever ser invocada antes de
qualquer outra, se no a autenticao no ser requerida corretamente durante o acesso
pelos clientes:

http_access allow password


E, por fim, faz-se necessria a presena de uma ACL estratgica, no final do arquivo de configurao, negando qualquer possibilidade que no se enquadrou nas ACLs anteriores:

http_access deny all


Aps todos os procedimentos, o arquivo de configurao do Squid pode ser salvo e o servio
ser recarregado, como feito anteriormente, para especificar todas as novas mudanas. O teste

Captulo 6 - Hardening em sistema Linux Proxy Web

acl password proxy_auth REQUERID

a ser realizado dever ser o mesmo efetuado na configurao anterior, atravs da configu143

rao dos browsers clientes apontando para o servidor proxy.


Na prtica existem duas formas de fazer o Squid se autenticar em um servidor Windows
com Active Directory. Em uma delas, a feita por LDAP, o usurio ter de digitar a senha do
domnio e, quando quiser navegar na internet, ele dever se autenticar no proxy (Squid).
Esse tipo de autenticao feita por ldap. Outra forma por NTLM, mas neste captulo ser
exemplificada somente a autenticao por LDAP, pois tambm a sugerida para autenticao no OpenLDAP.
O modo via AD uma autenticao interessante. Basta colocar as seguintes linhas no squid.conf:

# vi /etc/squid/squid.conf
Linha para autenticao de usurios:

auth_param basic program /usr/lib/squid/ldap_auth -R -b


dc=dominio,dc=com,dc=br -D cn=squid,dc=dominio,dc=com,dc=br -w

Saiba mais
No foco desse treinamento a utilizao de
diretrios baseados no
protocolo LDAP, mas
interessante lembrar
que o Squid uma
soluo madura e tem
suporte a um grande
nmero de mtodos de
autenticao, entre eles
os diretrios baseado
em LDAP, como
OpenLDAP e Microsoft
Active Directory.

winserver -f sAMAccountName=%s -h 192.168.0.1


# linha para autenticao de grupos
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_
group -R -b dc=dominio,dc=com,dc=br -h 192.168.0.1 -D cn=squid,d
c=dominio,dc=com,dc=br -w winserver -f (&(cn=%a)(member=%v)) -F
(sAMAccountName=%s)
Caso seja um servidor OpenLDAP, podemos autenticar:

auth_param basic program /usr/lib/squid/ldap_auth -b


dc=teste,dc=xxx,dc=br -f uid=%s 192.168.0.124
Aps incluir essas linhas, basta reiniciar o servio do Squid que a autenticao j estar
funcionando.

# /etc/init.d/squid stop
# /etc/init.d/squid start
A adoo de um Proxy Cache em uma rede um procedimento extremamente vivel dentro
de uma topologia de rede, pois atravs dele podem-se estabelecer diversos controles sobre
o acesso dos usurios e clientes da rede aos contedos externos, o que facilita o processo
de auditoria e gerenciamento das possveis consultas realizadas. Alm disso, essa configurao visa a um melhor aproveitamento de recursos importantes da rede, como o uso de
link externo, modelando o acesso desses mesmos clientes a fim de se ter ganho maior em
performance, disponibilidade e simplicidade, tanto no acesso pelos usurios quanto pelos
controles especficos dos administradores.
Outro fator importante que justifica o uso de um proxy web ter controle sobre o contedo de acesso na corporao, pois um proxy web possibilita tambm gerar registros

Hardening em Linux

para auditoria de atividades dos usurios que podem ser mantidos por tempo definido
dentro da corporao, possibilitando investigaes futuras e tambm a monitorao do
controle de acesso.
Esses registros devem manter a seguinte estrutura de dados:
11 Identificao dos usurios: no Squid, por padro, temos o registro de IP de acesso pelo
cliente; porm, com o proxy utilizando autenticao, so vinculadas informaes com o
respectivo login do usurio;
144

dA ABNT NBR ISO/IEC


27002:2008 recomenda
a segregao de rede.
Dessa forma, a
utilizao de um proxy
web um dispositivo
de rede que, alm de
ajudar a estabelecer a
segurana de permetro, tambm coloca
a rede em conformidade com a 27002.

11 Data e horrios de entrada: no Squid, esses dados so registrados por padro;


11 Registro das tentativas de acesso aos aceitos e rejeitados: no Squid, esses dados so
registrados por padro;
11 Registro das tentativas de acesso a outros recursos e dados aceitos e rejeitados: no
Squid, esses dados so registrados por padro.
Diante disso, o uso de proxy web baseado no Squid possibilita tambm conformidade com o
item 10.10.1 da normal.

Monitoramento dos logs do Squid com SARG


Gerenciar as atividades do usurios diretamente nos logs gerados pelo Squid uma tarefa
possvel, mas interessante tratar os logs de acesso via relatrios html gerados pela
ferramenta Sarg. O Squid Analysis Report Generator (Sarg) foi desenvolvido pelo brasileiro
Pedro Orso.
Para instalar o Sarg, devemos usar o comando apt-get:

# apt-get install y sarg


A configurao do Sarg centralizada no arquivo sarg.conf. Devemos alterar algumas definies
dentro do arquivo sarg.conf, que encontrado normalmente dentro do diretrio /etc/squid:
language Portuguese:

access_log /var/log/squid/access.log
title Relatrio SARG
temporary_dir /tmp
output_dir /var/www/[seu-nome]/squid-reports
resolve_ip no
user_ip no
Depois de configurar o sarg.conf, basta gerar os relatrios com o comando:

# sarg

e us-la em seu navegador.


O pacote sarg traz consigo um script denominado sarg-reports. Aps configurar o sarg,
possvel gerar relatrio de forma simples.
Relatrio dirio:

# sarg-reports daily
Relatrio semanal:

# sarg-reports weekly
Alm disso, faz parte do pacote a gerao do arquivo /etc/crontab.d/sarg, que faz o agendamento da gerao dos relatrios via crontab.

Instalao do filtro de contedo Dansguardian

Captulo 6 - Hardening em sistema Linux Proxy Web

Aps a execuo, necessrio verificar a pgina criada em /var/www/[seu-nome]/squid-reports

O Dansguardian um filtro de contedo que pode ser integrado ao Squid para a filtragem de
145

contedo, muito mais arrojado que as regras baseadas em ACL disponveis no Squid.
Para o processo de instalao e configurao do Dansguardian, recomendvel que sejam
feitas cpias de segurana do arquivo squid.conf. Para isso, basta acessar o diretrio:

# cd /etc/squid/
Fazer a cpia do squid.conf original:

# cp squid.conf squid.conf.ORIGINAL
A instalao do Dansguardian pode ser feita pelo repositrio, atravs da ferramenta apt:

# apt-get install dansguardian


Os arquivos de configuraes do Dansguardian estaro em /etc/dansguardian:

# cd /etc/dansguardian
# ls -l
recomendvel fazer uma cpia de segurana do arquivo de configurao dansguardian.conf
antes de qualquer alterao:

# cp /etc/dansguardian/dansguardian.conf /etc/dansguardian/
dansguardian.conf.ORIGINAL
Dentro do arquivo dansguardian.conf necessrio: procurar a tag UNCONFIGURED e
alterar para:

# UNCONFIGURED
Alterar a diretriz filterip para:

filterip=
Alterar a diretriz filterport para:

filterport=8080
Alterar a diretriz proxyip para:

proxyip=127.0.0.1
Alterar a diretriz proxyport para:

proxyport=3128
Aps as alteraes, devemos reinicializar o servio do dansguardian:

service dansguardian stop


service dansguardian start

Hardening em Linux

Uma vez com o Dansguardian ativado, devemos realizar os testes via browser e avaliar os

146

resultados fazendo simulaes de acesso a site indevidos.

sudo /etc/init.d/dansguardian restart


Agora s configurar os browsers para usarem o proxy.

Roteiro de Atividades 6
Prtica de instalao, configurao dos controles de contedo, autenticao e gerao de
relatrios. Ser necessrio que o aluno utilize a mquina virtual preparada como Virtuabox.
Dessa forma, ser possvel aplicar todos os conhecimentos (tcnicas e ferramentas).

Atividade 6.1 Hardening Linux Proxy web Squid


1. Configure um Squid para funcionar como um proxy web exclusivo de cache. Reinicie o
Squid, teste-o e valide seu funcionamento e os logs gerados.
2. Salve as configuraes do exerccio 1 e atribua controle de contedo, reinicie o Squid,
teste-o e valide seu funcionamento e os logs gerados.
3. Salve as configuraes do exerccio 2 e atribua controle utilizando a ACL TIME, reinicie o
squid, teste-o e valide seu funcionamento e os logs gerados.
4. Salve as configuraes do exerccio 3 e atribua controle utilizando Autentica NCSA_AUTH,
reinicie o Squid, teste-o e valide seu funcionamento e os logs gerados.
5. Configure o Sarg para gerar relatrios HTML.

Captulo 6 - Roteiro de Atividades 6

6. Configure a automao de relatrios via crontab para todo dia, 3h.

147

148

Hardening em Linux

7
Classificar um firewall quanto sua atuao; Desenhar topologias que contemplem o
uso de Firewall; Executar comandos de administrao do IPtables; Configurar regras
de filtro de pacotes do IPtables.

conceitos

Tipos de firewall e topologia de redes com firewall; Segurana de Permetro e uso do


recurso do Kernel do Linux denominado Netfilter, para implementao de firewall com
auxlio da ferramenta Iptables; Parametrizao e criao de chains, administrao das
tabelas; Exemplificaes de como tratar certos servios e protocolos (TCP, UDP e ICMP).

Introduo
Firewalls:

11 Sozinhos, no tm como garantir a segurana de uma rede de computadores.


11 Citados na norma internacional de Segurana da ISO/IEC 27002:2008.
Sistemas de firewalls so importantes em um projeto de segurana; todavia, sozinhos
no tm como garantir a segurana de uma rede de computadores. Demandam-se outros
mecanismos como tambm uma administrao proativa. Mas a sua importncia notria,
o que j tratado na norma internacional de Segurana da ISO/IEC 27002:2008, ou seja,
entre os controles da rede, h a recomendao de segregao da rede, assim como a
implementao de proteo dos servios disponibilizados contra acessos no autorizados
um trabalho para um sistema de filtros (firewall), para criar permetros de redes devidamente protegidos e gerenciados.
Neste captulo, ser utilizado o Iptables, ferramenta que surgiu no Kernel 2.4, evoluiu, foi
mantida no Kernel 2.6 e posteriormente tambm permaneceu na srie 3.0. O IPtables possibilita ao administrador manipular as capacidades do Netfilter, o firewall de tecnologia State
Full nativa no Linux.
Nosso objetivo ser compreender como as comunicaes de rede acontecem no contexto do
protocolo, ou seja, trabalhar a matria-prima, que o TCP/IP, atravs de um mtodo didtico
amigavelmente Lego, devido ao fato de que no processo inicial de aprendizado tratamos
cada ao importante separadamente, como peas de um quebra-cabea, para no final
junt-las com coerncia e construir um modelo de polticas de firewall realmente funcional.

Captulo 7 - Firewall Parte 1

objetivos

Firewall Parte 1

149

Arquitetura de firewall
Normalmente, as empresas preferem implementar um firewall baseado apenas em uma
mquina, seja um host PC ou um roteador. Entretanto, os firewalls mais robustos so compostos por vrias partes. Veja algumas arquiteturas a seguir.

Roteador com Triagem


(Screening Router)

switch/hub

Roteador com Triagem


(Screening Router)

Hardening em Linux

switch/hub

150

dBoas Prticas recomendadas na ABNT NBR


ISO/IEC 27002:2008:
sistemas de firewall so
importantes em um
projeto de segurana;
no entanto, sozinhos
no tm como garantir
a segurana de uma
rede de computadores.
Demandam-se outros
mecanismos, alm de
administrao proativa.
Entretanto, sua
importncia notria, a
ponto de a norma
internacional de
Segurana da
Informao BS7799,
vinculada no Brasil pela
ABNT como NBR ISO/
IEC 17799:2001, no
item 8.5.1, Controles da
rede, recomendar a
segregao da rede,
assim como a
implementao de
proteo dos servios
disponibilizados contra
acessos no autorizados. Isso significa um
trabalho para um
sistema de filtros
(firewall) que, mais
enfaticamente, citado
na NBR ISO/IEC
17799:2001 nas alneas
e e f do item 9.4.2, Rota
de rede obrigatria.

Gateway de Base Dupla


(Dual Homed Gateway)

switch/hub

Gateway Host com Triagem


(Screened Host Gateway)

Captulo 7 - Firewall Parte 1

switch/hub

151

Gateway de Base Dupla


(Dual Homed Gateway)

switch/hub

Gateway Host com Triagem


(Screened Host Gateway)

Hardening em Linux

switch/hub

152

Gateway Host com Triagem


(Screened Subnet)

Router congurado
com ACL pra
ltrar pacotes

switch/hub

IP Vlido
NAT
IP Invlido

Linux
Firewall
IDS
Proxy
Gateway

Linux

VPN
Firewall
NIDS
HIDS
Proxy
Gateway

Linux
Firewall
HIDS

Linux
Firewall
HIDS

Linux
Firewall
HIDS

Linux
Firewall
HIDS

Servidor
Web
DNS 1

Servidor
Web
DNS 2

Servidor
de Correio
Antivrus

IDS

Webmail

Servidor
Netsaint

Rede perifrica

Figura 7.1
Composio
dos firewalls
mais robustos.

Linux

Linux

Linux

Servidor de
Arquivos

Servidor de
Impresso

Servidor
DHCP
Intranet
LAN

Estaes
Linux / Windows

Captulo 7 - Firewall Parte 1

switch

153

Tipos de firewall e como eles trabalham na estrutura de camada OSI.

Packet Filter Camada OSI

Camada

Figura 7.2
Firewalls e a
estrutura de
camada OSI.

Camada

aplicao

aplicao

apresentao

apresentao

sesso

sesso

transporte

transporte

Packet Filter
3

rede

enlace

enlace

fsica

fsica

rede

IP / ICMP / IGMP

StateFull Camada OSI

Camada

Figura 7.3
StateFull
Camada OSI.

Camada

aplicao

apresentao

sesso

transporte

rede

enlace

enlace

fsica

fsica

aplicao

Statefull Packet

apresentao
sesso

TCP / UDP

TCP / UDP

transporte
rede

IP / ICMP / IGMP

Figura 7.4
Statefull Packet
(Iptables).

StateFull - Camada OSI


Statefull Packet (Iptables)
aplicao

aplicao

apresentao

apresentao

Statefull Packet (Iptables)

Hardening em Linux

sesso

154

sesso

transporte

transporte

StateLess Packet (Ipchains)

rede

rede

enlace

enlace

enlace

fsica

fsica

fsica

rede

rede

enlace

enlace

enlace

fsica

fsica

fsica

StateLess Packet (Ipfwadm)

fsica

fsica

Uma viso a partir do datagrama


De uma forma direta e didtica, pode-se classificar um firewall de acordo com seu nvel de
atuao em um datagrama, ou seja, o quanto em mdia do datagrama efetivamente processado, ou quais os campos do respectivo cabealho podem ser relevantes para ao do firewall.

Endereamento IP

Transporte
TCP / UDP / ICMP*

20 bytes

20 bytes

rea de Dados (MSS)

1460 bytes

Packet Filter - Trata 20 a 24 bytes

StateLess - Trata um pouco mais de 24 bytes

StateFull - Trata no mnimo os 40 bytes iniciais

* O protocolo de transporte pode ter o cabealho de at 20 bytes


* Valor mximo do Datagrama (MTU) 1500 bytes
11 Packet Filter: trata em mdia de 20 a 24 bytes iniciais de um pacote, ou seja, esse tipo de
firewall trata e tem recursos para tratar todo o cabealho IP (os primeiros 20 bytes do
pacote) e a parte do cabealho de transporte no que diz respeito porta origem e porta
destino. Lembrando que o campo porta tem 2 bytes (16 bits que correspondem a
2^16=65536 portas);
11 StateLess: trata em mdia um pouco mais que 24 bytes iniciais de um pacote, ou seja,
esse tipo de firewall seria um Packet Filter melhorado. Sendo relevante lembrar que esse
tipo de firewall pode at ter um tratamento para algum campo especfico do cabealho
de transporte, mas no capaz de tirar proveito do conceito de Estado de Conexo;
11 StateFull: essa categoria de firewall trata no mnimo os 40 bytes iniciais de um datagrama, ou seja, todos o cabealho IP e, seja qual for o protocolo de transporte (UDP ou
TCP), so capazes de tratar o cabealho de Transporte. Sendo capaz de aproveitar as
informaes de estado de conexo do cabealho TCP.

Fundamentos para o IPtables


Antes mesmo de serem abordados conceitos mais especficos do IPtables, interessante
que estejamos familiarizados com alguns fundamentos bsicos relacionados ao Netfilter e o
kernel do Linux.
O Netfilter a poro do Kernel do Linux que vai compor as capacidades de firewall na Kernel
spcae e que ser configurado e gerenciado pela ferramenta Iptables na userscape. Todavia,
quando se menciona o firewall do Linux, comum simplesmente denomin-lo Iptables.
Projeto em evoluo, a cada nova verso o Netfilter torna-se cada vez melhor e mais competitivo, traz novos recursos para tratamento de pacotes e seguramente, pela sua qualidade,
torna-se em muitos momentos tima opo em relao aos firewalls comerciais. No entanto,
quando uma empresa de grande porte faz a opo por uma soluo de firewall baseada
em software livre, no o faz pelo custo. Faz independentemente do preo. Colocamos em

Captulo 7 - Firewall Parte 1

Figura 7.5
O firewall e o
datagrama.

155

primeiro lugar a funcionalidade e maturidade da tecnologia. Dessa forma, solues de


firewall baseadas em Linux ou mesmo baseadas em Unix BSD so usadas por serem funcionais e confiveis.

Algumas das principais caractersticas do firewall IPtables


11 Possibilidade de delimitar portas/endereo de origem/destino;
11 Suporte a protocolos TCP/UDP/ICMP e IGMP, entre outros;
11 Possibilita tratamento de pacotes por interface origem/destino;
11 Redirecionamento;
11 O conceito de tratamento de trfego dividindo tabelas o torna extremamente verstil,
possibilitando ao administrador definir polticas claras para cada situao, seja entrada,
sada ou repasse de pacotes com traduo ou no de endereamento;
11 estvel e rpido;
11 Possibilita o tratamento do estado da conexo, sendo muito fcil bloquear ou rejeitar
pacotes manipulados por ataques (mal formados);
11 O fato de sua estrutura se basear em mdulos o torna um projeto facilmente escalvel;
11 Suporte a roteamento de pacotes, tratados em uma rea diferente de trfego padro;
11 Suporte manipulao de campos de um datagrama;
11 Capacidade de trabalhar com fragmentao;
11 Possibilidade de personalizar o registro de eventos;
11 Suporte a NAT;
11 Contabilizao de pacotes;
11 Controle sobre os limites de pacote.

Trabalhando com IPtables


Projeto Netfilter:

11 Possui a interface Iptables.


22 Extremamente arrojado.
Conforme j mencionado, o projeto Netfilter traz consigo a interface Iptables, que possibilita a manipulao de recursos do Kernel do Linux. Atualmente, essa a opo de firewall
dos administradores Linux. A proposta deste captulo abordar as capacidades do IPTables
de forma didtica, por meio de situaes especficas, tentando sempre exemplificar e no
apenas definir parmetros. Todavia, o IPtables extremamente arrojado, e est sendo
melhorado gradativamente desde a sua primeira verso; por isso, no se tem a pretenso
de abordar todos os seus recursos neste captulo ou mesmo neste livro.
O Iptables trabalha com o conceito de tabelas, no qual cada uma delas trata o pacote de

Hardening em Linux

acordo com a situao vinculada, ou seja, com a direo e origem. Tabelas que filtram pacotes:

156

11 INPUT: pacotes roteados para o firewall; o destino o prprio firewall;


11 OUTPUT: pacotes gerados localmente pelo firewall; tudo que a mquina firewall envia;
11 FORWARD: tratam os pacotes que vo atravessar o firewall; de uma rede para outra,
onde no existe a necessidade de traduo de endereamento (regras de NAT).

Tabelas que tratam de NAT:


11 PREROUTING: pacote entrando pelo firewall para uma rede interna, antes da deciso de
roteamento. Em suma, a NAT de 1:1.
11 POSTROUTIND: sada dos pacotes da rede atravs do firewall para a internet.

Regras
De forma objetiva, pode-se definir um conjunto de regras pelo comando IPtables para
realizar algum tipo de ao em relao de uma comunicao de rede (grupo de pacotes).
Essas regras so mantidas em chains e permanecem at uma nova definio do administrador ou reinicializao do sistema. Um bom exemplo de regra seria bloquear requisies
oriundas do IP 10.0.0.1 para a porta de destino 80/TCP atravs da interface eth1 com destino
prpria mquina Firewall.
A sintaxe dessa regra para o Iptables fica assim:

# iptables -A INPUT-j DROP -i eth1 -s 10.0.0.1 -p tcp --dport 80


Diante disso, tambm pode-se definir como um conjunto de regras que especificam
determinadas aes conforme caractersticas de uma comunicao de rede e sua direo
(origem/destino).

Conceitos de chains
No Iptables, as chains so locais onde so armazenadas as regras do firewall, ou seja, a
forma como o Iptables organiza os critrios de decises pr-definidas para o trfego de
pacotes de uma comunicao de redes. Essa regras so interpretadas de forma top-down
(de cima para baixo), dando o devido tratamento ao pacote.
Existem dois tipos de chain: as nativas, ou seja, built-in, e as embutidas as parametrizadas
e definidas pelo administrador do sistema. As chains built-in so pr-estabelecidas no
prprio IPtables, enquanto que as embutidas podem ser criadas/modificadas/removidas
pelo administrador.
A tabela Filter possui trs chains built-in, que so INPUT, OUTPUT e FORWARD. Veja o exemplo:

# iptables -n -L t filter
Chain INPUT (policy ACCEPT)
target

prot opt source

destination

Chain FORWARD (policy ACCEPT)


prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target

prot opt source

destination

Pelo fato de ser a tabela padro, no necessrio pass-la como parmetro, conforme explicado:

# iptables n L

Captulo 7 - Firewall Parte 1

target

157

Chain

Descrio

INPUT

Destinada a pacotes cujo destino a mquina firewall.

FORWARD

Destinada a pacotes que atravessam a mquina firewall.

OUTPUT

Destinada a pacotes cujo origem na firewall.

Tabela 7.1
Chais da
tabela filter.

Tabelas
Tabelas so onde ficam armazenadas uma ou mais chains que tm caractersticas similares.
Existem trs tipos de tabelas no Iptables: a tabela FILTER, j definida, a tabela NAT (traduo
de endereamento) e a tabela Mangle (manipulao de campos do datagrama). Podemos
referenci-las atravs do parmetro -t tabela.

# iptables -n -L -t nat
Chain PREROUTING (policy ACCEPT)
target

prot opt source

destination

Chain INPUT (policy ACCEPT)


target

prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target

prot opt source

destination

Chain POSTROUTING (policy ACCEPT)


target

prot opt source

destination

Chain

Descrio

PREROUTING

Destinada a pacotes que precisam de traduo antes do


roteamento, ou seja, NAT Reverso.

POSTROUTING

Destinada a pacotes que precisam de traduo depois


do roteamento.

OUTPUT

Destinado a pacotes gerados no prprio firewall, mas que


precisam de traduo antes do roteamento, ou seja, um tipo
Prerouting para pacotes com origem no prprio Firewall.

A tabela Mangle utilizada em situaes onde houver a necessidade de alteraes especiais


Hardening em Linux

em pacotes. A tabela Mangle originalmente tem cincos chains: PREROUTING, POSTROUTING,

158

INPUT, OUTPUT e FORWARD. Na prtica, cada uma dessas chains processada antes da
chain correspondente na tabela filter e nat, para definir opes especiais, como, por
exemplo, opes como o Tipo de Servio (TOS).

Tabela 7.2
Chais da
tabela NAT.

Caminho de um pacote nas tabelas e chains


A figura a seguir ilustra o fluxo e a sequncia de processamento que um pacote segue
quando entra no firewall IPtables. Onde as chains so analisadas sequencialmente de cima
para baixo conforme ilustrado na figura. Quando um pacote confere com uma regra, a
ao especificada na regra executada no pacote.

Network

mangle Table
PREROUTING Chain
nat Table

(Destination NAT)

PREROUTING Chain

Routing

Data for
this server?

Yes

No

lter Table

lterTable

INPUT Chain

FORWARD Chain

Local Processing
of Data
mangle Table
OUTPUT Chain
nat Table
OUTPUT Chain
lter Table
OUTPUT Chain

nat Table
Figura 7.6
Fluxo e sequncia
de processamento
que um pacote
segue quando
entra no firewall
IPtables.

POSTROUTING Chain

Network

(Source NAT based on routing)

Captulo 7 - Firewall Parte 1

Routing

159

Como adicionar regras em uma chain


O parmetro -A (append) o responsvel por adicionar regras s chains, onde a ltima regra
adicionada via esse comando ser a ltima a ser processada, pois cada nova regra adicionada vai para o fim da fila.

Sintaxe: IPtables -t tabela -A chain [especificao da regra] [opes]


Exemplificao de uma regra negando qualquer pacote ICMP com destino a interface lo
(loopback).

# iptables -A INPUT -j DROP -i lo -p icmp


Ou:

# iptables -t filter -A INPUT -j DROP -i lo -p icmp

Listando (-L) as regras em tabelas e chains


Conforme j exemplificado, pode-se verificar as regras ativas em memria de todas as
chains de uma tabela ou em uma chain especfica atravs do parmetro -L.

Sintaxe: IPtables -t tabela -L [chain] [opes]


As opes so parmetros que so passados para a elaborao de um regra mais refinada e
detalhada. A tabela mostra as principais opes:
Opo

Descrio

-v

Modo verbose, mostra informaes mais detalhadas sobre a


regra.

-n

Apresenta informaes em formato numrico, como por


exemplo: IP e Portas.

-x

Exibe informaes absolutas.

--line-numbers

Exibe o nmero de cada regra.

Tabela 7.3
Opes das chains.

Exemplificao de uma listagem completa de informaes ativas da tabela Mangle:

# iptables -t mangle -n -L -v --line-numbers


Chain PREROUTING (policy ACCEPT 1545 packets, 635K bytes)
num

pkts bytes target

prot opt in

out

source

destination

Chain INPUT (policy ACCEPT 1545 packets, 635K bytes)

Hardening em Linux

num

160

pkts bytes target

prot opt in

out

destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

source

num

pkts bytes target

prot opt in

out

source

destination

Chain OUTPUT (policy ACCEPT 808 packets, 62046 bytes)


num

pkts bytes target

prot opt in

out

source

destination

Chain POSTROUTING (policy ACCEPT 826 packets, 63337 bytes)


num

pkts bytes target

prot opt in

out

source

destination
Os campos exibidos na listagem tm os seguintes significados:
Descrio

Num

Nmero da regra na chain.

Pkts

Nmero de pacotes que bateram com a regra.

Bytes

Nmero de bytes relacionados com a respectiva regra.

Target

O alvo a ser realizado caso um pacote confira com a regra.

Prot

Protocolo tratado pela regra criada.

Opt

Opes extras passadas na regra i criada.

In

Interface de entrada tratada.

Out

Interface de sada tratada.

Source

Endereo origem.

Destination

Endereo destino.

Outras opes

Demais campos complementares, como por exemplo: porta de


origem/destino, match que est sendo utilizada.

Apagando (-D) uma regra


Com o -D possvel apagar uma chain de duas formas: atravs do ndice ou nmero da
regra (representado por num), ou reescrevendo a regra novamente mas trocando o
parmetro -A ou -I pelo parmetro -D. Veja os exemplos:

# iptables -D INPUT 8
# iptables -t nat -D POSTROUTING 5
# iptables -D FORWARD -j ACCEPT -s 10.0.0.0/8 -d 172.16.0.0/16

Inserindo (-I) uma regra


Possibilita inserir um regra em uma posio definida em uma chain.

Captulo 7 - Firewall Parte 1

Tabela 7.4
Campos da
listagem de
informaes ativas
da tabela Mangle.

Campo

161

Sintaxe: IPtables -t tabela -I chain [ndice] [especificao da regra] [opes]

# iptables -I FORWARD 3 -m state --state NEW -d 10.0.0.0/0 -j ACCEPT

Substituindo (-R) uma regra


Funciona de forma similar insero de regra, mas com o propsito de substituir uma determinada regra. Vide exemplos:

# iptables -R OUTPUT 15 j ACCEPT -o eth0 -p icmp --icmp-type echorequest


# iptables -R INPUT

16

j ACCEPT -i eth0 -p icmp --icmp-type

echo-reply

Criando uma nova (-N) chain


A possibilidade de criar chain proporciona a oportunidade de o administrator criar firewalls
mais arrojados e eficientes, pois pode criar chains para tratar situaes especficas. O parmetro utilizado para criar uma nova chain o -N, conforme ilustrado:

Sintaxe: IPtables -t tabela -N [nome]


Aps a criao, a chain pode ser manipulada como qualquer outra chain, como inserir,
remover, substituir ou adicionar:

# iptables -N DROP_NET
# iptables -A DROP_NET -j DROP -i eth0 -s 172.16.0.0/16
# iptables -A DROP_NET -j DROP -i eth0 -s 172.17.0.0/16
Uma vez definido qual ser o tratamento ao pacote na respectiva chain, deve-se criar uma
regra na tabelas principais para que o fluxo de tratamento seja desviado para a chain criada.

# iptables -A INPUT -j DROP_NET s 172.16.0.0/16


# iptables -A INPUT -j DROP_NET s 172.16.0.0/16

Renomeando (-E) uma chain


Pode-se renomear o nome de uma chain atravs do parmetro -E:

Sintaxe: IPtables -t tabela -E [nome-existente] [novo-nome]

Isso s possvel para chains criadas, e no se aplica s chains padro do IPtables.

Apagar (-F) as regras de uma chain

Hardening em Linux

Existem duas maneiras de apagar as regras existentes em uma chain: ou apagamos as

162

regras de cada chain individualmente ou apagam-se todas as regras das chains existentes
em uma tabela.

# iptables -t filter -F DROP_NET


# iptables -t filter -F

Zerando (-Z) contadores de chains


O recurso de contabilidade de pacotes processados pelas chains pode ser muito interessante para administradores que desejam ter uma viso estatstica a partir de informaes
do firewall. Esse recurso ativado por padro e pode ser consultado com o uso do -v ou -x
na listagem de regras de uma chain. Para reinicializar os contadores, pode-se usar o parmetro Z, conforme ilustrado:

# iptables -Z INPUT
# iptables -t mangle -Z OUTPUT

Excluindo (-X) chains criadas por usurios


Quando desejamos excluir chains criadas pelo administrador individualmente ou todas as
existentes em uma tabela:

# iptables -t tabela -X
# iptables -t tabela -X DROP_NET

Poltica bsica
A poltica bsica, tambm chamada de poltica padro, tem como objetivo definir qual o
tratamento do pacote caso ele no confira com qualquer regra em uma chain. Classicamente
existem dois modos, o modo permissivo e o modo restritivo.
11 Modo permissivo (ACCEPT): o firewall definido para aceitar qualquer pacote caso o
pacote no tenha sido tratado por qualquer outra regra;
11 Modo restritivo (DROP): firewall definido para negar qualquer pacote caso o pacote
no tenha sido tratado por qualquer outra regra.
No Iptables as regras padro so definidas pelo comando -P:

# iptables P INPUT DROP


# iptables P OUTPUT DROP
# iptables P FORWARD DRO

Especificando interfaces de entrada e sada


Os parmetros -i e -o definem interfaces de entrada (origem) e sada (destino), respectivamente, para os pacotes de rede. Sua sintaxe longa para esses parmetros so --in-interface
e --out-interface. Na criao de regras mais restritivas a um determinado fluxo de pacotes, a

Entretanto, nem toda chain aceita os dois parmetros simultaneamente, ou seja, tem de
se levar em considerao o fluxo de pacotes, pois no tem sentido por exemplo especificar
uma interface de sada na chain INPUT da tabela filter que vai tratar o fluxo de entrada de
pacotes. A tabela a seguir faz uma relao da possibilidade de utilizao dos parmetros -i e -o
em todas as chains.

Captulo 7 - Firewall Parte 1

parametrizao da interface um recurso muito til.

163

Tabela

Chain

Interface Entrada (-i)

Interface Sada (-o)

Filter

INPUT

SIM

NO

FORWARD

SIM

SIM

OUTPUT

NO

SIM

PREROUTING

SIM

NO

POSTROUTING

NO

SIM

OUTPUT

NO

SIM

PREROUTING

SIM

NO

OUTPUT

NO

SIM

INPUT

SIM

NO

FORWARD

SIM

SIM

OUTPUT

NO

SIM

PREROUTING

SIM

NO

POSTROUTING

NO

SIM

Nat

RAW

Mangle

Tabela 7.5
Opes de chains
para cada tabela do
Netfilter.

A tabela RAM s pode ser usada nas chains PREROUTING e OUTPUT. No h suporte
para outras chains porque essa forma de tratamento s necessria uma vez que
esses so os nicos lugares em que se pode lidar com os pacotes antes que eles
realmente fechem uma trilha de conexo.

Proposta de regras
11 Uso do Iptables para configurar uma mquina com os servios de firewall e Proxy Web.

11 Pode fazer o papel de firewall de fronteira de uma pequena ou grande rede.


Este captulo ter como objetivo tambm primeiro conceituar e exemplificar o uso do
Iptables para configurar uma mquina com os servios de firewall e Proxy Web. Normalmente, um servidor configurado para essa finalidade pode fazer o papel de firewall de
fronteira de uma pequena ou mesmo grande rede; dessa forma, poder filtrar todo o
trfego da internet para a rede interna, e da rede interna para a internet. J um proxy pode
ser utilizado como filtro de contedo web.
A metodologia utilizada para a implementao do firewall ser a seguinte: iremos negar
todo o trfego para as CHAINS de INPUT, OUTPUT e FORWARD da tabela filter e, poste Hardening em Linux

riormente, o gerente de TI nos passar a relao dos servios que devem ser liberados no

164

Firewall, o que chamaremos de excees. Todo o trfego de pacotes que as minhas excees
no cobrirem estaro bloqueados por padro. Em suma, o que no for oficialmente permitido j est expressamente negado. Para finalizar, interessante que faamos uma auditoria
em cima de tentativas de intruso e varreduras qualificadas como regras de controle.

le
s

Ex

ro

ce

nt

Polticas bsicas

As polticas bsicas para o firewall so tratadas por ltimo depois que o pacote passar todas
as polticas definidas nas outras chains; todavia, elas so definidas primeiro para depois
serem definidas as chains de polticas de excees e os controles.
Parte-se do princpio de que seu sistema Linux est devidamente configurado, ou seja, um
hardening restritivo foi executado no servidor e o suporte a IPtables est implementado.
Para tornar o estudo mais didtico, inicialmente sero conceituadas as polticas dividindo-as em:
11 Bsicas: inerentes a tratamentos da base do firewall, ou partiremos do princpio de negar
tudo o que no permitido, j que est expressamente negado;
11 Excees: sero todas as polticas destinadas a permitir algum tipo de acesso;
11 Controles: so polticas que vo possibilitar a gerao de registros de eventos, ou seja,
todas a polticas diretamente vinculadas a logs.
Inicialmente, partir para trs chains bsicas, negando qualquer acesso para INPUT, OUPUT e
FORWAD. Para isso, usaremos o comando -P.

iptables -P INPUT

DROP

iptables -P OUTPUT DROP


iptables -P FORWAD DROP
Existe a possibilidade de, em vez de negar um pacote (DROP), rejeit-lo (REJECT), o que no
aplica as regras bsicas onde somente pode-se ou aceitar ou negar; entretanto, vlido
lembrar que o ato de rejeitar pacotes tem o custo de que para cada pacote rejeitado
enviada uma resposta padro ICMP do tipo ICMP3/3.
Seguindo a mesma lgica, se for desejado ter um servidor totalmente permissvel de forma suicida
na internet, bastaria delimitar as polticas bsicas aceitando qualquer conexo, o que com certeza
em momento algum recomendvel; todavia, tal cenrio poderia ser definido assim:

iptables -P INPUT

ACCEPT

iptables -P OUTPUT ACCEPT


iptables -P FORWAD ACCEPT

Regras adicionais a regras bsicas


Com a poltica bsica para trs chains fixadas em drop, ou seja, descartando silenciosamente pacotes, teramos um servidor seguro. Este no estaria recebendo nenhum pacote,
mas por outro lado tambm no estaria enviando nada. Embora seguro, no tem sentido e

Captulo 7 - Firewall Parte 1

Figura 7.7
Depois das polticas
definidas em outras
chains, as polticas
bsicas.

Co

es

Organizao das polticas

no o que se deseja, mas essa a poltica bsica recomendada para construo de firewall;
165

assim, a partir desse momento, o administrador pode adicionar polticas de excees de


forma incremental, ou seja: na ordem em que forem adicionadas, elas sero tratadas pelo
kernel do Linux e posteriormente polticas de controles para motivar registro de eventos
(logs) indesejados, pois mesmo j negados, recomendvel ter o controle sobre as ocorrncias para fins de auditoria e avaliao da segurana.
importante lembrar que de uma forma geral a construo de regras de firewall so fundamentadas nas polticas bsicas, sendo as regras de exceo e controles (logs) que trataro
boa parte do trfego de redes. Ocorrer tambm a necessidade de tratar ainda assim as
excees. Exemplo: o administrador liberar comunicao via protocolo ICMP, mas mesmo
assim ser necessrio dizer qual o tipo de ICMP e talvez a quantidade.
Esse ltimo exemplo ratifica a necessidade de uma anlise detalhada do que tem de se fazer
e tambm o melhor uso da ferramenta. Ter um firewall com um grande nmero de regras
no define se bom ou ruim. Quase sempre se o nmero de regras muito grande bem
provvel que muita coisa pode ser otimizada.
Alm do que j foi mencionado, existe a necessidade de tratar melhor um determinado
datagrama ou mesmo reescrever um determinado campo de um protocolo.
Firewalls tambm so responsveis pela relao de IPs vlidos na internet versus os no
roteveis quando a comunicao baseada em IPv4, ou seja, recursos com PAT e NAT que
sero explicados no captulo 8.
E, por fim, o controle de Banda passa ser uma funo que em muitos momentos pode e
deve ser combinada com as capacidades do Firewall utilizado. A pirmide a seguir ilustrar
esses conceitos e a inter-relao entre eles.

Balanceamento
de carga
Polticas de NAT
Manipulao de datagramas
Tratamento das excees
Excees

Controles
Polticas bsicas

Figura 7.8
Controle de Banda.

Essa ao pode ser automatizada, e o ideal. Dessa forma, segue uma exemplificao de

Hardening em Linux

um script denominado drop.sh para definir a poltica padro:

166

Polticas bsicas

# vi drop.sh
# ./drop.sh

Figura 7.9
Definindo a
poltica bsica.

Para limpar as regras em todas as chains e voltar com a poltica padro ACCEPT, eis um
exemplo de script que customiza a tarefa. Ele foi denominado com o nome limpa.sh.

# vi limpa.sh

#!/bin/bash

PF=$(which IPtables)

if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit
fi

nega ()
{
$PF -P INPUT DROP
$PF -P OUTPUT DROP
$PF -P FORWARD DROP
}
nega
#!/bin/bash
PF=$(which IPtables)

if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit
fi

{
$PF -F
$PF -P INPUT ACCEPT
$PF -P OUTPUT ACCEPT
$PF -P FORWARD ACCEPT

Captulo 7 - Firewall Parte 1

limpa ()

167

}
limpa
Normalmente, inicia-se um script definindo a shell que interpretar o seu contedo; todavia,
a linha #!/bin/bash no inserida, as instrues do script so interpretadas pela shell
corrente ou pode ser definida a shell durante a execuo, precedendo o nome do script pela
shell desejada conforme exemplo ilustrativo: # bash script.sh
Exemplo de um script para visualizar as polticas na tabela FILTER, denominado como status.sh:

# vi status.sh

PF=$(which IPtables)

if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit
fi
ver ()
{
$PF -nL -t filter
}
ver

# ./status.sh
Como foi definido o modo restritivo nas polticas bsicas, ou seja, foi fechado (DROP) para
todas as chains que definem as polticas bsicas do firewall, ser necessrio criar polticas
de excees, ou seja, regras de liberao (ACCEPT), para a comunicaes pr-definidas

es

pelo administrador.

Hardening em Linux

Ex

ce

Figura 7.10
Regras de liberao
(ACCEPT).

168

Para melhor contextualizar, ser proposto um cenrio onde desejamos a execuo do


comando ping. Dessa forma, interessante sempre liberarmos a sada e a entrada de dados
para a prpria mquina; para tanto, temos a interface loopback lo.

iptables -A INPUT

-i lo -d 127.0.0.1 -j ACCEPT

iptables -A OUTPUT -o lo -s 127.0.0.1 -j ACCEPT

Com essa poltica, a mquina consegue realizar ping a si prpria, ou seja, origem e destino
na prpria mquina.
Exemplo de script de customizao para definir uma poltica para a interface de loopback:

lo
# vi loop.sh
PF=$(which IPtables)
if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit
fi
LO=127.0.0.1
loop ()
{
$PF -A INPUT -i lo -d $LO -j ACCEPT
$PF -A OUTPUT -o lo -d $LO -j ACCEPT
}
loop

# ./loop.sh
Mas essa poltica anterior egosta, pois s possibilita pingar o prprio host, mas nenhum
host ou mesmo outras interfaces do prprio host. Considere que est definido o IP 10.0.0.1
na interface eth0 e deseja-se que o servidor seja capaz de encaminhar a consulta de ping
para qualquer outros host. Dessa forma, necessrio adicionar polticas para echo-resquest
e echo-reply

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type 0 -d 10.0.0.1 -s


0/0 i eth0
# iptables -A OUTPUT -j ACCEPT -p icmp --icmp-type 8 -s 10.0.0.1 -d
0/0 o eth0
Segue uma customizao em scripts shell para ativar a poltica de ping pela interface eth0.

# vi ping2.sh

PF=$(which IPtables)

Captulo 7 - Firewall Parte 1

Figura 7.11
Poltica para
a interface de
loopback.

169

if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit
fi
ETH0=10.0.0.1
ping2()
{
IPtables -A INPUT -j ACCEPT -p icmp --icmp-type 0 -d $ETH0 -s 0/0 i
eth0
IPtables -A OUTPUT -j ACCEPT -p icmp --icmp-type 8 -s $ETH0 -d 0/0
o eth0

$PF -A INPUT -i lo -d $LO -j ACCEPT


$PF -A OUTPUT -o lo -d $LO -j ACCEPT
}
ping

# ./ping2.sh
Seguimos essa lgica para criar uma poltica de exceo para que seja possvel traar rotas
usando o comando mtr do Linux, que uma ferramenta de traceroute que utiliza icmp
(encaminha pacotes echo-request). Porm, sabemos que ele utiliza uma tcnica simplria,
ainda que mais funcional, para enviar pacotes icmp echo-resquest com valores de ttl, os
quais causaro a morte sbita do pacote cada vez que passarem por um roteador, lembrando
que o atestado de bito do pacote o icmp de tempo excedido (time-exceded) tipo 11.
Nosso objetivo seria liberar a execuo do comando mtr ip.ip.ip.ip a partir da mquina
10.0.0.1. Como a sada de icmp echo-resquest j foi liberada anteriormente, simplesmente
bastaria aceitar ICMP tipo 11
Exemplo:

iptables -A input -j ACCEPT -p icmp --icmp-type 11 -d 0/0 -i eth0


Exemplo de script para definir polticas para poder utilizao do
programa mtr:

Hardening em Linux

PF=$(which IPtables)

170

if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit

fi
NET=0/0
ETH0=192.168.200.8
mtr ()
{
$PF -A INPUT -p icmp --icmp-type 11 -s $NET -d $ETH0 -j ACCEPT
}
mtr

# ./mtr.sh
Com a regra de ICMP 11 ativa possvel traar rotas com mtr tendo como alvo um nmero
IP; todavia, se desejar fazer o mesmo com o traceroute do Linux, sabendo que ele utiliza
pacotes UDP tendo como destino portas altas, demanda-se criar uma poltica de exceo.
Nesse caso, por se tratar de um protocolo de transporte, temos de trabalhar com as
portas origem (--sport) e com as portas destino (--dport). Diante desse cenrio, fica claro
que necessrio abrir uma exceo para a comunicao de pacotes UDP. Deve-se tambm
levar em considerao que o traceroute do Linux trabalha de forma incremental para a
porta destino, ao iniciar com o valor de porta alta a partir 33435, incrementando em razo
direta aos nmeros de hops (saltos) e usa a mesma porta de origem, a qual, quando
definida, acaba sendo uma porta livre acima de 1024. Diante disso, a regra dever atender
a todos esses detalhes.

Exemplo
# iptables -A INPUT -p 17 -s 10.0.0.1 --sport 1024:65535 -d 0/0
--dport 33435:33465 -j ACCEPT
O valor 17 referente ao protocolo UDP, vide /etc/protocols).
Em suma, sendo liberado o range de 33435 a 33465, o que d um total de 30 saltos, o suficiente para dar vrias voltas na internet.
Imagine que desejado responder a solicitaes do comando ping outros hosts. Pode-se
criar uma poltica para o ping da seguinte forma: cria-se uma poltica de exceo para a
sada de pacotes icmp echo-reply (tipo 0) e para de entrada de icmp echo-request (tipo 8).
Considerando a mquina em questo com o IP 10.0.0.1.

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type 8 -d 10.0.0.1 -s 0/0


# iptables -A OUTPUT -j ACCEPT -p icmp --icmp-type 0 -s 10.0.0.1 -d 0/0
Assim, foram criadas duas excees, uma para a sada de pacotes de ICMP, que identificado como protocolo tipo 1 (vide a tabela completa /etc/protocols), cujo destino a minha
mquina, indicada por -s que lemos com source, ou seja, origem e destino so indicados
com d, e esto sendo aceitas.

Captulo 7 - Firewall Parte 1

Exemplos:

171

1024:65535

53
Exemplo de script de automao denominado ping_response.sh para liberar a entrada de
pacotes ICMP echo request e a sada de pacotes ICMP echo reply:

# vi ping_response.sh

PF=$(which IPtables)
if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit
fi
NET=0/0
ETH0=192.168.200.8
ping_response ()
{
$PF -A INPUT -p icmp --icmp-type 0 -s $NET -d $ETH0 -j ACCEPT
$PF -A OUTPUT -p icmp --icmp-type 8 -s $ETH0 -d $NET -j ACCEPT
}
ping

# ./ping_response.sh
Mas nas polticas de exceo j exemplificadas para traar as rotas existe uma limitao.
Devido poltica bsica de DROP, no possvel fazer nenhuma resoluo de nome, ou seja,
at o momento o traceroute est liberado somente para IP, no sendo possvel at ento
fazer um mtr ou traceroute para um www.dominio.com.br. Para que isso seja possvel,
deve-se liberar consultas DNS via UDP na porta de servidor, que por padro 53, para a
mquina em questo, a fim de que esta possa fazer a resoluo de nomes. Exemplos:

Iptables

Hardening em Linux

-dport

172

Iptables
-sport

-A
53
-A
53

OUTPUT -p 17 -s 10.0.0.1
-j

INTPUT -p 17 -d 10.0.0.1
-j

- -sport 1024:65535

-d 0/0 -

- -dport 1024:65535

-s 0/0 -

ACCEPT

ACCEP

Exemplo de script denominado dns.sh para que seja se comunicar com servidores DNS:

# vi dns.sh

PF=$(which IPtables)
if [ -z $PF ] ; then
echo Comando IPtables nao encontrado
exit
fi
NET=0/0
ETH0=10.0.0.1
PA=1024:65535

dns ()
{
$PF -A INPUT -p 17 -s $NET --sport 53 -d $ETH0 --dport $PA -j ACCEPT
$PF -A INPUT -p 1 --icmp-type 3 -s $NET -d $ETH0 -j ACCEPT
$PF -A OUTPUT -p 17 -s $ETH0 --sport $PA -d $NET --dport 53 -j
ACCEPT
}
dns

# ./dns.sh
Liberao, entrada e sada de servios TCP e UDP, sem o controle de estado de conexo ou
controle de pacotes relacionados respectivamente, uma forma simplista de fazer tratamento do fluxo de pacotes de comunicao de redes, ou seja, mesmo sendo um o Iptables,
um o firewall do tipo Statefull, so regras do tipo Packet Filter.
Segue um exemplo de regra de cliente assumindo o 10.0.0.1 para o servio portmap cuja
porta padro 111. Segue a mesma lgica de servios TCP: o cliente se conecta em uma
porta de servio tendo a resposta em uma porta alta livre:

iptables -A I,NPUT -j ACCEPT -d 10.0.0.1 -p udp

--sport 111 --dport

iptables -A

OUTPUT -j ACCEPT -s 10.0.0.1 -p udp

--sport 1024:65535

--dport 111
Considerando uma regra, sendo a mquina com a regra de firewall e um servidor:

iptables -A INPUT -j ACCEPT -d 10.0.0.1 -p udp

--sport 111 --dport

1024:65535
iptables -A OUTPUT -j ACCEPT -s 10.0.0.1 -p udp
--dport 111

--sport 1024:65535

Captulo 7 - Firewall Parte 1

1024:65535

173

Considerando a regra que possibilita comunicao com o servio DNS j adicionada, pode-se
executar a resoluo de nomes. Continuando a lgica de firewall, j que possvel traar
rotas e resolver nomes, basta agora liberar a navegao web realizada atravs do protocolo
http, o qual transportado via TCP e, por padro, utiliza a porta de servidor 80.

Iptables

-A

OUTPUT -j

-d 0/0 - -dport
Iptables

-A

ACCEPT -p 6 -s 10.0.0.1

--sport 1024:65535

80

INPUT -j

ACCEPT -p 6 -d 10.0.0.1

--dport 1024:65535

-s 0/0 - -sport

1024:65535

80
Exemplo de script denominado http.sh para automatizar regras para acessar servidores web:

# vi http.sh

PF=$(which iptables)
if [ -z $PF ] ; then
echo Comando iptables nao encontrado
exit
fi
NET=0/0
ETH0=10.0.0.1
PA=1024:65535
http ()
{
$PF -A OUTPUT -p 6 -s $ETH0 --sport $PA -d $NET --dport 80 -j ACCEPT
$PF -A INPUT -p 6 -s $NET --sport 80 -d $ETH0 --dport $PA -j ACCEPT
}

Hardening em Linux

http

174

# ./http.sh
Toda lgica de polticas que aplicamos aqui diz respeito a uma nica mquina, um conceito
de firewall home; mas as polticas podem ser traduzidas para uma situao de rede, o que
faremos a seguir.

Com conceito de polticas de exceo, pode-se criar excees para os protocolos mais utilizados. As excees a seguir partiro do princpio de que a mquina um cliente. Vejamos
exemplos de polticas de exceo para os protocolos SMTP, POP3, IMAP, TELNET, SSH, FTP,
HTTPS, HTTP, considerando o host 10.0.0.1 como host cliente.

Servio - SMTP (porta 25) e porta 587


iptables -A INPUT

-j ACCEPT -d 10.0.0.1 -p tcp

--sport 25 --dport

1024:65535
iptables -A OUTPUT -j ACCEPT -s 10.0.0.1

-p tcp

--sport 1024:65535

--dport 25
iptables -A INPUT -j ACCEPT

-d 10.0.0.1 -p tcp

--sport 587 --dport

1024:65535
iptables -A OUTPUT -j ACCEPT

-s 10.0.0.1

-p tcp

--sport

1024:65535 --dport 587


Mudando de ponto de vista, imagine-se desenvolvendo um firewall para uma mquina
que vai disponibilizar vrios servios assuma-se para fins didticos, pois uma mquina
multiuso no recomendvel; quando projetam-se servidores, necessrio ter em mente
o conceito de Bastion Host, pois consiste em problemas de segurana em uma mquina
e rene vrios servios juntos, pelo de fato de um servio comprometido poder significar
todos os demais tambm comprometidos. Todavia, para ilustrar a liberao de servios via
firewall para clientes, ser assumido que o host em questo deseja liberar para qualquer
cliente os respectivos servios:

Servidor web (porta 80)


iptables -A INPUT -j ACCEPT -d 10.0.0.1 -p tcp

--sport 1024:65535

--dport 80
iptables -A OUTPUT -j ACCEPT -s 10.0.0.1 -p tcp

--sport 80 --dport

1024:65535
As polticas anteriores devem ser utilizadas como base para um firewall home para cada
servidor, negando todos os acessos possveis, exceto o do servio que o servidor oferece.
Nesse exemplo, no colocamos portas essenciais como 23 (telnet) e 22 (ssh), por serem servios de login remoto, e propomos em nossas polticas de firewall sermos mais restritivos,
liberando acesso a servios desse nvel somente a IPs conhecidos.
Uma poltica interessante liberar servios especficos somente para IPs especficos. O
que queremos liberar servios com SSH, WEBMIN, NTOP, SNMP, NESSUS somente para as

Para compreender melhor, considere a mquina 192.168.10.1 como a mquina do administrador, e 10.0.0.1 como uma mquina remota confivel. Veja os exemplos.
Liberando restritivamente o SSH:

iptable -A INPUT -s 10.0.0.1 --sport 1024:65535 -d 192.168.10.1


--dport 22 -j ACCEPT
iptable -A OUTPUT -d 10.0.0.1 --dport 1024:65535 -s 192.168.10.1
--sport 22 -j ACCEPT

Captulo 7 - Firewall Parte 1

mquinas amigas, impossibilitando ao mximo a explorao desse tipo de servio.

175

Com as polticas citadas, j possvel pensar em um firewall de fronteira entre duas ou mais
redes. Para melhor contextualizar a situao, assuma um cenrio onde necessrio liberar
o repasse de pacote entre duas redes locais 192.168.10.0/24 e 10.0.0.0/8, supondo que esse
firewall seja o gateway que atua na fronteira das redes supracitadas. Contudo, para facilitar a parametrizao da regras, ser usado o recurso de multiport, o qual nos possibilita
declarar at 15 portas numa nica regra; dessa vez, no ser necessrio escrever uma regra
para cada protocolo em questo.

iptables -A FORWARD -p 6 -s 10.0.0.0/8 -m multiport --sport


20,21,22,23,25,80,110,143,443 -d 192.168.0.0/24 -m multiport --dport
1024:65535 -j ACCEPT
possvel tambm, em vez de declarar literalmente o protocolo, usar o nmero correspondente, como, por exemplo: 1 para ICMP, 6 para TCP ou 17 para UDP. Caso deseja-se saber os
nmeros dos demais protocolos, basta consultar o arquivo /etc/protocols.
Ou poderamos fazer da forma clssica:

iptables -A FORWARD -d 192.168.10.0/24 -p tcp

--sport 80 --dport

1024:65535 -j ACCEPT
iptables -A FORWARD -d 192.168.10.0/24 -p tcp

--sport 110 --dport

1024:65535 -j ACCEPT
iptables -A FORWARD -d 192.168.10.0/24 -p tcp

--sport 143 --dport

1024:65535 -j ACCEPT

Trabalhando com ICMP (RFC 792)


Customizao de polticas de exceo para tratamento do protocolo ICMP, que um
protocolo muito til na gerncia de rede, mas devido ao grande nmero de tipo de respostas, motiva administradores que tm poucos conhecimentos de TCP/IP a criarem
polticas no adequadas. Outro fato que esse protocolo muito utilizado por ataques para
a elaborao de Ataques de Deny of Service (DOS) e tcnicas de Fingerprint. A tabela a

Hardening em Linux

seguir servir de referncia. Mais detalhes, vide RFC792:

176

TYPE

CODE

Description

Query

Error

Echo Reply

Network Unreachable

Host Unreachable

Protocol Unreachable

Port Unreachable

Fragmentation needed but no frag. bit set

Source routing failed

Destination network unknown

Destination host unknown

Source host isolated (obsolete)

Tabela 7.5
Tipos e cdigos de
retorno inclusos
no cabealho do
protocolo ICMP.

CODE

Description

Query

Error

Destination network administratively


prohibited

10

Destination host administratively prohibited

11

Network unreachable for TOS

12

Host unreachable for TOS

13

Communication administratively prohibited by filtering

14

Host precedence violation

15

Precedence cutoff in effect

Source quench

Redirect for network

Redirect for host

Redirect for TOS and network

Redirect for TOS and host

Echo request

Router advertisement

10

Route solicitation

11

TTL equals 0 during transit

11

TTL equals 0 during reassembly

12

IP header bad (catchall error)

12

Required options missing

13

Timestamp request (obsolete)

14

Timestamp reply (obsolete)

15

Information request (obsolete)

16

Information reply (obsolete)

17

Address mask request

18

Address mask reply

O protocolo ICMP, por ser um protocolo de mensagem, como o prprio nome j diz, no
utilizado normalmente para a troca de dados, e sim para teste e notificaes, sendo a maioria
entre roteadores. No pode-se negar que por ser aparentemente inocente, ele pode ser utilizado em ataques engenhosos. Um bom exemplo de um ataque clssico via a famosa ferramenta Tribo Flood Network (TFN) uma ferramenta DDoS que utiliza pacotes icmp echo-reply
para enviar a ordem de ataque da mquina master para as mquinas zumbis, com informaes como o tipo de ataque e o endereo da vtima para as mquinas-zumbis, mostrando que
at mesmo um datagrama supostamente inocente pode trazer perigo para a rede.

Captulo 7 - Firewall Parte 1

TYPE

177

O fato interessante que muitos ataques DOS utilizam datagramas ICMP, como o Ping da
Morte, Jolt e Smurf.
Entretanto, simplesmente negar trfego de datagramas ICMP de forma arbitrria no inteligente; mas de forma restritiva, especificando exatamente os tipos de mensagens ICMP que
voc julgar conveniente, algo que se pode fazer.
No incio do captulo, foram apresentados exemplos interessantes do uso de mensagens
ICMP. Um dos exemplos o uso do comando ping, que usa duas mensagens: requisio
ICMP ECHO-RESQUEST (tipo 8) e resposta ICMP ECHO-REPLY (tipo 0). Outro exemplo o
atestado de bito de pacotes quando executamos qualquer programa que seja capaz de
trancar a rota, pois quando o valor de TTL zera, o pacote destrudo e a notificao da
morte vem atravs de um ICMP TIME-EXCEEDED (tipo 11), que pode ser dois tipos de cdigo
de mensagem (TTL-ZERO-DURING-TRANSIT e TTL-ZERO-DURING-REASSEMBLY).
Embora com avano das tecnologias de redes de computadores no que tange a infraestrutura de internet, cada vez mais incomum a necessidade de fragmentao de datagramas
motivados por valores de MTU inferiores a 1500 bytes. Mas mesmo assim, quando existe
uma fragmentao de IP o protocolo ICMP volta cena, pois quando a fragmentao
demandada, o roteador utiliza um datagrama ICMP DESTINATION-UNREACHALBLE (tipo 3),
mais especificamente de cdigo FRAGMENTATION (tipo 3, cdigo 4).
O cdigo utilizado tambm em ICMP do tipo o cdigo de PORT-UNREACHABLE (tipo 3,
cdigo 3), usado para notificar que uma porta no possui servio UDP, uma vez que a esta
recebe um datagrama UDP.
Para finalizar, no recomendvel bloquear mensagens do tipo HOST-UNREACHABLE (tipo 3,
cdigo 1) e SOURCE QUENCH (tipo 4, cdigo 0); caso acontea, poderemos ter problemas no
controle das conexes. Respectivamente, a primeira mensagem notifica quando o destino
inalcanvel e a segunda, que o host est sobrecarregado.
Entretanto, para a concepo de polticas de exceo para datagramas ICMP, o IPtables capaz
de tratar cada tipo de mensagem e seus respectivos cdigos; para isso, utilize o comando a
seguir para ver a lista de mensagens e cdigos, e consulte as RFC do ICMP para mais detalhes.

# iptables -p icmp -h
Alguns exemplos genricos:

# iptables -A INPUT -j ACCEPT -s 0/0 -d 10.0.0.1 -p icmp --icmp-type


time-exceeded
# iptables -A INPUT -j ACCEPT -s 0/0 -d 10.0.0.1 -p icmp --icmp-type
echo-replay
# iptables -A INPUT -j ACCEPT -s 0/0 -d 10.0.0.1 -p icmp --icmp-type
destination-unreachable

Hardening em Linux

# iptables -A OUTUT -j ACCEPT -s 0/0 -d 10.0.0.1 -p icmp --icmp-type

178

echo-resquest
Para exemplificar de forma bem especfica, ser ilustrado o tratamento das mensagens
ICMP e o cdigo de mensagem inerente para polticas de repasse (FORWARD).
Tratando ICMP 3 (Unreachable), liberando o repasse, mas com limitao de um datagrama
por segundo:

Liberando cdigo 1 (HOST UNREACHABLE)

# iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 3/1 -m limit --limit


1/s
Liberando o cdigo 3 (PORT UNREACHABLE), resposta de porta UDP
fechada:
iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 3/3 -m limit --limit
1/s
Liberando o cdigo 4 (FRAGMENTATION NEEDED), datagrama utilizado pelo roteador para
notificar que haver fragmentao a partir dele, ou seja, que o valor de MTU no prximo
enlace menor:

# iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 3/4 -m limit --limit


1/s
Tratando ICMP 11 (TIME EXCEEDED), que responsvel pela notificao da morte de um
pacote. No caso de programas que traam rotas, o cdigo padro de resposta 0. Vide o
tratamento a seguir:
Liberando o cdigo 0 (TTL EQUALS 0 DURING TRANSIT), notificao da morte do pacote:

# iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 11/0 -m limit


--limit 1/s
Liberando o cdigo 1 (TTL EQUALS 0 DURING REASSEMBLY), notifica a morte do pacote
durante a sua reconstruo em um roteador. No muito comum, mas conveniente liberar.

# iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 11/1 -m limit


--limit 1/s
Tratando ICMP 4 (SOURCE QUENCH):

# iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 4/0 -m limit --limit


1/s
Tratando o comando PING, liberando respectivamente o ECHO-REPLY tipo 0 cdigo 0, e o
ECHO REQUEST tipo 8 cdigo 0:

# iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 0/0 -m limit --limit


1/s
# iptables -A FORWARD -j ACCEPT -p 1 --icmp-type 8/0 -m limit --limit
1/s -j ACCEPT
Exemplificao de um script para automatizar e gerar as regras para tratamento aos princi-

# vi /root/rascunho/exec.icmp

PF=$(which iptables)
NET=0/0
ETH0=192.168.200.8

Captulo 7 - Firewall Parte 1

pais tipos de ICMP:

179

if [ -z $PF ]; then
echo Comando iptables nao encontrado
exit
fi
for tipo in 0 3/0 3/1 3/2 3/3 3/4 4 5 11 12
do
$PF -A INPUT -p icmp -s $NET -d $ETH0 --icmp-type $tipo -j ACCEPT -m
limit --limit 1/s

Hardening em Linux

done

180

Roteiro de Atividades 7
Prtica de parametrizao de polticas para trfego de rede utilizando o recurso Netfilter
do Kernel do Linux atravs da ferramenta IPtables. Ser necessrio que o aluno utilize a
mquina virtual preparada como Virtuabox. Dessa forma, ser possvel aplicar todos os
conhecimentos (tcnicas e ferramentas) de Hardening propostos at o momento.

Atividade 7.1 Hardening Linux Firewall Linux


1. Construir um script de firewall para tratar:
Polticas de acesso aos protocolos SSH, HTTP, SNMP, considerado a mquina firewall com
servidor (alvo).
Polticas de acesso aos protocolos SSH, DNS, HTTP, NTP considerando a mquina firewall
origem/cliente.
Teste as regras e valide-as.
2. Desenvolva um shell script para tratar os principais tipos de ICMP que um servidor deve
receber. Considere que seja um gateway de fronteira.
Tcnicas de Traceroute so utilizadas para traar a rota da origem at o destino, ou seja,
verificar quantos roteadores h entre a origem e o destino. sabido que o mtr envia pacotes
icmp echo request e espera como resposta o icmp 11 (tempo excedido). Dessa forma,
teremos a exceo para ICMP (para entrada/ input)
TTL equals 0 during transit- TTL equals 0 during reassembly
Trataremos como exceo para entrada e repasse tambm ICMP do TIP em nosso Firewall,
entre eles:
11 Port Unreachable: resposta padro de porta UDP fechada;
11 Host Unreachable: resposta padro para um host fora de alcance;
11 Network Unreachable: que a resposta padro para rede fora de alcance;
11 Port Unreachable: que a resposta padro de porta UDP fechada;
11 Fragmentation needed: tambm conhecido como ICMP PATH Discovery.
Para possibilitar o uso do ping de forma egosta, ou seja, somente o servidor firewall pode

11 Tratar a sada de Echo-request.


11 Tratar a entrada de Echo-reply.
11 Tratar tambm a entrada de mensagens do tipo ICMP Source-quench.
Embora seja uma situao rara, elabore uma poltica de exceo de entrada e repasse para
mensagens IP header bad.
Para evitar possibilidades de ataques de Flood a partir dos tipos de respostas para as quais
foram geradas polticas de exceo, utilize o conceito de limitar datagramas.
Elabore um terceiro script reunindo as funcionalidade dos dois anteriores, copie o script

Captulo 1 - Roteiro de Atividades 7

realizar consulta de Ping, mas no responder.

para o diretrio /etc/init.d e faa-o funcionar automaticamente no runlevel 2.


181

182

Hardening em Linux

8
Aprender conceitos de polticas de controles (registros de eventos/log); Conhecer
regras baseadas em pacotes de conexes relacionadas e regras baseadas em Estado
de Conexo (Statefull); Entender traduo de Endereamento IP (NAT); Aprender
manipulao de campos de Datagrama; Implementar Port Knocking.

de Firewall.

conceitos

Regras de controle; Regras Statefull, NAT e Port Knocking para implementao

Exerccio de nivelamento 1 e
Firewalls
Existem vantagens em registrar eventos arbitrrios via Firewall?

Uma rede baseada em um gateway que realizar NAT para todas as estaes de trabalho
consegue prover segurana suficiente para impossibilitar ataques com origem na internet?
Por qu?

Na sua opinio, a configurao de um Port Knocking uma alternativa para acesso a


recursos administrativos?

Neste captulo, sero apresentados conceitos e regras de controle para registro de possveis
eventos arbitrrios, polticas com o conceito de State Full, implementao de Port Knocking,
traduo de endereamento IP (NAT) e manipulao de datagrama via tabela Mangle.

Captulo 8 - Segurana de Permetro Parte 2

objetivos

Segurana de Permetro Parte 2

183

Regras de controle
Firewall: faz o registro das atividades que no so permitidas.

11 Assim, o administrador, por meio dos logs, pode analisar comportamentos hostis.
Uma tarefa importante do firewall justamente fazer o registro das atividades que no so
permitidas, para que atravs dos logs o administrador possa analisar comportamentos
hostis e tentar antecipar-se quanto s atividades de invasores como Script Kiddies, insider,
Black Hats e GrayHat. Os exerccios a seguir tm por objetivo exemplificar a construo de
polticas de controle.
Uma estratgia que pode ser adotada criar regras para registrar eventos que possam
caracterizar as atividades que estejam relacionadas com aes escusas motivadas pelos
agentes como invasores e/ou malware.

Co

Figura 8.1
Criao de regras
para registro de
eventos: foco no
controle.

nt
ro
le
s

A criao de uma regra de controle que avalie pacotes perdidos, ou seja, pacotes que no
pertencem s conexes estabelecidas ou mesmo ataques de pacotes mal formados recomendvel, pois a incidncia desse tipo de pacote pode caracterizar um ataque de negao
de servios (DOS) em execuo:

# vi /root/rascunho/malformados

PF=$(which iptables)
malformados()
{
for CHAINS in INPUT FORWARD
do
$PF -A $CHAINS -m state --state INVALID -j LOG --log-prefix
pkt_bad
$PF -A $CHAINS -m

state --state INVALID -j DROP

done

Hardening em Linux

184

malformados
Comandos para teste do script o script e listagem das regras ativas:

# bash malformados.fw
# iptables -L -n

Outro comportamento que pode ser monitorado o uso de combinaes de flags TCP no
convencionais, que podem ser utilizados em ataques de varreduras e negao de servio.
Script para automatizar definio de polticas de controles de ataque de pacotes com
flags furadas:

# vi /root/rascunho/flags.tcp
PF=$(which iptables)

flags_furado()
{
for FLAGS in $(cat /etc/fw/flags.tcp | grep -v ^#)
do
for CHAINS in INPUT FORWARD
do
$PF -A $CHAINS -p 6 --tcp-flags $FLAGS $FLAGS -j LOG
--log-prefix flag_$FLAGS
$PF -A $CHAINS -p 6 --tcp-flags $FLAGS $FLAGS -j DROP
done
done
}
flags_furado
# vim /etc/fw/flags.tcp
NONE
ALL
FIN,RST
SYN,RST

Comandos para teste do script o script e listagem das regras ativas:

# bash flags.tcp
# iptables -L -n
Vigiar portas clssicas utilizadas por malware ou mesmo ferramentas indesejadas. Pois
mesmo que o firewall tenha o conceito restritivo em sua poltica bsica, ainda sim negando o
acesso s portas que no foram expressamente liberadas, caso ocorram aes relacionadas
a essas portas, elas devem ser registradas para auditoria.

Captulo 8 - Segurana de Permetro Parte 2

FIN,URG,PSH

185

Exemplificao de um script para definir polticas de controles para acesso a portas indevidas:

# vi /root/rascunho/indevidas_tcp_udp
# vim /etc/fw/indevidas_tcp_udp
# netbus
12345
12346
# IRC
6660:6669
# BO
31337
31336
666
Comandos para teste do script o script e listagem das regras ativas:

# cd /root/rascunho/
# bash indevidas_tcp_udp
# iptables -L -n
Seguindo a mesma lgica de portas indevidas, vale um tratamento especial para porta de ferramentas P2P, onde ao invs de simplesmente bloquear, pode ser interessante liberar, mas limitar
o trfego de tal forma que seja ruim o uso desse tipo de ferramenta, pois bloquear diretamente
pode motivar usurios mais arrojados a tentar meios de contornar o firewall. Liberar com limitao pode desmotiv-los a usar a ferramenta, pois o download ser muito lento.
Exemplo de script para definir polticas de controles para aplicaes P2P:

# vi /root/rascunho/p2p
PF=$(which iptables)

indevidas_tcp_udp()
{
for PORTAS in $(cat /etc/fw/indevidas_tcp_udp | grep -v ^#)
do

Hardening em Linux

for CHAINS in INPUT FORWARD


do
for PROTO in tcp udp
do
$PF -A $CHAINS -p $PROTO
indevidas_$PORTAS
186

--dport $PORTAS -j LOG --log-prefix

done
done
done
}
indevidas_tcp_udp
# vim /etc/fw/p2p

# GNUtella
6346
6246
#Kazaa
1214
5000
8888
6257
Comandos para teste do script o script e listagem das regras
ativas:
# cd /root/rascunho/
# bash p2p
# iptables -L -n
Deve ser de conhecimento de todos os administradores de rede os conceitos de classe de
rede. Dessa forma, bloquear as ranges de IP no roteveis na internet, que so definidas
pelo IANA, pode ser uma ao interessante para mitigar ataques baseado em falsificao de
IP (Ip Spoofing).
Segue um exemplo de script para definir polticas de controles para pacotes com enderea-

PF=$(which iptables)

iana()
{
for IP in $(cat /etc/fw/iana | grep -v ^#)
do
for CHAINS in INPUT
do

Captulo 8 - Segurana de Permetro Parte 2

mento reservado do IANA, que possivelmente so pacotes forjados:

187

$PF -A $CHAINS -i eth0 -p 0 -s $IP -j LOG --log-prefix


IANA_$IP
$PF -A $CHAINS -i eth0 -p 0 -s $IP -j DROP
done
}
iana

Hardening em Linux

Arquivo /etc/fw/iana.

188

0.0.0.0/8

90.0.0.0/8

218.0.0.0/8

1.0.0.0/8

91.0.0.0/8

219.0.0.0/8

2.0.0.0/8

92.0.0.0/8

220.0.0.0/8

5.0.0.0/8

93.0.0.0/8

221.0.0.0/8

7.0.0.0/8

94.0.0.0/8

222.0.0.0/8

23.0.0.0/8

95.0.0.0/8

223.0.0.0/8

27.0.0.0/8

96.0.0.0/8

224.0.0.0/4

31.0.0.0/8

97.0.0.0/8

240.0.0.0/8

36.0.0.0/8

98.0.0.0/8

240.0.0.0/5

37.0.0.0/8

99.0.0.0/8

241.0.0.0/8

39.0.0.0/8

100.0.0.0/8

242.0.0.0/8

41.0.0.0/8

101.0.0.0/8

243.0.0.0/8

42.0.0.0/8

102.0.0.0/8

244.0.0.0/8

58.0.0.0/8

103.0.0.0/8

245.0.0.0/8

59.0.0.0/8

104.0.0.0/8

246.0.0.0/8

60.0.0.0/8

105.0.0.0/8

247.0.0.0/8

67.0.0.0/8

106.0.0.0/8

248.0.0.0/8

68.0.0.0/8

107.0.0.0/8

249.0.0.0/8

69.0.0.0/8

108.0.0.0/8

250.0.0.0/8

70.0.0.0/8

109.0.0.0/8

251.0.0.0/8

71.0.0.0/8

110.0.0.0/8

252.0.0.0/8

72.0.0.0/8

111.0.0.0/8

253.0.0.0/8

73.0.0.0/8

112.0.0.0/8

254.0.0.0/8

74.0.0.0/8

113.0.0.0/8

255.0.0.0/8

75.0.0.0/8

114.0.0.0/8

76.0.0.0/8

115.0.0.0/8

77.0.0.0/8

116.0.0.0/8

78.0.0.0/8

117.0.0.0/8

79.0.0.0/8

118.0.0.0/8

80.0.0.0/8

119.0.0.0/8

81.0.0.0/8

120.0.0.0/8

82.0.0.0/8

121.0.0.0/8

83.0.0.0/8

122.0.0.0/8

84.0.0.0/8

123.0.0.0/8

85.0.0.0/8

124.0.0.0/8

86.0.0.0/8

125.0.0.0/8

87.0.0.0/8

126.0.0.0/8

88.0.0.0/8

197.0.0.0/8

89.0.0.0/8

201.0.0.0/8

Tabela 8.1
O arquivo
/etc/fw/iana.

Comandos para teste do script o script e listagem das regras ativas:

# cd /root/rascunho/
# bash iana.ip
# iptables -L -n
natural que o seu firewall de fronteira seja vtima de varreduras. Uma bastante comum
a varredura furtiva, baseadas nas flags urg, psh e rst do segmento TCP, ou em pacotes TCP
que no tm nenhuma flag habilitada. Isso posto, implemente uma regra de controle para
registrar esse tipo de pacote e posteriormente DROP o pacote. Faa um shell script com
funo para essa regra.

PF=$(which iptables)
liberatudo()
{
for CHAINS in INPUT OUTPUT FORWARD
do
$PF -P $CHAINS ACCEPT
done
$PF -F
}
liberatudo
Comandos para teste do script o script e listagem das regras ativas:

# cd /root/rascunho
# bash liberatudo
# iptables -nL

Criando Chains
1 - Criar um script com CHAIN para aceitar somente a entrada de pacotes ICMP tipo 0, 11, 3 e 4:

# vi icmp_type.sh
NET=0/0
ET0=192.168.0.24
PF=$(which iptables)

icmptype( )
{
$PF -N ALLOW_ICMP

Captulo 8 - Segurana de Permetro Parte 2

a) Gerando uma funo usando recurso de chains para tratar conexes ICMP:

189

T=0 3 11 4

for TYPE in $T
do

$PF -A ALLOW_ICMP -p 1 --icmp-type $TYPE -s $NET -d $ET0 -j

ACCEPT
done

$PF -A INPUT -p 1 -j ALLOW_ICMP


}
Comandos para teste do script o script e listagem das regras ativas:

# ./ icmp_type.sh
# iptables n -L
Gerando uma funo usando recurso de chains para tratar conexes ICMP sendo explcito
quanto aos tipos que devemos tratar, que foram estudados anteriormente.

$PF -N ALLOW_ICMP
NET=0/0
ET0=192.168.200.9
PA=1024:65535
PF=$(which iptables)
$PF -A ALLOW_ICMP -j ACCEPT -m limit --limit 2/s
for TIPO in 0 3/0 3/1 3/2 3/3 3/4 4 5 11 12
do
$PF -A INPUT -j ALLOW_ICMP -p 1 -s $NET -d $ET0 --icmp-type $TIPO
done
$PF -A OUTPUT -j ALLOW_ICMP -p 1 -d $NET -s $ET0 --icmp-type 8
O recurso para a criao de uma chains especfica que possibilite tornar mais arrojado o
tratamento dos pacotes. Uma boa situao para ser parametrizada em uma chain particular
Hardening em Linux

so as conexes TCP, onde pode-se combinar o recurso de tratamento statefull com uma
chain especfica. Assim, todas as conexes TCP expressamente permitidas podem ter o seu
fluxo de pacote transferido para essa chains, otimizando o firewall.
Exemplo de um script customizado para esse fim, considerando o contexto onde as regras
atuaro nas mesmas mquinas e provero o servio tendo como cliente exclusivamente a
rede 192.168.100.0/24. Aproveitando ainda o conceito de estado de conexo, dessa forma as
regras sero restritivas para as portas-alvo, no que tange o conceito de handshake tcp, mas
190

a resposta (OUTPUT) ser tratada por uma regra simples que considerar somente pacotes
relacionados e de uma conexo j estabelecida. Isso economiza regras e processamento:

# vi state_tcp1.sh
PF=$(which iptables)

statetcp1()
{
$PF -N ALLOW_TCP
$PF -A ALLOW_TCP -p 6 --syn -j ACCEPT
$PF -A ALLOW_TCP -p 6 -m state --state ESTABLISHED,RELATED -j ACCEPT
$PF -A ALLOW_TCP -p 6 ! --syn -m state --state NEW -j LOG \
--log-prefix New not syn:
$PF -A ALLOW_TCP -p tcp ! --syn -m state --state NEW -j DROP
}
for PORTA in $(cat /etc/fw/portasservico.tcp | grep -v ^#)
do

$PF -A INPUT

-j ALLOW_TCP -s 192.168.100.0/24 --dport $PORTA

Done
$PF -A OUTPUT -j ACCEPT TCP -p 6 -m state --state
ESTABLISHED,RELATED

$PF -A INPUT -j ACCEPT TCP -p 6 -m state --state


ESTABLISHED,RELATED

Segundo exemplo, similar ao anterior, mas onde a customizao tem o ponto de vista de
cliente de uma lista definida de servios:

vi state_tcp2.sh
PF=$(which iptables)

statetcp2()
{
$PF -N ALLOW_TCP

Captulo 8 - Segurana de Permetro Parte 2

# ./state_tcp1.sh

191

$PF -A ALLOW_TCP -p 6 --syn -j ACCEPT


$PF -A ALLOW_TCP -p 6 -m state --state ESTABLISHED,RELATED -j ACCEPT
$PF -A ALLOW_TCP -p 6 ! --syn -m state --state NEW -j LOG \
--log-prefix New not syn:
$PF -A ALLOW_TCP -p tcp ! --syn -m state --state NEW -j DROP

for PORTA in $(cat /etc/fw/portascliente.tcp | grep -v ^#)


do

$PF -A OUTPUT

-j ALLOW_TCP -d 192.168.100.0/24 --dport $PORTA

Done
$PF -A INPUT -j ACCEPT

-p 6 -m state --state

ESTABLISHED,RELATED

}
# ./state_tcp2.sh

Construindo um script de firewall


Configurao de script para oficializar regras do firewall:

11 Depois de testado, deve ser inserido no /etc/init.d


11 E definido para ser inicializado com um script de runlevel.
A configurao de um script para oficializar a regras do firewall a melhor soluo. Esse
script, uma vez testado, deve ser inserido no /etc/init.d e definido para ser inicializado com
um script de runlevel.
Colocar o script para ser carregado durante o boot no nvel padro e inicializao do seu
Linux, lembrando que as distribuies like Debian e RedHat seguem o modelo System V, e
Like Slackware segue o modelo BSD. No caso de distribuies Like Debian, como Ubuntu, o
recomendado o runlevel 2 e, para distribuies Like Redhat, como Fedora e Suse, o recomendvel o runlevel 3.

Hardening em Linux

Segue um exemplo de um firewall Home, destinado defesa exclusiva da prpria mquina

192

nesse exemplo, considerando que um servidor Web e FTP:

#!/bin/bash
FW=/sbin/iptables

##-------------------------------clear
echo INICIANDO FIREWALL
echo Fecha tudo
$FW -F

for TABELA in INPUT OUTPUT FORWARD


do
$FW -P $TABELA DROP
done

##-------------------------------echo Poltica LOOPBACK


$FW -A INPUT -j ACCEPT -i lo
$FW -A OUTPUT -j ACCEPT -o lo

##-------------------------------echo Poltica PING EGOISTA


$FW -A INPUT -j ACCEPT -d 10.197.25.228 -p icmp -m icmp --icmp-type 0
$FW -A OUTPUT -j ACCEPT -s 10.197.25.228 -p icmp -m icmp --icmp-type 8

##-------------------------------#ATESTADO DE MORTE DO PACOTE

$FW -A INPUT -j ACCEPT -d 10.197.25.228 -p icmp -m icmp --icmp-type 11

##-------------------------------echo Poltica DHCP


$FW -A OUTPUT -j ACCEPT -p udp -m udp --dport 68
$FW -A INPUT -j ACCEPT -p udp -m udp --sport 68

##--------------------------------

Captulo 8 - Segurana de Permetro Parte 2

echo Poltica Traceroute

193

echo Poltica CLIENTE UDP


for PORTA in 53 514
do
$FW -A OUTPUT -j ACCEPT -s 10.197.25.228 -p udp -m udp --sport
1024:65535 --dport $PORTA
$FW -A INPUT -j ACCEPT -d 10.197.25.228 -p udp -m udp --sport
$PORTA --dport 1024:65535

done

##-------------------------------echo Poltica de SERVIDOR TCP


for PORTA in

21 80 443

do
$FW -I INPUT -j ACCEPT -p tcp -d 10.197.25.228

-m state --state

NEW,ESTABLISHED --sport $PORTA --dport 1024:65535


done
$FW -I OUTPUT -j ACCEPT -p tcp -s 10.197.25.228

-m state --state

ESTABLISHED --sport 1024:65535


Outro exemplo do esqueleto de um script de Runlevel notoriamente baseado em System V
com o cabealho padro reconhecido por ferramentas como ntsysv disponvel em distribuio Like Redhat:

#!/bin/sh
# chkconfig: 345 10 10
# description: Controle de

Filtros Pacotes e Estado de Conexao

SF=/sbin/iptables
MEUIP=192.168.100.1
CLIENTE=1024:65535

Hardening em Linux

#===========================
#AQUI ENTRAM AS FUNCOES
#===========================
case $1 in
start|-s)

194

#Aqui sao ativadas as funcoes

;;
stop|-p)
# funcao que limpa as regras do firewall da memoria
;;

restart|-r)

$0 stop

$0 start

;;

status|-c)
$PF -L -n
;;
*)
echo Use: $0 { |start|stop|restart|status| }

exit 1
;;
esac
exit
Segue um terceiro exemplo, agora um script completo, para uma possvel soluo de Script
de Firewall de Fronteira:

#!/bin/sh
#
# Packetfilter

Controle de regras bsica de Filtro (police)

# description: Controle de regras bsicas de Filtros (police) Designer by 4NIX - www.4NIX.com.br


############################ Coloque aqui as variveis

PF=/sbin/iptables
NET=0/0
ET0=192.168.200.9
PA=1024:65535

Captulo 8 - Segurana de Permetro Parte 2

# chkconfig: 345 10 10

195

############################ Coloque aqui as funes

liberadns()
{
$PF -A INPUT -p 17 -s $NET --sport 53 -d $ET0 --dport $PA -j ACCEPT
$PF -A INPUT -p 1 --icmp-type 3/3 -s $NET -d $ET0 -j ACCEPT
$PF -A OUTPUT -p 17 -s $ET0 --sport $PA -d $NET --dport 53 -j ACCEPT
}

trojan()
{
for PORT in $(cat /root/firewall/trojanporta.txt)
do
for TABELA in INPUT FORWARD
do
for PROTO in udp tcp
do
$PF -A $TABELA -j LOG --log-prefix TROJAN $PORT -p
$PROTO --dport $PORT
$PF -A $TABELA -j DROP -p $PROTO --dport $PORT
done
done
done
}

negatudo()
{

Hardening em Linux

$PF -P INPUT DROP

196

$PF -P OUTPUT DROP


$PF -P FORWARD DROP
}

liberatudo()
{
$PF -P INPUT ACCEPT
$PF -P OUTPUT ACCEPT
$PF -P FORWARD ACCEPT
}

liberamtr()
{
$PF -A INPUT -p icmp --icmp-type 11 -s $NET -d $ET0 -j ACCEPT
}

liberaping()
{
$PF -A INPUT -p icmp --icmp-type 0 -s $NET -d $ET0 -j ACCEPT
$PF -A OUTPUT -p icmp --icmp-type 8 -s $ET0 -d $NET -j ACCEPT
}

reject_tcp()
{
$PF -A INPUT -j REJECT --reject-with tcp-reset -p 6 -s $NET --dport
22
$PF -A OUTPUT -j ACCEPT -p 6 --sport 22 -d $NET

reject_udp()
{
$PF -A INPUT -j REJECT -p 17 -s $NET --dport 514
$PF -A OUTPUT -j ACCEPT -p 1 --icmp-type 3/3 -m limit --limit 1/s -d
$NET
}

Captulo 8 - Segurana de Permetro Parte 2

197

state_icmp()
{
$PF -N ALLOW_ICMP
$PF -A ALLOW_ICMP -j ACCEPT -m limit --limit 2/s
for TIPO in 0 3/0 3/1 3/2 3/3 3/4 4 5 11 12
do
$PF -A INPUT -j ALLOW_ICMP -p 1 -s $NET -d $ET0 --icmp-type $TIPO
done
$PF -A OUTPUT -j ALLOW_ICMP -p 1 -d $NET -s $ET0 --icmp-type 8
}

state_tcp()
{
$PF -N ALLOW_TCP
$PF -A ALLOW_TCP -p 6 --syn -j ACCEPT
$PF -A ALLOW_TCP -p 6 -m state --state NEW,ESTABLISHED,RELATED -j
ACCEPT
$PF -A ALLOW_TCP -p 6 ! --syn -m state --state NEW -j LOG --logprefix New not syn:
$PF -A ALLOW_TCP -p 6 ! --syn -m state --state NEW -j DROP
$PF -A INPUT -j ALLOW_TCP
$PF -A OUTPUT -j ALLOW_TCP
}

limpatudo()
{
$PF -F

Hardening em Linux

$PF -Z

198

$PF -X
}

status()

{
$PF -nL -t filter
}

##### Inicio do Case

case $1 in
start)
setup_kernel
limpatudo
negatudo
liberadns
liberamtr
liberaping
state_tcp
state_icmp
reject_tcp
reject_udp
;;
stop)
limpatudo
liberatudo

fechado)
limpatudo
negatudo
;;
liberado)
limpatudo
liberatudo
;;

Captulo 8 - Segurana de Permetro Parte 2

;;

restart)
199

$0 stop
$0 start
;;
status)
status
;;
*)
echo Use: $0 {start|stop|restart|status|liberado|fechado}
exit 1
;;
esac

exit 0

Trabalhando com traduo de endereamento IP


Um recurso muito til para redes baseadas no protocolo IPv4, que tambm est disponvel
no Iptables, o recurso de NAT.
O recurso de NAT amplamente utilizado e talvez tenha sido um dos recursos desenvolvidos para o protocolo IPv4 que por consequncia aumentou a vida do IPv4 e adiou a implementao do IPv6.
Outro ponto do NAT que relevante o fato de que muitos administradores assume que o NAT
sozinho um fator de segurana inabalvel. Na prtica, ter uma rede atrs do NAT pode ajudar
o conceito de segurana de Permetro em alguns momentos, mas uma rede atrs de um NAT
no est inalcanvel: existem vrias ameaas baseadas em tcnicas de ataques a clientes que
provam isso, como por exemplo vulnerabilidades em navegadores. Outro bom exemplo so os
malwares que utilizam a tcnica de connect back para possibilitar acesso remoto.
O IPtables tem a tabela NAT dedicada a controlam o fluxo de pacotes que demanda a traduo dos endereos que atravessam o cdigo de roteamento feito pelo kernel do Linux. Esse
recurso possvel de ser implementado de trs formas, as quais podemos chamar de chains:
11 PREROUTING: manipulao dos datagramas que chegam da internet para um servidor
em um permetro interno, normalmente utilizada para Nat reverso;
11 OUTPUT: a manipulao dos datagramas que tm origem na prpria mquina firewall e

Hardening em Linux

at podem atender regras de repasse que necessitem de traduo IP;

200

11 POSTROUTING: manipulao dos datagramas de um permetro interno com destino


internet, necessitando de traduo IP.

Exemplo de parametrizao de um Mascaramento (IP masquerading), da rede interna


10.0.0.0/16 para a internet:

# iptables A FORWARD s 10.0.0.0/16 j ACCEPT


# iptables -t nat -A POSTROUTING o eth1

-s 10.0.0.0/16

-j

MASQUERADE
#

echo 1 >/proc/sys/net/ipv4/ip_forward

A regra de mascaramento anterior tem como objetivo permitir que toda a rede 10.0.0.0/16
possa sair para a internet com o fluxo de pacotes com sada definida pela interface eth1, que
a interface com IP de internet nesse exemplo.
A realizao de traduo de IP invlido (no rotevel na internet) para vlido (rotevel na
internet) na sada e o inverso no retorno de cada datagrama pode ser realizada com o mdulo
MASQUERADE, mas vlido lembrar que o MASQUERADE uma forma especial Source
Nat/SNAT. O MASQUERADE deve ser usado quando o IP da interface que est conectada
internet configurado dinamicamente. Um exemplo clssico so as conexes ADSL. Quando
o IP for fixo, como comum em um link dedicado, o recomendvel usar o SNAT. Segue um
exemplo feito com o SNAT equivalente soluo com MASQUERADE exemplificada:

# iptables A FORWARD s 10.0.0.0/16 j ACCEPT


# iptables -t nat -A POSTROUTING -s 10.0.0.1 -o eth0 -j SNAT -to
200.1.2.3
#

echo 1 >/proc/sys/net/ipv4/ip_forward
Observe que no caso do SNAT o IP j pr-definido e, no caso do MASQUERADE,
haver uma consulta para identificar o IP da interface.

Para listar as polticas de NAT ativas, deve-se informar a tabela, conforme exemplificado:

# iptables t nat n -L
Outra possibilidade de traduo de endereo de datagramas atravs do uso do recurso
SNAT especificar faixas de endereos e portas que sero substitudas na sada do datagrama usado pela interface definida:

# iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j SNAT -to

Pode-se ainda predefinir uma faixa de portas:

# iptables -t nat -A POSTROUTING p

6 -s 10.0.0.0/16 -o eth0 j SNAT

--to 200.1.2.1-200.1.2.3.4:35000-35500
Quando definido uma range de portas e IPs, internamente usamos um algoritmo baseado
em circular (round robin) para traduo do endereamento (NAT) de cada conexo.
Outra forma til de NAT o Reverso, onde se deseja publicar uma porta de um servidor
interno para a internet. Veja os exemplos:
Regra para entrada do fluxo de pacotes:

# iptables -t nat -A PREROUTING i eth1 p 6 d 200.1.2.1 -dport 80


-j DNAT -to-destination 10.0.0.2:80

Captulo 8 - Segurana de Permetro Parte 2

200.1.2.1-200.1.2.3.4

201

Regra para sada do fluxo de pacotes:

# iptables t nat A POSTROUTING o eth0 p 6 s 10.0.0.1 -sport 80


j SNAT -to-source 200.170.203.68:80
Caso o administrador queira fazer o tratamento do NAT de uma rede de forma mais restritiva, basta apenas definir as portas e os protocolos os quais deseja-se permitir que suas
respectivas comunicaes sejam tratadas pela regra de NAT para ter acesso internet. Veja
o exemplo das portas 80, 110 e 1423:

iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -p 6 --sport 80 --dport


1024:65535 -j SNAT -to S200.1.2.3
iptables

-t

nat -A POSTROUTING -s 10.0.0.0/16 -p 6 --sport 110

--dport 1024:65535 -j SNAT -to 200.1.2.3

iptables -t nat

-A POSTROUTING -s 10.0.0.0/16 -p 6 --sport 143

--dport 1024:65535 -j SNAT -to 200.1.2.3


Podemos usar o recurso de multiport combinando tambm com POSTROUTING.
Exemplo:

iptables -t nat -A POSTROUTING

-p 6 -s 10.0.0.0/16 -m

multiport --sport 1024:65535 -d 0/0 -m multiport --dport


20,21,22,23,25,80,110,143,443 -j SNAT -to 200.1.2.

Trabalhando com redirecionamento de portas


O redirecionamento de portas possibilita modificar conexes com destino a uma porta
definida para outra porta na mesma mquina. O recurso de REDIRECT usado para fazer o
redirecionamento parametrizando a porta com opo - - to-port.
Um exemplo bem prtico de utilizao de redirecionamento seria para estabelecer um
proxy transparente, redirecionando qualquer conexo destinada a 80 para a porta do Proxy.
Veja o exemplo a seguir:

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j


REDIRECT --to-port 3128
Cenrio NAT 1: uma mquina tem duas interfaces de rede eth0 e eth1. Esse Host est se
comunicando com a rede interna (LAN) de uma empresa e com a internet ao mesmo tempo,
sendo que o endereo IP da interface eth0 192.168.200.35, essa interface se comunica com
a rede interna, o endereo IP da interface eth1 200.204.0.164 (IP vlido) e essa interface
est direto na internet. O objetivo compartilhar a internet para todas as mquinas da rede

Hardening em Linux

192.168.200.0/24. Elabore um script que execute essa tarefa:

202

# vi nat.sh

PF=$(which iptables)
if [ -z $PF ] ; then

echo Comando iptables nao encontrado


exit
fi
func_nat ()
{

$PF -t nat -A POSTROUTING -s 192.168.200.0/24 -o eth1 -j SNAT -to


200.204.0.164
}
func_nat

# ./nat.sh
Cenrio NAT 2: exemplificando o uso de criao de chain e o uso de regras com estado
de conexo para criar uma funo que vai incrementar as portas a partir de um arquivo
externo, considerando os pacotes oriundos na rede interna com destino internet:

PF=$(which iptables)
$PF -N ALLOW_TCP
NET=0/0
MINHANET=192.168.200.0/24
CLI=1024:65535
$PF -A ALLOW_TCP -p 6 --syn -j ACCEPT
$PF -A ALLOW_TCP -p 6 -m state --state NEW,ESTABLISHED,RELATED -j
ACCEPT
$PF -A ALLOW_TCP -p 6 ! --syn -m state --state NEW -j LOG --logprefix New not syn:

for PORTA in $(cat /etc/fw/portascli.tcp | grep -v ^#)


do
$PF -A
dport

FORWARD -J ALLOW_TCP -s $MINHANET -d 0/0 - -sport $CLI

- -

$PORT
done

$PF -t nat -A POSTROUTING -s $MINHANET -o eth1 -j SNAT -to 200.204.0.164

Captulo 8 - Segurana de Permetro Parte 2

$PF -A ALLOW_TCP -p 6 ! --syn -m state --state NEW -j DROP

203

Monitoramento das conexes feitas na tabela NAT


Toda a atividade de traduo de IPs registrada no arquivo /proc/net/ip_conntrack, sendo
possvel consultar esse registro. Para visualizar o uso do comando:

# cat /proc/net/ip_conntrack
Sero listadas todas as conexes que esto sendo tratadas pelo mdulo NAT. Outra forma
interessante deixar fixada a sada em um terminal que no est em uso:

# tail f /proc/net/ip_coontrack >> /dev/tty12 &.

Usando a Tabela Mangle


Um recurso poderoso do iptables a capacidade de reescrever valores de campos essenciais de um datagrama. evidente que deixamos de simplesmente fazer um roteamento
inteligente a partir de polticas predefinidas. Nesse nvel de tratamento, o datagrama ser
reconstrudo/reescrito, ou seja, reescrito, o que, inicialmente, observando de uma forma
mais direta, um timo recurso, mas se voc uma daquelas pessoas que gosta de ressuscitar mquinas com Linux, entenda que a manipulao de datagramas demanda mais
um pouco de processamento. Dependendo do nvel de trfego, talvez no seja interessante
utilizar os recursos da tabela Mangle; ou, ainda, se a mquina em questo for um firewall
de fronteira; por outro lado, ser for um hardware com boa capacidade de processamento,
usufrua desse recurso. Pode-se utilizar os recursos da tabela mangle com PREROUTING,
FORWARD e OUTPUT.
Um bom exemplo de utilizao da tabela mangle a possibilidade de manipulao do
campo TOS (Type of Service) utilizando a opo --set-tos TOS, que define a nova prioridade
dos pacotes tendo como base o TOS. Os valores aceitos so os seguintes para TOS:
11 Espera Mnima: Minimize-Delay, 16 ou 0x10;
11 Mximo Processamento: Maximize-Throughput, 8 ou 0x08;
11 Mxima Confiana: Maximize-Reliability, 4 ou 0x04;
11 Custo Mnimo: Minimize-Cost, 2 ou 0x02;
11 Prioridade Normal: Normal-Service, 0 ou 0x00.
Um datagrama definido por padro com o valor TOS ajustado como prioridade normal
(bits ajustados para 0x00). Com o recurso, podemos manipular esse campo aumentando a
prioridade a ser dada ao datagrama; por outro lado, essa manipulao no faz grande diferena na internet, pois no poltica dos roteadores de fronteira e muito menos de sistemas
autnomos tratarem desse campo. Pelo menos no seu gateway essa poltica far diferena.
Exemplificando o uso do mangle ao definir prioridade mnima para os respectivos protocolos:
Protocolo FTP:

Hardening em Linux

Datagramas montados na prpria mquina Firewall:

# iptables -t mangle -A OUTPUT -o eth0 -p 6 --dport 21 -j TOS --settos 0x10


Datagramas que atravessam a mquina para outra rede:

# iptables -t mangle -A FORWARD -o eth0 -p 6 --dport 21 -j TOS


--set-tos 0x10

204

Datagramas que atravessam a mquina saindo para a internet:

# iptables t mangle A POSTROUTING o eth0 p 6 -dport 21 j TOS


-set-tos 0x10

Protocolo Telnet
Datagramas montados na prpria mquina firewall:

# iptables -t mangle -A OUTPUT -o eth0 -p 6 --dport 23 -j TOS --settos 0x10


Datagramas que atravessam a mquina para outra rede:

# iptables -t mangle -A FORWARD -o eth0 -p 6 --dport 23 -j TOS


--set-tos 0x10
Datagramas que atravessam a mquina saindo para a internet:

# iptables t mangle A POSTROUTING o eth0 p 6 -dport 23 j TOS


-set-tos 0x10

Protocolo DNS
Datagramas montados na prpria mquina firewall:

iptables -t mangle -A OUTPUT -o eth0 -p 17 --dport 53 -j TOS

--set-tos 0x10
Datagramas que atravessam a mquina para outra rede:

# iptables -t mangle -A FORWARD -o eth0 -p 17 --dport 53 -j TOS


--set-tos 0x10
Datagramas que atravessam a mquina saindo para a internet:

# iptables t mangle A POSTROUTING o eth0 p 17 -dport 53 j TOS


-set-tos 0x10

Protocolo IRC
Datagramas montados na prpria mquina firewall:

--set-tos 16
Datagramas que atravessam a mquina para outra rede:

# iptables -t mangle -A FORWARD -o eth0 -p 6 --dport 6666-6668 -j


TOS --set-tos 16
Datagramas que atravessam a mquina saindo para a internet:

# iptables t mangle A POSTROUTING o eth0 p 6 -dport 6666-6668


j TOS -set-tos 16

Captulo 8 - Segurana de Permetro Parte 2

# iptables -t mangle -A OUTPUT -o eth0 -p 6 --dport 6666-6668 -j TOS

205

Protocolo FTP-Data
Datagramas montados na prpria mquina Firewall:

# iptables -t mangle -A OUTPUT -o eth0 -p 6 --dport 20 -j TOS --settos 8


Datagramas que atravessam a mquina para outra rede:

# iptables -t mangle -A FORWARD -o eth0 -p 6 --dport 20 -j TOS


--set-tos 8
Datagramas que atravessam a mquina saindo para a internet:

# iptables t mangle A POSTROUTING o eth0 p 6 -dport 20 j TOS


-set-tos 8

Protocolo ICQ
Datagramas montados na prpria mquina firewall:

# iptables -t mangle -A OUTPUT -o eth0 -p 17 --dport 4000 -j TOS


--set-tos 0
Datagramas que atravessam a mquina para outra rede:

# iptables -t mangle -A FORWARD -o eth0 -p 17 --dport 4000 -j TOS


--set-tos 0x10
Datagramas que atravessam a mquina saindo para a internet:

# iptables t mangle A POSTROUTING o eth0 p 17 -dport 40001 j


TOS -set-tos 0x10

Protocolo SSH
Datagramas que atravessam a mquina para outra rede:

# iptables -t mangle -A FORWARD -o eth0 -p 6 --dport 22 -j TOS


--set-tos 16
Datagramas que atravessam a mquina, saindo para a internet:

# iptables t mangle A POSTROUTING o eth0 p 6 -dport 22 j TOS


-set-tos 16
Para listar as polticas definidas na tabela mangle:

# iptables nL t mangle
Definindo polticas a partir do Mac Address, exemplo onde confere com a mquina o ende Hardening em Linux

reo ethernet igual a 00:0C:6E:17:1A:E6.

206

# iptables -t filter -A INPUT -m mac --mac-source 00:80:AD:B2:60:0B


-j DROP

Analisando o contedo dos datagramas


O IPtables possibilita a verificao do contedo de um datagrama atravs do mdulo Sting
e a definio do que ser feito com esse pacote, ou seja, nesse contexto, o Iptables torna-se
um firewall que atua na Camada 7 (OSI/ISO).
Embora a proposta seja de uma anlise rpida, o tratamento demanda uma anlise do contedo de cada pacote que atenda poltica estabelecida. Veja o exemplo a seguir:

Kazaa
#

iptables -A FORWARD -m string --algo bm --string X-Kazaa -j

DROP
#

iptables -A FORWARD -m string --algo bm --string X-Kazaa -j

LOG log-prefix KAZAA

Arquivos .exe
# iptables -A INPUT -m string --algo bm --string ! .exe -j DROP
# iptables -A INPUT -m string --algo bm --string ! .exe -j LOG -log-prefix ARQ .EXE

Arquivos .exe
# iptables -A INPUT -m string --algo bm --string ! .exe -j DROP
# iptables -A INPUT -m string --algo bm --string ! .exe -j LOG -log-prefix ARQ .EXE

Arquivos .com
# iptables -A INPUT -m string --algo bm --string ! .com -j DROP
# iptables -A INPUT -m string --algo bm --string ! .com -j LOG -log-prefix ARQ .COM

Arquivos .pif
# iptables -A INPUT -m string --algo bm --string ! .pif -j DROP

-log-prefix ARQ .PIF


Exemplo de uso do mdulo string para bloquear o Facebook:

iptables -I FORWARD -m string --algo bm --string facebook.com -j


DROP
iptables -I OUTPUT -m string --algo bm --string facebook.com -j
DROP
Embora seja possvel bloquear esses tipos de arquivos via IPTables, na maioria dos casos
recomendvel realizar esse tipo de tratamento com um servidor Proxy web como o squid.

Captulo 8 - Segurana de Permetro Parte 2

# iptables -A INPUT -m string --algo bm --string ! .pif -j LOG -

207

Todavia, tambm recomendado implementar regras rgidas nas estaes de trabalho


para primeiro impossibilitar instalaes de aplicativos pelo usurios e tambm limitar a
execuo de binrios. Em suma, no se deve deixar esses critrios de segurana exclusivamente sobre a responsabilidade dos dispositivos que cuidam da segurana no permetro
da rede, mesmo porque hoje, com os dispositivos mveis, o permetro de segurana
tambm se estende s pessoas.

Port Knocking Conceito e prtica


um mtodo utilizado para, a partir de uma sequncia de pacotes especficos, executar uma
regra pr-definida no firewall para possibilitar a realizao de uma conexo que at ento
estaria fechada. Normalmente, um administrador usa esse recurso para portas de servios
de login remoto como SSH.
Um ferramenta interessante para a realizao dessa configurao o KNOCKD, seu arquivo
de configurao /etc/knockd.conf:

[options]
logfile = /var/log/knockd.log

[openSSH]
sequence

= 7000,8000,9000

seq_timeout = 5
command

= /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22

-j ACCEPT
tcpflags

= syn

[closeSSH]
sequence

= 9000,8000,7000

seq_timeout = 5
command

= /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22

-j ACCEPT
tcpflags

= fin

Importante lembrar que necessrio alterar o valor da varivel


booleana START_KNOCKD no arquivo de configurao /etc/default/knockd.

Hardening em Linux

################################################

208

## knockds default file, for generic sys config


################################################

# control if we start knockd at init or not

# 1 = start
# anything else = dont start
START_KNOCKD=1
# command line optionsUtilizando a porta:
hping -p 7000

-c 1 --syn 192.168.1.111

hping -p 8000

-c 1 --syn 192.168.1.111

hping -p 9000

-c 1 --syn 192.168.1.111

hping -p 9000

-c 1 --fin 192.168.1.111

hping -p 8000

-c 1 --fin 192.168.1.111

hping -p 7000

-c 1 --fin 192.168.1.111

Captulo 8 - Segurana de Permetro Parte 2

Desativando a porta:

209

210

Hardening em Linux

Roteiro de Atividades 8
Prtica de customizao dos critrios de autenticao e uso de alguns recursos atravs dos
mdulos de Kernel e a ferramenta IPtables. Ser necessrio que o aluno utilize a mquina
virtual preparada como Virtuabox. Dessa forma, ser possvel aplicar todos os conhecimentos (tcnicas e ferramentas) de Segurana de Permetro propostos at o momento.
Figura 8.2
Criao de script
de firewall para o
Servidor Aslam.

Atividade 8.1 Hardening Linux Firewall Linux


1. Considerando o layout da rede da figura a seguir, crie um script de firewall para o
Servidor Aslam, que dever ser instalado no /etc/init.d e funcionar no boot da mquina
automaticamente no Runlevel definido, atento s respectivas polticas:

IP Vlido
Vitria

NAT

Filial RJ

IP Invlido

Switch
ASLAM
Linux BOX
Firewall/VPN
IDS / Proxy
Gateway
202.1.2.2
202.1.2.3
192.168.20.253

Barbavore
Linux BOX
Firewall
NIDS
Proxy
Gateway

Balboa
Linux BOX
Firewall
HIDS
Servidor
Web
DNS 1

Apollo
Linux BOX
Firewall
HIDS
Servidor
DNS 2
NTP

Rocky
Linux BOX
Firewall
HIDS
SMTP/POP3
IMAP4
Antivrus
Webmail

Mickey
Linux BOX
Firewall
IDS Snort
Nessus
Servidor
Netsaint

Hexabyte
Linux BOX
VPN/Firewall
NIDS/HIDS
Proxy
Gateway
205.0.0.254
15.0.0.254

Rede perifrica 192.168.20.0/24

switch/hub

Ninja
Linux BOX
Firewall
IDS / Proxy

Pyro
Linux BOX
Servidor de
Arquivos
192.168.0.251

Jubileu
Linux BOX
Servidor de
Impresso
192.168.0.252

Nortuno
Servidor
DHCP
Intranet
192.168.0.253

Servidores Internos (LAN)


Router

BitOne
Linux BOX
Servidor de
Arquivos
15.0.0.250

BitZero
Linux BOX
Servidor de
Impresso
15.0.0.251

Servidores LAN
Modem ADSL

Estaes
Captulo 8 - Roteiro de Atividades 8

Estaes

switch/hub

211

11 A Poltica base ser: Tudo o que no for declarado como permitido, j est expressamente negado (DROP);
11 Todas a conexes como origem ou destino na Loopback so permitidas;
11 S permitir trfego para a internet oriundo da rede 192.168.0.0/24, que ser roteada
pelo Servidor Barbavore com destino internet, tratando o estado de conexo em tabela
parte (usando o recurso de chains), com exceo de conexes destinadas aos servios
HTTP, HTTPS e FTP;
11 Aceita conexo VPN IPSEC entre os servidores Aslam (IP 202.1.2.3) e Hexabyte
(205.0.0.254), tratando AH e ESP;
11 O servidor Aslam (IP 202.1.2.3) tambm ser proxy transparente para conexes com
destino a servios HTTP, HTTPS e FTP, aceitando conexes somente oriundas da rede
192.168.0.0/24, que sero roteadas pelo servidor Barbavore;
11 Qualquer atividade de tentativa de conexo cujo destino seja o servidor Aslam dever
ser registrada, seja com origem na internet ou na rede interna, com exceo do servidor
Mickey (192.168.20.4);
11 Somente Servidor Apollo realizar sincronizao com servidores NTP externos. Os demais
servidores da Rede Perifrica sincronizaro seus relgios a partir do servidor Apollo;
11 O Servidor Mickey poder estabelecer conexes com servidor do projeto Nessus e do
Nikto para atualizaes dos plugins;
11 Em quais atividades as portas administrativas (vide tabela 1) devero ser registradas
(logs) e rejeitadas com controle de limite, com exceo a conexes iniciadas da partir do
servidor Mickey (192.168.20.4);
Porta

Protocolo

Rejeitar com

514 - Syslog

UDP

ICMP 3/3

22 - SSH

TCP

TCP/RST

23 - Telnet

TCP

TCP/RST

8000 - Ntop

TCP

TCP/RST

10000 - Webmin

TCP

TCP/RST

11 Somente aceitar conexes de clientes oriundas da internet para os da Rede Perifrica


destinada s suas respectivas portas de servio declaradas (exclusivamente) na tabela a
seguir, tratando essas conexes na tabela de Nat.
Servidor

IP Interno

IP Externo

Protocolo

Porta de Servio

Balboa

192.168.20.1

202.1.2.2

TCP

80 - HTTP

Hardening em Linux

443 - HTTPS
UDP

53 - DNS

Apollo

192.168.20.2

202.1.2.3

UDP

53 - DNS

Rocky

192.168.20.3

202.1.2.3

TCP

25 - SMTP
110 - POP3
143 - IMAP
443 - HTTPS

212

2. Elabore uma configurao para o servidor Barbarvore, assumindo:


Que somente ouvir na Interface eth0, ter o IP: 192.168.0.254, na outra interface eth1
com o IP: 192.168.20.254 e seu gateway default ser o servidor ASLAM na interface eth0,
com o IP 192.168.20.253;
3. Considerando o layout da rede da figura 8.2, crie um script de firewall para o servidor Barbarvore que dever ser instalado no /etc/init.d e funcionar no boot da mquina automaticamente no Runlevel definido, atendendo s respectivas polticas:

Captulo 8 - Roteiro de Atividades 8

4. Configure um Port Knocking para porta 22 no servidor Barbarvore.

213

214

Hardening em Linux

9
Tuning de Kernel
foco no protocolo TCP, ICMP e IP; Entender o Modelo MAC de segurana; Conhecer
as ferramentas de MAC para Linux; Usar os mdulos Yama e Tomoyo de Segurana;
Aprender a parametrizar o Kernel do Linux com a ferramenta sysctl, o Kernel com
foco na Pilha TCP/IP e o arquivo /etc/sysctl.conf; Avaliar procedimentos baseados no
modelo DAC e MAC de segurana; Ativar alguns controles de MAC baseados no Kernel
do Linux.

conceitos

Tuning de Kernel; Tuning da pilha TCP/IP com foco no protocolo TCP; Tuning da pilha
TCP/IP com foco no protocolo ICMP.

Tuning de Kernel
Firewall:

11 Importante em um projeto de rede.


22 Mas deve estar sempre combinado com outros para melhorar a segurana.
Tuning de sistema Gnu/Linux para um servidor firewall.
O administrador de Sistema Gnu/Linux, ao pensar em implementar um firewall com Linux,
tem de ter em mente que um firewall fundamental em um projeto de rede, mas um elemento que apenas combinado com outros vai melhorar a segurana proposta. Diante disso,
necessrio saber que para melhor funcionamento do firewall, necessrio combinar
recursos importantes do Kernel com o que foi definido atravs do comando Iptables.
O objetivo deste captulo apresentar uma proposta de Tuning de um sistema Gnu/Linux
para um servidor firewall.
Este captulo diretamente vinculado ao captulo de firewall; entretanto, pode ser lido separadamente, pois sendo o foco ajuste finos atravs ferramenta sysctl, ele torna-se um caminho de
aprendizado para a utilizao desse importante recurso do Sistema Operacional Gnu/Linux.
Contextualizando: quando fala-se em realizar um Tuning, ou seja, ajustes finos, temos que
entender que o assunto bem vasto, entretanto, a proposta desse captulo ser um complemento ao captulo que tratou da possibilidade de implementao de firewall com Linux.
Sero abordados procedimentos importantes para ajustes finos do Sistema Operacional
Linux tendo em mente um firewall como objetivo. Entretanto, o processo capacita o adminis-

Captulo 9 - Tuning de Kernel

objetivos

Usar a ferramenta sysctl para Tuning de Kernel; Conhecer Tuning na Pilha TCP/IP com

trador a manipular todas as capacidades disponveis do Kernel que possibilitam modificao


em tempo de execuo.
215

Para termos a funcionalidade para modificao de parmetros e variveis de Kernel em

Saiba mais

tempo de execuo, precisamos de CONFIG_SYSCTL definido no Kernel. Destacamos que


esse recurso padro em um Kernel 2.4 ou superior.
Sendo o objetivo o Tuning da Stack TCP/IP (Pilha TCP/IP), vamos manter o foco em trs pontos:
11 Tuning TCP: diretrizes importantes para o tratamento de pacote TCP;
11 Tuning ICMP: diretrizes importantes para o tratamento de pacote ICMP;
11 Tuning IP: diretrizes importantes para o tratamento caractersticas de troca de
pacotes relevantes.
A importncia do Tuning muito grande, pois um firewall implementado com Linux, alm das
polticas objetivas que so definidas com o Iptables, demanda tambm definir algumas opes
de tratamento dos datagramas na Pilha TCP/IP de seu Sistema Operacional para melhorar
o desempenho do firewall e a segurana proposta. Se um administrador no realiza um
Tuning para a implementao de um firewall, no est usando o melhor do sistema.

Tuning TCP
Protocolo de TCP:

11 Tem caractersticas peculiares que devem ser lembradas durante o processo de


Tuning.
11 composto por 20 bytes.
22 Possuem informaes fundamentais para dificultar ou evitar ataques de Negao
de Servio e tcnicas de IP Spoofing.
Devido ao estado de conexo, o Protocolo de TCP tem caractersticas peculiares que
devem ser lembradas durante o processo de Tuning, pois os 20 bytes que compe o cabealho tm informaes interessantes para um firewall de estado de conexo (statefull) que
so fundamentais para dificultar ou mesmo em muitos casos evitar ataques como DOS
(da sigla em ingls: Denial Of Service Negao de Servio) e tcnicas de IP Spoofing
(falsificao de cabealho IP).
Quando estamos configurando polticas com Iptables usando o mdulo state, estamos utilizando as capacidades de tratamento de datagramas vinculados s propriedades de estado
de conexo que foram implementadas no Netfilter.
O Kernel do Linux possibilita-nos manipular algumas opes do Kernel vinculados ao estado
da conexo.

Manipulando o valor de Timeout de TCP/FIN


Verificando o valor para a diretriz tcp_fin_timeout. Lembrando que pode variar de acordo
com a distribuio Linux e tambm em relao aos outros Sistemas Operacionais. Verificando valor atual:

Hardening em Linux

# sysctl -a | grep net.ipv4.tcp_fin_timeout

216

recomendvel manter um valor prximo ao do valor padro, que 60.

# sysctl

-w net.ipv4.tcp_fin_timeout=50

Para a manipulao
consciente dessas
capacidades, preciso
conhecer a estrutura
do sistema de arquivos
proc. Os parmetros
de Kernel podem ser
alterados atravs do
sistema de arquivos /
proc ou utilizando a
ferramenta sysctl.

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.itcp_fin_timeout =50 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Manipulando o valor do Keep Alive TCP


A opo net.ipv4.tcp_keepalive_time possibilita manipular o valor, que por padro no Kernel
2.6 de 7.200 segundos, ou seja, 2h. Mais um valor importante para regras elaboradas
usando o recurso StateFull do Iptables.
Verifique o valor para a diretriz ip_default_ttl, lembrando que pode variar de acordo com a distribuio Linux e tambm em relao aos outros Sistemas Operacionais. Verificando valor atual:

# sysctl -a | grep

net.ipv4.tcp_keepalive

O recomendvel manter o valor genrico de sistemas, que de 7.200 segundos. Dessa


forma, vamos atender melhor o tratamento de conexes estabelecidas. Em momentos
crticos onde o firewall esteja trabalhando com uma quantidade muito grande de conexes
e o preo para manter as informaes do estado de conexo esteja motivando queda na
performance, o administrador pode diminuir esse tempo de forma a manter por um tempo
mnimo as informaes de estado de conexo. Diante desse cenrio, sugerido como valor
mnimo aceito 1.800 segundos. Todavia, essa manipulao deve ser feita com cautela.

# sysctl

-w net.ipv4.tcp_keepalive=7200

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.tcp_keepalive=7200=0 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.
# sysctl -p

Desligando o tcp_window_scaling
bilitar para dificultar tcnicas de fingerprint.
Valor padro: net.ipv4.tcp_window_scaling=0. Verificando valor atual:

# sysctl -a | grep tcp_window_scaling

Captulo 9 - Tuning de Kernel

Verifique o valor para a diretriz tcp_window_scaling, que booleano. Recomenda-se desa-

217

O recomendvel manter o valor de 0 (zero).

# sysctl

-w net.ipv4.tcp_window_scaling=0

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.tcp_window_scaling=0 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Desligando tcp_sack
Verifique o valor para a diretriz tcp_sack, que tambm possui valor booleano, e para um
Firewall recomenda-se o valor 0. interessante para reforar a questo de tratamento
de handshakes.
Verificando valor atual:

# sysctl -a | grep

tcp_sack

O recomendvel manter o valor 0 (zero):

# sysctl

-w net.ipv4.tcp_sack=0

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.tcp_sack=0 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p
Desligando a opo tcp_timestamps:
Verifique o valor para a diretriz tcp_timestamps, que tem valor booleano e deve estar desabilitada em um Firewall Interessante para evitar fingerprint passivo.

# sysctl -a | grep

tcp_timestamps

O recomendvel manter o valor genrico de sistemas Unix like atuante como firewall, que

Hardening em Linux

deve ser 0 (zero).

218

# sysctl

-w net.ipv4.tcp_timestamps=0

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.tcp_timestamps=0 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Desabilitando o valor de ECN


O ECN diz respeito a Notificao Explcita do Congestion (ECN), descrito na RFC 3168 e
um padro proposto da internet. Todavia, temos observado problemas estranhos sendo
relatados em listas de discusso sobre o uso dessa opo para acesso a alguns websites
com roteadores que no fornecem esse tipo de informao.
Verifique o valor para a diretriz tcp_ecn, lembrando que so valores que podem ser passados via sysctl:
11 0: desativa suporte ao ECN;
11 1: desativa suporte ao ECN;
11 2: s anunciar apoio ECN quando solicitado.
Verificando o valor atual:

# sysctl -a | grep

tcp_ecn

Modificando o valor:

# sysctl

-w net.ipv4.tcp_ecn =0

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.tcp_ecn=0 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl:

# sysctl -p

Melhorando o tratamento para incio de conexo


Muitos administradores so vtimas de ataques de inundao de pacotes de incio de
conexo, tecnicamente conhecidos com Synflood, uma categoria de ataque de Negao de
Servio que sutilmente se aproveita da caracterstica de como os Sistemas Operacionais

Para combater esse tipo de ataque em sistema Linux em muitos cenrios, preciso usar o
recurso denominado Syncookies, que pode ser ativado no Kernel do Linux atravs da diretriz
syncookies e deve ser combinado com as diretrizes tcp_max_syn_backlog, tcp_synack_
retries e tcp_abort_on_overflow.
A opo tcp_syncookies de valor booleano e quando ativada possibilita ativar o recurso
syncookies para TCP, uma vez que em distribuies Linux comum que o Kernel venha compilado com CONFIG_SYN_COOKIES ativo, o que permite que o recurso syncookies seja usado

Captulo 9 - Tuning de Kernel

realizam o HandShake TCP/IP.

pelo Sistema Operacional toda vez que a fila de syn exceda o valor mximo.
219

Verifique o valor para a diretriz tcp_syncookies verificando o valor atual:

# sysctl -a | grep

tcp_syncookies

O recomendvel manter o valor 1; dessa forma, ativado mais um mecanismo que ajuda
o Sistema Operacional, podendo ser til em muitas situaes de ataques de Inundao de
pacotes de Incio de Conexo (Synflood).

# sysctl

-w net.ipv4.tcp_syncookies =1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.tcp_syncookies =1 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p
Definindo tcp_abort_on_overflow: possibilita o cancelamento de conexes se os servios
ativos forem demasiadamente lentos e incapazes de prosseguir e aceitar a conexo. Lembrando que esse comportamento no permitido por padro. Significa que se o excesso
ocorrer devido a um estouro (overflow), a conexo poder ser retomada.
Verifique o valor para a diretriz tcp_abort_on_overflow verificando o valor atual:

# sysctl -a | grep

tcp_abort_on_overflow

O recomendvel manter o valor 1; dessa forma, ativado mais um mecanismo que ajuda
o Sistema Operacional, podendo ser til em muitas situaes de ataques de Inundao de
pacotes que buscam Negao de Servio (DOS).

# sysctl

-w net.ipv4. tcp_abort_on_overflow

=1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4. tcp_abort_on_overflow =1 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Hardening em Linux

Manipulando a opo tcp_synack_retries

220

Nmero mximo de tempo para que um segmento de SYN/ACK para uma conexo passiva
do TCP seja retransmitido. Esse nmero no deve ser mais elevado que 255. O valor de
padro normalmente habilitado no Kernel do Linux 5, que corresponde a 180 segundos.
Verifique o valor para diretriz tcp_synack_retries, checando o valor atual:

# sysctl -a | grep

tcp_synack_retries

O recomendvel manter o valor padro de 5.

# sysctl

-w net.ipv4. tcp_synack_retries=5

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4. tcp_synack_retries

=5 >> /etc/sysctl.conf

Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Manipulando tcp_max_syn_backlog
O nmero mximo dos pedidos de conexo enfileirados que no tm recebido ainda um
reconhecimento do cliente conectando. Se esse nmero for excedido, o Kernel comear a
deixar de atender pedidos de conexo.
O valor padro de 256 e aumentado para 1024 quando a memria atual no sistema
adequada, ou seja, maior ou igual a 128Mb, e reduzido para 128 quando o sistema tem
memria muito baixa, ou seja, menor ou igual a 32Mb.
Esse tipo de informao remete o administrador a uma deciso de melhor dimensionamento
da memria do servidor que atuar como firewall.
Verifique o valor para a diretriz tcp_max_syn_backlog, verificando valor atual:

# sysctl -a | grep

tcp_max_syn_backlog

O recomendvel manter o valor padro de 5.

# sysctl

-w net.ipv4. tcp_max_syn_backlog= 1024

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4. tcp_max_syn_backlog=1024 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

Manipulando a opo tcp_max_tw_buckets


O nmero mximo de sockets no estado de TIME_WAIT permitido no sistema. Esse limite
existe para buscar impedir simples de ataques de Negao de Servios (DOS).
Verifique o valor para a diretriz tcp_max_tw_buckets padro do sistema, que geralmente
180000. Todavia, diminuir esse valor pode implicar em problema de performance em servidores de grande quantidade de acesso. Verificando o valor atual:

# sysctl -a | grep

Captulo 9 - Tuning de Kernel

# sysctl -p

tcp_max_tw_buckets
221

O recomendvel manter o valor padro.

# sysctl

-w net.ipv4.tcp_max_tw_buckets =180000

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.ip_default_ttl=255=0 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Tuning ICMP
Definido resposta a Ping
possvel, habilitando a opo icmp_echo_ignore_all, que trabalhava de forma booleana,
ou seja, colocando 1 (um) ativa a opo, 0 (zero) desativa. Com o valor 1 (um), definir com
que o Kernel GNU/Linux ignore todas as mensagens Internet Control Message Protocol
(ICMP) do tipo 8 (Echo Request), no retornando a mensagem ICMP tipo 0 (Echo Reply) para
o solicitante. Em suma, com o bit ativo 1 (um) nessa opo, faremos com que nenhuma interface de rede (ETH*), e tambm a prpria interface Loopback, responda ao comando ping.
Uma boa motivao para isso que um pacote de IP carregando uma mensagem ICMP pode
conter um payload com informaes diferentes do padro ou mesmo pode ser utilizado com
o propsito de Fingerprint remoto via TTL.
Por padro, o valor dessa opo 0 (zero), ou seja, desativado quando o Kernel iniciado.
Muitos administradores no gostam de utilizar essa opo com bit 1, pois uma vez ativa, no
possvel definir excees. Simplesmente a host no responde mais a ping.
Na maioria das situaes de uma LAN, recomendvel que seja deixado o valor padro que
at o momento vem definido como 0 (zero) e via Poltica de Firewall seja restritivo, definido
para quais hosts a respectiva mquina responder a solicitaes de ICMP 8. Pois para os
administradores que usam o ping como uma ferramenta de diagnstico, o recurso continuar disponvel. Entretanto, no h motivo para que uma solicitao de fora de um host
qualquer na internet, por exemplo, necessite de resposta ao comando ping.
Devemos verificar o valor para a diretriz icmp_echo_ignore_all com o comando sysctl:

# sysctl -a | grep ignore_all


O valor ideal para um firewall 0 (desabilitado), pois uma vez habilitado, todas as mensa-

Hardening em Linux

gens ICMP Echo Request sero ignoradas. Caso seja necessrio modificar o valor possvel

222

em tempo execuo.

# sysctl

-w net.ipv4.icmp_echo_ignore_all=0

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echonet.ipv4. net.ipv4.icmp_echo_ignore_all =0 >> /etc/sysctl.conf


Aps inserir uma nova diretriz no arquivo /etc/sysctl.conf, use a opo -p para ativ-la.

# sysctl -p

Desligando resposta de broadcast


Por ser um protocolo de teste ICMP, naturalmente suporta trfego broadcast. Isso significa
que possvel ser encaminhada uma solicitao de ICMP tipo 8 (Echo Request) tanto para
endereo broadcast como para multicast de uma rede. No caso da solicitao encaminhada
para endereo de broadcast sabido que todos os hosts que estiverem ativos respondero.

Um Smurf Attack
consistia em um ataque
enviar de pacotes
ICMP direcionados ao
broadcast de uma rede
ou vrias redes, onde
o atacante utilizando
IP Spoofing forja o
endereo de origem do
datagrama colocando
o endereo da hosts
alvo, com o objetivo de
ocasionar um possvel
DOS (Deny of Service
Negao de Servio),
degradando o canal de
comunicao do host
alvo, uma vez que o
host alvo iria receber
todas as respostas
de ICMP tipo 0 (Echo
Replay) vindas das
hosts pertencentes
rede que o atacante
enviou as mensagens
ICMP tipo 8 (Echo
Resquest).

sibilita desabilitar resposta broadcasts de ICMP, o que para um firewall, roteador, gateway e
mesmo hosts que se encontram em uma DMZ extremamente recomendvel.
Essa recomendao vem dos primrdios da internet, onde um ataque sutil que se aproveitava dessa caracterstica de resposta de broadcast tornou-me muito comum: o ataque ficou
conhecido como Smurf Attack.
Verifique o valor para a diretriz icmp_echo_ignore_broadcasts, lembrando que o valor para
um firewall deve ser 1.

# sysctl -a | grep ignore_broadcasts


O valor ideal para um firewall 0 (desabilitado), pois uma vez habilitado, todas as mensagens ICMP Echo Request sero ignoradas. Caso seja necessrio modificar o valor possvel
em tempo execuo.

# sysctl

-w net.ipv4.icmp_echo_ignore_broadcasts=1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.icmp_echo_ignore_all=1 >> /etc/sysctl.conf


Aps inserir uma nova diretriz no arquivo /etc/sysctl.conf utilize a opo -p para ativ-la.

# sysctl -p

Definido limites no tratamento de resposta a datagramas ICMP


Partindo do princpio de que um servidor responder a ping (ICMP), recomendvel definir
quantos pacotes no mximo sero tratados pelo Kernel atravs da opo icmp_ratelimit.
Com essa opo, pode-se definir a quantidade de pacotes que sero tratados na respectiva
janela de tempo. Essa opo trabalha em conjunto com a opo icmp_ratemask, que possibilita parametrizar quais os tipos de ICMP que devero ser tratados por esse critrio.
Verifique o valor para a diretriz icmp_ratelimit:

# sysctl -a | grep icmp_ratelimit

Captulo 9 - Tuning de Kernel

Saiba mais

Podemos utilizar a opo icmp_echo_ignore_broadcasts, com o comando sysctl, o que pos-

223

O valor ideal para um firewall 100 jiffies (1 jiffy=1/100 sc), e uma vez habilitado, todas as
mensagens ICMP sero limitadas. Caso seja necessrio modificar o valor, possvel em
tempo execuo.

# sysctl

-w net.ipv4.icmp_ratelimit=200

Para que essa diretriz seja definitiva, necessrio inserir essa definio no arquivo /etc/
sysctl.conf. Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.icmp_ratelimit=100 >> /etc/sysctl.conf


Aps inserir uma nova diretriz no arquivo /etc/sysctl.conf, utilize a opo -p para ativ-la.

# sysctl -p
Verifique o valor para diretriz icmp_ratemask:

# sysctl -a | grep icmp_ratemask


O valor padro icmp_ratemask 6168, resultante do valor 2 elevado a n para cada tipo
ICMP, ou seja:

icmp_ratemask=(2^3 + 2^4 + 2^11 + 2^12)=6168


Assim, somente os datagramas ICMP do tipo 3, 4, 11, 12 sero limitados pelo valor da diretriz
icmp_ratelimit.
Dessa forma, se quisermos limitar ICMP Echo-reply, a conta deve ser:

icmp_ratemask=(2^0 + 2^3 + 2^4 + 2^11 + 2^12)=6169


# sysctl

-w net.ipv4.icmp_ratemask=6169

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.icmp_ratemask=6169 >> /etc/sysctl.conf


Aps inserir uma nova diretriz no arquivo /etc/sysctl.conf, utilize a opo -p para ativ-la.

# sysctl -p

Tratando mensagem invlida ICMP de roteadores


A opo icmp_ignore_bogus_error_responses, que por padro desabilitada, deve ser
Hardening em Linux

ativada em um servidor que atuar como firewall, Gateway ou um Roteador. Sendo neces-

224

sria, pois algumas vezes um roteador envia em broadcast frames contendo respostas invlidas e, como resultado, todos esses eventos so registrados (log) pelo Kernel. Para evitar o
armazenamento desnecessrio de logs, aconselhado habilitar esse parmetro para que o
Kernel ignore essas mensagens invlidas.

Verifique o valor para a diretriz icmp_ignore_bogus_error_responses, lembrando que o


valor para um firewall deve ser 1.

# sysctl -a | grep

icmp_ignore_bogus_error_responses

O valor ideal para um firewall 0 (desabilitado), pois uma vez habilitado, todas as mensagens ICMP Echo Request sero ignoradas. Caso seja necessrio modificar o valor, possvel
em tempo execuo.

# sysctl

-w net.ipv4.icmp_ignore_bogus_error_responses=1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.icmp_ignore_bogus_error_responses=1 >>/etc/sysctl.


conf
Aps inserir uma nova diretriz no arquivo /etc/sysctl.conf, utilize a opo -p para ativ-la.

# sysctl -p

Tuning IP
Habilitando repasse de Pacotes (IP_FORWARD)
Certifique-se de que o encaminhamento de IP esteja desligado. Ns s precisamos disso
para um host hospedado em vrios lugares. aconselhvel ligar ou desligar essa opo
antes de outras opes, j que ela liga ou desliga outras opes tambm.
Verifique o valor para a diretriz ip_forward, lembrando que o valor para um firewall deve ser 1.

# sysctl -a | grep

ip_forward

O valor ideal para um firewall 0 (desabilitado), pois uma vez habilitadas, todas as mensagens ICMP Echo Request sero ignoradas. Caso seja necessrio modificar o valor, possvel
em tempo execuo.

# sysctl

-w net.ipv4.ip_forward =1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

# echo net.ipv4.ip_forward =1 >>/etc/sysctl.conf


Aps inserir uma nova diretriz no arquivo /etc/sysctl.conf, utilize a opo -p para ativ-la.

# sysctl -p

Captulo 9 - Tuning de Kernel

Caso no, insira:

225

Manipulao da opo de source_route


Essas opes vinculadas s interfaces de rede possibilitam aceite de pacotes roteados pela
origem. Em um firewall, recomenda-se desabilitar essa possibilidade.
Consultando o valor ativo:

# cat /etc/sysctl.conf | grep

source_route

Definindo valor recomendvel para um firewall para 0 (desabilitado). Caso seja necessrio,
modificar o valor possvel em tempo execuo:

# sysctl

-w net.ipv4.conf.all.accept_source_route=0

# sysctl

-w net.ipv4.conf.lo.accept_source_route=0

# sysctl

-w net.ipv4.conf.eth0.accept_source_route=0

# sysctl

-w net.ipv4.conf.default.accept_source_route=0

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.conf.all.accept_source_route=0 >> /etc/sysctl.conf


# echo net.ipv4.conf.lo.accept_source_route=0 >> /etc/sysctl.conf
# echo net.ipv4.conf.eth0.accept_source_route=0 >> /etc/sysctl.
conf
# echo net.ipv4.conf.default.accept_source_route=0 >> /etc/sysctl.
conf
Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Habilitando Rp-filter
Possibilita o filtro de caminho reverso. Isso ajuda a ter a certeza de que os pacotes usam
endereos de fonte legtimos ao rejeitar pacotes de entrada automaticamente, se a
entrada da tabela de roteamento para o endereo fonte no bater com a interface de rede
em que chegam.
Esse procedimento pode evitar ataques de IP Spoofing. No entanto, o administrador deve
ficar atento com problemas que possam ser causados em caso de roteamento assimtrico
ou mesmo balanceamento, devido ao algoritmo de injeo dos pacotes nas interfaces
Hardening em Linux

fsicas provocar uma situao em que o rp_filter impedir o trfego. Nesse contexto,

226

demanda-se que o suporte a rp_filter seja desabilitado nas interfaces de rede envolvidas;
do contrrio, utilize-o.
Verifique o valor para a diretriz ip_default_ttl,

# sysctl -a | grep

rp_filter

recomendvel manter o valor genrico de sistemas Unix like, que 255. Dessa forma, minimizamos a possibilidade tcnica de fingerprint de Sistemas Operacionais baseadas em TTL.

# sysctl

-w net.ipv4.conf.all.rp_filter=1

# sysctl

-w net.ipv4.conf.lo.rp_filter=1

# sysctl

-w net.ipv4.conf.eth0.rp_filter=1

# sysctl

-w net.ipv4.conf.default.rp_filter=1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.conf.all.rp_filter=1

>> /etc/sysctl.conf

# echo net.ipv4.conf.lo.rp_filter=1

>> /etc/sysctl.conf

# echo net.ipv4.conf.eth0.rp_filter=1

>> /etc/sysctl.conf

# echo net.ipv4.conf.default.rp_filter=1

>> /etc/sysctl.conf

Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Habilitando o Log_martian
Essa opo no interessante para alguns administradores, devido grande quantidade de
registro de eventos (logs) que pode gerar, pois possibilita que qualquer pacote de origem suspeita ou desconhecida (como pacotes forjados) sejam registrados (log) pelo prprio Kernel.
Verifique o valor para a diretriz log_martians em seu sistema:

# sysctl -a | grep

log_martians

O recomendvel manter o valor 1.

# sysctl

-w net.ipv4.conf.log_martians =1

# sysctl

-w net.ipv4.conf.lo. log_martians =1

# sysctl

-w net.ipv4.conf.eth0. log_martians =1

# sysctl

-w net.ipv4.conf.default. log_martians =1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.conf.all.log_martians =1

>> /etc/sysctl.conf

# echo net.ipv4.conf.lo.log_martians =1

>> /etc/sysctl.conf

# echo net.ipv4.conf.eth0.log_martians =1
# echo net.ipv4.conf.default.log_martians =1

>> /etc/sysctl.conf

Captulo 9 - Tuning de Kernel

Verifique se a definio j existe:

>> /etc/sysctl.conf
227

Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Manipulando Valor de TTL


Verifique o valor para a diretriz ip_default_ttl, lembrando que ele pode variar de acordo
com a distribuio Linux e tambm em relao aos outros Sistemas Operacionais. Verificando valor atual:

# sysctl -a | grep ip_default_ttl


O recomendvel manter o valor genrico de sistemas Unix like, que 255. Dessa forma,
minimizamos dificuldades tcnicas de fingerprint baseadas em TTL.

# sysctl

-w net.ipv4.ip_default_ttl=255

Distribuies Linux em geral mantm o valor 64 para TTL, igual a sistema Unix BSD,
Mac OS, entre outros.
Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echonet.ipv4.ip_default_ttl=255=0 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p

Manipulando a opo shared_media


O valor default 1 dessa varivel, que booleana. O principal objetivo dessa varivel
informar ao Kernel se deve realmente enviar mensagens ICMP redirects para uma rede
especfica ou no.
Essa varivel informa ao Kernel se a interface fsica est compartilhada ou no, ou seja, se
diferentes redes IP com diferentes mscaras operam sobre uma mesma mdia ou no.
Caso no se utilize IP virtual, o valor deve ser 0 (zero).
Verifique o valor para diretriz shared_media:

# sysctl -a | grep

shared_media

Hardening em Linux

O recomendvel manter 1:

228

# sysctl

-w net.ipv4.conf.shared_media=1

# sysctl

-w net.ipv4.conf.lo.shared_media =1

# sysctl

-w net.ipv4.conf.eth0.shared_media =1

# sysctl

-w net.ipv4.conf.default.shared_media =1

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echo net.ipv4.conf.all.shared_media =1

>> /etc/sysctl.conf

# echo net.ipv4.conf.lo.shared_media =1

>> /etc/sysctl.conf

# echo net.ipv4.conf.eth0.shared_media =1

>> /etc/sysctl.conf

# echo net.ipv4.conf.default.shared_media =1

>> /etc/sysctl.conf

Ativando a novas opes com a opo -p do sysctl.

# sysctl -p

Manipulando a opo ip_local_port_range


Para essa opo, devem ser passados dois valores inteiros que definem a range de
portas de cliente. Sendo definio de portas de clientes, deve-se parametrizar valores
entre 1024 e 65535.
Devendo ficar claro que essas portas no vo conflitar com as portas usadas para NAT (tradues de endereamento). Sabendo que o Sistema Operacional tem controle sobre isso e a
sobreposio praticamente nula.
Verifique o valor para diretriz ip_local_port_range:

# sysctl -a | grep

ip_local_port_range

O recomendvel manter:

# sysctl

-w ip_local_port_range=1024 65000

Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:

# cat /etc/sysctl.conf | grep

-v ^#

| grep .

Caso no, insira:

# echonet.ipv4.p_local_port_range=1024 65000 >> /etc/sysctl.conf


Ativando a novas opes com opo -p do sysctl.

# sysctl -p

sysctl. Essa funo para definir algumas capacidades do Kernel, para que o sistema seja
adequado funo de firewall.

# vi tuning_kernel.sh
Contedo:

tuning_kernel()
{

Captulo 9 - Tuning de Kernel

A seguir, um exemplo de uma funo Shell Script (para sh ou bash) que trabalha com o

229

#-------------------------------------------------------------------#-------------------------------------------------------------------echo - Desabilitando ataques de IP Spoofing.


sysctl -w net.ipv4.conf.all.rp_filter=2

# Habilitando FORWARDing
sysctl

-w net.ipv4.ip_forward=1

echo Kill Timestamps


sysctl -w

net.ipv4.tcp_timestamps=0

echo - Habilitando protecao a Cookie TCP SYN.


sysctl -w net.ipv4.tcp_syncookies=1

echo - Habilitando configuracoes de ICMP.


echo Desabilitando protecao a echo de broadcast ICMP.
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

echo Habilitando protecao a mensagem de bad error


sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1

echo Desabilitando redirecionamentos de ICMP


sysctl -w net.ipv4.conf.all.accept_redirects=0

echo - Certifique que pacotes roteados na origem foram descartados


sysctl -w net.ipv4.conf.all.accept_source_route=0

Hardening em Linux

echo - Logar pacotes spoofed, roteados na origem ou redirecionados

230

sysctl -w net.ipv4.conf.all.log_martians=1

echo Valores recomendados para tratamento de Datagrama TCP


pensando em DOS e DRDOS
sysctl -w net.ipv4.tcp_fin_timeout=30

sysctl -w net.ipv4.tcp_keepalive_time=7200
sysctl -w net.ipv4.tcp_window_scaling=0
sysctl -w net.ipv4.tcp_sack=0

echo Alterando o valor do TTL para 255 para ficar padrao do Unix
sysctl -w net.ipv4.default_ttl=255

echo Alterando o valor do ratemask para englobar o tratamento para


os
echo icmps 0 3 4 5 8 11 12
sysctl -w net.ipv4.icmp_ratemask=6457
#-------------------------------------------------------------------#-------------------------------------------------------------------}
Executando a funo:

# sh tuning_kernel.sh

Segurana de Kernel Segurana na ltima fronteira


Tratativa de segurana na ltima fronteira (camada de Kernel no Linux):

11 Estar vinculada aos Mdulos de Segurana do Linux (LSM).


Qualquer tratativa de segurana na ltima fronteira, ou seja, na camada de Kernel no Sistema
Operacional Linux, estar vinculada aos Mdulos de Segurana do Linux (LSM), que so
melhorias desenvolvidas nos ltimos anos com foco na segurana do sistema. Essas melhorias

O ambiente MAC o
regime mais restrito
de controle de acesso,
sendo mais indicado
em ambientes onde so
demandados controles
mais elevados de segurana. Entretanto, os
administradores mais
experientes tm a oportunidade de colocar
a segurana dos servidores que proveem
servios na internet em
um outro nvel.

mentos do Posix 1e e tambm para possibilitar ao sistema Linux ter a capacidade de implementao de controles de segurana baseados no melo Mandatory Access Control (MAC).
Classicamente, em um ambiente MAC, todos os pedidos para o acesso aos recursos so
automaticamente sujeitos aos controles de acesso. Em tais ambientes, todos os usurios
e recursos so classificados e recebem uma ou mais etiquetas de segurana, tais como:
unclassifield, secret e topsecret.
Quando os usurios pedem um recurso, as etiquetas de segurana associadas so examinadas e o acesso est permitido somente se a etiqueta do usurio igual ou maior do que
aquele do recurso. Por exemplo, a um usurio com acesso Secret permitido acessar um
documento Unclassifield, mas um usurio com uma etiqueta de Unclassfield no obtm
acesso para uma informao Secret.
Em ambiente MAC, apenas os indivduos com privilgios administrativos podem gerenciar os
controles de acesso.

Captulo 9 - Tuning de Kernel

Saiba mais

so recursos tambm para conformidade com as recomendaes de segurana dos docu-

231

Definio de rea do usurio


rea do usurio, tambm chamada de user mode, userland ou userspace, a poro do
sistema de memria onde so executadas as aplicaes de usurio, mas que depende diretamente da rea destinada s instrues de Kernel. Esse contraste com a camada de Kernel
que essa poro de memria na qual o Kernel executa e supre esses servios.
O contedo da memria RAM, tambm denominada Memria Principal, pode ser acessado
(exemplo: leitura e escrita) em uma velocidade extremamente alta, mas retm temporariamente a informao (quando em uso ou quando h restos de suprimentos de fora).
Esse contraste com armazenagem na Memria Secundria (disco rgido) que tem uma velocidade de acesso bem menor, porm a informao mantida aps seu desligamento.
Um processo em execuo um exemplo de um programa. Os processos dos usurios so
exemplos para todos os programas, como o Kernel (utilizao e aplicao dos programas).
Quando um programa vai ser rodado, ele copiado da armazenagem para o espao do
usurio, ento ele pode ser acessado em grande velocidade para a CPU.
O Kernel um programa que constitui o ncleo central do Sistema Operacional do computador.
Ele no um processo, mas preferencialmente um controlador de processos. Tem o controle
completo de tudo o que ocorre no sistema. Isso inclui a administrao individual dos processos dos usurios dentro de um espao do usurio e a preveno da interferncia de outro.
A diviso do sistema de memria de um Sistema Operacional como UNIX para espao do
usurio tem papel importante na manuteno do sistema e estabilidade de segurana.

Definio de camada de Kernel


O sistema de memria em Linux pode ser dividido em duas regies distintas: rea de Kernel
e a rea de usurio.
A rea do Kernel onde se localiza o ncleo do Sistema Operacional e onde so executados
e providos os servios para as aplicaes que esto na rea do usurio a rea de Kernel
tambm pode ser chamada de Kernel mode, Kerenlspace ou kernelland.
A rea do usurio a maior poro de memria onde ficam residentes as instrues das
aplicaes dos usurios e em alguns casos at mesmo instrues complementares do
kernel, quando este baseado em uma arquitetura de microkernel ou hbrida. Essa rea
tambm pode ser chamada de user mode, userspace ou userland.
A memria consiste nas clulas RAM, cujo contedo pode ser acessado em uma velocidade
extremamente alta, porm s retm temporariamente (por exemplo, quando em uso
necessrio trocar a bateria). O propsito controlar programas e dados que so correntemente usados e, desse modo, servir com velocidade intermediria a CPU, e mais devagar o
armazenamento, que consiste em um ou mais discos rgidos.

Hardening em Linux

A camada do usurio o local onde esto localizados as memrias com os processos dos

232

usurios (todos os outros como o Kernel roda), um processo em execuo no instante do


programa. Um dos papis do Kernel administrar os processos individuais dos usurios
com esse espao e prevenir as interferncias de outros.
Vrios projetos de Mdulo de Segurana Linux (LSM) surgiram e alguns deles inclusive so
oficialmente parte do projeto do Kernel Linux.

Saiba mais
A kerneland pode ser
acessada por usurios
apenas com uso do
sistema de chamada.
O sistema de chamada
requer um Unix operante por um processo
ativo para um servio
realizado pelo Kernel.,
como imput, output ou
processo de criao.
um processo ativo
que correntemente
progressivo pela CPU,
em contraste com um
processo que aguarda
um prximo passo na
CPU. Input/Output
outro programa operao ou servio que
transfere dados para
ou da CPU para ou de
dispositivos perifricos
(disc drive, teclado,
mouse e impressora).

Mdulos de Segurana do Linux (LSM), a API para os quadros de controle de acesso:

Boas prticas recomendadas na ABNT NBR


ISO/IEC 27002:2008:
com implementao de
segurana na camada
de Kernel, elevando os
controles dos nativos
do Sistema Operacional
que so baseados no
modelo DAC para o
modelo MAC,
atendida a conformidade mais uma vez do
que foi solicitado no
item 10.10.3, onde
enfatizado que os
recursos e informaes
de registros (logs)
sejam protegidos
contra falsificao e
acesso no autorizado.
Tambm possibilita
conformidade com o
que citado no item
10.9.3, que diz que a
integridade das
informaes disponveis em sistemas
publicamente
acessveis seja
protegida para prevenir
alteraes no
autorizadas.

baseado em MAC;
11 Security Enhanced Linux (SELinux): uma proposta de segurana flexvel e refinada que
possibilita a configurao de controles MAC, desenvolvida pela NSA. um recurso completo para implementao de controle MAC para servios e dispositivos do sistema;
11 Smack: um mdulo que proporciona a criao de alguns controle de acesso simplificados de MAC (Simplified MAC Kernel Simplified Mandatory Access Control Kernel) na
camada kernel, embora denominado um mdulo simplicado de MAC. O Smack fornece
um mecanismo de criao de controles para proteger os processos e dados (arquivos),
controles esses que definem as regras de acessos do que deve ser permitido ou negado;
11 Tomoyo: outro caminho baseado em sistema de controle de acesso (LiveCD disponvel);
11 Grsecurity: um patch de segurana que no faz parte do cdigo oficial do kernel do
Linux, um projeto externo, mas que traz aprimoramento segurana para o Kernel
Linux, tanto considerando o modelo de segurana MAC como tambm o modelo RBAC.
Entre as capacidades que o Grsecurity possui destacam-se: endurecimento chroot,
recursos para auditoria e randomizao de proteo de pilha de execuo;
11 Conjunto de regras de controle de acesso baseado em (RSBAC), Linux Kernel patch implementao de uma estrutura de segurana;
11 FBAC-LSM: visa proporcionar facilidade de configurao (funcionalidade-based) de controles na camada de Kernel restries de aplicao;
11 Yama: um novo mdulo de Kernel que foi inserido na 3.4.x, acrescenta restries para
ptrace, proporcionando uma forma programtica para declarar relaes entre processos.
autoria de um desenvolvedor da empresa responsvel pela distribuio Ubuntu(Canonical), sendo mais uma alternativa para um processo dehardeningdo sistema na camada
de Kernel. Melhorando a segurana, proporcionando um nvel maior que o tradicional
modelo DAC oferta.

Utilizao do mdulo Yama


Pequeno nmero de protees.

11 Similar ao que provido no sistema Solaris.


Para identificar se o suporte est no Kernel, basta executar o comando grep no arquivo /
boot/config-<kenel version>.

#grep -i yama /boot/config-3.2.0-29-generic


CONFIG_SECURITY_YAMA=y
# CONFIG_DEFAULT_SECURITY_YAMA is not set
Os recursos de segurana providos pelo mdulo Yama so:

- YAMA_HARDLINKS
- YAMA_PTRACE
- YAMA_SYMLINKS

Captulo 9 - Tuning de Kernel

11 AppArmor: mdulo de segurana que proporciona ao sistema um controle de acesso

YAMA_HARDLINKS
233

Esse recurso protege o sistema contra a criao de hardlinks para arquivos que o usurio
no tem acesso. Por alguma estranha razo, o padro POSIX ainda exige esse comportamento. Esse controle o similar mais prximo Solaris remoo do privilgio file_link_any.

YAMA_PTRACE
Esse parmetro de proteo do mdulo YAMA projetado para impedir a possibilidade
de execuo de processo com o mesmo uid de um outro processo que est em execuo
memria, mas possibilitando tambm rastre-los usando ptrace. Sem esse tipo de controle,
cria-se um cenrio onde possvel gerar uma ameaa aproveitando-se de uma fraqueza
particularmente preocupante das interfaces do processo de Linux, onde um usurio poderia
ser capaz de examinar a memria e o estado de execuo de qualquer de seus processos.
Por exemplo, durante a execuo de um aplicativo como o Firefox, que foi comprometido,
seria possvel a um atacante anexar a outros processos em execuo para extrair as credenciais adicionais e continuar a expandir o alcance de seu ataque na memria.

YAMA_SYMLINKS
Devido a um histrico longo de problemas de segurana vinculado aos links simblicos,
mais comumente visto em diretrios globalmente gravveis, como /tmp.
Os recursos do mdulo Yama podem ser ativados ou desativados por meio da
ferramenta sysctl.

# sysctl -a | grep -i yama


kernel.yama.protected_sticky_symlinks=1
kernel.yama.protected_nonaccess_hardlinks=1
kernel.yama.ptrace_scope=1

Tomoyo
O Tomoyo uma soluo para MAC que tambm faz parte oficialmente do Kernel do Linux,
includo a partir da verso 2.6.30. Vale lembrar que foi somente a partir da verso 2.x do
Tomoyo, quando foi reestruturado seguindo as diretrizes do padro LSM, que passou a ser
oficial at ento era um patch externo.
O modelo MAC consiste em criar no Sistema Operacional uma camada de controle onde
possvel inserir polticas para permitir ou negar acesso de determinados processos a arquivos
e/ou dispositivos, sendo importante lembrar que para um sistema Like Unix um dispositivo
tratado como um arquivo. Existem diferentes formas no modelo MAC de tratar o acesso
aos arquivos: via informao do caminho do arquivo e labels rtulos atribudos baseados
nos atributos estendidos (xattrs). O Tomoyo utiliza o conceito de identificao baseada no
caminho do arquivo, chamada tecnicamente de Pathname-based Security.
O mdulo MAC de segurana Tomoyo foi idealizado com objetivo de possibilitar definir
Hardening em Linux

regras de acesso considerando o comportamento de um processo de um sistema. Um


processo criado para realizar alguma tarefa, e durante sua execuo, alm do espao em
memria e do tempo de CPU, um processo l, abre e fecha arquivos. Atravs do Tomoyo,
cria-se uma camada de controle onde necessrio declarar o comportamento do processo,
ou seja, necessrio informar que arquivos e dispositivos o processo pode acessar e qual o
nvel de acesso ser permitido. Em suma, de uma certa forma chamadas para aberturas, leituras, acesso a diretrio e fechamento de arquivos sero filtradas, levando em considerao
as polticas previamente definidas.
234

O controle MAC como Tomoyo, de uma forma analgica, cria uma fronteira controlada entre
as atividades dos processos na Userland (rea de memria de aplicativos de usurio) e a
Kerneland (rea de memria protegida de instrues do Kernel), ou seja, estabelece segurana na ltima fronteira para as aplicaes. Dessa forma, um processo s poder estabelecer um comportamento de execuo e acesso j previamente definidos.

Configurao e administrao do Tomoyo


Para identificar se o suporte est ativo no Kernel, basta executar o comando grep no arquivo
/boot/config-<kenel version>, pois embora o Tomoyo seja habilitado por padro em vrias
distribuies Linux, caso o Kernel em uso no tenha o suporte habilitado, ser demandado a
compilao de Kernel.

# grep -i tomoyo /boot/config-3.2.0-4-486


CONFIG_SECURITY_TOMOYO=y
CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set
CONFIG_SECURITY_TOMOYO_POLICY_LOADER=/sbin/tomoyo-init
CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER=/sbin/init
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
Embora seja identificada a linha CONFIG_SECURITY_TOMOYO=y, necessrio habilitar o
mdulo Tomoyo como mdulo de segurana padro. Para isso, necessrio editar o arquivo
/boo/grub/grup.cfg, inserindo o parmetro security=tomoyo na linha do boot do Kernel
correspondente. Veja o exemplo:

linux

/vmlinuz-3.2.0-4-486 root=/dev/mapper/LVM_RNP-BARRA ro

security=tomoyo quiet

Ferramentas da userland
Tenha a certeza de que o suporte ao Tomoyo est ativado.
Com o suporte ativado no Kernel, deve-se validar se as ferramentas j instaladas de gerenciamento do Tomoyo esto instaladas:

# dpkg -l | grep tomoyo


Caso no, consulte os pacotes disponveis no repositrio remoto via apt:

libtomoyotools3 - Lightweight and easy-use Mandatory Access Control


for Linux (shared libraries)
tomoyo-tools - Lightweight and easy-use Mandatory Access Control
for Linux
E instale os pacotes necessrios:

# apt-get install -y libtomoyotools3 tomoyo-tools

Captulo 9 - Tuning de Kernel

# apt-cache search tomoyo | grep tomoyo

235

Para ativar o Tomoyo, use o script de configurao automtico que j inicia o Tomoyo com
regras bsicas que esto concentradas em /etc/tomoyo, que antes da execuo do script
um diretrio vazio. Aps a execuo, alm de gerao das regras bsicas, so criados
tambm todos os arquivos de configurao.

# /usr/lib/tomoyo/init_policy
Creating policy directory... OK
Creating configuration directory... OK
Creating exception policy... OK.
Creating domain policy... OK.
Creating manager policy... OK.
Creating default profile... OK.
Creating stat policy... OK.
Creating configuration file for tomoyo-editpolicy ... OK.
Creating configuration file for tomoyo-auditd ... OK.
Creating configuration file for tomoyo-patternize ... OK.
Creating configuration file for tomoyo-notifyd ... OK.
A lista de arquivos e diretrioscriados:
# ls -l
rwxrwxrwx 1 root root

33 Ago 18 00:32 domain_policy.conf ->

policy/current/domain_policy.conf
lrwxrwxrwx 1 root root

36 Ago 18 00:32 exception_policy.conf ->

policy/current/exception_policy.conf
lrwxrwxrwx 1 root root

27 Ago 18 00:32 manager.conf -> policy/

current/manager.conf
drwx------ 3 root root 4096 Ago 18 00:32 policy
lrwxrwxrwx 1 root root

27 Ago 18 00:32 profile.conf -> policy/

current/profile.conf
-rw-r--r-- 1 root root

158 Ago 18 00:32 stat.conf

drwx------ 2 root root 4096 Ago 18 00:32 tools


A estrutura de arquivos e diretrios criada durante a execuo do script nit_policy ser
usada para concentrar informaes das polticas e demais detalhes, e no devero ser edi Hardening em Linux

tadas diretamente, e sim via ferramentas de gerenciamento do Tomoyo:

236

Modo de aprendizado
O primeiro passo na utilizao do Tomoyo ativar o modo de aprendizado, inicializando o
Tomoyo:

# tomoyo-editpolicy /etc/tomoyo/

Surgir a tela de edio de polticas, mas ser somente com informaes bsicas da primeira execuo, que so denominadas domnios, ou seja, os processos gerenciados pelo
Tomoyo, onde o nome de um domnio corresponde a linha completa de execuo.
O nome do domnio separado por espaos. O segundo zero na barra verde do utilitrio
tomoyo-editpolicy indica que o perfil usado o 0 (proteo do Tomoyo desativada).

<<< Domain Transition Editor >>>

1 domain

? for help

<kernel>
0:

<kernel>

Na primeira execuo, no h nenhum perfil de poltica ativo, assim sendo, neste momento
devemos iniciar o Tomoyo no modo de aprendizado, para que sejam avaliados todos os processos ativos. Para isso, devemos reinicializar o sistema com o Kernel que tem o suporte ao
Tomoyo, pois os sistemas j esto prontos para execuo do Tomoyo, uma vez que todos os
arquivos de /etc/tomoyo j esto ativos. Dessa forma, para sair do editor, digite q e depois
reboot para inicializar o sistema.
Para visualizar as teclas que possibilitam acesso as outras telas, basta digitar w e sero
mostrados as opes para alternar em cada tela:

<<< Exception Policy Editor >>>

- informaes que ficam no

arquivo exception_policy.conf
d

<<< Domain Transition Editor >>>

<<< Domain Policy Editor >>>

- informaes que ficam no

arquivo domain_policy.conf
p

<<< Profile Editor >>>

- informaes que ficam no arquivo

profile.conf
m

<<< Manager Policy Editor >>>

arquivo

informaes que ficam no

manager.conf

<<< Namespace Selector >>>

<<< Statistics >>>

Quit this editor.

ou seja:
11 digite e: tela de edio de Polticas de Exceo;
11 digite d: tela de edio de Domnios de Transio (deletar um domnio);

11 digite p: tela de edio de Perfis;


11 digite m: tela de edio do Gerenciador de Polticas;
11 digite n: tela de edio de seleo de Namespace;
11 digite s: tela de Estatsticas;
11 digite q: para sair do editor.
Aps o reboot, basta abrir o editor de polticas do Tomoyo: tomoyo-editpolicy, sem parmetros,
e sero mostradas todas a polticas (policies) ativas considerando os processos em execuo.

Captulo 9 - Tuning de Kernel

11 digite a: tela de edio de Polticas de Domnios;

237

Suponha que se deseja definir polticas para o funcionamento do servio SSH. Ento,
demandado que o utilize durante o procedimento de aprendizado, realizando todas as
aes comuns, como desativar e ativar o servio, e realizar uma conexo, pois todas aes
estaro sendo interceptadas pelo Tomoyo e as polticas correspondentes geradas.
Devido caracterstica de configurao do Tomoyo, recomendvel que todo o procedimento seja realizando no processo de teste e homologao das aplicaes, para
que, ao colocar o servidor em produo, as polticas necessrias j estejam vlidas e,
se possvel, importante ter um ambiente similar, que pode ser virtual, para que se
possa validar novas mudanas para caso seja necessrio. Assim, com segurana, o
administrador pode realizar todos testes necessrios em um ambiente similar, para
ter segurana de elaborar um plano de mudana para o servidor em produo.

Nessa primeira execuo, ainda no existir nenhum perfil at porque ainda nem
estamos usando um Kernel com Tomoyo ativado. Nesse momento, deve-se iniciar o Tomoyo
para, no modo de aprendizado, entendermos como o sistema funciona por padro. Para
isso, reinicie o sistema com o comando reboot, ou por meio da interface grfica, ou com o
comando shutdown -r now.
Ao iniciar o primeiro aplicativo que se deseja proteger, por exemplo, o Apache, inicie-o com o
comando padro da sua distribuio.

# service apache2 restart


Em seguida, abra o editor de polticas do Tomoyo: tomoyo-editpolicy.
No editor, use as setas para ir at o perfil <kernel> /usr/sbin/httpd (o nome pode ser
diferente, dependendo da forma como o Apache foi chamado). Se preferir, procure na lista
usando a tecla F.

Hardening em Linux

21:

238

/etc/init.d/apache2

22:

/bin/echo

23:

/bin/run-parts

24:

/usr/bin/env

25:

26:

/bin/chmod

27:

/bin/chown

28:

/bin/mkdir

29:

/bin/mktemp

30:

/bin/mv

31:

/bin/rm

32:

/usr/bin/stat

33:

/usr/sbin/apache2

34:

/usr/sbin/apache2ctl

/usr/bin/tput

Uma vez no modo de aprendizado, o Tomoyo vai iniciar a criao da Polices no arquivo
domain_policy.conf. A partir desse arquivo, so habilitadas as polticas; todavia, para
efetivar o uso da regra, necessrio via tomoyo-editpolicy identificar a linha do domnio
do Apache2. Pressione S, depois 2, e por ltimo Enter, ou seja , alterar o perfil de 1
(learning mode, ou modo de aprendizado) para 2 (permissive mode, ou modo permissivo).
Depois, basta sair do editor de polticas do Tomoyo pressionando Q.
Aps esse procedimento, o Apache ser observado policiado pelo Tomoyo, e vai enviar
mensagens de alerta caso qualquer uma de suas polticas seja violada. As mensagens sero

Captulo 9 - Tuning de Kernel

exibidas no console do sistema (/dev/console).

239

240

Hardening em Linux

Roteiro de Atividades 9
Prtica de customizao dos critrios de autenticao e uso de alguns recursos atravs
da ferramenta sysctl para Tuning de Kernel. Ser necessrio que o aluno utilize a mquina
virtual preparada como Virtuabox. Dessa forma, ser possvel aplicar todos os conhecimentos (tcnicas e ferramentas) de Hardening propostos at o momento.

Atividade 9.1 Hardening Linux Tuning de Kernel


1. Configure o /etc/sysctl.conf com as parametrizaes recomendadas neste captulo.
2. Ative os recursos de segurana do mdulo YAMA.
3. Ative o Tomoyo para aprender o funcionamento do Apache.
4. Revise as polticas geradas no Tomoyo.
5. Ative as polticas geradas para o servidor SSH.
6. Ative o Tomoyo para aprender o funcionamento do SSH.
7. Revise as polticas geradas no Tomoyo para o servidor SSH.
8. Utilize o servio ssh com um usurio definido e avalie as informaes de registros de

Roteiro de Atividades 9

eventos (logs), geradas pelo Tomoyo.

241

242

Hardening em Linux

10
Registrar aes realizadas no sistema a partir das syscall executadas; Criar regras
especficas para diretrios-chave; Auditar comandos especficos; Customizar regras
para monitorar o sistema a partir de syscall; Customizar regras para monitorar um
determinado diretrio.

auditoria; Gerao de relatrios; Contabilizao de processo; Auditoria de modificaes


de um sistema Linux.

conceitos

Trilha de comandos a partir de registro de syscalls pelo Audit; Definio de regras de

Neste captulo, mostraremos como usar e parametrizar regras para a gerao de registros de eventos atravs do Audit. O Audit um recurso do Kernel do Linux. Dessa forma,
podemos assumir que ao us-lo estamos estabelecendo segurana na ltima fronteira.

Exerccio de nivelamento 1 e
Auditoria na camada de Kernel
Avalie o quanto agrega um mecanismo de segurana que possibilita a realizao de auditoria na camada de Kernel atravs de controles sobre as chamadas de sistema realizadas:

Que Sistemas Operacionais possibilitam auditoria baseada nas chamadas de sistemas?

Auditoria na camada de Kernel


Trilha de comandos: forma de controle importante.
11 Mas o que o history oferece ainda pouco.
Audit:
11 Framework de auditoria para Linux disponvel na srie 2.6.x do Kernel.
11 Oferece conjunto de recursos que possibilita plena conformidade com o Controlled
Access Protection Profiles (CAPP).

Captulo 10 - Auditoria na camada de Kernel

objetivos

Auditoria na camada de Kernel

243

Trilha de comandos uma forma de controle importante, entretanto, o que o history


oferece ainda muito pouco para uma gesto de atividades e at mesmo apoio a Gerncias
de Mudanas, alm do fato de que o histrico de comando do history poder ser facilmente
comprometido. Sendo a proposta deste livro um modelo de Hardening, a auditoria de trilha
de comandos merecer uma abordagem mais ampla.
O Audit oferece um conjunto de recursos que possibilita plena conformidade com o

Audit

Controlled Access Protection Profiles (CAPP), pois possibilita criar controles que coletam

Framework de auditoria
para Linux disponvel
na srie 2.6.x do Kernel,
desenvolvido pelo programador Steve Grubb,
do time de segurana
da RedHat.

informaes sobre qualquer evento que um administrador julgar relevante. Dessa forma, os
registros de auditoria gerados podem ser examinados para determinar se qualquer violao
das polticas de segurana ocorreram e por quem foram cometidas.
Devido aos seus recursos, uma vez que parte do kernel, alm de proporcionar uma auditoria na ltima fronteira, o Audit Framework torna-se para sistema Linux um importante
requisito para a certificao Common Criteria-Controlled Access Protection Profiles/Evaluation
Assurance Level (CC-CAPP/EAL ).
O Common Criteria tem dois conjuntos de requisitos de avaliao, requisitos funcionais e
segurana. Os requisitos funcionais descrevem os atributos de segurana do produto em fase
de avaliao e so resumidas sob os perfis de acesso controlado de proteo denominado
Controlled Access Protection Profiles (CAPP). Requisitos de garantia so resumidos sob o Evaluation Assurance Level (EAL). O EAL descreve todas as atividades que devem ocorrer para os
avaliadores estarem confiantes de que os atributos de segurana esto presentes, eficazes e
implementados. Exemplos de atividades desse tipo de pesquisa incluem a documentao dos
desenvolvedores para vulnerabilidades de segurana, o processo de correo e de testes.
O Common Criteria um padro reconhecido internacionalmente e utilizado pelo governo
americano e de outras organizaes para avaliar a segurana e garantia de produtos de tecnologia. No esquema de Critrios Comuns, EAL representa a profundidade e o rigor da avaliao, dando aos usurios de um respectivo Sistema Operacional a confiana nos produtos
especificados em um nvel especfico de exigncias de garantia de segurana associados ao
respectivo nvel atribudo. A conformidade com esses padres muito importante para o
mundo corporativo. O Redhat Linux recebeu o Common Criteria Certification com o nvel
EAL4+. Outros exemplos de sistemas Like Unix que tambm tm este nvel de segurana:
VMware ESXi, FreeBSD, Oracle Linux, AIX, HP-UX e Solaris.
O Framework Audit ajuda a tornar o sistema Linux mais seguro, fornecendo os meios para
analisar o que est acontecendo no sistema de forma detalhada. Mas sendo uma ferramenta de auditoria, isso no significa, no entanto, fornecer segurana adicional, mas sim
fornecer um meio ainda que reativo para rastrear problemas e ajudar ao administrador a
realizar uma Resposta a Incidente, possibilitando-o ter conhecimento suficiente para tomar
medidas de segurana realmente efetivas.
O Framework Audit composto por vrios componentes, cada um contribuindo com uma
funcionalidade importante. Cada mdulo tem sua funo definida e possibilita intercep Hardening em Linux

tao das chamadas de sistema para o Kernel e, a partir de polticas definidas, registra os

244

eventos relevantes. O daemon auditd escreve os relatrios a ferramenta na userland que


possibilita a administrao do recurso e a captura dos dados relevantes dos eventos e os
encaminha para um arquivo de log.

Saiba mais
O Common Criteria
um relevante padro
internacional para avaliaes de segurana
independentes que
ajuda os especialistas
de segurana a avaliar
o nvel de segurana
de qualquer produto
de TI que pretendam
implantar em qualquer
projeto, inclusive de
misso crtica. Diante
de tudo isso, um
recurso recomendado
em vrios documentos
de segurana, inclusive
os da RedHat e Suse
Linux.

Componentes de auditoria
Kernel
Sealert

Trusted
App

Auditctl

Auditd

Logs

Aulast
O uso do Framework Audit possibilitar o levantamento a partir de registros (logs) de todas
as atividades realizadas em uma determinada janela de tempo, inerente a aes pr-definidas.
Outro ponto importante o fato de que a auditoria feita a partir do controle da syscalls
(chamada de sistema), o que pode ampliar de forma significativa o poder de auditar e o que
possibilita facilmente definir regras que coloquem o sistema em conformidade com qualquer regulamentao ou norma (exemplo: PCI, Sarbanes-Oxley, ISO 27002 e HIPAA).
O Framework Audit um recurso do Kernel que na camada de userland ativado pelo
daemon auditd. Dessa forma, atuando na userland, o sysadmin pode parametrizar todas as
regras que sero ativadas na inicializao ou pelo prprio sysadmin. Essas regras so configuradas no /etc/audit/audit.rules.

Estado da arte
O Framework Audit possibilita consultar em sua base de registros filtrando atividades por:
11 Usurio;
11 Grupo;
11 ID do audit;
11 Hostnames;
11 Endereamento IP;
11 Nome de arquivo;
11 Operao em arquivos;
11 Falhas;
11 Chamadas de sistema;
11 Argumentos de chamadas de sistema.
O Framework Audit parte do kernel e tem o conjunto de ferramentas nas userland que possibilita a parametrizao e consultas base de logs em caso de necessidade de auditoria, o que
possibilita estabelecer controles de segurana na ltima fronteira, ou seja, na camada de kernel.

Captulo 10 - Auditoria na camada de Kernel

Figura 10.1
Componentes do
Framework Audit.

Remote

Custom
app

Ausearch
Aureport

Audispd

245

Instalao do Framework Audit:


Atravs da base apt oficial do repositrio do Ubuntu ou Debian, utilize o comando apt-get
para instalao do Framework Audit:

# apt-get install -y auditd


Inicializando o Framework Audit atravs do Deamon auditd:

# service auditd restart


Para garantir que o deamon do Framework Audit ser carregado durante a inicializao do
Sistema Operacional:

# apt-get install y rcconf


# rcconf
Arquivos importantes:
11 /etc/audit/auditd.conf: arquivo de principal de configurao do audit;
11 /etc/audit/auditd.rules: arquivo de principal de configurao de definies para auditctl;
11 /etc/audisp/audisp.conf: arquivo de configurao do audisp;
11 /etc/sysconfig/auditd: arquivo de parametrizaes extras do audit.
Ferramentas de Userland para parametrizar e utilizar as capacidades do Audit:
11 auditctl: utilitrio de controle do sistema de auditoria do kernel. Voc pode consultar o
status e deletar ou adicionar regras para o sistema de auditoria do kernel. Configurar o
sistema para monitorar um arquivo feito usando o comando:
22 ausearch: comando para consultar o daemon do Framework Audit baseado em
eventos com vrios critrios de pesquisa;
22 aureport: ferramenta que produz relatrios resumidos dos logs do sistema
Framework Audit (audit.log).
Exemplos de utilizao da ferramenta auditctl:
Criando um regra de auditoria para o /etc/passwd com a palavra usurios como
chave de pesquisa:

# auditctl -w /etc/passwd -p war -k usurios


Onde:
11 -w /etc/passwd: definir uma regra de auditoria para o arquivo /etc/passwd. Nesse caso,
monitorar o arquivo chamado /etc/passwd;
11 -p war: configurar os filtros de permisso para o monitoramento de um sistema de arquivos.
Os valores comumente utilizados so:

Hardening em Linux

11 r: para leitura;
11 w: para escrita;
11 x: para execuo;
11 a: para anexar (append);
11 -k <palavra-chave>: possibilita definir uma palavra-chave para filtragem que pode ser
utilizada em consultas futuras com o comandos ausearch. Essa palavra-chave no deve
exceder o valor mximo de 31 bytes.
246

Em resumo, quando se deseja monitorar um determinado arquivo ou mesmo diretrio,


possvel criar uma regra para registrar qualquer ao como alterao, escrita ou execuo.
Tudo feito registrando as syscalls vinculadas ao respectivo arquivo ou diretrio:
Exemplo de criao de uma poltica para auditar atividades inerentes ao arquivo /etc/shadow:

# auditctl -w /etc/shadow -k

senhas -p rwxa

-k seclinux

Exemplo de criao de uma poltica para auditar todas chamadas de sistema (syscall)
nesse caso, do tipo mount:

# auditctl -a exit,never -S mount -k seclinux


Exemplo de criao de uma poltica para auditar toda atividade de processos executados
vinculados ao diretrio /var/tmp:

# auditctl -w /tmp -p wax -k deamon-tmp


Exemplo de criao de uma poltica para auditar todas as system call vinculadas a um processo cujo PID 1945:

# auditctl -a entry,always -S all -F pid=1945


Exemplo de criao de uma poltica para auditar todas as chamadas de sistema (syscall).
Nesse caso, do tipo unlink e unlinkat vinculadas ao diretrio /var/tmp:

# auditctl -a exit,always -F dir=/var/tmp -F arch=i386 -S unlink -S


unlinkat

-k seclinux

# auditctl -a exit,always -F dir=/var/tmp -F arch=x86_64 -S unlink


-S unlinkat

-k seclinux

Um outra forma inserir essas regras diretamente no arquivo audit.rules, onde deve-se
iniciar apagando todas a polticas em memria com a opo -d, para na sequncia inserir
as novas polticas.

-D
-b 1024
-w /etc/shadow -k

senhas -p rwxa

-a exit,never -S mount

-a entry,always -S all -F pid=1945


-a exit,always -F dir=/var/tmp -F arch=i386 -S unlink -S unlinkat

-k

seclinux
-a exit,always -F dir=/var/tmp -F arch=x86_64 -S unlink -S unlinka
-k seclinux
A seguir, exemplos de configuraes de regras para serem utilizadas no audit.rules para
informaes sensveis:
Configurao de Regras do Framework Audit Conformidade com o modelo de Segurana
Controlled Access Protection Profile (CAPP).

Captulo 10 - Auditoria na camada de Kernel

-w /tmp -p e -k seclinux

247

Parametrizando a deleo das regras ativas em memria:

-D
Este parmetro define Buffer de mensagens:

## Feel free to increase this if the machine panics


-b 8192
Definindo regras do modo panic:

-f 2
Definio de polticas para log do prprio Framework Audit:

-w /var/log/audit/ -k loca_audit
-w /var/log/audit/audit.log -k
-w /etc/libaudit.conf -k loca-changemanagement -p wa -k loca_audit
-w /etc/audisp/ -p wa -k loca-changemanagement -k loca_audit
-w /etc/audit/ -p wa -k loca_audit
-w /etc/audit/auditd.conf -p wa -k loca-changemanagement -k loca_audit
-w /etc/audit/audit.rules -p wa -k loca-changemanagement -k loca_audit
Exemplos de regras para auditoria a system call especficas:

-a entry,always -S creat -S open -S truncate -S ftruncate


-a entry,always -S truncate64 -k loca_syscall
-a entry,always -S ftruncate64 -k loca_syscall
Exemplo de conjunto de regras para Auditoria de System Call vinculadas a CHMOD e CHOWN:

-a entry,always -F arch=b32 -S chmod -S fchmod -S fchmodat -k loca_


syscall
-a entry,always -F arch=b64 -S chmod -S fchmod -S fchmodat -k loca_
syscall
-a entry,always -F arch=b32 -S chown -S fchown -S fchownat -S
lchown -k loca_syscall
-a entry,always -F arch=b64 -S chown -S fchown -S fchownat -S
lchown -k loca_syscall
-a entry,always -F arch=b32 -S fchown32 -S chown32 -S lchown32 -k

Hardening em Linux

loca_syscall

248

-a entry,always -S unlink -S rename -S link -S symlink -k loca_


syscall
-a entry,always -S mknod -k loca_syscall
-a entry,always -S mount -k loca_syscall
-a entry,always -S clone -k loca_syscall

-a entry,always -S fork -k loca_syscall


-a entry,always -S vfork -k loca_syscall
-a entry,always -S clone2 -k loca_syscall
-a entry,always -S umask -k loca_syscall
-a entry,always -S adjtimex -S settimeofday -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas a operaes de move, remover
e link de arquivo:

-a entry,always -F arch=b32 -S unlink -S unlinkat -S rename -S


renameat -k loca_syscall
-a entry,always -F arch=b64 -S unlink -S unlinkat -S rename -S
renameat -k loca_syscall
-a entry,always -F arch=b32 -S link -S linkat -S symlink -S symlinkat
-k loca_syscall
-a entry,always -F arch=b64 -S link -S linkat -S symlink -S symlinkat
-k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas a operaes de Manipulao de
atributos de arquivos:

-a entry,always -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S


removexattr -S lremovexattr -S fremovexattr -k loca_syscall
-a entry,always -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S
removexattr -S lremovexattr -S fremovexattr -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas a operaes com arquivos
de dispositivos:

-a entry,always -F arch=b32 -S mknod -S mknodat -k loca_syscall


-a entry,always -F arch=b64 -S mknod -S mknodat -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas a operaes com diretrios:

-a entry,always -F arch=b32 -S mkdir -S mkdirat -S rmdir -k loca_

-a entry,always -F arch=b64 -S mkdir -S mkdirat -S rmdir -k loca_


syscall
Exemplo de regras para auditoria de System Calls vinculadas a operaes de montagem:

-a entry,always -S umount-k loca_syscall -k loca_syscall


-a entry,always -S umount2 -k loca_syscall -k loca_syscall
-a entry,always -F arch=b32 -S mount -S umount -S umount2 -k loca_
syscall
-a entry,always -F arch=b64 -S mount -S umount -S umount2 -k loca_
syscall

Captulo 10 - Auditoria na camada de Kernel

syscall

249

Exemplo de regras para auditoria de System Calls vinculadas a IPC SYSV (filas de mensagens
entre componentes do kernel):

-a entry,always -S ipc -F a0=14 -k loca_syscall


-a entry,always -S ipc -F a0=13 -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas a IPC SYSV semaphores:

-a entry,always -S ipc -F a0=3 -k loca_syscall


-a entry,always -S ipc -F a0=2 -k loca_syscall
-a entry,always -S ipc -F a0=1 -k loca_syscall
-a entry,always -S ipc -F a0=4 -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas IPC SYSV shared memory:

-a entry,always -S ipc -F a0=24 -k loca_syscall


-a entry,always -S ipc -F a0=23 -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas criao de processos (fork) ou
de thread (clone), para uso muito especfico:

-a entry,always -F arch=b32 -S clone -k loca_syscall


-a entry,always -F arch=b64 -S clone -k loca_syscall
-a entry,always -F arch=b32 -S fork -S vfork -k loca_syscall
-a entry,always -F arch=b64 -S fork -S vfork -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas a UMASK:

-a entry,always -F arch=b32 -S umask -k loca_syscall


-a entry,always -F arch=b64 -S umask -k loca_syscall
Exemplo de regras para auditoria de System Calls vinculadas modificao de horrio
no sistema:

-a entry,always -F arch=b32 -S adjtimex -S settimeofday -S clock_


settime -k loca_syscall
-a entry,always -F arch=b64 -S adjtimex -S settimeofday -S clock_
settime

-k loca_syscall

Exemplo de regras para auditoria de System Calls vinculadas a PTRACE:

-a entry,always -F arch=b32 -S ptrace

-k loca_syscall

Hardening em Linux

Exemplo de regras para auditoria de System Calls:

-a exit,always -F arch=b32 -S personality

-k loca_syscall

Exemplo de regras para auditoria de gerncia de atividades de CRON / AT / ANACRON

-w /var/spool/at
-w /etc/at.allow -p wa -k loca-changemanagement
-w /etc/at.deny -p wa -k loca-changemanagement

250

-k loca_cron
-k loca_cron

-w /etc/cron.allow -p wa -k loca-changemanagement -k loca_cron


-w /etc/cron.deny -p wa -k loca-changemanagement -k loca_cron
-w /etc/cron.d/ -p wa -k loca-changemanagement
-w /etc/cron.daily/ -p wa -k
-w /etc/cron.hourly/

-k loca_cron

loca-changemanagement -k loca_cron

-p wa -k loca-changemanagement

-k loca_cron

-w /etc/cron.monthly/ -p wa -k loca-changemanagement

-k loca_cron

-w /etc/cron.weekly/ -p wa -k loca-changemanagement
-w /etc/crontab -p wa -k loca-changemanagement

-k loca_cron

-k loca_cron

-w /var/spool/cron/root -p wa -k loca-changemanagement -k loca_cron


-w /etc/anacrontab

-p wa -k loca-changemanagement -k loca_cron

Exemplo de regras para auditoria de configuraes gerais inerentes autenticao de usurios:

-w /etc/group -k loca_autenticacao -k loca-changemanagement


-w /etc/passwd -k loca_autenticacao -k loca-changemanagement
-w /etc/passwd- -k loca_autenticacao -k loca-changemanagement
-w /etc/gshadow -k loca_autenticacao -k loca-changemanagement
-w /etc/shadow -k loca_autenticacao -k loca-changemanagement
-w /etc/shadow- -k loca_autenticacao -k loca-changemanagement
-w /etc/login.defs -p wa -k loca_autenticacao -k locachangemanagement
Exemplo de regras para auditoria de configuraes com recursos de autenticao:

-w /etc/sudoers -p wa -k loca_autenticacao
-w /etc/securetty -p wa -k loca-changemanagement
-w /var/log/faillog -p wa -k loca-changemanagement
-w /var/log/lastlog -p wa -k loca-changemanagement

-w /etc/profile
-w /etc/bashrc

-p wa -k loca-changemanagement
-k -p wax loca-changemanagement
-p wa -k loca-changemanagement

-w /etc/csh.cshrc -p wa -k loca-changemanagement
-w /etc/csh.login -p wa -k loca-changemanagement
-w /etc/sysconfig/ -p wa -k loca-changemanagement
Exemplo de regras para auditoria de configurao do /etc:

-w /etc/inittab

-p wa -k loca-changemanagement

-w /etc/rc.local -p wa -k loca-changemanagement

Captulo 10 - Auditoria na camada de Kernel

-w /etc/shells

251

-w /etc/rc.sysinit -p wa -k loca-changemanagement
-w /etc/ld.so.conf -p wa -k loca-changemanagement
-w /etc/ld.so.conf.d/ -p wa -k loca-changemanagement
-w /etc/localtime -p wa -k loca-changemanagement
-w /etc/sysctl.conf -p wa -k loca-changemanagement
-w /etc/modprobe.conf -p wa -k loca-changemanagement
-w /etc/issue -p wa -k loca-changemanagement
-w /etc/issue.net -p wa -k loca-changemanagement
-w /et/motd -p wa -k loca-changemanagement
-w /etc/pam_smb.conf -p wa -k loca-changemanagement
Exemplo de regras para auditoria de configuraes PAM:

-w /etc/pam.d/ -p wa -k loca-changemanagement -p pam


-w /etc/security/limits.conf -p wa -k loca-changemanagement -p pam
-w /etc/security/pam_env.conf -p wa -k loca-changemanagement -p pam
-w /etc/security/namespace.conf -p wa -k loca-changemanagement -p
pam
-w /etc/security/namespace.init -p wa -k loca-changemanagement -p
pam
Exemplo de regras para auditoria de configurao para auditoria de servios de rede:

-w /etc/hosts -p wa -k loca-changemanagement -k loca-network


-w /etc/sysconfig/network-scripts/ -p wa -k loca-changemanagement
-k loca-network
-w /etc/dhcpd.conf -p wa -k loca-changemanagement -k loca-network
-w /etc/dhclient-eth0.conf -p wa -k loca-changemanagement -k locanetwork
-w /etc/xinetd.conf -p wa -k loca-changemanagement -k loca-network
-w /etc/xinetd.d/ -p wa -k loca-changemanagement -k loca-network
-w /etc/hosts.allow -p wa -k loca-changemanagement -k loca-network
-w /etc/hosts.deny -p wa -k loca-changemanagement -k loca-network

Hardening em Linux

-w /etc/hosts -p wa -k loca-changemanagement -k loca-network t

252

-w /etc/resolv.conf -p wa -k loca-changemanagement -k loca-network


-w /etc/nsswitch.conf -p wa -k loca-changemanagement -k loca-network

Exemplo de regras para auditoria de configuraes de rede do servio NFS / AUTOMOUNT:

-w /etc/auto.master -p wa -k loca-changemanagement -k nfs


-w /etc/auto.misc -p wa -k loca-changemanagement -k nfs
-w /etc/exports -p wa -k loca-changemanagement -k nfs
Exemplo de regras para auditoria de configuraes de rede do servio Postfix:

-w /etc/postfix/ -p wa -k loca-changemanagement -k postfix


Exemplo de regras para auditoria de configuraes de rede do servio NTP:

-w /etc/ntp.conf -k change_management -k ntp


# Regras para Auditoria em configuraes de rede do servio SSH:

-w /etc/ssh/sshd_config -p wa -k loca-changemanagement -k ssh


Exemplo de regras para auditoria do servio STUNNEL:

-w /etc/stunnel/stunnel.conf -p wa -k loca-changemanagement -k stunnel


-w /etc/stunnel/stunnel.pem -p wa -k loca-changemanagement -k stunnel
Exemplo de regras para auditoria de configuraes de rede do servio FTP / VSFTP:

-w /etc/vsftpd.ftpusers -p wa -k loca-changemanagement -k

ftpusers

-w /etc/vsftpd/vsftpd.conf -p wa -k loca-changemanagement -k vsftpd


Exemplo de regras para auditoria de configuraes de rede do servio HTTP / APACHE:

-w /etc/httpd/conf/ -p wa -k loca-changemanagement -k apache


-w /etc/httpd/conf.d/ -p wa -k loca-changemanagement -k apache
Exemplo de regras para auditoria de configuraes de rede do servio SAMBA:

-w /etc/samba/smb.conf -p wa -k loca-changemanagement -k samba


-w /etc/samba/smbpasswd -p wa -k loca-changemanagement -k samba
-w /etc/samba/secrets.tdb -p wa -k loca-changemanagement -k samba
-w /etc/my.conf -p wa -k loca-changemanagement -k samba

-w /etc/aliases -p wa -k loca-changemanagement -k sendmail -k postifx


-w /etc/mail/access -p wa -k loca-changemanagement

-k sendmail

-w /etc/mail/access.db -p wa -k loca-changemanagement
-w /etc/mail/aliases -p wa -k loca-changemanagement

-k sendmail

-k sendmail

-w /etc/mail/domaintable -p wa -k loca-changemanagement
-w /etc/mail/domaintable.db -p wa -k loca-changemanagement

-k sendmail
-k sendmail

-w /etc/mail/helpfile -p wa -k loca-changemanagement -k sendmail


-w /etc/mail/local-host-names -p wa -k loca-changemanagement -k sendmail

Captulo 10 - Auditoria na camada de Kernel

Exemplo de regras para auditoria de configuraes gerais de e-mail para o sendmail:

253

-w /etc/mail/mailertable -p wa -k loca-changemanagement -k sendmail


-w /etc/mail/mailertable.db -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/Makefile -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/sendmail.cf -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/sendmail.mc -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/submit.cf -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/submit.mc -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/trusted-users -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/virtusertable -p wa -k loca-changemanagement -k sendmail
-w /etc/mail/virtusertable.db -p wa -k loca-changemanagement -k
sendmail
Exemplo de regras para auditoria de configuraes de rede do servio LOG / SNMP:

-w /etc/syslog.conf -p wa -k loca-changemanagement -k syslog


-w /etc/snmp/snmpd.conf -p wa -k loca-changemanagement -k snmp
Exemplo de regras para auditoria de configuraes de rede do servio NIS:

-w /etc/yp.conf -k loca-changemanagement -k nis


-w /var/yp/bindingv -k loca-changemanagement

-k nis

Exemplo de regras para auditoria de configuraes de rede do servio ldap:

-w /etc/ldap.conf -k loca-changemanagement -k ldap


Exemplo de regras para auditoria de configuraes de rede do servio kerberos:

-w /etc/krb5.conf -p wa -k loca-changemanagement -k kerberos


-w /etc/krb.conf -p wa -k loca-changemanagement -k kerberos
-w /etc/krb.realms -p wa -k loca-changemanagement -k kerberos
-w /etc/initlog.conf -p wa -k loca-changemanagement
-w /etc/default/ -p wa -k loca-changemanagement
-w /etc/firmware/microcode.dat -p wa -k loca-changemanagement
-w /etc/fstab -p wa -k loca-changemanagement
Tornando imutvel as regras do Framework Audit:

Hardening em Linux

-e 2

254

Realizao de auditoria para identificao de alteraes acesso ao arquivo /etc/passwd com o


comando ausearch.
Trs exemplificaes de como usar o comando ausearch:

# ausearch -f /etc/passwd

# ausearch -f /etc/passwd | less


# ausearch -f /etc/passwd -i | less
Onde:
11 * -f /etc/passwd: apenas procura por esse arquivo;
11 * -i: interpreta entidades numricas no texto. Por exemplo, UIDs so convertidos para
nomes de usurio.
Sada:

type=PATH msg=audit(03/16/2007 14:52:59.985:55) : name=/etc/passwd


flags=follow,open
inode=23087346 dev=08:02 mode=file,644 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(03/16/2007 14:52:59.985:55) : cwd=/webroot/home/
lighttpd
type=FS_INODE msg=audit(03/16/2007 14:52:59.985:55) : inode=23087346
inode_uid=root
inode_gid=root inode_dev=08:02 inode_rdev=00:00
type=FS_WATCH msg=audit(03/16/2007 14:52:59.985:55) : watch_
inode=23087346 watch=passwd
filterkey=password-file perm=read,write,append perm_mask=read
type=SYSCALL msg=audit(03/16/2007 14:52:59.985:55) : arch=x86_64
syscall=open success=yes
exit=3 a0=7fbffffcb4 a1=0 a2=2 a3=6171d0 items=1 pid=12551
auid=unknown(4294967295)
uid=lighttpd gid=lighttpd euid=lighttpd suid=lighttpd fsuid=lighttpd
egid=lighttpd
sgid=lighttpd fsgid=lighttpd comm=grep exe=/bin/grep
Como deve-se analisar a sada:
11 * audit(03/16/2007 14:52:59.985:55): data do registro da auditoria;
a opo i, quase todos os dados numricos so convertidos para dados humanamente
legveis. No exemplo, o usurio lighttpd usou o comando grep para abrir o arquivo;
11 * exe=/bin/grep: comando utilizado para acessar o arquivo /etc/passwd;
11 * perm_mask=read: o arquivo foi aberto para leitura;
Verifica-se que a partir dos arquivos de log do Framework Audit podemos rastrear quem
consultou um arquivo com grep ou gravou alteraes utilizando o editor vi/vim. Os logs
proveem grande quantidade de informaes. Precisamos ler as pginas de manual (man
pages) e demais documentaes para entender o formato de log cru.

Captulo 10 - Auditoria na camada de Kernel

11 * uid=lighttpd gid=lighttpd: UIDs e GIDs convertidos para formato de texto. Passando

255

Outros exemplos teis


Pesquisar eventos com data e hora especfica. Se a data for omitida, a data de hoje assumida. Se a hora for omitida, agora assumido por padro. Use a notao de 24 horas em
vez da notao AM/PM para especificar a hora. Exemplo: data 24/20/05, hora 18:00:00.

# ausearch -ts today -k password-file


# ausearch -ts 3/12/07 -k password-file
Pesquisar por um evento casando com o utilitrio especificado utilizando a opo -x.
Por exemplo, verificar quem acessou o arquivo /etc/passwd usando rm.

# ausearch -ts today -k password-file -x rm


# ausearch -ts 3/12/07 -k password-file -x rm
Pesquisar por um evento de determinado usurio pelo UID. Verificar se o usurio neo
(UID 876) tentou acessar o arquivo /etc/passwd:

# ausearch -ts today -k password-file -x rm -ui 876


# ausearch -k password-file -ui 506
Gerao de relatrios com a ferramenta AUREPORT.
Exemplos de consultas base de registros do Framework Audit com aureport, de extrao
de informaes sobre a contabilizao:

# aureport -if /var/log/audit/audit.log

Summary Report
======================
Range of time in logs: 27-09-2010 11:24:46.596 - 28-09-2010
13:16:04.690
Selected time for report: 27-09-2010 11:24:46 - 28-09-2010
13:16:04.690
Number of changes in configuration: 0
Number of changes to accounts, groups, or roles: 5254
Number of logins: 0
Number of failed logins: 0
Number of authentications: 12

Hardening em Linux

Number of failed authentications: 729

256

Number of users: 12
Number of terminals: 5
Number of host names: 21
Number of executables: 7

Number of files: 0
Number of AVCs: 0
Number of MAC events: 0
Number of failed syscalls: 0
Number of anomaly events: 0
Number of responses to anomaly events: 0
Number of crypto events: 0
Number of keys: 0
Number of process IDs: 7617
Number of events: 17661

# aureport --failed

Failed Summary Report


======================
Range of time in logs: 23-09-2009 05:41:55.438 - 28-09-2009 13:20:56.660
Selected time for report: 23-09-2009 05:41:55 - 28-09-2009 13:20:56.660
Number of changes in configuration: 0
Number of changes to accounts, groups, or roles: 25895
Number of logins: 0
Number of failed logins: 0
Number of authentications: 0
Number of failed authentications: 6288
Number of users: 0

Number of host names: 45


Number of executables: 3
Number of files: 0
Number of AVCs: 0
Number of MAC events: 0
Number of failed syscalls: 0
Number of anomaly events: 0

Captulo 10 - Auditoria na camada de Kernel

Number of terminals: 5

Number of responses to anomaly events: 0


257

Number of crypto events: 0


Number of keys: 0
Number of process IDs: 20681
Number of events: 32212

# aureport --success

Success Summary Report


======================
Range of time in logs: 23-09-2009 05:41:55.438 - 28-09-2009
13:29:34.423
Selected time for report: 23-09-2009 05:41:55 - 28-09-2009
13:29:34.423
Number of changes in configuration: 0
Number of changes to accounts, groups, or roles: 633
Number of logins: 0
Number of failed logins: 0
Number of authentications: 128
Number of failed authentications: 0
Number of users: 13
Number of terminals: 10
Number of host names: 48
Number of executables: 8
Number of files: 0
Number of AVCs: 0
Number of MAC events: 0
Number of failed syscalls: 0
Number of anomaly events: 0

Hardening em Linux

Number of responses to anomaly events: 0

258

Number of crypto events: 0


Number of keys: 0
Number of process IDs: 11190
Number of events: 58292

aureport -u --summary

User Summary Report


===========================
total

auid

===========================
11560
600

0
3000

80

3209

20

50537

12

3589

10

50549

10

50507

10

50540

10

3572

10

3246

10

3097

10

3270

3154

Sada parcial:

aureport -e

Event Report
===================================

===================================
1. 23-09-2009 05:41:55 4143669 CRED_ACQ -1 yes
2. 23-09-2009 05:41:55 4143670 USER_START -1 yes
3. 23-09-2009 05:41:55 4143671 USER_END -1 yes
4. 23-09-2009 05:41:55 4143672 USER_CMD -1 yes
5. 23-09-2009 05:42:56 4143673 CRED_ACQ -1 yes
6. 23-09-2009 05:42:56 4143674 USER_START -1 yes

Captulo 10 - Auditoria na camada de Kernel

# date time event type auid success

7. 23-09-2009 05:42:56 4143675 USER_END -1 yes


259

8. 23-09-2009 05:42:56 4143676 USER_CMD -1 yes


9. 23-09-2009 05:43:34 4143677 CRED_ACQ -1 yes
10. 23-09-2009 05:43:34 4143678 USER_START -1 yes
11. 23-09-2009 05:43:34 4143679 USER_END -1 yes
12. 23-09-2009 05:43:34 4143680 USER_CMD -1 yes
13. 23-09-2009 05:43:34 4143681 CRED_ACQ -1 yes
14. 23-09-2009 05:43:34 4143682 USER_START -1 yes
15. 23-09-2009 05:43:34 4143683 USER_END -1 yes
Parcial:

# aureport -p

Process ID Report
======================================
# date time pid exe syscall auid event
======================================
1. 23-09-2009 05:41:55 14397 /usr/bin/sudo 0 -1 4143669
2. 23-09-2009 05:41:55 14397 /usr/bin/sudo 0 -1 4143670
3. 23-09-2009 05:41:55 14397 /usr/bin/sudo 0 -1 4143671
4. 23-09-2009 05:41:55 14397 ? 0 -1 4143672
5. 23-09-2009 05:42:56 14503 /usr/bin/sudo 0 -1 4143673
6. 23-09-2009 05:42:56 14503 /usr/bin/sudo 0 -1 4143674
7. 23-09-2009 05:42:56 14503 /usr/bin/sudo 0 -1 4143675
8. 23-09-2009 05:42:56 14503 ? 0 -1 4143676
9. 23-09-2009 05:43:34 14572 /usr/bin/sudo 0 -1 4143677
10. 23-09-2009 05:43:34 14572 /usr/bin/sudo 0 -1 4143678
11. 23-09-2009 05:43:34 14572 /usr/bin/sudo 0 -1 4143679
12. 23-09-2009 05:43:34 14572 ? 0 -1 4143680

Hardening em Linux

13. 23-09-2009 05:43:34 14574 /usr/bin/sudo 0 -1 4143681

260

14. 23-09-2009 05:43:34 14574 /usr/bin/sudo 0 -1 4143682


15. 23-09-2009 05:43:34 14574 /usr/bin/sudo 0 -1 4143683

#aureport -x | head -n 25

Executable Report
====================================
# date time exe term host auid event
====================================
1. 23-09-2009 05:41:55 /usr/bin/sudo ? hm1208 -1 4143669
2. 23-09-2009 05:41:55 /usr/bin/sudo ? hm1208 -1 4143670
3. 23-09-2009 05:41:55 /usr/bin/sudo ? hm1208 -1 4143671
4. 23-09-2009 05:42:56 /usr/bin/sudo ? hm1208 -1 4143673
5. 23-09-2009 05:42:56 /usr/bin/sudo ? hm1208 -1 4143674
6. 23-09-2009 05:42:56 /usr/bin/sudo ? hm1208 -1 4143675
7. 23-09-2009 05:43:34 /usr/bin/sudo ? hm1208 -1 4143677
8. 23-09-2009 05:43:34 /usr/bin/sudo ? hm1208 -1 4143678
9. 23-09-2009 05:43:34 /usr/bin/sudo ? hm1208 -1 4143679
10. 23-09-2009 05:43:34 /usr/bin/sudo ? hm1208 -1 4143681
11. 23-09-2009 05:43:34 /usr/bin/sudo ? hm1208 -1 4143682
12. 23-09-2009 05:43:34 /usr/bin/sudo ? hm1208 -1 4143683
13. 23-09-2009 05:43:58 /usr/bin/sudo ? hm1208 -1 4143685
14. 23-09-2009 05:43:58 /usr/bin/sudo ? hm1208 -1 4143686
15. 23-09-2009 05:43:58 /usr/bin/sudo ? hm1208 -1 4143687
16. 23-09-2009 05:44:58 /usr/bin/sudo ? hm1208 -1 4143689
17. 23-09-2009 05:44:58 /usr/bin/sudo ? hm1208 -1 4143690
18. 23-09-2009 05:44:58 /usr/bin/sudo ? hm1208 -1 4143691
19. 23-09-2009 05:45:01 /usr/sbin/crond cron ? -1 4143693

# aureport -u | tail

/sbin/audispd permissions should be 0750


84. 09/23/2009 14:48:31 -1 ? ? ? 3
85. 09/23/2009 14:53:00 -1 (none) ? /usr/lib/virtualbox/VirtualBox 4
86. 09/23/2009 14:56:22 -1 ? ? ? 5
87. 09/23/2009 14:56:51 -1 (none) ? /usr/lib/virtualbox/VirtualBox 6

Captulo 10 - Auditoria na camada de Kernel

20. 23-09-2009 05:45:01 /usr/sbin/crond cron ? -1 4143694

88. 09/23/2009 15:16:23 -1 (none) ? /usr/lib/virtualbox/VirtualBox 7


261

89. 09/23/2009 15:43:54 -1 ? ? ? 8


90. 09/24/2009 15:17:47 -1 pts8 ? /usr/sbin/tcpdump 9
91. 09/24/2009 15:18:03 -1 pts8 ? /usr/sbin/tcpdump 10
92. 09/28/2009 10:46:01 -1 pts6 ? /usr/sbin/tcpdump 11
93. 09/28/2009 10:51:51 -1 pts6 ? /usr/sbin/tcpdump 12

Log Time Range Report


=====================
/var/log/audit/audit.log.3: 23-09-2009 05:41:55.438 - 24-09-2009
17:41:06.885
/var/log/audit/audit.log.2: 24-09-2009 17:41:06.936 - 26-09-2009
03:10:37.737
/var/log/audit/audit.log.1: 26-09-2009 03:10:37.771 - 27-09-2009
11:24:46.596
/var/log/audit/audit.log: 27-09-2009 11:24:46.596 - 28-09-2009

Hardening em Linux

14:15:25.638

262

Roteiro de Atividades 10
Atividade 10.1 Hardening em Sistema Linux
Na prtica de customizao, regras de registro de eventos a partir da syscalls com o Framework
Audit. Ser necessrio que o aluno utilize a mquina virtual preparada como Virtuabox. Dessa
forma, ser possvel aplicar todos os conhecimentos (tcnicas e ferramentas) de Hardening
propostos at o momento.

Atividade 10.2 Hardening Linux Registro de Eventos (logs) e Auditoria


1. Instale e configure o deamon do Audit.
2. Crie regra no /etc/audit/audit.conf para auditoria do /tmp, registrado qualquer ao do
tipo: escrita, execuo e alterao.
3. Crie regra no /etc/audit/audit.conf para auditoria do /root, registrando qualquer ao do
tipo: escrita, execuo e alterao.
4. Crie regra no /etc/audit/audit.conf para auditoria para registrar ao do tipo: escrita,
execuo e alterao no respectivos diretrios: /etc/logrotate/, /etc/hosts.allow /etc/hosts.
deny, /etc/hosts, /etc/xinetd.d/, /etc/passwd e /etc/shadow.
5. Crie uma regra no /etc/audit/audit.conf para monitorar execuo dos comandos: shutdown,
reboot, halt, shred, nc, tcpdump e nmap.

Captulo 10 - Roteiro de Atividades 10

6. Configure o Framework Audit para enviar logs para o Syslog.

263

264

Hardening em Linux

Doutorando no TIDD-PUC/SP, Mestre


em Engenharia da Computao no
IPT/USP, Mestre em Engenharia de
Redes pelo IPT/USP; Ps-graduado em
Administrao de Redes Linux pela
UFLA-MG; Ps-graduado em Anlise de
Sistemas e Graduao em Processamento de Dados pela Universidade Mackenzie, atua na
rea de TI desde de 1997, realizando neste perodo vrios
projetos de implantao de servios de rede e segurana.
Atualmente atua como Coordenador do Curso de Redes
de Computadores na BANDTEC responsvel pela cadeira
de Sistemas Operacionais, Computao Distribuda e
Centralizada e Segurana e Auditoria. um evangelista do
Software Livre, sendo embaixador Fedora, Proctor BSDA
e LPI, tambm atua como professor convidado responsvel por ctedras inerentes a Segurana e Computao
Forense em sistema Linux, j tendo a oportunidade de
atuar na UFLA/ARL (MG), IBTA (Campinas), UNISALES (ES),
Faculdade Pitgoras (Guarapari-ES, Teixeira de Freitas-BA),
Universidade Potiguar (RN), ITA (SP), IEASAM (PA), Uniron
(RO), FAAR(RO), FACID (PI) entre outras. Sendo idealizador
e coordenador dos cursos de Ps Graduao Segurana
e Computao Forense nas entidades: Universidade
Maurcio de Nassau (AL) , Faculdade FACID (PI), Faculdade
CET(PI), Faculdade Atual (RR), Iquali/EEEMBA (BA); Instrutor
autorizado FreeBSDBrasil e convidado da Academia Clavis..

LIVRO DE APOIO AO CURSO

O livro apresenta os conceitos tericos e prticos sobre


a anlise de ameas, minimizao de riscos e execuo
rede e seus servios bsicos, como tambm, formas de
reforo e garantia da segurana para tais equipamentos
de aplicar diversas tcnicas, procedimentos e utilizar
a segurana de seus servios elevada atendendo os
requisitos de segurana necessrios. Este livro inclui
os roteiros de atividades prticas e o contedo dos
slides apresentados em sala de aula, apoiando
suas organizaes ou localidades de origem.

ISBN 978-85-63630-27-8

9 788563 630278