Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
chef-ssh-hardening — This chef cookbook fornece configurações seguras de ssh-client e ssh-server. | Kitploit
Ferramentas/GitHubGitHub/dev-sec/chef-ssh-hardening
Segurança de Infraestrutura em NuvemAuditoria de ConfiguraçãoSegurança de RedeDevSecOpsAutenticação
GitHubdev-sec/chef-ssh-hardening

chef-ssh-hardening

This chef cookbook fornece configurações seguras de ssh-client e ssh-server.

Ver Repositório
168669há 7 diasRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Site
Compartilhar

ssh-hardening (cookbook Chef)

Supermarket Build Status Code Coverage Gitter Chat

Descrição

Este cookbook fornece configurações seguras de ssh-client e ssh-server. Este cookbook não fornece recursos para gerenciamento de usuários e/ou chaves ssh, use outros cookbooks para isso.

Requisitos

  • Chef >= 14.13.11

Plataforma

  • Debian 8, 9, 10
  • Ubuntu 16.04, 18.04
  • RHEL 6, 7
  • CentOS 6, 7
  • Oracle Linux 6, 7
  • Fedora 29, 30
  • OpenSuse Leap 42
  • Amazon Linux 1, 2
  • Atributos

    Abaixo você pode encontrar a documentação dos atributos e seus valores padrão.

    Observação: Alguns dos valores padrão de atributos deste cookbook são definidos nas receitas. Você deve usar um nível mais alto de precedência de atributos para sobrescrever tais atributos. Esses atributos são sinalizados com #override attribute# na lista abaixo. Exemplo de sobrescrita de um desses atributos:

    root@kitploit:~
    override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
    
    • ['ssh-hardening']['network']['ipv6']['enable'] - false. Defina como true se IPv6 for necessário
    • ['ssh-hardening']['ssh']['ports'] - 22. Portas às quais o ssh-server deve escutar e às quais o ssh-client deve se conectar
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil para calcular a melhor troca de chaves (KEX) com base na versão do servidor, caso contrário, especifique uma string de valores Kex
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil para calcular os melhores Códigos de Autenticação de Mensagem (MACs) com base na versão do servidor, caso contrário, especifique uma string de valores Mac
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil para calcular as melhores cifras com base na versão do servidor, caso contrário, especifique uma string de valores Cipher
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - false. Defina como true se CBC para cifras for necessário. Isso geralmente só é necessário se mecanismos M2M mais antigos precisarem se comunicar com SSH e não tiverem nenhuma das cifras seguras configuradas habilitadas. CBC é uma alternativa fraca. Qualquer coisa mais fraca deve ser evitada e, portanto, não está disponível.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false. Defina como true se mecanismos HMAC mais fracos forem necessários. Isso geralmente só é necessário se mecanismos M2M mais antigos precisarem se comunicar com SSH e não tiverem nenhum dos HMACs seguros configurados habilitados.
    • ['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false. Defina como true se mecanismos de Troca de Chaves (KEX) mais fracos forem necessários. Isso geralmente só é necessário se mecanismos M2M mais antigos precisarem se comunicar com SSH e não tiverem nenhum dos KEXs seguros configurados habilitados.
    • ['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - um ou mais hosts, aos quais o ssh-client pode se conectar.
    • ['ssh-hardening']['ssh']['client']['password_authentication'] - false. Defina como true se a autenticação por senha deve ser habilitada.
    • ['ssh-hardening']['ssh']['client']['roaming'] - false. Defina como true se o roaming experimental do cliente deve ser habilitado. Sabe-se que isso causa possíveis problemas com segredos sendo divulgados para servidores maliciosos e, por padrão, fica desabilitado.
    • ['ssh-hardening']['ssh']['client']['extras'] - {}. Adicione opções de configuração extras, veja abaixo para detalhes
    • ['ssh-hardening']['ssh']['server']['host_key_files'] - nil para calcular a melhor configuração de hostkey com base na versão do servidor, caso contrário, especifique um array com caminhos de arquivo (ex.: /etc/ssh/ssh_host_rsa_key)
    • ['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - Tamanho mínimo aceitável do primo em bits em /etc/ssh/moduli. Primos abaixo desse número serão removidos. (Veja isto para mais informações e contexto)
    • ['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - Se primos próprios devem ser gerados. Essa regeneração acontece apenas uma vez e leva muito tempo (~ 1,5 - 2h em hardware moderno para comprimento de 4096).
    • ['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - Comprimento do primo que deve ser gerado. Esta opção só é válida se dh_build_primes estiver habilitado.
    • ['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - um ou mais endereços IP, aos quais o ssh-server deve escutar. O padrão é escutar em todas as interfaces. Deve ser configurado por razões de segurança!
    • ['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false para desabilitar o login root por completo. Defina como true para permitir que o root faça login via mecanismo baseado em chave
    • ['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false. Defina como true para permitir o Encaminhamento TCP
    • ['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false. Defina como true para permitir o Encaminhamento de Agente
    • ['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false. Defina como true para permitir o Encaminhamento X11
    • ['ssh-hardening']['ssh']['server']['permit_tunnel'] - false para desabilitar o encaminhamento de dispositivo tun. Defina como true para permitir o encaminhamento de dispositivo tun. Outros valores aceitos: 'yes', 'no', 'point-to-point', 'ethernet'. Veja man sshd_config para comportamentos exatos. Observação: você também precisará habilitar allow_tcp_forwarding.
    • ['ssh-hardening']['ssh']['server']['use_pam'] - true. Defina como false para desabilitar a autenticação pam do sshd
    • ['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false. Defina como true para habilitar a autenticação por desafio-resposta.
    • ['ssh-hardening']['ssh']['server']['deny_users'] - [] para configurar DenyUsers; se especificado, o login é desabilitado para nomes de usuário que correspondam a um dos padrões.
    • ['ssh-hardening']['ssh']['server']['allow_users'] - [] para configurar AllowUsers; se especificado, o login é permitido apenas para nomes de usuário que correspondam a um dos padrões.
    • ['ssh-hardening']['ssh']['server']['deny_groups'] - [] para configurar DenyGroups; se especificado, o login é desabilitado para usuários cujo grupo primário ou lista de grupos suplementares corresponda a um dos padrões.
    • ['ssh-hardening']['ssh']['server']['allow_groups'] - [] para configurar AllowGroups; se especificado, o login é permitido apenas para usuários cujo grupo primário ou lista de grupos suplementares corresponda a um dos padrões.
    • ['ssh-hardening']['ssh']['server']['print_motd'] - false. Defina como true para habilitar a impressão do MOTD
    • ['ssh-hardening']['ssh']['server']['print_last_log'] - false. Defina como true para habilitar a impressão das informações do último login
    • ['ssh-hardening']['ssh']['server']['banner'] - nil. Defina um caminho como '/etc/issue.net' para habilitar o banner
    • ['ssh-hardening']['ssh']['server']['os_banner'] - false para desabilitar informações de versão durante o handshake do protocolo (apenas família debian). Defina como true para habilitá-lo
    • ['ssh-hardening']['ssh']['server']['use_dns'] - nil para usar o padrão do openssh. Defina como true ou false para habilitar/desabilitar a consulta DNS e verificação do host remoto
    • ['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil para calcular o melhor valor com base na versão do servidor, caso contrário, defina true ou false
    • ['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s. Tempo no qual o login deve ser concluído com sucesso, caso contrário, o usuário é desconectado.
    • ['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2. O número de tentativas de autenticação por conexão
    • ['ssh-hardening']['ssh']['server']['max_sessions'] - 10 O número de sessões por conexão
    • ['ssh-hardening']['ssh']['server']['password_authentication'] - false. Defina como true se a autenticação por senha deve ser habilitada
    • ['ssh-hardening']['ssh']['server']['log_level'] - verbose. O nível de log do sshd. Veja LogLevel em man 5 sshd_config para valores possíveis.
    • ['ssh-hardening']['ssh']['server']['sftp']['enable'] - false. Defina como true para habilitar o recurso SFTP do daemon OpenSSH
    • ['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly. Define a opção Match Group do SFTP para permitir SFTP apenas para usuários dedicados
    • ['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u. Define o diretório onde o usuário SFTP deve ser confinado (chroot)
    • ['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil. Se não for nil, caminho completo para um ou vários arquivos de chaves autorizadas separados por espaço que serão definidos dentro do Match Group para acesso somente SFTP
    • ['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false. Defina como true se a autenticação por senha deve ser habilitada
    • ['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil. Se não for nil, espera-se o caminho completo para um ou vários arquivos de chaves autorizadas separados por espaço.
    • ['ssh-hardening']['ssh']['server']['extras'] - {}. Adicione opções de configuração extras, veja abaixo para detalhes
    • ['ssh-hardening']['ssh']['server']['match_blocks'] - {}. Bloco de configuração Match, veja abaixo para detalhes

    Uso

    Adicione as receitas ao run_list:

    root@kitploit:~
    "recipe[ssh-hardening]"
    

    Isso instalará o ssh-server e o ssh-client. Você pode alternativamente escolher apenas um via:

    root@kitploit:~
    "recipe[ssh-hardening::server]"
    "recipe[ssh-hardening::client]"
    

    Configure os atributos:

    root@kitploit:~
    "ssh-hardening": {
      "ssh" : {
        "server" : {
          "listen_to" : "10.2.3.4"
        }
      }
    }
    

    O valor padrão para listen_to é 0.0.0.0. É altamente recomendável alterar o valor.

    SFTP

    Para habilitar a configuração SFTP, adicione uma das seguintes receitas ao run_list:

    root@kitploit:~
    "recipe[ssh-hardening]"
    ou
    "recipe[ssh-hardening::server]"
    

    Configure os atributos:

    root@kitploit:~
    "ssh-hardening": {
      "ssh" : {
        "server": {
          "sftp" : {
          "enable" : true,
          "chroot" : "/home/sftp/%u",
          "group"  : "sftusers"
        }
        }
      }
    }
    

    Isso habilitará o Servidor SFTP e confinará (chroot) cada usuário no grupo sftpusers ao diretório /home/sftp/%u.

    Opções de Configuração Extras

    Opções de configuração extras podem ser anexadas aos arquivos de configuração do cliente ou do servidor. Isso pode ser usado para sobrescrever valores definidos estaticamente ou adicionar opções de configuração não disponíveis de outra forma via atributos.

    A sintaxe é a seguinte:

    root@kitploit:~
    # => Configuração Extra do Servidor
    default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
      extra['#Algum Comentário'] = 'Aqui está o Comentário'
      extra['AuthenticationMethods'] =  'publickey,keyboard-interactive'
    end
    
    # => Configuração Extra do Cliente
    default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
      extra['PermitLocalCommand'] = 'no'
      extra['Tunnel'] =  'no'
    end
    

    Opções de Configuração Match para sshd

    Blocos Match devem ser colocados no final do sshd_config. Isso pode ser alcançado usando a árvore de atributos match_blocks:

    root@kitploit:~
    default['ssh-hardening']['ssh']['server']['match_blocks'].tap do |match|
      match['User root'] = <<~ROOT
        AuthorizedKeysFile .ssh/authorized_keys
      ROOT
      match['User git'] = <<~GIT
        Banner none
        AuthorizedKeysCommand /bin/false
        AuthorizedKeysFile .ssh/authorized_keys
        GSSAPIAuthentication no
        PasswordAuthentication no
      GIT
    end
    

    Testes Locais

    Instale chef-dk, VirtualBox ou VMware Workstation e Vagrant.

    A verificação de lint é feita com rubocop e foodcritic:

    root@kitploit:~
    $ chef exec rake lint
    .....
    

    Os testes de unidade/spec são feitos com chefspec:

    root@kitploit:~
    $ chef exec rake spec
    .....
    

    Os testes de integração são feitos com test-kitchen e inspec:

    root@kitploit:~
    $ chef exec rake kitchen
    .....
    # ou você pode usar o kitchen diretamente
    $ kitchen test
    

    FAQ / Armadilhas

    Não consigo entrar na minha conta. Registrei a chave do cliente, mas ainda assim não me deixa entrar.

    Se você esgotou todos os problemas típicos (firewall, rede, chave ausente, chave errada, conta desabilitada etc.), pode ser que sua conta esteja bloqueada. A maneira mais rápida de descobrir é olhar o hash da senha do seu usuário:

    root@kitploit:~
    sudo grep myuser /etc/shadow
    

    Se o hash incluir um !, sua conta está bloqueada:

    root@kitploit:~
    myuser:!:16280:7:60:7:::
    

    A maneira correta de resolver isso é desbloquear a conta (passwd -u myuser). Se o usuário não tiver senha, você pode desbloqueá-la via:

    root@kitploit:~
    usermod -p "*" myuser
    

    Alternativamente, se você pretende usar PAM, habilite-o via ['ssh-hardening']['ssh']['use_pam'] = true. O PAM permitirá que usuários bloqueados entrem com chaves.

    Por que meu aplicativo não se conecta mais via SSH?

    Sempre olhe primeiro os arquivos de log e, se possível, observe a negociação entre cliente e servidor que é concluída ao conectar.

    Vimos alguns problemas em aplicativos (baseados em python e ruby) que se devem ao uso de um conjunto de criptografia desatualizado. Isso colide com este módulo de endurecimento, que reduziu a lista de cifras, códigos de autenticação de mensagem (MACs) e algoritmos de troca de chaves (KEX) para uma seleção mais segura.

    Se você achar que isso não é suficiente, sinta-se à vontade para ativar os atributos cbc_requires para cifras, weak_hmac para MACs e weak_kex para KEX nos namespaces ['ssh-hardening']['ssh']['client'] ou ['ssh-hardening']['ssh']['server'] com base em onde você deseja suportá-los.

    Por que não consigo entrar no servidor SFTP depois de adicionar um usuário ao meu grupo SFTP?

    Este é um problema de propriedade do ChrootDirectory. O sshd rejeitará conexões SFTP para contas que estão configuradas para confinamento (chroot) em qualquer diretório que tenha propriedade/permissões que o sshd considere inseguras. Os requisitos estritos de propriedade/permissões do sshd determinam que cada diretório no caminho do chroot deve ser de propriedade do root e gravável apenas pelo proprietário. Então, por exemplo, se o ambiente chroot for /home, ele deve ser de propriedade do root.

    Veja https://wiki.archlinux.org/index.php/SFTP_chroot

    Colaboradores + Créditos

    • Dominik Richter arlimus
    • Christoph Hartmann chris-rock
    • Bernhard Weisshuhn (também conhecido como bernhorst) bkw
    • Patrick Munch atomic111
    • Edmund Haselwanter ehaselwanter
    • Dana Merrick dmerrick
    • Anton Rieder aried3r
    • Trent Petersen Rockstar04
    • Petri Sirkkala sirkkalap
    • Jan Klare jklare
    • Zac Hallett zhallett
    • Petri Sirkkala sirkkalap
    • stribika
    • Siddhant Rath sidxz

    Este cookbook é baseado principalmente em guias de:

    • NSA: Guide to the Secure Configuration of Red Hat Enterprise Linux 5
    • Deutsche Telekom, Group IT Security, Security Requirements (Alemão)

    Obrigado a todos vocês!!

    Contribuindo

    Veja diretrizes do colaborador.

    Licença e Autor

    • Autor:: Dominik Richter [email protected]
    • Autor:: Deutsche Telekom AG

    Licenciado sob a Apache License, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em

    root@kitploit:~
    http://www.apache.org/licenses/LICENSE-2.0
    

    A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Veja a Licença para o idioma específico que rege as permissões e limitações sob a Licença.

    Baixar ferramenta