O
Banrisul é, orgulhosamente, o banco dos gaúchos. Orgulhosamente, ele não usa o
Warsaw como módulo de segurança, porém, usa Java e um leitor de cartão
Vasco DigitalPass 905, leitor que possuí relatos de incompatibilidade à partir do Ubuntu 13.10 [2][7].
Este artigo tem o objetivo de apresentar workarounds para possíveis problemas de compatibilidade do leitor de cartões Vasco com novas distribuições do Ubuntu, além da instalação dos pacotes e extensões necessários para o funcionamento do
Internet Banking do Banrisul no
Linux.
Instalação do complemento Banrisul
Alguns sites utilizam a tecnologia Java para realizar a autenticação através de certificados digitais, como o Banrisul e órgãos governamentais (TRT, TJRS, entre outros).
Devido a recente política de fim de suporte a plugins
NPAPI, adotada pela
Google Chrome a partir da versão 45 do navegador (e seguida posteriormente por outros navegadores, como o
Mozilla Firefox), o Java tornou-se incompatível com novas versões dos principais navegadores do mercado.
Como alternativa ao fim de suporte a plugins NPAPI, alguns órgãos (como o TRT) adotaram o uso de versões portáteis do navegador Mozilla Firefox (navegador PJe, no caso do TRT), na qual utilizam uma versão anterior do navegador que ainda possuía compatibilidade com o plugin Java. Porém, outra solução (mais elegante) adotada pelo CJST e pelo Banrisul que, para não ter que converter suas aplicações Java para outras linguagens, é adicionar um processo executado em segundo plano que escuta (listen) requisições em uma porta específica (caso do Shodo, do CJST) ou através da instalação de uma extensão do navegador (caso do Banrisul). De fato, o acesso a alguns recursos em páginas Web, como leitor de impressão digital e de cartões, não é suportada nativamente por todos os navegadores, sendo necessário o uso de extensões.
Felizmente, o listener do Banrisul suporta o
OpenJDK, disponível nos repositórios do Ubuntu 16.04. Caso você não possua o OpenJDK (ou o Java) instalados, você pode instalar o OpenJDK através do comando:
sudo apt-get update && sudo apt-get install default-jre
Após a instalação do Java, é necessário instalar o listener do Banrisul. Ele pode ser obtido em:
http://www.banrisul.com/firefox.
No rodapé da página, na seção "Links Relacionados Ordenados", clique em "Complemento Chrome e Firefox para Linux" para baixar o pacote DEB.
Após a instalação do pacote DEB, abra o Terminal (Alt + T), altere o diretório para o local que o pacote DEB foi baixado e execute o comando dpkg para realizar a (re)instalação do pacote.
sudo dpkg -i ~/Downloads/ComplementoBanrisul_Linux_122.deb
Instalação da extensão nos navegadores Mozilla Firefox e Google Chrome
Após a instalação do listener do Banrisul, é necessário instalar as extensões para os navegadores Mozilla Firefox e Google Chrome, que realizarão a comunicação com o listener durante o acesso ao Internet Banking com o leitor de cartões. Caso você possua ambos os navegadores, será necessário instalá-lo individualmente em cada navegador para acessar o Internet Banking através dos dois navegadores.
Após a instalação do Java, é necessário instalar o listener do Banrisul. Ele pode ser obtido em:
http://www.banrisul.com/firefox.
No rodapé da página, na seção "Links Relacionados Ordenados", clique em "Extensão Banrisul Internet Banking (exclusivo para Google Chrome)" para baixar a extensão para Google Chrome. Abrirá a Chrome Web Store com a página da extensão do Banrisul para Google Chrome. Clique no botão "Usar no Chrome" para realizar a instalação da extensão.
Para realizar a instalação da extensão para o Mozilla Firefox, clique em "Extensão Banrisul Internet Banking (exclusivo para Mozilla Firefox)". O Mozilla Firefox abrirá uma segunda aba, perguntando se você deseja instalar a extensão de fonte desconhecida. Clique em "Permitir" para realizar a instalação.
Instalação do suporte a Leitor de Cartões no Linux
Segundo o Manual de Instalação de leitoras smartCard do Banrisul [3], para que o leitor de cartões seja reconhecido no Linux, é necessário instalar o pacote
pcscd. Para que o leitor de cartões
Vasco DigitalPass 905 seja reconhecido no Linux, é necessário instalar a biblioteca
libccid, que provê drivers para leitoras de cartões
CCID. O procedimento varia de acordo com cada distribuição. Além do Ubuntu, o manual possuí o procedimento para outras distribuições.
No Ubuntu, os pacotes estão disponível nos repositórios oficiais e podem ser instalado através do seguinte comando:
sudo apt-get update && sudo apt-get install pcscd libccid
É recomendado instalar o pacote
libpcsclite1, que permite outros aplicativos acessarem o leitor de cartões através da API PCSC-Lite. [3][4]
sudo apt-get update && sudo apt-get install libpcsclite1 libpcsclite-dev
Outras ferramentas opcionais para diagnosticar possíveis problemas de detecção do leitor de cartões e do cartão em si são os pacotes
pcsc-tools e o
opensc. [4] O pcsc-tool disponibiliza o comando
pcsc_scan, que exibe no terminal quando um cartão é inserido ou removido do leitor, e o pacote
opensc disponibiliza o utilitário opensc-
tool [5], que lista os objetos presentes no cartão (certificado digital).
sudo apt-get update && sudo apt-get install pcsc-tool opensc
O Banrisul usa o padrão internacional para acesso ao cartão inteligente (PC/SC) [3], porém, alguns aplicativos usam o padrão germânico para comunicação com o leitor de cartão inteligente, que é implementada pela biblioteca OpenCT [6]. Para instalar a biblioteca OpenCT, instale o pacote
openct, que também acompanha o utilitário openct-tool:
sudo apt-get update && sudo apt-get install openct
Workaround caso o leitor de cartão esteja sendo desconectado após a reinicialização
A leitoria de cartão Vasco DigitalPass 905 possuí dois leds indicativos: um verde e um vermelho, conforme a imagem abaixo.
O led verde (Power) indica que o leitor está conectado a porta USB do computador, e o vermelho indica operações de leitura ao cartão. Após a instalação dos pacotes necessários para que o leitor fosse reconhecido pelo Ubuntu, o Internet Banking reconheceu o cartão e entrou normalmente. Porém, após a reinicialização do computador, o leitor de cartões acendia ambas as luzes (quando o cartão estava inserido) e logo apagava todas as luzes após a exibição da tela de logon.
Ao parar o serviço pcscd (que identifica a conexão de leitores de cartões e realiza a instalação do leitor) e iniciá-lo em modo foreground (para exibir as informações no console), recebia a seguinte mensagem:
sudo service stop pcscd
sudo pcscd -f
00000000 ccid_usb.c:786:ReadUSB() read failed (1/2): -7 LIBUSB_ERROR_TIMEOUT
05000798 ccid_usb.c:747:WriteUSB() write failed (1/2): -7 LIBUSB_ERROR_TIMEOUT
05000403 ccid_usb.c:747:WriteUSB() write failed (1/2): -7 LIBUSB_ERROR_TIMEOUT
00000027 ifdhandler.c:158:CreateChannelByNameOrChannel() failed
00000021 readerfactory.c:1020:RFInitializeReader() Open Port 0x200000 Failed (usb:1a44/0001:libudev:0:/dev/bus/usb/002/006)
00000009 readerfactory.c:312:RFAddReader() VASCO DP905v1.1 init failed.
00000126 hotplug_libudev.c:391:HPAddDevice() Failed adding USB device: VASCO DP905v1.1
Ao executar o comando "lsusb", pude verificar que o leitor de cartões era reconhecido:
lsusb -t
Bus 008 Device 014: ID 1a44:0001 VASCO Data Security International Digipass 905 SmartCard Reader
Há diversos relatos de problemas específicos com o leitor da Vasco a partir do Ubuntu 13.10. [2][7]. Quando você pluga um leitor de cartão Vasco DP905v1.1 antes que o pcscd inicie e aguarda uns instantes, o led de 'power' verde no dispositivo desliga, indicando que o dispositivo está em modo de baixa energia. Quando isso acontece, devido a um problema específico deste modelo de leitor de cartões, é impossível reviver o leitor de cartão sem desconectar e reconectar o bus USB [7] (ou o dispositivo).
A forma mais óbvia de resolver o problema é desconectar o leitor de cartão da porta USB, reconectá-lo novamente e reiniciar o daemon pcscd [2][7]. Porém, este processo não é intuitivo para o usuário iniciante, além de não ser prático no dia-a-dia realizar este procedimento todas ás vezes que reiniciar/desligar o computador e querer usar o leitor.
Pesquisando na internet, pude encontrar no Ask Ubuntu um script que permite desconectar apenas o leitor de cartão Vasco do bus USB (através da identificação do fabricante e dispositivo) e reconectá-lo após 0.5 segundos. [1] Ele deve ser executado logo após o login do usuário. Para tanto, é necessário adicioná-lo ao PAM. O PAM (Pluggable Authentication Modules) determina como a autenticação, autorização e alteração de senha são tratados no sistema, assim como permite a configuração de ações adicionais a serem tomadas quando sessões de usuário são iniciadas.
Em um ambiente corporativo
Active Directory, é possível adicionar o script abaixo ao script de logon "logon_root.sh" do c-i-d (Closed in Directory), de forma a executá-lo toda vez que um usuário realizar login no computador da rede. Você encontra o c-i-d e seu manual em:
https://sourceforge.net/projects/c-i-d/.
Porém, para usuários que não estão em uma rede corporativa ou não usam o c-i-d, é necessário adicionar o script manualmente ao PAM. Abra o Terminal (Alt + T) e crie o arquivo usbreset.bash em /usr/local/sbin com os seguintes comandos:
sudo nano /usr/local/sbin/usbreset.bash
#!/bin/bash
set -euo pipefail
IFS=$'
'
VENDOR="045e"
PRODUCT="0719"
for DIR in $(find /sys/bus/usb/devices/ -maxdepth 1 -type l); do
if [[ -f $DIR/idVendor && -f $DIR/idProduct &&
$(cat $DIR/idVendor) == $VENDOR && $(cat $DIR/idProduct) == $PRODUCT ]]; then
echo 0 > $DIR/authorized
sleep 0.5
echo 1 > $DIR/authorized
fi
done
Para salvar o arquivo, pressione a combinação de teclas Ctrl + o e Enter. Você também pode criar o arquivo através do
gedit, caso prefira editá-lo através da interface gráfica.
Dê permissão de execução para o arquivo através do comando:
sudo chmod +x /usr/local/sbin/usbreset.bash
Agora, precisamos editar o arquivo /etc/pam.d/common-session e adicione o script usbreset.bash:
sudo nano /etc/pam.d/common-session
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session [success=7 default=ignore] pam_succeed_if.so quiet uid < 10000
session required pam_mkhomedir.so silent skel=/etc/skel/ umask=0077
session optional pam_winbind.so
session [success=4 default=ignore] pam_succeed_if.so quiet service != login service !~ ssh* service !~ gd$
session optional pam_mount.so
session optional pam_exec.so debug quiet /usr/share/cid/scripts/usbreset.bash
session optional pam_mount.so
session required pam_unix.so
session optional pam_systemd.so
Alguns usuários também relatam problemas com o leitor devido a ele desconectar após um certo período de inatividade. Para impedir que o computador desligue o dispositivo para economizar energia, crie o arquivo
usb-power.rules em
/etc/udev/rules.d com o conteúdo:
sudo nano /etc/udev/rules.d/usb-power.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1a44", ATTR{idProduct}=="0001", TEST=="power/control", ATTR{power/control}="on"
Alguns usuários também relataram problemas de falhas de segmentação (ocorre quando um programa tenta aceder [ler ou gravar] a um endereço na memória RAM que está reservado para outro programa) ao conectar o leitor de cartões devido ao driver pn533. Para instruir o kernel a carregar o driver libpcsd-lite, desabilite os drivers pn533 e libnfc adicionando-os a blacklist com os comandos [2]:
# echo "install nfc /bin/false" >> /etc/modprobe.d/blacklist.conf
# echo "install pn533 /bin/false" >> /etc/modprobe.d/blacklist.conf
Agora, reinicie o computador e verifique se o leitor de cartões é identificado normalmente ao acessar o Internet Banking do Banrisul.
Você também pode abrir uma janela do Terminal (Alt + T) para verificar se tudo está funcionando normalmente [5]:
sudo opensc-tool -a
Exibe o status do cartão (ATR).
sudo opensc-tool -s 00:A4:04:00:07:A0:00:00:00:04:80:02:00
Exibe a MasterCard.
Referências
1.
How do you reset a USB device from the command line?. Ask Ubuntu. - Acesso em: 12 jan. 2018.
2.
Smartcard reader Vasco DP905 does not work anymore after upgrade to Ubuntu 13.10. Ask Ubuntu. - Acesso em: 12 jan. 2018.
3.
Manual de Instalação de Leitoras SmartCard. Banrisul. - Acesso em: 12 jan. 2018.
4.
Como instalar o leitor de smart card do Banrisul no Ubuntu 11.04. Meira da Rocha. - Acesso em: 12 jan. 2018.
5.
How to install the DIGIPASS 905 on Ubuntu?. VASCO Data Security International, Inc. - Acesso em: 12 jan. 2018.
6.
OpenCT. Gentoo Wiki. - Acesso em: 12 jan. 2018.
7.
Bug #1366747 "libudev1 seems to cause a segfault in pcscd when a Vasco DP905v1.1 smart card reader is inserted before pcscd is started". Ubuntu Bugs. - Acesso em: 12 jan. 2018.