Malcom – Analisador de Comunicações Malware

O Malcom é uma ferramenta projetada para analisar a comunicação de rede de um sistema usando representações gráficas de tráfego de rede e fazer referência cruzada a elas com fontes de malware conhecidas. Isso é útil quando se analisa como determinadas espécies de malware tentam se comunicar com o mundo exterior.

O que é o Malcom? 
Malcom pode ajudá-lo:

  • detectar servidores centrais de comando e controle (C & C)
  • entender redes peer-to-peer
  • observe as infraestruturas de fluxo rápido de DNS
  • determinar rapidamente se um artefato de rede é “conhecido como ruim”

O objetivo do Malcom é tornar a análise de malware e a coleta de informações mais rápidas , fornecendo uma versão legível do tráfego de rede originada de um determinado host ou rede. Converta informações de tráfego de rede em inteligência acionável mais rapidamente. 
Verifique o wiki para um início rápido com algumas capturas de tela agradáveis ​​e um tutorial sobre como adicionar seus próprios feeds . 
Se você precisar de alguma ajuda ou quiser contribuir, sinta-se à vontade para entrar na lista de discussão ou tentar pegar alguém no IRC (#malcom no freenode.net, é bem tranquilo, mas sempre tem alguém por perto). Você também pode clicar no twitter @tomchop_
Aqui está um gráfico de exemplo para o host tomchop.me

Visualização do conjunto de dados (filtrada para mostrar apenas IPs) 

Rápido como fazer

  • Instalar
  • Certifique-se mongodbredis-serverestão correndo
  • Eleve seus privilégios à raiz (sim, eu sei, veja o aviso )
  • Inicie o servidor da Web usando a configuração padrão com ./malcom.py -c malcom.conf(ou veja as opções com ./malcom.py --help) ** Para um arquivo de configuração de exemplo, você pode copiar malcom.conf.examplepara malcom.conf** A porta padrão é 8080 ** Como alternativa, execute os feeds a partir de celery. Veja a seção de feedspara detalhes sobre como fazer isso.

Instalação
Malcom é escrito em python. Desde que você tenha as bibliotecas necessárias, você poderá executá-lo em qualquer plataforma. Eu recomendo o uso de ambientes virtuais python (virtualenv) para não atrapalhar suas bibliotecas de sistema. 
O seguinte foi testado no servidor Ubuntu 14.04 LTS:

  • Instalar gitpythonlibeventlibs, mongodbredis, e outras dependências
    $ sudo apt-get install build-essential git python-dev libevent-dev mongodb libxml2-dev libxslt-dev zlib1g-dev redis-server libffi-dev libssl-dev python-virtualenv
  • Clone o repositório do Git:
    $ git clone https://github.com/tomchop/malcom.git malcom
  • Crie o seu virtualenv e ative-o:
    $ cd malcom $ virtualenv env-malcom $ source env-malcom/bin/activate
  • Obtenha e instale scapy:
    $ cd .. $ wget http://www.secdev.org/projects/scapy/files/scapy-latest.tar.gz $ tar xvzf scapy-latest.tar.gz $ cd scapy-2.1.0 $ python setup.py install
  • Ainda do seu virtualenv, instale os pacotes python necessários do requirements.txtarquivo:
    $ cd ../malcom $ pip install -r requirements.txt
  • Para que a geolocalização por IP funcione, você precisa baixar o banco de dados Maxmind e extrair o arquivo para o malcom/Malcom/auxiliary/geoIPdiretório. Você pode obter o banco de dados gratuito do Maxmind (e, portanto, mais ou menos preciso) no seguinte link: http://dev.maxmind.com/geoip/geoip2/geolite2/ :
    $ cd Malcom/auxiliary/geoIP $ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz $ gunzip -d GeoLite2-City.mmdb.gz $ mv GeoLite2-City.mmdb GeoIP2-City.mmdb
  • Inicie o servidor da web a partir do malcomdiretório usando ./malcom.py. Verifique se ./malcom.py --helphá interface de escuta e portas.
    • Para começar, você pode copiar o malcom.conf.examplearquivo para malcom.confe executar./malcom.py -c malcom.conf

Opções de configuração

Banco de dados
Por padrão, o Malcom tentará se conectar a uma instância local do mongodb e criar seu próprio banco de dados, chamadomalcom. Se estiver tudo bem para você, você pode pular as etapas a seguir. Caso contrário, você precisa editar adatabaseseção do seumalcom.confarquivo. 

Definir um outro nome para o seu banco de dados Malcom
Por padrão, o Malcom usará um banco de dados chamadomalcom. Você pode alterar esse comportamento editando omalcom.confarquivo e definindo anamediretiva dadatabaseseção como preferir.

    [database]
    ...
    name = my_malcom_database
    ...

Banco de Dados Remoto
Por padrão, o Malcom tentará se conectar localhost, mas seu banco de dados pode estar em outro servidor. Para mudar isso, basta definir a hostsdiretiva. Você pode usar nomes de host ou endereços IPv4 / v6 (lembre-se de incluir seus endereços IPv6 entre [], por exemplo [::1]). 
Se você quiser usar um banco de dados independente no host my.mongo.server, basta definir:

    [database]
    ...
    hosts = my.mongo.server
    ...

Você também pode especificar o tipo de porta em que está escutando, especificando-o após o nome / endereço do servidor, separado por um :

    [database]
    ...
    hosts = localhost:27008
    ...

E se você estiver usando um ReplicaSetreagrupamento my.mongo1.servermy.mongo2.serverpronto:

    [database]
    ...
    hosts = my.mongo1.server,my.mongo2.server
    ...

Usar autenticação
Você pode ter configurado suas instâncias mongod para impor conexões autenticadas. Nesse caso, você precisa definir o nome de usuário que o driver precisará usar para se conectar à sua instância do mongod. Para fazer isso, basta adicionar uma usernamediretiva à databaseseção no malcom.confarquivo. Você também pode ter que definir a senha com a passworddiretiva. Se o usuário não tiver uma senha, apenas ignore (ou seja, comente) a passworddiretiva.

    [database]
    ...
    username = my_user
    password = change_me
    ...

Se o usuário não estiver vinculado ao malcombanco de dados, mas a outro (por exemplo, o adminbanco de dados de um usuário administrador), você deverá definir a authentication_databasediretiva com o nome desse banco de dados.

    [database]
    ...
    authentication_database = some_other_database
    ...

Caso de um conjunto de réplicas
Ao usar um conjunto de réplicas, talvez seja necessário garantir que você esteja conectado ao conjunto correto. Para isso, basta adicionar a replsetdiretiva para forçar o driver mongo a verificar o nome do replicaset

    [database]
    ...
    replset = my_mongo_replica
    ...

Por padrão, o Malcom tentará se conectar ao nó primário do conjunto de réplicas. Você pode precisar / querer mudar isso. Para alterar esse comportamento, basta definir a read_preferencediretiva. Veja a documentação do mongo para mais informações.

    [database]
    ...
    read_preference = NEAREST
    ...

As preferências de leitura suportadas são:

  • PRIMÁRIO
  • PRIMARY_PREFERRED
  • SECUNDÁRIO
  • SECONDARY_PREFERRED
  • MAIS PRÓXIMO

Instância do Docker
A maneira mais rápida de iniciar é extrair a imagem do Docker do repo do Docker público . Para compilar o Docker mais antigo e estável , use em tomchop/malcomvez de tomchop/malcom-automatic.

    $ sudo docker pull tomchop/malcom-automatic
    $ sudo docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic

Conectar- http://<docker_host>:8080/se a você deve começar. 

Nota rápida sobre interceptação TLS
Malcom agora suporta interceptação TLS. Para que isso funcione, você precisa gerar algumas chaves em Malcom / networking / tlsproxy / keys. Veja o arquivo KEYS.md para mais informações sobre como fazer isso. 
Certifique-se de que você também tem IPtables (você já deve) e permissões para fazer algum encaminhamento de porta com ele (você geralmente precisa ser root para isso). Você pode fazer isso usando o forward_port.shscript conveniente . Por exemplo, para interceptar todas as comunicações TLS para a porta 443, use forward_port.sh 443 9999. Você terá que informar ao malcom para executar um proxy de interceptação na porta 9999
Espere que esse processo seja automatizado em versões futuras. 

Meio Ambiente
O Malcom foi projetado e testado em uma VM LTS Ubuntu Server 14.04. 
Se você está acostumado a fazer análises de malware, provavelmente já tem toneladas de máquinas virtuais em execução em um sistema operacional host. Basta instalar o Malcom em uma nova VM e rotear as conexões da sua outra VM através do Malcom. Use enable_routing.shpara ativar o roteamento / NAT na VM Malcom em execução. Você precisará adicionar uma placa de rede extra ao sistema operacional convidado. 
Enquanto estiver recebendo dados de rede da camada 3, o Malcom pode ser implantado em qualquer lugar. Embora não seja recomendado usá-lo em redes de alta disponibilidade (não foi projetado para ser rápido, consulte o aviso de isenção de responsabilidade ), é possível executá-lo no final da porta de espelhamento do seu switch ou no seu gateway. 

Feeds
Para iniciar uma instância do Malcom que SOMENTE busca informações dos feeds, execute o Malcom com a --feedsopção ou ajuste o arquivo de configuração. 
Seu banco de dados deve ser preenchido automaticamente. Se você conseguir entrar no código, adicionar feeds é bastante simples (supondo que você esteja gerando Evilobjetos). Você pode encontrar um feed de exemplo /feeds/zeustracker. Um tutorial mais detalhado está disponível aqui . 
Você também pode usar celerypara executar feeds. Certifique-se de aipo está instalado, executando a $ pip install celerypartir do seu virtualenv. Você pode então usar celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12para iniciar o processo de alimentação com 12 trabalhadores simultâneos. Especificações 

técnicas O
Malcom foi escrito principalmente a partir do zero, em Python. Utiliza os seguintes frameworks para funcionar:

  • flask – um framework web python leve
  • mongodb – um banco de dados NoSQL. Ele faz interface com python com pymongo
  • redis – Um armazenamento avançado de valor-chave na memória
  • d3js – uma biblioteca JavaScript que produz impressionantes gráficos direcionados à força ( https://github.com/mbostock/d3/wiki/Gallery )
  • bootstrap – uma estrutura CSS que acabará por destruir o webdesign, mas torna extremamente fácil rapidamente “webizar” as aplicações que funcionam apenas através de uma linha de comandos.
Download

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*