Como proibir senhas padrão e fazer com que todos te odeiem

O ser humano, como se sabe, é uma criatura preguiçosa.
Ainda mais quando se trata da questão de escolher uma senha segura.

Acredito que cada administrador já enfrentou o problema do uso de senhas fracas e padrão. Esse fenômeno é comum entre os altos escalões da gestão da empresa. Sim, exatamente entre aqueles que têm acesso a informações secretas ou comerciais, e seria extremamente indesejável lidar com as consequências de uma violação ou um hack de senha e os incidentes subsequentes.

Na minha experiência, houve um caso em que, em um domínio do Active Directory com uma política de senha ativada, as pessoas do departamento de contabilidade chegaram à conclusão de que uma senha como "Pas$w0rd1234" atendia perfeitamente aos requisitos da política. Como consequência, essa senha foi amplamente utilizada em todos os lugares. A única diferença era, às vezes, o conjunto de números.

Tive uma grande vontade de ter a capacidade não apenas de ativar a política de senhas e definir o conjunto de caracteres, mas também de filtrar com base em um dicionário. Para excluir a possibilidade de uso desse tipo de senhas.

A Microsoft gentilmente nos informa, através do link, que qualquer um que saiba manusear corretamente um compilador, IDE e pronunciar C++ corretamente, é capaz de compilar sua própria biblioteca necessária e usá-la como bem entender. O seu humilde servidor não é capaz disso, então tive que buscar uma solução pronta.

Após uma hora longa de pesquisa, foram apresentados dois variantes de solução para o problema. Claro, estou falando de uma solução OpenSource. Afinal, opções pagas vão de A a Z.

Opção nº 1. OpenPasswordFilter

Não há commits há cerca de 2 anos. O instalador original funciona de maneira intermitente, é preciso ajustar manualmente. Cria um serviço separado. Ao atualizar o arquivo de senhas, a DLL não captura automaticamente o conteúdo modificado; é necessário parar o serviço, aguardar o timeout, editar o arquivo e reiniciar o serviço.

Nada legal!

Opção nº 2. PassFiltEx

O projeto está ativo, vivo e nem precisa ser forçado a funcionar.
A instalação do filtro consiste na cópia de dois arquivos e na criação de várias entradas no registro. O arquivo de senhas não está em lock, ou seja, está disponível para edição e, segundo a intenção do autor do projeto, é lido uma vez por minuto. Além disso, através de entradas adicionais no registro, é possível realizar uma configuração adicional tanto do próprio filtro quanto até mesmo de nuances da política de senhas.

Assim.
Dado: domínio Active Directory test.local
estação de trabalho Windows 8.1 (para as condições do problema — irrelevante)
filtro de senhas PassFiltEx

  • Baixamos a última versão pelo link PassFiltEx
  • Copiamos PassFiltEx.dll em C:WindowsSystem32 (ou %SystemRoot%System32).
    Copiamos PassFiltExBlacklist.txt em C:WindowsSystem32 (ou %SystemRoot%System32). Se necessário, complementamos com nossos próprios modelos
    Como proibir senhas padrão e fazer com que todos te odeiem
  • Editamos a chave do registro: HKLMSYSTEMCurrentControlSetControlLsa => Pacotes de Notificação
    Adicionamos PassFiltEx ao final da lista. (A extensão não precisa ser especificada.) A lista completa de pacotes utilizados para verificação ficará assim «rassfm scecli PassFiltEx«.
    Como proibir senhas padrão e fazer com que todos te odeiem
  • Reiniciamos o controlador de domínio.
  • Repetimos o procedimento acima para todos os controladores de domínio.

Também é possível adicionar as seguintes entradas no registro, o que proporciona maior flexibilidade no uso deste filtro:

Seção: HKLMSOFTWAREPassFiltEx — é criado automaticamente.

  • HKLMSOFTWAREPassFiltExBlacklistFileName, REG_SZ, Padrão: PassFiltExBlacklist.txt

    BlacklistFileName — permite especificar um caminho personalizado para o arquivo de modelos de senhas. Se esta entrada do registro tiver um valor vazio ou não existir, o caminho padrão será usado, ou seja — %SystemRoot%System32. É possível até especificar um caminho de rede, MAS deve-se lembrar que o arquivo de modelos deve ter permissões claras de leitura, escrita, exclusão e modificação.

  • HKLMSOFTWAREPassFiltExTokenPercentageOfPassword, REG_DWORD, Padrão: 60

    TokenPercentageOfPassword — permite especificar a porcentagem de ocorrência da máscara na nova senha. Por padrão, o valor é 60%. Por exemplo, se a porcentagem de ocorrência for definida como 60 e no arquivo de modelos houver a string starwars, então a senha Starwars1! será rejeitada, enquanto a senha starwars1!DarthVader88 será aceita, pois a porcentagem de ocorrência da string na senha é inferior a 60%

  • HKLMSOFTWAREPassFiltExRequireCharClasses, REG_DWORD, Padrão: 0

    RequireCharClasses — permite expandir os requisitos de senha em comparação com os requisitos padrão de complexidade de senha do Active Directory. Os requisitos de complexidade incorporados requerem 3 de 5 tipos diferentes de caracteres: Maiúsculas, Minúsculas, Dígitos, Símbolos Especiais e Unicode. Com este registro, é possível definir seus próprios requisitos de complexidade de senha. O valor que pode ser especificado é um conjunto de bits, cada um dos quais representa uma potência de dois.
    Ou seja — 1 = minúscula, 2 = maiúscula, 4 = dígito, 8 = símbolo especial, e 16 = símbolo Unicode.
    Assim, com um valor de 7, os requisitos serão “Maiúscula E minúscula E dígito”, enquanto com um valor de 31 serão “Maiúscula E minúscula E dígito E símbolo especial E símbolo Unicode”.
    É possível até combinar — 19 = “Maiúscula E minúscula E símbolo Unicode”.

  • Como proibir senhas padrão e fazer com que todos te odeiem

Uma série de regras para a criação de arquivos de modelos:

  • Os modelos são insensíveis a maiúsculas e minúsculas. Portanto, a entrada no arquivo starwars e StarWarS será considerada um valor igual.
  • O arquivo de lista negra é lido a cada 60 segundos, portanto pode ser editado tranquilamente, e em um minuto os novos dados serão utilizados pelo filtro.
  • No momento, não há suporte para Unicode na verificação de padrões. Ou seja, usar caracteres Unicode nas senhas é possível, mas o filtro não funcionará. Isso não é crítico, pois não vi usuários que utilizam senhas em Unicode.
  • É desejável não permitir linhas vazias no arquivo de modelos. No debbuging, um erro é exibido quando os dados são carregados do arquivo. O filtro funciona, mas por que ter exceções desnecessárias?

Para debugging, o arquivo zip contém scripts que permitem criar um log e depois analisá-lo usando, por exemplo, Microsoft Message Analyzer.
Este filtro de senhas utiliza o Event Tracing for Windows.

O provedor ETW para este filtro de senhas é 07d83223-7594-4852-babc-784803fdf6c5. Assim, por exemplo, é possível configurar o rastreamento de eventos após a próxima reinicialização:
logman create trace autosessionPassFiltEx -o %SystemRootbugPassFiltEx.etl -p "{07d83223-7594-4852-babc-784803fdf6c5}" 0xFFFFFFFF -ets

O rastreamento será iniciado após a próxima reinicialização do sistema. Para parar:
logman stop PassFiltEx -ets && logman delete autosessionPassFiltEx -ets
Todos esses comandos estão indicados nos scripts StartTracingAtBoot.cmd e StopTracingAtBoot.cmd.

Para verificação única do funcionamento do filtro, pode-se usar StartTracing.cmd e StopTracing.cmd.
Para facilitar a leitura da saída de depuração deste filtro em Microsoft Message Analyzer recomenda-se usar as seguintes configurações:

Como proibir senhas padrão e fazer com que todos te odeiem

Como proibir senhas padrão e fazer com que todos te odeiem

Ao interromper o log e a análise em Microsoft Message Analyzer tudo aparece mais ou menos assim:

Como proibir senhas padrão e fazer com que todos te odeiem

Aqui podemos ver que houve uma tentativa de definir uma senha para o usuário - isso é indicado pela palavra mágica SET na depuração. E a senha foi rejeitada devido à sua presença no arquivo de modelos e mais de 30% de correspondência no texto inserido.

Em uma tentativa bem-sucedida de alterar a senha, vemos o seguinte:

Como proibir senhas padrão e fazer com que todos te odeiem

Há um certo inconveniente para o usuário final. Ao tentar mudar uma senha que está na lista do arquivo de modelos, a mensagem na tela não é especialmente inteligente e perspicaz em comparação com a mensagem padrão em caso de não conformidade com a política de senhas.

Como proibir senhas padrão e fazer com que todos te odeiem

Portanto, esteja preparado para receber ligações e gritos: "Eu digitei a senha corretamente, mas não funciona."

Conclusão.

Esta biblioteca permite proibir o uso de senhas simples ou padrão no domínio do Active Directory. Digamos 'Não!' a senhas como: 'P@ssw0rd', 'Qwerty123', 'ADm1n098'.
Sim, sem dúvida, os usuários irão gostar ainda mais de você por se preocupar com a segurança deles e a necessidade de criar senhas difíceis de lembrar. E, possivelmente, o número de ligações e pedidos de ajuda com senhas aumentará. Mas segurança tem seu preço.

Links para recursos utilizados:
Artigo da Microsoft sobre a biblioteca de filtro de senhas personalizada: Password Filters
PassFiltEx: PassFiltEx
Link para o lançamento: Latest Release
Listas de senhas:
DanielMiessler lists: Link.
Lista de palavras do weakpass.com: Link.
Lista de palavras do repositório berzerk0: Link.
Microsoft Message Analyzer: Microsoft Message Analyzer.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster