Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
em Linux
Sandro Melo
responsvel
pelo
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
Diretor Geral
Nelson Simes
Diretor de Servios e Solues
Jos Luiz Ribeiro Filho
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
iii
iv
7. Firewall Parte 1
Introduo149
Arquitetura de firewall150
vi
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
viii
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
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).
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.
conceitos
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.
objetivos
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.
fork_bomb() {
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.
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.
Figura 1.3
Ferramentas,
polticas e
capacitao.
Flexibilidade
do usurio
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:
# rpm qa
um programa para ganhar um acesso no autorizado ao sistema) para um ataque tanto local
Exerccio de fixao 2 e
Pacotes instalados
Alguns desses programas apresentados esto instalados na sua organizao? Por qu?
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:
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:
# 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:
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:
> llst_update
Aps gerar a lista, use novamente o debsecan para atualizar os respectivos pacotes:
wheezy --only-fixed
--format packages)
Aps o trmino, atualize a whitelist:
# debsecan --show-whitelist
Existe opo de gerar uma entrada no crontab para que o debsecan seja executado via cron.
Basta executar o comando:
# debsecan-create-cron
--update-history
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.
Hardening em Linux
# cd /root
10
# mkdir teste
# find / -perm -04000 > /root/teste/lista.suid
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,
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
# 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
Logo aps remover o Suid bit de todo o sistema, basta definir a permisso de Suid bit
Exerccio de fixao 2 e
Particionamento
Como feita a segurana dos particionamentos das mquinas servidoras na sua organizao?
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
$ 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 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
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
14
# 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.
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.
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
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.
# 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
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
mount
;;
*) echo erro use $0 {start|stop}
exit 0
;;
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
um servidor com o sistema Windows. Assim, evitamos que em algum momento algum
18
Pode-se tambm mapear as teclas para executar um outro comando qualquer, por exemplo:
# 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:
# initctl reload-configuration
Exerccio de fixao 2 e
CTRL+ALT+DEL
Qual a principal vantagem de desabilitarmos o uso do CTRL+ALT+DEL?
# 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]
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.
# 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:
Hardening em Linux
20
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.
# 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.
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
# 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.
# 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.
# 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.
# cd /root
# vi invalidos.sh#!/bin/bash
do
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
shell invlida.
23
Depois da execuo do script, visualize novamente o arquivo /etc/passwd e veja como ficou.
# 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
Hardening em Linux
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;
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-mkpasswd-pbkdf2
Enter password:
Reenter password:
Your PBKDF2 is grub.pbkdf2.sha512.10000.706A070CD168B759801D2790C6D4
8D5C3842B9165CF08600918CD9A496B6BFF9CD9BB8F7C99DEC431DF3AD0D466709
ECE041FC00C5C1B58F00A879E0322959B7.6FC5058001DFFC1CD6B35F9A5DA66ED6C
25
8745E4999E064E712C9BF302E8F2547CD0B591C33A340F229FD79D2252E23CFC4141
0C9A3300537E54C9CE6F7008100
Adicionando o cdigo de proteo a seguir no final do arquivo /etc/grub.d/00_header. Cdigo:
# update-grub
Dessa forma, o arquivo /boot/grub/grub.cfg ser recompilado e ser adicionado proteo.
Proteja o arquivo /boot/grub/grub.cfg:
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
26
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.
executados e os resultados.
27
Hardening em Linux
28
caso do rkhunter, utilize a opo de gerao de hash para melhor para posterior auditoria.
29
Hardening em Linux
30
conceitos
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.
objetivos
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?
4. Em sua empresa, existe qual critrio de auditoria de senhas para que seja possvel identificar senhas fracas?
Hardening em Linux
Mas ser que esses dois arquivos possibilitariam a criao de um controle definindo o
# 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.
Saiba mais
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
# 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:
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
35
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.
$ 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
36
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
cpias remotas).
37
# 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
38
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.
# 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.
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);
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
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
Hardening em Linux
/dev/hda6
blocks
0
soft
0
hard
0
inodes
soft
hard
50
60
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.
# 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.
# 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:
# quotaon -v /home
- rwx r--r--
1 root
admin
4096
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
Posix 1e
41
# 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
# apt-get update
# apt-get install acl
42
# 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.
# vim /etc/fstab
/dev/sda6 /var/log ext4 default,noexec,nosuid,noatime,acl 0 2
# mount
-o remount,acl /var/log
43
# getfacl R /var/log
# getfacl R /varlog/httpd
# 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
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:
User_Alias USERS_SYSOP =
de Suid bit ativada podem, durante o processo de Hardening, terem essas permisses de
45
USERS_SYSOP
USERS_SYSADMIN
ALL = ALL
USERS_WEBMASTER ALL =
Hardening em Linux
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.
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
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
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 3 Quotas
1. Crie quotas de 200 MB por grupo no diretrio /home para todos os usurios criados
no exerccio 1.
Hardening em Linux
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
3. Crie regras de ACL permitindo acesso e leitura aos arquivos de diretrio em /var/log para
o grupo syslog:
51
# 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 -b /var/log
Hardening em Linux
# getfacl R b /var/personal
52
setfacl --restore=/root/acl.txt
_ User_Alias USERS_SYSOP =
53
USERS_SYSADMIN
ALL = ALL
USERS_WEBMASTER ALL =
Cmnd_Alias
USERS_SYSOP
EDIT
USERS_SYSOP
Hardening em Linux
DOWNOFF, EDIT
54
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.
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).
conceitos
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
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)?
Trilha de comandos
Todos os comandos digitados pelo usurio so mantidos em um histrico.
# 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.
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
58
{
_ARQ=$1
POLICE_RONLY=readonly -n $VAR_HIST
for VAR_HIST in HISTFILE HISTFILESIZE HISTSIZE HISTTIMEFORMAT
do
>> $_ARQ
func_readonly_hist()
59
then
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
d Boas prticas
$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
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.
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.
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.
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
# 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.);
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
# 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); };
# OPCES DE DESTINO
destination authlog { file(/var/personal/auth.log owner(root)
group(root) perm(0640)); };
65
Hardening em Linux
66
67
Hardening em Linux
group(root) perm(0640)); };
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.
Caso queira criar automaticamente, vamos a um exemplo de script para automatizar a tarefa:
# cd /root
# vi estrutura.sh
#!/bin/bash
dir=/var/personal
69
# ./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
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.
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:
# vi /etc/syslog-ng.conf
# OPES DE ORIGEM
## Origem Mquinas Remotas
Hardening em Linux
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.
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):
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
Hardening em Linux
# /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.
# 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:
cert = /etc/stunnel/syslogclient.pem
# /etc/init.d/stunnel4 start
75
# 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.
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
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
# 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.
# 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.
79
# 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
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
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
!/var/cache/squid.
81
Hardening em 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.
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.
5. Crie uma regra no Syslog-ng para concentrar em um nico arquivo todos os logs.
83
Hardening em Linux
84
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.
# cat /etc/services
objetivos
ssh
22/tcp
ssh
22/udp
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:
0.0.0.0:22
0.0.0.0:*
OUA
Hardening em Linux
# netstat -nat
88
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
22/tcp
root
3943 f....
sshd
# 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
>64.233.161.19:www (ESTABLISHED)
ssh
8342
>192.168.0.8:ssh
root
3u
(ESTABLISHED)
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.
Saiba mais
firefox-b 4652
89
Sada de uma resposta positiva, utilizando o netstat para listar os raw sockets:
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
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:
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
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
PORT
STATE
SERVICE
# 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
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
22/tcp
open
ssh
25/tcp
open
smtp
111/tcp open
113/tcp open
ident
OpenBSD identd
91
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.
Figura 4.2
Tabela de sada
do comando
lsof.
Hardening em Linux
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.
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
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.
Hardening em Linux
94
# /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:
Deamon e avaliar se realmente devem estar ativos, caso no devem ser desativados. Tpicos
95
# 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:
Hardening em Linux
# ldd /usr/sbin/sshd
96
# vi /etc/hosts.deny
sshd: ALL
# 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.
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.
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
# ./nikto.pl -update
Para uma anlise simples, basta usar a opo -host:
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
Hardening em Linux
98
hydra
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 :
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
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
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
sim
4.1+ Authentication
sim
sim
NCP (NetWare)
sim (ncpfs)
sim (ncpfs)
NNTP
sim (Original
AUTHINFO)
MySQL
Oracle
Database
Listener
SID
PcAnywhere
sim
Suporte a Encryption
Level
None
None
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
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
libssh)
SVN
sim
sim
TeamSpeak
Telnet
sim
Generic Telnet
sim
sim
Cisco (AAA/nonAAA)
sim
sim
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
SMB (Microsoft
Windows/Samba)
101
rea
Feature
Medusa 2.1
Hydra 7.1
Suporte ao
mtodo Non-SSL
Authentication
sim
sim
SSL Authentication
sim
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 .
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
# 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.
# 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
PermitRootLogin no
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.
Saiba mais
103
Banner /etc/issue.net
Aplicar restries de login relacionadas ao tempo de inatividade.
Allowgroups
administrators
PermitEmptyPasswords no
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
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
PermitEmptyPasswords no
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:
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
Subsystem sftp
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:
# /etc/init.d/ssh restart
105
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
[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
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:
# cd /pentest/enumeration/www/httprint/Linux/
# ./httprint -h <IP ALVO> -s signatures.txt
109
# cd /pentest/enumeration/complemento/httsquash
#./httsquash -r <IP ALVO>
9.5.Coleta de informaes via amap:
Hardening em Linux
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.
debsecan
| grep apache
# dpkg -L apache2-common
Estrutura da organizao dos arquivos de configurao do pacote do Apache 2 na distribuio Ubuntu:
objetivos
111
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
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
112
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.
# ls -l /bin/false
-rwxr-xr-x 1 root root 22896 Apr
# dpkg -S
2012 /bin/false
/bin/false
coreutils: /bin/false
#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-
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
113
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:
# fuser -v 80/tcp
Hardening em Linux
USER
80/tcp:
root
www-data
www-data
# lsof -n -i :80
COMMAND
114
PID
USER
FD
apache2 3921
root
3u
IPv4
16609
0t0
3u
IPv4
16609
0t0
3u
IPv4
16609
0t0
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
# 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_http proxy_scgi
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
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
# a2enmod mod-security
# service restart apache2
Acompanha informaes do registro de eventos do Modsecurity em:
tail -f
/var/log/apache2/modsec_audit.log
--f1a41278-H--
117
AccessFileName .htaccess
<Files ~ ^\.ht>
Order allow,deny
Deny from all
Satisfy all
</Files>
vi
/etc/apache2/conf.d/security
ServerSignature Off
<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
<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:
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
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)
11 http://www.owasp.org/index.php/Parameter_Delimiter
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).
options {
version None;
};
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.
localhost;
clients_corp;
};
allow-query-cache {
localhost;
clients_corp;
};
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.
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;
};
logging {
channel audtiria_log {
file /var/run/named/auditoria.log versions 10 size
20m;
severity debug;
print-time yes;
};
Hardening em Linux
124
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):
Saiba mais
125
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;
};
};
};
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
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
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.
conceitos
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?
objetivos
131
Proxy:
Hardening em Linux
forma, para que l exista uma cpia para uma consulta futura proveniente dos clientes,
132
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
source de grande utilizao para esse tipo de procedimento, que o Squid, um dos melhores
133
# 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:
# 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
135
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:
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:.
Hardening em Linux
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%
0%
1440
refresh_pattern .
20%
4320
10080
# https, snews
# rsync
# http
# ftp
# https, snews
# gopher
# wais
137
# http-mgmt
# gss-http
# filemaker
# multiling http
# cups
# rsync
# SWAT
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
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.
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:
/etc/squid/listanegra/urlquente
/etc/squid/listanegra/ audiovideo
Hardening em Linux
/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:
140
\.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:
Exerccio de Fixao e
Proxy web
Avalie o valor agregado que o controle de contedo web pode trazer em uma corporao.
141
Abreviao
Traduo
Sunday
Domingo
Monday
Segunda-feira
Tuesday
Tera-feira
Wednesday
Quarta-feira
Thursday
Quinta-feira
Friday
Sexta-feira
Saturday
Sbado
All Weekdays
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.
bbb.
globo.com
Os domnios da ACL tranqueira sero liberados exclusivamente no horrio do almoo.
Primeiro exemplo:
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
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:
# 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:
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:
a ser realizado dever ser o mesmo efetuado na configurao anterior, atravs da configu143
# vi /etc/squid/squid.conf
Linha para autenticao de usurios:
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.
# /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
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
# 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.
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:
# 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:
Hardening em Linux
Uma vez com o Dansguardian ativado, devemos realizar os testes via browser e avaliar os
146
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).
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
Introduo
Firewalls:
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.
switch/hub
Hardening em Linux
switch/hub
150
switch/hub
switch/hub
151
switch/hub
Hardening em Linux
switch/hub
152
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
switch
153
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
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).
aplicao
apresentao
apresentao
Hardening em Linux
sesso
154
sesso
transporte
transporte
rede
rede
enlace
enlace
enlace
fsica
fsica
fsica
rede
rede
enlace
enlace
enlace
fsica
fsica
fsica
fsica
fsica
Endereamento IP
Transporte
TCP / UDP / ICMP*
20 bytes
20 bytes
1460 bytes
Figura 7.5
O firewall e o
datagrama.
155
Hardening em Linux
acordo com a situao vinculada, ou seja, com a direo e origem. Tabelas que filtram pacotes:
156
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:
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
destination
destination
destination
Pelo fato de ser a tabela padro, no necessrio pass-la como parmetro, conforme explicado:
# iptables n L
target
157
Chain
Descrio
INPUT
FORWARD
OUTPUT
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
destination
destination
destination
destination
Chain
Descrio
PREROUTING
POSTROUTING
OUTPUT
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.
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
Routing
159
Descrio
-v
-n
-x
--line-numbers
Tabela 7.3
Opes das chains.
prot opt in
out
source
destination
Hardening em Linux
num
160
prot opt in
out
destination
source
num
prot opt in
out
source
destination
prot opt in
out
source
destination
prot opt in
out
source
destination
Os campos exibidos na listagem tm os seguintes significados:
Descrio
Num
Pkts
Bytes
Target
Prot
Opt
In
Out
Source
Endereo origem.
Destination
Endereo destino.
Outras opes
# 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
Tabela 7.4
Campos da
listagem de
informaes ativas
da tabela Mangle.
Campo
161
16
echo-reply
# 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.
Hardening em Linux
162
regras de cada chain individualmente ou apagam-se todas as regras das chains existentes
em uma tabela.
# iptables -Z INPUT
# iptables -t mangle -Z OUTPUT
# 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:
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.
163
Tabela
Chain
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.
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 INPUT
ACCEPT
Figura 7.7
Depois das polticas
definidas em outras
chains, as polticas
bsicas.
Co
es
no o que se deseja, mas essa a poltica bsica recomendada para construo de firewall;
165
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
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
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
iptables -A INPUT
-i lo -d 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
# vi ping2.sh
PF=$(which IPtables)
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
# ./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:
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.
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
--sport 1024:65535
--dport 111
Considerando uma regra, sendo a mquina com a regra de firewall e um servidor:
1024:65535
iptables -A OUTPUT -j ACCEPT -s 10.0.0.1 -p udp
--dport 111
--sport 1024:65535
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.
--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
1024:65535
iptables -A OUTPUT -j ACCEPT
-s 10.0.0.1
-p tcp
--sport
--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:
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.
--sport 80 --dport
1024:65535 -j ACCEPT
iptables -A FORWARD -d 192.168.10.0/24 -p tcp
1024:65535 -j ACCEPT
iptables -A FORWARD -d 192.168.10.0/24 -p tcp
1024:65535 -j ACCEPT
Hardening em Linux
176
TYPE
CODE
Description
Query
Error
Echo Reply
Network Unreachable
Host Unreachable
Protocol Unreachable
Port Unreachable
Tabela 7.5
Tipos e cdigos de
retorno inclusos
no cabealho do
protocolo ICMP.
CODE
Description
Query
Error
10
11
12
13
14
15
Source quench
Echo request
Router advertisement
10
Route solicitation
11
11
12
12
13
14
15
16
17
18
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.
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:
Hardening em Linux
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:
# vi /root/rascunho/exec.icmp
PF=$(which iptables)
NET=0/0
ETH0=192.168.200.8
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.
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
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?
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.
objetivos
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
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
# 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.
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
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
187
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.
# 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
a) Gerando uma funo usando recurso de chains para tratar conexes ICMP:
189
T=0 3 11 4
for TYPE in $T
do
ACCEPT
done
# ./ 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
Done
$PF -A OUTPUT -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
# ./state_tcp1.sh
191
$PF -A OUTPUT
Done
$PF -A INPUT -j ACCEPT
-p 6 -m state --state
ESTABLISHED,RELATED
}
# ./state_tcp2.sh
Hardening em Linux
192
#!/bin/bash
FW=/sbin/iptables
##-------------------------------clear
echo INICIANDO FIREWALL
echo Fecha tudo
$FW -F
##--------------------------------
193
done
21 80 443
do
$FW -I INPUT -j ACCEPT -p tcp -d 10.197.25.228
-m state --state
-m state --state
#!/bin/sh
# chkconfig: 345 10 10
# description: Controle de
SF=/sbin/iptables
MEUIP=192.168.100.1
CLIENTE=1024:65535
Hardening em Linux
#===========================
#AQUI ENTRAM AS FUNCOES
#===========================
case $1 in
start|-s)
194
;;
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
PF=/sbin/iptables
NET=0/0
ET0=192.168.200.9
PA=1024:65535
# chkconfig: 345 10 10
195
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
196
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
}
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
}
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
;;
;;
restart)
199
$0 stop
$0 start
;;
status)
status
;;
*)
echo Use: $0 {start|stop|restart|status|liberado|fechado}
exit 1
;;
esac
exit 0
Hardening em Linux
200
-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:
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:
--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:
200.1.2.1-200.1.2.3.4
201
-t
iptables -t nat
-p 6 -s 10.0.0.0/16 -m
Hardening em Linux
202
# vi nat.sh
PF=$(which iptables)
if [ -z $PF ] ; then
# ./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:
- -
$PORT
done
203
# 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:
Hardening em Linux
204
Protocolo Telnet
Datagramas montados na prpria mquina firewall:
Protocolo DNS
Datagramas montados na prpria mquina firewall:
--set-tos 0x10
Datagramas que atravessam a mquina para outra rede:
Protocolo IRC
Datagramas montados na prpria mquina firewall:
--set-tos 16
Datagramas que atravessam a mquina para outra rede:
205
Protocolo FTP-Data
Datagramas montados na prpria mquina Firewall:
Protocolo ICQ
Datagramas montados na prpria mquina firewall:
Protocolo SSH
Datagramas que atravessam a mquina para outra rede:
# iptables nL t mangle
Definindo polticas a partir do Mac Address, exemplo onde confere com a mquina o ende Hardening em Linux
206
Kazaa
#
DROP
#
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
207
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence
= 7000,8000,9000
seq_timeout = 5
command
-j ACCEPT
tcpflags
= syn
[closeSSH]
sequence
= 9000,8000,7000
seq_timeout = 5
command
-j ACCEPT
tcpflags
= fin
Hardening em Linux
################################################
208
# 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
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.
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
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
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
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
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:
objetivos
Usar a ferramenta sysctl para Tuning de Kernel; Conhecer Tuning na Pilha TCP/IP com
Saiba mais
Tuning TCP
Protocolo de TCP:
Hardening em Linux
216
# 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.
-v ^#
| grep .
# sysctl -p
# sysctl -a | grep
net.ipv4.tcp_keepalive
# 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:
-v ^#
| grep .
Desligando o tcp_window_scaling
bilitar para dificultar tcnicas de fingerprint.
Valor padro: net.ipv4.tcp_window_scaling=0. Verificando valor atual:
217
# 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:
-v ^#
| grep .
# 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
# 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:
-v ^#
| grep .
# 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
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:
-v ^#
| grep .
# sysctl -p
# 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:
-v ^#
| grep .
# sysctl -p
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
pelo Sistema Operacional toda vez que a fila de syn exceda o valor mximo.
219
# 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:
-v ^#
| grep .
# 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:
-v ^#
| grep .
# sysctl -p
Hardening em Linux
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
# 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:
-v ^#
| grep .
=5 >> /etc/sysctl.conf
# 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
# sysctl
Para que essa diretriz seja definitiva, necessrio inseri-la no arquivo /etc/sysctl.conf.
Verifique se a definio j existe:
-v ^#
| grep .
# sysctl -a | grep
# sysctl -p
tcp_max_tw_buckets
221
# 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:
-v ^#
| grep .
# 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:
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.
-v ^#
| grep .
# sysctl -p
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
-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.
-v ^#
| grep .
# sysctl -p
Saiba mais
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.
-v ^#
| grep .
# sysctl -p
Verifique o valor para diretriz icmp_ratemask:
-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.
-v ^#
| grep .
# sysctl -p
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.
# 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.
-v ^#
| grep .
# 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.
-v ^#
| grep .
# sysctl -p
225
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.
-v ^#
| grep .
# 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:
-v ^#
| grep .
# 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
# 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
# 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.
-v ^#
| grep .
# 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
>> /etc/sysctl.conf
227
# sysctl -p
# 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:
-v ^#
| grep .
# sysctl -p
# 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:
-v ^#
| grep .
# 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
# sysctl -p
# 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:
-v ^#
| grep .
# 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()
{
A seguir, um exemplo de uma funo Shell Script (para sh ou bash) que trabalha com o
229
# Habilitando FORWARDing
sysctl
-w net.ipv4.ip_forward=1
net.ipv4.tcp_timestamps=0
Hardening em Linux
230
sysctl -w net.ipv4.conf.all.log_martians=1
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
# sh tuning_kernel.sh
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.
Saiba mais
231
Hardening em Linux
A camada do usurio o local onde esto localizados as memrias com os processos dos
232
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).
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.
- YAMA_HARDLINKS
- YAMA_PTRACE
- YAMA_SYMLINKS
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.
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
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.
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:
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
policy/current/domain_policy.conf
lrwxrwxrwx 1 root root
policy/current/exception_policy.conf
lrwxrwxrwx 1 root root
current/manager.conf
drwx------ 3 root root 4096 Ago 18 00:32 policy
lrwxrwxrwx 1 root root
current/profile.conf
-rw-r--r-- 1 root root
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).
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:
arquivo exception_policy.conf
d
arquivo domain_policy.conf
p
profile.conf
m
arquivo
manager.conf
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);
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.
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
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.
Roteiro de Atividades 9
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.
conceitos
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:
objetivos
243
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
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.
Figura 10.1
Componentes do
Framework Audit.
Remote
Custom
app
Ausearch
Aureport
Audispd
245
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
# 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:
-k seclinux
-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
-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).
-w /tmp -p e -k seclinux
247
-D
Este parmetro define Buffer de mensagens:
-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:
Hardening em Linux
loca_syscall
248
syscall
249
Exemplo de regras para auditoria de System Calls vinculadas a IPC SYSV (filas de mensagens
entre componentes do kernel):
-k loca_syscall
-k loca_syscall
Hardening em Linux
-k loca_syscall
-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
-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
-p wa -k loca-changemanagement -k loca_cron
-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
-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:
Hardening em Linux
252
-w /etc/vsftpd.ftpusers -p wa -k loca-changemanagement -k
ftpusers
-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
253
-k nis
Hardening em Linux
-e 2
254
# ausearch -f /etc/passwd
255
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
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
Number of terminals: 5
# aureport --success
Hardening em Linux
258
aureport -u --summary
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
# 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
260
#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
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.
263
264
Hardening em Linux
ISBN 978-85-63630-27-8
9 788563 630278