Desenvolvimento seguro

57
1 Desenvolvimento Seguro

Transcript of Desenvolvimento seguro

Page 1: Desenvolvimento seguro

1

Desenvolvimento Seguro

Page 2: Desenvolvimento seguro

2

Conceitos importantes

O Protocolo HTTP (RFC 2616, 2617, 2660)

● TCP/IP (RFC 793/791)

● Header X Payload

● Métodos: GET, POST, HEAD, PUT, DELETE, CONNECT, TRACE,

OPTIONS

● Stateles X Stateful

● Keep-alive X Connection: Close

Page 3: Desenvolvimento seguro

3

Conceitos importantes

O Protocolo HTTP: Códigos de status

● 1xx - Códigos informativos.

● 2xx - Operações realizadas com sucesso.

● 3xx - Redirecionamento.

● 4xx - Requisições errôneas por parte do cliente.

● 5xx - Respostas errôneas por parte do servidor, diante de requisições

aparentemente válidas.

Page 4: Desenvolvimento seguro

4

Conceitos importantes

O Protocolo HTTP: Requisição

Page 5: Desenvolvimento seguro

6

Conceitos importantes

O Protocolo HTTP

● IETF – RFCs...

● IANA – Status code

● SOAP(RFC 4227) x RESTful

● Client side X Server side

Page 6: Desenvolvimento seguro

7

Conceitos importantes

Criptografia

● Simétrica

● Assimétrica

● Funções de hash

● SSL/TLS(RFC 6101/5246) -> HSTS(RFC 6797)!

● x.509 (RFC 5280)

Page 7: Desenvolvimento seguro

8

Conceitos importantes

Criptografia: Handshake SSL

Page 8: Desenvolvimento seguro

9

Conceitos importantes

Criptografia

● JCA/JCE/JSSE/Bouncy Castle

● OpenSSL

● GnuPG

Page 9: Desenvolvimento seguro

10

Conceitos importantes

Autenticação e autorização

● ACLs

● Whitelists

● Blacklists

Page 10: Desenvolvimento seguro

11

Conceitos importantes

Modelos de acesso

● RBAC

● DAC

● MAC

Page 11: Desenvolvimento seguro

12

Conceitos importantes

RBAC

Page 12: Desenvolvimento seguro

13

Conceitos importantes

Autenticações

● SGBD

● LDAP

● Kerberos

Page 13: Desenvolvimento seguro

14

Conceitos importantes

Outras formas de autenticação e autorização

● OTP

● Duplo fator

● Biométrica

● OpenID

● Oauth

● SAML

● WS-Security

Page 14: Desenvolvimento seguro

15

Conceitos importantes

Criando e aplicando patches

● Diff

● diff bug.java sem_bug.java > patch_bug.java

● Patch

● patch -p0 bug.java < patch_bug.java

Page 15: Desenvolvimento seguro

16

● Blackhats X Whitehats

● Legislação (Lei 12737/2012)

● Comunidade e mercado

Segurança Ofensiva

Page 16: Desenvolvimento seguro

17

XSS - Cross-Site Scripting

● Client side

● Server side

● Causa

● Consequência

Page 17: Desenvolvimento seguro

18

XSS - Cross-Site Scripting

● Refletido

● Residente

● DOM Based

● XST - Cross-Site Tracing

● XSHM - Cross-Site History Manipulation

Page 18: Desenvolvimento seguro

19

CSRF - Cross-Site Request Forgery

● Client side

● Server side

● Causa

● Consequência

Page 19: Desenvolvimento seguro

20

CSRF - Cross-Site Request Forgery

● Comum

● JSON/JSONP Hijacking

● ClickJacking

● StrokeJacking

● SOP - Same Origin Policy (XMLHttpRequest/CORS)

Page 20: Desenvolvimento seguro

21

Insecure Cookie Handling

● Client side

● Server side

● Causa

● Consequência

Page 21: Desenvolvimento seguro

22

SQLi – Sql Injection

● Server side

● Causa

● Consequência

Page 22: Desenvolvimento seguro

23

SQLi – Sql Injection

● Comum

● Union Inband

● Batched

● Blind

● Error Based

Page 23: Desenvolvimento seguro

24

LDAP Injection

● Server side

● Causa

● Consequência

Page 24: Desenvolvimento seguro

25

• XPATH Injection

• XDOS

Segurança Ofensiva

Page 25: Desenvolvimento seguro

26

* INJECTION

Page 26: Desenvolvimento seguro

27

Segurança Ofensiva

● Falhas de configuração

Page 27: Desenvolvimento seguro

28

• RFI – Remote File Inclusion

• LFI - Local File Inclusion

Segurança Ofensiva

Page 28: Desenvolvimento seguro

29

• RCE – Remote Code Execution

• RCE – Remote Command Execution

Segurança Ofensiva

Page 29: Desenvolvimento seguro

30

• Unrestricted File Upload

Segurança Ofensiva

Page 30: Desenvolvimento seguro

31

• Web Crawlers

Segurança Ofensiva

Page 31: Desenvolvimento seguro

32

• Local File Disclosure/Download

Segurança Ofensiva

Page 32: Desenvolvimento seguro

33

• Session Fixation

• Session Hijacking

Segurança Ofensiva

Page 33: Desenvolvimento seguro

34

Segurança Ofensiva

• Corrupção de memória

● Integer/Stack/Heap overflow

● Format Strings

● Race Condition

● Memory Leaks

Page 34: Desenvolvimento seguro

35

• HTML 5

• Brute Force

• MITM - Man In The Middle

• Shared Hosts

Segurança Ofensiva

Page 35: Desenvolvimento seguro

36

Livro Covert Java(Java Secreto)

● Descompilando classes

● Ofuscação e desenfuscação

● Reflexão

● JVM Internals

● Hooks

● Código nativo

● Muito mais...

Page 36: Desenvolvimento seguro

37

Segurança em Camadas

● MVC

● Segregação de função

● Privilegio mínimo sempre

● Execução mínima sempre

● Tenha em mente as perguntas corretas

● Sempre desconfie das respostas!

"No one can guarantee 100% security. But we can work toward 100% risk acceptance."

Bruce Schneier

Page 37: Desenvolvimento seguro

38

• Como debugar

• Filtragem de dados

• Tokens

• Captchas

• Hardening

• Aplicações de segurança

Segurança Defensiva

Page 38: Desenvolvimento seguro

39

Debugging

● O Hacker

● O desafio

● Abordagem linear X Insights exponenciais

Page 39: Desenvolvimento seguro

40

Debugging

● Firebug

● Logs, profiling jmx, print/exit

● Tcpdump/wireshark/valgrind

● Gdb/strace/ltrace

● /var/log/*

Page 40: Desenvolvimento seguro

41

Filtragem de dados

Sanitização de dados

● Por tipo

● Por tamanho

● Por range

● Realização de quotes escapes

Page 41: Desenvolvimento seguro

42

Filtragem de dados

Sanitização de dados...

● REGEX – Expressões regulares

● XSD – XML Schema

● Regras de negocio podem ajudar

Page 42: Desenvolvimento seguro

43

Filtragem de dados

● API Filter

● Trabalhando com exceptions

● extends Exception

● try/catch

● throw

Page 43: Desenvolvimento seguro

44

Filtragem de dados

● Você deve se preocupar com

● Entrada de dados

● Saída de dados

Page 44: Desenvolvimento seguro

45

Filtragem de dados

Trabalhando com diretórios

● Proteja-se de path traversal, RFI e LFI

● Utilize métodos para manuseio de diretórios/arquivos

● Utilize constantes que definem os diretórios absolutos da sua

aplicação

● Utilize um método que retorne o separador de diretórios do SO(/

ou \)

● Um simples switch/case pode ajudar muito

Page 45: Desenvolvimento seguro

46

Filtragem de dados

Executando comandos

● Procure evitar, mas se for necessário então:

● Sanitize os dados de entrada, neste caso, regex pode ajudar muito.

● Utilize metodos para em uma string:

– Escapar qualquer tentativa de injeção de comando: “;” “&&”...

– Escapar qualquer tentativa de injeção de argumentos

Page 46: Desenvolvimento seguro

47

Cuidado especial com SGBDs

● Desconfie de métodos de escape baseados em encoding padrão e que

não estão nativos no banco de dados

● Sanitize os dados

● Utilize sempre prepared statements

Filtragem de dados

Page 47: Desenvolvimento seguro

48

Tokens

● Identificação de usuários e/ou recursos

● Formulários

● Downloads de arquivos

Page 48: Desenvolvimento seguro

49

Captchas

● O objetivo

● Imagens

● Sons

Page 49: Desenvolvimento seguro

50

Hardening

● Evitar problemas de configuração e fortificar as mesmas

● Configurações do servidor de aplicação

● Configurações SGBD

● Configurações do sistema operacional

● Configurações da infraestrutura envolvida(firewalls...)

Page 50: Desenvolvimento seguro

51

Aplicações de segurança

● Firewalls

● NIDS

● HIDS

● WAF

● SIEM

● VPN

● DEBUGS TOOLS

Page 51: Desenvolvimento seguro

52

Manter-se atualizado

● Checagem periódica de integridade

● Politicas e metodologias

● Manter-se atualizado

Page 52: Desenvolvimento seguro

53

Checagem periódica de integridade

● Arquivos

● Repositórios com o GIT podem te ajudar

● Binários

● Integração continua com o Jenkins também ajuda

● Módulos do kernel

● Tripware/ossec/aide

● Chkrootkit/rkhunter

Page 53: Desenvolvimento seguro

54

Politicas e metodologias

Segurança da informação em geral

● PCI-DSS

● ISO/IEC 2700*

● SOX

● Bacen 3380

● NIST SP 800-115

● ISSAF

Page 54: Desenvolvimento seguro

55

Politicas e metodologias

Backups

● Estrategia

● Diário, Semanal, Mensal, Semestral, Anual...

● Mecanismo

● Full, diferencial, incremental

● Ferramentas FOSS

● Bacula, amanda, rsync, tar/gzip/bzip/ftp, shellscript

Page 55: Desenvolvimento seguro

56

Politicas e metodologias

Senhas

● Os meios de autenticação

● Criptografia durante a autenticação e autorização

– Certificação digital

● Escolha dos algorítimos criptográficos utilizados

● Politicas de acesso

● Qualidade das senhas

● OpenLDAP/PPOLICY

Page 56: Desenvolvimento seguro

57

Modelos para desenvolvimento de software seguro

SDL Microsoft

OpenSAMM

Page 57: Desenvolvimento seguro

58

Manter-se atualizado

● SOC / CSIRT

● Pentests

● Softwares

● Honeypots

● Comunidades

● H2HC, OWASP, DEFCON/BLACKHAT, PHRACK

● Checklists