一覧SP-21-2 · デセプション:囮への接触の観測

囮へのアクセスと誤検知の調査

接触の評価条件と未観測になる範囲を具体的な資料で示します。

説明

囮に触れた理由には、探索のほか、正規のスキャンや保守作業もあります。配置した場所から到達できるか、通知の外向き経路が使えるかも検知範囲に影響します。

固定の到達表、保守予定、接触記録、外向き制限を照合します。除外を広げすぎる場合と、通知が出ない場合の意味を確認します。

接触の評価条件と未観測になる範囲を具体的な資料で示します。

1セグメント別の到達表を読む

allowedは固定構成での到達可否です。

from sp21 import * from sp02 import showセグメント別の到達表を読む db=connect() show(db,"SELECT * FROM reach ORDER BY segment,decoy")

segment-aからd8は到達できません。囮を一つ置けば全ネットワークを観測できるという構成ではありません。

2配置しても届かない経路を抽出する

allowed=0を探します。

show配置しても届かない経路を抽出する(db,"SELECT segment,decoy FROM reach WHERE allowed=0")

segment-aとd8の組です。未接触の評価には、そもそも接触可能な配置だったかを含めます。

3保守予定と接触を結び付ける

送信元、時刻、対象場所が一致する作業を取得します。

show(db,"SELECT e.id,e.source,d.location,m.start,m.finish FROM event e JOIN decoy d ON d.id=e.target JOIN maintenance m ON m.source=e.source AND m.scope=d.location AND e.t BETWEEN保守予定と接触を結び付ける m.start AND m.finish")

e4はscanner7の25〜35秒、segment-bの予定に一致します。予定との一致は正当性を検討する根拠であり、記録を消す理由にはしません。

4予定の場所が違う接触を追加する

同じscanner7が別の囮d7へ接触した場合です。

db.execute("INSERT INTO event VALUES ('e5',31,'scanner7','d7','opened')") show予定の場所が違う接触を追加する(db,"SELECT e.id,d.location FROM event e JOIN decoy d ON d.id=e.target WHERE e.source='scanner7' ORDER BY e.t")

e5はshare-aで、予定のsegment-bとは違います。送信元だけで全件除外すると、この差を見落とします。

5作業範囲と一致しない接触を抽出する

保守予定への対応がないものを残します。

show(db,"SELECT e.id,d.location FROM event e JOIN decoy d ON d.id=e.target WHERE e.source='scanner7' AND NOT EXISTS作業範囲と一致しない接触を抽出する(SELECT 1 FROM maintenance m WHERE m.source=e.source AND m.scope=d.location AND e.t BETWEEN m.start AND m.finish)")

e5だけです。例外条件は主体だけでなく、対象と時間も含めて絞れます。

6通知先へ出られない端末を確認する

callbackの外向き制限表を開きます。

show通知先へ出られない端末を確認する(db,"SELECT * FROM egress ORDER BY source")

192.0.2.8はcallbackを送れません。この端末でファイルが開かれても、外部通知だけでは観測できない場合があります。

7外部通知と端末内の記録を分ける

外向き制限のある端末のopenedだけを追加します。

db.execute("INSERT INTO event VALUES ('e6',40,'192.0.2.8','d7','opened')") show外部通知と端末内の記録を分ける(db,"SELECT e.id,e.kind,n.delivered FROM event e LEFT JOIN notification n ON n.event=e.id WHERE e.id='e6'")

openedはありますが通知欄はNULLです。通知の不在から接触の不在を判断せず、内部監査など別の観測点と照合します。

まとめ

囮の配置と到達範囲を確認します。

保守例外は主体・対象・時間を合わせます。

通知経路の制限による未観測を考慮します。

操作履歴と解説を振り返れます。

Python 3.15 / 固定パケット・SQLiteの接続資料

1
from sp21 import * from sp02 import show db=connect() show(db,"SELECT * FROM reach ORDER BY segment,decoy")
segment | decoy | allowed
segment-a | d7 | 1
segment-a | d8 | 0
segment-b | d8 | 1
2
show(db,"SELECT segment,decoy FROM reach WHERE allowed=0")
segment | decoy
segment-a | d8
3
show(db,"SELECT e.id,e.source,d.location,m.start,m.finish FROM event e JOIN decoy d ON d.id=e.target JOIN maintenance m ON m.source=e.source AND m.scope=d.location AND e.t BETWEEN m.start AND m.finish")
id | source | location | start | finish
e4 | scanner7 | segment-b | 25 | 35
4
db.execute("INSERT INTO event VALUES ('e5',31,'scanner7','d7','opened')") show(db,"SELECT e.id,d.location FROM event e JOIN decoy d ON d.id=e.target WHERE e.source='scanner7' ORDER BY e.t")
id | location
e4 | segment-b
e5 | share-a
5
show(db,"SELECT e.id,d.location FROM event e JOIN decoy d ON d.id=e.target WHERE e.source='scanner7' AND NOT EXISTS(SELECT 1 FROM maintenance m WHERE m.source=e.source AND m.scope=d.location AND e.t BETWEEN m.start AND m.finish)")
id | location
e5 | share-a
6
show(db,"SELECT * FROM egress ORDER BY source")
source | callback_allowed
192.0.2.7 | 1
192.0.2.8 | 0
7
db.execute("INSERT INTO event VALUES ('e6',40,'192.0.2.8','d7','opened')") show(db,"SELECT e.id,e.kind,n.delivered FROM event e LEFT JOIN notification n ON n.event=e.id WHERE e.id='e6'")
id | kind | delivered
e6 | opened | NULL

演習完了