sexta-feira, 24 de agosto de 2007
Core Grasp for PHP
Quem desenvolve em PHP sabe das dificuldades de construir uma aplicação segura a partir desse framework. Vale a pena considerar....
Mais informações: CORE GRASP.
terça-feira, 14 de agosto de 2007
Afinal de contas, qual a melhor forma de encontrar vulnerabilidades?
Teste white box
Essa abordagem explora em profundidade o código fonte na tentativa de localizar falhas de segurança. A análise de código fonte pode ser realizada manualmente, impraticável em grande escala, e automatizada pelo uso de ferramentas de análise de código fonte.
Vantagens
- Cobertura - pelo fato do código fonte estar disponível, uma revisão de código permite sua cobertura total. Todos os fluxos de código podem ser auditados na busca de vulnerabilidades. Isto pode levar a falsos positvos, à medida que nem todos os fluxos sejam verificados.
- Complexidade - a análise dos resultados gerados pelas ferramentas é de muita complexidade, pois exigem uma revisão criteriosa de cada registro para verificar se realmente corresponde a uma vulnerabilidade.
- Disponibilidade - o código fonte nem sempre é um recurso disponível.
Essa abordagem implica que seu conhecimento corresponde apenas aquilo que pode ser observável, assim como um usuário final. Assim como para o teste caixa branca, esta abordagem é realizada de maneira manual e automatizada, sendo esta conhecida como Fuzzing.
Vantagens
- Disponibilidade - aplicáveis sempre, inclusive nas situações onde o código fonte esteja disponível.
- Reproducibiliade - pelo fato deste teste não levar em conta pressupostos sobre o alvo, a ação pode ser reproduzida para diversos sistemas.
- Simplicidade - mesmo que abordagens que usem engenharia reversa requeiram habiliades especializadas, o teste black box em seu nível básico pode ser conduzido sem um conhecimento interno denso da aplicação.
- Cobertura - um dos maiores desafios é saber quando parar os testes quão efetivo ele tem sido.
- Inteligência - o teste black box é mais indicado para cenários onde a vulnerabilidade é causada por vetor de ataque individual. Ataques complexos podem, entretanto, exigir múltiplos vetores de ataque e nesses casos é necessário um entendimento profundo da aplicação, possibilitado pelo acesos ao código fonte.
Este teste uso como recurso determinante o acesso ao binário da aplicação, sendo sua avaliação de segurança também conhecida como auditorida de binário. Assim como para as outras abordagens, esta é realizada manualmente ou com o uso de ferramenta. Vale ressaltar que o que pode não ser automatizado é a análise e não o desassembly.
Vantagens
- Disponibilidade - com exceção de aplicações web remotas, o binário está sempre disponível.
- Cobertura - informação obtida com esta análise pode ser utilizada na melhora da técnica black box.
- Complexidade - A engenharia reversa é uma habilidade especializada e consequentemente recursos podem não estar disponíveis para sua realização.
quinta-feira, 9 de agosto de 2007
The Securty Development Lifecycle book...
Reforço, que vale a pena a leitura do livro, cujo conteúdo é bastante denso e sua leitura não é tão árida. O que o torna acessível a qualquer um com conhecimentos básicos da área de computação.
quinta-feira, 5 de julho de 2007
Ferramentas de Análise Código Fonte
Todas as ferramentas comerciais existentes se fundamentam no mesmo princípio, regras e padrões de codificação suspeitos. Isso as tornam muito dependentes da ação humana. Num primeiro momento, para desenhar essas regras a partir de muita pesquisa e depois, para avaliar o resultado de uma análise de código.
As ferramentas de análise de código fundamentam a an Teorema de Rice, que coloca que qualquer questão não trivial endereçada a um programa pode ser reduzido ao Problema de Halting, isso implica que os problemas de análise de código são insolúveis no pior caso e, por consequência, que essas ferramentas são obrigadas a fazer aproximação, cujo resultado é algo não perfeito.
Os principais problemas das ferramentas de análise de código fonte para segurança estão concentradas em:
- Falso negativo - o programa contém bugs não endereçados pela ferramenta. Isso dá a falsa sensasão de que não existe bugs, que na verdade significa que a ferramenta não foi capaz de encotrar mais exemplares.
- Falso positivo - a ferramenta endereça bugs não existentes. Isso se refere a duas possibilidades: um erro propriamente dito, onde a ferramenta localizou um bug que não existe fisicamente; ou há uma classificação da ferramenta incoerente com as variáveis do ambiente. Por exemplo, a ferramenta poderia encontrar um bug de SQL Injection, que na realidade, não interessa para o software investigado pelas suas características de operação.
As análises de código fonte podem ser divididas de acordo com as seguinteas abordagens:
- Análise estática: a análise estática pode compreender as técnicas de busca direta a partir de lista de strings (grep); a análise léxica, onde os tokens do código fonte são comparados com àqueles contidos numa biblioteca de vulnerabilidades e análise semântica, onde se prevê como o programa se comportará em tempo de execução, usando a tecnologia de compiladores (árvore sintática abstrata)
- Análise de fluxo de controle: usada para caminhar através das condições lógicas do código. O processo funciona como a seguir:
- Observe uma função e determine cada condição de desvio. Essas incluem loops, switchs, if's e blocos try/catch.
- Entenda as condições sobre como cada bloco será executado.
- Vá para a próxima função e repita.
- Análise de fluxo de dados: usada para seguir fluxos de dados dos pontos de entrada aos pontos de saída. O processo funciona como descrito a seguir:
- Para cada entrada , determine o quanto você acredita na fonte de entrada. Quando em dúvida você não deve acreditar.
- Siga o fluxo de dados para cada saída possível, registrando ao longo do percurso qualquer tentativa de validação de dados.
- Vá para a próxima entrada e continue.
Vale reforçar, que para conseguir tirar o melhor proveito das ferramentas de análise de código fonte para segurança, seu uso deve estar amparado por um ciclo de desenvolvimento seguro, como o CLASP ou SDL.
Informações adicionais :
Software Security Building Security In
Secure Programming with Static Analysis
Security Engineering Explained - Versão em português.
quarta-feira, 4 de julho de 2007
Software Seguro....Por onde começar?
O tema software seguro tem recebido mais atenção dia-a-dia, impulsionado pela necessidade de atacar de todas as maneiras a segurança em TI, com ações para estabelecer segurança no nível de rede, de estação e de aplicação, para inverter ou suavizar a curva de evolução de incidentes de segurança, como mostrado pelo CERT-CC.
Nosso foco será em ações, práticas, procedimentos, ferramentas, etc. que apóiem a melhoria da segurança no nível de aplicação, ou seja, para que o elo aplicação na cadeia aplicação-rede-estação seja fortalecido.
Uma coisa vale ressaltar, se alguém deseja evoluir no tema de desenvolvimento de software seguro, vai ter que arregaçar as mangas e digerir uma quantidade infinita de informações, que hoje pode ser encontradas em diversas fontes de pesquisa. Isso acontecer por duas razões principais, primeira é a dificuldade em se encontrar programas de treinamento que considerem esse tipo de assunto e segunda, pela dinamicidade associada, a cada dia surgem novas vulnerabilidades e contramedidas.
Para quem desejar se ingressar no problema de desenvolvimento de software seguro, que remete ao uso de um ciclo de desenvolvimento de software que considera segurança desde seu início, segue a relação de alguns links:
- Security Engineering Explained - relatório da Microsoft que considera preocupações elementares no desenvolvimento de software seguro (50pag.).
- Build Security In - portal desenvolvido pelo Software Engineering Institute, com orientação de Gary McGraw, patrocinado pelo Department of Homeland Security. Existem muitos artigos sobre a temática de segurança em software.
- OWASP - Open Web Application Security Project - Portal de segurança em aplicações web. Este é o projeto de segurança em desenvolvimento mais ativo hoje, com grande contribuição da comunidade. Qualquer um pode se envolver e contribuir. Pode encontrar ferramentas com WebScarab e o Processo CLASP