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:
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.
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.
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.
Métodos HTTP
Os métodos, também conhecidos como verbos HTTP, são os seguintes:
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.
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:
Eu costumo usar muito os recursos do firefox para analisar as requisições e respostas HTTP, os principais addon são estes:
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.
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:
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.
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.
Assinar:
Postagens (Atom)