Hardening em sistemas operacionais Linux (Completo)

Técnicas de segurança da informação: um estudo direcionado à aplicação de hardening em sistemas operacionais Linux.

[ Hits: 34.282 ]

Por: eric galdino dos santos silva em 16/06/2015


Fundamentação teórica



Nos dias atuais devido ao fácil acesso à tecnologia principalmente a computadores e dispositivos móveis que facilitam a vida de muita gente, efetuando trabalhos rotineiros, que na maioria das vezes demorariam dias para serem concluídos, traz consigo também um grande risco, pois existem pessoas que aproveitam a dependência desses serviços para tentar invadir e roubar nossos dados para serem usados em atos ilícitos usufruindo, assim, ilegalmente de nossos dados.

Assim foi surgindo a necessidade de profissionais qualificados na área, que começaram a perceber que o sistema operacional na maioria das vezes se torna o principal alvo desses ataques, e que haveria/há possibilidade de melhorar o sistema deixando ele mais robusto e seguro. Visando essa segurança da informação foi dada origem a técnica de hardening, onde é feito o estudo de vulnerabilidades do sistema operacional, antecipando possíveis ataques e assim deixando o sistema mais seguro.

Sistema operacional

O sistema operacional tem por característica principal fornecer uma interface de gerenciamento computacional para o usuário, gerenciando o processador, que é responsável pelos ciclos de processamento e por toda informação que "entra" e "sai" do computador, acompanhado pela memória RAM*, que tem o papel principal de armazenar temporariamente os dados que são processados, os periféricos de entrada/saída, e outros recursos que contemplam um sistema computacional. Pode ser classificado como um software básico para efetuar o controle e o gerenciamento do hardware*, e de softwares* aplicativos, com a responsabilidade de alocar recursos e fornecer serviços específicos aos usuários.

* A sigla "RAM" vem de "Random Access Memory", ou "memória de acesso aleatório", indicando a principal característica da memória RAM, que é o fato de permitir o acesso direto a qualquer um dos endereços disponíveis e de forma bastante rápida (MORIMOTO, 2007, p. 1).

* Hardware (hard = duro) significa ferragens, quinquilharia, e envolve o conjunto de componentes mecânicos, magnéticos e eletrônicos de um computador ou de qualquer outro sistema digital (BARRICO, 2011, p. 1). * Software é uma aplicação, um programa do computador, que permite executar uma determinada tarefa (SOUSA, 2008, p. 1).

O sistema operacional é uma camada de software que opera entre o hardware e os programas aplicativos voltados ao usuário final. O sistema operacional é uma estrutura de software ampla, muitas vezes complexa que incorpora aspectos de baixo nível (como drivers de dispositivos e gerência de memória física) e de alto nível (como programas utilitários e a própria interface gráfica) (MAZIERO, 2011, p. 3).

O sistema operacional não é um único software, nele se encontram-se vários programas executando, cada um com a sua finalidade, assim falar-se-á um pouco sobre os mais relevantes.

O núcleo do sistema conhecido como kernel* poucos usuários comuns já ouviram falar, mas ele é o coração do sistema operacional onde o mesmo tem a funcionalidade de intermédio, fazendo a ligação entre o hardware e o sistema operacional.

* Kernel pode ser entendido como o núcleo do sistema operacional, isto é, como a parte essencial deste. Cabe ao kernel fazer o intermédio entre o hardware e os programas executados pelo computador. Isso significa que a junção do kernel mais os softwares que tornam o computador usável (drivers, protocolos de comunicação, entre outros), de acordo com a sua aplicação, é que formam o sistema operacional em si (ALECRIM, 2011, p.1).

Já os drivers funcionam como uma espécie de tradutores, pegando os comandos e fazendo com que o hardware específico entenda bem o que o sistema está requisitando. Na maioria das vezes o driver já é fornecido pelo próprio fabricante do hardware outras vezes já vem nativo do próprio sistema operacional.

Antes de o sistema operacional inicializar existem processos que são carregados para preparar o hardware chamado de código de inicialização, "a inicialização do hardware requer uma série de tarefas complexas, como reconhecer os dispositivos instalados, testá-los e configurá-los adequadamente para seu uso posterior. Outra tarefa importante é carregar o núcleo do sistema operacional em memória e iniciar sua execução" (MAZIERO, 2011, p. 3).

Depois que o sistema operacional é inicializado existe vários programas instalados e que podem ser complementado ao sistema denominado de programas utilitários, sendo comentados alguns, "são programas que facilitam o uso do sistema computacional, fornecendo funcionalidades complementares ao núcleo, como formatação de discos e mídias, configuração de dispositivos, manipulação de arquivos (mover, copiar, apagar), interpretador de comandos, terminal, interface gráfica, gerência de janelas, etc." (MAZIERO, 2011, p. 3).

Script*

* Um script é um arquivo que guarda vários comandos e pode ser executado sempre que preciso (JARGAS, 2004, p. 2).

A linguagem de programação script é uma sequência de comandos a serem executados dentro de um texto, e não precisa ser compilado como os demais programas, porém deve-se ter um interpretador para que esses sejam entendidos pelo sistema. "As linguagens de script desenvolveram-se no decorrer dos últimos 25 anos. Tais linguagens são usadas colocando-se uma lista de comandos, chamados de script, em um arquivo para serem executados." (SEBESTA, 2006, p.21).

Com o passar do tempo foi surgindo novas linguagens de script dentre elas a primeira foi chamada de sh (de shell o console do Linux), iniciou-se como uma pequena coleção de comandos interpretados como chamadas aos subprogramas do sistema que executavam funções de utilidade como, por exemplo, gerenciamento e filtragem simples de arquivos (SEBESTA, 2006, p. 21).

Escreve JARGAS (2004, p. 7) um simples script que mostrar a data e hora o uso do disco rígido e quantos usuários estão conectados na máquina:

#!/bin/bash
# sistema - script que mostra informações sobre o sistema
# Autor: Fulano da Silva
# Pede uma confirmação do usuário antes de executar
echo "Vou buscar os dados do sistema. Posso continuar? [sn] "
read RESPOSTA
# Se ele digitou 'n', vamos interromper o script
test "$RESPOSTA" = "n" && exit
# O date mostra a data e a hora correntes
echo "Data e Horário:"
date
echo
# O df mostra as partições e quanto cada uma ocupa no disco
echo "Uso do disco:"
df
echo
# O w mostra os usuários que estão conectados nesta máquina
echo "Usuários conectados:"
w

Segurança da informação

A segurança da informação a cada dia que passa vem crescendo porque ela está ligada a proteção dos arquivos, dados e informações que são de grande valor para os usuários, e assim ela vem se tornando necessária a cada dia que passa, devido a inúmeros ataques dos crackers que podem ser sofridos a qualquer momento.

Escreve Soares; Lemos; Colcher (1995, p. 448), o termo segurança é usado com o significado de minimizar a vulnerabilidade de bens (qualquer coisa de valor) e recursos. Vulnerabilidade é qualquer fraqueza que pode ser explorada para se violar um sistema ou as informações que ele contém.

Não há nada 100% seguro sempre se consegue um jeito de burlar algo, a segurança da informação tem o seu papel de tentar o máximo possível diminuir essas vulnerabilidades. Então ela tem que manter-se sempre atualizada, já que se cria uma vacina* nova e surgem novas ameaças nesse mundo digital.

* Vacina na área de tecnologia é como se fosse um meio de proteção para uma determinada praga.

Segundo Krause (1999), Pereira (2000) e Albuquerque (2002) [apud Matos, 2010], há três princípios básicos para garantir a segurança da informação:
  • Confidencialidade: a informação somente pode ser acessada por pessoas explicitamente autorizadas. É a proteção de sistemas de informação para impedir que pessoas não autorizadas tenham acesso.
  • Disponibilidade: a informação deve estar disponível no momento em que a mesma for necessária.
  • Integridade: a informação deve ser recuperada em sua forma original (no momento em que foi armazenada). É a proteção dos dados ou informações contra modificações intencionais ou acidentais não-autorizadas.

Seguranças em sistemas operacionais Linux

No início com as construções dos computadores os usuários tinham que ter um conhecimento bastante avançado, já que não existia um sistema operacional os usuários tinham que desenvolver os próprios programas numa linguagem que só a máquina entedia, ou seja, software interagia diretamente com o hardware.

Com o passar dos anos foi desenvolvido um sistema de grande proporção onde o mesmo realizaria o gerenciamento das aplicações, podendo até executar a instalação de um ou mais programas.

Quando foram construídos os primeiros computadores, seus usuários programavam as aplicações em linguagem de máquina, interagindo diretamente com o hardware. Logo percebeu-se que algumas tarefas básicas se repetiam nas mais diversas aplicações. Por exemplo, transferência de dados entre a memória e os dispositivos de entrada e ou saída (impressoras, unidades de armazenamento etc.). Foi a partir daí que surgiram os sistemas operacionais (SOARES; LEMOS; COLCHER, 1995, p. 421).

Devido ao crescimento que teve os sistemas operacionais é de fundamental importância ficar atentos à segurança nos mesmos, com a quantidade de aplicações criadas nas quais podem acabar criando possibilidade de fraquezas nos sistemas. O intuito principal é de analisar os procedimentos e técnicas de vulnerabilidade em sistemas operacionais Linux, efetuando uma análise detalhada da distribuição Debian, que por sua vez é uma distribuição livre. Este estudo será efetuado com o auxílio de aplicativos livres, e proporcionará um maior nível de entendimento sobre falhas de segurança e disponibilidade de serviços de forma confiável para todos os usuários que estão inseridos no processo de encaminhar e receber dados.

A técnica de hardening

O hardening consiste na técnica de explorar as vulnerabilidades e ameaças que possam vir a danificar os sistemas e serviços, e estudá-las para que possa ser feita uma manutenção corretiva deixando o sistema operacional mais robusto, confiável e seguro, preparado para enfrentar futuras tentativas de ataques dos crackers.

Essa técnica também contém a opção de remover nomes de usuários que não usam mais e outros serviços desnecessários. É possível inserir limitações aos usuários dando só as permissões necessárias de leitura/escrita no sistema de arquivos, a seus respectivos donos ou a quem é de interesse, só manter instalado softwares básicos para uso pessoal, quando remover um programa, sempre verificar se há resíduos deixados no sistema operacional, deve-se criar um mecanismo de atualização para manter sempre atualizados os sistemas e seus aplicativos, pois os mesmos sempre estão verificando e corrigindo falhas encontradas no decorrer dos tempos.

O hardening consiste na realização de alguns ajustes finos para o fortalecimento da segurança de um sistema. Muitos administradores sem experiência em segurança preparam seus servidores com uma instalação básica e depois que suas aplicações estão disponíveis nenhum procedimento é feito para manter a integridade do sistema (REIS; JULIO; VERBENA, 2011, p. 21).

Práticas de hardening em sistemas operacionais Linux

O hardening quando bem aplicado ao sistema dentro de uma empresa pode trazer vários benefícios, o mesmo pode evitar o vazamento de informações que possam comprometer a receita trazendo prejuízos futuros, exemplo, o lançamento de algo novo que não possa ser plagiado, com essa técnica é também possível diminuir os transtornos aos usuários já que, quando a sua máquina é contaminada será necessário realizar a manutenção nos sistemas operacionais gerando um atrasado nas suas funções que lhe foram delegadas.

O sistema operacional com o hardening sendo utilizado gera uma melhoria bastante significativa, pois com esse método é possível também a retirada de uso processos não necessários, ou seja, que não seja utilizado pelos usuários nem pelo sistema. Sendo assim aumenta a capacidade de processamento da máquina e como recompensa o sistema se desenvolve com mais eficiência e eficácia chegando a obter a efetividade onde o mesmo poderá utilizar ainda mais o potencial do seu sistema operacional, atingindo assim as suas metas em um menor espaço de tempo possível.

Hardening, ou blindagem de sistemas, consiste na utilização de técnicas para prover mais segurança a servidores que disponibilizam serviços externos, como servidores Web, ou até mesmo serviços internos, como servidores de banco de dados, de arquivos, entre outros (REIS; JULIO; VERBENA, 2011, p.1).

Para que tudo isso seja possível são necessários profissionais gabaritados na área, e com um conhecimento amplo principalmente na área de segurança da informação, pois esse conhecimento é indispensável.

Um administrador de rede não pode ficar esperando por novos problemas de segurança, um novo bug* ou mesmo uma nova técnica e/ou ferramenta que prove um conceito de vulnerabilidade. Devido aos riscos eminentes que existe em toda web, o administrador deve se antecipar na busca por vulnerabilidades na rede e desse modo resolvê-las antes que os atacantes descubram essas vulnerabilidades (VIEGAS, 2008, p. 30).

* A palavra significa inseto em inglês e foi atribuída inicialmente às falhas mecânicas, diz-se que Thomas Edison a empregou pelos problemas que os animais causavam em seu fonógrafo. Mais tarde o termo foi atribuído à informática quando os primeiros computadores valvulados atraíam muitos insetos para seus componentes, o que gerava erros frequentes. Atualmente a expressão aponta qualquer erro que um programa pode gerar (PRADA, 2008, p. 1).

Firewall

É possível também em sistemas operacionais Linux utilizando script, configurar um firewall estabelecendo parâmetros e comandos para deixá-lo blindado ao máximo, contra tentativas de invasões ou ataques dos crackers, com um bom script pode-se bloquear as portas não utilizadas pelo sistema operacional.

Apresenta MORIMOTO (2006, p. 1) a seguir um script de firewall:

#!/bin/bash
iniciar(){
# Abre para a faixa de endereços da rede local:
iptables -A INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT
# Faz a mesma coisa, só que especificando a interface. Pode ser
# usada em substituição à regra anterior:
# iptables -A INPUT -i eth0 -j ACCEPT
# Abre uma porta (inclusive para a Internet):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Ignora pings:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Protege contra IP spoofing:
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Descarta pacotes malformados, protegendo contra ataques diversos:
iptables -A INPUT -m state --state INVALID -j DROP
# Abre para a interface de loopback. Esta regra é essencial para que
# o KDE e outros programas gráficos funcionem adequadamente:
iptables -A INPUT -i lo -j ACCEPT
# Impede a abertura de novas conexões, efetivamente bloqueando o acesso
# externo ao seu servidor, com exceção das portas e faixas de endereços
# especificadas anteriormente:
iptables -A INPUT -p tcp --syn -j DROP
echo "Regras de firewall ativadas"
}
parar(){
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
echo "Regras de firewall desativadas"
}
case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parâmetros start ou stop"
esac

Segurança no sistema de arquivos

O sistema de arquivos é o meio que os sistemas operacionais têm de nomear, organizar e armazenar os dados, cada um com sua característica tornando fácil a sua busca de informações, mas ágil quando requisitado pelo sistema, sendo assim podemos também interferir um pouco nesse método.

O primeiro é que se torna possível particionar o disco rígido, com isso coloca-se as informações valiosas em uma parte separada das informações mais comuns, proporcionando uma maior segurança já que os dados estarão separados cada um com sua tabela de partição (VIEGAS, 2008, p. 28).

Regras de utilização de serviços de rede e serviços ativos do sistema

Com a facilidade de comunicação entre os computadores nos dias atuais utilizando os serviços de redes nos quais oferecem um livre acesso entre as máquinas, sendo possível também deixar brechas para futuros ataques de invasão, vendo isso os profissionais da área atentaram-se nessas falhas e vem desenvolvendo métodos para limitar que os usuários sem conhecimento venham a deixar brechas no sistema.

As redes facilitam a transferência e o compartilhamento de arquivos para todos os computadores da rede. Todas essas conexões de computadores feitas ao mesmo tempo pode ser prático, entretanto, ao mesmo tempo podem trazem vulnerabilidades e brechas de segurança. Se não soubermos limitar o uso e restringir o acesso, usuários comuns podem ter uma liberdade indevida (VIEGAS, 2008, p. 29).

Essa limitação pode ser criada graças a diversos serviços e ferramentas criadas para isso, uma boa parte das empresas nos dias atuais opta por adotarem servidores Linux com seus serviços agregados, podendo ser mais seguro e uma alternativa mais barata já que os serviços são quase todos gratuitos, utilizando recursos só com a mão de obra do profissional. Um servidor Linux configurado da a possibilidade de limitar, por exemplo, o acesso à internet, restringir o compartilhamento de pasta no sistema operacional evitando assim a vulnerabilidade do mesmo.

Permissões especiais de arquivos

Há uma grande importância em dar permissões especiais aos arquivos porque ele só irá executar de acordo com seu usuário, isso coíbe que o mesmo seja requisitado indevidamente impossibilitando a sua execução desnecessária usada com má intenção.

Nos sistemas operacionais Linux por padrão existe uma conta de usuário chamada root* essa tem total liberdade sobre o sistema por isso só deve ser usada pelo profissional de gabaritado, nas demais contas devem ser personalizadas para só usar o necessário.

* No Linux, o usuário root é o deus do sistema, o único que tem acesso a todos os arquivos e configurações (MORIMOTO, 2006, p. 1).

Por padrão no Linux se divide em três níveis de acesso o dono, grupo e outros e cada um desses níveis de acesso tem três tipos de permissão, leitura, escrita e execução.

Utilização de quota

O uso do recurso de cota é um método onde pode determinar o tamanho de espaço em disco que o usuário poderá salvar seus arquivos, evitando assim que sejam salvos arquivos desnecessários no HD.

O uso de cotas é uma funcionalidade do sistema operacional que permite limitar a quantidade de espaço de disco e/ou o número de arquivos que um usuário ou membros de um grupo podem alocar em um sistema de arquivos. Isto é mais frequente em sistemas de compartilhamento de tempo onde é desejável limitar a quantidade de recursos que qualquer usuário ou um grupo de usuários podem alocar. Isto prevenirá um usuário ou um grupo de usuários de consumir todo o espaço em disco disponível(FREEBSD, 2012, p. 1).

Remoção de programas desnecessários

Quando é instalado um sistema operacional mesmo uma instalação básica sempre acontece de ir junto alguns programas desnecessários, administradores em servidores Linux devem ficar bem atentos, pois, quando é instalado o sistema tem que se verificar se todos os softwares instalados serão utilizados, se não, é correto efetuar a remoção dos mesmos, isso deve ser feito com bastante atenção porque alguns desses programas podem ser dependências de outros.

Utilizando o comando:

# dpkg -l | awk '{print $2, $3}' > programas_instalados.txt

Ele irá listar todos os programas instalados no sistema e vai salvar com o nome programas_instalados.txt, assim o administrador poderá analisar minuciosamente todos os softwares instalados e verificar o que lhe tem necessidade ou não para seu uso, evitando assim que devido a esses programas sejam utilizado como possíveis brechas (SANTOS, 2010, p. 1).

Página anterior     Próxima página

Páginas do artigo
   1. Resumo
   2. Introdução
   3. Fundamentação teórica
   4. Metodologia
   5. Conclusão
   6. Referências
   7. Apêndice A - Bastille
Outros artigos deste autor

Entenda o que é Hardening

Leitura recomendada

Tornando o OpenBSD stable

Terceirização de segurança gera dúvidas em profissionais de TI

Vulnerabilidade e segurança no Linux

Vírus em Linux?

Snort avançado: Projetando um perímetro seguro

  
Comentários
[1] Comentário enviado por removido em 16/06/2015 - 19:31h

Hummm , fazia tempos que eu nao entrava por aqui , mais vou deixar minhas consideraçoes abaixo sobre o artigo

[] O hardening consiste na técnica de explorar as vulnerabilidades e ameaças que possam vir a danificar os sistemas e serviços, e estudá-las para que possa ser feita uma manutenção corretiva deixando o sistema operacional mais robusto, confiável e seguro, preparado para enfrentar futuras tentativas de ataques dos crackers.[]

Na realidade a definiçao do termo esta incorreta , pois hardening nao explora vulnerabilidade nenhuma , pelo contrario consiste em deixar o s.o mais seguro.( falando no termos mais simples).

Suas referencias sao antigas demais , ex morimoto , nao que ele seja confiavel , mais a tecnologia evoluiu demais nesses tempos e ate o morimoto virou hare krishna nem mexe mais com t.i

Bastille, pelo o que eu sei ninguem usa mais bastille ,foi a epoca dele faz tempo , hoje em dia existem soluçoes mais simples e melhores para hardening por exemplos scripts.

Fiz uns scripts a muito tempo atras para essa necessidade , vou deixar o link abaixo para caso alguem queira usar.

[1] https://gist.github.com/clandestine4/1483049 >>> Hardening em sistemas RedHat
[2] https://gist.github.com/clandestine4/1483166 >>> Hardening em sistemas Aix
[3] https://gist.github.com/clandestine4/1483207 >>> Hardening em sistemas Hp-UX

Bom é isso , Abraços

[2] Comentário enviado por removido em 22/06/2015 - 14:08h

Gostei do estilo de escrita.
--
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[3] Comentário enviado por SiLenT-MaN em 24/06/2015 - 09:07h

Concordo com o @clandestine

Porém, é uma leitura boa para quem pretende evoluir no assunto, buscando a realidade atual.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts