Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

Senhas simples não protegem, enquanto senhas complexas são difíceis de lembrar. Por isso, muitas vezes, elas acabam em um adesivo embaixo do teclado ou na tela. Para que as senhas permaneçam na memória de usuários “esquecidos” e a segurança não seja comprometida, existe a autenticação de dois fatores (2FA).

Graças à combinação de possuir um dispositivo e conhecer seu PIN, o próprio PIN pode ser mais simples e fácil de lembrar. As deficiências em comprimento ou aleatoriedade do PIN são compensadas pela exigência de posse física e restrições na tentativa de adivinhação do PIN.

Além disso, em organismos governamentais, pode haver a necessidade de que tudo funcione de acordo com as normas. Sobre essa opção de 2FA para acesso ao Linux é que vamos falar. Começarei do início.

Módulos PAM

Módulos de Autenticação Plugáveis (Pluggable Authentication Modules, PAM) são módulos com uma API padrão e implementações de vários mecanismos de autenticação em aplicativos.
Todas as utilidades e aplicativos que conseguem trabalhar com PAM os capturam e podem usar para autenticação de usuários.
Na prática, funciona mais ou menos assim: o comando login solicita ao PAM, que realiza todas as verificações necessárias através dos módulos especificados no arquivo de configuração e retorna o resultado ao comando login.

librtpam

O módulo desenvolvido pela empresa "Ativo" adiciona a autenticação de dois fatores para usuários através de cartões inteligentes ou tokens USB usando chaves assimétricas de acordo com os mais recentes padrões de criptografia nacional.

Vamos considerar o princípio de seu funcionamento:

  • o token armazena o certificado do usuário e sua chave privada;
  • o certificado é armazenado no diretório pessoal do usuário como confiável.

O processo de autenticação ocorre da seguinte forma:

  1. No Rutoken, é feita a busca pelo certificado pessoal do usuário.
  2. O PIN do token é solicitado.
  3. É realizada a assinatura de dados aleatórios na chave privada diretamente no chip do Rutoken.
  4. A assinatura obtida é verificada com a chave pública do certificado do usuário.
  5. O módulo retorna ao aplicativo chamador o resultado da verificação da assinatura.

É possível se autenticar utilizando as chaves da norma ГОСТ Р 34.10-2012 (com comprimentos de 256 ou 512 bits) ou da antiga ГОСТ Р 34.10-2001.

A segurança das chaves pode ficar garantida – elas são geradas diretamente no Rutoken e nunca deixam sua memória durante operações criptográficas.

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

O Rutoken ECP 2.0 é certificado pela FSB e FSTEK de acordo com NDV 4, portanto, pode ser usado em sistemas de informação que processam dados confidenciais.

Utilização prática

Praticamente qualquer Linux moderno servirá, por exemplo, estaremos usando xUbuntu 18.10.

1) Instale os pacotes necessários

sudo apt-get install libccid pcscd opensc
Se você quiser adicionar um bloqueio da área de trabalho com protetor de tela – instale adicionalmente o pacote libpam-pkcs11.

2) Adicione um módulo PAM com suporte a GOSTs

Carregue a biblioteca com https://download.rutoken.ru/Rutoken/PAM/
Copie o conteúdo da pasta PAM librtpam.so.1.0.0 para a pasta do sistema
/usr/lib/ ou /usr/lib/x86_64-linux-gnu/ou /usr/lib64

3) Instale o pacote com librtpkcs11ecp.so

Baixe e instale o pacote DEB ou RPM pelo link: https://www.rutoken.ru/support/download/pkcs/

4) Verifique se o Rutoken ECP 2.0 está funcionando no sistema

No terminal, execute
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Se você vir a linha Rutoken ECP – significa que está tudo bem.

5) Leia o certificado

Verifique se o dispositivo possui um certificado
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Se após a linha:
Using slot 0 with a present token (0x0)

  • sair informações sobre chaves e certificados, você precisa ler o certificado e salvá-lo no disco. Para isso, execute o seguinte comando, onde em vez de {id} deve-se substituir pelo ID do certificado que você viu na saída do comando anterior:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Se o arquivo cert.crt foi criado, vamos para o ponto 6).
  • se não há nada, significa que o dispositivo está vazio. Entre em contato com o administrador ou crie chaves e certificado por conta própria, seguindo o próximo ponto.

5.1) Crie um certificado de teste

Atenção! Os métodos descritos para criar chaves e certificados são adequados para testes e não devem ser utilizados em ambientes de produção. Para isso, é necessário usar chaves e certificados emitidos por um centro de certificação confiável da sua organização ou por um centro de autorizador credenciado.
O módulo PAM foi criado para proteger computadores locais e é destinado a pequenas organizações. Como há poucos usuários, o Administrador pode gerenciar a revogação de certificados e bloquear contas manualmente, assim como a validade dos certificados. O módulo PAM ainda não possui a capacidade de verificar certificados via CRL e construir cadeias de confiança.

Caminho simples (via navegador)

Para obter um certificado de teste, utilize o serviço web "Centro de Registro Rútoken". O processo levará no máximo 5 minutos.

Caminho geek (via console e, possivelmente, compilador)

Verifique a versão do OpenSC
$ opensc-tool --version
Se a versão for inferior a 0.20, atualize ou compile a ramificação do pkcs11-tool que suporta GOST-2012 do nosso GitHub (no momento da publicação deste artigo, a versão 0.20 ainda não havia sido lançada) ou da ramificação master do projeto OpenSC, não mais tarde que o commit 8cf1e6f

Gerando um par de chaves com os parâmetros:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bits com conjunto de parâmetros A), GOSTR3410-2012-256:A (GOST-2012 256 bits com conjunto de parâmetros A)

--id: identificador do objeto (CKA_ID) na forma de códigos hexadecimais de dois dígitos da tabela ASCII. Utilize apenas códigos ASCII de caracteres imprimíveis, pois o id precisará ser passado ao OpenSSL como uma string. Por exemplo, o código ASCII "3132" corresponde à string "12". Para conveniência, você pode usar um serviço online de conversão de string para códigos ASCII.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

Em seguida, vamos criar o certificado. Abaixo, descreveremos dois caminhos: o primeiro através de uma CA (usaremos CAs de teste), o segundo – autoassinado. Para isso, primeiro, é necessário instalar e configurar o OpenSSL versão 1.1 ou superior para trabalhar com o Rútoken através do módulo especial rtengine usando o guia Instalação e configuração do OpenSSL.
Por exemplo: para '--id 3132' no OpenSSL, deve-se especificar "pkcs11:id=12«.

Você pode usar os serviços de uma CA de teste, que são muitas, por exemplo, aqui, aqui e aqui, para isso, criaremos um pedido de certificado

Outra opção – você pode ser preguiçoso e criar um autoassinado
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Carregando o certificado no dispositivo
$ openssl req -utf8 -x509 -motor de keyform -chave "pkcs11:id=12" -motor rtengine -out cert.cer

6) Registrando o certificado no sistema

Certifique-se de que seu certificado esteja no formato de arquivo base64:

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

Se seu certificado estiver assim:

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

é necessário converter o certificado do formato DER para o formato PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Verifique novamente se agora está tudo em ordem.

Adicionando o certificado à lista de certificados confiáveis
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

A última linha protege a lista de certificados confiáveis de modificações acidentais ou intencionais por outros usuários. Isso exclui a situação em que alguém adiciona seu próprio certificado e consegue acessar o sistema em seu nome.

7) Configurando a autenticação

A configuração do nosso módulo PAM é absolutamente padrão e é feita da mesma forma que as configurações de outros módulos. Criamos no arquivo /usr/share/pam-configs/rutoken-gost-pam contendo o nome completo do módulo, se ele está habilitado por padrão, a prioridade do módulo e os parâmetros de autenticação.
Nos parâmetros de autenticação, há requisitos para o sucesso da operação:

  • required (obrigatório): módulos desse tipo devem retornar uma resposta positiva. Se o resultado da chamada do módulo contiver uma resposta negativa, isso resultará em erro de autenticação. A solicitação será descartada, mas os demais módulos serão acionados.
  • requisite (necessário): semelhante ao required, mas resulta imediatamente em falha de autenticação e ignora os demais módulos.
  • sufficient (suficiente): se nenhum dos módulos required ou sufficient anterior retornar um resultado negativo, o módulo retornará uma resposta positiva. Os módulos restantes serão ignorados.
  • optional (opcional): se não houver módulos required na pilha e nenhum dos módulos sufficient retornar uma resposta positiva, pelo menos um dos módulos optional deve retornar uma resposta positiva.

Conteúdo completo do arquivo /usr/share/pam-configs/rutoken-gost-pam:
Nome: Rutoken PAM GOST
Padrão: sim
Prioridade: 800
Tipo de Autenticação: Primário
Autenticação: suficiente /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

salvamos o arquivo, em seguida, executamos
$ sudo pam-auth-update
na janela que aparece, colocamos um asterisco ao lado de Rutoken PAM GOST e clicamos em OK

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

8) Verificação da configuração

Para entender se tudo está configurado, mas sem perder a capacidade de acessar o sistema, digite o comando
$ sudo login
Digite o nome de usuário. Está tudo configurado corretamente se o sistema solicitar o PIN do dispositivo.

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

9) Configurando a bloqueio do computador ao remover o token

O pacote inclui a ferramenta libpam-pkcs11 pkcs11_eventmgr, que permite executar várias ações ao ocorrer eventos PKCS#11. Para a configuração,
pkcs11_eventmgr serve o arquivo de configuração: Para diferentes distribuições Linux, o comando que aciona o bloqueio da conta ao remover cartões inteligentes ou tokens será diferente. Veja: /etc/pam_pkcs11/pkcs11_eventmgr.conf
event card_remove Um exemplo do arquivo de configuração é apresentado abaixo:.
Um exemplo de arquivo de configuração é apresentado abaixo:

pkcs11_eventmgr
{
    # Execução em segundo plano
    daemon = true;
     
    # Configuração de mensagens de depuração
    debug = false;
 
    # Tempo de interação em segundos
    polling_time = 1;
 
    # Configuração do tempo limite para remover o cartão
    # Por padrão, 0
    expire_time = 0;
 
    # Seleção da biblioteca pkcs11 para operar com Rutoken
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Ações com o cartão
    # Cartão inserido:
    event card_insert {
        # Mantém os valores padrão (nada acontece)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Cartão removido
    event card_remove {
        on_error = ignore;
         
        # Chama a função de bloquear a tela
        
        # Para GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Para XFCE
        # action = "xflock4";
        
        # Para Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Cartão removido por um longo tempo
    event expire_time {
        # Mantém os valores padrão (nada acontece)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Após isso, adicione o aplicativo serve o arquivo de configuração: ao início automático. Para isso, edite o arquivo .bash_profile:
$ nano /home//.bash_profile
Adicione a linha pkcs11_eventmgr ao final do arquivo e reinicie.

Os passos descritos para configurar o sistema operacional podem ser usados como um guia em qualquer distribuição moderna do Linux, incluindo as nacionais.

Como usar módulos PAM para autenticação local no Linux com chaves GOST-2012 no Rutoken

Conclusão

Computadores com Linux nas estruturas governamentais russas estão se tornando cada vez mais populares, e configurar uma autenticação de dois fatores confiável neste sistema operacional nem sempre é fácil. Esperamos que este guia ajude a resolver o 'problema das senhas' e a proteger o acesso ao PC de forma confiável, sem gastar muito tempo.

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