Quando li que um dos bancos com que trabalho ia passar a exigir a instalação de um tal “Módulo de Proteção” para eu poder fazer operações no net banking, pensei: “Esse banco existe? Esse banco é real? Será que não está me fazendo instalar mais que o possível?”

Há pelo menos sete anos dou palestras por aí defendendo a ética e a moral do Software Livre, de que todo usuário tem direito de estudar, adaptar e compartilhar todo o software que pode executar em seu computador, e deve poder executá-lo para qualquer propósito, quando e como quiser. Isso é essencial para a liberdade digital individual. Isso permite ao usuário, se quiser, aprender, resolver seus próprios problemas e pedir, receber e oferecer ajuda em sua comunidade.

Na contra-mão dessa cultura, a anti-cultura do software proprietário, que nega ao usuário não só o conhecimento necessário para estudar e adaptar o software (o código fonte), tornando os problemas mais triviais insolúveis para o usuário, mas que também se preocupa em manter o usuário ignorante, escondendo-lhe informação essencial para sua própria segurança.

Não me canso de dizer quão estúpida é a idéia de executar um programa qualquer só porque um CD ou DVD foi carregado, ou porque uma determinada página da Internet foi aberta, ou porque um e-mail foi visualizado. Ou de esconder informações vitais sobre o tipo de um arquivo anexo a um e-mail ou referenciado numa página, de modo que o usuário não possa saber, antes (ou mesmo depois) de pedir para abri-lo, se é um texto, uma imagem ou um vídeo, estes relativamente inofensivos, ou um programa que poderá então fazer o que quiser no computador do pobre usuário. E tome vírus, vermes e outras criaturas do submundo digital que sobrevivem por causa disso.

Mais séria ainda é a premissa de que o usuário do computador, durante suas atividades cotidianas, deva ter permanentemente permissões de administrador da máquina. Em sistemas operacionais de verdade, as atividades normais se fazem como usuário comum, e somente aquilo que efetivamente precisa de permissões de administrador se faz como administrador. Isso é básico para a segurança. Não sendo assim, qualquer um desses programas maliciosos, numa página, e-mail ou mídia pode se instalar e se esconder na máquina e afetar todos os seus usuários dali por diante, monitorando e talvez modificando qualquer coisa que eles façam.

Aí sujeito escreve um programa que monitora as páginas que o computador acessa e, em certas páginas, captura o que o usuário tecla e os lugares onde ele clica com o mouse, e anuncia toda essa informação num certo canal de comunicação que o autor do programa monitora. E aí, babau!, adeus saldo da conta bancária...

Culpa de quem? Do usuário, que teve software inadvertidamente instalado em seu computador? Do fabricante do sistema operacional, que induziu o usuário ao erro? Do sujeito que escreveu o programa? Do banco, que não fez o impossível para proteger seu cliente frente à ignorância imposta pelo fabricante monopolista de sistema operacional?

Errou o cliente usuário, que, ignorante, escolheu um sistema operacional que faz questão de mantê-lo ignorante e sem controle sobre seu computador: através de sua escolha infeliz, tanto na hora de escolher qual sistema operacional usar quanto na hora de decidir quais páginas acessar ou que programas abrir, permitiu tacitamente que programas alheios a seus interesses roubassem sua informação.

Errou quem usou as informações coletadas e publicadas pelo programa, seja quem divulgou o programa ou não. Se você acha uma carteira na rua, a coisa certa a fazer é tentar devolvê-la ao dono, e não se apropriar do dinheiro que houver nela. Acessar uma conta bancária alheia e transferir fundos sem autorização explícita de seu titular é errado, e ainda por cima é crime.

Errou o fabricante do sistema operacional, que escondeu informação do usuário e não lhe pediu confirmação antes de executar um programa potencialmente malicioso, abrindo as portas para que tais programas facilmente tomassem conta do computador.

Lamentavelmente, parece que a lei brasileira, em vez de culpar e punir quem errou, joga a responsabilidade toda pra cima do banco, o único que não fez nada de errado. Tipo assim, como o banco poderia saber que o usuário não deu suas senhas para outra pessoa acessar sua conta? Por que haveria de ser responsabilizado por uma transação que, de seu ponto de vista, tinha todos os elementos que comprovam a autorização pelo cliente usuário?

Enfim... É por causa dessa insegurança crônica no sistema operacional mais usado e da lei absurda que os bancos não só tentam aprovar leis ainda mais absurdas e, enquanto isso não acontece, inventam mecanismos para dificultar a vida dos programas que usuários inadvertidamente instalam, e dos próprios usuários, como os cartões de senhas e os teclados virtuais.

Enquanto cartões de senha sejam um tanto inconvenientes e adicionem pouco à segurança de um sistema já seguro, não há críticas sérias a esse mecanismo.

Teclados virtuais, porém, têm conseqüências realmente daninhas, além de ser um paliativo inconveniente de efeitos positivos restritos e facilmente contornáveis. Eles evitam que o usuário digite sua senha no teclado, inutilizando os programas maliciosos que monitoravam apenas o teclado. Estes passam a ter de monitorar os cliques do mouse e tomar nota do contexto sobre o qual os cliques ocorrem. É por isso que alguns sistemas de net banking piscam o teclado todo a cada clique: para que o programa monitor tenha menos chances de capturar a imagem da tecla virtual sobre a qual se clicou. Mas aí, não é só o programa monitor esperar um pouquinho mais, até a imagem voltar, ou ser rápido o suficiente para capturá-la antes que seja apagada?

Enquanto isso, eu, num computador seguro, que poderia digitar rapidamente minha senha no teclado, sem dar chance a que alguém a visse, preciso “catar milho” com o mouse, de modo que minha senha ficaria facilmente visível a alguém que estivesse olhando para minha tela, mesmo à distância. E não adianta eu tentar digitar a senha no teclado pra evitar essa visibilidade, o net banking simplesmente não deixa.

O do Real pelo menos funciona bem em navegadores convencionais, sem necessidade de um plugin para uma máquina virtual Java ainda proprietária, que por exemplo o Banco do Brasil exige. O plugin da Sun não faz parte do conjunto de software já liberado no OpenJDK, e sua versão 100% Livre, o Icedtea, tem plugin baseado no GNU Compiler for Java e no GNU Classpath, ainda sem a interface para Javascript exigida pelo Banco do Brasil. Ou seja, você consegue digitar sua senha, mas o autenticador diz que a senha foi nula.

Foi por isso que, depois de anos reclamando e aguardando a restauração de uma solução funcional, praticamente deixei o Banco do Brasil em favor do Banco Real. Será que vou ter que fazer isso de novo?

A razão, desta vez, seria esse tal “módulo de proteção”, inventado e implantado antes que pudesse tomar as rédeas o novo dono do Real, o Santander Banespa, que sempre se preocupou em respeitar minhas escolhas de software.

A primeira pergunta a fazer é: proteção de quem? Diz a página de download do instalador do módulo de proteção:

O Módulo de Proteção do BANCO REAL é um software que trabalha de forma integrada ao Internet Explorer impedindo que programas maliciosos instalados no seu computador sem seu consentimento capturem ou solicitem seus dados de acesso ao Real Internet Banking.

Hmm... Internet Explorer? Não uso. De fato, meu computador não roda programas maliciosos sem meu consentimento, muito menos esse queijo suíço de segurança que se chama Internet Explorer ou o sistema operacional ao qual ele está integrado. Eu só instalo Software Livre.

Então, não preciso do módulo de proteção, certo? Se não vai me proteger em nada, o banco pode me permitir acessar a conta sem esse módulo indefinidamente, certo? Pode inclusive verificar, através do campo X-User-Agent nas requisições que trafegam do meu navegador para seus servidor qual o navegador e qual o sistema operacional que uso, e dispensar a exigência do módulo baseado nessa informação. Certo?

Bom... Em teoria, teoria e prática são a mesma coisa, mas na prática... Parece que, para conter os protestos de usuários de GNU+Linux e do Mozilla Firefox, o Real está desenvolvendo um módulo de segurança para esse navegador também. Diz o Real, inclusive, que pretende que esse módulo funcione em outros sistemas operacionais, inclusive o GNU+Linux. Enquanto isso, em caráter excepcional, e apenas por 120 dias, estão permitindo a usuários que peçam a desativação da exigência do módulo de segurança para suas contas.

Bom, vamos supor que eles façam o tal módulo funcionar em GNU+Linux, sobre navegadores da família Mozilla. E quem usa o Konqueror, ou o Epiphany, ou o Galeon, ou outros navegadores livres? Que dizer dos usuários que prefiram ou precisem usar navegadores em modo texto, como links, lynx e w3c? Vão se tornar (ou continuar) uma ralé digitalmente excluída das comodidades do net banking? Em prol de um suposto aumento da segurança paliativo para quem usa sistemas operacionais deliberadamente inseguros, o banco vai cortar o acesso dos que fazem questão de só usar software seguro? Pra proteção de quem, mesmo?

Não estou brincando quando digo “suposto aumento de segurança”. Imagine que eu, ao abrir a conta no Real, houvesse dito a eles algo assim:

“Olha só, gosto de usar net banking mas entendo dos vários problemas de segurança que envolvem essa questão, e gostaria de aumentar a segurança para mim.

“Por isso, contratei um conhecido meu, especialista em segurança, para escrever um programa que vai impedir acessos à minha conta se eu não estiver rodando um outro programa de autorização no meu notebook ou desktop. Eu só preciso que vocês instalem esse primeiro programa no servidor do net banking de vocês.

“Não, eu não vou detalhar como esse programa funciona, meu conhecido não explicou pra mim e nem eu nem você entenderíamos, só peço que vocês confiem em mim e na competência técnica do programador que contratei para desenvolvê-lo. ¡La garantía soy yo!”

Levante o mouse quem acha que há alguma chance de o Real (ou qualquer outro banco) aceitar esse hipotético pedido meu.

Quem seria estúpido o suficiente para rodar, em seus servidores, um programa desconhecido e inauditável?

Então por que algum banco esperaria que a gente cometesse essa mesma estupidez em nossos computadores? Por que esperaria que gente que entende um mínimo de segurança computacional rodasse um trecho de código que pode tomar controle completo do nosso navegador, quiçá de tudo que fazemos no computador, só para poder fazer as transações bancárias que já podemos fazer hoje, com segurança, num computador que rode software seguro, inspecionável, auditável, adaptável e socialmente aceitável?

E mais: no caso do módulo para Firefox, seria software desenvolvido às pressas, em reação aos protestos de usuários, pois fica claríssimo, pela forma como a coisa foi anunciada e modificada nas últimas semanas, que o plano inicial era excluir todo mundo que não usasse o IEca.

Infelizmente, parece que há muita gente se enganando e fazendo a reclamação errada pro Real. Pelo menos é essa a impressão que tenho quando ouço gente do Real me explicando sobre seus planos para resolver as dificuldades.

Pedir suporte ao Mozilla Firefox e ao GNU+Linux é uma abordagem moralmente errada. Pode até resolver o problema para alguns, mas os demais seriam tão excluídos quanto com a solução somente para IEca+Windows. É claro que gosto da idéia de que o Real mantenha a opção Firefox+GNU+Linux funcionando.

Mas essa opção não funciona se exigir o sacrifício a segurança do computador e da liberdade, instalando e executando Software não-Livre. Software que não se pode inspecionar, não se pode adaptar (por exemplo para outros navegadores e sistemas operacionais, ou para quaisquer outros fins), e que não se pode compartilhar com outras pessoas, com ou sem modificações que se tenha feito.

Um conceito não-intuitivo da matéria de segurança computacional é que a verdadeira segurança depende da transparência do processo. Se a segurança de um sistema computacional depende da manutenção de segredo sobre parte de um processo implementado num programa, se esse programa estiver disponível, o sistema não é seguro.

É como comprar um cadeado cigano pra trancar a porta da sua casa, enquanto o vendedor do cadeado passa o dia todo anunciado num megafone, na frente da sua casa, a forma de abri-lo, mas numa língua pouco conhecida, por exemplo, o Javanês. Você confiaria que ninguém vai entender ou decifrar a mensagem e então entrar na sua casa?

Assim é com sistemas de computação baseados em segredos de processo: cedo ou tarde, algum curioso ou espírito de porco vai investir o tempo necessário para descobrir o segredo, e aí, acabou. São verdadeiramente seguros somente sistemas que dependam apenas do segredo de chaves e senhas, e estas sejam facilmente substituíveis e mantidas fora do sistema: por exemplo, a sua senha de acesso, ou a chave guardada num cartão de certificado digital.

Bom, então vamos supor que o módulo de proteção do Real seja verdadeiramente seguro (segundo descrição acima), e acreditar que sua intenção seja unicamente evitar a captura de teclas ou cliques do mouse durante uma sessão de acesso ao net banking.

Se o sistema é realmente seguro, o Real poderia publicar o código fonte do módulo de proteção, ou ao menos a especificação de como ele se identifica junto ao servidor do Real, para que a própria comunidade se encarregasse de fazer o software funcionar em outros navegadores, sistemas operacionais, etc. Não seria lindo?

Mas peraí... Será que isso não viabilizaria o desenvolvimento de módulos alternativos que não oferecessem segurança adicional alguma, e que poderiam ser incluídos em software malicioso, acabando com a proteção que o módulo pretendia oferecer a usuários de sistemas operacionais inseguros? Se a segurança do sistema dependesse desse tipo de segredo de processo, então ele não seria verdadeiramente seguro, né? Seria só alguém gastar um tempinho pra descobrir como ele interage com o servidor e, babau, segurança. Pra todo mundo.

Por outro lado, se ele for realmente seguro, vai apenas providenciar para que a senha fornecida pelo usuário seja transmitida de maneira segura para o banco, sem possibilidade de interceptação. Nesse caso, a publicação do módulo, ou pelo menos de sua especificação, não traz prejuízo algum à segurança. Então, será que o sistema do Real é seguro ou não?

Para quem não acredite que um sistema realmente seguro seja possível (ou real :-), um exemplo: na Alemanha, os bancos implementam um protocolo seguro de autenticação de transações bancárias, com especificações públicas. Meus amigos alemães conseguem não só controlar suas finanças, mas também iniciar transações, usando Software Livre, como por exemplo o GnuCash. Não precisa cada banco ficar inventando seus próprios quebra-galhos para supostamente aumentar a segurança: o mecanismo seguro já está lá, e sua segurança não depende do desconhecimento público de seus detalhes. Pelo contrário: sua resistência a ataques apesar de seu conhecimento público reforça o fato de que é seguro.

Será que querer algo parecido no Brasil é pedir muito? Será que é mais que o possível?

Enquanto isso, ao invés de os bancos ficarem nivelando a segurança por baixo, será que dá pra assegurar que quem queira ter liberdade e controle sobre todo o software que roda em seu computador possa fazer uso do net banking, entendendo que o problema generalizado de segurança daquele outro sistema operacional não nos afeta, e que nos oferecer e ao mesmo tempo exigir o uso de paliativos só faz reduzir e cercear nossa segurança, nossas opções, nossa liberdade e nossos valores morais?

Em outras palavras, será que dá pra manter indefinidamente a possibilidade de acesso seguro sem o módulo de segurança, ou liberar a especificação ou o código desse módulo supostamente seguro, para que sua segurança possa ser comprovada por especialistas independentes?

Aos clientes do banco Real que fazem questão da liberdade do software, sugiro que entrem em contato com seus gerentes e com os canais de atendimento do net banking e deixem claro que o ponto não é ter um paliativo que funcione com algum navegador específico no GNU+Linux, como parece que o banco está entendendo. O problema é a exigência de instalação de software que não só é completamente inútil para nós, mas também software que exclui. Exclui navegadores, exclui sistemas operacionais, exclui pessoas. E excluirá enquanto não for Software Livre, pois não respeita o usuário em suas necessidades de segurança, conhecimento, adaptação e vida em comunidade. Software que não pode ser estudado, inspecionado, modificado nem compartilhado. É software em que não se pode confiar.

Se o Banco Real não entender isso, teremos novamente um grande problema daqui a 4 meses, pois a possibilidade de acesso seguro e confiável (do ponto de vista do cliente) ao net banking será irreal! É, uma vez que entenda, poderemos ver se esse banco realmente faz mais que o possível. Ou, no mínimo, o possível: manter o sistema atual em funcionamento para quem o solicite.

Até blogo...