Japan
サイト内の現在位置
MWDBとKartonを用いたマルウェア管理システムの構築方法のご紹介
NECセキュリティブログ2024年7月26日
NECサイバーセキュリティ戦略統括部 セキュリティ技術センターの松本隆志です。本ブログでは、オープンソースのマルウェア管理システムである「MWDB」とマルウェア分析システムの「Karton」について紹介します。また、それらを用いたマルウェア管理システムの構築方法を紹介します。
目次
MWDBについて
- マルウェアのバイナリファイルや構成情報を保存するストレージ
- 各オブジェクトの関係の追跡機能と見える化
- 検索機能
- データ共有とユーザ管理の仕組み
- Webhookとプラグインシステムによる統合機能
MWDBは、アップロードされたファイルの管理だけではなく、検索機能も充実しており、図1のような操作で検体の検索ができます。

(出典:

図1のページから検体を選択すると、図2のような検体の詳細情報を確認できます。


(出典:

また、図3のようにマルウェアから抽出したConfig情報を検体に紐づけて管理することもできます。


(出典:

さらに、図4のようにアップロードされたファイルに関連する情報をグラフで確認することもできます。

(出典:

Kartonについて
- karton:システム内のタスクの管理を担うサービス(Kartonのメインサービス)
- karton-dashboard
[6]: タスクやキューの管理と監視を行うためのダッシュボード
- karton-classifier
[7]: ファイルの種類を識別するサービス
- karton-archive-extractor
[8]: 汎用的なアーカイブの展開機能を持つサービス
- karton-config-extractor
[9]: マルウェアの設定値を抽出するためのサービス
- karton-mwdb-reporter
[10]: 分析中に生成されたファイル、タグ、コメントなどをMWDBに送信するサービス
- karton-yaramatcher
[11]: YARAスキャンを行うサービス
- karton-asciimagic
[12]:エンコードされたファイルをデコードするサービス
- karton-autoit-ripper
[13]: AutoItファイルからスクリプトとリソースを抽出するサービス
Kartonは、これらのサービスを組み合わせることで、マルウェアの分析を行います。
MWDBは、マルウェアを分析する機能を持っていません。代わりにKartonサービスがマルウェアを分析し、その結果をMWDB側に提供しています。
構築する環境について
本ブログでは、図5のイメージ図の構成でMWDBとKartonサービスを構築する方法について紹介します。

実際に以下の設定のVM上に構築できることを確認しました。
- メモリ: 4GB
- プロセッサ: 2コア
- ハードディスク: 25GB
- OS: Ubuntu 22.04
MWDBの構築手順
MWDBの構築手順について、以下の順に説明します。
- MinIOのセットアップ
- PostgreSQLのセットアップ
- MWDBのセットアップ
- GunicornとNginxのセットアップ
- MWDBの動作確認
MinIOのセットアップ
$ sudo useradd -M minio
$ sudo mkdir -p /opt/minio/bin /opt/minio/data
$ sudo chown -R minio:minio /opt/minio
MinIOサーバとクライアントの実行ファイルをダウンロードします。また、実行権限を与えて、パスの通っている/usr/local/binにシンボリックリンクを作成しておきます。
# MinIOサーバ
$ sudo -u minio wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /opt/minio/bin/minio
$ sudo -u minio chmod +x /opt/minio/bin/minio
$ sudo ln -s /opt/minio/bin/minio /usr/local/bin/
# MinIOクライアント
$ sudo -u minio wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /opt/minio/bin/mc
$ sudo -u minio chmod +x /opt/minio/bin/mc
$ sudo ln -s /opt/minio/bin/mc /usr/local/bin/
MinIOの設定情報を記載したenvファイルを作成します。MINIO_ROOT_USER、MINIO_ROOT_PASSWORDの値は、自身で調整してください。
$ sudo -u minio tee /opt/minio/minio.env << 'EOF' > /dev/null
MINIO_VOLUMES="/opt/minio/data/"
MINIO_OPTS="--address :9000 --console-address :9001"
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadminpass
EOF
minio.envの権限を変更します。
$ sudo chmod 400 /opt/minio/minio.env
MinIOサーバの起動用にSystemdのサービスファイルを作成します。
$ sudo tee /etc/systemd/system/minio.service << 'EOF' > /dev/null
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/usr/local/
User=minio
Group=minio
EnvironmentFile=/opt/minio/minio.env
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=1048576
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
EOF
Systemdの設定を更新した後、MinIOサービスを有効にして起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now minio.service
MinIOサーバにアクセスし、mwdbという名前のバケットを作成します。なお、「minioadmin」、「minioadminpass」の個所は、MINIO_ROOT_USER、MINIO_ROOT_PASSWORDに設定した値に調整してください。
$ mc alias set myminio http://localhost:9000 minioadmin minioadminpass
$ mc mb myminio/mwdb
PostgreSQLのセットアップ
MWDBは、PostgreSQL[16]を用いてユーザ、グループ、タグ、コメントなどを管理しています。以下に、MWDB用のPostgreSQLのセットアップ方法を示します。
PostgreSQLをインストールします。
$ sudo apt install -y postgresql
mwdbユーザを作成し、PostgreSQLにmwdbロールを作成します。このとき、新規のパスワードの入力が求められます。
$ sudo useradd -M mwdb
$ sudo -u postgres createuser -P mwdb
mwdbデータベースを作成し、その所有者をmwdbユーザに変更します。
$ sudo -u postgres createdb mwdb
$ sudo -u postgres psql -c "ALTER DATABASE mwdb OWNER TO mwdb;"
PostgreSQLサービスを再起動します。
$ sudo systemctl restart postgresql
MWDBのセットアップ
MWDB本体のセットアップ方法について以下に示します。
MWDBのセットアップに必要なパッケージをインストールします。
$ sudo apt install -y \
gcc \
libfuzzy-dev \
python3-pip \
python3-dev \
python3-venv \
postgresql-client \
postgresql-common
mwdb関連のデータ格納用のディレクトリを作成します。
$ sudo mkdir /opt/mwdb
$ sudo chown mwdb:mwdb /opt/mwdb
mwdbユーザでvirtualenv環境を作成し、アクティベートします。
$ sudo -u mwdb /bin/bash
$ cd /opt/mwdb
$ python3 -m venv venv
$ source ./venv/bin/activate
mwdb-coreをインストールします。
(venv) $ pip install mwdb-core
以下のコマンドでmwdb-coreの設定ファイルを生成します。
(venv) $ mwdb-core configure
上記のコマンドを実行すると、設定ファイルの保存先に関するメッセージが表示されるので、「3」と入力して、カレントディレクトリに保存されるようにします。
Where do you want to place MWDB local files?
1) Global directories (/var/lib/mwdb-core, /etc/mwdb-core)
2) Local user directory (/home/mwdb/.mwdb-core)
3) Current directory
(1, 2, 3): 3
次にPostgreSQLの接続方法に関するメッセージが表示されるので、「postgresql://mwdb:mwdbpass@localhost/mwdb」と入力します。なお、「mwdbpass」の個所は、PostgreSQLのmwdbロールを追加した際に入力したパスワードに調整してください。
PostgreSQL database connection string [postgresql://localhost/mwdb]: postgresql://mwdb:mwdbpass@localhost/mwdb
ファイルのアップロード先とベースURLの入力を求められます。ここはデフォルト値で問題ないので、Enterキーを押します。
Uploads storage path [./uploads]:
Base public URL of MWDB service [http://127.0.0.1]:
ここまでの設定が完了した後、mwdb-core configureコマンドが、PostgreSQLのデータベースを初期化します。最後にMWDBの管理者アカウントのパスワードの入力を求められます。
Provide password for MWDB 'admin' account:
Repeat password:
生成されたmwdb.iniを開き、以下のように設定を変更します。なお、「minioadmin」、「minioadminpass」の個所は、MINIO_ROOT_USER、MINIO_ROOT_PASSWORDに設定した値に調整してください。
(venv) $ vi /opt/mwdb/mwdb.ini
# uploads_folder = ./uploads
storage_provider = s3
s3_storage_endpoint = 127.0.0.1:9000
s3_storage_access_key = minioadmin
s3_storage_secret_key = minioadminpass
s3_storage_bucket_name = mwdb
virtualenv環境をディアクティベートし、元のユーザに戻ります。
(venv) $ deactivate
$ exit
mwdb.iniの権限を変更します。
$ sudo chmod 400 /opt/mwdb/mwdb.ini
GunicornとNginxのセットアップ
$ sudo apt install -y nginx
MWDBのGunicornサーバの起動用にSystemdのサービスファイルを作成します。
$ sudo tee /etc/systemd/system/mwdb.service << 'EOF' > /dev/null
[Unit]
Description=mwdb gunicorn daemon
Requires=mwdb.socket
After=network.target
[Service]
Type=notify
User=mwdb
Group=mwdb
RuntimeDirectory=gunicorn
WorkingDirectory=/opt/mwdb
ExecStart=/bin/bash -c "source /opt/mwdb/venv/bin/activate; /opt/mwdb/venv/bin/gunicorn -w 4 mwdb.app:app"
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
Nginxがソケット経由でGunicornにアクセスできるようにサービスを追加します。
$ sudo tee /etc/systemd/system/mwdb.socket << 'EOF' > /dev/null
[Unit]
Description=mwdb gunicorn socket
[Socket]
ListenStream=/run/mwdb.sock
SocketUser=www-data
[Install]
WantedBy=sockets.target
EOF
Nginxにリバースプロキシの設定を追加します。
$ sudo tee /etc/nginx/conf.d/mwdb.conf << 'EOF' > /dev/null
server {
listen 8080;
server_name 127.0.0.1;
location / {
proxy_pass http://unix:/run/mwdb.sock;
}
}
EOF
Systemdの設定を更新した後、各サービスを起動、再起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now mwdb.socket
$ sudo systemctl enable --now mwdb.service
$ sudo systemctl restart nginx.service
ここまでの設定で、MWDBの初期設定が完了します。
MWDBの動作確認
実際に設定が完了しているかを確認するために、http://127.0.0.1:8080/loginにアクセスします。アクセスすると、図6のようなログインページが表示されるので、adminアカウントでログインできることを確認します。なお、パスワードは、mwdb-core configureコマンドの実行時に入力した値です。

ログインに成功し、図7のようなページに遷移すれば、設定が完了していることが確認できます。

KartonのセットアップとMWDBへの統合手順
Karton連携用のアカウント作成
MWDBとKartonを連携させるためには、Karton側からMWDBにアクセスするための権限が必要になります。Karton連携用のアカウントを作成する方法について以下に示します。
http://127.0.0.1:8080/settings/usersにアクセスすると、図8のようなユーザ一覧ページに遷移します。このページの「Register user」を選択します。

以下の設定でkartonアカウントを追加します。実際に入力した画面を図9に示します。
- Login: karton
- E-mail: karton@mwdb.local
- Additional info: karton-mwdb-reporter account
- Feed quality: high
- Send e-mail with set password link: チェックを外す

http://127.0.0.1:8080/settings/user/karton/capabilitiesにアクセスし、kartonユーザに以下の権限を与えます。実際に設定した画面を図10に示します。
- adding_tags
- adding_comments
- adding_parents
- adding_all_attributes
- adding_files
- adding_configs
- adding_blobs
- unlimited_requests
- karton_assign

http://127.0.0.1:8080/settings/user/karton/api-keysにアクセスすると、図11のようなページに遷移します。このページの「Issue new API key」を選択します。

図12のようなポップアップが表示されるので、任意の名前でAPI keyを作成します。

APIキーの生成に成功すると図13のようなページ遷移し、APIキーが表示されます。このAPIキーは、kartonの設定ファイルの記載する必要があるので、控えておきます。


karton-systemサービスのセットアップ
karton-systemサービスは、Kartonのタスク管理を行うメインサービスです。このサービスは、他のKartonサービスに処理を振り分ける機能を持っています。Kartonのメインサービスであるkarton-systemのセットアップ方法について以下に示します。
redis[20]サーバをインストールします。
$ sudo apt install -y redis
MinIOサーバにアクセスし、kartonという名前のバケットを作成します。
$ mc mb myminio/karton
mwdbユーザでvirtualenv環境をアクティベートします。
$ sudo -u mwdb /bin/bash
$ cd /opt/mwdb
$ source ./venv/bin/activate
karton-coreをインストールします。
(venv) $ pip install karton-core
Kartonの設定情報を記載したiniファイルを作成します。なお、「minioadmin」、「minioadminpass」の個所は、MINIO_ROOT_USER、MINIO_ROOT_PASSWORDに設定した値に調整してください。また、「change_me_api_key」の個所は、MWDBで生成したAPI keyを指定してください。
(venv) $ tee /opt/mwdb/karton.ini << 'EOF' > /dev/null
[s3]
access_key = minioadmin
secret_key = minioadminpass
address = http://localhost:9000
bucket = karton
[redis]
host = localhost
port = 6379
[mwdb]
api_url = http://localhost:8080/api/
api_key = change_me_api_key
EOF
virtualenv環境をディアクティベートし、元のユーザに戻ります。
(venv) $ deactivate
$ exit
karton.iniの権限を変更します。
$ sudo chmod 400 /opt/mwdb/karton.ini
karton-systemサーバの起動用にSystemdのサービスファイルを作成します。
$ sudo tee /etc/systemd/system/karton-system.service << 'EOF' > /dev/null
[Unit]
Description=Karton System
Documentation=https://github.com/CERT-Polska/karton
Wants=network-online.target
After=network-online.target
[Service]
WorkingDirectory=/opt/mwdb/
User=mwdb
Group=mwdb
ExecStart=/bin/bash -c "source /opt/mwdb/venv/bin/activate; /opt/mwdb/venv/bin/karton-system"
Restart=always
[Install]
WantedBy=multi-user.target
EOF
Systemdの設定を更新した後、karton-systemサービスを有効にして起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now karton-system
mwdb.iniを編集し、以下の設定を追加します。
$ sudo chmod +w /opt/mwdb/mwdb.ini
$ sudo vi /opt/mwdb/mwdb.ini
[mwdb]
enable_karton = 1 # 追加
$ sudo chmod -w /opt/mwdb/mwdb.ini
mwdbサービスを再起動します。
$ sudo systemctl restart mwdb.service
karton-classifierサービスのセットアップ
karton-classifierは、初めに実行されるサービスです。MWDBにアップロードされたファイルの種類を識別する機能を持っています。後続のKartonサービスは、ここで識別されたファイルの種類に応じた処理を行うことができます。以下にkarton-classifierサービスのセットアップ方法について示します。
mwdbユーザでvirtualenv環境をアクティベートします。
$ sudo -u mwdb /bin/bash
$ cd /opt/mwdb
$ source ./venv/bin/activate
karton-classifierをインストールします。
(venv) $ pip install karton-classifier
virtualenv環境をディアクティベートし、元のユーザに戻ります。
(venv) $ deactivate
$ exit
karton-classifierサーバの起動用にSystemdのサービスファイルを作成します。
$ sudo tee /etc/systemd/system/karton-classifier.service << 'EOF' > /dev/null
[Unit]
Description=karton-classifier
Documentation=https://github.com/CERT-Polska/karton-classifier
Requires=karton-system.service
After=karton-system.service
[Service]
WorkingDirectory=/opt/mwdb/
User=mwdb
Group=mwdb
ExecStart=/bin/bash -c "source /opt/mwdb/venv/bin/activate; /opt/mwdb/venv/bin/karton-classifier"
Restart=always
[Install]
WantedBy=multi-user.target
EOF
Systemdの設定を更新した後、karton-classifierサービスを有効にして起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now karton-classifier
karton-mwdb-reporterサービスのセットアップ
karton-mwdb-reporterは、最後に実行されるサービスです。前段のKartonサービスによって生成されたファイル、タグ、コメントなどの情報をMWDBに通知します。以下にkarton-mwdb-reporterサービスのセットアップ方法について示します。
mwdbユーザでvirtualenv環境をアクティベートします。
$ sudo -u mwdb /bin/bash
$ cd /opt/mwdb
$ source ./venv/bin/activate
karton-mwdb-reporterをインストールします。
(venv) $ pip install karton-mwdb-reporter
virtualenv環境をディアクティベートし、元のユーザに戻ります。
(venv) $ deactivate
$ exit
karton-mwdb-reporterサーバの起動用にSystemdのサービスファイルを作成します。
$ sudo tee /etc/systemd/system/karton-mwdb-reporter.service << 'EOF' > /dev/null
[Unit]
Description=karton-mwdb-reporter
Documentation=https://github.com/CERT-Polska/karton-mwdb-reporter
Requires=karton-system.service
After=karton-system.service
[Service]
WorkingDirectory=/opt/mwdb/
User=mwdb
Group=mwdb
ExecStart=/bin/bash -c "source /opt/mwdb/venv/bin/activate; /opt/mwdb/venv/bin/karton-mwdb-reporter"
Restart=always
[Install]
WantedBy=multi-user.target
EOF
Systemdの設定を更新した後、karton-mwdb-reporterサービスを有効にして起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now karton-mwdb-reporter
ここまでの設定で、Kartonの初期設定が完了します。
Karton連携の動作確認
MWDBとKartonとの連携が取れているかを確認する方法について以下に示します。
http://127.0.0.1:8080/uploadにアクセスし、適当なファイルをアップロードします。図14の例では、「MalwareAnalysisSample.exe」という名前のPEファイルをアップロードしています。


アップロードが完了すると図15のようなページに遷移します。


図16のように右側のKarton analysisの項目が「processing」から「done」に変化すればKartonサービスによる解析が完了しています。
ここまでのセットアップでは、karton-classifierとkarton-mwdb-reporterのサービスが稼働しています。正常にセットアップできていれば、この2つのサービスによる解析の結果として「runnable:win32:exe」というタグが追加されます。


便利なKartonサービス
ここまでで、MWDBとKartonを最低限動作させるための初期設定が完了しました。さらに追加すると便利である以下の2つのKartonサービスについて紹介します。
- karton-archive-extractorサービス: 汎用的なアーカイブの展開機能を持つサービス
- karton-yaramatcherサービス: YARAスキャンを行うサービス
karton-archive-extractorサービス
karton-archive-extractorサービスは、汎用的なアーカイブの展開機能を持つサービスです。zipやrarなどの圧縮されたファイルを展開し、展開後のファイルを自動でMWDBに投稿します。以下に、karton-archive-extractorサービスのセットアップ方法について示します。
karton-archive-extractorの実行に必要なパッケージをインストールします。
$ sudo apt install -y p7zip-full rar unace-nonfree cabextract lzip libjpeg8-dev zlib1g-dev zpaq gnupg
mwdbユーザでvirtualenv環境をアクティベートします。
$ sudo -u mwdb /bin/bash
$ cd /opt/mwdb
$ source ./venv/bin/activate
karton-archive-extractorをインストールします。
(venv) $ pip install karton-archive-extractor
virtualenv環境をディアクティベートし、元のユーザに戻ります。
(venv) $ deactivate
$ exit
$ sudo apt install -y git linux-libc-dev-i386-cross gcc-x86-64-linux-gnux32 libc6-dev-amd64-cross
$ git clone https://github.com/hatching/tracy.git /tmp/tracy
$ cd /tmp/tracy/src
$ make
$ cd ./zipjail
$ make
$ sudo chown mwdb:mwdb zipjail
$ sudo mv /tmp/tracy/src/zipjail/zipjail $(find /opt/mwdb/venv/ -type f -name zipjail.elf)
$ rm -rf /tmp/tracy
karton-archive-extractorサーバの起動用にSystemdのサービスファイルを作成します。
$ sudo tee /etc/systemd/system/karton-archive-extractor.service << 'EOF' > /dev/null
[Unit]
Description=karton-archive-extractor
Documentation=https://github.com/CERT-Polska/karton-archive-extractor
Requires=karton-system.service
After=karton-system.service
[Service]
WorkingDirectory=/opt/mwdb/
User=mwdb
Group=mwdb
ExecStart=/bin/bash -c "source /opt/mwdb/venv/bin/activate; /opt/mwdb/venv/bin/karton-archive-extractor"
Restart=always
[Install]
WantedBy=multi-user.target
EOF
Systemdの設定を更新した後、karton-archive-extractorサービスを有効にして起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now karton-archive-extractor
動作確認として、http://127.0.0.1:8080/uploadにアクセスし、infectedというパスワードで暗号化されたzipファイルをアップロードします。図17の例では、「MalwareAnalysisSample.zip」という名前の暗号化されたzipファイルをアップロードしています。


Kartonによる分析が終了すると、図18のようなページに遷移します。zipファイルが展開され、展開後のファイルがchildとして紐づいていることが分かります。Relationsタブを見るとそれぞれのファイルの親子関係が確認できます。


karton-yaramatcherサービス
karton-yaramatcherサービスは、MWDBにアップロードされたファイルに対して、YARAスキャンを行うサービスです。以下に、karton-yaramatcherサービスのセットアップ方法について示します。
mwdbユーザでvirtualenv環境をアクティベートします。
$ sudo -u mwdb /bin/bash
$ cd /opt/mwdb
$ source ./venv/bin/activate
karton-mwdb-reporterをインストールします。
(venv) $ pip install karton-yaramatcher
YARAルール格納用のディレクトリを作成します。
(venv) $ mkdir -p /opt/mwdb/yara_rules
YARAルールを追加します。ここでは、例として以下の2つルールを追加しています。
(venv) $ git clone https://github.com/JPCERTCC/jpcert-yara.git /opt/mwdb/yara_rules/jpcert_yara
(venv) $ git clone https://github.com/elastic/protections-artifacts.git /opt/mwdb/yara_rules/elastic_yara
virtualenv環境をディアクティベートし、元のユーザに戻ります。
(venv) $ deactivate
$ exit
karton-yaramatcherサーバの起動用にSystemdのサービスファイルを作成します。
$ sudo tee /etc/systemd/system/karton-yaramatcher.service << 'EOF' > /dev/null
[Unit]
Description=karton-yaramatcher
Documentation=https://github.com/CERT-Polska/karton-yaramatcher
Requires=karton-system.service
After=karton-system.service
[Service]
WorkingDirectory=/opt/mwdb/
User=mwdb
Group=mwdb
ExecStart=/bin/bash -c "source /opt/mwdb/venv/bin/activate; /opt/mwdb/venv/bin/karton-yaramatcher --rules /opt/mwdb/yara_rules"
Restart=always
[Install]
WantedBy=multi-user.target
EOF
Systemdの設定を更新した後、karton-yaramatcherサービスを有効にして起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now karton-yaramatcher
動作確認として、http://127.0.0.1:8080/uploadにアクセスし、YARAルールにマッチするファイルをアップロードします。図19の例では、メモリから抽出したRemcosRAT[25]を圧縮したzipファイルをアップロードしています。


Kartonによる分析が終了すると、図20のようなページに遷移します。RemcosRATに対してYARAスキャンが行われ、マッチしたルールがタグとして付与されていることが確認できます。


まとめ
本ブログでは、マルウェア管理システムである「MWDB」とマルウェア分析システムの「Karton」について紹介し、その構築方法について説明しました。MWDBとKartonを連携させたサービスを構築することで効率よくマルウェアの収集・分析が行えます。
本ブログでは、一部のKartonサービスのみを紹介しましたが、他にもkarton-unpacker[26]やmwcfg
[27]などの便利なサービスがいくつか存在します。また、Kartonサービス自体も簡単に実装が可能ですので、独自のKartonサービスを追加していくことで、より効率的にマルウェアの分析が行えるようになります。非常に便利なツールの一つですので一度構築してみることをおすすめします。
参考文献
- [1]GitHub - CERT-Polska/mwdb-core: Malware repository component for samples & static configuration with REST API interface.
https://github.com/CERT-Polska/mwdb-core
- [2]Set up your own malware repository with MWDB Core | CERT Polska
https://cert.pl/en/posts/2020/10/set-up-your-own-malware-repository-with-mwdb-core/
- [3]About us | CERT Polska
https://cert.pl/en/about-us/
- [4]GitHub - CERT-Polska/karton: Distributed malware processing framework based on Python, Redis and S3.
https://github.com/CERT-Polska/karton
- [5]Set up your own malware analysis pipeline with Karton | CERT Polska
https://cert.pl/en/posts/2020/12/set-up-your-own-malware-analysis-pipeline-with-karton/
- [6]GitHub - CERT-Polska/karton-dashboard: A small Flask application that allows for Karton task and queue introspection.
https://github.com/CERT-Polska/karton-dashboard
- [7]GitHub - CERT-Polska/karton-classifier: File type classifier for the Karton framework.
https://github.com/CERT-Polska/karton-classifier
- [8]GitHub - CERT-Polska/karton-archive-extractor: Extractor of various archive formats for Karton framework
https://github.com/CERT-Polska/karton-archive-extractor
- [9]GitHub - CERT-Polska/karton-config-extractor: Static configuration extractor for the Karton framework
https://github.com/CERT-Polska/karton-config-extractor
- [10]GitHub - CERT-Polska/karton-mwdb-reporter: Karton service that uploads analyzed artifacts and metadata to MWDB Core
https://github.com/CERT-Polska/karton-mwdb-reporter
- [11]GitHub - CERT-Polska/karton-yaramatcher: File and analysis artifacts yara matcher for Karton framework
https://github.com/CERT-Polska/karton-yaramatcher
- [12]GitHub - CERT-Polska/karton-asciimagic: Various decoders for ascii-encoded executables for Karton framework
https://github.com/CERT-Polska/karton-asciimagic
- [13]GitHub - CERT-Polska/karton-autoit-ripper: AutoIt script ripper for Karton framework
https://github.com/CERT-Polska/karton-autoit-ripper
- [14]Amazon S3(拡張性と耐久性を兼ね揃えたクラウドストレージ)|AWS
https://aws.amazon.com/jp/s3/
- [15]MinIO | S3 & Kubernetes Native Object Storage for AI
https://min.io/
- [16]PostgreSQL: The world's most advanced open source database
https://www.postgresql.org/
- [17]Welcome to Flask — Flask Documentation (3.0.x)
https://flask.palletsprojects.com/en/3.0.x/
- [18]Gunicorn - Python WSGI HTTP Server for UNIX
https://gunicorn.org/
- [19]
- [20]Redis - The Real-time Data Platform
https://redis.io/
- [21]GitHub - CAPESandbox/sflock: Sample staging & detonation utility to be used in combination with Cuckoo Sandbox.
https://github.com/CAPESandbox/sflock
- [22]GitHub - tracy/src/zipjail at main · hatching/tracy
https://github.com/hatching/tracy/tree/main/src/zipjail
- [23]GitHub - JPCERTCC/jpcert-yara: JPCERT/CC public YARA rules repository
https://github.com/JPCERTCC/jpcert-yara
- [24]GitHub - elastic/protections-artifacts: Elastic Security detection content for Endpoint
https://github.com/elastic/protections-artifacts
- [25]MalwareBazaar | SHA256 653f628893de874793983dc90b8868c7e56229e28f7eaf79d615c55490179411 (RemcosRAT)
https://bazaar.abuse.ch/sample/653f628893de874793983dc90b8868c7e56229e28f7eaf79d615c55490179411/
- [26]GitHub - https://github.com/c3rb3ru5d3d53c/karton-unpacker
https://github.com/c3rb3ru5d3d53c/karton-unpacker
- [27]GitHub - c3rb3ru5d3d53c/mwcfg: A Feature Rich Modular Malware Configuration Extraction Utility for MalDuck
https://github.com/c3rb3ru5d3d53c/mwcfg
執筆者プロフィール
松本 隆志(まつもと たかし)
セキュリティ技術センター リスクハンティング・アナリシスグループ
マルウェア解析や攻撃者の行動分析などの業務を経て、現在はペネトレーションテスト、脆弱性診断などに従事。
これまでに Botconf や JSAC で講演。
趣味は、CTFとコーヒーを飲むこと。

執筆者の他の記事を読む
アクセスランキング
2025年4月6日~4月12日に読まれた記事のランキング