quinta-feira, 28 de junho de 2012

Conviso na Hacking in Paris

Por Magno Logan:

Primeiro Dia

Primeiro, o evento ocorreu dentro da Disneyland Paris, o que foi muito legal, apesar de não ter tido tempo para conhecer melhor o local, pois fui direto para a conferência.

O primeiro palestrante foi Mikko, da F-Secure. Ele é um grande pesquisador de malware assim como excelente palestrante. Ele já palestrou na DEFCON e na TEDGlobal 2011. Suas palestras não são tão técnicas, sendo assim todos os presentes conseguem entender e absorver as idéias que ele deseja passar. Houve uma frase que ele disse que chamou muito a minha atenção, foi mais ou menos assim: "A física nuclear perdeu sua inocência em 1945. A ciência da computação perdeu a sua em 2009". Para quem não entendeu, em 1945 foi ano em que os EUA bombardeou Hiroshima e Nagasaki com suas bombas atômicas e em 2009 foi quando começaram a surgir as primeiras variações do vírus Stuxnet, que na verdade só começou a se espalhar em 2010.

A segunda palestra foi do Klaus Majewski, da Stonesoft, sobre Advanced Evasion Techniques, onde ele mostrou algumas técnicas de bypass em firewalls, IDS e IPS.Depois disso, foi a vez de Chris Hadnagy, criador do site http://social-engineer.org/, falar sobre engenharia social, assunto que ele demonstrou dominar muito bem. Eu realmente gosto muito desse tópico e achei ele um ótimo palestrante sobre o tema. É bem interessante ouvir falar sobre Engenharia Social, porque é muito difícil de se proteger dela. Mesmo as mentes mais afiadas podem cair em truques simples e muitas vezes nem notamos, fazemos isso no nosso dia a dia, é algo inerente ao ser humano, por isso é necessário estar sempre atento e desconfiar de atitudes suspeitas.

Em seguida, houve almoço, e depois um debate com Chris Hadnagy e Jayson Street sobre defesa de redes de computadores com perguntas e respostas da platéia.

A palestra de Krzysztof Kotowicz (http://blog.kotowicz.net/) sobre Segurança em HTML5 foi muito boa. Ele falou sobre alguns ataques já conhecidos como Clickjacking, Filejacking, AppCache Poisoning e Silent File Upload, mas também mostrou alguns ataques baseados em drag and drop e disfarçados de jogos. Bem interessante.

Depois disso, tivemos a palestra do argentino Fernando Gont, sobre Segurança no IPv6. Na verdade ele falou muito sobre as características do IPv6 e também das suas diferenças com o IPv4, abordando a parte de segurança apenas no final. Mesmo assim uma excelente palestra de alguém que demonstra dominar o assunto.

Houve uma palestra sobre o Stuxnet e o Flame do Jorge Sebastiao onde ele explicou como alguns dispositivos podem ser destruídos quando submetidos a uma frequência específica e mostrou alguns vídeos exemplificando o problema.

Para terminar o primeiro dia, Andrei Costin falou sobre PostScript e mostrou sua interessantes pesquisa sobre a insegurança das impressoras que muitas vezes estão desatualizadas, conectadas na Internet e facilmente acessíveis pela rede.

Segundo Dia

A primeira palestra foi de Winn Schwartau da securityexperts.com e eu acho que o ponto principal da sua palestra foi que não sabemos quanto tempo leva para alguém invadir a nossa empresa e nossos servidores. Medimos o tempo para tudo, mas não para isso. Vocês sabem quanto tempo seria necessário para alguém para hackear seu computador ou o seu site? Você acha que está realmente protegido? Como? Eu acho que é algo que nos faz pensar mais sobre isso e ficar sempre atentos, sempre alertas.

A segunda palestrante foi uma americana, Georgia Weidman. Ela falou sobre segurança em dispositivos móveis, mais especificamente sobre o modelo de permissão do Android e mostrou como muitos aplicativos pedem uma série de permissões que os usuários nem sequer sabem sobre elas, e às vezes nem as utilizam, ou utilizam sem o consentimento do usuário. Como o aplicativo do Facebook, por exemplo, que pede 12 tipos de permissões e não usa nem a metade. E, quando o aplicativo é um malware, ele normalmente pede apenas algumas permissões, talvez 3 ou 4, apenas o que ele precisa para ser executado. Bem, isso é o que ela notou durante sua pesquisa, nada concreto. Concordo com ela quando ela diz que não podemos chamar smartphones de smart, eles ainda precisam de melhorias (especialmente no campo da segurança) para realmente merecerem o título de smarts.

Depois disso, houve Mario Heiderich, falando sobre como roubar dados sem o uso de scripts. Ele é um cara muito inteligente que trabalha com segurança de aplicações web. O que ele fez foi bem interessante e muito inteligente. Ele mostrou como utilizar apenas o CSS para roubar dados de sites, sem XSS ou Javascript.

Após o almoço houve um painel de discussão com a Georgia e o Mario sobre segurança ofensiva. E é realmente verdade o que Georgia disse durante essa discussão: "Se alguém quiser roubar minha carteira ou meu celular, eu preferiria que fosse minha carteira". Bem, eu penso que isso seja o pensamento da maioria das pessoas hoje em dia, pelo menos é o meu, uma vez que minha carteira é bem velha e raramente tem muito dinheiro dentro. =)

Em seguida, houve uma palestra sobre PE com Ange Albertini, que eu achei muito parecido com um projeto open source que temos aqui no Brasil e que foi apresentado pelo Fernando Mercês durante BHack em Belo Horizonte chamado pev. Depois acabei descobrindo que o Fernando já conhecia o Ange e que ele colaborou no desenvolvimento do pev.

Novamente outra palestra sobre Segurança em Sistemas SCADA e sobre Stuxnet, Duqu e Flame, desta vez do Amol Sarwate, da Qualys. Ele fez uma breve introdução dos componentes utilizados pelos sistemas SCADA e as vulnerabilidades dos protocolos utilizados por alguns desses componentes, como também riscos que já conhecemos nosso dia a dia como senhas fracas ou até mesmo sem senha, falta de atualizações, e sem criptografia, etc. Ele também apresentou uma ferramenta que eles desenvolveram chamada ScadaScan para ver se um sistema SCADA tem algumas dessas vulnerabilidades mais comuns.

Em seguida, houve Nicolas Grégoire com “Attacking XML Processing“, que falou sobre a segurança de arquivos XML e seu processamento. Nós usamos XML todos os dias, mas às vezes não percebemos isso. Ele mostrou como realizar um ataque de negação de serviço e como ler as informações do sistema de arquivos remoto. Ele também demonstrou como é fácil realizar a ofuscação de arquivos maliciosos através da utilização de mecanismos de encapsulamento.

Jayson Street, terminou as palestras do segundo e último dia do evento com os slides feitos apenas com memes sobre Securing The Internet: You're Doing It Wrong, muito bom! Ele falou sobre alguns dos erros que a indústria ainda está cometendo, mesmo com toda a tecnologia que temos. Como quando um chefe que diz: "Eu tenho um problema com o meu e-mail, por favor reinicie o servidor de e-mails!". Para finalizar, ele disse que no setor de segurança da informação tem que só está preocupada em fazer seu trabalho e não pensa em também contribuir para a comunidade. Que eventos como este são muito importantes para a comunidade, que realmente contribui para motivar pessoas novas a mostrarem seus trabalhos e poder unir esforços para a melhoria da segurança como um todo. Realmente uma ótima palestra!

Bom, acho que é isso sobre o Hack in Paris, excelente evento, pretendo vir novamente o ano que vem e ficar mais tempo para poder aproveitar melhor. =)

Fiquem ligados que teremos mais reviews quando eu voltar do Just4Meeting em Portugal - http://just4meeting.com/.

segunda-feira, 25 de junho de 2012

Cartilha de Segurança para e-Commerce

A Conviso foi convidada pela Cielo para o desenvolvimento de uma cartilha de boas práticas de segurança para e-Commerce [pdf].

Cartilha de Segurança para e-Commerce

A cartilha apresenta uma série de práticas que irão ajudar os responsáveis por operações de e-Commerce a aumentar seu nível de segurança e diminuir a possibilidade de exploração de falhas de segurança e fraúdes.

Confira o guia e bons negócios.

sexta-feira, 15 de junho de 2012

Ruby on Rails SQL Injection (CVE-2012-2695)

We found a SQL Injection vulnerability in Ruby on Rails that affected all versions and reported it to the Rails security team. On the 12th of June, they released an advisory [1], patches and new versions that fix it. This vulnerability was also independently reported by other researchers.

These new patches actually fixed two variants of the CVE-2012-2661 case. We will cover them later. First let's see the original vulnerability fixed on CVE-2012-2661. This vulnerability occurred during the processing of code like "Post.where(:id => params[:id]).all". In this case, the attacker was able to change the query by manipulating the hash to include any table/column pair.

Example:

---
Request: controller?id=123
Query: SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = '123'

Request: controller?id[table.column]=123
Query: SELECT `posts`.* FROM `posts` WHERE `table`.`column` = '123'
---

After the release of the patches for CVE-2012-2661, we did some investigation and still were able to exploit the same piece of code with two different variants. The first one was simply a small change in the way the hash is passed.

Example:

---
Request: controller?id=123
Query: SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = '123'

Request: controller?id[table][column]=123
Query: SELECT `posts`.* FROM `posts` WHERE `table`.`column` = '123'
---

And the second one exploited a flaw which allowed the attacker to specify the database name to be used in a SHOW TABLES query. Since the name was user-supplied and not quoted, we were able to execute a Blind SQL Injection (tested on MySQL) and an Error-Based SQL Injection in case Rails is misconfigured to exhibit the exception/stacktrace pages. There is also a blog [2] that talks about this case.

Example:

---
Request: controller?id=123
Query: SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = '123

Request: controller?id[mysql%20where%20(select%200)%20or%20sleep(1).xxx][yyy]=123
Queries:

SHOW TABLES
SHOW TABLES IN mysql where (select 0) or sleep(1)
(...)
SELECT `posts`.* FROM `posts` WHERE `mysql where (select 0) or sleep(1)`.`xxx`.`yyy` = '123'
---

These are the variants covered on CVE-2012-2695. There are also some other tricky cases of the use of hashes in queries which are considered expected behavior by the Rails developers and were not fixed with these patches. One of them occurs when a developer sets a column name to be the same as the table name. Then, he uses "Post.where(:posts => params[:id]).all" to search all posts which have the "posts" column with the value of the parameter, but the attacker can control the hash to search by another column name.

Example:

---
Request: controller?id=123
Query: SELECT `posts`.* FROM `posts` WHERE `posts`.`posts` = '123'

Request: controller?id[column]=123
Query: SELECT `posts`.* FROM `posts` WHERE `posts`.`column` = '123'
---


Another tricky case happens when a developer uses a piece of code like "Post.where(params[:foo] => params[:bar]).all" pretending to let the user search over any post column. In this case, the attacker can actually control not only the columns to be queried, but also the table name.

Example:

---
Request: controller?foo=column&bar=123
Query: SELECT `posts`.* FROM `posts` WHERE `posts`.`column` = '123'

Request: controller?foo=table.column&bar=123
Query: SELECT `posts`.* FROM `posts` WHERE `table`.`column` = '123'
---

Hopefully, all these cases will be detailed in the Rails Security Guide in the near future. We recommend everyone to update their Rails to the fixed versions 3.2.6, 3.1.6, 3.0.14 or to apply the patches.

by Gabriel Quadros - Security Research in Conviso Application Security

[1] http://seclists.org/oss-sec/2012/q2/504
[2] http://blog.pentesterlab.com/2012/06/cve-2012-2661-exploitation-write-up.html