Buscando o “lado obscuro” das aplicações cliente/servidor

ElevenPaths    11 enero, 2019
“lado obscuro das aplicações clienteservidor imagen



Hoje em dia quando avaliamos a segurança das empresas, encontramos dentro do pilar de vetores de ataque, tecnologias atuais como aplicações web, dispositivos de rede, apps móveis, IoT, VoIP, dentre outros. Nesse artigo, porém, não vamos tratar destas tecnologias, focaremos em uma utilizada há muito tempo e que segue operando em diversas empresas. 

Estamos falando das aplicações conhecidas como cliente/servidor, que também podem levar os nomes em inglês “fat client”, “heavy client”, “rich cliente” ou “thick client”. Todas seguem, em geral, a arquitetura cliente/servidor com aplicações desenvolvida in-house ou por terceiros e implementadas pelas empresas nas estações de trabalho dos usuários. Por exemplo, uma pessoa da área de contabilidade utiliza um cliente instalado em seu computador para realizar processos contábeis que estão em frequente comunicação com o servidor central desse aplicativo. 

Hoje em dia, no decorrer dos processos de pentesting, os auditores encontram aplicações cliente executáveis instaladas no host do usuário que utilizam .Net, Java, C, C++, applets Java, swf de Flash e cada um desses aplicativos pode ser um potencial vetor de ataque. Podemos mencionar alguns destes vetores utilizados para encontrar vulnerabilidades que possam ser exploradas por um terceiro para ataques na rede:

  • Análise de tráfego 
  • Decompilação de código
  • Backend (webservices, APIs, etc.)
  • Sequestro de DLLs 
  • Arquivos de configuração 
Estructura de Cliente/Servidor (Bypass Aplicativo Cliente) imagen
Estructura de Cliente/Servidor (Bypass Aplicativo Cliente)

Claro que há diversas ferramentas que podem ser utilizadas para proteger os binários de aplicações, todas elas contidas nas práticas de desenvolvimento de código seguro. Para o exercício deste post, porém, ilustraremos cenários em que tais recursos não tenham sido aplicados. 
Decompilação:

Usando ferramentas de engenhara reversa é possível decompilar os arquivos binários (executáveis), no caso abaixo uma aplicação .Net, para se obter o código legível e dados “escondidos” como credenciais de conexão aos servidores de bando de dados. 

Decompilação de código na memória (aplicação ClickOnce .Net) 

 imagen
Decompilação de código na memória (aplicação ClickOnce .Net)

Com esses dados em mãos um atacante poderia conectar-se de maneira arbitrária ao servidor SQL e obter dados da empresa, para escalar privilégios, por exemplo.

Conexión a la base de datos exitosa con credenciales obtenidas del Aplicativo Cliente imagen
Conexão exitosa a base de dados com credenciais obtidas a partir do aplicativo cliente

Outro tipo de ataque comum é a decompilação de um executável .jar que poderia ser modificado e recompilado para ser executado no host cliente. 

Debilidades em Backends (Webservices/APIs):
Em várias ocasiões, as aplicações cliente/servidor se conectam a bancos de dados ou aplicações web (webservices/API) o que cria um potencial risco para ataques para além da exploração do binário, usando táticas que exploram as vulnerabilidades já conhecidas das aplicações web.
Análisis y descubrimiento de comunicación con Backend (Webservices) imagen
Análise e descobrimento da comunicação com backend (webservices)

Ataques generados al Webservices (Inyección SQL explotada) imagen
Ataques gerados ao webservices, neste caso uma injeção SQL
Sequestro de DLLs:
Usando essa tática, um atacante com privilégios mais baixos poderia usar técnicas de “sequestro de DLL” para que, através do aplicativo cliente, pudesse carregar exploits durante o tempo de execução ou gravar artifícios maliciosos no diretório de execução da aplicação. O aplicativo cliente/servidor instalado no host do usuário poderia ser executado com o artifício malicioso para escalar privilégios até o nível administrador. 
Detectando potenciales DLL Hijacking en Aplicativo Windows imagen
Detecção de sequestro de DLL em aplicação Windows
Estes são somente alguns cenários de ataque que poderiam ser utilizados em um teste de intrusão ou por um atacante real. Podemos observar que os vetores são, aparentemente, velhos conhecidos, contudo em várias análises detectamos que estas falhas ainda persistem.
Podemos realizar provas com maior detalhe da carga arbitrária de arquivos, lógica do negócio, gestão de seções, manipulação de registros, reversing de objetos, análise de memória e muito mais. Sem dúvida alguma, os vetores de ataque são atualizados, evoluem e se diversificam, mas os riscos de segurança estão sempre presentes nas aplicações dentro da rua rede. Conhecendo essas vulnerabilidades, você tem certeza de que suas aplicações cliente são seguras?
Carlos Avila
Chief Security Ambassador

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *