Comparando Segurança entre Sistemas Operacionais

Depois que o ótimo site Linha Defensiva linkou em sua home page a minha análise de segurança de seis meses do Windows Vista (obrigado pelo link!), eu comecei a receber uma certa quantidade de flame mail de fanboys de outros sistemas operacionais. Acho melhor então dizer de uma vez no blog o que eu penso sobre comparações de segurança entre os diversos sistemas operacionais e sobre processo de desenvolvimento seguro.

Primeiro, acho que só faz sentido comparar a segurança oferecida por um ou outro sistema operacional dentro de um contexto de uma organização e de um cenário de uso específico. O sistema operacional usado é só um dos diversos componentes de uma solução, e para avaliar qual o sistema operacional mais adequado em termos de segurança é preciso analisar os riscos existentes naquele cenário, entender o nível de risco tolerável para a organização, e então ver qual sistema apresenta os menores níveis de risco.

Ainda assim podemos ter situações onde sistemas operacionais diferentes apresentam níveis de risco distintos, mas que estão todos dentro do tolerável pela empresa. Neste caso os sistemas todos são "seguros" o suficiente para serem utilizados, e determinar o mais seguro passa a ser irrelevante.

Por isso eu acredito que é um verdadeiro atestado de ignorância alguém dizer de forma genérica que "sistema x é mais seguro que o sistema y". E talvez seja por isso que em geral essa afirmação venha sempre acompanhada de outras bobagens ("sistema x não tem virus", blah blah blah). Nem eu nem a Microsoft fazemos afirmações deste tipo, ainda mais com base no número de vulnerabilidades encontradas em um sistema.

Agora, o número de vulnerabilidades encontradas serve sem dúvida para avaliar a segurança do processo de desenvolvimento de um software. Para relembrar, o objetivo de um processo de desenvolvimento seguro é entregar um software sem vulnerabilidades para o usuário. E sabendo que este é um objetivo na prática inatingível, procurar diminuir a criticidade das vulnerabilidades eventualmente encontradas. Por isso o número de vulnerabilidades encontradas é uma excelente métrica para o seu processo de desenvolvimento seguro, e o número de vulnerabilidades críticas encontradas é uma métrica ainda melhor.

O fato do Windows Vista ter menos vulnerabilidades críticas que o Windows XP é portanto um testemunho do quanto o processo de desenvolvimento seguro da Microsoft melhorou entre o Windows XP e o Windows Vista. Ainda mais se você levar em conta que o código do Vista é bem maior e mais complexo do que o do Windows XP.

O problema de comparar estes números com os de outros sistemas operacionais com os dos demais sistemas citados no relatório é que nestes outros simplesmente não existe um processo de desenvolvimento seguro. Nenhum esforço é feito sistematicamente para entregar um software com menos vulnerabilidades para o usuário. A abordagem usada tem sido a de lançar o software de qualquer maneira, e depois tentar corrigir o mais rápido possível as vulnerabilidades que forem encontradas (e o grande número de vulnerabilidades torna o processo de correção mais lento). Como não existe um processo não existe como aprender com os erros, não existe chance de uma melhoria gradual, e principalmente não faz sentido falar em métricas.

A verdadeira pergunta que deve ser feita a luz deste relatório não é portanto qual é o sistema operacional mais seguro, e sim o que o fornecedor do sistema operacional está fazendo para reduzir o número de vulnerabilidades encontradas. A Microsoft está fazendo isso. Ao invés de tentar desqualificar os números, me diga o que o fornecedor do seu sistema operacional preferido está fazendo.

Agora de volta à programação normal.

UPDATE: Corrigi a referência acima aos outros sistemas operacionais. Estava me referindo somente aos sistemas incluídos na comparação feita pelo Jeff Jones, e não a todos os sistemas em geral. Sim, eu conheço o projeto OpenBSD, que foi o pioneiro de muitas das técnicas que a Microsoft usa hoje. Porque outros sistemas não seguem o exemplo do OpenBSD é o que eu não entendo.