Gamertag

segunda-feira, 12 de novembro de 2012

De onde vêm as vulnerabilidades?

Qualquer pessoa que já programou ao menos uma vez, sabe que existe uma quantidade infinita de escolhas que se deve fazer ao escrever códigos. Essas escolhas vão desde qual linguagem de programação utilizar, algo que lhe permita a maior flexibilidade aritmética dos ponteiros, permitindo otimizações manuais de desempenho, ou escolherá uma linguagem fortemente tipada (type-safe), que evita buffer overflows, mas perde um pouco de sua capacidade? Para cada ação, haverá escolhas ilimitadas de algoritmos, parâmetros e estruturas de dados a serem utilizados. Em cada bloco de código, haverá escolhas sobre nomes e tipos de variáveis, como comentar e até organização de espaço em branco no código. Cada programador faz escolhas baseado em sua forma pessoal de programar, como programadores são diferentes entre si, as escolhas normalmente também são diferentes. Em grandes projetos existe a necessidade de serem utilizados muitos programadores, eles devem ser capazes de trabalhar em equipe e entender/modificar os códigos uns dos outros. É bastante difícil gerenciar o próprio código, e mais ainda quando é produzido por outras pessoas. Em sistemas modernos existem códigos com milhões de linhas, criadas por inúmeras pessoas, gerenciar as vulnerabilidades desse código é algo extremamente difícil.
"Não seria necessário empregar tanto tempo, dinheiro e trabalho em segurança de rede se não tivéssemos uma segurança de software tão ruim." - Schneier
Pensem na última vulnerabilidade de segurança sobre a qual você leu. Um killer packet que permite ao invasor travar um servidor, um buffer oveverflow que permita assumir o controle de um sistema, ou mesmo uma vulnerabilidade de criptografia que permita ao invasor ler algo que não poderia. Tudo isso é uma questão de software.
Normalmente sempre que falamos em segurança não focamos na raiz do problema, a falha de software.
Um software pode desempenhar "qualquer função", o que envolve funções mal-intencionadas, funções possivelmente perigosas e funções simplesmente erradas.
Com a conexão dos computadores em rede o número de ações de compartilhamento aumentou exponencialmente, a tecnologia de software que possibilita tudo isso é muito nova e amplamente instável. Porém o ritmo da economia atual, faz com que haja uma grande pressão do mercado sobre as empresas de software para que forneçam tecnologias novas e atraentes. O "tempo de entrada no mercado" é um motivador crítico e o "pra ontem" é uma exigência comum. Quanto mais a tecnologia demorar a entrar no mercado, maior o risco de fracasso comercial. Como segurança consome muito tempo e dinheiro, o software tende a ser criado às pressas e a ser testado inedaquadamente. Esse descaso em relação ao desenvolvimento de software levou a termos hoje uma rede global com bilhões de bugs que podem ser explorados.

Nenhum comentário:

Postar um comentário