Aumentando Segurança Linux -  Part II (Senhas,Overflows,Vírus)
Autor: Paulo Cesar | Publicado: 2014-04-03T02:50:00-07:00


OBS-1:&nbsp;Todos os dados e exemplos descritos neste arquivo possuem somente

&nbsp; &nbsp; &nbsp;propositos educacionais, o autor nao se responsabiliza pelo mau uso

&nbsp; &nbsp; &nbsp;dos mesmos.


Continuando...



&nbsp;&nbsp;***********************************

&nbsp; * &nbsp; &nbsp;Conceitos e Praticas - II &nbsp;*

&nbsp; ***********************************





--------------------------------&nbsp;ÍNDICE&nbsp;----------------------------------



1. Introdução

2. Problemas de Segurança &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;---------------------------&gt; artigos anteriores

&nbsp; &nbsp;2.0 &nbsp;- Escaneamento &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;---------------------------&gt; artigos anteriores

&nbsp; &nbsp;2.1 &nbsp;- Brutal Force &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;---------------------------&gt; artigos anteriores

&nbsp; &nbsp;2.2 &nbsp;- Senhas &nbsp; &nbsp;&nbsp;

&nbsp; &nbsp;2.3 &nbsp;- Overflows&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;

&nbsp; &nbsp;2.4 &nbsp;- Vírus&nbsp;

&nbsp; &nbsp;2.5 &nbsp;- DoS&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;---------------------------&gt; próximos artigos

&nbsp; &nbsp;2.6 &nbsp;- IP Spoof&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ---------------------------&gt; próximos artigos

&nbsp; &nbsp;2.7 &nbsp;- Format Bugs&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ---------------------------&gt; próximos artigos

&nbsp; &nbsp;2.8 &nbsp;- Backdoors&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;---------------------------&gt; próximos artigos

&nbsp; &nbsp;2.9 &nbsp;- Outros&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;---------------------------&gt; próximos artigos

3. Terminando

&nbsp; &nbsp;3.1 &nbsp;- Links e Referencias.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ---------------------------&gt; próximos artigos

&nbsp; &nbsp;3.2 &nbsp;- Considerações Finais.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;---------------------------&gt; próximos artigos


---------------------------------------------------------------------------



---------------

1 - Introducao |

---------------



Diferente dos demais artigos, neste, eu me limitarei apenas a descrever os

assuntos por auto, da forma mais básica possível. Não pretendo entrar na

parte de programação, de modo que, os pre-requisitos para o total

entendimento deste artigo, se limitam apenas a um conhecimento básico do Linux.&nbsp;

A distribuição do linux a ser trabalhada é o famoso Slackware , em sua kernel original.

Os conceitos e ferramentas descritas podem ser expansíveis a outras distribuições,

Kernel e implementações. Este é mais um artigo onde o publico alvo é o pessoal newbie(iniciante)

&nbsp;fuçador, e o meu interesse em ensinar as coisas elementares aqui, não é prover discussão

de segurança, mas apenas informar a respeito de tais aspectos e e um futuro próximo,&nbsp;

aumentar a discussão a respeito de furos em tais conceitos e aspectos.



Muita gente havia me pedido p/ descrever o básico sobre alguns conceitos

envolvidos no hacking, de modo que me aproveitarei deste artigo p/


procurar descrever estes conceitos.


------------------------------------

2. Problemas de&nbsp;Segurança&nbsp;| &nbsp; &nbsp;----- CONTINUAÇÃO

----------------------------------

2.2 - Senhas
-------------

As senhas fracas tem sido um dos principais meios pelos quais uma rede é invadida.
Forçar o usuário a escolher senhas difíceis necessita ser uma
tarefa do Sistema Operacional, até porque existe a necessidade de livre
escolha e privacidade por parte dos usuários. Alguns sistemas operacionais,
como o "C2" Windows , em sua configuração default é uma tristeza!!
Não é a toa que qualquer kiddie com 2 meses de pratica consegue obter acesso
a home pages via frontpage e servidores de ftp! Nos Linux mais atuais,
existe um componente que procura forçar o uso de senhas mais difíceis!
No entanto, os métodos de brutal force e o aumento da velocidade das maquinas
tende a tornar trivial a captura e quebra de senhas com 8 dígitos por
exemplo. As Wordlists procuram palavras conhecidas e na Língua Portuguesa
alguns nomes como "deborah" são constantemente usados em dicionários.

Você mesmo pode fazer uma auditoria em seu sistema em busca de senhas
fáceis em seus usuários, através das ferramentas de "crackeamento",
dentre os quais temos o CRACK e o John the Ripper.
Eles podem ser obtidos em:

http://www.baixaki.com.br/linux/download/john-the-ripper.htm

Podemos ainda dificultar mais a vida de um script kiddie, forçando o uso
de senhas em comandos essenciais do sistema.
Apesar de não ser uma solução nem um pouco eficaz, acrescentarmos senhas a alguns
comandos pode dificultar as coisas e também atrasar a exploitação do seu sistema!
Quanto mais tempo o atacante levar p/ exploitar o sistema, pior será p/ ele,
e maior serão as suas chances de detectar uma investida por parte dele
antes dele instalar uma poderosa backdoor no sistema!
Na seção que iniciarei sobre vírus &nbsp;irei descrever um simples programa que executa uma
petição de senha para o executável chattr.

2.3 - Overflows
----------------

Existem vários programas e esquemas para se dificultar a exploitação de
um sistema via técnica de Buffer Overflow.
Para maiores detalhes sobre Buffer Overflows recomendo a leitura do meu
"Tutorial Basico de Escrita de Exploits p/ Buffer Overflows em Linux".
Esta é uma técnica de exploitação muito conhecida e de fato ainda é muito eficaz.
No mundo Linux temos varias ferramentas que procuram dificultar ao máximo este
tipo de exploitação.
Se você também é programador, duas ferramentas devem chamar sua atenção,
são elas o StackGuard e o StackShield.
Ambas procuram defender um programa contra exploitação via buffer overflows
através da sua compilação(acrescentando código ao mesmo).
Ainda existem outros a caminho como um da poderosa IBM e o PaX.
Abaixo seguem links para você obter infos sobre os mesmos:

http://www.securityfocus.com/ -&gt; Procure na Bugtraq.
http://pageexec.virtualave.net/

Como este texto é mais voltado a administradores, eu recomendaria o
uso da LibSafe e de patchs no kernel como o StackPatch do Solar
Designer. Longe de serem uma solução efetiva, tais programas e patchs
dificultam a exploitação de programas vulneráveis a Stack Overflows!
Este patch ainda implementa vários outros esquemas de segurança que
seguem descritos abaixo:

* Restringe /proc para que um usuário veja somente os processos que ele
&nbsp; está executando.
* Torna o stack nao-executavel tornando assim dificil a execucao de
&nbsp; exploits para buffer overflows(smashing the stack).
* Restringe links em /tmp
* Restringe FIFOs em /tmp
* Evita manipulacao indesejada de File Descriptors.

Dentre outras coisas. A grande maioria dos script kiddies dificilmente
conseguiriam exploitar um sistema com Stack Patch instalado via buffer&nbsp;overflow.
Logico que existem exploits públicos contra isso e técnicas
para se passar por isso, mas o domínio de tais técnicas esta ainda
limitado a fuçadores "nao-kiddies"!
Estas ferramentas podem ser encontradas em:

http://www.openwall.com/
http://packetstorm.securify.com/linux/

Nada disso por si só eh solução, é recomendável a cada administrador
se manter atualizado quanto aos bugs. Cada dia surgem novos esquemas e
novas técnicas, de modo que sua rede pode estar a "merce" de ser alvo de
uma técnica ainda desconhecida pela Comunidade de Segurança, como deixou
bem claro o caso do Format Bugs.

É recomendável diminuir ao máximo o numero de arquivos suid-root, procurar
usar chroot() com freqüência, e manter-se sempre atualizado!

Podemos também evitar a exploitação remota, ou pelo menos detecta-la com
o uso de ferramentas IDS, tais como o Snort já abordado aqui neste artigo.
Se definirmos regras capazes de detectar e de barrar exploitações comuns,
como o uso de NOPs nos argumentos recebidos dos daemons teremos então
detectado uma tentativa de exploitação. Abaixo nós podemos ver alguns
exemplos de regras do Snort capaz que detectar alguns dos mais conhecidos
esquemas de exploitação remota via Buffer Overflows:


--------------------------- overflow-lib -----------------------------

alert tcp any any -> 192.168.1.0/24 143 (msg:"IMAP Buffer overflow!";
                                  content:"|90E8 C0FF FFFF|/bin/sh";)

alert tcp any any -> $HOME_NET 143 (content:"|9090 9090 9090 9090|";
             content:"|E8 C0FF FFFF|"; msg:"IMAP Buffer Overflow!";)

# x86 named buffer overflow
alert tcp any any -> $HOME_NET 53 (msg:"named Buffer Overflow!";
content:"|CD80 E8D7 FFFF FF|"; flags: PA;)

# New buffer overflows submitted by Martin Markgraf
alert tcp any any -> $HOME_NET 110 (msg:"QPOP Buffer Overflow!";
                           content:"|E8 D9FF FFFF|";  flags: PA;)
alert tcp any any -> $HOME_NET 21 (msg:"FTP Buffer Overflow-1!";
                            content:"|5057 440A 2F69|"; flags: PA;)
alert tcp any any -> $HOME_NET 21 (msg:"FTP Buffer Overflow-2!";
                          content:"|5858 5858 582F|"; flags: PA;)

# New BOF from CyberPsychotic, this one detects Duke's wu-ftpd attack
alert tcp any any -> $HOME_NET 21 (msg:"FTP buffer overflow1!";
                                     content:"|5057 440A 2F69|";)



--------------------------- overflow-lib -----------------------------




Mantendo-se atualizado dos principais exploits e entendendo um pouco

de "ASM", você estará apto a criar regras para o Snort parecido com as

que vimos no arquivo "overflow-lib" acima que já vem com o Snort.



Um outro meio de também dificultar a ação de kiddies e o uso de

ferramentas protetoras como o "Saint Jude" que será descrito mais abaixo!



http://packetstorm.securify.com



2.4 &nbsp;- Virus

-------------



Os usuários comuns não conhecem o mundo da segurança, mas quando se toca

na frase "vírus de computador", eles sabem muito bem do que se está

falando! Um vírus nada mais é do que um programa que procura executar

ações semelhantes aos vírus no mundo real, tais como se reproduzir, se

esconder, procurar se defender, ou seja, sobreviver!



No Linux existem vários vírus e vários tipos de vírus!&nbsp;

Não pense que estou falando bobagem, porque quem é do ramo da segurança&nbsp;

sabe que isto é um fato! Temos exemplos publicos na Internet há vários anos,&nbsp;

tais como o "Bliss", por exemplo. Apesar deles serem bastante limitados quando

comparados com vírus em ambiente DOS/Windows, eles também são capazes

de destruir dados em linux e causar um verdadeiro estrago! O fato do

sistema Linux setar permissões não serve como uma solução!&nbsp;

Se um vírus infecta os arquivos de um usuário, as chances dos arquivos do

sistema serem infectados por ele são bastante grandes! Temos que pensar

também em termos de vulnerabilidades, um vírus poderia explorar uma

falha no sistema para obter root e comprometer todo o sistema(Lembre-se

do worm do Robert Morris, ele era p/ unix!).



Melhor do que ficar apenas teorizando e esperando o fato se consumar é

de fato ir se precavendo! Podemos setar permissões em arquivos que

poderiam dificultar a ação de alguns vírus, tais permissões poderiam

ser setadas com o uso do comando chattr! Sim, um vírus poderia

perfeitamente executar este comando como root e de fato alterar as

permissões! Mas nos podemos dificultar ainda mais a ação de um vírus

deste tipo, setando um "alias" para a execução de outro programa, antes

de executar o chattr propriamente dito.


Abaixo segue um exemplo:






--------------------------- cha.c -----------------------------


/* Aumentando a seguranca do chattr */

#include 
#include 

main(int argc, char *argv[0]){
char buffer[20],argumentos[40];
char comando[80];
if(argc < 3){
execl("/usr/bin/chattr","chattr",0);
exit(0);
}
if(argc == 3){
snprintf(argumentos,39,"%s %s",argv[1],argv[2]);
}
if(argc == 4){
snprintf(argumentos,39,"%s %s %s",argv[1],argv[2],argv[3]);
}
printf("Este comando eh bloqueado por senha.\n");
printf("Favor digitar a senha correta: ");
scanf("%19s",&buffer);
if(!strcmp(buffer,"senha")){
printf("senha ok!\n");
sprintf(comando,"/usr/bin/chattr %s",argumentos);
system(comando);
}
else{
printf("Senha Invalida!\n");
}
return 0;
}
scanf("%19s",&buffer);
if(!strcmp(buffer,"senha")){
printf("senha ok!\n");
sprintf(comando,"/usr/bin/chattr %s",argumentos);
system(comando);
}
else{
printf("Senha Invalida!\n");
}
return 0;
}

&nbsp;


--------------------------- cha.c -----------------------------



É obvio e evidente que este programa serve apenas como esboço para

nós!! Muitos script kiddies de fato iriam parar no meio do caminho,

pois não sabem nem o que é chattr, e o fato do próprio executável pedindo

senha iria desencoraja-los de praticarem muitos atos! Mas para um NewBie

Fuçador, este esquema acima precisa ser muito melhorado e de fato, se

você manja de LKM pode implementa-lo a nível de kernel, ai a coisa se

complica até para quem eh hacker! :)



Mas voltando a questão dos vírus, de fato, os mesmos podem ser combatidos!

setando bem as permissões. Na parte de backdoors, você pode ver que eu

fiz um simples shell script para setar maiores permissões Ext2fs em&nbsp;

alguns arquivos essenciais! Você pode fazer o mesmo e poderia até mesmo

setar permissões em todos os binários essenciais do sistema!!



Quanto a vírus em LKM! Aqui é outra briga grande, ganha quem chegar

primeiro e se você der uma lida na seção backdoors, verá que de fato

você pode aumentar a segurança do seu sistema impedindo o carregamento

de LKM(seja retirando este suporte da kernel ou não) através da

interceptação dos system calls responsáveis pelo carregamento (create_module,&nbsp;

delete_module) e/ou mesmo usando ferramentas IDS detectoras!



Jamais espere por um fabricante de anti-virus! Corra agora mesmo e passe

a se preparar contra esses vírus! Não tenha nem duvida que eles terão

um impulso muito grande em breve e de fato irão detonar muitos sistemas!

Não esteja você entre os que serão prejudicados por tais artes de ataques!&nbsp;

Aja enquanto ainda ha tempo!



Fiquem atentos as publicações de A Melhor Defesa é o Ataque pois é meu objetivo

expandir e trocar mais informações sobre todas as técnicas usadas por

fuçadores em toda e qualquer implementação, incluso hacking de WEB.



---------------------------- &nbsp; &nbsp;&nbsp;By SeQ Anjdric 2014!&nbsp;&nbsp; --------------------------------