Falhas em sites vêm da cultura do desenvolvimento de aplicações


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.