segurança e auditoria de sistemas · com tantas camadas de proteção o elo mais fraco da cadeia...

25
Segurança e Auditoria de Sistemas Segurança e Auditoria de Sistemas Jéfer Benedett Dörr [email protected]

Upload: duonglien

Post on 06-Dec-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Segurança e Auditoria de Sistemas

Segurança e Auditoria de Sistemas

Jéfer Benedett Dö[email protected]

Ssh menos brute force

nmap

Conteúdo

O SSH é um protocolo de acesso remoto muito seguro, que prevê respostas para quase todo tipo de ataque possível.

O SSH detecta casos em que o servidor tenha sido substituído por outra máquina.

Qualquer algoritmo de encriptação pode ser quebrado via força bruta, onde simplesmente são testadas todas as possibilidades possíveis, até encontrar a combinação correta. Porém, isso só é realmente possível para chaves de 40 ou no máximo 64 bits; acima disso é inviável, pois a cada bit adicionado, o processo torna-se exponencialmente mais demorado.

Bloqueando ataques de força bruta no SSH

O WEP de 64 bits (que na verdade utiliza uma chave de 40 bits), usado em redes wireless pouco protegidas, pode ser quebrado em pouco tempo, caso você consiga capturar um volume considerável de transmissões usando um sniffer. O DES, um dos algoritmos mais tradicionais, que usa chaves de 64 bits (reais), pode ser quebrado em alguns dias, caso você tenha acesso a um cluster de 100 máquinas Athlon 64.

Uma chave de 64 bits é cerca de 16 milhões de vezes mais difícil de quebrar via força bruta do que uma de 40 bits, como as que eram utilizadas no SSL dos navegadores a até poucos anos atrás. Uma chave de 128 bits por sua vez, é (arredondando) 18.447.000.000.000.000.000 vezes mais demorada de quebrar que uma de 64 bits, de forma que, uma chave de 64 bits pode ser quebrada caso você tenha o tempo e os recursos necessários à disposição, mas uma de 128 (sem brechas conhecidas) é impossível de quebrar com tecnologia atual.

Bloqueando ataques de força bruta no SSH

O SSH é usado em tantos servidores importantes que uma brecha grave poderia (literalmente) parar o mundo. Por isso, todo o código é exaustivamente auditado por uma variedade de empresas e órgãos governamentais.

Quando você se conecta a um servidor SSH, seu micro e o servidor trocam suas chaves públicas, permitindo que um envie informações para o outro de forma segura.

tudo é feito utilizando chaves de 512 bits ou mais (de acordo com a configuração). O problema é que, embora impossível de quebrar, este nível de encriptação demanda uma quantidade muito grande de processamento. Se todas as informações fossem transmitidas desta forma, o SSH seria muito lento.

Para solucionar este problema, depois de fazer a autenticação, o SSH passa a utilizar um algoritmo mais simples, que demanda muito menos processamento, para transmitir os dados. Por padrão é utilizado o 3DES (triple-DES), que utiliza uma combinação de três chaves DES, de 64 bits cada.

Bloqueando ataques de força bruta no SSH

Outra precaução importante é a proteção contra ataques do tipo "man in the middle", onde alguém com acesso físico à rede muda o cabeamento ou configuração, de forma que outra máquina se apresente no lugar do servidor, com o objetivo de roubar senhas.

O servidor tem uma chave pública, que envia ao cliente na primeira conexão. As identificações de todos os servidores conhecidos ficam armazenadas no arquivo ".ssh/known_hosts" dentro do seu diretório home. Sempre que você se conecta daí em diante, o cliente SSH envia um "desafio" ao servidor, uma frase encriptada usando a chave pública, que só pode ser descoberta usando a chave privada.

Bloqueando ataques de força bruta no SSH

o SSH percebe que a identificação do servidor mudou e lhe avisa do problema:

Bloqueando ataques de força bruta no SSH

Com tantas camadas de proteção o elo mais fraco da cadeia acabam sendo as senhas de acesso, já que alguém com posse da senha, pode se logar no servidor sem dificuldades, assumindo o lugar do dono da conta.

Existe também a possibilidade de um bot ficar testando várias possibilidades durante um longo período e, num golpe de sorte, conseguir descobrir a senha de root do servidor.

O SSH impões por default um tempo de espera de dois segundos entre cada tentativa, o que torna os ataques de força bruta inefetivos, já que não é possível testar mais do que 1.800 combinações de senha por hora, mas isso não impede que um número crescente de bots fique martelando os servidos diretamente conectados e acabem descobrindo senhas de acesso em alguns deles

Bloqueando ataques de força bruta no SSH

Uma medida simples que pode ser usada para eliminar este último risco é utilizar o fail2ban, um pequeno daemon que monitora os arquivos de log do servidor e bloqueia os endereços IP dos atacantes utilizando regras de firewall.

Você pode instalá-lo rapidamente no Debian, Ubuntu ou derivados usando o apt-get:

# apt-get install fail2ban

Bloqueando ataques de força bruta no SSH

A configuração é feita através do arquivo "/etc/fail2ban/jail.conf", onde são listados os arquivos de log que serão monitorados, o número máximo de tentativas antes de aplicar o bloqueio e o tempo que ele vigorará.

Por padrão, ele é configurado para banir por 10 minutos endereços a partir dos quais sejam feitas mais do que 5 tentativas mal-sucedidas. Além do SSH, ele monitora também os arquivos de log do apache (monitorando tentativas de acesso a pastas protegidas por senha através de arquivos .htaccess) e até mesmo tentativas de acesso ao servidor de e-mails (caso seja utilizado o postfix) ou ao servidor FTP.

O tempo de banimento é especificado (em segundos) através da opção "bantime" dentro do arquivo, como em:

bantime = 600

Bloqueando ataques de força bruta no SSH

O número de tentativas toleradas para cada serviço, assim como seu respectivo arquivo de log (que o fail2ban monitora, identificando as tentativas de login que não foram bem sucedidas) são especificados em uma seção separada, como em:

[ssh]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 6

É possível também criar uma lista branca de endereços que nunca serão bloqueados, independentemente do número de tentativas, através da opção "ignoreip". Se você administra seus servidores a partir de um link com IP fixo, é interessante colocar seu endereço na lista, para evitar acidentes.

Bloqueando ataques de força bruta no SSH

Você pode especificar vários endereços, separando-os com espaços, como em:

ignoreip = 127.0.0.1 200.23.43.65 201.34.21.213

Depois de fazer modificações no arquivo, reinicie o serviço com o comando:

# /etc/init.d/fail2ban restart

Bloqueando ataques de força bruta no SSH

Usando o Nmap

Usando o Nmap

O Nmap é um portscan de uso geral, que pode ser usado, sempre que você precisar verificar rapidamente as portas abertas em determinado host, seja na sua rede local, seja na Internet.

O Nmap é um pacote muito utilizado e por isso está disponível em todas as principais distribuições.

# apt-get install nmap

Usando o Nmap Para usar todos os recursos do Nmap, você deve executá-lo como root. O uso mais simples é escanear diretamente uma máquina da rede, como em:

# nmap 192.168.0.3

Starting nmap 3.81 ( http://www.insecure.org/nmap/ )

Interesting ports on 192.168.0.3:

(The 1661 ports scanned but not shown below are in state: closed)

PORT STATE SERVICE

68/tcp open dhcpclient

631/tcp open ipp

MAC Address: 00:0F:B0:55:EE:16 (Compal Electronics)

Nmap finished: 1 IP address (1 host up) scanned in 0.339 seconds

Usando o Nmap

Neste exemplo, o teste foi disparado contra uma máquina Linux, rodando uma instalação personalizada do Debian Sarge. As duas portas abertas são o cliente DHCP (é normal que a porta 68 fique aberta em clientes configurados via DHCP) e o servidor Cups, que escuta na porta 631. O Cups mantém esta porta aberta sempre que é ativado (você precisa dele para imprimir, tanto em compartilhamentos da rede, quanto em impressoras locais). Por padrão, ele permite apenas que o localhost imprima e acesse a interface de administração, mas é possível configurá-lo para compartilhar as impressoras com a rede de forma bem simples através do arquivo "/etc/cups/cupsd.conf".

Usando o Nmap

Nem o cliente DHCP nem o Cups permitem acesso via shell, por isso, salvo eventuais graves brechas de segurança, os ataques mais graves que poderiam ser lançados neste caso seriam tentar modificar a configuração de rede, tentando responder ao cliente DHCP no lugar do servidor DHCP da rede, ou tentar usar impressoras compartilhadas no Cups.

O simples fato de uma determinada porta estar aberta, não significa que a máquina está vulnerável, mas apenas que existem serviços ativos e as portas não estão sendo bloqueadas por nenhum firewall.

Usando o Nmap

Você pode obter mais informações sobre as portas abertas, incluindo a versão de cada serviço ativo usando a opção "-sV", como em:

# nmap -sV 192.168.0.3

Esta opção é muito mais demorada, no lugar dela você pode preferir fazer logo um scan completo usando o Nessus.

É possível também escanear de uma vez toda uma faixa de endereços, como em:

# nmap 192.168.0.1-254

Usando o Nmap

Outro parâmetro interessante é a opção "-O", que faz com que o Nmap tente identificar qual é o sistema operacional usado em cada máquina.

Veja um exemplo:

Neste caso temos uma instalação limpa do Windows XP, sem o firewall ativo.

# nmap -O 192.168.0.4

Usando o NmapStarting nmap 3.81 ( http://www.insecure.org/nmap/ )

Interesting ports on 192.168.1.35:

(The 1658 ports scanned but not shown below are in state: closed)

PORT STATE SERVICE

135/tcp open msrpc

139/tcp open netbios-ssn

445/tcp open microsoft-ds

1025/tcp open NFS-or-IIS

5000/tcp open UPnP

MAC Address: 02:0F:B0:55:EE:16 (Unknown)

Device type: general purpose

Running: Microsoft Windows 95/98/ME|NT/2K/XP

OS details: Microsoft Windows Millennium Edition (Me),

Windows 2000 Pro or Advanced Server, or Windows XP

Nmap finished: 1 IP address (1 host up) scanned in 1.145 seconds

Usando o NmapNmap podem ser facilmente detectados caso alguma das máquinas-alvo esteja com o Snort, ou outro detector de intrusões ativo, o que vai lhe render no mínimo um puxão de orelha do administrador da rede. Para dificultar isso, o Nmap oferece a opção de fazer um half-open scan, especificando a opção "-sS", como em:

# nmap -sS 192.168.0.1-254

Operando neste modo, o Nmap apenas envia um pacote SYN para cada porta alvo e espera para ver se recebe um pacote ACK de confirmação sem, entretanto, responder com o segundo pacote ACK, que abriria a conexão. Isso permite burlar muitos programas de detecção de intrusão, que monitoram e logam apenas conexões efetivamente estabelecidas.

Usando o Nmapfirewalls são configurados para bloquear apenas as portas TCP. Escanear as portas UDP é uma forma alternativa de detectar serviços abertos em uma máquina, mesmo que todas as portas TCP estejam fechadas no firewall. Existem também casos de backdoors acessíveis via UDP, como o Back Orifice (no Windows)

Os scans de UDP são rápidos se direcionados a máquinas Windows, mas são absurdamente lentos se feitos contra máquinas Linux ou BSD, onde o sistema limita o número de erros de ICMP (dos quais o scan do Nmap depende) a uma taxa de aproximadamente 20 por segundo. No Windows não existe limite.

Para usar o scan UDP, usamos a opção "-sU", como em:

# nmap -sU 192.168.0.4

Usando o NmapPor padrão, o Nmap escaneia apenas um conjunto de 1661 portas, que incluem as usadas pelos serviços mais comuns. Uma media de segurança comum é esconder serviços como o SSH em portas altas, de forma que eles sejam mais difíceis de detectar. Nesses casos, você pode fazer um scan completo, incluindo todas as portas TCP (ou UDP) usando a opção "-p 0-65535", como em:

# nmap -sS -p 0-65535 192.168.0.4

A opção "-p" pode ser usada para escanear apenas uma porta específica, ou uma faixa de portas em que esteja interessado.

Usando o NmapA opção "-sS", combinada com a "-p 0-65535", permite localizar serviços escondidos em portas altas, mas não é capaz de dizer muito sobre eles. Ele sempre retorna algo como:

22543/tcp open unknown

Você pode escanear esta porta específica usando a opção "-sV" para descobrir mais sobre ela, como em:

# nmap -sV -p 22543 192.168.0.4

PORT STATE SERVICE VERSION

22543/tcp open ssh OpenSSH 3.8.1p1 Debian-8.sarge.4 (protocol 1.99)

Nmap finished: 1 IP address (1 host up) scanned in 0.284 seconds

Agora você sabe que a máquina tem ativo um servidor OpenSSH (versão 3.8.1, do Debian Sarge), escondido na porta 22543.

Usando o NmapUm firewall configurado para descartar (DROP) todos os pacotes recebidos, faz com que o scan torne-se extremamente lento.

Nestes casos, você pode forçar o Nmap a concluir o teste, a fim de detectar serviços escondidos em portas altas usando o parâmetro "-P0", como em:

# nmap -sS -P0 -p 0-65535 192.168.0.4

O problema neste caso é que o scan demora muito mais que o normal, já que, por não receber respostas, ele precisa aguardar um tempo muito maior antes de passar para a porta seguinte. Um teste executado contra um micro na Internet, através de uma conexão lenta, pode literalmente demorar dias. Apesar de não responder, o micro remoto pode ser configurado para logar suas tentativas, permitindo que o administrador tome conhecimento e aja de acordo, bloqueando seu endereço IP ou contatando seu provedor de acesso. Um firewall bem configurado é realmente uma grande vantagem de segurança para qualquer servidor.