libtaxiiを触ってみる


## きっかけ

仕事で stix ドキュメントを扱う機会があり、より理解を深める為に
まずはクライアント側とデータの内容を勉強する為、触ってみる。

## 環境

- ローカル環境は以下のとおり。

```
% sw_vers     
ProductName:	Mac OS X
ProductVersion:	10.11.6
BuildVersion:	15G1217

% python -V
Python 2.7.13

% pip -V
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)

% pip show libtaxii
Name: libtaxii
Version: 1.1.110
Summary: TAXII Library.
Home-page: http://taxii.mitre.org/
Author: Mark Davidson
Author-email: mdavidson@mitre.org
License: UNKNOWN
Location: /usr/local/lib/python2.7/site-packages
Requires: six, lxml, python-dateutil
```

- taxiiサーバは下記を利用。

Hail a TAXII.com ( http://hailataxii.com )
デモの方法は下記に記載されています。
Hailataxii and Libtaxii Demo
( https://github.com/STIXProject/schemas/wiki/Hailataxii-and-Libtaxii-Demo )


## Stix ドキュメント取得手順

1. サーバ側で管理されているサービスを確認する

	まずサーバにてどのようなサービスが利用可能なのか？を確認したい。
	Hail a TAXII.com にアクセスすると、以下の情報が記載されている。
	
	・ Our data is accessible via the TAXII-HTTP Message Protocol. (1.0 & 1.1)
	・ The discovery service is located at http://hailataxii.com/taxii-discovery-service
	・ Anonymous connections are accepted.
	・ Clients that require login details can use HTTP-Basic user=guest, password=guest.
	
	上記の情報をもとに対応サービス確認のため、サーバへ接続する。
	
	```
	% discovery_client --host hailataxii.com --path /taxii-discovery-service --username guest --pass guest
	Request:

	Message Type: Discovery_Request
	Message ID: 7418183229071165630

	Response:

	Message Type: Discovery_Response
	Message ID: 73726; In Response To: 7418183229071165630
	  === 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: http://hailataxii.com:80/taxii-data
    Message Binding: urn:taxii.mitre.org:message:xml:1.1
    Available: True
    Message: None
	  === 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: http://hailataxii.com:80/taxii-data
    Message Binding: urn:taxii.mitre.org:message:xml:1.1
    Available: True
    Message: None
	  === Service Instance ===
    Service Type: POLL
    Service Version: urn:taxii.mitre.org:services:1.1
    Protocol Binding: urn:taxii.mitre.org:protocol:https:1.0
    Service Address: http://hailataxii.com:80/taxii-data
    Message Binding: urn:taxii.mitre.org:message:xml:1.1
    Available: True
    Message: None
	```
	
	まず、データを参照する為には、以下のURLにアクセスする必要があることが分かります。
	`Service Address: http://hailataxii.com:80/taxii-data`
	
	その上で、上記には以下の内容が記載されています。
	
	・ Service Type: DISCOVERY
	Taxii サービスを公開している。
	
	・ Service Type: COLLECTION_MANAGEMENT
	どのような集積データを管理しているのか？その種類を確認することが可能。
	
	・ Service Type: POLL
	集積データを参照することが可能。
	
	本サーバでは上記が利用できる、ということが分かる。
	なお、taxiiには上記の他、 `Inbox` という、データを投稿できるサービスもありますが、今回は許可されていないことが分かります。
	
2. データの種類を確認する

	1.にて、データの種類を確認するには、 `COLLECTION_MANAGEMENT` にアクセスすることが分かった。
	これまで判明した情報をもとに、次に種類を確認するため、サーバへ接続する。
	
	```
	% collection_information_client --host hailataxii.com --username guest --pass guest --path /taxii-data
	Request:

	Message Type: Collection_Information_Request
	Message ID: 4659866494431617975

	Response:

	Message Type: Collection_Information_Response
	Message ID: 85921; In Response To: 4659866494431617975
	Contains 11 Collection Informations
	=== Data Collection Information ===
    Collection Name: guest.Abuse_ch
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.Abuse_ch
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.CyberCrime_Tracker
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.CyberCrime_Tracker
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.EmergineThreats_rules
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.EmergineThreats_rules
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.EmergingThreats_rules
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.EmergingThreats_rules
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.Lehigh_edu
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.Lehigh_edu
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.MalwareDomainList_Hostlist
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.MalwareDomainList_Hostlist
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.blutmagie_de_torExits
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.blutmagie_de_torExits
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.dataForLast_7daysOnly
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.dataForLast_7daysOnly
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.dshield_BlockList
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.dshield_BlockList
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: guest.phishtank_com
    Collection Type: DATA_FEED
    Available: True
    Collection Description: guest.phishtank_com
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================

	=== Data Collection Information ===
    Collection Name: system.Default
    Collection Type: DATA_FEED
    Available: True
    Collection Description: system.Default
    Supported Content:     urn:stix.mitre.org:xml:1.0
    === Polling Service Instance ===
      Poll Protocol: urn:taxii.mitre.org:protocol:https:1.0
      Poll Address: http://hailataxii.com:80/taxii-data
      Message Binding: urn:taxii.mitre.org:message:xml:1.1
	==================================
	```
	
	このサーバでは、10種類のデータ(1種類重複)を提供している。
	それぞれ、データの種類 `Collection Name` と、その種類データの参照先 `Poll Address` が分かる。
	
	・ Collection Name: guest.Abuse_ch
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.CyberCrime_Tracker
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.EmergineThreats_rules
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.Lehigh_edu
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.MalwareDomainList_Hostlist
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.blutmagie_de_torExits
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.dataForLast_7daysOnly
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.dshield_BlockList
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: guest.phishtank_com
	Poll Address: http://hailataxii.com:80/taxii-data
	
	・ Collection Name: system.Default
	Poll Address: http://hailataxii.com:80/taxii-data


3. 実際にデータを参照する

	1.にてデータの種類を、2.にてデータの参照先を確認することができた。
	それでは、実際にデータを取得してみる。
	※ 以下のコマンドを実行すると、カレントディレクトリに多くのデータがダウンロードされる為、どこで取得するかは注意してください。
	
	```
	% poll_client --host hailataxii.com --username guest --pass guest --path /taxii-data --collection guest.Abuse_ch
	Request:

	Message Type: Poll_Request
	Message ID: 7016854206412201300
	Collection Name: guest.Abuse_ch
	Excl. Begin TS Label: None
	Incl. End TS Label: None
	=== Poll_Parameters ===
    Response type: FULL

	Response:

	Message Type: Poll_Response
	Message ID: 3510; In Response To: 7016854206412201300
	Collection Name: guest.Abuse_ch
	More: False
	Result ID: None
	Result Part Num: 1
	Incl. End TS Label: 2017-03-27T14:11:06.739630+00:00
	=== Content Block ===
    Content Binding: urn:stix.mitre.org:xml:1.1.1
    Content length: 4462
    (Content not printed for brevity)
    Timestamp Label: 2017-03-27 14:11:06.959883+00:00
    Message: None
    Padding: None
    .
    . (コンテンツの情報)
    .
    File created: guest.Abuse_ch_STIX111_t2017_03_27T14_11_06_959883_00_00.xml
    .
    . (作成されたコンテンツファイル)
    .
	```
	
	実際にデータがダウンロードされ、14,390ファイルが作成されました。
	次回は、それぞれのコマンドの中身、またコンテンツファイルを確認したいと思います。
	
## 参照サイト

- Hail a TAXII.com : http://hailataxii.com

- libtaxii : https://github.com/TAXIIProject/libtaxii

- Hailataxii and Libtaxii Demo : https://github.com/STIXProject/schemas/wiki/Hailataxii-and-Libtaxii-Demo

- 検知指標情報自動交換手順TAXII概説 : https://www.ipa.go.jp/security/vuln/TAXII.html