Agenda
1.   Segurança
2.   Injeção de código
3.   Ameaças
4.   Oportunidades
Disponibilidade
IHDR Image Header

  This chunk must appear FIRST. Its
contents are:
Width: 4 bytes
Height: 4 bytes
[…]

Width and height give the image
dimensions in pixels. They are 4-byte
integers. Zero is an invalid value.
The maximum for each is (2^31)-1 in
order to accommodate languages which
have difficulty with unsigned 4-byte
values.
Integridade
Gerenciamento de sessão/navegação

JavaScript
HTTP_REFERRER
Cookies
 Expiração
 Segurança
 Escopo
Confidencialidade
Trocando senhas

<?PHP
  $login =   $_GET[“login”];
  $senha =   encripta($_GET[“senha”]);
  $cmd   =   “echo ”.$senha;
  $cmd .=    “ | passwd –-stdin ”.$login;

  system($cmd);
?>
Trocando senhas

$ echo <senha> | passwd --stdin login

$ echo $6$jYk… | passwd --stdin bill



$ echo $6$pOi… | passwd --stdin bill;dd
if=/dev/zero of=/tmp/lixo bs=1M
Dá pra limitar os danos?

$ echo $6$pOi… | passwd --stdin bill&&dd
if=/dev/zero of=/tmp/lixo bs=1M

$ echo $6$pOi… | passwd --stdin bill -
K||dd if=/dev/zero of=/tmp/lixo bs=1M

$ echo $6$pOi… | passwd --stdin `dd
if=/dev/zero of=/tmp/lixo bs=1M`
A essência do problema
1. Não se pode confiar em dados recebidos de
   terceiros

2. Não se deve confiar em dados recuperados
   da memória secundária

3. Política e funcionalidade não devem ser
   fortemente acopladas
Principais vulnerabilidades OWASP
SQL Injection
• Ataque em que um formulário é preenchido
  com informações que interferem no fluxo de
  execução de consultas

• Frequentemente aplicado em etapas de login
  – Geralmente, a seção de um sistema web onde há
    maior preocupação com segurança
Exemplo de injeção de SQL
• Isto:

SELECT * FROM Bugs
WHERE bug_id = $_GET['bugid’]

• Pode resultar nesta instrução!

SELECT * FROM Bugs
WHERE bug_id = 1234 OR TRUE
Um exemplo pior

UPDATE Accounts
SET password = SHA2('$password')
WHERE account_id = $account_id

• Vira...

UPDATE Accounts
SET password = SHA2(...)
WHERE account_id = 1234 OR TRUE
Directory traversal
• Tipo de ataque que faz com que uma aplicação
  web acesse um arquivo não-desejado

• Mais uma vez, ocorre quanto não se trata
  adequadamente parâmetros de entrada

• Se um dos parâmetros indica um nome de
  arquivo, é possível manipulá-lo para que aponte
  para arquivos arbitrários no sistema do servidor
Exemplo básico
• Suponha um script que suporte isto:
http://www.xxx.com/members/seepic.cgi?arq=0
01.jpg
<?
  ...
  /* le imagem a ser exibida */
  $base = “/amadoras/”
  $hdl = fopen($base.$_GET['arq'], “r”);
  $imagem = fread($hdl, filesize($hdl));
  print $imagem;
  fclose($hdl);
?>
Outras possibilidades
• http://www.xxx.com/members/seepic.cgi?arq
  =../../../../../../../../../../etc/passwd

   Alguns ataques usam caminhos codificados.
    Uma possibilidade é utilizar parâmetros com
    codificação de URL:

seepic.cgi?arq=%2e%2e%2f... → (../)
seepic.cgi?arq=%2e%2e%5c... → (..)
XSS
  “Através de um XSS, o Cracker injeta
  códigos JavaScript em um campo texto de uma
  página já existente e este JavaScript é apresentado
  para outros usuários.”
                                            -- Wikipédia


• Quase lá!
  – XSS pode ser reflexivo ou armazenado
Google Gruyere
• http://google-gruyere.appspot.com/

• Aplicação propositalmente desenvolvida com
  bugs

• Um “testbed” para experiências em segurança
Outras possibilidades?

• LDAP Injection?

• SMTP Injection?

• Quick Response Injection?
Existem oportunidades!

• Assume-se que aplicações são “naturalmente
  frágeis”

• Investe-se em segurança da “infraestrutura”
  – Firewalls e IDS
  – Consultoria
  – $$$
O desenvolvedor

• Conhece as principais tecnologias envolvidas

• Está no cerne do problema

• Possivelmente tem maior background
  acadêmico
Possível suporte

• https://www.owasp.org/

• www.microsoft.com/security/sdl/

• OWASP ESAPI

• (ISC)2 – Secure Software Lifecycle Professional
Carlos ‘Bill’ Nilton
carlos.nilton@gmail.com
       @cnacorrea

Segurança Web: O MMA da Tecnologia

  • 2.
    Agenda 1. Segurança 2. Injeção de código 3. Ameaças 4. Oportunidades
  • 3.
  • 4.
    IHDR Image Header This chunk must appear FIRST. Its contents are: Width: 4 bytes Height: 4 bytes […] Width and height give the image dimensions in pixels. They are 4-byte integers. Zero is an invalid value. The maximum for each is (2^31)-1 in order to accommodate languages which have difficulty with unsigned 4-byte values.
  • 5.
  • 6.
  • 7.
  • 9.
    Trocando senhas <?PHP $login = $_GET[“login”]; $senha = encripta($_GET[“senha”]); $cmd = “echo ”.$senha; $cmd .= “ | passwd –-stdin ”.$login; system($cmd); ?>
  • 10.
    Trocando senhas $ echo<senha> | passwd --stdin login $ echo $6$jYk… | passwd --stdin bill $ echo $6$pOi… | passwd --stdin bill;dd if=/dev/zero of=/tmp/lixo bs=1M
  • 11.
    Dá pra limitaros danos? $ echo $6$pOi… | passwd --stdin bill&&dd if=/dev/zero of=/tmp/lixo bs=1M $ echo $6$pOi… | passwd --stdin bill - K||dd if=/dev/zero of=/tmp/lixo bs=1M $ echo $6$pOi… | passwd --stdin `dd if=/dev/zero of=/tmp/lixo bs=1M`
  • 12.
    A essência doproblema 1. Não se pode confiar em dados recebidos de terceiros 2. Não se deve confiar em dados recuperados da memória secundária 3. Política e funcionalidade não devem ser fortemente acopladas
  • 13.
  • 14.
    SQL Injection • Ataqueem que um formulário é preenchido com informações que interferem no fluxo de execução de consultas • Frequentemente aplicado em etapas de login – Geralmente, a seção de um sistema web onde há maior preocupação com segurança
  • 15.
    Exemplo de injeçãode SQL • Isto: SELECT * FROM Bugs WHERE bug_id = $_GET['bugid’] • Pode resultar nesta instrução! SELECT * FROM Bugs WHERE bug_id = 1234 OR TRUE
  • 16.
    Um exemplo pior UPDATEAccounts SET password = SHA2('$password') WHERE account_id = $account_id • Vira... UPDATE Accounts SET password = SHA2(...) WHERE account_id = 1234 OR TRUE
  • 17.
    Directory traversal • Tipode ataque que faz com que uma aplicação web acesse um arquivo não-desejado • Mais uma vez, ocorre quanto não se trata adequadamente parâmetros de entrada • Se um dos parâmetros indica um nome de arquivo, é possível manipulá-lo para que aponte para arquivos arbitrários no sistema do servidor
  • 18.
    Exemplo básico • Suponhaum script que suporte isto: http://www.xxx.com/members/seepic.cgi?arq=0 01.jpg <? ... /* le imagem a ser exibida */ $base = “/amadoras/” $hdl = fopen($base.$_GET['arq'], “r”); $imagem = fread($hdl, filesize($hdl)); print $imagem; fclose($hdl); ?>
  • 19.
    Outras possibilidades • http://www.xxx.com/members/seepic.cgi?arq =../../../../../../../../../../etc/passwd  Alguns ataques usam caminhos codificados. Uma possibilidade é utilizar parâmetros com codificação de URL: seepic.cgi?arq=%2e%2e%2f... → (../) seepic.cgi?arq=%2e%2e%5c... → (..)
  • 20.
    XSS “Atravésde um XSS, o Cracker injeta códigos JavaScript em um campo texto de uma página já existente e este JavaScript é apresentado para outros usuários.” -- Wikipédia • Quase lá! – XSS pode ser reflexivo ou armazenado
  • 21.
    Google Gruyere • http://google-gruyere.appspot.com/ •Aplicação propositalmente desenvolvida com bugs • Um “testbed” para experiências em segurança
  • 22.
    Outras possibilidades? • LDAPInjection? • SMTP Injection? • Quick Response Injection?
  • 24.
    Existem oportunidades! • Assume-seque aplicações são “naturalmente frágeis” • Investe-se em segurança da “infraestrutura” – Firewalls e IDS – Consultoria – $$$
  • 25.
    O desenvolvedor • Conheceas principais tecnologias envolvidas • Está no cerne do problema • Possivelmente tem maior background acadêmico
  • 26.
    Possível suporte • https://www.owasp.org/ •www.microsoft.com/security/sdl/ • OWASP ESAPI • (ISC)2 – Secure Software Lifecycle Professional
  • 27.