
Malcomは、ネットワークトラフィックのグラフィカル表現を使用してシステムのネットワーク通信を分析し、既知のマルウェアソースと相互参照するために設計されたツールです。これは、特定のマルウェア種が外部と通信しようとする方法を分析する際に便利です。
Malcomは以下のことに役立ちます:
Malcomの目的は、特定のホストまたはネットワークから発信されるネットワークトラフィックを人間が読める形に変換することで、マルウェア分析とインテリジェンス収集を高速化することです。ネットワークトラフィック情報をより迅速に実用的なインテリジェンスに変換します。
wikiで、いくつかの素敵なスクリーンショットと独自のフィードを追加する方法のチュートリアルを含むクイックスタートをご確認ください。
ヘルプが必要な場合や貢献したい場合は、メーリングリストに参加するか、IRC(freenode.netの#malcom、かなり静かですが常に誰かがいます)で誰かを見つけてみてください。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
仮想環境内で、requirements.txtファイルから必要なPythonパッケージをインストール:
デフォルトでは、Malcomはローカルのmongodbインスタンスに接続し、malcomという名前の独自データベースを作成しようとします。これで問題なければ、次の手順はスキップしてかまいません。そうでない場合は、malcom.confファイルのdatabaseセクションを編集する必要があります。
デフォルトでは、Malcomはmalcomという名前のデータベースを使用します。この動作を変更するには、malcom.confファイルを編集し、databaseセクションのnameディレクティブをお好みの値に設定します。
[database]
...
name = my_malcom_database
...
デフォルトでは、Malcomはlocalhostに接続しようとしますが、データベースが別のサーバーにある場合もあります。これを変更するには、hostsディレクティブを設定するだけです。ホスト名またはIPv4/v6アドレスを使用できます(IPv6アドレスは[と]で囲むことを忘れないでください。例:[::1])。
ホストmy.mongo.server上のスタンドアロンデータベースを使用する場合は、次のように設定します:
[database]
...
hosts = my.mongo.server
...
サーバーの名前/アドレスの後に:で区切ってポートを指定することもできます。
[database]
...
hosts = localhost:27008
...
また、my.mongo1.serverとmy.mongo2.serverで構成されるReplicaSetを使用している場合は、次のように設定します:
[database]
...
hosts = my.mongo1.server,my.mongo2.server
...
mongodインスタンスが認証接続を強制するように設定している場合があります。その場合、ドライバーがmongodインスタンスに接続するために使用するユーザー名を設定する必要があります。これを行うには、malcom.confファイルのdatabaseセクションにusernameディレクティブを追加します。また、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-automaticの代わりにtomchop/malcomを使用してください。
$ 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スクリプトを使用してこれを行うことができます。たとえば、ポート443へのすべてのTLS通信をインターセプトするには、forward_port.sh 443 9999を使用します。次に、ポート9999でインターセプションプロキシを実行するようにmalcomに指示する必要があります。
このプロセスは将来のリリースで自動化される予定です。
MalcomはUbuntu Server 14.04 LTS VM上で設計およびテストされました。
マルウェア分析に慣れているなら、おそらくホストOS上で多数の仮想マシンを実行しているでしょう。新しいVMにMalcomをインストールし、他のVMの接続をMalcom経由でルーティングしてください。enable_routing.shを使用して、Malcomが実行されているVMでルーティング/NATを有効にします。ゲストOSに追加のネットワークカードを追加する必要があります。
レイヤー3のネットワークデータを取得できる限り、Malcomはどこにでも展開できます。高可用性ネットワークでの使用は推奨されませんが(高速になるよう設計されていません。免責事項を参照)、スイッチのミラーポートの終端やゲートウェイで実行できます。
フィードからの情報のみを取得するMalcomのインスタンスを起動するには、--feedsオプションを指定してMalcomを実行するか、設定ファイルを微調整します。
データベースは自動的にデータが入力されるはずです。コードを調べれば、フィードの追加は非常に簡単です(Evilオブジェクトを生成している前提)。例となるフィードは/feeds/zeustrackerにあります。より詳細なチュートリアルはこちらで入手できます。
celeryを使用してフィードを実行することもできます。仮想環境から$ pip install celeryを実行してceleryがインストールされていることを確認してください。次に、celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12を使用して、12の同時ワーカーでフィード処理を開始できます。
MalcomはほとんどスクラッチからPythonで書かれています。動作には以下のフレームワークを使用しています:
コラボレーション - このツールを向かわせたい主な方向性は、コラボレーションを可能にすることです。これについていくつかアイデアがあり、データ共有が実装されれば100倍便利になると考えています。
拡張性 - ツールに含めたいもう一つのことは、より簡単に拡張できる機能です。私と他のすべての人のニーズは同じではなく、このツールは私のニーズを念頭に置いて考案されました。現在では新しいフィードを追加してMalcomをカスタマイズできます。
コラボレーションと拡張が軌道に乗れば、これが多くのインシデントレスポンダーにとって役立つものになるでしょう。 :-)
このツールは私の自由時間にコーディングされました。私たちが日常的にダウンロードして使用する膨大な数のツールと同様に、データの安定性と信頼性が必須である本番環境での使用はお勧めしません。
開発の初期段階にあり、「私にとっては動く」という意味です。自由に共有し、改善し、プルリクエストを依頼してください。
Malcom - マルウェア通信アナライザー Copyright (C) 2013 Thomas Chopitea
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Malcomに含まれるRedis、MongoDB、d3js、Maxmind、Bootstrap(およびその他のサードパーティライブラリ)は、独自のGPL互換ライセンスを持っている場合があることに注意してください。
$ 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を実行できます。