Pentest

Vulnerabilidades em servidores e aplicações web

Aplicações e servidores Web têm muitas vulnerabilidades, mas algumas são exclusivas deste tipo de ambiente. Como sites, servidores e aplicativos são o lado da empresa que o público geralmente encontra, eles representam um alvo óbvio. Ampliando a questão, o é fato de que, ao contrário de alguns anos atrás, muitas empresas existem apenas na internet. Derrubar ou comprometer esses sistemas pode ser um golpe para o atacante e devastador para a empresa-alvo.

Web design com falhas

Uma maneira comum de explorar uma aplicação web ou site está no próprio código. Comentários e tags ocultos que são incorporados em uma página da Web pelo designer podem render informações para um invasor. Embora esses tipos de tags e informações não tenham a intenção de serem exibidos em um navegador Web, eles podem ser visualizados e analisados ??usando o recurso “Visualizar o código-fonte” presente na maioria dos navegadores.

O código fonte de uma página poderia revelar algo como: (mais…)

Entendendo as aplicações Web

Em essência, uma aplicação web é um software que é instalado em um servidor web e é projetado para responder a solicitações, processar informações, armazenar informações e dimensionar as respostas de acordo com a demanda e, em muitos casos, é distribuído em vários sistemas ou servidores.

Ao contrário de alguns anos atrás, as aplicações web vêm em três variações:

  1. Baseado em Navegador – Incluem código que pode ter sido parcialmente processado no servidor, mas é executado no próprio navegador Web. Tal aplicação tem a capacidade de acessar dados armazenados em um servidor, bem como no sistema local ou ambos, dependendo do design;
  2. Baseados no cliente – São essencialmente semelhantes às aplicações baseadas em navegador, mas em vez de serem executados dentro do navegador, são executados como aplicação própria. Aplicações que exigem que sejam instaladas do lado do cliente se encaixam nesta categoria;
  3. Aplicativos móveis – São, de longe, o tipo mais comum encontrado hoje em dia. Para ser incluído nesta categoria o aplicativo normalmente é executado em um sistema operacional móvel, como aqueles executados em smartphones e tablets, principalmente Android do Google ou iOS da Apple;

Então, o que todos esses tipos têm em comum? Cada um deles, tem alguma capacidade de processar informações em um servidor antes de fornecer as informações para o lado do cliente.

O Cliente e o Servidor

Entender os aplicativos da Web significa que você também deve examinar a interação entre cliente e servidor que ocorre neste ambiente. Um aplicativo de servidor é hospedado em um servidor web e é projetado para ser acessado remotamente por meio de um navegador da Web ou aplicativo habilitado para web. Normalmente, esse ambiente permite que vários aplicativos cliente acessem o servidor simultaneamente, para recuperar dados ou para exibir ou modificar dados. O cliente executa processamento mínimo de informações e normalmente é otimizado para apresentar as informações ao usuário. As informações são armazenadas no servidor, com algumas pequenas porções, como metadados residente no cliente.

Metadados, para usar a descrição técnica, são dados que descrevem outros dados, que é como dizer que o vermelho é um tipo de cor, o que não ajuda muito. Entretanto, os metadados podem ser facilmente visualizados se você considerar um documento em um disco rígido. Este documento contém dados como o conteúdo desta postagem, que é fácil de entender. Os metadados nessa situação seriam as propriedades do próprio arquivo, que descrevem o arquivo em termos de tamanho, tipo, data, autor e outras informações.

Os metadados são usados para melhorar o desempenho de aplicativos e ambientes, pois podem acelerar o processo de localização e uso de informações. Por exemplo, um índice é uma forma de metadados que fornece informações básicas sobre algo, permitindo que o conteúdo seja encontrado e informações relevantes a serem examinadas.

Então, por que escolher um aplicativo baseado na Web sobre outros modelos cliente-servidor? Muitos benefícios potenciais surgem deste ambiente de hospedagem em relação a outros modelos. Um dos maiores benefícios é que um aplicativo cliente não precisa ser desenvolvido para cada plataforma como nas configurações tradicionais. Uma vez que muitas aplicações web são concebidas para ser executado dentro de um navegador web, a arquitetura subjacente é em grande parte sem importância. O cliente pode estar executando uma ampla gama de sistemas operacionais e ambientes sem penalidade para a aplicação.

No entanto, alguns aplicativos da Web não são executados em navegadores da Web e são bloqueados em uma plataforma específica, e estes residem em dispositivos móveis. Os clientes de aplicativos Web deste tipo são projetados para um tipo específico e versão de um sistema operacional móvel (como o Android) e só podem ser executados lá. No entanto, o desenvolvedor poderia codififcar diferentes versões do cliente que seria capaz de acessar os mesmos dados das plataformas que residem no servidor.

Os aplicativos da Web dependem, em muitos casos, do uso de tecnologias como Active Server Pages (ASP), ASP.NET e PHP para permitir que eles funcionem. Essas tecnologias são chamadas de tecnologias do lado do servidor (server-side), o que significa que elas processam e manipulam informações no servidor. Outras tecnologias, como HTML dinâmico (DHTML), HTML 5, JavaScript e linguagens relacionadas são processados no cliente, o que os coloca na categoria de tecnologias client-side.

A maioria das aplicações web normalmente encontradas baseiam-se no modelo cliente-servidor e funciona em um sistema onde os dados são inseridos no cliente e armazenados no servidor.

Aplicativos como armazenamento em nuvem ou serviços de e-mail baseados na Web como o Yahoo !, o Gmail e outros usam essa configuração como parte de seu funcionamento normal.

Um olhar para a nuvem

Nos últimos anos, uma nova tecnologia surgiu na cena sob a forma de nuvem. Simplificando, a nuvem é um modelo para criar recursos compartilhados que podem ser dinamicamente alocados e compartilhados sob demanda. O principal benefício aqui é que os usuários do serviço em nuvem não precisam se preocupar com os detalhes reais da configuração, apenas que seus recursos estão lá e disponíveis.

As tecnologias em nuvem são apresentadas como um serviço que pode revolucionar as empresas, porque os itens tradicionalmente hospedados em configurações cliente-servidor agora podem ser hospedados em um ambiente mais flexível. Empresas olham para a nuvem como uma forma eficaz de colher os benefícios de uma tecnologia sem ter que lidar com todo o apoio, formação e outras questões para manter os mesmos serviços localmente. No entanto, ainda há questões para lidar como as de segurança e jurídica, que evoluem à medida que novas questões surgem a partir da transição.

Enquanto o público tende a pensar da nuvem como um lugar para armazenar suas fotos, vídeos, documentos e outros dados, esta é apenas uma pequena parte do que a nuvem pode oferecer. Normalmente, as tecnologias na nuvem são divididas em categorias:

  • Infraestrutura como Serviço (IaaS) é a forma mais simples e básica de serviços em nuvem disponíveis. Essencialmente, este tipo de configuração de nuvem fornece a capacidade de hospedar máquinas virtuais sobre as quais sistemas operacionais e aplicativos podem ser instalados. Esse tipo de modelo também permite a implantação de firewalls baseados em nuvem, balanceadores de carga, VLANs e outros tipos de serviços de rede;
  • A plataforma como um serviço (PaaS) é um modelo mais adequado para desenvolvedores de aplicativos da Web e aqueles em situações semelhantes. Esse ambiente fornece hospedagem e escalabilidade, bem como padrões para desenvolvimento e o cliente desenvolve sua aplicação de acordo com a sua necessidade;
  • O Software como um Serviço (SaaS) é um modelo no qual o cliente transita de aplicativos de software gerenciados localmente para configurações hospedadas em nuvem. Na prática, isso pode ser semelhante ao produto Office 365 da Microsoft ou aplicativos do Google. Este modelo tem se tornado cada vez mais popular porque a aquisição de software, gerenciamento e licenciamento de despesas gerais é reduzido do que era antes da adoção do modelo.

No mundo atual da tecnologia, a nuvem é uma tecnologia difundida usada por milhões de pessoas e empresas em todo o mundo. Empurrar o e-mail, aplicativos de escritório e outros itens do ambiente local para a nuvem permitiu que as empresas realizassem grandes economias em termos de tempo e dinheiro. Os aplicativos da Web agora estão se integrando com provedores de serviços em nuvem para permitir maior flexibilidade e acesso do que era facilmente alcançado antes. Muitos dos aplicativos e ambientes presentes na nuvem incluem aplicativos da Web hospedados localmente para atuar como um front-end para uma solução em nuvem. De fato, com a ascensão de dispositivos móveis, a nuvem adquiriu um novo significado com a inclusão de smartphones, tablets e outros dispositivos que podem facilmente fazer parte do seu ambiente.

Nesta discussão estou fazendo uma declaração geral de que você estará terceirizando sua tecnologia de nuvem, mas isso nem sempre pode ser verdade. Em muitos casos, as empresas tiveram que construir sua própria nuvem para lidar com certas questões, como garantir que a configuração e as pessoas na organização permaneçam seguras. Nessa situação, todo o equipamento é comprado, configurado, gerenciado e mantido no local. Esta configuração é comumente conhecida como uma nuvem privada.

Análise mais próxima de uma aplicação Web

As aplicações Web são projetadas para serem executadas em servidores web e enviar sua saída pela Internet. Você pode visualizar um aplicativo da web como consistindo de não apenas um cliente e servidor, mas também camadas. Essas camadas são as seguintes:

  • Camada de apresentação – Responsável pela exibição e apresentação de informações ao usuário do lado do cliente;
  • Camada Lógica – Usada para transformar, consultar, editar e manipular informações de e para os formulários nos quais ela precisa ser armazenada ou apresentada;
  • Camada de dados – Responsável pela retenção de dados e informações para o aplicativo como um todo.

Todas essas camadas dependem da tecnologia trazida na forma da World Wide Web, HTML e HTTP. HTTP é o principal protocolo usado para comunicação entre clientes e servidores, e opera sobre a porta 80, mas outros protocolos são usados às vezes.

HTTPS (HTTP empregando mecanismos de criptografia) pode ser usado para proteger dados em trânsito. Essa abordagem é comum em aplicativos como webmail e comércio eletrônico.

Os aplicativos Web fazem uso intensivo de uma tecnologia subjacente do servidor web, como os Internet Information Services da Microsoft (IIS), o Servidor Apache e o Servidor da Web do iPlanet da Oracle. Recursos como páginas da web são solicitados através do HTTP sem estado. O cliente fornece um identificador de recurso uniforme (Uniform resource identifier – URI), que informa ao servidor quais informações estão sendo solicitadas e o que retornar.

“Sem estado” refere-se ao fato de que o protocolo não mantem controle das informações de sessão de uma conexão para a próxima. Cada comunicação em HTTP é tratada como uma ligação separada.

Outro componente comum das aplicações web é o recurso conhecido como cookies. Um cookie é um arquivo armazenado em um sistema cliente que é usado como um token por aplicativos para armazenar informações de algum tipo (dependendo do aplicativo). No que diz respeito às aplicações, os cookies são um elemento comum, mas do ponto de vista da segurança, são vistos como uma responsabilidade, uma vez que podem ser facilmente copiados e alterados.

Análise mais próxima nos cookies

Cookies, embora necessários para o funcionamento de um número inimaginável de aplicações web, também são uma responsabilidade enorme. Os cookies são um método de ataque comumente exercido por usuários mal-intencionados que os empregam para direcionar outros usuários e para comprometer a segurança geral de um aplicativo bem desenvolvido.

A importância dos cookies não pode ser ignorada, nem o potencial de dano pode ser subestimado. Aplicativos que dependem da capacidade de manter informações de estado através de protocolos sem estado, como HTTP, seria muito difícil, senão impossível, de criar sem a inclusão de cookies. Em muitos casos, um cookie é principalmente um token de autenticação ou um veículo de armazenamento de dados. Assim, é fácil entender por que um invasor deseja essa informação, pois pode permitir que eles tenham acesso a um aplicativo através de sequestro de sessão ou meios semelhantes. Na verdade, alguns dos ataques que já vimos, como XSS ou sniffing poderia facilmente capturar informações de cookie.

Agora, vamos olhar para o objetivo principal do cookie, quanto a manutenção das informações do estado. O principal protocolo da web, HTTP, nunca foi projetado para e, portanto, é incapaz de manter o controle de informações do estado através de múltiplas solicitações ou visitas a um recurso. Portanto, um aplicativo em execução sobre esse protocolo sem estado precisa manter o controle dessas informações de alguma forma, e é aí que os cookies fazem a diferneça.

Os cookies são uma forma de armazenar informações que o protocolo não consegue armazenar. Para entender esse processo, vamos considerar um ambiente comumente encontrado, como uma loja on-line como a Amazon. Quando alguém visita este site, eles podem fazer login em sua conta e fazer várias coisas, mas principalmente eles podem comprar. Quando um usuário navega no site e clica no botão Adicionar ao carrinho ao lado de um item, o site faz exatamente isso. À medida que o usuário se move de página para página encontrando outras coisas para adicionar, eles repetem o processo. Enquanto isso está acontecendo, nos bastidores um cookie armazena informações sobre o que está acontecendo e o que o usuário adicionou ao carrinho. O aplicativo da Web está usando uma instrução especial em HTTP conhecida como Set-Cookie, que é enviada para o navegador como uma resposta no formato “nome = valor”, que o navegador adiciona ao cookie. O navegador irá transmitir essas informações de volta para o aplicativo para cada solicitação subsequente, informando a aplicação sobre o que o usuário fez, o que, neste caso, é adicionar itens ao carrinho em diferentes quantidades, preços, cores e outros. Como você pode ver, sem o cookie o processo seria diferente.

Os cookies não são um recurso ruim e isso nunca deve ser a implicação em qualquer lugar. Muitas aplicações web e os desenvolvedores devem ser aplaudidos por lidar com cookies de forma segura, mantendo assim informações sensíveis fora das mãos de alguém malicioso.

A afirmação de “um cookie é apenas um arquivo de texto e, portanto, nada de ruim pode vir dele” é falsa. Os cookies podem ser usados com segurança, mas também podem ser um passivo quando não usados corretamente.

Partes do quebra-cabeça da aplicação Web

Em uma aplicação web existem vários componentes, cada um dos quais tem uma função específica. Cada um tem suas próprias vulnerabilidades também.

Processo de Login ou Autenticação – Um componente é apresentado aos usuários para que eles forneçam um nome de usuário e uma senha para o processo de autenticação e posteriormente para o processo de autorização.

Em termos de tecnologia, existem diferentes maneiras de autenticar um usuário, que vão desde:

  • Autenticação anônima que se resume a todos os visitantes do site usando a mesma conta para acessar recursos no site. Nenhuma caixa de diálogo de login ou prompts são fornecidos para aceitar credenciais;
  • Autenticação básica (basic authentication) que envia todas as informações de autenticação em texto simples;
  • Autenticação Digest (Digest authentication) um método que essencialmente passa um hash para autenticar usuários;
  • Autenticação integrada do Windows para aplicativos baseados em Microsoft. Isso usa a tecnologia de autenticação do Windows embutida para executar o processo;
  • Certificados digitais para uso em SSL;
  • Mapeamento de certificados em que os certificados digitais são mapeados para contas de usuário específicas;

Servidor Web – Esta é a base para todo o sistema. É a combinação de hardware e software usada para hospedar o próprio aplicativo web.

Acompanhamento de Sessões (Session Tracking) – Este componente permite que o aplicativo da Web armazene informações sobre um cliente relacionadas à sua visita atual ou futuras visitas nele. Em muitos casos, devido à natureza sem estado do HTTP, os cookies são usados para armazenar informações de estado para aplicações web.

Permissões – Com base no qual eles se autenticam como e se a autenticação é bem-sucedida, as permissões determinam o nível de acesso que o usuário tem aos recursos no servidor.

Conteúdo da Aplicação – Esta é a informação com a qual o usuário irá interagir fazendo solicitações ao servidor.

Páginas de Acesso a Dados – Páginas que são anexadas a uma biblioteca que fornece acesso a dados.

Armazenamento de dados – Este componente é onde as informações valiosas para o aplicativo da Web estão contidas. Por design, isso pode ou não pode ser armazenado no mesmo sistema. Em muitos casos significa um banco de dados de algum tipo, que geralmente assume a forma de MySQL, Microsoft SQL Server ou ofertas da Oracle.

Lógica – Este componente é responsável por interagir com o usuário e fornecer os meios para a informação correta a ser extraída do banco de dados.

Logout – Esta pode ser uma função separada e é usada pelos usuários para desligar sua conexão com o aplicativo da web.

Em muitos casos, além da capacidade de os visitantes fazerem logon conscientemente da sessão, os aplicativos da Web também desconectam automaticamente os usuários após um período de inatividade.

Sugestões de livros:

Sequestro de sessão em redes

Antes de prosseguir com o tema, é importante saber alguns conceitos:

Blind Hijacking descreve um tipo de sequestro de sessão em que o invasor não pode capturar o tráfego de retorno a partir da conexão do host. Isso significa que o invasor está injetando cegamente pacotes maliciosos ou manipuladores sem ver a confirmação do efeito desejado através da captura de pacotes. O invasor deve tentar prever os números de sequência dos pacotes TCP atravessando a conexão. A razão para essa previsão volta ao conceito básico do TCP three-way-handshake.

Spoofing de IP refere-se à tentativa de um invasor de se disfarçar como o usuário legítimo, falsificando o endereço IP da vítima. O conceito de spoofing pode se aplicar a uma variedade de ataques em que um invasor falsifica as informações de identificação de um usuário. Entenda que spoofing é uma abordagem diferente do ataque de sequestro de sessão; Entretanto, elas estão relacionadas, pois ambas abordam usando uma sessão autenticada existente para ter acesso a um sistema de outra forma inacessível. (mais…)

Entendendo o Sequestro de Sessão (Session Hijacking)

O seqüestro de sessão é sinônimo de uma sessão roubada, na qual um invasor intercepta e assume uma sessão legitimamente estabelecida entre um usuário e um host. A relação usuário-host pode se aplicar ao acesso de qualquer recurso autenticado, como um servidor da Web, uma sessão Telnet ou outra conexão baseada em TCP. Os atacantes se colocam entre o usuário e o host, permitindo que eles monitorem o tráfego do usuário e lancem ataques específicos. Uma vez que aconteça um sequestro de sessão bem-sucedido, o invasor pode assumir o papel do usuário legítimo ou simplesmente monitorar o tráfego para injetar ou coletar pacotes específicos a fim de criar o efeito desejado.

Ilustração de um sequestro de sessão

Session hijacking

Em seu sentido mais básico, uma sessão é um período de tempo acordado em que o estado conectado do cliente e do servidor é vetado e autenticado. Isso simplesmente significa que tanto o servidor quanto o cliente sabem (ou pensam que sabem) quem são, e com base nesse conhecimento, eles podem confiar que os dados enviados de qualquer forma acabarão nas mãos da parte apropriada. (mais…)

Roubo de identidade

Uma das ameaças mais proeminentes e em rápida evolução é o roubo de identidade, que se insere na engenharia social. De acordo com a Comissão Federal de Comércio, nos Estados Unidos, o roubo de identidade é um dos crimes que mais cresce rapidamente nos últimos anos; Assim, o público precisa ser extremamente vigilante e proteger suas informações desta forma de ataque.

Uma vez em posse de informações, um ladrão de identidade tem muitas opções disponíveis para eles, dependendo de seus objetivos particulares. Ladrões têm sido conhecidos fazer compras em cartões de crédito, abrir novas contas, obter tratamento médico, ou empréstimos sob o nome da vítima. Alguns sinais de roubo de identidade incluem o seguinte: (mais…)

Entendendo os Sniffers

Sniffers são utilitários que você, pode usar para capturar e escanear tráfego movendo-se através de uma rede. Sniffers são uma categoria ampla que engloba qualquer utilitário que tenha a capacidade de executar uma função de captura de pacotes. Independentemente da construção, os sniffers executam sua função de captura de tráfego, ativando o modo promíscuo na interface de rede conectada, permitindo assim a captura de todo o tráfego, quer este tráfego seja ou não destinados a eles. Uma vez que uma interface entra no modo promíscuo, ela não discrimina entre o tráfego que é destinado ao seu endereço; Ele pega todo o tráfego na linha, permitindo que você capture e investigue cada pacote.

Sniffing pode ser ativo ou passivo. Tipicamente, o sniffing passivo é considerado ser todo o tipo de sniffing onde o tráfego é olhado mas não alterado em nenhuma maneira. Essencialmente, o sniffer passivo significa apenas ouvir. No sniffing ativo, não só o tráfego é monitorado, mas também pode ser alterado de alguma forma, como determinado pelo atacante.

Quando em uma rede comutada, sua captura de tráfego é limitada ao segmento que você está conectado, independentemente do modo de sua placa de interface. Basta lembrar que para que seu sniffer seja eficaz, sua placa de interface deve estar em modo promíscuo. (mais…)

Overt e Covert Channel

Quando você está trabalhando com trojans e outros malwares, você precisa estar ciente de overt (abertos) e covert channel (secretos). Como mencionado em outras postagens, a diferença entre os dois é que um canal aberto é posto em prática por design e representa a maneira legítima ou pretendida para o sistema ou processo ser usado, enquanto que um canal secreto usa um sistema ou processo de uma forma que não foi feito para ser utilizado.

Os maiores usuários de covert channel que discutimos são os trojans. Trojans são projetados para ficar escondidos enquanto eles enviam informações ou recebem instruções de outra fonte. Usar covert channel significa que a informação e comunicação podem ser capazes de escapar de mecanismos de detecção que não foram projetados ou posicionados para estar ciente ou olhar para esse comportamento.

Ferramentas para explorar covert channel incluem o seguinte: (mais…)

O que são Spywares?

O spyware é um tipo de malware projetado para coletar e encaminhar informações sobre as atividades de uma vítima a uma parte interessada. A característica que define é que é uma aplicação que atua nos bastidores para reunir essas informações sem o consentimento ou conhecimento do usuário

A informação recolhida pelo spyware pode ser qualquer coisa que o criador do spyware sente de valor. O spyware tem sido usado para segmentar anúncios, roubar identidades, gerar receita, alterar sistemas e capturar outras informações. Além disso, não é inédito o spyware abrir a porta para ataques posteriores que podem executar tarefas como download de software e assim por diante. (mais…)

O que são Worms?

Quando falamos de vírus, o tema dos vermes não fica muito atrás. Eles são outra grande ameaça. Ao contrário dos vírus, que por definição exigem algum tipo de ação para ocorrer para desencadear o seu prejuízo, worms são totalmente auto-replicante. Worms efetivamente usam o poder das redes e da velocidade para se espalhar de forma muito perigosa e eficaz seus pedaços de malwares.

Um exemplo é o verme SQL Slammer do início dos anos 2000. Na época, o verme Slammer era responsável por desacelerações generalizadas e severas negações de serviços (DoS) na Internet. O worm aproveitou o fato de que os sistemas que tinham SQL Server ou produtos de desktop do SQL Server que eram vulneráveis ??a um estouro de buffer (buffer overflow). Embora a Microsoft tenha lançado um patch seis meses antes da estréia do worm, muitas organizações negligenciaram a instalação do patch. Com essa vulnerabilidade ainda presente em tantos sistemas, as condições para o ataque estavam propícias. Na manhã de 25 de janeiro de 2003, o verme foi ativado – e em 10 minutos, 75.000 máquinas foram infectadas, juntamente com muitos mais nas horas seguintes. (mais…)

O que são vírus?

Um vírus é a forma mais antiga de malware e é de longe o mais conhecido por todos. Mas o que é um vírus? O que separa um vírus de outras formas de malwares? Como um vírus é criado, e como ele ataca sua vítima?

O primeiro código que poderia ser classificado como um vírus chegou por volta de 1970 na forma do projeto Creeper. Este projeto implementou capacidades como a replicação e a capacidade de infectar um sistema. O projeto também gerou outro vírus conhecido como o reaper, que removeu o Creeper de qualquer sistema infectado com o código. (mais…)

Quer ficar atualizado?

Inscreva-se em minha newsletter e seja notificado quando eu publicar novos artigos de graça!