
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
mongodb
eredis-server
estã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 copiarmalcom.conf.example
paramalcom.conf
** A porta padrão é 8080 ** Como alternativa, execute os feeds a partir decelery
. 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
git
,python
elibevent
libs,mongodb
,redis
, 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.txt
arquivo:$ 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/geoIP
diretó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
malcom
diretório usando./malcom.py
. Verifique se./malcom.py --help
há interface de escuta e portas.- Para começar, você pode copiar o
malcom.conf.example
arquivo paramalcom.conf
e executar./malcom.py -c malcom.conf
- Para começar, você pode copiar o
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 adatabase
seção do seumalcom.conf
arquivo.
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.conf
arquivo e definindo aname
diretiva dadatabase
seçã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 hosts
diretiva. Você pode usar nomes de host ou endereços IPv4 / v6 (lembre-se de incluir seus endereços IPv6 entre [
e ]
, 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 ReplicaSet
reagrupamento my.mongo1.server
e my.mongo2.server
pronto:
[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 username
diretiva à database
seção no malcom.conf
arquivo. Você também pode ter que definir a senha com a password
diretiva. Se o usuário não tiver uma senha, apenas ignore (ou seja, comente) a password
diretiva.
[database]
...
username = my_user
password = change_me
...
Se o usuário não estiver vinculado ao malcom
banco de dados, mas a outro (por exemplo, o admin
banco de dados de um usuário administrador), você deverá definir a authentication_database
diretiva 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 replset
diretiva 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_preference
diretiva. 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/malcom
vez 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.sh
script 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.sh
para 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 --feeds
opçã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 Evil
objetos). Você pode encontrar um feed de exemplo /feeds/zeustracker
. Um tutorial mais detalhado está disponível aqui .
Você também pode usar celery
para executar feeds. Certifique-se de aipo está instalado, executando a $ pip install celery
partir do seu virtualenv. Você pode então usar celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12
para 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.