Publicado no site Modulo.com.br
Tomado pela curiosidade quanto à origem dos problemas de segurança que vem
sendo encontrados em diversos sites de comércio eletrônico, parei em uma
livraria de um shopping em uma tarde de domingo para folhear alguns livros
sobre programação para Internet. Não fiquei nem um pouco surpreso ao verificar
que a maioria dos exemplos contida nos livros era vulnerável a ataques
extremamente simples de serem executados.
Uma leitura mais atenta revelará a origem do problema: a falta de cultura de
segurança dos programadores. Até pouco tem atrás os sistemas que eram
utilizados pelas empresas eram isolados do mundo exterior. Já com a noção
errada de que o ambiente interior não tem um nível alto de hostilidade, os
programadores não se preocupavam em verificar os dados fornecidos pelos
usuários, acreditando que tudo que era recebido pela aplicação viria em um
formato pré-estabelecido e com conteúdo benigno.
Porém, com a interligação dos sistemas e o advento do comércio eletrônico, os
analistas de sistemas e programadores que antes criavam sistemas de folha de
pagamento e contas a receber passaram a desenvolver também sistemas de compra e
venda pela Internet, tanto para consumidores finais (B2C) quanto para
fornecedores, parceiros e revendedores (B2B). Sendo assim, não há mais como
garantir a procedência de quem tem acesso ao sistema. Pelo menos um pedaço
dele, por menor que seja, estará disponível para toda a Internet.
Até mesmo uma simples janela com campos para digitação de um usuário e senha
pode ser burlada ou usada para acessar dados críticos se o programador não
tomar todos os cuidados para evitar que isso aconteça. O princípio básico, e
nem sempre seguido, é de que toda a informação proveniente do usuário não é
confiável. Um campo onde deve ser digitado um nome de 10 caracteres pode
receber uma instrução de sistema operacional cuidadosamente montada ou
simplesmente um número de caracteres maior do que a aplicação está preparada
para suportar. Os resultados vão desde o comprometimento da exatidão das
informações até completo comprometimento do servidor e conseqüentemente, das
informações.
As ferramentas e técnicas para auxiliar na garantia de um desenvolvimento de
aplicações seguro já existem há muito tempo. A implementação
de segurança na infra-estrutura dos sites, juntamente com a utilização de
firewalls e configuração segura de sistemas operacionais, deve ser integrada
com o uso de aplicações seguras, criadas de maneira a tratar previamente toda e
qualquer informação proveniente do usuário. Esse tratamento deve ser feito no
servidor, sem confiar na execução de rotinas de tratamento no navegador, que
podem ser desativadas facilmente. O tamanho de todas as informações também deve
ser verificado antes de se armazená-las em buffers de tamanho fixo, que ao
“transbordarem” trazem um imenso risco à segurança do sistema. Não se pode
presumir que o usuário vá agir sempre da maneira correta, acessando as partes
do sistema em uma ordem determinada ou inserindo informações íntegras. Na
programação de sistemas seguros, a paranóia é sempre bem vinda e deve ser
utilizada como regra para a checagem dos dados recebidos.
O desenvolvimento levando em conta todas essas situações é muito mais complexo
do que o desenvolvimento comum. É muito fácil um programador se descuidar ao
passar um valor para uma função sem fazer a checagem prévia, ou mesmo esquecer
algum caractere especial que devia ser filtrado na checagem. É preciso implementar uma metodologia de desenvolvimento que reduza ao
mínimo possível as chances de ocorrer um erro, através de processos de
desenvolvimento estruturados e política de testes completa e organizada. Normas
como o Common Criteria,
recentemente promovido a ISSO 15408 ou ferramentas como o ITS4, da Reliable Software Technologies, são alguns dos exemplos do
que já pode ser usado nesse sentido. Um sistema nascido de um desenvolvimento
como esse naturalmente tem um custo maior, embora a garantia de um sistema
robusto, com chances remotas de vazamento de informações, erros no
funcionamento ou paradas de produção traga um retorno quase que imediato ao
investimento, através da redução de custos em suporte e em tratamento de
incidentes de segurança.
Resta aos CIOs enxergar o
desenvolvimento de aplicações com mais um elo na corrente de segurança, que
depende de outros fatores, como a configuração segura de sistemas operacionais,
roteadores e firewalls. É de pouca valia rodar uma aplicação segura em um
ambiente inseguro, assim como utilizar uma infraestrutura
segura e bem configurada com uma aplicação falha em termos de segurança pode
não trazer nenhum benefício em termos de segurança da informação.