mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md'] to ko
This commit is contained in:
parent
69a17010ed
commit
632150c8fe
@ -16,7 +16,7 @@ K-평균은 각 점을 가장 가까운 클러스터 평균에 할당하여 데
|
||||
4. **반복**: 클러스터 할당이 안정화될 때까지(센트로이드가 더 이상 크게 이동하지 않음) 2-3단계를 반복합니다.
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안에서의 사용 사례:* K-평균은 네트워크 이벤트를 클러스터링하여 침입 탐지에 사용됩니다. 예를 들어, 연구자들은 KDD Cup 99 침입 데이터셋에 K-평균을 적용하여 트래픽을 정상 클러스터와 공격 클러스터로 효과적으로 분할했습니다. 실제로 보안 분석가는 로그 항목이나 사용자 행동 데이터를 클러스터링하여 유사한 활동 그룹을 찾을 수 있습니다. 잘 형성된 클러스터에 속하지 않는 모든 점은 이상을 나타낼 수 있습니다(예: 새로운 맬웨어 변종이 자체 작은 클러스터를 형성하는 경우). K-평균은 행동 프로필이나 특성 벡터를 기반으로 이진 파일을 그룹화하여 맬웨어 가족 분류에도 도움을 줄 수 있습니다.
|
||||
> *사이버 보안에서의 사용 사례:* K-평균은 네트워크 이벤트를 클러스터링하여 침입 탐지에 사용됩니다. 예를 들어, 연구자들은 KDD Cup 99 침입 데이터셋에 K-평균을 적용하여 트래픽을 정상 클러스터와 공격 클러스터로 효과적으로 분할했습니다. 실제로 보안 분석가는 로그 항목이나 사용자 행동 데이터를 클러스터링하여 유사한 활동 그룹을 찾을 수 있습니다. 잘 형성된 클러스터에 속하지 않는 모든 포인트는 이상을 나타낼 수 있습니다(예: 새로운 맬웨어 변종이 자체 작은 클러스터를 형성하는 경우). K-평균은 행동 프로필이나 특성 벡터를 기반으로 이진 파일을 그룹화하여 맬웨어 가족 분류에도 도움을 줄 수 있습니다.
|
||||
|
||||
#### K 선택
|
||||
클러스터 수(K)는 알고리즘을 실행하기 전에 정의해야 하는 하이퍼파라미터입니다. Elbow Method 또는 Silhouette Score와 같은 기술은 클러스터링 성능을 평가하여 K에 적절한 값을 결정하는 데 도움이 될 수 있습니다:
|
||||
@ -31,7 +31,7 @@ K-평균은 **클러스터가 구형이고 크기가 동일하다고 가정**하
|
||||
<details>
|
||||
<summary>예시 -- 네트워크 이벤트 클러스터링
|
||||
</summary>
|
||||
아래에서는 네트워크 트래픽 데이터를 시뮬레이션하고 K-평균을 사용하여 클러스터링합니다. 연결 지속 시간 및 바이트 수와 같은 특성을 가진 이벤트가 있다고 가정합니다. "정상" 트래픽의 3개 클러스터와 공격 패턴을 나타내는 1개의 작은 클러스터를 생성합니다. 그런 다음 K-평균을 실행하여 이들이 분리되는지 확인합니다.
|
||||
아래에서 우리는 네트워크 트래픽 데이터를 시뮬레이션하고 K-평균을 사용하여 클러스터링합니다. 연결 지속 시간 및 바이트 수와 같은 특성을 가진 이벤트가 있다고 가정합니다. 우리는 "정상" 트래픽의 3개 클러스터와 공격 패턴을 나타내는 1개의 작은 클러스터를 생성합니다. 그런 다음 K-평균을 실행하여 이들이 분리되는지 확인합니다.
|
||||
</details>
|
||||
```python
|
||||
import numpy as np
|
||||
@ -58,7 +58,7 @@ print("Cluster centers (duration, bytes):")
|
||||
for idx, center in enumerate(kmeans.cluster_centers_):
|
||||
print(f" Cluster {idx}: {center}")
|
||||
```
|
||||
이 예제에서 K-Means는 4개의 클러스터를 찾아야 합니다. 비정상적으로 높은 지속 시간(~200)을 가진 작은 공격 클러스터는 정상 클러스터와의 거리로 인해 이상적으로 자체 클러스터를 형성할 것입니다. 우리는 결과를 해석하기 위해 클러스터 크기와 중심을 출력합니다. 실제 시나리오에서는 몇 개의 포인트로 클러스터에 잠재적 이상 징후로 레이블을 붙이거나 악의적인 활동을 위해 구성원을 검사할 수 있습니다.
|
||||
이 예제에서 K-Means는 4개의 클러스터를 찾아야 합니다. 비정상적으로 높은 지속 시간(~200)을 가진 작은 공격 클러스터는 정상 클러스터와의 거리로 인해 이상적으로 자체 클러스터를 형성할 것입니다. 우리는 결과를 해석하기 위해 클러스터 크기와 중심을 출력합니다. 실제 시나리오에서는 몇 개의 포인트로 클러스터에 잠재적 이상으로 레이블을 붙이거나 악의적인 활동을 위해 구성원을 검사할 수 있습니다.
|
||||
|
||||
### 계층적 클러스터링
|
||||
|
||||
@ -67,16 +67,16 @@ print(f" Cluster {idx}: {center}")
|
||||
1. **응집적 (Bottom-Up)**: 각 데이터 포인트를 별도의 클러스터로 시작하고 가장 가까운 클러스터를 반복적으로 병합하여 단일 클러스터가 남거나 중지 기준이 충족될 때까지 진행합니다.
|
||||
2. **분할적 (Top-Down)**: 모든 데이터 포인트를 단일 클러스터로 시작하고 각 데이터 포인트가 자신의 클러스터가 되거나 중지 기준이 충족될 때까지 클러스터를 반복적으로 분할합니다.
|
||||
|
||||
응집적 클러스터링은 클러스터 간 거리 정의와 어떤 클러스터를 병합할지를 결정하는 연결 기준이 필요합니다. 일반적인 연결 방법에는 단일 연결(두 클러스터 간 가장 가까운 포인트의 거리), 완전 연결(가장 먼 포인트의 거리), 평균 연결 등이 있으며, 거리 측정은 종종 유클리드입니다. 연결의 선택은 생성된 클러스터의 형태에 영향을 미칩니다. 클러스터 수 K를 미리 지정할 필요는 없으며, 원하는 클러스터 수를 얻기 위해 선택한 수준에서 덴드로그램을 "컷"할 수 있습니다.
|
||||
응집적 클러스터링은 클러스터 간 거리 정의와 어떤 클러스터를 병합할지를 결정하는 연결 기준이 필요합니다. 일반적인 연결 방법에는 단일 연결(두 클러스터 간 가장 가까운 점의 거리), 완전 연결(가장 먼 점의 거리), 평균 연결 등이 있으며, 거리 측정 기준은 종종 유클리드입니다. 연결의 선택은 생성된 클러스터의 형태에 영향을 미칩니다. 클러스터 수 K를 미리 지정할 필요는 없으며, 원하는 클러스터 수를 얻기 위해 선택한 수준에서 덴드로그램을 "자를" 수 있습니다.
|
||||
|
||||
계층적 클러스터링은 덴드로그램을 생성하며, 이는 서로 다른 수준의 세분화에서 클러스터 간의 관계를 보여주는 나무와 같은 구조입니다. 덴드로그램은 특정 클러스터 수를 얻기 위해 원하는 수준에서 잘릴 수 있습니다.
|
||||
계층적 클러스터링은 덴드로그램을 생성하며, 이는 서로 다른 수준의 세분성에서 클러스터 간의 관계를 보여주는 나무와 같은 구조입니다. 덴드로그램은 특정 클러스터 수를 얻기 위해 원하는 수준에서 잘릴 수 있습니다.
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안의 사용 사례:* 계층적 클러스터링은 이벤트나 엔티티를 트리로 조직하여 관계를 파악할 수 있습니다. 예를 들어, 악성 코드 분석에서 응집적 클러스터링은 샘플을 행동 유사성에 따라 그룹화하여 악성 코드 패밀리 및 변종의 계층을 드러낼 수 있습니다. 네트워크 보안에서는 IP 트래픽 흐름을 클러스터링하고 덴드로그램을 사용하여 트래픽의 하위 그룹을 볼 수 있습니다(예: 프로토콜별, 행동별). K를 미리 선택할 필요가 없기 때문에 공격 카테고리 수가 알려지지 않은 새로운 데이터를 탐색할 때 유용합니다.
|
||||
> *사이버 보안의 사용 사례:* 계층적 클러스터링은 이벤트나 엔티티를 트리로 조직하여 관계를 파악할 수 있습니다. 예를 들어, 악성 코드 분석에서 응집적 클러스터링은 샘플을 행동 유사성에 따라 그룹화하여 악성 코드 패밀리와 변종의 계층을 드러낼 수 있습니다. 네트워크 보안에서는 IP 트래픽 흐름을 클러스터링하고 덴드로그램을 사용하여 트래픽의 하위 그룹을 볼 수 있습니다(예: 프로토콜별, 행동별). K를 미리 선택할 필요가 없기 때문에 공격 카테고리 수가 알려지지 않은 새로운 데이터를 탐색할 때 유용합니다.
|
||||
|
||||
#### 가정 및 한계
|
||||
|
||||
계층적 클러스터링은 특정 클러스터 형태를 가정하지 않으며 중첩된 클러스터를 포착할 수 있습니다. 이는 그룹 간의 분류법이나 관계를 발견하는 데 유용합니다(예: 악성 코드를 패밀리 하위 그룹으로 그룹화). 이는 결정적이며(무작위 초기화 문제 없음) 주요 장점은 덴드로그램으로, 모든 규모에서 데이터의 클러스터링 구조에 대한 통찰력을 제공합니다 – 보안 분석가는 의미 있는 클러스터를 식별하기 위해 적절한 컷오프를 결정할 수 있습니다. 그러나 계산 비용이 많이 들며(일반적으로 단순 구현의 경우 $O(n^2)$ 시간 또는 그 이상) 매우 큰 데이터 세트에는 실현 가능하지 않습니다. 또한 이는 탐욕적 절차로, 병합이나 분할이 이루어진 후에는 되돌릴 수 없으며, 초기 실수로 인해 최적이 아닌 클러스터가 발생할 수 있습니다. 이상치는 일부 연결 전략(단일 연결이 이상치를 통해 클러스터를 연결하는 "체인" 효과를 유발할 수 있음)에 영향을 미칠 수 있습니다.
|
||||
계층적 클러스터링은 특정 클러스터 형태를 가정하지 않으며 중첩된 클러스터를 포착할 수 있습니다. 이는 그룹 간의 분류법이나 관계를 발견하는 데 유용합니다(예: 악성 코드를 패밀리 하위 그룹으로 그룹화). 이는 결정적이며(무작위 초기화 문제 없음) 주요 장점은 덴드로그램으로, 데이터의 클러스터링 구조에 대한 통찰력을 모든 규모에서 제공합니다 – 보안 분석가는 의미 있는 클러스터를 식별하기 위해 적절한 컷오프를 결정할 수 있습니다. 그러나 계산 비용이 많이 들며(일반적으로 $O(n^2)$ 시간 또는 단순 구현의 경우 더 나쁨) 매우 큰 데이터 세트에는 실현 가능하지 않습니다. 또한 이는 탐욕적 절차로, 병합이나 분할이 이루어진 후에는 되돌릴 수 없으며, 초기 실수로 인해 최적이 아닌 클러스터가 발생할 수 있습니다. 이상치는 일부 연결 전략(단일 연결이 이상치를 통해 클러스터가 연결되는 "체인" 효과를 유발할 수 있음)에 영향을 미칠 수 있습니다.
|
||||
|
||||
<details>
|
||||
<summary>예제 -- 이벤트의 응집적 클러스터링
|
||||
@ -104,27 +104,27 @@ print(f"Cluster sizes for 3 clusters: {np.bincount(clusters_3)}")
|
||||
|
||||
### DBSCAN (밀도 기반 공간 클러스터링 알고리즘)
|
||||
|
||||
DBSCAN은 밀도 기반 클러스터링 알고리즘으로, 밀집된 점들을 함께 그룹화하고 저밀도 지역의 점들을 이상치로 표시합니다. 이는 다양한 밀도와 비구형 형태를 가진 데이터셋에 특히 유용합니다.
|
||||
DBSCAN은 밀도 기반 클러스터링 알고리즘으로, 밀집된 포인트를 함께 그룹화하고 저밀도 지역의 포인트를 이상치로 표시합니다. 이는 다양한 밀도와 비구형 형태의 데이터셋에 특히 유용합니다.
|
||||
|
||||
DBSCAN은 두 개의 매개변수를 정의하여 작동합니다:
|
||||
- **Epsilon (ε)**: 동일 클러스터의 일부로 간주될 두 점 사이의 최대 거리.
|
||||
- **MinPts**: 밀집 지역(핵심 점)을 형성하는 데 필요한 최소 점 수.
|
||||
- **Epsilon (ε)**: 동일 클러스터의 일부로 간주될 두 포인트 간의 최대 거리.
|
||||
- **MinPts**: 밀집 지역(핵심 포인트)을 형성하는 데 필요한 최소 포인트 수.
|
||||
|
||||
DBSCAN은 핵심 점, 경계 점 및 노이즈 점을 식별합니다:
|
||||
- **핵심 점**: ε 거리 내에 최소 MinPts 이웃이 있는 점.
|
||||
- **경계 점**: 핵심 점의 ε 거리 내에 있지만 MinPts 이웃이 부족한 점.
|
||||
- **노이즈 점**: 핵심 점도 경계 점도 아닌 점.
|
||||
DBSCAN은 핵심 포인트, 경계 포인트 및 노이즈 포인트를 식별합니다:
|
||||
- **핵심 포인트**: ε 거리 내에 최소 MinPts 이웃이 있는 포인트.
|
||||
- **경계 포인트**: 핵심 포인트의 ε 거리 내에 있지만 MinPts 이웃이 적은 포인트.
|
||||
- **노이즈 포인트**: 핵심 포인트도 경계 포인트도 아닌 포인트.
|
||||
|
||||
클러스터링은 방문하지 않은 핵심 점을 선택하고 이를 새로운 클러스터로 표시한 다음, 그로부터 밀도에 도달 가능한 모든 점(핵심 점 및 그 이웃 등)을 재귀적으로 추가하는 방식으로 진행됩니다. 경계 점은 인근 핵심의 클러스터에 추가됩니다. 모든 도달 가능한 점을 확장한 후, DBSCAN은 다른 방문하지 않은 핵심으로 이동하여 새로운 클러스터를 시작합니다. 어떤 핵심에 의해서도 도달되지 않은 점은 노이즈로 남아 있습니다.
|
||||
클러스터링은 방문하지 않은 핵심 포인트를 선택하고 이를 새로운 클러스터로 표시한 다음, 그로부터 밀도에 도달 가능한 모든 포인트(핵심 포인트 및 그 이웃 등)를 재귀적으로 추가하는 방식으로 진행됩니다. 경계 포인트는 인근 핵심의 클러스터에 추가됩니다. 모든 도달 가능한 포인트를 확장한 후, DBSCAN은 다른 방문하지 않은 핵심으로 이동하여 새로운 클러스터를 시작합니다. 어떤 핵심에도 도달하지 못한 포인트는 노이즈로 남아 있습니다.
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안에서의 사용 사례:* DBSCAN은 네트워크 트래픽에서 이상 탐지에 유용합니다. 예를 들어, 정상 사용자 활동은 특성 공간에서 하나 이상의 밀집 클러스터를 형성할 수 있으며, 새로운 공격 행동은 DBSCAN이 노이즈(이상치)로 레이블을 붙일 분산된 점으로 나타납니다. 이는 포트 스캔이나 서비스 거부 트래픽을 점의 희소 지역으로 감지할 수 있는 네트워크 흐름 기록을 클러스터링하는 데 사용되었습니다. 또 다른 응용 프로그램은 악성 코드 변종 그룹화입니다: 대부분의 샘플이 가족별로 클러스터링되지만 몇 개는 어디에도 맞지 않는 경우, 그 몇 개는 제로데이 악성 코드일 수 있습니다. 노이즈를 플래그할 수 있는 능력 덕분에 보안 팀은 이러한 이상치를 조사하는 데 집중할 수 있습니다.
|
||||
> *사이버 보안에서의 사용 사례:* DBSCAN은 네트워크 트래픽에서 이상 탐지에 유용합니다. 예를 들어, 정상 사용자 활동은 특성 공간에서 하나 이상의 밀집 클러스터를 형성할 수 있으며, 새로운 공격 행동은 DBSCAN이 노이즈(이상치)로 레이블을 붙일 산재된 포인트로 나타납니다. 이는 포트 스캔이나 서비스 거부 트래픽을 희박한 포인트 지역으로 감지할 수 있는 네트워크 흐름 기록을 클러스터링하는 데 사용되었습니다. 또 다른 응용 프로그램은 악성코드 변종 그룹화입니다: 대부분의 샘플이 가족별로 클러스터링되지만 몇 개는 어디에도 맞지 않는 경우, 그 몇 개는 제로데이 악성코드일 수 있습니다. 노이즈를 플래그할 수 있는 능력 덕분에 보안 팀은 이러한 이상치를 조사하는 데 집중할 수 있습니다.
|
||||
|
||||
#### 가정 및 한계
|
||||
|
||||
**가정 및 강점:** DBSCAN은 구형 클러스터를 가정하지 않습니다 – 임의의 형태의 클러스터(체인형 또는 인접 클러스터 등)를 찾을 수 있습니다. 데이터 밀도에 따라 클러스터 수를 자동으로 결정하며, 이상치를 노이즈로 효과적으로 식별할 수 있습니다. 이는 불규칙한 형태와 노이즈를 가진 실제 데이터에 강력합니다. 이상치에 대해 강건하며(K-Means와 달리 클러스터로 강제로 넣지 않음), 클러스터가 대략 균일한 밀도를 가질 때 잘 작동합니다.
|
||||
**가정 및 강점:** DBSCAN은 구형 클러스터를 가정하지 않습니다 – 임의의 형태의 클러스터(체인형 또는 인접 클러스터 등)를 찾을 수 있습니다. 데이터 밀도에 따라 클러스터 수를 자동으로 결정하고 이상치를 노이즈로 효과적으로 식별할 수 있습니다. 이는 불규칙한 형태와 노이즈가 있는 실제 데이터에 강력합니다. 이상치에 대해 강건합니다(K-Means와 달리 클러스터에 강제로 포함시키지 않음). 클러스터가 대략 균일한 밀도를 가질 때 잘 작동합니다.
|
||||
|
||||
**한계:** DBSCAN의 성능은 적절한 ε 및 MinPts 값을 선택하는 데 의존합니다. 밀도가 다양한 데이터에 대해 어려움을 겪을 수 있으며, 단일 ε는 밀집 클러스터와 희소 클러스터를 모두 수용할 수 없습니다. ε가 너무 작으면 대부분의 점을 노이즈로 레이블링하고, 너무 크면 클러스터가 잘못 병합될 수 있습니다. 또한, DBSCAN은 매우 큰 데이터셋에서 비효율적일 수 있으며(단순하게 $O(n^2)$, 공간 인덱싱이 도움이 될 수 있음), 고차원 특성 공간에서는 “ε 내 거리” 개념이 덜 의미 있게 될 수 있습니다(차원의 저주) 및 DBSCAN은 신중한 매개변수 조정이 필요하거나 직관적인 클러스터를 찾지 못할 수 있습니다. 그럼에도 불구하고 HDBSCAN과 같은 확장은 일부 문제(예: 밀도 변화)를 해결합니다.
|
||||
**한계:** DBSCAN의 성능은 적절한 ε 및 MinPts 값을 선택하는 데 의존합니다. 밀도가 다양한 데이터에 대해 어려움을 겪을 수 있습니다 – 단일 ε는 밀집 클러스터와 희박 클러스터를 모두 수용할 수 없습니다. ε가 너무 작으면 대부분의 포인트를 노이즈로 레이블링하고, 너무 크면 클러스터가 잘못 병합될 수 있습니다. 또한, DBSCAN은 매우 큰 데이터셋에서 비효율적일 수 있습니다(단순하게 $O(n^2)$, 그러나 공간 인덱싱이 도움이 될 수 있습니다). 고차원 특성 공간에서는 “ε 내 거리” 개념이 덜 의미 있게 될 수 있으며(차원의 저주), DBSCAN은 신중한 매개변수 조정이 필요하거나 직관적인 클러스터를 찾지 못할 수 있습니다. 그럼에도 불구하고 HDBSCAN과 같은 확장은 일부 문제(예: 밀도 변화)를 해결합니다.
|
||||
|
||||
<details>
|
||||
<summary>예시 -- 노이즈가 있는 클러스터링
|
||||
@ -150,7 +150,7 @@ 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로 설정됨)를 반복하여 안정적인 클러스터링 결과를 찾을 수 있습니다. 노이즈를 명시적으로 레이블링하는 기능은 추가 분석을 위한 잠재적 공격 데이터를 분리하는 데 도움이 됩니다.
|
||||
이 스니펫에서는 `eps`와 `min_samples`를 데이터 스케일에 맞게 조정했습니다(특징 단위로 15.0, 클러스터를 형성하기 위해 5개의 포인트 필요). DBSCAN은 2개의 클러스터(정상 트래픽 클러스터)를 찾아야 하며, 5개의 주입된 이상치를 노이즈로 플래그해야 합니다. 이를 검증하기 위해 클러스터 수와 노이즈 포인트 수를 출력합니다. 실제 환경에서는 ε(ε를 선택하기 위해 k-거리 그래프 휴리스틱 사용)와 MinPts(일반적으로 데이터 차원 + 1로 설정) 위를 반복하여 안정적인 클러스터링 결과를 찾을 수 있습니다. 노이즈를 명시적으로 레이블링하는 기능은 추가 분석을 위한 잠재적 공격 데이터를 분리하는 데 도움이 됩니다.
|
||||
|
||||
</details>
|
||||
|
||||
@ -179,7 +179,7 @@ A가 정방 행렬이고, v가 0이 아닌 벡터라고 가정합시다: `A * v
|
||||
|
||||
그럼 `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]`가 되어 고유값 λ는 고유벡터 v에 곱해져 λ = 3이 됩니다.
|
||||
|
||||
#### PCA에서의 고유값과 고유벡터
|
||||
#### PCA의 고유값과 고유벡터
|
||||
|
||||
예를 들어 설명해 보겠습니다. 100x100 픽셀의 얼굴 그레이스케일 이미지가 많은 데이터셋이 있다고 가정해 보겠습니다. 각 픽셀은 특징으로 간주될 수 있으므로 이미지당 10,000개의 특징(또는 이미지당 10,000개의 구성 요소 벡터)이 있습니다. 이 데이터셋의 차원을 PCA를 사용하여 줄이려면 다음 단계를 따릅니다:
|
||||
|
||||
@ -194,11 +194,11 @@ A가 정방 행렬이고, v가 0이 아닌 벡터라고 가정합시다: `A * v
|
||||
4. **주성분 선택**: 고유값을 내림차순으로 정렬하고 가장 큰 고유값에 해당하는 상위 K개의 고유벡터를 선택합니다. 이 고유벡터는 데이터의 최대 분산 방향을 나타냅니다.
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안에서의 사용 사례:* PCA의 일반적인 사용은 이상 탐지를 위한 특징 축소입니다. 예를 들어, 40개 이상의 네트워크 메트릭(예: NSL-KDD 특징)을 가진 침입 탐지 시스템은 PCA를 사용하여 몇 개의 구성 요소로 줄여 데이터를 시각화하거나 클러스터링 알고리즘에 입력할 수 있습니다. 분석가는 첫 번째 두 주성분의 공간에서 네트워크 트래픽을 플롯하여 공격이 정상 트래픽과 분리되는지를 확인할 수 있습니다. PCA는 또한 상관관계가 있는 경우(예: 전송된 바이트와 수신된 바이트) 중복된 특징을 제거하여 탐지 알고리즘을 더 강력하고 빠르게 만드는 데 도움이 될 수 있습니다.
|
||||
> *사이버 보안에서의 사용 사례:* PCA의 일반적인 사용 중 하나는 이상 탐지를 위한 특징 축소입니다. 예를 들어, 40개 이상의 네트워크 메트릭(예: NSL-KDD 특징)을 가진 침입 탐지 시스템은 PCA를 사용하여 몇 개의 구성 요소로 줄여 데이터를 시각화하거나 클러스터링 알고리즘에 입력할 수 있습니다. 분석가는 첫 번째 두 주성분의 공간에서 네트워크 트래픽을 플로팅하여 공격이 정상 트래픽과 분리되는지를 확인할 수 있습니다. PCA는 또한 상관관계가 있는 경우 전송된 바이트와 수신된 바이트와 같은 중복 특징을 제거하여 탐지 알고리즘을 더 강력하고 빠르게 만드는 데 도움이 될 수 있습니다.
|
||||
|
||||
#### 가정 및 한계
|
||||
|
||||
PCA는 **분산의 주축이 의미가 있다고 가정합니다** – 이는 선형 방법이므로 데이터의 선형 상관관계를 포착합니다. PCA는 특징 공분산만 사용하므로 비지도 학습입니다. PCA의 장점에는 노이즈 감소(작은 분산 구성 요소는 종종 노이즈에 해당)와 특징의 비상관화가 포함됩니다. 이는 중간 정도의 높은 차원에 대해 계산적으로 효율적이며, 종종 다른 알고리즘의 전처리 단계로 유용합니다(차원의 저주를 완화하기 위해). 한계 중 하나는 PCA가 선형 관계에만 제한된다는 것입니다 – 복잡한 비선형 구조는 포착하지 못합니다(오토인코더나 t-SNE는 포착할 수 있습니다). 또한 PCA 구성 요소는 원래 특징 측면에서 해석하기 어려울 수 있습니다(원래 특징의 조합이기 때문입니다). 사이버 보안에서는 주의해야 합니다: 낮은 분산 특징에서 미세한 변화만 일으키는 공격은 상위 PC에서 나타나지 않을 수 있습니다(왜냐하면 PCA는 반드시 "흥미로움"이 아니라 분산을 우선시하기 때문입니다).
|
||||
PCA는 **분산의 주축이 의미가 있다고 가정합니다** – 이는 선형 방법이므로 데이터의 선형 상관관계를 포착합니다. PCA는 특징 공분산만 사용하므로 비지도 학습입니다. PCA의 장점에는 노이즈 감소(작은 분산 구성 요소는 종종 노이즈에 해당)와 특징의 비상관화가 포함됩니다. 이는 중간 정도의 높은 차원에 대해 계산적으로 효율적이며 종종 다른 알고리즘의 전처리 단계로 유용합니다(차원의 저주를 완화하기 위해). 한계 중 하나는 PCA가 선형 관계에만 제한된다는 것입니다 – 복잡한 비선형 구조는 포착하지 못합니다(오토인코더나 t-SNE는 가능할 수 있습니다). 또한 PCA 구성 요소는 원래 특징 측면에서 해석하기 어려울 수 있습니다(원래 특징의 조합이기 때문입니다). 사이버 보안에서는 주의해야 합니다: 낮은 분산 특징에서 미세한 변화만 일으키는 공격은 상위 PC에서 나타나지 않을 수 있습니다(왜냐하면 PCA는 반드시 "흥미로움"이 아니라 분산을 우선시하기 때문입니다).
|
||||
|
||||
<details>
|
||||
<summary>예제 -- 네트워크 데이터의 차원 축소
|
||||
@ -224,7 +224,7 @@ 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])
|
||||
```
|
||||
여기에서는 이전의 정상 트래픽 클러스터를 가져와 각 데이터 포인트에 바이트 및 지속 시간과 상관관계가 있는 두 개의 추가 기능(패킷 및 오류)을 확장했습니다. 그런 다음 PCA를 사용하여 4개의 기능을 2개의 주성분으로 압축합니다. 우리는 설명된 분산 비율을 출력하며, 이는 예를 들어 2개의 구성 요소가 95% 이상의 분산을 포착한다고 보여줄 수 있습니다(즉, 정보 손실이 적음을 의미). 출력은 데이터 형태가 (1500, 4)에서 (1500, 2)로 줄어드는 것도 보여줍니다. PCA 공간의 처음 몇 개 포인트가 예시로 제공됩니다. 실제로는 data_2d를 플로팅하여 클러스터가 구별 가능한지 시각적으로 확인할 수 있습니다. 이상이 존재하는 경우, PCA 공간에서 주요 클러스터에서 멀리 떨어진 점으로 나타날 수 있습니다. 따라서 PCA는 복잡한 데이터를 인간 해석을 위한 관리 가능한 형태로 정제하거나 다른 알고리즘의 입력으로 사용할 수 있도록 도와줍니다.
|
||||
여기에서는 이전의 정상 트래픽 클러스터를 가져와 각 데이터 포인트에 바이트 및 지속 시간과 상관관계가 있는 두 개의 추가 기능(패킷 및 오류)을 확장했습니다. 그런 다음 PCA를 사용하여 4개의 기능을 2개의 주성분으로 압축합니다. 우리는 설명된 분산 비율을 출력하며, 이는 예를 들어 2개의 구성 요소가 95% 이상의 분산을 포착한다고 보여줄 수 있습니다(즉, 정보 손실이 적음을 의미). 출력은 데이터 형태가 (1500, 4)에서 (1500, 2)로 줄어드는 것도 보여줍니다. PCA 공간의 처음 몇 개 포인트가 예로 제공됩니다. 실제로는 data_2d를 플로팅하여 클러스터가 구별 가능한지 시각적으로 확인할 수 있습니다. 이상이 존재하는 경우, PCA 공간에서 주요 클러스터에서 멀리 떨어진 점으로 나타날 수 있습니다. 따라서 PCA는 복잡한 데이터를 인간 해석을 위한 관리 가능한 형태로 정제하거나 다른 알고리즘의 입력으로 사용할 수 있도록 도와줍니다.
|
||||
|
||||
</details>
|
||||
|
||||
@ -241,29 +241,29 @@ GMM 적합은 일반적으로 기대-최대화(EM) 알고리즘을 통해 수행
|
||||
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 \)에 대한 가우시안 확률 밀도 함수입니다.
|
||||
- \( \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에 대한 평균 책임으로 혼합 계수 π_k를 업데이트합니다.
|
||||
|
||||
- **E 및 M 단계를 반복**하여 수렴할 때까지(매개변수가 안정화되거나 우도 개선이 임계값 이하로 떨어질 때까지).
|
||||
- **E 및 M 단계를 반복**하여 수렴할 때까지(매개변수가 안정되거나 우도 개선이 임계값 이하로 떨어질 때까지).
|
||||
|
||||
결과는 전체 데이터 분포를 집합적으로 모델링하는 가우시안 분포 집합입니다. 적합된 GMM을 사용하여 각 포인트를 가장 높은 확률을 가진 가우시안에 할당하여 클러스터링하거나 불확실성을 위해 확률을 유지할 수 있습니다. 새로운 포인트의 우도를 평가하여 모델에 적합한지 확인할 수도 있습니다(이상 탐지에 유용).
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안의 사용 사례:* GMM은 정상 데이터의 분포를 모델링하여 이상 탐지에 사용할 수 있습니다: 학습된 혼합 아래에서 매우 낮은 확률을 가진 포인트는 이상으로 표시됩니다. 예를 들어, 합법적인 네트워크 트래픽 기능에 대해 GMM을 훈련할 수 있습니다; 학습된 클러스터와 유사하지 않은 공격 연결은 낮은 우도를 가질 것입니다. GMM은 클러스터가 서로 다른 모양을 가질 수 있는 활동을 클러스터링하는 데에도 사용됩니다 – 예를 들어, 각 프로필의 기능이 가우시안과 유사하지만 고유한 분산 구조를 가진 행동 프로필에 따라 사용자를 그룹화하는 것입니다. 또 다른 시나리오는 피싱 탐지에서 합법적인 이메일 기능이 하나의 가우시안 클러스터를 형성하고, 알려진 피싱이 다른 클러스터를 형성하며, 새로운 피싱 캠페인이 기존 혼합에 비해 별도의 가우시안 또는 낮은 확률 포인트로 나타날 수 있습니다.
|
||||
> *사이버 보안의 사용 사례:* GMM은 정상 데이터의 분포를 모델링하여 이상 탐지에 사용할 수 있습니다: 학습된 혼합 아래에서 매우 낮은 확률을 가진 포인트는 이상으로 표시됩니다. 예를 들어, 합법적인 네트워크 트래픽 기능에 대해 GMM을 훈련할 수 있습니다; 학습된 클러스터와 유사하지 않은 공격 연결은 낮은 우도를 가질 것입니다. GMM은 클러스터가 서로 다른 모양을 가질 수 있는 활동을 클러스터링하는 데에도 사용됩니다 – 예를 들어, 각 프로필의 기능이 가우시안과 유사하지만 고유한 분산 구조를 가진 행동 프로필에 따라 사용자를 그룹화하는 경우입니다. 또 다른 시나리오는 피싱 탐지에서 합법적인 이메일 기능이 하나의 가우시안 클러스터를 형성하고, 알려진 피싱이 다른 클러스터를 형성하며, 새로운 피싱 캠페인이 기존 혼합에 비해 별도의 가우시안 또는 낮은 확률 포인트로 나타날 수 있습니다.
|
||||
|
||||
#### 가정 및 한계
|
||||
|
||||
GMM은 공분산을 포함하는 K-평균의 일반화로, 클러스터가 타원형일 수 있습니다(구형에 국한되지 않음). 공분산이 완전할 경우 서로 다른 크기와 모양의 클러스터를 처리합니다. 클러스터 경계가 모호할 때 소프트 클러스터링은 장점이 있습니다 – 예를 들어, 사이버 보안에서 이벤트는 여러 공격 유형의 특성을 가질 수 있습니다; GMM은 확률로 그 불확실성을 반영할 수 있습니다. GMM은 또한 데이터의 확률 밀도 추정을 제공하여 이상치(모든 혼합 구성 요소 아래에서 낮은 우도를 가진 포인트)를 탐지하는 데 유용합니다.
|
||||
GMM은 공분산을 포함하는 K-평균의 일반화로, 클러스터가 타원형일 수 있습니다(구형에 국한되지 않음). 공분산이 완전할 경우 서로 다른 크기와 모양의 클러스터를 처리할 수 있습니다. 클러스터 경계가 모호할 때 소프트 클러스터링은 장점입니다 – 예를 들어, 사이버 보안에서 이벤트는 여러 공격 유형의 특성을 가질 수 있습니다; GMM은 확률로 그 불확실성을 반영할 수 있습니다. GMM은 또한 데이터의 확률 밀도 추정을 제공하여 이상치를 탐지하는 데 유용합니다(모든 혼합 구성 요소 아래에서 낮은 우도를 가진 포인트).
|
||||
|
||||
단점으로는 GMM이 구성 요소 K의 수를 지정해야 한다는 점이 있습니다(그러나 BIC/AIC와 같은 기준을 사용하여 선택할 수 있습니다). EM은 때때로 느리게 수렴하거나 지역 최적점에 수렴할 수 있으므로 초기화가 중요합니다(종종 EM을 여러 번 실행합니다). 데이터가 실제로 가우시안의 혼합을 따르지 않는 경우 모델이 잘 맞지 않을 수 있습니다. 하나의 가우시안이 단지 이상치를 덮기 위해 축소되는 위험도 있으며(정규화 또는 최소 공분산 경계로 완화할 수 있음).
|
||||
단점으로는 GMM이 구성 요소 수 K를 지정해야 한다는 점이 있습니다(그러나 BIC/AIC와 같은 기준을 사용하여 선택할 수 있습니다). EM은 때때로 느리게 수렴하거나 지역 최적점에 수렴할 수 있으므로 초기화가 중요합니다(종종 EM을 여러 번 실행합니다). 데이터가 실제로 가우시안의 혼합을 따르지 않는 경우 모델이 잘 맞지 않을 수 있습니다. 하나의 가우시안이 단지 이상치를 덮기 위해 축소되는 위험도 있으며(정규화 또는 최소 공분산 경계로 완화할 수 있음).
|
||||
|
||||
<details>
|
||||
<summary>예시 -- 소프트 클러스터링 및 이상 점수
|
||||
<summary>예제 -- 소프트 클러스터링 및 이상 점수
|
||||
</summary>
|
||||
```python
|
||||
from sklearn.mixture import GaussianMixture
|
||||
@ -283,28 +283,28 @@ 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개 프로필을 알고 있다고 가정). 인쇄된 평균과 공분산은 이러한 클러스터를 설명합니다(예를 들어, 하나의 평균은 [50,500] 근처일 수 있으며 이는 하나의 클러스터 중심에 해당합니다). 그런 다음 의심스러운 연결 [duration=200, bytes=800]을 테스트합니다. predict_proba는 이 점이 3개의 클러스터 각각에 속할 확률을 제공합니다. [200,800]이 정상 클러스터에서 멀리 떨어져 있으므로 이러한 확률은 매우 낮거나 크게 왜곡될 것으로 예상됩니다. 전체 score_samples(로그 우도)가 인쇄되며, 매우 낮은 값은 해당 점이 모델에 잘 맞지 않음을 나타내어 이를 이상치로 플래그합니다. 실제로는 로그 우도(또는 최대 확률)에 임계값을 설정하여 점이 악의적이라고 간주될 만큼 충분히 가능성이 낮은지 결정할 수 있습니다. 따라서 GMM은 이상 탐지를 수행하는 원칙적인 방법을 제공하며 불확실성을 인정하는 부드러운 클러스터를 생성합니다.
|
||||
이 코드에서는 정상 트래픽에서 3개의 가우시안으로 GMM을 훈련합니다(정상 트래픽의 3개 프로필을 알고 있다고 가정). 인쇄된 평균과 공분산은 이러한 클러스터를 설명합니다(예를 들어, 하나의 평균은 [50,500] 근처일 수 있으며 이는 하나의 클러스터 중심에 해당합니다). 그런 다음 의심스러운 연결 [duration=200, bytes=800]을 테스트합니다. predict_proba는 이 점이 3개의 클러스터 각각에 속할 확률을 제공합니다. [200,800]이 정상 클러스터에서 멀리 떨어져 있으므로 이러한 확률은 매우 낮거나 크게 왜곡될 것으로 예상됩니다. 전체 score_samples(로그 우도)가 인쇄되며, 매우 낮은 값은 해당 점이 모델에 잘 맞지 않음을 나타내어 이를 이상치로 플래그합니다. 실제로는 로그 우도(또는 최대 확률)에 임계값을 설정하여 점이 악의적이라고 간주될 만큼 충분히 가능성이 낮은지 결정할 수 있습니다. 따라서 GMM은 이상 탐지를 수행하는 원칙적인 방법을 제공하며 불확실성을 인정하는 부드러운 클러스터를 생성합니다.
|
||||
|
||||
### Isolation Forest
|
||||
|
||||
**Isolation Forest**는 점을 무작위로 격리하는 아이디어에 기반한 앙상블 이상 탐지 알고리즘입니다. 원리는 이상치는 적고 다르기 때문에 정상 점보다 격리하기가 더 쉽다는 것입니다. Isolation Forest는 데이터를 무작위로 분할하는 많은 이진 격리 트리(무작위 결정 트리)를 구축합니다. 트리의 각 노드에서 무작위 특성이 선택되고 해당 특성의 최소값과 최대값 사이에서 무작위 분할 값이 선택됩니다. 이 분할은 데이터를 두 개의 가지로 나눕니다. 각 점이 자신의 리프에 격리되거나 최대 트리 높이에 도달할 때까지 트리가 성장합니다.
|
||||
|
||||
이상 탐지는 이러한 무작위 트리에서 각 점의 경로 길이를 관찰하여 수행됩니다. 즉, 점을 격리하는 데 필요한 분할 수입니다. 직관적으로, 이상치(아웃라이어)는 무작위 분할이 밀집 클러스터의 정상 점보다 희소 지역에 있는 아웃라이어를 분리할 가능성이 더 높기 때문에 더 빨리 격리되는 경향이 있습니다. Isolation Forest는 모든 트리에서 평균 경로 길이를 기반으로 이상 점수를 계산합니다: 평균 경로가 짧을수록 → 더 이상적입니다. 점수는 일반적으로 [0,1]로 정규화되며, 1은 매우 가능성이 높은 이상치를 의미합니다.
|
||||
이상 탐지는 이러한 무작위 트리에서 각 점의 경로 길이를 관찰하여 수행됩니다. 즉, 점을 격리하는 데 필요한 분할 수입니다. 직관적으로, 이상치(이상값)는 무작위 분할이 희소 지역에 있는 이상치를 분리할 가능성이 더 높기 때문에 더 빨리 격리되는 경향이 있습니다. Isolation Forest는 모든 트리에서 평균 경로 길이를 기반으로 이상 점수를 계산합니다: 평균 경로가 짧을수록 → 더 이상적입니다. 점수는 일반적으로 [0,1]로 정규화되며, 1은 매우 가능성이 높은 이상치를 의미합니다.
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안의 사용 사례:* Isolation Forest는 침입 탐지 및 사기 탐지에 성공적으로 사용되었습니다. 예를 들어, 정상 행동이 대부분인 네트워크 트래픽 로그에서 Isolation Forest를 훈련하면, 숨어 있는 포트를 사용하는 IP나 비정상적인 패킷 크기 패턴과 같은 이상 트래픽에 대해 짧은 경로를 생성하여 검사를 위해 플래그를 지정합니다. 레이블이 지정된 공격이 필요하지 않기 때문에 알려지지 않은 공격 유형을 탐지하는 데 적합합니다. 또한 사용자 로그인 데이터에 배포하여 계정 탈취를 탐지할 수 있습니다(비정상적인 로그인 시간이나 위치가 빠르게 격리됨). 한 사용 사례에서는 Isolation Forest가 시스템 메트릭을 모니터링하고 메트릭 조합(CPU, 네트워크, 파일 변경)이 역사적 패턴과 매우 다르게 보일 때 경고를 생성하여 기업을 보호할 수 있습니다.
|
||||
> *사이버 보안의 사용 사례:* Isolation Forest는 침입 탐지 및 사기 탐지에 성공적으로 사용되었습니다. 예를 들어, 정상 행동이 대부분인 네트워크 트래픽 로그에서 Isolation Forest를 훈련하면, 숲은 이상 트래픽(예: 들어본 적 없는 포트를 사용하는 IP 또는 비정상적인 패킷 크기 패턴)에 대해 짧은 경로를 생성하여 검사를 위해 플래그를 지정합니다. 레이블이 지정된 공격이 필요하지 않기 때문에 알려지지 않은 공격 유형을 탐지하는 데 적합합니다. 또한 사용자 로그인 데이터에 배포하여 계정 탈취를 탐지할 수 있습니다(이상적인 로그인 시간이나 위치가 빠르게 격리됨). 한 사용 사례에서는 Isolation Forest가 시스템 메트릭을 모니터링하고 메트릭 조합(CPU, 네트워크, 파일 변경)이 역사적 패턴과 매우 다르게 보일 때 경고를 생성하여 기업을 보호할 수 있습니다.
|
||||
|
||||
#### Assumptions and Limitations
|
||||
|
||||
**장점**: Isolation Forest는 분포 가정을 필요로 하지 않으며, 직접적으로 격리를 목표로 합니다. 고차원 데이터와 대규모 데이터셋에서 효율적이며(숲을 구축하는 데 선형 복잡도 $O(n\log n)$) 각 트리가 오직 일부 특성과 분할로 점을 격리하기 때문에 그렇습니다. 숫자형 특성을 잘 처리하는 경향이 있으며, $O(n^2)$일 수 있는 거리 기반 방법보다 더 빠를 수 있습니다. 또한 자동으로 이상 점수를 제공하므로 경고를 위한 임계값을 설정할 수 있습니다(또는 예상 이상치 비율에 따라 자동으로 컷오프를 결정하기 위해 오염 매개변수를 사용할 수 있습니다).
|
||||
**장점**: Isolation Forest는 분포 가정을 필요로 하지 않으며, 직접적으로 격리를 목표로 합니다. 고차원 데이터와 대규모 데이터셋에서 효율적입니다(숲을 구축하는 데 선형 복잡도 $O(n\log n)$). 각 트리는 오직 일부 특성과 분할로 점을 격리합니다. 숫자 특성을 잘 처리하는 경향이 있으며, $O(n^2)$일 수 있는 거리 기반 방법보다 더 빠를 수 있습니다. 또한 자동으로 이상 점수를 제공하므로 경고를 위한 임계값을 설정할 수 있습니다(또는 예상 이상 비율에 따라 자동으로 컷오프를 결정하기 위해 오염 매개변수를 사용할 수 있습니다).
|
||||
|
||||
**제한 사항**: 무작위 특성 때문에 결과는 실행 간에 약간 다를 수 있습니다(충분히 많은 트리가 있을 경우 이는 미미합니다). 데이터에 많은 관련 없는 특성이 있거나 이상치가 어떤 특성에서도 강하게 구별되지 않는 경우, 격리가 효과적이지 않을 수 있습니다(무작위 분할이 우연히 정상 점을 격리할 수 있음 – 그러나 많은 트리를 평균화하면 이를 완화합니다). 또한, Isolation Forest는 일반적으로 이상치가 소수라는 것을 가정합니다(이는 사이버 보안 시나리오에서 일반적으로 사실입니다).
|
||||
**제한 사항**: 무작위 특성 때문에 결과는 실행 간에 약간 다를 수 있습니다(충분한 수의 트리가 있을 경우 이는 미미합니다). 데이터에 많은 관련 없는 특성이 있거나 이상치가 어떤 특성에서도 강하게 구별되지 않으면 격리가 효과적이지 않을 수 있습니다(무작위 분할이 우연히 정상 점을 격리할 수 있음 – 그러나 많은 트리를 평균화하면 이를 완화합니다). 또한, Isolation Forest는 일반적으로 이상치가 소수라는 것을 가정합니다(이는 사이버 보안 시나리오에서 일반적으로 사실입니다).
|
||||
|
||||
<details>
|
||||
<summary>예제 -- 네트워크 로그에서 이상치 탐지
|
||||
</summary>
|
||||
|
||||
우리는 이전 테스트 데이터셋(정상 및 일부 공격 점을 포함) 사용하여 Isolation Forest를 실행하여 공격을 분리할 수 있는지 확인합니다. 우리는 데이터의 약 15%가 이상치일 것으로 예상한다고 가정합니다.
|
||||
이전 테스트 데이터셋(정상 및 일부 공격 점을 포함)을 사용하여 Isolation Forest를 실행하여 공격을 분리할 수 있는지 확인합니다. 우리는 데이터의 약 15%가 이상적일 것으로 예상한다고 가정합니다.
|
||||
```python
|
||||
from sklearn.ensemble import IsolationForest
|
||||
|
||||
@ -320,30 +320,30 @@ 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])
|
||||
```
|
||||
이 코드에서는 100개의 트리로 `IsolationForest`를 인스턴스화하고 `contamination=0.15`로 설정합니다(즉, 약 15%의 이상치를 예상합니다; 모델은 ~15%의 포인트가 플래그가 지정되도록 점수 임계값을 설정합니다). 우리는 정상 포인트와 공격 포인트가 혼합된 `X_test_if`에서 이를 적합합니다(참고: 일반적으로는 훈련 데이터에 적합하고 새로운 데이터에 대해 예측하지만, 여기서는 결과를 직접 관찰하기 위해 같은 세트에서 적합하고 예측합니다).
|
||||
이 코드에서는 100개의 트리로 `IsolationForest`를 인스턴스화하고 `contamination=0.15`로 설정합니다(즉, 약 15%의 이상치를 예상하며, 모델은 ~15%의 포인트가 플래그가 지정되도록 점수 임계값을 설정합니다). 우리는 정상 포인트와 공격 포인트가 혼합된 `X_test_if`에 맞춥니다(참고: 일반적으로는 훈련 데이터에 맞춘 후 새로운 데이터에 대해 예측하지만, 여기서는 결과를 직접 관찰하기 위해 같은 세트에 맞추고 예측합니다).
|
||||
|
||||
출력은 첫 20 포인트에 대한 예측 레이블을 보여줍니다(-1은 이상치를 나타냅니다). 우리는 또한 총 몇 개의 이상치가 감지되었는지와 몇 가지 예제 이상치 점수를 출력합니다. 우리는 120 포인트 중 약 18개가 -1로 레이블이 지정될 것으로 예상합니다(오염도가 15%였기 때문입니다). 우리의 20개 공격 샘플이 실제로 가장 외곽에 있다면, 그들 대부분은 -1 예측에 나타나야 합니다. 이상치 점수(Isolation Forest의 결정 함수)는 정상 포인트에 대해 더 높고 이상치에 대해 더 낮습니다(더 부정적) – 우리는 분리를 보기 위해 몇 가지 값을 출력합니다. 실제로는 점수에 따라 데이터를 정렬하여 상위 이상치를 보고 조사할 수 있습니다. 따라서 Isolation Forest는 대규모 비표시 보안 데이터를 효율적으로 선별하고 인간 분석이나 추가 자동 검토를 위해 가장 불규칙한 인스턴스를 선택하는 방법을 제공합니다.
|
||||
출력은 첫 20 포인트에 대한 예측 레이블을 보여줍니다(-1은 이상치를 나타냅니다). 우리는 총 몇 개의 이상치가 감지되었는지와 몇 가지 예제 이상치 점수를 출력합니다. 우리는 120 포인트 중 약 18개가 -1로 레이블이 지정되기를 기대합니다(오염도가 15%였기 때문입니다). 우리의 20개 공격 샘플이 실제로 가장 외곽에 있다면, 그들 대부분은 -1 예측에 나타나야 합니다. 이상치 점수(Isolation Forest의 결정 함수)는 정상 포인트에 대해 더 높고 이상치에 대해 더 낮습니다(더 부정적) – 우리는 분리를 보기 위해 몇 가지 값을 출력합니다. 실제로는 데이터를 점수별로 정렬하여 상위 이상치를 보고 조사할 수 있습니다. 따라서 Isolation Forest는 대규모 비표시 보안 데이터를 효율적으로 선별하고 인간 분석이나 추가 자동 검토를 위해 가장 불규칙한 인스턴스를 선택하는 방법을 제공합니다.
|
||||
|
||||
### t-SNE (t-분포 확률적 이웃 임베딩)
|
||||
|
||||
**t-SNE**는 고차원 데이터를 2차원 또는 3차원으로 시각화하기 위해 특별히 설계된 비선형 차원 축소 기법입니다. 데이터 포인트 간의 유사성을 결합 확률 분포로 변환하고 저차원 투영에서 지역 이웃의 구조를 보존하려고 합니다. 간단히 말해, t-SNE는 (예를 들어) 2D에서 유사한 포인트(원래 공간에서)가 서로 가까이 위치하고 비유사한 포인트가 높은 확률로 멀리 떨어지도록 배치합니다.
|
||||
**t-SNE**는 고차원 데이터를 2차원 또는 3차원으로 시각화하기 위해 특별히 설계된 비선형 차원 축소 기법입니다. 데이터 포인트 간의 유사성을 결합 확률 분포로 변환하고 저차원 투영에서 지역 이웃의 구조를 보존하려고 합니다. 간단히 말해, t-SNE는 (예를 들어) 2D에서 유사한 포인트(원래 공간에서)가 서로 가까이 위치하고 비유사한 포인트가 멀리 떨어지도록 배치합니다.
|
||||
|
||||
알고리즘은 두 가지 주요 단계로 구성됩니다:
|
||||
|
||||
1. **고차원 공간에서 쌍별 친화도 계산:** 각 포인트 쌍에 대해 t-SNE는 그 쌍을 이웃으로 선택할 확률을 계산합니다(이는 각 포인트에 가우시안 분포를 중심으로 두고 거리를 측정하여 수행됩니다 – 혼란도 매개변수는 고려되는 이웃의 효과적인 수에 영향을 미칩니다).
|
||||
1. **고차원 공간에서 쌍별 친화도 계산:** 각 포인트 쌍에 대해 t-SNE는 그 쌍을 이웃으로 선택할 확률을 계산합니다(이는 각 포인트에 가우시안 분포를 중심으로 하고 거리를 측정하여 수행됩니다 – 혼란도 매개변수는 고려되는 이웃의 효과적인 수에 영향을 미칩니다).
|
||||
2. **저차원(예: 2D) 공간에서 쌍별 친화도 계산:** 처음에 포인트는 2D에서 무작위로 배치됩니다. t-SNE는 이 맵에서 거리의 유사한 확률을 정의합니다(가우시안보다 더 두꺼운 꼬리를 가진 스튜던트 t-분포 커널을 사용하여 먼 포인트에 더 많은 자유를 허용합니다).
|
||||
3. **경량 하강법:** t-SNE는 고차원 친화도 분포와 저차원 분포 간의 쿨백-라이블러(KL) 발산을 최소화하기 위해 2D에서 포인트를 반복적으로 이동합니다. 이는 2D 배열이 가능한 한 고차원 구조를 반영하도록 합니다 – 원래 공간에서 가까웠던 포인트는 서로 끌어당기고, 멀리 떨어진 포인트는 밀어내어 균형을 찾을 때까지 진행됩니다.
|
||||
|
||||
결과는 종종 데이터의 클러스터가 명확해지는 시각적으로 의미 있는 산점도가 됩니다.
|
||||
결과는 데이터의 클러스터가 명확해지는 시각적으로 의미 있는 산점도가 되는 경우가 많습니다.
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안의 사용 사례:* t-SNE는 종종 **인간 분석을 위한 고차원 보안 데이터를 시각화하는 데 사용됩니다**. 예를 들어, 보안 운영 센터에서 분석가는 수십 개의 특성을 가진 이벤트 데이터 세트를 가져와(tcp 포트 번호, 빈도, 바이트 수 등) t-SNE를 사용하여 2D 플롯을 생성할 수 있습니다. 공격은 이 플롯에서 자신의 클러스터를 형성하거나 정상 데이터와 분리되어 나타나 더 쉽게 식별할 수 있습니다. 이는 맬웨어 데이터 세트에 적용되어 맬웨어 가족의 그룹을 보거나 서로 다른 공격 유형이 뚜렷하게 클러스터링되는 네트워크 침입 데이터에 적용되어 추가 조사를 안내합니다. 본질적으로 t-SNE는 사이버 데이터에서 구조를 볼 수 있는 방법을 제공합니다.
|
||||
> *사이버 보안에서의 사용 사례:* t-SNE는 종종 **인간 분석을 위한 고차원 보안 데이터 시각화**에 사용됩니다. 예를 들어, 보안 운영 센터에서 분석가는 수십 개의 특성을 가진 이벤트 데이터 세트를 가져와(tcp 포트 번호, 빈도, 바이트 수 등) t-SNE를 사용하여 2D 플롯을 생성할 수 있습니다. 공격은 이 플롯에서 정상 데이터와 분리되거나 자체 클러스터를 형성하여 식별하기 쉽게 만듭니다. 이는 맬웨어 데이터 세트에 적용되어 맬웨어 가족의 그룹화를 보거나 서로 다른 공격 유형이 뚜렷하게 클러스터링되는 네트워크 침입 데이터에 적용되어 추가 조사를 안내합니다. 본질적으로 t-SNE는 사이버 데이터에서 구조를 볼 수 있는 방법을 제공합니다.
|
||||
|
||||
#### 가정 및 한계
|
||||
|
||||
t-SNE는 패턴의 시각적 발견에 훌륭합니다. 이는 다른 선형 방법(PCA와 같은)으로는 드러나지 않을 수 있는 클러스터, 하위 클러스터 및 이상치를 드러낼 수 있습니다. 이는 맬웨어 행동 프로필이나 네트워크 트래픽 패턴과 같은 복잡한 데이터를 시각화하기 위해 사이버 보안 연구에 사용되었습니다. 지역 구조를 보존하기 때문에 자연스러운 그룹을 보여주는 데 좋습니다.
|
||||
t-SNE는 패턴의 시각적 발견에 훌륭합니다. 이는 다른 선형 방법(PCA와 같은)으로는 드러나지 않을 수 있는 클러스터, 하위 클러스터 및 이상치를 드러낼 수 있습니다. 이는 맬웨어 행동 프로필이나 네트워크 트래픽 패턴과 같은 복잡한 데이터를 시각화하기 위해 사이버 보안 연구에 사용되었습니다. 지역 구조를 보존하기 때문에 자연스러운 그룹화를 보여주는 데 좋습니다.
|
||||
|
||||
그러나 t-SNE는 계산적으로 더 무겁습니다(약 $O(n^2)$) 따라서 매우 큰 데이터 세트의 경우 샘플링이 필요할 수 있습니다. 또한 출력에 영향을 미칠 수 있는 하이퍼파라미터(혼란도, 학습률, 반복 횟수)가 있습니다 – 예를 들어, 서로 다른 혼란도 값은 서로 다른 스케일에서 클러스터를 드러낼 수 있습니다. t-SNE 플롯은 때때로 잘못 해석될 수 있습니다 – 맵의 거리들은 전역적으로 직접적으로 의미가 없으며(지역 이웃에 초점을 맞추기 때문에, 때때로 클러스터가 인위적으로 잘 분리되어 보일 수 있습니다). 또한 t-SNE는 주로 시각화를 위한 것이며, 새로운 데이터 포인트를 직접적으로 투영하는 간단한 방법을 제공하지 않으며, 예측 모델링을 위한 전처리로 사용되도록 설계되지 않았습니다(UMAP은 이러한 문제를 더 빠른 속도로 해결하는 대안입니다).
|
||||
그러나 t-SNE는 계산적으로 더 무겁습니다(약 $O(n^2)$) 따라서 매우 큰 데이터 세트의 경우 샘플링이 필요할 수 있습니다. 또한 출력에 영향을 미칠 수 있는 하이퍼파라미터(혼란도, 학습률, 반복 횟수)가 있습니다 – 예를 들어, 서로 다른 혼란도 값은 서로 다른 스케일에서 클러스터를 드러낼 수 있습니다. t-SNE 플롯은 때때로 잘못 해석될 수 있습니다 – 맵의 거리는 전역적으로 직접적으로 의미가 없으며(지역 이웃에 초점을 맞추기 때문에, 때때로 클러스터가 인위적으로 잘 분리되어 보일 수 있습니다). 또한 t-SNE는 주로 시각화를 위한 것이며, 새로운 데이터 포인트를 직접적으로 투영하는 간단한 방법을 제공하지 않으며, 예측 모델링을 위한 전처리로 사용되도록 설계되지 않았습니다(UMAP은 이러한 문제를 더 빠른 속도로 해결하는 대안입니다).
|
||||
|
||||
<details>
|
||||
<summary>예제 -- 네트워크 연결 시각화
|
||||
@ -432,9 +432,100 @@ plt.legend()
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
```
|
||||
여기에서 우리는 이전의 4D 정상 데이터셋과 극단적인 이상치 몇 개를 결합했습니다(이상치는 하나의 특성(“duration”)이 매우 높게 설정되어 있어 이상한 패턴을 시뮬레이션합니다). 우리는 일반적인 혼란도 30으로 t-SNE를 실행합니다. 출력 데이터 data_2d의 형태는 (1505, 2)입니다. 이 텍스트에서는 실제로 플롯을 그리지 않지만, 만약 그린다면 3개의 정상 클러스터에 해당하는 세 개의 밀집 클러스터와 그 클러스터에서 멀리 떨어진 고립된 점으로 나타나는 5개의 이상치를 볼 수 있을 것으로 예상합니다. 대화형 워크플로우에서는 점을 레이블(정상 또는 어떤 클러스터, 대 이상치)로 색칠하여 이 구조를 검증할 수 있습니다. 레이블이 없더라도 분석가는 2D 플롯의 빈 공간에 있는 그 5개의 점을 발견하고 플래그를 지정할 수 있습니다. 이는 t-SNE가 사이버 보안 데이터에서 시각적 이상 탐지 및 클러스터 검사를 위한 강력한 도구가 될 수 있음을 보여주며, 위의 자동화된 알고리즘을 보완합니다.
|
||||
여기에서는 이전의 4D 정상 데이터셋과 극단적인 이상치 몇 개를 결합했습니다(이상치는 하나의 특성(“duration”)이 매우 높게 설정되어 있어 이상한 패턴을 시뮬레이션합니다). 우리는 일반적인 혼란도 30으로 t-SNE를 실행합니다. 출력 데이터 data_2d의 형태는 (1505, 2)입니다. 이 텍스트에서는 실제로 플롯을 그리지 않겠지만, 만약 그린다면 3개의 정상 클러스터에 해당하는 세 개의 밀집 클러스터와 그 클러스터에서 멀리 떨어진 고립된 점으로 나타나는 5개의 이상치를 볼 수 있을 것으로 예상합니다. 대화형 워크플로우에서는 레이블(정상 또는 어떤 클러스터, 대조적으로 이상치)에 따라 점의 색상을 지정하여 이 구조를 검증할 수 있습니다. 레이블이 없더라도 분석가는 2D 플롯에서 빈 공간에 있는 5개의 점을 발견하고 이를 표시할 수 있습니다. 이는 t-SNE가 사이버 보안 데이터에서 시각적 이상 탐지 및 클러스터 검사를 위한 강력한 도구가 될 수 있음을 보여주며, 위의 자동화된 알고리즘을 보완합니다.
|
||||
|
||||
</details>
|
||||
|
||||
### HDBSCAN (노이즈가 있는 애플리케이션의 계층 밀도 기반 공간 클러스터링)
|
||||
|
||||
**HDBSCAN**은 단일 전역 `eps` 값을 선택할 필요를 없애고 밀도가 **다른 클러스터**를 복구할 수 있도록 밀도 연결 구성 요소의 계층을 구축한 다음 이를 응축하는 DBSCAN의 확장입니다. 일반적인 DBSCAN과 비교할 때 보통
|
||||
|
||||
* 일부 클러스터가 밀집하고 다른 클러스터가 희소할 때 더 직관적인 클러스터를 추출합니다.
|
||||
* 실제 하이퍼파라미터는 하나(`min_cluster_size`)만 있으며 합리적인 기본값이 있습니다.
|
||||
* 모든 점에 클러스터 멤버십 *확률*과 **이상치 점수**(`outlier_scores_`)를 부여하여 위협 탐지 대시보드에 매우 유용합니다.
|
||||
|
||||
> [!TIP]
|
||||
> *사이버 보안의 사용 사례:* HDBSCAN은 현대의 위협 탐지 파이프라인에서 매우 인기가 있으며, 상업용 XDR 스위트와 함께 제공되는 노트북 기반 탐지 플레이북 내에서 자주 볼 수 있습니다. 하나의 실용적인 레시피는 IR 동안 HTTP 비콘 트래픽을 클러스터링하는 것입니다: 사용자 에이전트, 간격 및 URI 길이는 종종 여러 개의 밀집된 합법적인 소프트웨어 업데이트 그룹을 형성하는 반면, C2 비콘은 작은 저밀도 클러스터 또는 순수한 노이즈로 남아 있습니다.
|
||||
|
||||
<details>
|
||||
<summary>예시 – 비콘 C2 채널 찾기</summary>
|
||||
```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 회피.** 2025년 KU Leuven의 학술 사전 인쇄물은 공격자가 밀도 간격에 의도적으로 들어가는 비콘 패턴을 조작할 수 있음을 보여주어 *노이즈* 레이블 안에 효과적으로 숨을 수 있음을 나타냈습니다.
|
||||
|
||||
주목받고 있는 완화책:
|
||||
|
||||
1. **모델 정화 / TRIM.** 매 재훈련 에포크 전에 1–2%의 손실이 가장 높은 포인트를 버려(최대 우도 정리) 오염을 극적으로 어렵게 만듭니다.
|
||||
2. **합의 앙상블.** 여러 이질적인 탐지기(예: Isolation Forest + GMM + ECOD)를 결합하고 *어떤* 모델이 포인트를 플래그할 경우 경고를 발생시킵니다. 연구에 따르면 이는 공격자의 비용을 10배 이상 증가시킵니다.
|
||||
3. **클러스터링을 위한 거리 기반 방어.** `k`개의 서로 다른 랜덤 시드로 클러스터를 재계산하고 지속적으로 클러스터를 이동하는 포인트를 무시합니다.
|
||||
|
||||
---
|
||||
|
||||
### 현대 오픈 소스 도구 (2024-2025)
|
||||
|
||||
* **PyOD 2.x** (2024년 5월 출시)는 *ECOD*, *COPOD* 및 GPU 가속 *AutoFormer* 탐지기를 추가했습니다. 이제 **한 줄의 코드**로 데이터셋에서 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월)은 드디어 새로운 `cluster.HDBSCAN` 래퍼를 통해 *HDBSCAN*에 대한 `score_samples`를 노출하므로 Python 3.12에서 외부 기여 패키지가 필요하지 않습니다.
|
||||
|
||||
<details>
|
||||
<summary>빠른 PyOD 예제 – ECOD + Isolation Forest 앙상블</summary>
|
||||
```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>
|
||||
|
||||
## References
|
||||
|
||||
- [HDBSCAN – Hierarchical density-based clustering](https://github.com/scikit-learn-contrib/hdbscan)
|
||||
- Chen, X. *et al.* “비지도 이상 탐지의 데이터 오염에 대한 취약성.” *IEEE 보안 및 프라이버시 심포지엄*, 2024.
|
||||
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user