25 de Julho, 2015.

É possível obter o CPF de qualquer servidor público federal; ou, o dia que tentei hackear meu professor

falhas de segurança hacking

É bastante complexo a discussão dos métodos de avaliação e aprovação - nada atuais - em uma matéria na universidade. Na cabeça de um estudante então (eu) esse tema fica ainda mais nebuloso. Nesse semestre reprovei em uma matéria, e o que mais doeu foi que faltaram apenas dois décimos na nota para que eu fosse aprovado. Antes da lucidez chegar, e com um tempinho ocioso das férias por vir, resolvi que iria tomar o que era meu por direito (?) e reaver a aprovação na disciplina.

Seria muito “simples”: eu só precisava descobrir a senha do meu professor, e assim logar no sistema acadêmico e alterar minha nota. Eu tentei alguns métodos de chute de senha, e bruteforce também, mas claro, eram infinitas combinações e eu não tinha a menor ideia de palavras-chaves para usar.

Execução do programinha, primeiro, gerando algumas combinações possíveis para o CPF de um professor.

Execução do programinha, primeiro, gerando algumas combinações possíveis para o CPF do professor.

A opção então, foi usar seu CPF para conseguir enviar um e-mail e um link de redefinição de senha. Eu não tinha o CPF, apenas sabia seu nome e sobrenome. O Cadastro de Pessoa Física é um número que identifica cada cidadão brasileiro. Esse número tem geralmente 9 dígitos, seguidos de 2 dígitos verificadores, do tipo:

onde e são os dígitos verificadores.

Se esses números fossem aleatórios seriam cerca de possibilidades de combinações. Mas há várias regras que compõem esses 11 algarismos; como a impossibilidade de serem todos iguais (oba, agora são possibilidades), e o fato de que os dígitos verificadores seguem padrões afim de, voilà, verificar se o CPF é válido. Esses dígitos estão por aí no CPF, no titulo de eleitor e no código de boletos de pagamento, e são uma forma prática de qualquer sistema encontrar erros sem nem fazer acesso ao seu banco de informações, evitando busca desnecessárias quando alguém comete um erro de digitação.

Eram muitas combinações, mas então lembrei do Portal da Transparência do Governo Federal: uma ferramenta online importantíssima (mas nada amigável) para checar alguns valores gastos no âmbito federal - incluindo o salário dos servidores públicos da nação.

O nome do meu professor constava lá, seguido de seis dígitos de seu CPF e o salário vergonhoso que nossos mestres de todas as esferas recebem. 6 dígitos de 11 totais, onde os dois últimos são dependentes dos 9 primeiros. Agora ficamos com pouco mais de combinações; pouquíssimas para algum programinha calcular. Me dei conta então de que é possível descobrir o CPF de qualquer servidor público federal, já colado de seu nome completo também.

Um algoritmo simples pode gerar todas as combinações, surfar por esses dados e nos retornar o CPF inteiro de tal pessoa. Fica “melhor” ainda quando a URL de busca por CPF do portal é formada pelo próprio termo da busca. Então se quisermos saber se um CPF é de um servidor federal, a URL http://transparencia.gov.br/servidores/Servidor-ListaServidores.asp?bogus=1&Pagina=1&TextoPesquisa= abcdefghiXY nos responderá. Infelizmente um baita pontapé para que golpistas possam agir fazendo mal usos dessas informações.

Como funciona

Primeiro dígito verificador

O primeiro dígito verificador, , é o resultado da subtração de com o resto da divisão do somatório do produto de cada dígito com sua posição decrescente. Ou seja:

onde

e

pois:

Digíto:                 a  b c d e f g h i X Y
Posição (decrescente):  10 9 8 7 6 5 4 3 2 - -

Segundo dígito

Para calcularmos o segundo dígito verificador, , faremos um cálculo parecido, usando também o primeiro dígito. O resultado da subtração de com o resto da divisão do somatório do produto de cada dígito com sua posição decrescente. Ou seja:

onde

e

pois:

Digíto:                 a  b  c d e f g h i X Y
Posição (decrescente):  11 10 9 8 7 6 5 4 3 2 -

Faça as contas com o seu CPF, vai funcionar direitinho.

Com os seis dígitos na mão, fornecidos pelo Portal, calculei com algumas linhas em bash as 1000 e alguma coisa possibilidades para o CPF do professor. E com um simples wget, acessava e analisava cada URL de termo de busca, a fim de encontrar na página baixada qualquer string com “nome_do_professor”, caso fosse positivo, retornava qual era o CPF testado. Não vou publicar o código-fonte aqui, mas o script funcionando é assim:

Script funcionando. "SANTOS" não é o sobrenome do meu professor, e sim um sobrenome arbitrário que escolhi junto com seus respectivos 6 dígitos de CPF disponíveis.

Soluções

Fiquei intrigado com o fato do Portal da Transparência fornecer dados assim, com seus asteriscos tentando esconder do olho humano alguns dados, mas simples para uma máquina descobrir. Soluções cabíveis para a resolução dessa falha seriam:

Depois de terminar essa aventura Anonymous e de uma noite de sono bem dormida, desisti de qualquer forma de sabotagem com o professor ou o sistema acadêmico. Tenho a oportunidade de no semestre que vem aprender muito mais; e sempre dar meu melhor, seja em uma prova importante ou em uma tarefa valendo dois décimos. Na computação temos alguns pequenos “poderes” e com eles, você sabe, vêm pequenas-grandes responsabilidades. Vamos fazer valer.