Conforme dito no último domingo, hoje temos a segunda parte da série sobre a vulnerabilidade das urnas eletrônicas, assinada pelo analista de sistemas e ainda torcedor do Império Serrano Bruno Nascimento.
Parte II – Sistemas operacionais, Código aberto e fechado

Vimos no outro post um pouco sobre o funcionamento dos microprocessadores e da BIOS. Uma das atividades da BIOS é, terminadas suas verificações passar o controle da máquina para a execução de um programa. Normalmente, este programa tem a função de controlar a execução dos outros programas, controlar o sistema de entrada e saída. Este programa chama-se Sistema Operacional e, sem ele, o computador fica impossibilitado de executar outros programas ou seria muito difícil fazê-lo.  Difícil porque uma das funções do sistema operacional  é permitir que tarefas difíceis possam ser executadas de forma simples. Nem todo computador precisa de sistema operacional, pois possui informações e tratamento tão simples que dispensa este intermediário. Em compensação, os programas teriam que lidar com todas as operações que o sistema operacional verifica quanto com sua própria execução.
Na figura acima, exibimos algumas das funções que o sistema operacional faz, desde controlar o hardware, até controlar a execução dos aplicativos, distribuindo quanto tempo cada um pode executar, quando o sistema operacional é preparado para multiprocessamento (vários programas executando simultaneamente na mesma máquina). Se podemos ver que o sistema operacional controla a máquina, alterações e bugs (erros de programa) no sistema operacional podem fazer com que a máquina efetue coisas diversas da esperada. A maioria dos bugs de segurança divulgados do sistema operacional Windows, que usamos na maioria dos computadores pessoais, se referem exatamente a situações em que o sistema operacional acaba cedendo o controle indevidamente para outros programas. A urna eletrônica é um computador de arquitetura semelhante ao IBM-PC, como divulgado pelo próprio TSE. Estaria a urna sujeita a vírus e cavalos de tróia?
Muito difícil. Para tanto estes vírus e cavalos de tróia já teriam que estar presentes na cópia original controlada pelo TSE, ou seja, já enviadas a partir da fabricante do Sistema Operacional. Na versão antiga da urna eletrônica, o sistema Operacional era o VirtuOS da MicroBase, que na época era um sistema de código fechado. Hoje utiliza-se o sistema operacional Linux, de código aberto. Mas o que o código fechado ou aberto tem a ver com a segurança do processo da urna eletrônica?
O computador entende instruções que chamamos de linguagem de máquina. Para gerar estas instruções diretamente, existe uma linguagem denominada Assembly. O Assembly varia de máquina a máquina, de acordo com o conjunto de instruções oferecido pelo hardware. Mas se os programadores tivessem que conhecer o conjunto específico de instruções de cada máquina, os programadores teriam de ser extremamente específicos com relação à máquina. Haveria programadores de Pentium, programadores de Core Duo, de Athlon e outros mais, de acordo com o microprocessador da máquina. Ao invés disso, existem linguagens que chamamos de médio ou alto nível, dependendo da proximidade da linguagem com a linguagem da máquina, denominada de baixo nível. Assim, os programadores se especializam nestas linguagens e não nas máquinas em que têm de executar, permitindo maior flexibilidade no conhecimento de programação.
Para transformar estas linguagens de alto nível em linguagem de máquina, existem 2 formas: a compilação e a interpretação. A compilação é a transformação prévia para a linguagem de máquina do código gerado na linguagem de alto nível para que este seja executado também. A interpretação é a transformação no momento da execução da linguagem de alto nível ou de uma linguagem intermediária, gerada a partir do código gerado na linguagem de alto nível, no momento em que há a execução do programa. O código que gera o programa é denominado de código fonte ou fonte. Sistemas operacionais são programas também e são gerados desta forma. Para que rodem rapidamente na máquina, os programas têm que usar o processo de compilação. Existem linguagens interpretadas rápidas, mas no processo atual, elas ainda assim geram código intermediário para acelerar o processo. Só muito antigamente (há mais de 50 anos atrás) ou que necessitam muito se aproveitar de características da máquina são gerados em linguagem de máquina diretamente. Programas que têm seus fontes divulgados em conjunto com o programa a ser executado são chamados de código aberto. Programas que enviam apenas o código a ser executado ou o intermediário a ser interpretado são chamados de código fechado.
Sistemas de código aberto têm possibilidade de auditoria neste caso mais ampla, que sistemas de código fechado, sem entrar em questões de custo de manutenção ou suporte que não cabem aqui, exatamente por terem a possibilidade de análise do código fonte que originou o programa executável. Assim, fica mais difícil perpetrar uma fraude sem ser descoberta em um sistema qualquer. Deste modo, a auditoria do código fonte se torna de suma importância para a segurança da urna eletrônica e é mais fácil de ser efetuada em sistemas de código aberto, correto? Correto. Como dito, vírus e cavalos de tróia poderiam então ser detectados no código original já vindo de fábrica. Alterações que o programa efetue seriam detectadas e estaria configurada a fraude. Para que esta suceda, teria de ser inserida no TSE e aprovada por todos os especialistas dos partidos que auditassem esse código fonte. Mas estamos falando da auditoria do código fonte. Mas vimos que o código fonte não é necessariamente o que executa. Como garantir que o executável a ser código fonte seja o programa executado nas urnas eletrônicas? Entraremos então com mais detalhe no processo da urna eletrônica e no desenvolvimento de sistemas para verificar como é feita a transformação do código fonte em código executável.