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

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

Senhas simples não são seguras e as complexas são impossíveis de lembrar. É por isso que muitas vezes eles acabam em um post-it embaixo do teclado ou no monitor. Para garantir que as senhas permaneçam na mente dos usuários “esquecidos” e que a confiabilidade da proteção não seja perdida, existe a autenticação de dois fatores (2FA).

Devido à combinação de possuir um dispositivo e saber seu PIN, o próprio PIN pode ser mais simples e fácil de lembrar. As desvantagens no comprimento ou na aleatoriedade do PIN são compensadas pela exigência de posse física e pelas restrições à força bruta do PIN.

Além disso, acontece nas agências governamentais que querem que tudo funcione de acordo com o GOST. Esta opção 2FA para fazer login no Linux será discutida. Vou começar de longe.

Módulos PAM

Pluggable Authentication Modules (PAM) são módulos com uma API padrão e implementações de vários mecanismos de autenticação em aplicações.
Todos os utilitários e aplicativos que podem funcionar com o PAM os selecionam e podem usá-los para autenticação do usuário.
Na prática funciona mais ou menos assim: o comando login chama o PAM, que realiza todas as verificações necessárias utilizando os módulos especificados no arquivo de configuração e retorna o resultado ao comando login.

librtpam

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

Vejamos o princípio de seu funcionamento:

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

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

  1. Rutoken procura o certificado pessoal do usuário.
  2. O PIN do token é solicitado.
  3. Os dados aleatórios são assinados na chave privada diretamente no chip Rutoken.
  4. A assinatura resultante é verificada usando a chave pública do certificado do usuário.
  5. O módulo retorna o resultado da verificação da assinatura para o aplicativo chamador.

Você pode autenticar usando chaves GOST R 34.10-2012 (comprimento 256 ou 512 bits) ou o desatualizado GOST R 34.10-2001.

Você não precisa se preocupar com a segurança das chaves - elas são geradas diretamente no Rutoken e nunca saem de sua memória durante as operações criptográficas.

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

Rutoken EDS 2.0 é certificado pelo FSB e FSTEC conforme NDV 4, portanto pode ser utilizado em sistemas de informação que processam informações confidenciais.

Uso prático

Quase qualquer Linux moderno serve, por exemplo, usaremos o xUbuntu 18.10.

1) Instale os pacotes necessários

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

2) Adicione um módulo PAM com suporte GOST

Carregando a biblioteca de 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 do link: https://www.rutoken.ru/support/download/pkcs/

4) Verifique se o Rutoken EDS 2.0 funciona no sistema

No terminal executamos
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Se você ver a linha Rutoken ECP <no label> - significa que está tudo bem.

5) Leia o certificado

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

  • informações são exibidas sobre chaves e certificados, você precisa ler o certificado e salvá-lo em disco. Para fazer isso, execute o seguinte comando, onde em vez de {id} você precisa substituir o ID do certificado que 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 tiver sido criado, prossiga para a etapa 6).
  • não há nada, o dispositivo estará vazio. Entre em contato com seu administrador ou crie você mesmo as chaves e o certificado seguindo a próxima etapa.

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 se destinam ao uso em modo de combate. Para fazer isso, você precisa usar chaves e certificados emitidos pela autoridade de certificação confiável da sua organização ou por uma autoridade de certificação credenciada.
O módulo PAM foi projetado para proteger computadores locais e para funcionar em pequenas organizações. Como são poucos usuários, o Administrador pode monitorar a revogação de certificados e bloquear contas manualmente, bem como o prazo de validade dos certificados. O módulo PAM ainda não sabe como verificar certificados usando CRLs e construir cadeias de confiança.

A maneira mais fácil (via navegador)

Para obter um certificado de teste, use serviço web "Centro de Registro Rutoken". O processo não levará mais de 5 minutos.

O jeito geek (por meio do console e possivelmente do compilador)

Verifique a versão do OpenSC
$ opensc-tool --version
Se a versão for inferior a 0.20, atualize ou construa Ramo pkcs11-tool com suporte GOST-2012 do nosso GitHub (no momento da publicação deste artigo, a versão 0.20 ainda não foi lançada) ou do branch master do projeto OpenSC principal, o mais tardar cometer 8cf1e6f

Gere um par de chaves com os seguintes parâmetros:
--key-type: GOSTR3410-2012-512:А (ГОСТ-2012 512 бит c парамсетом А), GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id: identificador de objeto (CKA_ID) como números de caracteres hexadecimais de dois dígitos da tabela ASCII. Use apenas códigos ASCII para caracteres imprimíveis, porque... id precisará ser passado para OpenSSL como uma string. Por exemplo, o código ASCII “3132” corresponde à string “12”. Por conveniência, você pode usar serviço online para conversão de strings em códigos ASCII.

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

A seguir criaremos um certificado. Duas formas serão descritas a seguir: a primeira é através de uma CA (usaremos CAs de teste), a segunda é autoassinada. Para fazer isso, primeiro você precisa instalar e configurar o OpenSSL versão 1.1 ou posterior para funcionar com Rutoken através de um módulo rtengine especial usando o manual Instalando e configurando OpenSSL.
Por exemplo: para '--id 3132'no OpenSSL você precisa especificar "pkcs11:id=12".

Você pode usar os serviços de uma CA de teste, dos quais existem muitos, por exemplo, aqui, aqui и aqui, para isso criaremos uma solicitação de certificado

Outra opção é ceder à preguiça e criar um documento autoassinado
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Carregando o certificado para o dispositivo
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Cadastre o certificado no sistema

Certifique-se de que seu certificado se pareça com um arquivo base64:

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

Se o seu certificado for assim:

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

então você precisa converter o certificado do formato DER para o formato PEM (base64)

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

Adicione 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 ​​contra alteração acidental ou intencional por outros usuários. Isso evita que alguém adicione seu certificado aqui e consiga fazer login em seu nome.

7) Configure a autenticação

A configuração do nosso módulo PAM é totalmente padrão e é feita exatamente da mesma maneira que a configuração de outros módulos. Criar para arquivo /usr/share/pam-configs/rutoken-gost-pam contendo o nome completo do módulo, se está habilitado por padrão, a prioridade do módulo e os parâmetros de autenticação.
Os parâmetros de autenticação contêm requisitos para o sucesso da operação:

  • obrigatório: Esses módulos devem retornar uma resposta positiva. Se o resultado de uma chamada de módulo contiver uma resposta negativa, isso resultará em um erro de autenticação. A solicitação será descartada, mas os módulos restantes serão chamados.
  • requisito: semelhante ao obrigatório, mas falha imediatamente na autenticação e ignora outros módulos.
  • suficiente: se nenhum dos módulos necessários ou suficientes antes de tal módulo retornar um resultado negativo, o módulo retornará uma resposta positiva. Os módulos restantes serão ignorados.
  • opcional: se não houver módulos obrigatórios na pilha e nenhum dos módulos suficientes retornar um resultado positivo, então pelo menos um dos módulos opcionais deverá retornar um resultado positivo.

Conteúdo completo do arquivo /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

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

salve o arquivo e execute
$ sudo pam-auth-update
na janela que aparece, coloque um asterisco próximo a ele Rutoken PAM GOST e pressione OK

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

8) Verifique as configurações

Para entender que está tudo configurado, mas ao mesmo tempo não perder a capacidade de fazer login no sistema, digite o comando
$ sudo login
Entre com seu nome de usuário. Tudo está configurado corretamente se o sistema exigir um código PIN do dispositivo.

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

9) Configure o computador para ser bloqueado quando o token for extraído

Incluído no pacote libpam-pkcs11 utilitário incluído pkcs11_eventmgr, que permite executar várias ações quando ocorrem eventos PKCS#11.
Para configurações pkcs11_eventmgr serve como um arquivo de configuração: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Para diferentes distribuições do Linux, o comando que faz com que uma conta seja bloqueada quando um cartão inteligente ou token é removido será diferente. Cm. event card_remove.
Um exemplo de arquivo de configuração é mostrado abaixo:

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Depois disso adicione o aplicativo pkcs11_eventmgr para iniciar. Para fazer isso, edite o arquivo .bash_profile:
$ nano /home/<имя_пользователя>/.bash_profile
Adicione a linha pkcs11_eventmgr ao final do arquivo e reinicialize.

As etapas descritas para configurar o sistema operacional podem ser usadas como instruções em qualquer distribuição Linux moderna, inclusive doméstica.

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

Conclusão

Os PCs Linux estão se tornando cada vez mais populares nas agências governamentais russas e nem sempre é fácil configurar uma autenticação confiável de dois fatores neste sistema operacional. Teremos o maior prazer em ajudá-lo a resolver o “problema de senha” com este guia e proteger de forma confiável o acesso ao seu PC, sem gastar muito tempo nele.

Fonte: habr.com

Adicionar um comentário