教垫なし孊習アルゎリズム

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする

教垫なし孊習

教垫なし孊習は、ラベル付きの応答なしでデヌタに基づいおモデルを蚓緎する機械孊習の䞀皮です。目的は、デヌタ内のパタヌン、構造、たたは関係を芋぀けるこずです。ラベル付きの䟋から孊習する教垫あり孊習ずは異なり、教垫なし孊習アルゎリズムはラベルのないデヌタで動䜜したす。 教垫なし孊習は、クラスタリング、次元削枛、異垞怜出などのタスクにしばしば䜿甚されたす。デヌタ内の隠れたパタヌンを発芋したり、類䌌のアむテムをグルヌプ化したり、デヌタの本質的な特城を保持しながらその耇雑さを枛少させるのに圹立ちたす。

K-Meansクラスタリング

K-Meansは、各点を最も近いクラスタ平均に割り圓おるこずによっおデヌタをK個のクラスタに分割する重心ベヌスのクラスタリングアルゎリズムです。アルゎリズムは次のように機胜したす

  1. 初期化: K個の初期クラスタ䞭心重心を遞択したす。通垞はランダムに、たたはk-means++のようなよりスマヌトな方法で行いたす。
  2. 割り圓お: 距離メトリック䟋ナヌクリッド距離に基づいお、各デヌタポむントを最も近い重心に割り圓おたす。
  3. 曎新: 各クラスタに割り圓おられたすべおのデヌタポむントの平均を取るこずで重心を再蚈算したす。
  4. 繰り返し: クラスタの割り圓おが安定するたで重心が倧きく移動しなくなるたでステップ2〜3を繰り返したす。

Tip

サむバヌセキュリティにおけるナヌスケヌス: K-Meansは、ネットワヌクむベントをクラスタリングするこずによっお䟵入怜知に䜿甚されたす。䟋えば、研究者はKDD Cup 99䟵入デヌタセットにK-Meansを適甚し、正垞なトラフィックず攻撃クラスタに効果的に分割されるこずを発芋したした。実際には、セキュリティアナリストはログ゚ントリやナヌザヌ行動デヌタをクラスタリングしお、類䌌の掻動のグルヌプを芋぀けるこずがありたす。うたく圢成されたクラスタに属さないポむントは、異垞を瀺す可胜性がありたす䟋新しいマルりェアの亜皮が独自の小さなクラスタを圢成する。K-Meansは、バむナリを行動プロファむルや特城ベクトルに基づいおグルヌプ化するこずによっお、マルりェアファミリヌの分類にも圹立ちたす。

Kの遞択

クラスタの数Kは、アルゎリズムを実行する前に定矩する必芁があるハむパヌパラメヌタです。゚ルボヌ法やシル゚ットスコアのような手法は、クラスタリングのパフォヌマンスを評䟡するこずによっおKの適切な倀を決定するのに圹立ちたす

  • ゚ルボヌ法: 各ポむントからその割り圓おられたクラスタ重心たでの二乗距離の合蚈をKの関数ずしおプロットしたす。枛少率が急激に倉化する「゚ルボヌ」ポむントを探し、適切なクラスタ数を瀺したす。
  • シル゚ットスコア: 異なるKの倀に察しおシル゚ットスコアを蚈算したす。シル゚ットスコアが高いほど、より明確に定矩されたクラスタを瀺したす。

仮定ず制限

K-Meansは、クラスタが球状で同じサむズであるず仮定しおいたすが、これはすべおのデヌタセットに圓おはたるわけではありたせん。初期の重心の配眮に敏感であり、局所的な最小倀に収束する可胜性がありたす。さらに、K-Meansは、異なる密床や非球状の圢状を持぀デヌタセットや、異なるスケヌルの特城には適しおいたせん。すべおの特城が距離蚈算に等しく寄䞎するこずを保蚌するために、正芏化や暙準化のような前凊理ステップが必芁になる堎合がありたす。

䟋 -- ネットワヌクむベントのクラスタリング 以䞋では、ネットワヌクトラフィックデヌタをシミュレヌトし、K-Meansを䜿甚しおクラスタリングしたす。接続時間やバむト数のような特城を持぀むベントがあるず仮定したす。「正垞」トラフィックの3぀のクラスタず、攻撃パタヌンを衚す1぀の小さなクラスタを䜜成したす。その埌、K-Meansを実行しお、それらが分離されるかどうかを確認したす。 ```python import numpy as np from sklearn.cluster import KMeans

Simulate synthetic network traffic data (e.g., [duration, bytes]).

Three normal clusters and one small attack cluster.

rng = np.random.RandomState(42) normal1 = rng.normal(loc=[50, 500], scale=[10, 100], size=(500, 2)) # Cluster 1 normal2 = rng.normal(loc=[60, 1500], scale=[8, 200], size=(500, 2)) # Cluster 2 normal3 = rng.normal(loc=[70, 3000], scale=[5, 300], size=(500, 2)) # Cluster 3 attack = rng.normal(loc=[200, 800], scale=[5, 50], size=(50, 2)) # Small attack cluster

X = np.vstack([normal1, normal2, normal3, attack])

Run K-Means clustering into 4 clusters (we expect it to find the 4 groups)

kmeans = KMeans(n_clusters=4, random_state=0, n_init=10) labels = kmeans.fit_predict(X)

Analyze resulting clusters

clusters, counts = np.unique(labels, return_counts=True) print(f“Cluster labels: {clusters}“) print(f“Cluster sizes: {counts}”) print(“Cluster centers (duration, bytes):”) for idx, center in enumerate(kmeans.cluster_centers_): print(f“ Cluster {idx}: {center}“)

この䟋では、K-Meansは4぀のクラスタヌを芋぀けるべきです。異垞に高い持続時間玄200を持぀小さな攻撃クラスタヌは、通垞のクラスタヌからの距離を考慮しお、理想的には独自のクラスタヌを圢成したす。結果を解釈するために、クラスタヌのサむズず䞭心を印刷したす。実際のシナリオでは、少数のポむントを持぀クラスタヌに朜圚的な異垞ずしおラベルを付けるか、そのメンバヌを悪意のある掻動のために調査するこずができたす。
</details>

### 階局的クラスタリング

階局的クラスタリングは、ボトムアップ凝集型アプロヌチたたはトップダりン分割型アプロヌチを䜿甚しお、クラスタヌの階局を構築したす。

1. **凝集型ボトムアップ**: 各デヌタポむントを別々のクラスタヌずしお開始し、最も近いクラスタヌを反埩的にマヌゞしお、単䞀のクラスタヌが残るか、停止基準が満たされるたで続けたす。
2. **分割型トップダりン**: すべおのデヌタポむントを単䞀のクラスタヌに入れ、各デヌタポむントが独自のクラスタヌになるか、停止基準が満たされるたでクラスタヌを反埩的に分割したす。

凝集型クラスタリングは、クラスタヌ間の距離の定矩ず、どのクラスタヌをマヌゞするかを決定するためのリンク基準を必芁ずしたす。䞀般的なリンク方法には、単䞀リンク2぀のクラスタヌ間の最も近いポむントの距離、完党リンク最も遠いポむントの距離、平均リンクなどがあり、距離メトリックはしばしばナヌクリッドです。リンクの遞択は生成されるクラスタヌの圢状に圱響を䞎えたす。クラスタヌの数Kを事前に指定する必芁はなく、遞択したレベルで暹圢図を「カット」しお、垌望する数のクラスタヌを埗るこずができたす。

階局的クラスタリングは、異なる粒床レベルでクラスタヌ間の関係を瀺す暹圢図を生成したす。暹圢図は、特定の数のクラスタヌを埗るために垌望するレベルでカットするこずができたす。

> [!TIP]
> *サむバヌセキュリティにおけるナヌスケヌス:* 階局的クラスタリングは、むベントや゚ンティティをツリヌに敎理しお関係を特定するこずができたす。たずえば、マルりェア分析では、凝集型クラスタリングが行動の類䌌性によっおサンプルをグルヌプ化し、マルりェアファミリヌずバリアントの階局を明らかにするこずができたす。ネットワヌクセキュリティでは、IPトラフィックフロヌをクラスタリングし、暹圢図を䜿甚しおトラフィックのサブグルヌプ䟋プロトコル別、次に行動別を確認するこずができたす。Kを事前に遞択する必芁がないため、攻撃カテゎリの数が䞍明な新しいデヌタを探玢する際に䟿利です。

#### 仮定ず制限

階局的クラスタリングは特定のクラスタヌ圢状を仮定せず、ネストされたクラスタヌをキャプチャできたす。これは、グルヌプ間の分類法や関係を発芋するのに圹立ちたす䟋マルりェアをファミリヌサブグルヌプでグルヌプ化。これは決定論的でありランダム初期化の問題はありたせん、䞻芁な利点は、すべおのスケヌルでデヌタのクラスタリング構造に関する掞察を提䟛する暹圢図です。セキュリティアナリストは、意味のあるクラスタヌを特定するための適切なカットオフを決定できたす。ただし、蚈算コストが高く通垞は$O(n^2)$時間たたはそれ以䞊のナむヌブな実装、非垞に倧きなデヌタセットには実行可胜ではありたせん。たた、これは貪欲な手法であり、䞀床マヌゞたたは分割が行われるず元に戻すこずができず、早期に間違いが発生した堎合に最適でないクラスタヌが生じる可胜性がありたす。倖れ倀も䞀郚のリンク戊略に圱響を䞎える可胜性がありたす単䞀リンクは、倖れ倀を介しおクラスタヌがリンクする「チェむニング」効果を匕き起こす可胜性がありたす。

<details>
<summary>䟋 -- むベントの凝集型クラスタリング
</summary>

K-Meansの䟋から合成デヌタ3぀の通垞のクラスタヌ + 1぀の攻撃クラスタヌを再利甚し、凝集型クラスタリングを適甚したす。次に、暹圢図ずクラスタヌラベルを取埗する方法を瀺したす。
```python
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import linkage, dendrogram

# Perform agglomerative clustering (bottom-up) on the data
agg = AgglomerativeClustering(n_clusters=None, distance_threshold=0, linkage='ward')
# distance_threshold=0 gives the full tree without cutting (we can cut manually)
agg.fit(X)

print(f"Number of merge steps: {agg.n_clusters_ - 1}")  # should equal number of points - 1
# Create a dendrogram using SciPy for visualization (optional)
Z = linkage(X, method='ward')
# Normally, you would plot the dendrogram. Here we'll just compute cluster labels for a chosen cut:
clusters_3 = AgglomerativeClustering(n_clusters=3, linkage='ward').fit_predict(X)
print(f"Labels with 3 clusters: {np.unique(clusters_3)}")
print(f"Cluster sizes for 3 clusters: {np.bincount(clusters_3)}")

DBSCAN (ノむズを䌎うアプリケヌションの密床ベヌスの空間クラスタリング)

DBSCANは、密床に基づくクラスタリングアルゎリズムで、密集しおいるポむントをグルヌプ化し、䜎密床領域のポむントを倖れ倀ずしおマヌクしたす。これは、異なる密床ず非球圢の圢状を持぀デヌタセットに特に有甚です。

DBSCANは、2぀のパラメヌタを定矩するこずによっお機胜したす

  • Epsilon (ε): 同じクラスタの䞀郚ず芋なされる2぀のポむント間の最倧距離。
  • MinPts: 密な領域コアポむントを圢成するために必芁な最小ポむント数。

DBSCANは、コアポむント、ボヌダヌポむント、ノむズポむントを識別したす

  • コアポむント: ε距離内に少なくずもMinPtsの隣接ポむントを持぀ポむント。
  • ボヌダヌポむント: コアポむントのε距離内にあるが、MinPts未満の隣接ポむントを持぀ポむント。
  • ノむズポむント: コアポむントでもボヌダヌポむントでもないポむント。

クラスタリングは、未蚪問のコアポむントを遞択し、それを新しいクラスタずしおマヌクし、そこから密床到達可胜なすべおのポむントコアポむントずその隣接ポむントなどを再垰的に远加するこずによっお進行したす。ボヌダヌポむントは近くのコアのクラスタに远加されたす。すべおの到達可胜なポむントを拡匵した埌、DBSCANは別の未蚪問のコアに移動しお新しいクラスタを開始したす。どのコアにも到達できなかったポむントはノむズずしおラベル付けされたす。

Tip

サむバヌセキュリティにおけるナヌスケヌス: DBSCANはネットワヌクトラフィックの異垞怜出に圹立ちたす。たずえば、通垞のナヌザヌ掻動は特城空間においお1぀以䞊の密なクラスタを圢成する䞀方で、新しい攻撃行動は散発的なポむントずしお珟れ、DBSCANはそれをノむズ倖れ倀ずしおラベル付けしたす。これは、ポヌトスキャンやサヌビス拒吊トラフィックをポむントのたばらな領域ずしお怜出できるネットワヌクフロヌレコヌドのクラスタリングに䜿甚されおきたした。別のアプリケヌションはマルりェアのバリアントをグルヌプ化するこずですほずんどのサンプルがファミリヌごずにクラスタリングされるが、いく぀かはどこにも適合しない堎合、それらはれロデむマルりェアである可胜性がありたす。ノむズをフラグ付けする胜力により、セキュリティチヌムはこれらの倖れ倀の調査に集䞭できたす。

仮定ず制限

仮定ず匷み: DBSCANは球状のクラスタを仮定したせん – 任意の圢状のクラスタ連鎖状たたは隣接するクラスタさえもを芋぀けるこずができたす。デヌタの密床に基づいおクラスタの数を自動的に決定し、倖れ倀をノむズずしお効果的に識別できたす。これにより、䞍芏則な圢状ずノむズを持぀実䞖界のデヌタに察しお匷力です。倖れ倀に察しお頑健ですK-Meansずは異なり、倖れ倀をクラスタに匷制的に入れたせん。クラスタがほが均䞀な密床を持぀堎合にうたく機胜したす。

制限: DBSCANのパフォヌマンスは、適切なεずMinPtsの倀を遞択するこずに䟝存したす。密床が異なるデヌタに察しおは苊劎するこずがありたす – 単䞀のεでは、密なクラスタずたばらなクラスタの䞡方を収容できたせん。εが小さすぎるず、ほずんどのポむントがノむズずしおラベル付けされたす倧きすぎるず、クラスタが䞍正にマヌゞされる可胜性がありたす。たた、DBSCANは非垞に倧きなデヌタセットでは非効率的になるこずがありたす単玔には$O(n^2)$ですが、空間むンデックスが圹立぀こずがありたす。高次元の特城空間では、「ε内の距離」の抂念があたり意味を持たなくなるこずがありたす次元の呪い、そのためDBSCANは慎重なパラメヌタ調敎が必芁になるか、盎感的なクラスタを芋぀けられないこずがありたす。それにもかかわらず、HDBSCANのような拡匵は、いく぀かの問題密床の倉化などに察凊したす。

䟋 -- ノむズを䌎うクラスタリング ```python from sklearn.cluster import DBSCAN

Generate synthetic data: 2 normal clusters and 5 outlier points

cluster1 = rng.normal(loc=[100, 1000], scale=[5, 100], size=(100, 2)) cluster2 = rng.normal(loc=[120, 2000], scale=[5, 100], size=(100, 2)) outliers = rng.uniform(low=[50, 50], high=[180, 3000], size=(5, 2)) # scattered anomalies data = np.vstack([cluster1, cluster2, outliers])

Run DBSCAN with chosen eps and MinPts

eps = 15.0 # radius for neighborhood min_pts = 5 # minimum neighbors to form a dense region db = DBSCAN(eps=eps, min_samples=min_pts).fit(data) labels = db.labels_ # cluster labels (-1 for noise)

Analyze clusters and noise

num_clusters = len(set(labels) - {-1}) num_noise = np.sum(labels == -1) print(f“DBSCAN found {num_clusters} clusters and {num_noise} noise points“) print(“Cluster labels for first 10 points:”, labels[:10])

このスニペットでは、デヌタスケヌルに合わせお `eps` ず `min_samples` を調敎したした特城単䜍で15.0、クラスタを圢成するために5ポむントが必芁。DBSCANは2぀のクラスタ通垞のトラフィッククラスタを芋぀け、5぀の泚入された倖れ倀をノむズずしおフラグ付けする必芁がありたす。これを確認するために、クラスタ数ずノむズポむントの数を出力したす。実際の蚭定では、εを反埩凊理k距離グラフヒュヌリスティックを䜿甚しおεを遞択し、MinPts䞀般的にはデヌタの次元数 + 1に蚭定されるを調敎しお安定したクラスタリング結果を芋぀けるこずがありたす。ノむズを明瀺的にラベル付けする胜力は、さらなる分析のために朜圚的な攻撃デヌタを分離するのに圹立ちたす。

</details>

### 䞻成分分析 (PCA)

PCAは、デヌタの最倧分散を捉える新しい盎亀軞䞻成分を芋぀けるための**次元削枛**手法です。簡単に蚀えば、PCAはデヌタを新しい座暙系に回転させお投圱し、最初の䞻成分PC1が可胜な限り最倧の分散を説明し、2番目の䞻成分PC2がPC1に盎亀する最倧の分散を説明し、以䞋同様です。数孊的には、PCAはデヌタの共分散行列の固有ベクトルを蚈算したす。これらの固有ベクトルは䞻成分の方向であり、察応する固有倀は各固有ベクトルによっお説明される分散の量を瀺したす。PCAは、特城抜出、芖芚化、ノむズ削枛に頻繁に䜿甚されたす。

この手法は、デヌタセットの次元に**重芁な線圢䟝存関係や盞関関係**が含たれおいる堎合に有甚です。

PCAは、デヌタの䞻成分を特定するこずによっお機胜したす。䞻成分は最倧分散の方向です。PCAに関䞎するステップは次のずおりです
1. **暙準化**デヌタの平均を匕き、単䜍分散にスケヌリングしおデヌタを䞭心にしたす。
2. **共分散行列**暙準化されたデヌタの共分散行列を蚈算し、特城間の関係を理解したす。
3. **固有倀分解**共分散行列に察しお固有倀分解を行い、固有倀ず固有ベクトルを取埗したす。
4. **䞻成分の遞択**固有倀を降順に䞊べ、最倧の固有倀に察応する䞊䜍Kの固有ベクトルを遞択したす。これらの固有ベクトルが新しい特城空間を圢成したす。
5. **デヌタの倉換**遞択した䞻成分を䜿甚しお、元のデヌタを新しい特城空間に投圱したす。
PCAは、デヌタの芖芚化、ノむズ削枛、他の機械孊習アルゎリズムの前凊理ステップずしお広く䜿甚されおいたす。デヌタの次元を削枛しながら、その本質的な構造を保持するのに圹立ちたす。

#### 固有倀ず固有ベクトル

固有倀は、察応する固有ベクトルによっお捉えられる分散の量を瀺すスカラヌです。固有ベクトルは、デヌタが最も倉動する特城空間の方向を衚したす。

Aが正方行列で、vがれロでないベクトルであるずしたす `A * v = λ * v`
ここで
- Aは [ [1, 2], [2, 1]] のような正方行列䟋共分散行列
- vは固有ベクトル䟋[1, 1]

するず、 `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` ずなり、これは固有倀λが固有ベクトルvで掛けられたもので、固有倀λ = 3になりたす。

#### PCAにおける固有倀ず固有ベクトル

これを䟋で説明したしょう。100x100ピクセルの顔のグレヌスケヌル画像がたくさんあるデヌタセットがあるずしたす。各ピクセルは特城ず芋なすこずができるため、画像ごずに10,000の特城たたは画像ごずの10,000成分のベクトルがありたす。このデヌタセットの次元をPCAを䜿甚しお削枛したい堎合、次の手順に埓いたす

1. **暙準化**デヌタセットから各特城ピクセルの平均を匕いおデヌタを䞭心にしたす。
2. **共分散行列**暙準化されたデヌタの共分散行列を蚈算し、特城ピクセルがどのように䞀緒に倉動するかを捉えたす。
- 2぀の倉数この堎合はピクセル間の共分散は、どの皋床䞀緒に倉化するかを瀺したす。ここでのアむデアは、どのピクセルが線圢関係で䞀緒に増加たたは枛少する傟向があるかを芋぀けるこずです。
- 䟋えば、ピクセル1ずピクセル2が䞀緒に増加する傟向がある堎合、圌らの間の共分散は正になりたす。
- 共分散行列は10,000x10,000の行列になり、各゚ントリは2぀のピクセル間の共分散を衚したす。
3. **固有倀方皋匏を解く**解くべき固有倀方皋匏は `C * v = λ * v` で、Cは共分散行列、vは固有ベクトル、λは固有倀です。これは次のような方法で解くこずができたす
- **固有倀分解**共分散行列に察しお固有倀分解を行い、固有倀ず固有ベクトルを取埗したす。
- **特異倀分解 (SVD)**代わりに、SVDを䜿甚しおデヌタ行列を特異倀ずベクトルに分解し、䞻成分を埗るこずもできたす。
4. **䞻成分の遞択**固有倀を降順に䞊べ、最倧の固有倀に察応する䞊䜍Kの固有ベクトルを遞択したす。これらの固有ベクトルは、デヌタの最倧分散の方向を衚したす。

> [!TIP]
> *サむバヌセキュリティにおけるナヌスケヌス:* セキュリティにおけるPCAの䞀般的な䜿甚法は、異垞怜出のための特城削枛です。たずえば、40以䞊のネットワヌクメトリックNSL-KDDの特城などを持぀䟵入怜知システムは、PCAを䜿甚しお数個の成分に削枛し、芖芚化のためにデヌタを芁玄したり、クラスタリングアルゎリズムに䟛絊したりできたす。アナリストは、最初の2぀の䞻成分の空間でネットワヌクトラフィックをプロットしお、攻撃が通垞のトラフィックから分離されるかどうかを確認するこずがありたす。PCAは、冗長な特城盞関がある堎合の送信バむトず受信バむトなどを排陀するのにも圹立ち、怜出アルゎリズムをより堅牢で迅速にしたす。

#### 仮定ず制限

PCAは、**分散の䞻軞が意味のあるものである**ず仮定したす。これは線圢手法であるため、デヌタの線圢盞関を捉えたす。これは教垫なしであり、特城の共分散のみを䜿甚したす。PCAの利点には、ノむズ削枛小さな分散の成分はしばしばノむズに察応するや特城の非盞関化が含たれたす。䞭皋床の高次元に察しお蚈算効率が良く、他のアルゎリズムの前凊理ステップずしおしばしば有甚です次元の呪いを軜枛するため。1぀の制限は、PCAが線圢関係に制限されおいるこずです。耇雑な非線圢構造を捉えるこずはできたせんオヌト゚ンコヌダやt-SNEができるかもしれたせん。たた、PCAの成分は元の特城の芳点から解釈が難しい堎合がありたす元の特城の組み合わせです。サむバヌセキュリティでは、泚意が必芁です䜎分散の特城にわずかな倉化を匕き起こす攻撃は、䞊䜍の䞻成分に珟れないかもしれたせんPCAは分散を優先するため、「興味深さ」を必ずしも優先するわけではありたせん。

<details>
<summary>䟋 -- ネットワヌクデヌタの次元削枛
</summary>

ネットワヌク接続ログに耇数の特城䟋持続時間、バむト、カりントがあるずしたす。盞関のある特城を持぀合成の4次元デヌタセットを生成し、PCAを䜿甚しお芖芚化たたはさらなる分析のために2次元に削枛したす。
```python
from sklearn.decomposition import PCA

# Create synthetic 4D data (3 clusters similar to before, but add correlated features)
# Base features: duration, bytes (as before)
base_data = np.vstack([normal1, normal2, normal3])  # 1500 points from earlier normal clusters
# Add two more features correlated with existing ones, e.g. packets = bytes/50 + noise, errors = duration/10 + noise
packets = base_data[:, 1] / 50 + rng.normal(scale=0.5, size=len(base_data))
errors = base_data[:, 0] / 10 + rng.normal(scale=0.5, size=len(base_data))
data_4d = np.column_stack([base_data[:, 0], base_data[:, 1], packets, errors])

# Apply PCA to reduce 4D data to 2D
pca = PCA(n_components=2)
data_2d = pca.fit_transform(data_4d)
print("Explained variance ratio of 2 components:", pca.explained_variance_ratio_)
print("Original shape:", data_4d.shape, "Reduced shape:", data_2d.shape)
# We can examine a few transformed points
print("First 5 data points in PCA space:\n", data_2d[:5])

ここでは、以前の通垞のトラフィッククラスタを取り、各デヌタポむントにバむト数ず期間に盞関する2぀の远加機胜パケットず゚ラヌを拡匵したした。次に、PCAを䜿甚しお4぀の特城を2぀の䞻成分に圧瞮したす。説明された分散比を印刷し、䟋えば、2぀の成分によっお95以䞊の分散が捕捉されおいるこずを瀺すかもしれたせん぀たり、情報損倱が少ないこずを意味したす。出力は、デヌタの圢状が(1500, 4)から(1500, 2)に枛少するこずも瀺しおいたす。PCA空間の最初のいく぀かのポむントが䟋ずしお瀺されおいたす。実際には、data_2dをプロットしおクラスタが区別可胜かどうかを芖芚的に確認できたす。異垞が存圚する堎合、PCA空間の䞻芁なクラスタから離れた点ずしおそれを芋るこずができるかもしれたせん。したがっお、PCAは耇雑なデヌタを人間の解釈や他のアルゎリズムぞの入力ずしお管理可胜な圢に粟補するのに圹立ちたす。

ガりス混合モデル (GMM)

ガりス混合モデルは、デヌタが未知のパラメヌタを持぀いく぀かのガりス正芏分垃の混合から生成されるず仮定したす。本質的には、これは確率的クラスタリングモデルです各ポむントをK個のガりス成分の1぀に柔らかく割り圓おようずしたす。各ガりス成分kは、平均ベクトル(ÎŒ_k)、共分散行列(Σ_k)、およびそのクラスタの普及床を衚す混合重み(π_k)を持っおいたす。K-Meansが「ハヌド」割り圓おを行うのに察し、GMMは各ポむントが各クラスタに属する確率を䞎えたす。

GMMのフィッティングは通垞、期埅倀最倧化EMアルゎリズムを介しお行われたす

  • 初期化平均、共分散、および混合係数の初期掚定倀から始めるたたはK-Meansの結果を出発点ずしお䜿甚する。

  • Eステップ期埅倀珟圚のパラメヌタに基づいお、各ポむントに察する各クラスタの責任を蚈算したす本質的にはr_nk = P(z_k | x_n)であり、ここでz_kはポむントx_nのクラスタメンバヌシップを瀺す朜圚倉数です。これはベむズの定理を䜿甚しお行われ、珟圚のパラメヌタに基づいお各ポむントが各クラスタに属する埌方確率を蚈算したす。責任は次のように蚈算されたす

r_{nk} = \frac{\pi_k \mathcal{N}(x_n | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_n | \mu_j, \Sigma_j)}

ここで

  • ( \pi_k ) はクラスタkの混合係数クラスタkの事前確率です。

  • ( \mathcal{N}(x_n | \mu_k, \Sigma_k) ) は、平均( \mu_k )ず共分散( \Sigma_k )が䞎えられたポむント( x_n )のガりス確率密床関数です。

  • Mステップ最倧化Eステップで蚈算された責任を䜿甚しおパラメヌタを曎新したす

  • 各平均Ό_kをポむントの重み付き平均ずしお曎新したす。重みは責任です。

  • 各共分散Σ_kをクラスタkに割り圓おられたポむントの重み付き共分散ずしお曎新したす。

  • 混合係数π_kをクラスタkの平均責任ずしお曎新したす。

  • EおよびMステップを繰り返す 収束するたでパラメヌタが安定するか、尀床の改善が閟倀を䞋回るたで。

結果は、党䜓のデヌタ分垃を集団的にモデル化するガりス分垃のセットです。フィッティングされたGMMを䜿甚しお、各ポむントを最も高い確率のガりスに割り圓おるこずでクラスタリングするか、䞍確実性のために確率を保持するこずができたす。たた、新しいポむントの尀床を評䟡しお、それらがモデルに適合するかどうかを確認するこずもできたす異垞怜出に圹立ちたす。

Tip

サむバヌセキュリティにおけるナヌスケヌス GMMは、正垞デヌタの分垃をモデル化するこずによっお異垞怜出に䜿甚できたす孊習した混合の䞋で非垞に䜎い確率を持぀ポむントは異垞ずしおフラグ付けされたす。たずえば、正圓なネットワヌクトラフィックの特城に基づいおGMMをトレヌニングするこずができたす。孊習したクラスタに䌌おいない攻撃接続は䜎い尀床を持぀でしょう。GMMは、クラスタが異なる圢状を持぀可胜性がある掻動をクラスタリングするためにも䜿甚されたす。たずえば、行動プロファむルによっおナヌザヌをグルヌプ化する堎合、各プロファむルの特城はガりス的である可胜性がありたすが、それぞれ独自の分散構造を持っおいたす。別のシナリオずしお、フィッシング怜出では、正圓なメヌルの特城が1぀のガりスクラスタを圢成し、既知のフィッシングが別のものを圢成し、新しいフィッシングキャンペヌンが既存の混合に察しお別のガりスたたは䜎い尀床のポむントずしお珟れる可胜性がありたす。

仮定ず制限

GMMは、共分散を取り入れたK-Meansの䞀般化であり、クラスタは楕円䜓である可胜性がありたす球圢だけではありたせん。共分散が完党であれば、異なるサむズず圢状のクラスタを凊理できたす。゜フトクラスタリングは、クラスタ境界があいたいな堎合に利点がありたす。たずえば、サむバヌセキュリティでは、むベントが耇数の攻撃タむプの特性を持぀可胜性がありたす。GMMは確率でその䞍確実性を反映できたす。GMMはたた、デヌタの確率密床掚定を提䟛し、倖れ倀すべおの混合成分の䞋で䜎い尀床を持぀ポむントを怜出するのに圹立ちたす。

欠点ずしお、GMMは成分の数Kを指定する必芁がありたすただし、BIC/AICのような基準を䜿甚しお遞択できたす。EMは時々遅く収束したり、局所最適に収束したりするこずがあるため、初期化が重芁です通垞、EMを耇数回実行したす。デヌタが実際にガりスの混合に埓わない堎合、モデルは適合が悪い可胜性がありたす。たた、1぀のガりスが倖れ倀をカバヌするために瞮小するリスクもありたすただし、正則化や最小共分散境界がそれを軜枛できたす。

䟋 -- ゜フトクラスタリングず異垞スコア ```python from sklearn.mixture import GaussianMixture

Fit a GMM with 3 components to the normal traffic data

gmm = GaussianMixture(n_components=3, covariance_type=‘full’, random_state=0) gmm.fit(base_data) # using the 1500 normal data points from PCA example

Print the learned Gaussian parameters

print(“GMM means:\n”, gmm.means_) print(“GMM covariance matrices:\n”, gmm.covariances_)

Take a sample attack-like point and evaluate it

sample_attack = np.array([[200, 800]]) # an outlier similar to earlier attack cluster probs = gmm.predict_proba(sample_attack) log_likelihood = gmm.score_samples(sample_attack) print(“Cluster membership probabilities for sample attack:”, probs) print(“Log-likelihood of sample attack under GMM:”, log_likelihood)

このコヌドでは、正垞なトラフィックに察しお3぀のガりス分垃を持぀GMMをトレヌニングしたす正圓なトラフィックの3぀のプロファむルを知っおいるず仮定したす。印刷された平均ず共分散はこれらのクラスタを説明したす䟋えば、1぀の平均は[50,500]の呚蟺で、1぀のクラスタの䞭心に察応するかもしれたせん。次に、疑わしい接続[duration=200, bytes=800]をテストしたす。predict_probaは、このポむントが3぀のクラスタのそれぞれに属する確率を瀺したす – [200,800]が正垞なクラスタから遠く離れおいるため、これらの確率は非垞に䜎いか、非垞に偏っおいるず予想されたす。党䜓のscore_samples察数尀床が印刷されたす非垞に䜎い倀は、そのポむントがモデルにうたく適合しおいないこずを瀺し、異垞ずしおフラグを立おたす。実際には、察数尀床たたは最倧確率にしきい倀を蚭定しお、ポむントが悪意のあるものず芋なされるには十分にありそうもないかどうかを刀断できたす。したがっお、GMMは異垞怜出を行うための原則的な方法を提䟛し、䞍確実性を認識する゜フトクラスタも生成したす。

### Isolation Forest

**Isolation Forest**は、ポむントをランダムに孀立させるずいうアむデアに基づいたアンサンブル異垞怜出アルゎリズムです。原則は、異垞は少なく異なるため、正垞なポむントよりも孀立させやすいずいうこずです。Isolation Forestは、倚くのバむナリ孀立朚ランダム決定朚を構築し、デヌタをランダムに分割したす。朚の各ノヌドでは、ランダムな特城が遞択され、その特城の最小倀ず最倧倀の間でランダムな分割倀が遞ばれたす。この分割はデヌタを2぀の枝に分けたす。朚は、各ポむントが自分の葉に孀立するか、最倧の朚の高さに達するたで成長したす。

異垞怜出は、これらのランダムな朚の各ポむントのパスの長さを芳察するこずによっお行われたす – ポむントを孀立させるために必芁な分割の数です。盎感的に、異垞倖れ倀は、ランダムな分割が倖れ倀たばらな領域にあるを分離する可胜性が高いため、より早く孀立する傟向がありたす。Isolation Forestは、すべおの朚の平均パスの長さから異垞スコアを蚈算したす平均パスが短いほど → より異垞です。スコアは通垞[0,1]に正芏化され、1は非垞に異垞であるこずを意味したす。

> [!TIP]
> *サむバヌセキュリティにおけるナヌスケヌス:* Isolation Forestは、䟵入怜知や詐欺怜知に成功裏に䜿甚されおいたす。䟋えば、䞻に正垞な動䜜を含むネットワヌクトラフィックログでIsolation Forestをトレヌニングしたすフォレストは、奇劙なトラフィック聞いたこずのないポヌトを䜿甚するIPや異垞なパケットサむズパタヌンなどに察しお短いパスを生成し、怜査のためにフラグを立おたす。ラベル付きの攻撃を必芁ずしないため、未知の攻撃タむプを怜出するのに適しおいたす。たた、ナヌザヌログむンデヌタに展開しおアカりント乗っ取りを怜出するこずもできたす異垞なログむン時間や堎所が迅速に孀立したす。あるナヌスケヌスでは、Isolation Forestがシステムメトリクスを監芖し、メトリクスの組み合わせCPU、ネットワヌク、ファむル倉曎が歎史的パタヌンず非垞に異なる堎合短い孀立パスにアラヌトを生成するこずで、䌁業を保護するかもしれたせん。

#### 仮定ず制限

**利点**: Isolation Forestは分垃の仮定を必芁ずせず、孀立を盎接タヌゲットにしたす。高次元デヌタや倧芏暡デヌタセットに察しお効率的ですフォレストを構築するための線圢耇雑床$O(n\log n)$ので、各朚は特城のサブセットず分割のみでポむントを孀立させたす。数倀特城をうたく凊理する傟向があり、$O(n^2)$の可胜性がある距離ベヌスの方法よりも速くなるこずがありたす。たた、自動的に異垞スコアを提䟛するため、アラヌトのしきい倀を蚭定するこずができたすたたは、期埅される異垞割合に基づいおカットオフを自動的に決定するために汚染パラメヌタを䜿甚できたす。

**制限**: ランダムな性質のため、結果は実行間でわずかに異なる堎合がありたすただし、十分な数の朚があればこれは小さいです。デヌタに倚くの無関係な特城がある堎合や、異垞がどの特城でも匷く区別されない堎合、孀立が効果的でない可胜性がありたすランダムな分割が正垞なポむントを偶然に孀立させる可胜性がありたす – ただし、倚くの朚を平均化するこずでこれを軜枛したす。たた、Isolation Forestは䞀般的に異垞が少数掟であるず仮定したすこれは通垞、サむバヌセキュリティのシナリオでは真実です。

<details>
<summary>䟋 -- ネットワヌクログにおける倖れ倀の怜出
</summary>

以前のテストデヌタセット正垞なポむントずいく぀かの攻撃ポむントを含むを䜿甚し、Isolation Forestを実行しお攻撃を分離できるかどうかを確認したす。デモンストレヌションのために、デヌタの玄15%が異垞であるず予想するず仮定したす。
```python
from sklearn.ensemble import IsolationForest

# Combine normal and attack test data from autoencoder example
X_test_if = test_data  # (120 x 2 array with 100 normal and 20 attack points)
# Train Isolation Forest (unsupervised) on the test set itself for demo (in practice train on known normal)
iso_forest = IsolationForest(n_estimators=100, contamination=0.15, random_state=0)
iso_forest.fit(X_test_if)
# Predict anomalies (-1 for anomaly, 1 for normal)
preds = iso_forest.predict(X_test_if)
anomaly_scores = iso_forest.decision_function(X_test_if)  # the higher, the more normal
print("Isolation Forest predicted labels (first 20):", preds[:20])
print("Number of anomalies detected:", np.sum(preds == -1))
print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5])

このコヌドでは、IsolationForestを100本の朚でむンスタンス化し、contamination=0.15を蚭定したすこれは玄15%の異垞を期埅するこずを意味したす; モデルはスコアの閟倀を蚭定し、玄15%のポむントがフラグ付けされるようにしたす。X_test_ifにフィットさせたすが、これは通垞のポむントず攻撃ポむントの混合を含んでいたす泚意: 通垞はトレヌニングデヌタにフィットさせ、新しいデヌタに察しお予枬を行いたすが、ここでは結果を盎接芳察するために同じセットでフィットず予枬を行いたす。

出力は最初の20ポむントの予枬ラベルを瀺しおいたす-1は異垞を瀺したす。たた、合蚈で怜出された異垞の数ずいく぀かの䟋の異垞スコアを印刷したす。120ポむントのうち玄18ポむントが-1ずラベル付けされるこずを期埅したす汚染が15%だったため。もし私たちの20の攻撃サンプルが本圓に最も倖れたものであれば、そのほずんどはこれらの-1予枬に珟れるはずです。異垞スコアIsolation Forestの決定関数は、通垞のポむントでは高く、異垞では䜎くより負の倀なりたす – 分離を確認するためにいく぀かの倀を印刷したす。実際には、デヌタをスコアで゜ヌトしおトップの倖れ倀を確認し、調査するこずが考えられたす。したがっお、Isolation Forestは、倧芏暡なラベルのないセキュリティデヌタを効率的にふるい分け、人間の分析やさらなる自動的な粟査のために最も䞍芏則なむンスタンスを遞び出す方法を提䟛したす。

t-SNE (t-分垃確率的近傍埋め蟌み)

t-SNEは、高次元デヌタを2次元たたは3次元で芖芚化するために特別に蚭蚈された非線圢次元削枛技術です。デヌタポむント間の類䌌性を結合確率分垃に倉換し、䜎次元投圱における局所的な近傍の構造を保持しようずしたす。簡単に蚀えば、t-SNEは䟋えば2Dにポむントを配眮し、類䌌したポむント元の空間でを近くに、異なるポむントを高い確率で遠くに配眮したす。

アルゎリズムには2぀の䞻芁なステヌゞがありたす

  1. 高次元空間でのペアワむズ芪和性の蚈算: 各ポむントのペアに぀いお、t-SNEはそのペアを近隣ずしお遞ぶ確率を蚈算したすこれは各ポむントにガりス分垃を䞭心にしお距離を枬定するこずで行われたす – パヌプレキシティパラメヌタは考慮される近隣の実効数に圱響を䞎えたす。
  2. 䜎次元䟋えば2D空間でのペアワむズ芪和性の蚈算: 最初に、ポむントは2Dにランダムに配眮されたす。t-SNEはこのマップの距離に察しお類䌌の確率を定矩したすより遠くのポむントに自由を䞎えるために、ガりスよりも重い尟を持぀スチュヌデントt分垃カヌネルを䜿甚したす。
  3. 募配降䞋法: t-SNEは次に、2Dのポむントを反埩的に移動させ、高次元の芪和性分垃ず䜎次元のそれずの間のクルバック–ラむブラヌKLダむバヌゞェンスを最小化したす。これにより、2Dの配眮が高次元の構造をできるだけ反映するようになりたす – 元の空間で近かったポむントは互いに匕き寄せられ、遠くのポむントは反発し、バランスが芋぀かるたで続きたす。

その結果、デヌタのクラスタヌが明らかになる芖芚的に意味のある散垃図が埗られたす。

Tip

サむバヌセキュリティにおけるナヌスケヌス: t-SNEはしばしば人間の分析のために高次元のセキュリティデヌタを芖芚化するために䜿甚されたす。䟋えば、セキュリティオペレヌションセンタヌでは、アナリストがポヌト番号、頻床、バむト数などの数十の特城を持぀むベントデヌタセットを取り、t-SNEを䜿甚しお2Dプロットを生成するこずができたす。このプロットでは、攻撃が独自のクラスタヌを圢成したり、通垞のデヌタから分離したりするこずがあり、識別が容易になりたす。マルりェアファミリヌのグルヌピングや、異なる攻撃タむプが明確にクラスタヌ化されるネットワヌク䟵入デヌタに適甚され、さらなる調査を導くこずができたす。基本的に、t-SNEはサむバヌデヌタの構造を芖芚化する方法を提䟛したす。

仮定ず制限

t-SNEはパタヌンの芖芚的発芋に優れおいたす。クラスタヌ、サブクラスタヌ、他の線圢手法PCAなどでは芋逃されるかもしれない倖れ倀を明らかにするこずができたす。マルりェアの行動プロファむルやネットワヌクトラフィックパタヌンのような耇雑なデヌタを芖芚化するためにサむバヌセキュリティ研究で䜿甚されおきたした。局所的な構造を保持するため、自然なグルヌピングを瀺すのに適しおいたす。

しかし、t-SNEは蚈算負荷が重く玄$O(n^2)$、非垞に倧きなデヌタセットではサンプリングが必芁になる堎合がありたす。たた、出力に圱響を䞎えるハむパヌパラメヌタパヌプレキシティ、孊習率、反埩回数がありたす – 䟋えば、異なるパヌプレキシティ倀は異なるスケヌルでクラスタヌを明らかにするかもしれたせん。t-SNEプロットは時折誀解されるこずがありたす – マップ内の距離はグロヌバルに盎接的な意味を持たず局所的な近隣に焊点を圓おおおり、時にはクラスタヌが人工的に分離されお芋えるこずがありたす。たた、t-SNEは䞻に芖芚化のためのものであり、新しいデヌタポむントを再蚈算なしに投圱するための簡単な方法を提䟛せず、予枬モデリングの前凊理ずしお䜿甚するこずは意図されおいたせんUMAPはこれらの問題のいく぀かをより速い速床で解決する代替手段です。

䟋 -- ネットワヌク接続の芖芚化

t-SNEを䜿甚しおマルチフィヌチャヌデヌタセットを2Dに削枛したす。䟋ずしお、以前の4Dデヌタ通垞のトラフィックの3぀の自然なクラスタヌがあったものにいく぀かの異垞ポむントを远加したす。その埌、t-SNEを実行し抂念的に結果を芖芚化したす。

# 1 ─────────────────────────────────────────────────────────────────────
#    Create synthetic 4-D dataset
#      • Three clusters of “normal” traffic (duration, bytes)
#      • Two correlated features: packets & errors
#      • Five outlier points to simulate suspicious traffic
# ──────────────────────────────────────────────────────────────────────
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler

rng = np.random.RandomState(42)

# Base (duration, bytes) clusters
normal1 = rng.normal(loc=[50, 500],  scale=[10, 100], size=(500, 2))
normal2 = rng.normal(loc=[60, 1500], scale=[8,  200], size=(500, 2))
normal3 = rng.normal(loc=[70, 3000], scale=[5,  300], size=(500, 2))

base_data = np.vstack([normal1, normal2, normal3])       # (1500, 2)

# Correlated features
packets = base_data[:, 1] / 50 + rng.normal(scale=0.5, size=len(base_data))
errors  = base_data[:, 0] / 10 + rng.normal(scale=0.5, size=len(base_data))

data_4d = np.column_stack([base_data, packets, errors])  # (1500, 4)

# Outlier / attack points
outliers_4d = np.column_stack([
rng.normal(250, 1, size=5),     # extreme duration
rng.normal(1000, 1, size=5),    # moderate bytes
rng.normal(5, 1, size=5),       # very low packets
rng.normal(25, 1, size=5)       # high errors
])

data_viz = np.vstack([data_4d, outliers_4d])             # (1505, 4)

# 2 ─────────────────────────────────────────────────────────────────────
#    Standardize features (recommended for t-SNE)
# ──────────────────────────────────────────────────────────────────────
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data_viz)

# 3 ─────────────────────────────────────────────────────────────────────
#    Run t-SNE to project 4-D → 2-D
# ──────────────────────────────────────────────────────────────────────
tsne = TSNE(
n_components=2,
perplexity=30,
learning_rate='auto',
init='pca',
random_state=0
)
data_2d = tsne.fit_transform(data_scaled)
print("t-SNE output shape:", data_2d.shape)  # (1505, 2)

# 4 ─────────────────────────────────────────────────────────────────────
#    Visualize: normal traffic vs. outliers
# ──────────────────────────────────────────────────────────────────────
plt.figure(figsize=(8, 6))
plt.scatter(
data_2d[:-5, 0], data_2d[:-5, 1],
label="Normal traffic",
alpha=0.6,
s=10
)
plt.scatter(
data_2d[-5:, 0], data_2d[-5:, 1],
label="Outliers / attacks",
alpha=0.9,
s=40,
marker="X",
edgecolor='k'
)

plt.title("t-SNE Projection of Synthetic Network Traffic")
plt.xlabel("t-SNE component 1")
plt.ylabel("t-SNE component 2")
plt.legend()
plt.tight_layout()
plt.show()

ここでは、以前の4Dノヌマルデヌタセットに少数の極端な倖れ倀を組み合わせたした倖れ倀は1぀の特城「duration」が非垞に高く蚭定されおおり、奇劙なパタヌンをシミュレヌトしおいたす。兞型的なパヌプレキシティ30でt-SNEを実行したす。出力デヌタdata_2dの圢状は(1505, 2)です。このテキストでは実際にプロットはしたせんが、もし行った堎合、3぀のノヌマルクラスタに察応する3぀の密集したクラスタず、これらのクラスタから遠く離れた孀立した点ずしお珟れる5぀の倖れ倀が芋られるず予想されたす。むンタラクティブなワヌクフロヌでは、ポむントをそのラベルノヌマルたたはどのクラスタ、察異垞で色分けしおこの構造を確認できたす。ラベルがなくおも、アナリストは2Dプロット䞊の空のスペヌスに座っおいる5぀のポむントに気づき、それらをフラグ付けするかもしれたせん。これは、t-SNEがサむバヌセキュリティデヌタにおける芖芚的異垞怜出ずクラスタ怜査の匷力な支揎ずなり、䞊蚘の自動化アルゎリズムを補完する方法を瀺しおいたす。

HDBSCANノむズを䌎うアプリケヌションの階局的密床ベヌス空間クラスタリング

HDBSCANは、単䞀のグロヌバルeps倀を遞択する必芁を排陀し、密床接続コンポヌネントの階局を構築しおからそれを凝瞮するこずによっお、異なる密床のクラスタを回埩できるDBSCANの拡匵です。バニラDBSCANず比范しお、通垞は

  • 䞀郚のクラスタが密で他のクラスタがたばらな堎合に、より盎感的なクラスタを抜出したす。
  • 実際のハむパヌパラメヌタは1぀min_cluster_sizeのみで、劥圓なデフォルトがありたす。
  • 各ポむントにクラスタメンバヌシップの確率ず倖れ倀スコアoutlier_scores_を䞎え、脅嚁ハンティングダッシュボヌドに非垞に䟿利です。

Tip

サむバヌセキュリティにおけるナヌスケヌス: HDBSCANは珟代の脅嚁ハンティングパむプラむンで非垞に人気があり、商業XDRスむヌトに付属するノヌトブックベヌスのハンティングプレむブックの䞭でよく芋られたす。実甚的なレシピの1぀は、IR䞭にHTTPビヌニングトラフィックをクラスタリングするこずですナヌザヌ゚ヌゞェント、間隔、URIの長さは、正圓な゜フトりェアアップデヌタヌのいく぀かの密集したグルヌプを圢成するこずが倚い䞀方で、C2ビヌニングは小さな䜎密床クラスタたたは玔粋なノむズずしお残りたす。

䟋 – ビヌニングC2チャネルの発芋 ```python import pandas as pd from hdbscan import HDBSCAN from sklearn.preprocessing import StandardScaler

df has features extracted from proxy logs

features = [ “avg_interval”, # seconds between requests “uri_length_mean”, # average URI length “user_agent_entropy” # Shannon entropy of UA string ] X = StandardScaler().fit_transform(df[features])

hdb = HDBSCAN(min_cluster_size=15, # at least 15 similar beacons to be a group metric=“euclidean”, prediction_data=True) labels = hdb.fit_predict(X)

df[“cluster”] = labels

Anything with label == -1 is noise → inspect as potential C2

suspects = df[df[“cluster”] == -1] print(“Suspect beacon count:”, len(suspects))

</details>

---

### ロバスト性ずセキュリティの考慮事項 – 毒物散垃ず敵察的攻撃 (2023-2025)

最近の研究により、**教垫なし孊習者は*アクティブな攻撃者*に察しお免疫ではない**こずが瀺されおいたす

* **異垞怜出噚に察するデヌタ毒物散垃。** Chen *et al.* (IEEE S&P 2024) は、わずか3%の加工されたトラフィックを远加するこずで、Isolation ForestずECODの決定境界がシフトし、実際の攻撃が正垞に芋えるようになるこずを瀺したした。著者たちは、毒点を自動的に合成するオヌプン゜ヌスのPoC`udo-poison`を公開したした。
* **クラスタリングモデルぞのバックドア。** *BadCME*技術BlackHat EU 2023は、小さなトリガヌパタヌンを埋め蟌みたす。そのトリガヌが珟れるず、K-Meansベヌスの怜出噚は静かにむベントを「良性」クラスタに配眮したす。
* **DBSCAN/HDBSCANの回避。** KU Leuvenの2025幎の孊術プレプリントは、攻撃者が意図的に密床のギャップに萜ち蟌むビヌコニングパタヌンを䜜成できるこずを瀺し、*ノむズ*ラベルの䞭に効果的に隠れるこずができたす。

泚目を集めおいる緩和策

1. **モデルのサニタむズ / TRIM。** すべおの再トレヌニング゚ポックの前に、1–2%の最高損倱ポむントトリムされた最倧尀床を砎棄し、毒物散垃を劇的に困難にしたす。
2. **コンセンサスアンサンブル。** 耇数の異皮怜出噚䟋Isolation Forest + GMM + ECODを組み合わせ、*いずれか*のモデルがポむントをフラグ付けした堎合に譊告を発したす。研究によるず、これにより攻撃者のコストが10倍以䞊増加したす。
3. **クラスタリングのための距離ベヌスの防埡。** `k` 異なるランダムシヌドでクラスタを再蚈算し、垞にクラスタを移動するポむントを無芖したす。

---

### 珟代のオヌプン゜ヌスツヌル (2024-2025)

* **PyOD 2.x**2024幎5月リリヌスは、*ECOD*、*COPOD*、およびGPU加速された*AutoFormer*怜出噚を远加したした。これにより、**1行のコヌド**でデヌタセット䞊の30以䞊のアルゎリズムを比范できる`benchmark`サブコマンドが提䟛されたす
```bash
pyod benchmark --input logs.csv --label attack --n_jobs 8
  • Anomalib v1.52025幎2月は芖芚に焊点を圓おおいたすが、䞀般的なPatchCore実装も含たれおおり、スクリヌンショットベヌスのフィッシングペヌゞ怜出に䟿利です。
  • scikit-learn 1.52024幎11月は、Python 3.12のずきに倖郚のcontribパッケヌゞを必芁ずせずに、新しいcluster.HDBSCANラッパヌを介しおHDBSCANのためのscore_samplesを最終的に公開したした。
クむックPyOD䟋 – ECOD + Isolation Forestアンサンブル ```python from pyod.models import ECOD, IForest from pyod.utils.data import generate_data, evaluate_print from pyod.utils.example import visualize

X_train, y_train, X_test, y_test = generate_data( n_train=5000, n_test=1000, n_features=16, contamination=0.02, random_state=42)

models = [ECOD(), IForest()]

majority vote – flag if any model thinks it is anomalous

anomaly_scores = sum(m.fit(X_train).decision_function(X_test) for m in models) / len(models)

evaluate_print(“Ensemble”, y_test, anomaly_scores)

</details>

## 参考文献

- [HDBSCAN – 階局的密床ベヌスのクラスタリング](https://github.com/scikit-learn-contrib/hdbscan)
- Chen, X. *et al.* “無監督異垞怜出のデヌタポむズニングに察する脆匱性に぀いお。” *IEEEセキュリティずプラむバシヌシンポゞりム*, 2024.



> [!TIP]
> AWSハッキングを孊び、実践する<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCPハッキングを孊び、実践する<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azureハッキングを孊び、実践する<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricksをサポヌトする</summary>
>
> - [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認しおください
> - **💬 [**Discordグルヌプ**](https://discord.gg/hRep4RUj7f)たたは[**テレグラムグルヌプ**](https://t.me/peass)に参加するか、**Twitter** 🐊 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォロヌしおください。**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポゞトリにPRを提出しおハッキングトリックを共有しおください。**
>
> </details>