24 de fevereiro de 2009

Source Code Static Analysis - Quadrante Mágico do Gartner

Agora em Fevereiro saiu o quadrante mágico do Gartner classificando os players de source-review. A fortify se destaca no quadro! Vale ressaltar que apenas Fortify e Ounce Labs tem ferramentas que nasceram para revisão de segurança de código, todos os outros players tem soluções que evoluiram, foram adaptadas, para revisão de segurança.





6 de fevereiro de 2009

HTTP Essentials

Como diz meu amigo Sp0oker: "como falar de payload para pessoas que não sabem o que é um Three Way Handshake?" Pensando nisso eu resolvi divulgar esta parte sobre http do material do treinamento de web hacking techniques. O conteúdo é o básico para conhecer como funciona o protocolo HTTP, essencial para análise de segurança em aplicações WEB.

O que é o protocolo HTTP


O HTTP (Hypertext Transfer Protocol) é um protocolo que atua na camada de aplicação de acordo com o modelo OSI e estabelece um conjunto de regras, padrão para troca de mensagens entre recursos na WEB.

O HTTP possui as seguintes versões:


  • HTTP/0.9 (Criado em 1991)

  • HTTP/1.0 (Criado em 1996)

  • HTTP/1.1 (Criado em 1999)


Não é o propósito deste tutorial explicar os detalhes de cada versão, mais detalhes podem ser obtidos na RFC 2145 (Use and Interpretation of HTTP Version Numbers).

Como trabalha o protocolo HTTP

O protocolo HTTP tem uma característica que é de fundamental entendimento para quem analisa segurança em aplicações WEB, é o fato dele ser stateless, isso significa que ele não mantém uma conexão, ele sempre conecta, envia uma mensagem, recebe uma resposta e desconecta, como ilustra a figura 1.

Figura 1

Por este motivo é utilizado recursos extras como cookie e/ou sessões para garantir a persistência dos dados e informações que são disponibilizados em aplicações.

A figura 2 mostra a visão do protocolo HTTP e seus dados frente a camada TCP/IP, na figura 3 podemos identificar como funciona a comunicação em uma rede de dados e na figura 4 um exemplo de um header (cabeçalho) HTTP.

Figura 2


Figura 3 


Figura 4


Quando estamos falando de aplicações WEB geralmente estamos sempre fazendo referência a URI (Uniform Resource Identifiers) como http://wagnerelias.com, técnicamente a URI serve apenas para fazer referência a um determinado domínio, quando precisamos acessar recursos WEB via browser utilizamos a URL(Uniform Resource Locators). Para conseguir identificar e explorar determinados recursos de uma aplicação é essencial que se entenda exatamente o que cada parte de uma URL representa, na figura 5 temos uma descrição de cada parte de uma URL.


Figura 5


Já sabemos o que é um protocolo HTTP, quais as suas principais características, mas é preciso entender quais são seus principais métodos e códigos de status, na figura 6 temos um representação de uma requisição do browser e uma resposta do servidor.

Figura 6

Métodos HTTP

Os métodos, também conhecidos como verbos HTTP, são os seguintes:

  • GET: é o método mais comum e tem como característica enviar seus parâmetros direto na URI

  • POST: é um método que envia os dados no corpo do header e possui características mais seguras para se enviar requisições ao servidor

  • HEAD: semelhante ao GET mas não obtem o recurso, apenas meta dados

  • PUT: envia um recurso para o servidor

  • DELETE: exclui um recurso do servidor

  • TRACE: através da resposta obtida por uma requisição trace é possível saber o que foi alterado na requisição por um servidor intermediário

  • OPTIONS: consulta os métodos HTTP que o servidor aceita

  • CONNECT: usado em soluções de proxy


Os métodos são informados no momento que é feito uma requisição HTTP ao servidor de aplicação.

Código de Status do HTTP

Os códigos de status estão classificados em cinco tipos.

  • 1xx: Informação

  • 2xx: Sucesso

  • 3xx: Redirecionamento

  • 4xx: Erro no cliente

  • 5xx: Erro no server


Uma lista completa de códigos de status pode ser obtida aqui. Sempre que uma requisição usando um método HTTP é feita ao server é recebido uma resposta com um status code.

O HTTP também possui recursos de autenticação nativos que pretendo falar mais sobre eles em um post futuro, os dois modelos são:

  • Autenticação Básica

  • Autenticação Digest


Eu costumo usar muito os recursos do firefox para analisar as requisições e respostas HTTP, os principais addon são estes:

Live HTTP Headers







Além dos addon do firefox eu estou usando uma ferramenta desenvolvida pelo tiger team 514 que faz várias requisições usando métodos diferentes e dando o status code de cada uma.

HTTP Methods  
Este post foi uma introdução sobre o funcionamento e principais características do http. As referências para este tutorial foram os livros: Whiley - HTTP Essentials Protocols for Secure, Scaleable Web Sites; O'Reilly - HTTP Definitive Guide; Sams - HTTP Developer's Handbook.

3 de fevereiro de 2009

View-State and ASP.NET Security

Há muito tempo atrás eu fui questionado por um cliente ao mencionar que o view-state de uma aplicação dele estava expondo informações sensíveis. A justificativa dele é que isso era um comportamento padrão do ASP.NET. Ele tinha razão, o ASP.NET depende muito do view-state e cria um campo HIDDEN onde dados são armazenados na sessão.

Na situação eu recomendei que pelo menos ele utilizasse recursos para criptografar os dados mantidos na View-State.

Um problema do View-State é o mal uso dele, muitos desenvolvedores sem saber dos riscos acabam armazenando muitos dados na sessão usando o recurso. Com isso, além de causar problemas de performance, ele pode expor dados confidenciais, pois os dados podem ser visualizados usando ferramentas que decodifiquem o view-state.

A boa notícia é que segundo um post no InfoQ, o ASP.NET vai depender menos do view-state e se estuda a possibilidade dele vir desabilitado por default. De qualquer maneira, cuidado com o view-state em aplicações desenvolvidas em ASP.NET.