As emocionantes aventuras de um sysadmin linux na procura pelo uptime perfeito!

Desenvolvimento seguro e software livre – Dica 0: Arquitetura e requisitos seguros.

Posted: dezembro 17th, 2008 | Author: coredump | Filed under: Linux e Open Source, segurança | Tags: ,

CadeadoComo eu disse semana passada, vou continuar sugerindo algumas dicas/melhores práticas para desenvolvimento seguro em software livre.

Arquitetura e requisitos seguros.

Tá, eu sei que falar isso parece esquisito. Quase ninguém em projetos FLOSS faz processos textbook de desenvolvimento formal, quanto mais pensar em requisitos e tal…

Mas não é bem assim. Quando eu falo de arquitetura e requisitos de segurança eu estou falando de trabalhar com a idéia de segurança desde o princípio, seja o princípio de um novo projeto ou versão ou mesmo de uma nova funcionalidade.

Quando algo novo vai ser desenhado, esta coisa tem de ser pensada levando em conta várias idéias colocadas pelos membros do projeto, mas também tem de se levar em conta a segurança final do produto. Estes são os requisitos de segurança.

Considere que o projeto é fazer uma aplicação web. Desde o início tem de se pensar em SSL para a autenticação, em como as senhas vão ser guardadas no banco de dados (criptografadas ou texto?), como vai ser feito o controle de acesso de usuários (por grupo, por usuário?), e os dados que vão ser guardados ali, são dados sensíveis que precisam de um tratamento a mais na hora de ser gravados em disco ou no banco de dados?

Ou considere que a aplicação vai ser um novo script ou um programa para se rodar em desktops/servidores. Ele vai precisar rodar como super-usuário? Se sim, ele precisa rodar SEMPRE como super-usuário ou apenas algumas partes podem ser escritas assim? O programa/script precisa usar arquivos temporários, qual a maneira mais segura de se fazer

Para os que gostam dos processos mais formais (ou trabalham com os processos em seu dia a dia), além dos casos de uso e requisitos funcionais você precisa trabalhar com os casos de abuso e requisitos de segurança. Enquanto os casos de uso mostram como os usuários vão usar os sistemas, os casos de abuso tratam de formas pelas quais atacantes poderiam explorar ou tentar explorar as falhas de segurança do sistema, sejam elas quais forem.

Isso tudo ainda está na fase de arquitetura do programa, quanto mais for pensado e pesquisado antes de se partir para a codificação, mais fácil e rápido vai ser programar seguramente. Baseado no que se pensa sobre a segurança do projeto (e, claro, nas outras necessidades como requisitos e funcionamento) pode-se tomar decisões sobre linguagens, frameworks, banco de dados e mesmo do tipo de serviço vai ser feito.

Radicalizando, pode até mesmo se chegar a conclusão de que um projeto simplesmente não tem como ser feito de forma segura. Daí é melhor manter ele na pilha de idéias até uma forma melhor aparecer :)

Tanto o SDL da Microsoft quanto os Touchpoints do McGraw tratam de Secure Design e Requirements. O OWASP CLASP trata disso na Best Practice 3: Capture security Requirements.

Depois vou escrever sobre Análise de Risco.

intel

1 Comment »

Desenvolvimento seguro e software livre

Posted: dezembro 11th, 2008 | Author: coredump | Filed under: Linux e Open Source, Programação | Tags: ,

Acabei a poucos dias atrás de escrever o trabalho final da faculdade. Para o trabalho eu conversei com o kov sobre segurança no Gnome e Debian, com o Mark que coordena um grupo de segurança do Apache e com alguns desenvolvedores do WordPress. Eu também tentei incluir o OpenBSD mas aparentemente a paranóia deles é meio grande demais (não consegui informações além das que estão no site).

O que eu conclui foi que os projetos de software livre tem sérios problemas quando se fala de desenvolvimento seguro. Claro que a amostragem que eu tenho não representa nada quantitativamente, mas qualitativamente estamos falando de uma grande distrubuição, um web server que serve metade da WWW, um ambiente gráfico que é padrão em várias distribuições e uma plataforma de blogs que é a mais utilizada. Então eu me sinto confortável em generalizar a situação.

Uma parte do meu trabalho era também sugerir algumas práticas para melhorar essa situação e colocar um mínimo de desenvolvimento seguro nos projetos que existam ou ainda vão existir. Eu sei que isso também é um bocado ambicioso, mas no mundo livre todo mundo pode contribuir com algo que pode vir a ser uma boa idéia :)

Eu vou fazer posts nos próximos dias descrevendo as 4 práticas que eu descrevi como melhores práticas, baseado nos Touchpoints de Gary McGraw, o SDL da Microsoft e o CLASP do OWASP.

Stay tuned.

intel

1 Comment »