Não tenho certeza se existe uma maneira automatizada de fazer isso.
Primeiro, eu listaria todas as portas que estão escutando e correspondesse as portas ao processo / executável (por exemplo, com netstat -t -l -p
, como raiz para poder ver o ID do processo (PID)).
[EDITAR]
Você receberá entradas como essa, em que o PID é:
tcp 0 0 *:https *:* LISTEN 5221/apache2
Isso informa qual programa está sendo executado na porta https
. (Use netstat -t -l -p -n
se você quiser apenas o número da porta e, nesse caso, você verá *:443
em vez de *:https
). Isso indica que há um soquete escutando na porta 443. Além disso, aqui, 5221 é o PID do apache2, de modo que também informa qual aplicativo está sendo usado. Às vezes, pode não ser imediatamente visível qual aplicativo está sendo usado (você pode ver o conteúdo de /proc/5221/cmdline
para ver mais detalhes, por exemplo).
Gostaria de focar apenas as entradas que estão vinculadas a interfaces externas (e ignorar as entradas localhost
).
Normalmente, você pode ver algo escutando na porta 22 (ssh), 80 (http), 443 (https), ...
Você terá que testá-los um por um, dependendo do método descrito abaixo.
Por exemplo, echo "" | openssl s_client -connect your.host.name:80
deve mostrar uma mensagem de erro, uma vez que seu servidor da Web não escutaria (ou não deveria) solicitações SSL / TLS nessa porta, echo "" | openssl s_client -connect your.host.name:443
deveria funcionar e mostrar algumas informações sobre o certificado e a conexão.
[/ EDIT]
Para o SSL / TLS inicial , você pode verificar se aceita um TLS ClientHello
(ou seja, um servidor TLS a partir do início da conexão), mas usando echo "" | openssl s_client -connect hostname:port
( echo "" |
é opcional, ele apenas irá parar o openssl assim que tiver estabelecido a conexão, já que você provavelmente não deseja enviar nada específico).
Para conexões SSL / TLS "atualizadas" , feitas após um comando no nível do protocolo de aplicativo (como STARTTLS
), isso pode ser mais complicado.
Você pode fazer isso adicionando -starttls the_name_of_the_protocol
a este comando openssl s_client
. De acordo com a documentação do OpenSSL, " Atualmente, os únicos [nomes de protocolo] suportados são" smtp "," pop3 "," imap "e" ftp "".
Isso não irá ajudá-lo para o LDAP (se configurado para usar o TLS inicial e não o TLS), MySQL, PostgreSQL, ... Para estes, você pode simplesmente ter que examinar seus respectivos arquivos de configuração. A automação desse processo exigiria uma ferramenta que pudesse entender todos esses protocolos, o que pode ser bastante difícil.
Alguns pontos adicionais, se for para uma auditoria de segurança mais geral:
-
Ativar SSL / TLS raramente é suficiente. Você também quer certificar-se de que está configurado corretamente: certificado válido, SSLv2 desativado, tentando mover para os valores mais altos de SSL / TLS (SSLv3, TLSv1.0, TLSv1.1 +) desativando versões mais antigas se sua base de usuários for suficientemente renegociação compatível e insegura desativada, se possível, pacotes de criptografia razoavelmente strongs.
-
Apesar de usar a biblioteca OpenSSL, o OpenSSH (e o SSH em geral) não é baseado em SSL / TLS. Talvez você ainda queira manter esse, mesmo que sua política seja usar serviços somente SSL / TLS.