ATT&CKによる攻撃行動の分類
PowerShell実行、サービス登録、内容不明の通信を調べます。STIXが扱う指標や関係の考え方と合わせ、指標一致と観測された行動を混同せずに整理する方法を学びます。
説明
ATT&CKの技術IDは攻撃に使われる行動を整理する分類です。分類を付けたこと自体が侵害の証明になるわけではありません。観測した処理と元の証拠を併記して、分類の根拠を確認します。
PowerShell実行、サービス登録、内容不明の通信を調べます。STIXが扱う指標や関係の考え方と合わせ、指標一致と観測された行動を混同せずに整理する方法を学びます。
1行動と証拠の対応を読む
actionは調査で確認した行動、evidenceはその根拠です。
from oplab import *
db=connect(9)
show(db, 'SELECT行動と証拠の対応を読む * FROM behavior ORDER BY id')PowerShellとサービス登録には分類があり、通信の内容は未確認です。不明な箇所を無理に技術IDで埋めないようにします。
2スクリプト実行の根拠を絞る
T1059.001はPowerShellの利用を扱う分類です。
show(db, 'SELECTスクリプト実行の根拠を絞る id,action,evidence FROM behavior WHERE technique="T1059.001"')p7とs7を根拠にPowerShell実行を分類しています。単にpowershellという文字が資料にあっただけの場合とは区別します。
3登録の証拠と実行の証拠を分ける
T1543.003はWindowsサービスに関する分類です。
show(db, 'SELECT登録の証拠と実行の証拠を分ける id,action,evidence FROM behavior WHERE technique="T1543.003"')s8はサービス登録の証拠です。サービスが起動したことまでこの行で確認した扱いにはしません。
4分類できない内容を残す
NULLはこの資料だけでは具体的な行動分類を決めていない項目です。
show(db, 'SELECT分類できない内容を残す id,action,evidence FROM behavior WHERE technique IS NULL')f7だけでは送信内容や目的を判断できません。「通信がある」だけで情報持出しの技術へ対応させると、主張が証拠を越えます。
5指標と行動の情報を分ける
IOCの信頼度は情報源に付随する値で、行動分類の証明力へ自動的に引き継がれません。
show(db, 'SELECT指標と行動の情報を分ける i.id,i.type,i.source,i.confidence FROM ioc i ORDER BY id')STIXでは指標、観測、関係などを別のオブジェクトとして表現できます。種類の違う情報を一つの確定事実へ潰さず管理します。
6STIXの指標と観測を別のオブジェクトとして開く
indicatorは照合条件、observed-dataは観測情報です。この試料はドメインを一度観測した資料で、攻撃者への帰属を表す関係は含めていません。
from oplab import ROOT
import json
bundle=json.loads((ROOT/"OP-09/indicator.json").read_text())
for obj in bundle["objectsSTIXの指標と観測を別のオブジェクトとして開く"]: print(json.dumps(obj,sort_keys=True))指標にはpatternと有効期間、観測にはfirst_observed、last_observed、number_observedがあります。object_refsは観測したドメインのオブジェクトIDを参照し、指標との一致判定そのものとは別です。
7根拠付きの分類一覧を出す
分類IDと証拠を必ず同じ行に残します。
show(db, 'SELECT根拠付きの分類一覧を出す technique,evidence,action FROM behavior WHERE technique IS NOT NULL ORDER BY technique')分類済みは2件です。技術IDの数は攻撃の全体像をどれだけ網羅したかの証明にはならず、未観測の経路は別に残ります。
まとめ
分類済みは2件です。技術IDの数は攻撃の全体像をどれだけ網羅したかの証明にはならず、未観測の経路は別に残ります。
表示された証拠IDと検索条件を残すと、調査結果を元の記録までたどれます。
操作履歴と解説を振り返れます。
Python 3.15 / SQLite・固定の調査記録
from oplab import *
db=connect(9)
show(db, 'SELECT * FROM behavior ORDER BY id')id | action | evidence | technique b1 | PowerShell script execution | process p7 + script s7 | T1059.001 b2 | Windows service installed | service s8 | T1543.003 b3 | unknown outbound content | flow f7 | NULL
show(db, 'SELECT id,action,evidence FROM behavior WHERE technique="T1059.001"')id | action | evidence b1 | PowerShell script execution | process p7 + script s7
show(db, 'SELECT id,action,evidence FROM behavior WHERE technique="T1543.003"')id | action | evidence b2 | Windows service installed | service s8
show(db, 'SELECT id,action,evidence FROM behavior WHERE technique IS NULL')id | action | evidence b3 | unknown outbound content | flow f7
show(db, 'SELECT i.id,i.type,i.source,i.confidence FROM ioc i ORDER BY id')id | type | source | confidence i1 | ip | feed-a | 60 i2 | domain | feed-a | 70 i3 | sha256 | sample-analysis | 90 i4 | ip | feed-b | 40
from oplab import ROOT
import json
bundle=json.loads((ROOT/"OP-09/indicator.json").read_text())
for obj in bundle["objects"]: print(json.dumps(obj,sort_keys=True)){"created": "2026-01-07T00:00:00Z", "id": "indicator--4f733b63-4066-4f60-88ef-4e63cc88df53", "modified": "2026-01-07T00:00:00Z", "pattern": "[domain-name:value = 'files.example.test']", "pattern_type": "stix", "spec_version": "2.1", "type": "indicator", "valid_from": "2026-01-07T00:00:00Z", "valid_until": "2026-01-08T00:00:00Z"}
{"id": "domain-name--652a6734-981c-4d97-9b35-e41d50bb47d0", "spec_version": "2.1", "type": "domain-name", "value": "files.example.test"}
{"created": "2026-01-07T01:00:00Z", "first_observed": "2026-01-07T01:00:00Z", "id": "observed-data--91a59e3c-5e51-445e-9fe1-082ca57ad8f3", "last_observed": "2026-01-07T01:00:00Z", "modified": "2026-01-07T01:00:00Z", "number_observed": 1, "object_refs": ["domain-name--652a6734-981c-4d97-9b35-e41d50bb47d0"], "spec_version": "2.1", "type": "observed-data"}show(db, 'SELECT technique,evidence,action FROM behavior WHERE technique IS NOT NULL ORDER BY technique')technique | evidence | action T1059.001 | process p7 + script s7 | PowerShell script execution T1543.003 | service s8 | Windows service installed
演習完了