Como verificar o servidor para conexão SSLv3 se não houver nenhum pacote openssl nele?

1
echo Q | openssl s_client -ssl3 -connect HOSTNAME:PORT 2>/dev/null | grep 'Cipher is'

Mas como posso testar a conexão SSLv3 se não houver nenhum openssl instalado na máquina?

ATUALIZAÇÃO: a máquina não é voltada para a Internet

    
por thequestionthequestion 20.10.2014 / 18:40

2 respostas

1

Se nmap estiver disponível no seu sistema. Supondo que você estará verificando SSLv3 contra a porta 443, você pode usar nmap com as seguintes opções:

nmap --script ssl-enum-ciphers  -p 443 <hostname/IP>  | grep SSLv3

Se o grep não retornar nada, significa que o protocolo SSLv3 está desabilitado, se ele retornar alguma coisa (ele retornará os protocolos suportados e as cifras usadas), significa que o SSLv3 ainda está ativado no host de destino.

Verifique este para ver o que ssl-enum-ciphers faz.

Se SSLv3 i

    
por 22.10.2014 / 04:42
0

Eu recomendaria wget ou curl , você pode ter um ou ambos já disponíveis:

wget --secure-protocol=SSLv3 https://zmap.io/
curl --sslv3 https://zmap.io/

ou de outra forma socat :

socat stdio openssl-connect:zmap.io:443,method=sslv3

socat requer libssl e libcrypto do OpenSSL para suporte SSL, wget e curl requerem OpenSSL ou GnuTLS. zmap.io é um site relacionado à segurança que possui o SSLv3 desativado,

Caso contrário, em uma pitada você pode fazer isso com bash (e uma pequena suspensão de descrença). Tome um mínimo de "cliente hello" do SSlv3 e grave-o em binário em um arquivo:

( echo 16 03 00 00 49
  echo 01 00 00 45 03 00 54 46 2c 8b a0 70 ac c5 9f 96
  echo 60 b9 d0 97 af a5 95 c4 41 3b fa 49 dc cd eb 63
  echo df df cf 66 95 29 00 00 1e 00 39 00 38 00 35 00
  echo 16 00 13 00 0a 00 33 00 32 00 2f 00 05 00 04 00
  echo 15 00 12 00 09 00 ff 01 00 ) | xxd -r -p > ssl3.bin

Então é tão simples (!) quanto:

$ exec 4<> /dev/tcp/zmap.io/443
$ cat ssl3.bin >&4
$ hexdump -C <&4
00000000  15 03 00 00 02 02 28                              |......(|

Os bytes importantes aqui são os principais 0x15 (registro de alerta SSL) e 0x28, falha de handshake. Se a conexão funcionou, você deve retornar um primeiro byte de 0x16 (registro SSL Handshake) e um grande pedaço contendo um certificado, e mais. Você pode usar qualquer nome de host ou endereço IP aqui, por exemplo, /dev/tcp/hostname/port/ .

Você pode criar seu próprio handshake usando o seguinte método de outra máquina com s_client do OpenSSL.

echo Q | openssl s_client -ssl3 -msg -debug -cipher 'DEFAULT:!EXPORT' \
   -connect www.google.com:443 >debug.log

O principal requisito é que você use connect para um host que aceitará uma conexão. Não há SNI aqui, então a carga que capturamos pode ser usada para testar qualquer servidor (embora um servidor possa rejeitar a conexão se o SNI estrito foi imposto, o SNI não está definido para SSlv3).

$ head -15 debug.log
CONNECTED(00000003)
write to 0x80c6ed0 [0x80d0c88] (78 bytes => 78 (0x4E))
0000 - 16 03 00 00 49 01 00 00-45 03 00 54 46 2c 8b a0   ....I...E..TF,..
[...]
>>> SSL 3.0 Handshake [length 0049], ClientHello
    01 00 00 45 03 00 54 46 2c 8b a0 70 ac c5 9f 96
    60 b9 d0 97 af a5 95 c4 41 3b fa 49 dc cd eb 63
    df df cf 66 95 29 00 00 1e 00 39 00 38 00 35 00
    16 00 13 00 0a 00 33 00 32 00 2f 00 05 00 04 00
    15 00 12 00 09 00 ff 01 00
read from 0x80c6ed0 [0x80cc478] (5 bytes => 5 (0x5))

(A saída com -msg em vez de -debug é mais limpa, mas omite o byte de 5 bytes do registro SSL e -debug inutilmente corta os 0 bytes finais, portanto, precisamos usar os dois.)

Pegue os 5 bytes iniciais do hex na linha começando com 0000 (este é o cabeçalho do registro SSL que o próximo bloco hex omite), e então pegue o inteiro hex após a linha "SSL 3.0 Handshake", e converta o lote para um arquivo binário usando xxd como acima.

A única variável aqui é que os 4 bytes iniciais do random (octetos 11-14 do registro) serão o timestamp do cliente. Isso pode ser detectado por um servidor suficientemente paranoico, mas no SSLv3 o relógio do cliente não precisa estar correto (nem mesmo nas versões até e incluindo o TLS 1.2).

Você pode ler mais sobre formato de registro SSL aqui e aqui para o cifras registradas .

    
por 20.10.2014 / 20:10

Tags