Imagem Docker que fornece um conjunto de ferramentas OSINT simplificado para importação e análise de conteúdo de comunicações de arquivos MBOX de e-mail e outros dados CSV (como mensagens de texto) usando Elasticsearch e Kibana. Isso fornece um único comando que inicia uma pilha completa de software analítico OSINT, bem como importa todas as suas comunicações para ela, prontas para análise com Kibana e ElasticSearch.
Este projeto gerencia um Dockerfile para produzir uma imagem que, quando executada, inicia o ElasticSearch e o Kibana e, opcionalmente, importa dados de comunicação usando as seguintes ferramentas incluídas no contêiner:
IMPORTANTE os links abaixo são FORKS dos projetos originais devido a questões pendentes com os projetos originais que não foram corrigidas no momento do desenvolvimento deste projeto
A partir daí... bem, você pode analisar e visualizar praticamente qualquer coisa sobre suas comunicações. Aproveitar.
Antes de executar o exemplo abaixo, você precisa do Docker instalado.
Nota do Windows : Ao git clone
este projeto no Windows antes da construção, certifique-se de adicionar o sinalizador git clone --config core.autocrlf=input
. Exemplo git clone https://github.com/bitsofinfo/comms-analyzer-toolbox.git --config core.autocrlf=input
. leia mais aqui
Depois que o Docker estiver instalado, abra um shell de linha de comando e digite o seguinte para construir a imagem do Docker para a caixa de ferramentas:
docker build -t comms-analyzer-toolbox .
Caixa de ferramentas Docker para notas do Windows
A VM da máquina docker default
criada provavelmente não terá capacidade para executá-la imediatamente. Você precisará fazer o seguinte para aumentar a CPU e a memória da máquina de caixa virtual local
Abra um "Terminal Docker Quickstart"
Remova a máquina padrão: docker-machine rm default
Recrie-o: docker-machine create -d virtualbox --virtualbox-cpu-count=[N cpus] --virtualbox-memory=[XXXX megabytes] --virtualbox-disk-size=[XXXXXX] default
Erro de solução de problemas: "máximo de áreas de memória virtual vm.max_map_count [65530] é muito baixo, aumente para pelo menos [262144]"
Se você vir esse erro ao iniciar a caixa de ferramentas (o erro é relatado pelo Elasticsearch), você precisará fazer o seguinte no host docker em que o contêiner está sendo iniciado.
sysctl -w vm.max_map_count=262144
Se você estiver usando o Docker Toolbox, primeiro será necessário fazer o shell na VM boot2docker com docker ssh default
para executar este comando. Ou faça o seguinte para torná-lo permanente: docker/machine#3859
Para cada mensagem de e-mail em seu arquivo MBOX, cada mensagem se torna um documento separado no ElasticSearch, onde todos os cabeçalhos de e-mail são indexados como campos individuais e todo o conteúdo do corpo é indexado e removido de html/css/js.
Por exemplo, cada e-mail importado para o índice tem os seguintes campos disponíveis para pesquisa e análise no Kibana (além de muitos, muitos mais)
Assim que o Docker estiver disponível em seu sistema, antes de executar comms-analyzer-toolbox
você precisará de algum e-mail para analisar no formato MBOX. Como exemplo, veja abaixo como exportar e-mail do Gmail.
Faça login na sua conta do Gmail com um navegador da web em um computador
Acesse: https://takeout.google.com/settings/takeout
Na tela que diz "Baixar seus dados" , na seção "Selecione os dados a serem incluídos", clique no botão "Selecionar nenhum" . Isso deixará todos os "Produtos" listados abaixo em cinza
Agora role para baixo e encontre a seção acinzentada chamada "Correio" e clique na caixa de seleção X no lado direito. Agora ficará verde indicando que esses dados estarão preparados para download.
Role para baixo e clique no botão azul "Avançar"
Deixe as configurações "Personalizar formato de arquivo" como estão e clique no botão "Criar arquivo"
Isso agora o levará para a página "Estamos preparando seu arquivo". tela. Isso pode levar algumas horas dependendo do tamanho de todos os e-mails que você possui.
Você receberá um e-mail do Google quando o arquivo estiver pronto para download. Ao obtê-lo, baixe o arquivo zip para o disco rígido do seu computador local, ele terá um nome como takeout-[YYYMMMDDD..].zip
Depois de salvar em seu disco rígido, você desejará descompactar o arquivo, uma vez descompactado, todos os seus e-mails exportados do Gmail ficarão em um arquivo de exportação mbox na pasta Takeout/Mail/
e o nome do arquivo com todos os seus e-mails estará em: All mail Including Spam and Trash.mbox
Você deve renomear este arquivo para algo mais simples como my-email.mbox
Anote a localização do seu arquivo .mbox , pois você o usará abaixo ao executar a caixa de ferramentas.
Antes de executar o exemplo abaixo, você precisa do Docker instalado.
Abra um terminal ou prompt de comando em seu computador e execute o seguinte. Antes de fazer isso, você precisa substituir PATH/TO/YOUR/email.mbox
e PATH/TO/ELASTICSEARCH_DATA_DIR
abaixo pelos caminhos apropriados em seu sistema local, conforme apropriado.
Nota: se estiver usando o Docker Toolbox para Windows : todos os volumes montados abaixo devem estar em algum lugar em seu diretório inicial em c:Users[your username]...
devido a problemas de permissão.
docker run --rm -ti
--ulimit nofile=65536:65536
-v PATH/TO/YOUR/my-email.mbox:/toolbox/email.mbox
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
python /toolbox/elasticsearch-gmail/src/index_emails.py
--infile=/toolbox/email.mbox
--init=[True | False]
--index-bodies=True
--index-bodies-ignore-content-types=application,image
--index-bodies-html-parser=html5lib
--index-name=comm_data
Definir --init=True
excluirá e recriará o índice comm_data
. A configuração --init=False
reterá todos os dados já existentes
O console registrará a saída do que está acontecendo. Quando o sistema for inicializado, você pode abrir um navegador da web em sua área de trabalho e acessar http://localhost:5601 para começar a usar o Kibana para analisar seus dados. Nota: se estiver executando o docker toolbox; 'localhost' pode não funcionar, execute um docker-machine env default
para determinar o endereço IP dos hosts do docker e vá para http://[machine-ip]:5601"
Na primeira tela que diz Configure an index pattern
, no campo rotulado Index name or pattern
você digita comm_data
você verá o campo date_ts
selecionado automaticamente e clique no botão Create
. A partir daí o Kibana está pronto para uso!
O lançamento faz várias coisas na seguinte ordem
Quando o importador mbox estiver em execução, você verá as seguintes entradas nos logs enquanto o sistema faz seu trabalho importando seus e-mails dos arquivos mbox
...
[I 170825 18:46:53 index_emails:96] Upload: OK - upload took: 467ms, total messages uploaded: 1000
[I 170825 18:48:23 index_emails:96] Upload: OK - upload took: 287ms, total messages uploaded: 2000
...
Ao executar a imagem comms-analyzer-toolbox
, um dos argumentos é invocar o script elasticsearch-gmail que usa os argumentos a seguir. Você pode ajustar o comando docker run
acima para passar os seguintes sinalizadores como desejar:
Usage: /toolbox/elasticsearch-gmail/src/index_emails.py [OPTIONS]
Options:
--help show this help information
/toolbox/elasticsearch-gmail/src/index_emails.py options:
--batch-size Elasticsearch bulk index batch size (default
500)
--es-url URL of your Elasticsearch node (default
http://localhost:9200)
--index-bodies Will index all body content, stripped of
HTML/CSS/JS etc. Adds fields: 'body',
'body_size' and 'body_filenames' for any
multi-part attachments (default False)
--index-bodies-html-parser The BeautifulSoup parser to use for
HTML/CSS/JS stripping. Valid values
'html.parser', 'lxml', 'html5lib' (default
html.parser)
--index-bodies-ignore-content-types
If --index-bodies enabled, optional list of
body 'Content-Type' header keywords to match
to ignore and skip decoding/indexing. For
all ignored parts, the content type will be
added to the indexed field
'body_ignored_content_types' (default
application,image)
--index-name Name of the index to store your messages
(default gmail)
--infile The mbox input file
--init Force deleting and re-initializing the
Elasticsearch index (default False)
--num-of-shards Number of shards for ES index (default 2)
--skip Number of messages to skip from the mbox
file (default 0)
Ao importar dados de e-mail MBOX, na saída do log você poderá ver avisos/erros como os seguintes.
Eles são esperados e ok, são simplesmente avisos sobre alguns caracteres especiais que não podem ser decodificados etc.
...
/usr/lib/python2.7/site-packages/bs4/__init__.py:282: UserWarning: "https://someurl.com/whatever" looks like a URL. Beautiful Soup is not an HTTP client. You should probably use an HTTP client like requests to get the document behind the URL, and feed that document to Beautiful Soup.
' that document to Beautiful Soup.' % decoded_markup
[W 170825 18:41:56 dammit:381] Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
[W 170825 18:41:56 dammit:381] Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
...
A ferramenta de importação CSV csv2es
incorporada na caixa de ferramentas pode importar QUALQUER arquivo CSV, não apenas este formato de exemplo abaixo.
Para cada linha de dados em um arquivo CSV, cada linha se torna um documento separado no ElasticSearch, onde todas as colunas CSV são indexadas como campos individuais
Por exemplo, cada linha no arquivo de dados CSV abaixo (mensagens de texto de um iphone) importada para o índice possui os seguintes campos disponíveis para pesquisa e análise no Kibana
"Name","Address","date_ts","Message","Attachment","iMessage"
"Me","+1 555-555-5555","7/17/2016 9:21:39 AM","How are you doing?","","True"
"Joe Smith","+1 555-444-4444","7/17/2016 9:38:56 AM","Pretty good you?","","True"
"Me","+1 555-555-5555","7/17/2016 9:39:02 AM","Great!","","True"
....
A exportação de mensagens de texto CSV acima é apenas um exemplo. A ferramenta csv2es
que acompanha a caixa de ferramentas pode importar QUALQUER conjunto de dados desejado, não apenas o formato de exemplo acima.
Assim que o Docker estiver disponível em seu sistema, antes de executar comms-analyzer-toolbox
você precisará de alguns dados para analisar no formato CSV. Como exemplo, veja abaixo como exportar mensagens de texto de um iphone para um arquivo CSV.
Exporte mensagens do iPhone usando o iExplorer para Mac ou Windows
Edite o arquivo CSV gerado e altere o valor do cabeçalho da primeira linha de "Time"
para "date_ts"
, salve e saia.
Anote a localização do seu arquivo .csv , pois você o usará abaixo ao executar a caixa de ferramentas.
Antes de executar o exemplo abaixo, você precisa do Docker instalado.
O exemplo abaixo é especificamente para um arquivo de dados CSV contendo dados de mensagens de texto exportados usando o IExplorer
Conteúdo de dados.csv
"Name","Address","date_ts","Message","Attachment","iMessage"
"Me","+1 555-555-5555","7/17/2016 9:21:39 AM","How are you doing?","","True"
"Joe Smith","+1 555-444-4444","7/17/2016 9:38:56 AM","Pretty good you?","","True"
"Me","+1 555-555-5555","7/17/2016 9:39:02 AM","Great!","","True"
....
Conteúdo de csvdata.mapping.json
{
"dynamic": "true",
"properties": {
"date_ts": {"type": "date" },
"name": {"type": "string", "index" : "not_analyzed"},
"address": {"type": "string", "index" : "not_analyzed"},
"imessage": {"type": "string", "index" : "not_analyzed"}
}
}
Abra um terminal ou prompt de comando em seu computador e execute o seguinte. Antes de fazer isso, você precisa substituir PATH/TO/YOUR/data.csv
, PATH/TO/YOUR/csvdata.mapping.json
e PATH/TO/ELASTICSEARCH_DATA_DIR
abaixo com os caminhos apropriados em seu sistema local, conforme apropriado.
Nota: se estiver usando o Docker Toolbox para Windows : todos os volumes montados abaixo devem estar em algum lugar em seu diretório inicial em c:Users[your username]...
devido a problemas de permissão.
docker run --rm -ti -p 5601:5601
-v PATH/TO/YOUR/data.csv:/toolbox/data.csv
-v PATH/TO/YOUR/csvdata.mapping.json:/toolbox/csvdata.mapping.json
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
python /toolbox/csv2es/csv2es.py
[--existing-index ]
[--delete-index ]
--index-name comm_data
--doc-type txtmsg
--mapping-file /toolbox/csvdata.mapping.json
--import-file /toolbox/data.csv
--delimiter ','
--csv-clean-fieldnames
--csv-date-field date_ts
--csv-date-field-gmt-offset -1
Se estiver executando em um índice comm_data
pré-existente, certifique-se de incluir apenas o sinalizador --existing-index
. Se você quiser recriar o índice comm_data
antes da importação, inclua apenas o sinalizador --delete-index
.
O console registrará a saída do que está acontecendo. Quando o sistema for inicializado, você pode abrir um navegador da web em sua área de trabalho e acessar http://localhost:5601 para começar a usar o Kibana para analisar seus dados. Nota: se estiver executando o docker toolbox; 'localhost' pode não funcionar, execute um docker-machine env default
para determinar o endereço IP dos hosts do docker e vá para http://[machine-ip]:5601"
Na primeira tela que diz Configure an index pattern
, no campo rotulado Index name or pattern
você digita comm_data
você verá o campo date_ts
selecionado automaticamente e clique no botão Create
. A partir daí o Kibana está pronto para uso!
O lançamento faz várias coisas na seguinte ordem
Quando o importador mbox estiver em execução, você verá as seguintes entradas nos logs enquanto o sistema faz seu trabalho importando seus e-mails dos arquivos mbox
Ao executar a imagem comms-analyzer-toolbox
, um dos argumentos é invocar o script csv2es que usa os seguintes argumentos. Você pode ajustar o comando docker run
acima para passar os seguintes sinalizadores como desejar:
Usage: /toolbox/csv2es/csv2es.py [OPTIONS]
Bulk import a delimited file into a target Elasticsearch instance. Common
delimited files include things like CSV and TSV.
Load a CSV file:
csv2es --index-name potatoes --doc-type potato --import-file potatoes.csv
For a TSV file, note the tab delimiter option
csv2es --index-name tomatoes --doc-type tomato --import-file tomatoes.tsv --tab
For a nifty pipe-delimited file (delimiters must be one character):
csv2es --index-name pipes --doc-type pipe --import-file pipes.psv --delimiter '|'
Options:
--index-name TEXT Index name to load data into
[required]
--doc-type TEXT The document type (like user_records)
[required]
--import-file TEXT File to import (or '-' for stdin)
[required]
--mapping-file TEXT JSON mapping file for index
--delimiter TEXT The field delimiter to use, defaults to CSV
--tab Assume tab-separated, overrides delimiter
--host TEXT The Elasticsearch host
(http://127.0.0.1:9200/)
--docs-per-chunk INTEGER The documents per chunk to upload (5000)
--bytes-per-chunk INTEGER The bytes per chunk to upload (100000)
--parallel INTEGER Parallel uploads to send at once, defaults
to 1
--delete-index Delete existing index if it exists
--existing-index Don't create index.
--quiet Minimize console output
--csv-clean-fieldnames Strips double quotes and lower-cases all CSV
header names for proper ElasticSearch
fieldnames
--csv-date-field TEXT The CSV header name that represents a date
string to parsed (via python-dateutil) into
an ElasticSearch epoch_millis
--csv-date-field-gmt-offset INTEGER
The GMT offset for the csv-date-field (i.e.
+/- N hours)
--tags TEXT Custom static key1=val1,key2=val2 pairs to
tag all entries with
--version Show the version and exit.
--help Show this message and exit.
A execução neste modo apenas iniciará o elasticsearch e o kibana e não importará nada. Ele apenas abre a caixa de ferramentas para que você possa analisar dados importados anteriormente que residem no elasticsearch.
Nota: se estiver usando o Docker Toolbox para Windows : todos os volumes montados abaixo devem estar em algum lugar em seu diretório inicial em c:Users[your username]...
devido a problemas de permissão.
docker run --rm -ti -p 5601:5601
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
analyze-only
Deseja controlar as opções de heap de memória JVM ElasticSearch padrão, você pode fazer isso por meio de uma variável de ambiente docker, ou seja, -e ES_JAVA_OPTS="-Xmx1g -Xms1g"
etc.
Para hotmail/outlook, você precisa exportar para PST e, em seguida, converter para MBOX
O uso desta ferramenta é completamente local para qualquer máquina em que você esteja executando esta ferramenta (ou seja, seu host Docker). No caso de executá-lo em seu laptop ou desktop, é 100% local.
Os dados não são carregados ou transferidos para lugar nenhum.
Os dados não vão para nenhum lugar além do disco localmente para o host Docker em que está sendo executado.
Para remover completamente os dados analisados, você pode docker rm -f [container-id]
do contêiner comms-analyzer-toolbox
em execução em sua máquina.
Se você montou o diretório de dados do elasticsearch por meio de um volume no host (ou seja, -v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
), esse diretório local é onde todos os dados indexados residem localmente no disco.