
Malcom - Анализатор коммуникаций вредоносного ПО
Malcom — это инструмент, предназначенный для анализа сетевых коммуникаций системы с использованием графических представлений сетевого трафика и их перекрёстной сверки с известными источниками вредоносного ПО. Это удобно при анализе того, как определённые виды вредоносных программ пытаются взаимодействовать с внешним миром.
Malcom может помочь вам:
Цель Malcom — сделать анализ вредоносного ПО и сбор разведывательной информации быстрее, предоставив удобочитаемую версию сетевого трафика, исходящего от данного хоста или сети. Превращайте информацию о сетевом трафике в действенную разведывательную информацию быстрее.
Ознакомьтесь с вики для быстрого старта с несколькими хорошими скриншотами и учебным пособием по добавлению собственных лент.
Если вам нужна помощь или вы хотите внести свой вклад, присоединяйтесь к списку рассылки или попробуйте связаться с кем-нибудь в IRC (#malcom на freenode.net, там довольно тихо, но кто-нибудь всегда есть). Также вы можете написать мне в Twitter @tomchop_
Вот пример графа для хоста tomchop.me

Вид набора данных (отфильтровано только для отображения IP-адресов)

mongodb и redis-server запущены./malcom.py -c malcom.conf (или посмотрите опции с ./malcom.py --help)
** Для примера конфигурационного файла вы можете скопировать malcom.conf.example в malcom.conf
** Порт по умолчанию — 8080
** Альтернативно, запустите ленты из celery. См. раздел ленты для подробностей о том, как это сделать.Malcom написан на Python. При наличии необходимых библиотек вы сможете запустить его на любой платформе. Я настоятельно рекомендую использовать виртуальные окружения Python (virtualenv), чтобы не испортить системные библиотеки.
Следующее было протестировано на Ubuntu Server 14.04 LTS:
Установите git, python, библиотеки libevent, mongodb, redis и другие зависимости.
$ 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
Клонируйте Git-репозиторий:
$ git clone https://github.com/tomchop/malcom.git malcom
Создайте виртуальное окружение и активируйте его:
$ cd malcom
$ virtualenv env-malcom
$ source env-malcom/bin/activate
Получите и установите 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
По умолчанию Malcom попытается подключиться к локальному экземпляру mongodb и создать свою собственную базу данных с именем malcom. Если это вас устраивает, можете пропустить следующие шаги. В противном случае вам нужно отредактировать раздел database вашего файла malcom.conf.
По умолчанию Malcom будет использовать базу данных с именем malcom. Вы можете изменить это поведение, отредактировав файл malcom.conf и установив директиву name в разделе database по своему усмотрению.
[database]
...
name = my_malcom_database
...
По умолчанию Malcom попытается подключиться к localhost, но ваша база данных может находиться на другом сервере. Чтобы изменить это, просто установите директиву hosts. Вы можете использовать имена хостов или IPv4/v6 адреса (только не забудьте заключать IPv6-адреса в [ и ], например [::1]).
Если вы хотите использовать отдельную базу данных на хосте my.mongo.server, просто установите:
[database]
...
hosts = my.mongo.server
...
Вы также можете указать порт, который прослушивает mongod, указав его после имени/адреса вашего сервера, разделив их символом :
[database]
...
hosts = localhost:27008
...
А если вы используете ReplicaSet, объединяющий my.mongo1.server и my.mongo2.server, просто установите:
[database]
...
hosts = my.mongo1.server,my.mongo2.server
...
Возможно, вы настроили свои экземпляры mongod таким образом, чтобы они требовали аутентификацию при подключении. В этом случае вам необходимо указать имя пользователя, которое драйвер будет использовать для подключения к вашему экземпляру mongod. Для этого просто добавьте директиву username в раздел database файла malcom.conf. Возможно, вам также потребуется установить пароль с помощью директивы password. Если у пользователя нет пароля, просто проигнорируйте (т.е. закомментируйте) директиву password.
[database]
...
username = my_user
password = change_me
...
Если пользователь не привязан к базе данных malcom, а к другой (например, к базе данных admin для администратора), вам нужно будет установить директиву authentication_database с именем этой базы данных.
[database]
...
authentication_database = some_other_database
...
При использовании реплика-сета вам может потребоваться убедиться, что вы подключены к правильному. Для этого добавьте директиву replset, чтобы заставить драйвер mongo проверить имя реплика-сета.
[database]
...
replset = my_mongo_replica
...
По умолчанию Malcom попытается подключиться к первичному узлу реплика-сета. Возможно, вам потребуется/захочется изменить это. Чтобы изменить это поведение, просто установите директиву read_preference. Смотрите документацию mongo для получения дополнительной информации.
[database]
...
read_preference = NEAREST
...
Поддерживаемые предпочтения чтения:
Самый быстрый способ начать работу — загрузить образ Docker из публичного репозитория Docker. Чтобы загрузить более старые, более стабильные сборки Docker, используйте tomchop/malcom вместо tomchop/malcom-automatic.
$ sudo docker pull tomchop/malcom-automatic
$ sudo docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic
Подключение к http://<docker_host>:8080/ должно помочь вам начать.
Malcom теперь поддерживает перехват TLS. Для этого необходимо сгенерировать несколько ключей в каталоге Malcom/networking/tlsproxy/keys. Смотрите файл KEYS.md в этом каталоге для получения дополнительной информации о том, как это сделать.
Убедитесь, что у вас также есть IPtables (они уже должны быть) и разрешения для перенаправления портов с их помощью (обычно для этого нужны права root).
Вы можете сделать это с помощью удобного скрипта forward_port.sh. Например, чтобы перехватывать весь TLS-трафик к порту 443, используйте forward_port.sh 443 9999. Затем вам нужно будет указать malcom запустить прокси-сервер перехвата на порту 9999.
Ожидается, что этот процесс будет автоматизирован в будущих версиях.
Malcom был спроектирован и протестирован на виртуальной машине Ubuntu Server 14.04 LTS.
Если вы привыкли заниматься анализом вредоносного ПО, у вас, вероятно, уже есть множество виртуальных машин, работающих на хост-ОС. Просто установите Malcom на новую виртуальную машину и направьте соединения других виртуальных машин через Malcom. Используйте enable_routing.sh для активации маршрутизации/NAT на виртуальной машине, на которой работает Malcom. Вам нужно будет добавить дополнительную сетевую карту гостевой ОС.
Пока Malcom получает сетевые данные уровня 3, его можно развернуть где угодно. Хотя не рекомендуется использовать его в высокодоступных сетях (он не был спроектирован для быстрой работы, см. отказ от ответственности), вы можете запустить его на конце зеркального порта вашего коммутатора или на шлюзе.
Чтобы запустить экземпляр Malcom, который ТОЛЬКО получает информацию из лент, запустите Malcom с опцией --feeds или настройте конфигурационный файл.
Ваша база данных должна заполняться автоматически. Если вы готовы углубиться в код, добавление лент довольно прямолинейно (при условии, что вы создаёте объекты Evil). Пример ленты можно найти в /feeds/zeustracker. Более подробное руководство доступно здесь.
Вы также можете использовать celery для запуска лент. Убедитесь, что celery установлен, выполнив $ pip install celery из вашего виртуального окружения. Затем вы можете использовать celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12 для запуска процесса питания ленты с 12 одновременными рабочими процессами.
Malcom был написан в основном с нуля на Python. Для работы он использует следующие фреймворки:
Совместная работа — основное направление, в котором я хочу развить этот инструмент, это сделать его совместным. У меня есть несколько идей по этому поводу, и я думаю, что он станет в 100 раз полезнее, как только будет реализован обмен данными.
Расширяемость — другая вещь, которую я хочу включить в инструмент, это возможность легче его расширять. У меня не такие потребности, как у всех остальных, и этот инструмент создавался с учётом моих потребностей. Теперь вы можете настраивать Malcom, добавляя новые ленты.
Как только совместная работа и расширение заработают, я думаю, это будет полезно не одному реагирующему на инциденты. :-)
Этот инструмент был написан в моё свободное время. Как и огромное количество инструментов, которые мы ежедневно скачиваем и используем, я бы не рекомендовал использовать его в производственной среде, где стабильность и надёжность данных являются ОБЯЗАТЕЛЬНЫМИ.
Он находится на ранних стадиях разработки, то есть «работает у меня». Вы можете свободно делиться им, улучшать его, запрашивать pull request'ы.
Malcom - анализатор коммуникаций вредоносного ПО Copyright (C) 2013 Thomas Chopitea
Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять её на условиях Стандартной общественной лицензии GNU в том виде, в каком она опубликована Фондом свободного программного обеспечения; либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ ВСЯКИХ ГАРАНТИЙ; даже без подразумеваемой гарантии КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. Подробнее см. Стандартную общественную лицензию GNU.
Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, см. http://www.gnu.org/licenses/.
Обратите внимание, что Redis, MongoDB, d3js, Maximind и Bootstrap (а также другие сторонние библиотеки, включённые в Malcom) могут иметь свои собственные лицензии, совместимые с GPL.
Всё ещё находясь в виртуальном окружении, установите необходимые пакеты Python из файла requirements.txt:
$ cd ../malcom
$ pip install -r requirements.txt
Для работы геолокации IP необходимо загрузить базу данных Maxmind и извлечь файл в каталог malcom/Malcom/auxiliary/geoIP. Вы можете получить бесплатную (и, следовательно, более или менее точную) базу данных Maxmind по следующей ссылке: 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
Запустите веб-сервер из каталога malcom, используя ./malcom.py. Для интерфейса прослушивания и портов смотрите ./malcom.py --help.
malcom.conf.example в malcom.conf и выполнить ./malcom.py -c malcom.conf