maio 19, 2014

[Segurança] Open Source é realmente seguro?

O bug do Heartbleed foi um tapa na cara da comunidade Open Source.

Muito se fala que os softwares de código aberto são mais seguro do que os softwares proprietários pois permitem que a comunidade audite o código e identifique mais rapidamente bugs e backdoors. Mas, no caso do Heartbleed, descobrimos que o OpenSSL tinha um bug grave por cerca de 2 anos, justamente uma solucão extremamente popular para servidores web e utilizado por milhares de empresas e grandes sites. Sobrou até para o OpenVPN...

Desde as revelações do Edward Snowden sobre o imenso aparato de ciber espionagem do governo americano, muito se fala que o uso de softwares Open Source é uma forma de evitar programas com backdoors colocados por governos com objetivo de facilitar a espionagem. O principal argumento em favor das ferramentas Open Source é que, como o código fonte está totalmente disponível, a comunidade pode analisá-lo e identificar qualquer backdoor ou vulnerabilidade plantada intencionalmente.

Mas este mito da "comunidade que verifica e garante" mostrou-se ineficaz: o bug do Heartbleed afetou um software Open Source muito usado e estava presente há cerca de 2 anos (o bug surgiu na versão 1.0.1, de Março de 2012).

Se os softwares Open Source são mais seguros, como é possível que um software extremamente popular e muito usado ficasse vulnerável por tanto tempo?

Conversando com alguns colegas da área e juntando minhas opiniões pessoais, eu vejo vários motivos que, em conjunto, podem levar a este tipo de situação:
  • Criptografia é algo complicado: Simples assim. Algoritmos criptográficos são complexos e exigem um grande conhecimento teórico e muito específico de matemática (incluindo teoria dos números, álgebra, corpos finitos, aritimética modular, e várias outras coisas que eu poderia colocar aqui para encher linguiça). Além de conhecimentos no protocolo específico. Ou seja, nem todo mundo consegue entender, desenvolver ou auditar algoritmos criptográficos;
  • Nem todo programador é um bom programador: escrever código exige conhecimento técnico, conhecimento lógico, criatividade, experiência e talento específico. Se vários programadores se debruçarem sobre um mesmo problema, provavelmente cada um criará um programa totalmente diferente para resolver o mesmo problema. Assim como qualquer projeto de software, um projeto de software aberto inclui programadors excelentes e programadores medíocres. E a qualidade do software pode variar;
  • Poucos programadores conhecem princípios de desenvolvimento seguro: Nós que trabalhamos na área de segurança da informação achamos que todo programador deveria ter conhecimento sobre como desenvolver um código de forma a evitar bugs de segurança. Existem livros, sites e muita informação sobre boas práticas de desenvolvimento. Uma ótima referência sobre este assunto é o projeto OWASP. Mas, mesmo assim, poucos desenvolvedores conhecem estas práticas. E muito bug de segurança poderia ser evitado, mas não é. Isso inclui checagem de parâmetros, validação do tamanho dos dados e dos campos, etc;
  • Nem todo programador documenta muito bem o que fez no código: isso é um problema que atrapalha qualquer pessoa que tente entender um algoritmo feito por outra pessoa; 
  • Nem todo mundo audita o código: Nem todo mundo gosta ou sabe auditar um código, ainda mais se for de um software complexo (em termos de quantidade de linhas de código ou de complexidade do assunto em si). Aí vale a lei do menor esforço: se um problema está resolvido, muita gente prefere focar em trabalhar em outras áreas do projeto do que ficar revisando o que foi feito por outro programador. Desenvolver um código seguro, confiável e estável exige testes e auditorias constantes (e diversos tipos diferentes de testes);
  • Há programadores que escrevem código complicado de propósito: Segundo um profissional que conheço, há desenvolvedores que escrevem código de forma complicada justamente para "ficarem donos" daquele código. Assim, eles garantem que o projeto vá depender deles, já que são os únicos que entendem o que aquele pedaço de código faz. 
A nossa falta de capacidade de auditar softwares de código aberto também não quer dizer que eles são mais ou menos seguros do que softwares proprietários. Pelo menos, no caso do Open Source, o código está disponível para qualquer pessoa analisar. No caso de uma ferramenta proprietária, somente a empresa que a desenvolveu sabe exatamente o que se passa nas entranhas do software. e, aí sim, um bug ou backdoor pode ficar muito tempo sem ser descoberto.

No ano passado o Rodrigo Rubira Branco (BSDaemon) escreveu um artigo excelente sobre este assunto no site da 4Linux, entitulado "Segurança de Software: código aberto versus fechado faz diferença quando tratamos de vulnerabilidades em programas?". O artigo sobre o Heartbleed na Wikipedia também possui uma seção que discute as prováveis causas e consequências do bug. Ambos valem muito a leitura !!!

Nenhum comentário:

Creative Commons License
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of my employee.