
EXISTは、サイバー脅威インテリジェンスを集約・分析するためのWebアプリケーションです。
⚠️ このリポジトリはメンテナンス終了/アーカイブされています。セキュリティ問題は修正されません。
EXISTは、CTI(サイバー脅威インテリジェンス)を集約・分析するためのWebアプリケーションです。
EXISTは以下のソフトウェアで記述されています。
EXISTは、セキュリティオペレーターが関連する指標に基づいてインシデントを調査する際に役立つCTIを集約するWebアプリケーションです。
EXISTは、複数のCTIサービスやTwitterからAPIおよびフィードを介して自動的にデータを取得します。 WebインターフェースおよびAPIを介して、指標を横断検索できます。
DNSやHTTPプロキシサーバーのログなど、クライアントのネットワーク動作をログに記録するサーバーをお持ちであれば、EXIST上のデータと関連付けてログを分析できます。 APIを使用してプログラムを実装すれば、自動化されたCTI駆動型セキュリティ運用センターを実現できます。

検索フォームにドメインを入力するだけです。

検索フォームにURLを入力するだけです。

Threat HunterまたはTwitter Hunterにキーワードを追加するだけです。

Trackerは、複数のCTIサービスからデータフィードを自動収集します。
Hunterは、複数のCTIサービスやTwitterからデータを収集するためのクエリを設定できます。
Lookupは、特定の情報(IPアドレス、ドメインなど)に関連する情報を、複数のインターネットサービス(whoisなど)から取得します。
twitter trackerからのツイートに注釈を付けるためのツール。
EXISTデータベースに保存されたデータをWeb APIで提供します。
以降はCentOS 7またはUbuntu 18.04 LTSの環境を想定しています。他の環境にデプロイする場合はご自身の責任で行ってください。
$ sudo pip install -r requirements.txt
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
$ sudo yum install MariaDB-server MariaDB-client
$ sudo apt install mariadb-server mariadb-client
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
.envを作成します。データベースの設定に合わせて編集してください。Django用の秘密鍵は.envファイルに記述する必要があります。
まず、鍵生成プログラムを実行します。
$ python keygen.py
(例)> 70mm6h)()h3r&*b9xq$e52=-7($p=5983gfoyz%$d-j-gd7u5@
そして、秘密鍵を.envファイルに記述します。
...
# EXIST Application Settings
EXIST_SECRET_KEY="70mm6h)()h3r&*b9xq$e52=-7($p=5983gfoyz%$d-j-gd7u5@"
...
$ python manage.py makemigrations exploit reputation threat threat_hunter twitter twitter_hunter news news_hunter vuln
$ python manage.py migrate
Reputation trackerは、Celeryのキャッシュサーバーバックエンドとしてredisを使用します。
$ sudo yum install redis
$ sudo systemctl start redis
$ sudo systemctl enable redis
$ sudo apt install redis-server
$ sudo systemctl start redis-server
$ sudo systemctl enable redis-server
Reputation trackerは、非同期タスクジョブキューとしてCeleryを使用します。
# Name of nodes to start
# here we have a single node
CELERYD_NODES="w1"
# or we could have three nodes:
#CELERYD_NODES="w1 w2 w3"
# Absolute or relative path to the 'celery' command:
CELERY_BIN="/path/to/your/celery"
# App instance to use
# comment out this line if you don't use an app
CELERY_APP="intelligence"
# or fully qualified:
#CELERY_APP="proj.tasks:app"
# How to call manage.py
CELERYD_MULTI="multi"
# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"
# - %n will be replaced with the first part of the nodename.
# - %I will be replaced with the current child process index
# and is important when using the prefork pool to avoid race conditions.
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_LOG_LEVEL="INFO"
/etc/systemd/system/celery.serviceにCeleryサービス管理スクリプトを作成します。また、Celery設定ファイルのパスをEnvironmentFileに設定する必要があります。[Unit]
Description=Celery Service
After=network.target
[Service]
Type=forking
User=YOUR_USER
Group=YOUR_GROUP
EnvironmentFile=/etc/sysconfig/celery
WorkingDirectory=/path/to/your/exist
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
--pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
[Install]
WantedBy=multi-user.target
$ sudo mkdir /var/log/celery; sudo chown YOUR_USER:YOUR_GROUP /var/log/celery
$ sudo mkdir /var/run/celery; sudo chown YOUR_USER:YOUR_GROUP /var/run/celery
/etc/tmpfiles.d/exist.confに設定ファイルを作成します。#Type Path Mode UID GID Age Argument
d /var/run/celery 0755 YOUR_USER YOUR_GROUP -
$ sudo systemctl start celery.service
$ sudo systemctl enable celery.service
$ python manage.py runserver 0.0.0.0:8000
注意: 本番環境で実行する場合は、NginxとuWSGIを使用することを推奨します。
データベースにフィードを挿入するスクリプトは scripts/insert2db/*/insert2db.py にあります。
$ python scripts/insert2db/reputation/insert2db.py
$ python scripts/insert2db/twitter/insert2db.py
$ python scripts/insert2db/exploit/insert2db.py
$ python scripts/insert2db/threat/insert2db.py
$ python scripts/insert2db/news/insert2db.py
$ python scripts/insert2db/vuln/insert2db.py
注意: 情報収集を自動化するには、これらをcronに記述してください。
Twitter Hunterは、特定のキーワードやユーザーIDを含むツイートを検出できます。必要に応じてSlackに通知することも可能です。
Threat Hunterは、特定のキーワードを含む脅威イベントを検出できます。必要に応じてSlackに通知することも可能です。
EXISTは VirusTotal API を使用します。
注意: プライベートAPIキーをお持ちの場合は、より多くの情報を取得できます。
Lookup IP / Domainは GeoLite2 Database を使用します。
Lookup URLは wkhtmltopdf と Xvfb を使用します。
$ sudo yum install xorg-x11-server-Xvfb
EXISTをUbuntu 18.04 LTSにデプロイする場合は、aptを使用してこれらのパッケージをインストールできます。
$ sudo apt install wkhtmltopdf xvfb
ツイートのトレーニングデータを作成するためのアノテーションツールです。このツールは機械学習研究者向けです。



脆弱性を発見された場合は、メールでご連絡ください。
この製品には、MaxMindが作成したGeoLite2データが含まれており、https://www.maxmind.comから入手可能です。
MIT License © Cybersecurity Laboratory, NICT