
Mitre ATT&CK Frameworkと対話するためのPythonパッケージ
.______ ____ ____ ___ .___________.___________. ______ __ ___
| _ \ \ \ / / / \ | | | / || |/ /
| |_) | \ \/ / / ^ \ `---| |----`---| |----`| ,----'| ' /
| ___/ \_ _/ / /_\ \ | | | | | | | <
| | | | / _____ \ | | | | | `----.| . \
| _| |__| /__/ \__\ |__| |__| \______||__|\__\
MITRE ATT&CK フレームワークと対話するための Python パッケージ
現在のバージョンは 7.1.1 です
pyattck は MITRE ATT&CK フレームワークのための軽量なフレームワークです。このパッケージは、MITRE Enterprise、PRE-ATT&CK、Mobile、および ICS フレームワークから詳細を抽出します。
pyattck は、組織や個人が MITRE ATT&CK フレームワークにプログラムでアクセスできるように支援します。つまり、Enterprise、Mobile、Pre-Attck、ICS フレームワークで定義されたすべてのアクター、マルウェア、緩和策、戦術、技法、ツールに、コマンドラインユーティリティを介して、あるいは自分のコードベースに組み込んでアクセスできるということです。
このデータに自動化された(スクリプト化/コーディングされた)方法でアクセスしたい理由は数多くありますが、いくつかの例を挙げます。
pyattck が提供する他の利点としては、追加のコンテキストデータを提供できることもあります。このデータの詳細についてはこちらを参照してください。基本的には、pyattck は複数のオープンソースリポジトリを利用して、技法の実行に使用されるコマンド、悪意のあるアクターの国やその他の詳細、定義されたツール/マルウェアに類似したマルウェアの他の亜種など、追加のコンテキストデータを収集します。
この追加のコンテキストこそが、pyattck を真に強力なものにし、人々が検出ルールのより堅牢なテストと検証を構築したり、テストの仮定を検証したりすることを可能にします。実際、pyattck をブルーチーム、レッドチーム、パープルチームが組織(そして自身)を守るために活用できる方法は無数にあります。
pyattck パッケージは、MITRE ATT&CK フレームワークからすべての戦術、技法、アクター、マルウェア、ツール、緩和策と、MITRE ATT&CK データセット内で定義されたすべての関係(サブ技法を含む)を取得します。
さらに、技法、アクター、ツール(該当する場合)には、サードパーティのリソースから収集されたデータが含まれるようになり、さまざまなプロパティを介してアクセスできます。これらの機能の詳細については、外部データセットを参照してください。
pyattck パッケージでは次のことが可能です。
pyattck は OS X、Linux、Windows にインストールできます。また、ソースから直接インストールすることもできます。インストールするには、該当するオペレーティングシステムの見出しの下にあるコマンドを参照してください。
pip install pyattck
git clone https://github.com/swimlane/pyattck.git
cd pyattck
python setup.py install
pyattck を使用するには、Attck オブジェクトをインスタンス化する必要があります。各クラスを直接操作することもできますが、意図された使用方法は Attck オブジェクトを介することです。
from pyattck import Attck
attack = Attck()
デフォルトでは、sub-techniques は各技法オブジェクトの下でアクセス可能です。この動作をオフにするには、Attck オブジェクトを作成するときに nested_techniques=False を渡します。
例として、デフォルトの動作は次のようになります。
from pyattck import Attck
attack = Attck()
for technique in attack.enterprise.techniques:
print(technique.id)
print(technique.name)
for subtechnique in technique.techniques:
print(subtechnique.id)
print(subtechnique.name)
Attck オブジェクトでは、次の main プロパティにアクセスできます。
MITRE ATT&CK フレームワークを指定すると、追加のプロパティにアクセスできます。
Enterprise プロパティの下でアクセス可能なオブジェクトは次のとおりです。
enterprise プロパティの下のオブジェクトタイプの詳細については、Enterprise を参照してください。
PreAttck プロパティの下でアクセス可能なオブジェクトは次のとおりです。
preattck プロパティの下のオブジェクトタイプの詳細については、PreAttck を参照してください。
Mobile プロパティの下でアクセス可能なオブジェクトは次のとおりです。
mobile プロパティの下のオブジェクトタイプの詳細については、Mobile を参照してください。
ICS プロパティの下でアクセス可能なオブジェクトは次のとおりです。
ics プロパティの下のオブジェクトタイプの詳細については、ICS を参照してください。
pyattck 内の新しい対話型メニューシステムを利用するには、interactive を True に設定する必要があります。そうすると、対話型コンソールメニューシステムが起動します。
スクリプトを使用して、次のように実行して起動できます。
from pyattck import Attck
Attck(interactive=True)
または、コマンドラインで対話モードを実行することもできます。
pyattck --interactive
以下の gif の例を確認してください。

pyattck では、外部データを保存するかどうか、およびその保存場所を設定できます。
from pyattck import Attck
attck = Attck(
nested_techniques=True,
use_config=False,
save_config=False,
config_file_path='~/pyattck/config.yml',
data_path='~/pyattck/data',
enterprise_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_enterprise_attck_v1.json",
pre_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_pre_attck_v1.json",
mobile_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_mobile_attck_v1.json",
ics_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_ics_attck_v1.json",
nist_controls_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_nist_controls_v1.json",
generated_nist_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/attck_to_nist_controls.json",
**kwargs
)
デフォルトでは、pyattck は(現在)HTTP GET リクエストを使用して、それぞれの場所から最新の外部データを取得します。pyattck は現在、以下の場所からデータを取得しています。
Attck オブジェクトをインスタンス化するとき、いくつかのオプションがあります。4.0.0 以降では、以下のオプションを指定できます。
True に指定すると、pyattck は config_file_path の場所で指定された設定を取得しようとします。このファイルが破損しているか見つからない場合、指定された *_attck_json の場所からデータを取得するデフォルトの動作にフォールバックします。True に指定すると、pyattck は設定ファイルを config_file_path で設定された場所に保存します。さらに、ダウンロードしたすべてのファイルを指定された data_path の場所に保存します。*_attck_json パラメータのいずれかにダウンロード URL の代わりにローカルパスの場所を指定した場合、この場所を設定に保存し、今後その場所を参照します。~/pyattck/config.yml です。~/pyattck/data です。さらに、各 *_attck_json ファイルの場所を URI またはローカルファイルパスで指定できます。ローカルファイルパスを渡した場合、そのファイルから読み取るだけです。
デフォルト値を使用したか、これらの JSON ファイルを取得するために代替 URI の場所を指定した場合、HTTP リクエストの実行時に Python パッケージ Requests に渡される **kwargs を追加で渡すことができます。
私たちは、日々、多くの異なるオープンソースプロジェクトがリリースされていることを認識していますが、MITRE ATT&CK フレームワークのすべての垂直方向の既知の関係をユーザーが特定できるようにする、わかりやすい Python パッケージを提供したいと考えていました。
MITRE ATT&CK フレームワークに詳しくない場合、しっかりと理解しておくべきいくつかの主要な構成要素があります。最初のものは戦術と技法です。MITRE ATT&CK フレームワークを見ると、戦術は列であり、攻撃のさまざまな段階を表しています。
MITRE ATT&CK フレームワークは、すべてを網羅する/デファクトのセキュリティカバレッジマップではありません。それはあくまでフレームワークであり、セキュリティ体制を評価する際には、追加の手段も考慮する必要があります。
技法はフレームワークの行であり、特定の戦術(列)の下に分類されています。これらはフレームワーク内のデータポイントであり、セキュリティギャップを評価する際のガイダンスを提供します。さらに、(ほとんどの)技法には、緩和策のガイダンスと、その技法が記録された攻撃中に使用されたツール、マルウェア、さらにはアクター/グループとの関係に関する情報が含まれています。
つまり、組織が特定のアクター/グループによって使用される TTP(戦術、技法、手順)に焦点を当てている場合、MITRE ATT&CK フレームワークは最適です。組織がこのセキュリティ成熟度に達していない場合でも、心配はいりません!ATT&CK フレームワークは、シンプルでわかりやすいレイアウトで非常に優れたガイダンスを提供しますが、プログラム的には簡単ではありません。特に、フレームワークを使用してセキュリティコントロールを測定(またはマッピング)したい場合にはなおさらです。
機能やバグを追加したり、開発環境でコードを実行したりできます。
開発およびテスト環境をセットアップして実行するには、この Dockerfile を使用します。
Dockerfile を使用するには、このリポジトリディレクトリに cd して、次のコマンドを実行します。
docker build --force-rm -t pyattck .
docker run pyattck
これを実行すると、bin/test.py にあるテスト用 Python ファイルが呼び出されます。
このプロジェクト内のテストは、利用可能なすべてのプロパティとメソッドをカバーする必要があります。このプロジェクトが成長するにつれて、テストはより堅牢になりますが、今のところは、それらが存在し、出力を返すことをテストしています。
私たちの行動規範と、プルリクエストを提出するプロセスの詳細については、CONTRIBUTING.md をお読みください。
バージョニングには SemVer を使用しています。
特定のバージョンの pyattck の機能の詳細については、CHANGELOG.md を参照してください。
コントリビューターのリストもご覧ください。
このプロジェクトは MIT ライセンス の下でライセンスされています。
まず第一に、オープンソースプロジェクトに貢献してくださるすべての方々、特にこれらのプロジェクトのメンテナーと作成者に感謝いたします。彼らがいなければ、この機能は実現しなかったでしょう。
このデータセットは多くの異なるソースから生成されています。ソースを追加し続けるにつれて、ここに追加していきます。これらのプロジェクトすべてに改めて感謝します。順不同で、pyattck は以下のプロジェクトからのデータを利用しています。
.. toctree::
:titlesonly:
configuration
pyattck/attck
Dataset <https://github.com/swimlane/pyattck-data>
Data Models <https://github.com/swimlane/pyattck-data>
enterprise/enterprise
preattck/preattck
mobile/mobileattck
ics/icsattck