Help us understand the problem. What is going on with this article?

TAXIIサーバを入れてみる

はじめに

STIX/TAXIIに興味を持った

  • 何かしら脆弱性情報をチェックしていくのに便利な方法はないものか…
  • メールは来ているけど人の目で見て対応するのはコスト高いしメールを整形するのもメンテが大変そう
  • STIX/TAXIIって便利かも
  • OPENTAXIIを試しに使ってみよう&STIX2.0がどんなものか見てみよう

前提

OSはCentOS 7.4 (Minimumインストール)
適当に仮想環境を作って入れました。

$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

インストール

pipのインストール

pipはepelに入っているので、まずはepelを入れるところから。

$ sudo yum install epel-release

ついでにPostgreSQLもインストール

DB使って情報をやりとりしているみたいです。
SQLiteがデフォルトですが、公式サイトにはPostgreSQLがおすすめと書いてあったのでPostgreSQLを使うことにしました。

$ sudo yum install postgresql
$ sudo yum install postgresql-server postgres-contrib
S sudo su - postgres
$ initdb

OPENTAXIIのインストール

pipでインストールできるのでだいぶ楽です。

$ sudo pip install opentaxii

ユーザとDB作成

$ sudo useradd taxii -m
$ su - postgres
$ psql
postgres=# CREATE USER taxii WITH ENCRYPTED PASSWORD '(パスワード)' CREATEDB;
postgres=# \q
$ exit
$ su - taxii
$ createdb

コンフィグファイルの作成

pipでインストールすると、opentaxiiは

/usr/lib/python2.7/site-packages/opentaxii

にできる。

デフォルトをコピーして編集する。

$ cd /usr/lib/python2.7/site-packages/opentaxii
$ cp -p defaults.yml taxiitest.yml
$ vi taxiitest.yml

変更箇所は下記の通り。

diff -u defaults.yml taxiitest.yml 
--- defaults.yml        2017-02-17 05:51:57.000000000 +0900
+++ taxiitest.yml       2018-04-23 20:45:39.547623862 +0900
@@ -7,13 +7,13 @@
 persistence_api:
   class: opentaxii.persistence.sqldb.SQLDatabaseAPI
   parameters:
-    db_connection: sqlite:////tmp/data.db
+    db_connection: postgresql://taxii:(パスワード)@localhost:5432/taxii
     create_tables: yes

 auth_api:
   class: opentaxii.auth.sqldb.SQLDatabaseAPI
   parameters:
-    db_connection: sqlite:////tmp/auth.db
+    db_connection: postgresql://taxii:(パスワード)@localhost:5432/taxii
     create_tables: yes
     secret: SECRET-STRING-NEEDS-TO-BE-CHANGED

ドキュメントにはserver.ymlとcollections.ymlを使うと書いてありますが、リンク先は404...
data-configuration.ymlがそれにあたります。共通で使えます。

$ sudo opentaxii-create-services -c data-configuration.yml 
$ sudo opentaxii-create-collections -c data-configuration.yml 

そしたら…

ImportError: No module named psycopg2

パッケージが入っていないと言われたので入れます。

$ sudo pip install psycopg2
$ sudo pip install psycopg2-binary

gunicornのインストール

$ sudo pip install gunicorn

gnunicornを起動する
バックグラウンドで起動しないと待ちっぱなしになる

$ gunicorn opentaxii.http:app --bind localhost:9000 &

動作確認

$ curl http://localhost:9000/management/health
{
  "alive": true
}

taxiiのユーザ作成が漏れていたので作成します。

$ opentaxii-create-account -u taxii -p taxii
2018-04-24T06:27:02.067965Z [opentaxii.utils] info: api.initialized {timestamp=2018-04-24T06:27:02.067965Z, logger=opentaxii.utils, api=opentaxii.persistence.sqldb.SQLDatabaseAPI, event=api.initialized, level=info}
2018-04-24T06:27:02.097309Z [opentaxii.utils] info: api.initialized {timestamp=2018-04-24T06:27:02.097309Z, logger=opentaxii.utils, api=opentaxii.auth.sqldb.SQLDatabaseAPI, event=api.initialized, level=info}
2018-04-24T06:27:02.097767Z [opentaxii.server] info: opentaxii.server_configured {timestamp=2018-04-24T06:27:02.097767Z, logger=opentaxii.server, event=opentaxii.server_configured, level=info}
2018-04-24T06:27:02.244743Z [opentaxii.auth.manager] info: account.created {username=taxii, timestamp=2018-04-24T06:27:02.244743Z, logger=opentaxii.auth.manager, event=account.created, level=info}
2018-04-24T06:27:02.308599Z [opentaxii.cli.auth] info: account.token {username=taxii, level=info, timestamp=2018-04-24T06:27:02.308599Z, token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50X2lkIjoxLCJleHAiOjE1MjQ1NTQ4MjJ9.LTOorS4xfHkvYC0fe2iu12KSXXypbQE4paJoOxv26_s, logger=opentaxii.cli.auth, event=account.token}

taxiiの通信にはcabbyが簡単らしいのでインストール。

$ sudo pip install cabby

情報の取得先を取ってみる。

$ taxii-discovery --path http://localhost:9000/services/discovery-a
2018-04-24 16:20:06,529 INFO: Sending Discovery_Request to http://localhost:9000/services/discovery-a
2018-04-24 16:20:06,553 INFO: 7 services discovered
=== Service Instance ===
  Service Type: INBOX
  Service Version: urn:taxii.mitre.org:services:1.1
  Protocol Binding: urn:taxii.mitre.org:protocol:http:1.0
  Service Address: http://localhost:9000/services/inbox-a
  Message Binding: urn:taxii.mitre.org:message:xml:1.0
  Message Binding: urn:taxii.mitre.org:message:xml:1.1
  Inbox Service AC: []
  Available: True
  Message: Custom Inbox Service Description A

=== Service Instance ===
  Service Type: INBOX
  Service Version: urn:taxii.mitre.org:services:1.1
  Protocol Binding: urn:taxii.mitre.org:protocol:http:1.0
  Service Address: http://localhost:9000/services/inbox-b
  Message Binding: urn:taxii.mitre.org:message:xml:1.0
  Message Binding: urn:taxii.mitre.org:message:xml:1.1
  Inbox Service AC: ['urn:stix.mitre.org:xml:1.1.1', 'urn:custom.example.com:json:0.0.1']
  Available: True
  Message: Custom Inbox Service Description B

=== Service Instance ===
  Service Type: DISCOVERY
  Service Version: urn:taxii.mitre.org:services:1.1
  Protocol Binding: urn:taxii.mitre.org:protocol:http:1.0
  Service Address: http://localhost:9000/services/discovery-a
  Message Binding: urn:taxii.mitre.org:message:xml:1.0
  Message Binding: urn:taxii.mitre.org:message:xml:1.1
  Available: True
  Message: Custom Discovery Service description

=== Service Instance ===
  Service Type: DISCOVERY
  Service Version: urn:taxii.mitre.org:services:1.1
  Protocol Binding: urn:taxii.mitre.org:protocol:https:1.0
  Service Address: https://localhost:9000/services/discovery-a
  Message Binding: urn:taxii.mitre.org:message:xml:1.0
  Message Binding: urn:taxii.mitre.org:message:xml:1.1
  Available: True
  Message: Custom Discovery Service description

=== Service Instance ===
  Service Type: COLLECTION_MANAGEMENT
  Service Version: urn:taxii.mitre.org:services:1.1
  Protocol Binding: urn:taxii.mitre.org:protocol:http:1.0
  Service Address: http://localhost:9000/services/collection-management-a
  Message Binding: urn:taxii.mitre.org:message:xml:1.0
  Message Binding: urn:taxii.mitre.org:message:xml:1.1
  Available: True
  Message: Custom Collection Management Service description

=== Service Instance ===
  Service Type: COLLECTION_MANAGEMENT
  Service Version: urn:taxii.mitre.org:services:1.1
  Protocol Binding: urn:taxii.mitre.org:protocol:https:1.0
  Service Address: https://localhost:9000/services/collection-management-a
  Message Binding: urn:taxii.mitre.org:message:xml:1.0
  Message Binding: urn:taxii.mitre.org:message:xml:1.1
  Available: True
  Message: Custom Collection Management Service description

=== Service Instance ===
  Service Type: POLL
  Service Version: urn:taxii.mitre.org:services:1.1
  Protocol Binding: urn:taxii.mitre.org:protocol:http:1.0
  Service Address: http://localhost:9000/services/poll-a
  Message Binding: urn:taxii.mitre.org:message:xml:1.0
  Message Binding: urn:taxii.mitre.org:message:xml:1.1
  Available: True
  Message: Custom Poll Service description

ひとまず取ることはできそう…なものの取った後の整形とかが大変そうだと思ったので作業が止まっています…
折をみて再開するつもりです。

参考

・Opentaxii
https://opentaxii.readthedocs.io/en/stable/
・IPA「検知指標情報自動交換手順TAXII概説」
https://www.ipa.go.jp/security/vuln/TAXII.html
・他(色々と調べたものの失念…)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away