반응형

XAI(설명가능 AI) 딥다이브 — 침입탐지·악성코드 분류에서 "왜?"를 설명하다

AI 기반 보안 탐지는 정확도는 높지만 "왜 이걸 공격/악성으로 판단했는가?"를 설명하지 못하는 블랙박스(black box) 문제가 있습니다. 보안 관제사(SOC analyst)는 근거 없는 경보를 신뢰하기 어렵고, 규제·감사도 설명을 요구합니다. XAI(eXplainable AI, 설명가능 인공지능)는 이 "왜?"에 답하는 기술입니다. 이 문서는 XAI 기법을 깊이 파고들고(SHAP·LIME·Integrated Gradients·Grad-CAM…), 침입탐지·악성코드 분류에서의 실제 활용, 그리고 보안 장비(VPN·Firewall·NAC)에 붙일 만큼 완성도 높은 오픈소스를 정리합니다.

함께 보면 좋은 문서 이 글은 "DDoS 탐지 방법"·"AI 기반 DDoS 탐지" 문서에서 다룬 머신러닝·딥러닝 탐지의 "설명" 계층을 깊게 확장합니다. 탐지 모델(RandomForest·CNN·LSTM 등)을 안다는 전제로 진행합니다.
목차
  1. 왜 XAI인가 — 보안에서 블랙박스의 문제
  2. XAI 큰 그림 — 4개의 축
  3. 기법 딥다이브 ① SHAP
  4. 기법 딥다이브 ② LIME
  5. 기법 딥다이브 ③ Integrated Gradients · DeepLIFT
  6. 기법 딥다이브 ④ Grad-CAM (악성코드 이미지)
  7. 기법 딥다이브 ⑤ Attention · Anchors · Counterfactual
  8. 침입탐지(IDS)에서의 XAI 활용
  9. 악성코드 분류에서의 XAI 활용
  10. XAI가 주는 실제 가치
  11. 한계와 함정 (반드시 알아야 할 것)
  12. 오픈소스 XAI 프로젝트 딥다이브
  13. 보안 장비(VPN·Firewall·NAC) 통합 아키텍처
  14. 용어 설명
  15. 참고 자료

1. 왜 XAI인가 — 보안에서 블랙박스의 문제

딥러닝 기반 탐지 모델은 "이 트래픽/파일은 악성"이라고 은 주지만 이유는 주지 않습니다. 보안에서는 이 "이유"가 없으면 다음이 무너집니다.

  • 신뢰(Trust) — 관제사가 근거 없는 경보를 믿고 조치하기 어렵다.
  • 대응(Action) — 왜 위험한지 알아야 정확히 차단·격리·조사할 수 있다.
  • 오탐 분석 — 정상을 왜 공격으로 봤는지 알아야 모델을 고친다.
  • 규제·감사 — EU AI Act, GDPR의 "설명 요구권" 등 법·감사 대응.
입력트래픽/파일 블랙박스 모델(딥러닝) "차단!" 😕 근데 왜? "어떤 근거로 악성이지?" "정상을 잘못 본 건 아닐까?" "뭘 보고 조치해야 하지?" → 설명이 없다
그림 1. 블랙박스 문제 — 답은 주지만 이유가 없다. XAI는 이 "왜?"를 채워 신뢰·대응·감사를 가능하게 한다. [확대]

2. XAI 큰 그림 — 4개의 축

XAI 기법은 네 가지 축으로 구분하면 지형이 한눈에 들어옵니다.

① 내재적(Glassbox) vs 사후(Post-hoc) 내재적: 모델 자체가 해석 가능(결정트리, 선형, EBM) 사후: 이미 학습된 블랙박스를 나중에 설명 SHAP·LIME·IG는 대부분 "사후" ② 국소(Local) vs 전역(Global) 국소: "이 한 건"을 왜 그렇게 판단했나 전역: 모델이 "전반적으로" 뭘 중요시하나 SHAP=둘 다 · LIME=국소만 ③ 모델 무관 vs 모델 특화 무관(agnostic): 어떤 모델이든(SHAP-Kernel, LIME) 특화: 특정 구조 활용(TreeSHAP, Grad-CAM, IG) 특화는 보통 더 빠르고 정확 ④ 설명의 형태 피처 기여도(SHAP) · 규칙(Anchors) 히트맵(Grad-CAM) · 반사실(Counterfactual) 용도·청중에 맞는 형태 선택
그림 2. XAI 4개 축 — 내재적/사후, 국소/전역, 모델무관/특화, 설명 형태. 기법 선택의 좌표계. [확대]

3. 기법 딥다이브 ① SHAP 보안에서 가장 많이 쓰임

SHAP(SHapley Additive exPlanations)는 협력 게임 이론의 Shapley value에서 왔습니다. 아이디어: "각 피처(feature)가 예측이라는 이익평균적으로 얼마나 기여했는가"를, 피처들의 모든 조합(coalition)에 대해 넣었을 때와 뺐을 때의 차이(marginal contribution)를 평균해 계산합니다.

핵심 성질: 가산성(Additive) — 모든 피처의 SHAP 값 합 + 기준값(base) = 최종 예측. 그래서 "각 피처가 +/-로 얼마나 밀었는지"가 정확히 분해됩니다. 또 국소·전역 설명을 모두 제공합니다.

SHAP — "이 경보가 악성"이라는 예측을 피처별 기여로 분해 base 0.20 SYN 비율 ↑ (+0.35) flow 짧음 (+0.18) 엔트로피↓(+0.10) 포트 정상(−0.08) 예측 0.75 → 악성 → 악성 쪽으로 미는 피처(빨강) ← 정상 쪽(파랑) base(평균) + 각 피처 기여 합 = 최종 예측. "무엇이 이 판단을 만들었는가"가 정확히 보인다.
그림 3. SHAP force plot 개념 — 예측을 피처별 +/- 기여로 분해. IDS에서 "왜 이 flow가 공격인지" 한눈에 설명된다. [확대]

SHAP의 변종 (보안 실무에서 중요)

변종대상 모델특징
TreeSHAP결정트리 앙상블(RandomForest·XGBoost·LightGBM)정확·초고속. IDS의 flow-feature 모델에 최적 → 준실시간 설명 가능
KernelSHAP모든 모델(model-agnostic)범용이지만 느림(샘플링 근사)
DeepSHAP / GradientSHAP신경망(CNN·LSTM)딥러닝 탐지 모델 설명
왜 보안에서 SHAP이 표준인가 IDS/NIDS의 대표 모델이 결정트리 앙상블(RandomForest·XGBoost)인데, TreeSHAP은 이들에 대해 수학적으로 정확하면서도 매우 빠릅니다. 그래서 경보마다 "기여 피처 Top-N"을 실시간에 가깝게 붙일 수 있습니다.

4. 기법 딥다이브 ② LIME

LIME(Local Interpretable Model-agnostic Explanations)은 "복잡한 결정 경계라도 한 점 주변만 보면 단순하다"는 아이디어입니다. 설명하려는 샘플 주변을 조금씩 흔들어(perturb) 모델에 물어보고, 그 응답으로 국소적으로 단순한 대리 모델(선형 등)을 학습해 근사합니다.

LIME — 복잡한 경계를 "그 점 주변"만 선형으로 근사 복잡한 실제 결정 경계 설명 대상 국소 선형 근사 장점: 어떤 모델이든 OK 직관적, 구현 쉬움 한계: 국소만, 불안정 샘플링에 따라 결과 흔들림
그림 4. LIME — 대상 샘플 주변을 흔들어 국소 선형 대리모델로 근사. 직관적이나 SHAP보다 불안정한 편. [확대]

5. 기법 딥다이브 ③ Integrated Gradients · DeepLIFT

신경망처럼 미분 가능한 모델에는 기울기(gradient) 기반 설명이 효율적입니다. Integrated Gradients(IG, 적분 기울기)기준점(baseline, 예: 모두 0인 입력)에서 실제 입력까지 직선 경로를 따라가며 기울기를 적분해, 각 피처가 예측 변화에 기여한 양을 구합니다. "민감도(Sensitivity)"와 "완결성(Completeness: 기여 합 = 예측 차이)" 같은 수학적 공리를 만족합니다.

baseline(0) 실제 입력 경로를 따라 기울기를 적분 → 피처별 기여 baseline→입력 경로에서 "예측이 어떻게 변했나"를 누적. CNN/LSTM 탐지 모델 설명에 적합(Captum 제공).
그림 5. Integrated Gradients — baseline에서 입력까지 기울기를 적분해 기여도 산출. DeepLIFT는 이를 더 빠르게 근사한다. [확대]

6. 기법 딥다이브 ④ Grad-CAM (악성코드 이미지)

악성코드 분석의 인기 기법 중 하나가 "악성코드를 이미지로 변환(malware-as-image)"해 CNN으로 분류하는 것입니다. 바이너리 바이트를 흑백 픽셀 이미지로 만들면, 같은 계열(family) 악성코드는 비슷한 시각 패턴을 보입니다. 여기에 Grad-CAM(Gradient-weighted Class Activation Mapping)을 쓰면, CNN이 이미지의 어느 영역(=바이너리의 어느 부분)을 보고 그 계열로 판단했는지 히트맵으로 보여 줍니다.

악성코드→이미지 CNN 분류+ Grad-CAM 히트맵(주목 영역) "이 바이트 영역 때문에 Ransomware 계열로 판단" 분석가가 해당 코드 구간을 바로 조사
그림 6. Grad-CAM — 악성코드 이미지에서 CNN이 주목한 영역을 히트맵으로. 분석가가 실제 바이너리 구간을 특정해 조사할 수 있다. [확대]

7. 기법 딥다이브 ⑤ Attention · Anchors · Counterfactual

  • Attention(어텐션) — API 호출/opcode 같은 시퀀스 모델에서 어떤 토큰(호출)이 판단에 영향을 줬는지 가중치로 표시. (단, "attention = 설명"인지에 대한 학술 논쟁 있음 → 보조 근거로 활용)
  • Anchors(앵커) — LIME 저자들이 만든 "IF 조건이면 거의 항상 이 판단" 형태의 규칙 설명. 예: IF SYN비율>0.8 AND flow_duration<1s THEN 공격(정밀도 97%). 관제사가 이해하기 쉬움.
  • Counterfactual(반사실)"무엇을 최소한으로 바꾸면 판단이 뒤집히나". 예: "이 패킷 수가 X 이하였다면 정상으로 분류". "왜 정상이 아닌가"를 보여줘 대응·오탐 분석에 유용.

8. 침입탐지(IDS)에서의 XAI 활용

IDS/NIDS는 흐름(flow) 피처(예: CIC-IDS2017/CIC-DDoS2019의 80여 개 피처)로 공격을 분류합니다. XAI는 이 위에서 경보마다 근거를 붙이고, 관제 효율을 높이고, 오탐을 줄입니다.

Flow 피처80+ features 탐지 모델RandomForest/XGBoost 경보: 공격확률 0.92 XAI(SHAP)기여 피처 Top-N규칙·반사실TreeSHAP 실시간 SOC 관제사근거 보고 판단우선순위·조치오탐 피드백 탐지에 "설명"을 붙여 관제사가 신뢰·조치할 수 있게 한다 오탐 피드백 → 피처·모델 개선
그림 7. IDS + XAI 워크플로우 — 경보에 기여 피처·규칙을 붙여 관제사가 근거 기반으로 판단하고, 오탐 피드백으로 모델을 개선한다. [확대]

실제 연구에서 XI2S-IDS(SHAP로 이진 분류 설명, CICIDS2017 99.81%), E-XAI(SHAP·LIME 설명 품질 평가 프레임워크), LSTM 경보 우선순위에 LIME·SHAP·IG·DeepLIFT 비교 등이 보고되었습니다.

9. 악성코드 분류에서의 XAI 활용

입력 표현모델주로 쓰는 XAI설명 형태
정적 피처(PE 헤더·import·문자열)RandomForest/XGBoostSHAP(TreeSHAP)"어떤 import·섹션이 악성 판단에 기여"
악성코드 이미지(byte→image)CNNGrad-CAM, IG주목 바이트 영역 히트맵
API 호출/opcode 시퀀스LSTM/TransformerAttention, IG, SHAP영향 큰 호출 강조
동적 행위(sandbox)다양SHAP, Counterfactual"어떤 행위가 결정적이었나"
보안 특유의 가치 악성코드 XAI는 단순 신뢰를 넘어 "계열(family) 판별 근거 → 분석가가 실제 코드 구간을 특정", "적대적 회피(adversarial evasion) 취약 피처 발견"분석·방어 개선에 직접 쓰입니다.

10. XAI가 주는 실제 가치

  • 신뢰·채택 — 관제사가 근거를 보고 AI 경보를 실제로 사용.
  • 관제 효율 — 경보 우선순위·분류(triage) 자동화로 알림 피로 감소.
  • 오탐 진단·모델 디버깅 — "왜 정상을 공격으로 봤나"를 추적해 피처·데이터 개선.
  • 적대적 견고성 — 모델이 엉뚱한 피처(지름길, shortcut)에 의존하는지 발견 → 회피 공격 방어.
  • 규제·감사 — EU AI Act(고위험 AI 설명 의무), GDPR 등 대응.
  • 피처 선택 — 전역 중요도로 불필요 피처 제거 → 경량·고속화(장비 탑재 유리).

11. 한계와 함정 (반드시 알아야 할 것)

설명을 맹신하지 말 것
  • 설명 ≠ 정답(ground truth) — XAI는 "모델이 왜 그렇게 봤나"의 근사일 뿐, 세상의 진짜 인과가 아니다.
  • 기법 간 불일치(disagreement) — SHAP·LIME·IG가 서로 다른 상위 피처를 줄 수 있다.
  • 불안정성 — LIME 등은 샘플링에 따라 결과가 흔들린다.
  • 적대적 조작설명 자체를 속이는 공격이 존재(정상처럼 보이게 설명을 왜곡).
  • 계산 비용 — KernelSHAP·IG는 무거워 실시간(라인레이트) 경보엔 부담 → TreeSHAP/사전계산/샘플링 필요.
  • Attention 논쟁 — 어텐션 가중치가 곧 설명은 아니라는 반론.
→ 실무는 여러 기법 교차확인 + 사람 검증을 함께 씁니다.

12. 오픈소스 XAI 프로젝트 딥다이브

요청하신 "보안 장비에 바로 붙일 만큼 완성도 높은 오픈소스"에 대해 먼저 솔직한 현실부터 말씀드립니다.

현실 고지 "방화벽/NAC에 꽂으면 바로 XAI가 되는" 턴키 오픈소스 보안 어플라이언스는 없습니다. 대신, 생산 수준(production-grade)으로 완성된 범용 XAI "엔진 라이브러리"가 있고, 이를 탐지 모델 옆에 설명 서비스로 통합하는 방식이 실무 표준입니다. 아래가 그 완성도 높은 빌딩 블록입니다.

프로젝트제공/기법대상 모델완성도·라이선스보안 적합성
SHAP
(shap/shap)
SHAP 전반(Tree/Kernel/Deep)트리·NN·범용사실상 표준, MIT★★★ IDS 트리모델 준실시간
Captum
(pytorch/captum, Meta)
IG·DeepLIFT·Saliency·Grad-CAM 등PyTorch 신경망프로덕션, BSD★★★ 딥러닝 탐지/악성코드
Alibi + Alibi Detect
(SeldonIO)
Anchors·Counterfactual·IG / 이상·드리프트·적대적 탐지범용서빙 지향 프로덕션, Apache/BSD★★★ 서빙 통합·드리프트 감시
OmniXAI
(salesforce/OmniXAI)
다기법 통합 + 대시보드표·이미지·텍스트·시계열통합·문서 우수, BSD★★ 통합 리포팅
InterpretML
(interpretml/interpret, MS)
EBM(글래스박스)·SHAP·LIME·PDP주로 표(tabular)프로덕션, MIT★★ 애초에 해석가능한 모델
LIME (marcotcr/lime)LIME범용널리 쓰임, BSD★★ 국소 설명(불안정 주의)
pytorch-grad-cam (jacobgil)Grad-CAM 계열CNN성숙, MIT★★ 악성코드 이미지
AIX360 (Trusted-AI, IBM)다양한 XAI범용연구 지향, Apache★ 실험·연구
ELI5순열 중요도 등범용경량, MIT★ 빠른 전역 중요도
완성도·용도별 추천
  • 탐지 모델이 트리 앙상블(IDS/악성코드 정적피처)SHAP(TreeSHAP). 빠르고 정확, 준실시간.
  • 탐지 모델이 딥러닝(CNN/LSTM)Captum(IG·DeepLIFT·Grad-CAM), PyTorch 프로덕션.
  • 운영 서빙 + 드리프트/적대적 감시Alibi + Alibi Detect(Seldon). 장비 옆 서비스로 이상·모델노후 감시까지.
  • 통합 대시보드·리포트OmniXAI.
  • 애초에 설명가능한 모델을 쓰고 싶다 → InterpretML의 EBM(글래스박스, 성능도 준수).
# (개념 예시) IDS 트리모델 경보에 SHAP 설명을 붙이는 마이크로서비스
import shap, xgboost as xgb

model = xgb.Booster();  model.load_model("nids.model")
explainer = shap.TreeExplainer(model)          # TreeSHAP: 빠르고 정확

def explain_alert(flow_features):
    pred = model.predict(flow_features)         # 예: 0.92 (공격)
    sv = explainer.shap_values(flow_features)   # 피처별 기여도
    top = sorted(zip(FEATURE_NAMES, sv[0]), key=lambda x: -abs(x[1]))[:5]
    return {"score": float(pred), "top_reasons": top}   # 경보에 근거 첨부
# → 방화벽/IDS 분석 엔진이 이 서비스를 호출해 "왜 차단했는지"를 대시보드에 표시

13. 보안 장비(VPN·Firewall·NAC) 통합 아키텍처

XAI는 보안 장비의 탐지 엔진(또는 SIEM/XDR) 옆에 "설명 서비스"로 붙는 것이 자연스럽습니다. 장비는 탐지·차단을 하고, XAI 서비스가 그 판단에 근거(기여 피처·규칙·히트맵)를 첨부해 대시보드·SIEM으로 보냅니다.

보안 장비 + XAI 설명 서비스 통합 Firewall/IDS VPN 게이트웨이 NAC ML 탐지 엔진RF/XGBoost/CNN 피처/이벤트 XAI 설명 서비스SHAP/Captum/Alibi기여피처·규칙·히트맵 대시보드/SIEM근거 있는 경보관제사·감사 장비=탐지·차단, XAI 서비스=근거 생성. 준실시간엔 TreeSHAP·사전계산, 심층 분석엔 IG·Grad-CAM을 조합.
그림 8. 통합 아키텍처 — 장비의 ML 탐지 엔진 옆에 XAI 서비스를 두고, 경보에 근거를 첨부해 대시보드/SIEM으로 전달한다. [확대]
장비XAI가 설명하는 것
Firewall/IDS"이 flow를 왜 공격으로 차단했나" — 기여 피처(SYN 비율·엔트로피·flow 길이 등)
VPN 게이트웨이이상 접속·비정상 터널 행위의 근거(시간·위치·트래픽 패턴)
NAC"이 단말을 왜 격리(quarantine)했나" — 이상 행위 피처, 정책 위반 근거
현실적 통합 팁 ① 라인레이트 경보엔 가벼운 설명(TreeSHAP·사전계산 규칙), 심층 조사엔 무거운 설명(IG·Grad-CAM)을 분리 적용. ② XAI는 별도 컨테이너/마이크로서비스로 두어 장비 데이터 경로 성능에 영향 최소화. ③ Alibi Detect로 모델 드리프트·적대적 입력을 함께 감시하면 운영 신뢰도↑.

14. 용어 설명

XAI (eXplainable AI, 설명가능 인공지능)
AI 모델의 판단 근거를 사람이 이해할 수 있게 설명하는 기술·방법론의 총칭.
블랙박스 / 글래스박스
내부를 알 수 없는 모델(딥러닝 등)과, 그 자체로 해석 가능한 모델(결정트리·선형·EBM).
국소(Local) / 전역(Global) 설명
개별 예측 한 건에 대한 설명과, 모델 전반의 경향(중요 피처)에 대한 설명.
SHAP (SHapley Additive exPlanations)
게임이론 Shapley value로 각 피처의 기여도를 가산적으로 분해하는 기법. TreeSHAP은 트리모델에 빠르고 정확.
LIME
대상 샘플 주변을 흔들어 국소 선형 대리모델로 근사하는 모델무관 설명 기법.
Integrated Gradients (IG, 적분 기울기)
baseline에서 입력까지 기울기를 적분해 피처 기여를 구하는, 공리를 만족하는 신경망 설명 기법.
DeepLIFT
기준 활성값과의 차이로 기여를 배분하는 빠른 신경망 설명 기법.
Grad-CAM
CNN에서 목표 클래스에 대한 기울기로 주목 영역 히트맵을 만드는 기법. 악성코드 이미지 분석에 유용.
Attention (어텐션)
시퀀스 모델에서 토큰별 중요도 가중치. 설명 보조로 쓰이나 "설명=어텐션" 여부엔 논쟁이 있음.
Anchors (앵커)
"IF 조건이면 거의 항상 이 판단" 형태의 규칙 기반 설명.
Counterfactual (반사실)
"무엇을 최소한으로 바꾸면 판단이 뒤집히나"를 보여주는 설명. 오탐 분석·대응에 유용.
malware-as-image
바이너리 바이트를 이미지로 변환해 CNN으로 분류하는 악성코드 분석 기법.
Feature Attribution (피처 기여도)
각 입력 피처가 예측에 얼마나 +/- 기여했는지 수치화한 것. SHAP·IG의 결과물.
모델 무관(Model-agnostic) / 특화(Model-specific)
어떤 모델에나 적용 가능한 기법과, 특정 모델 구조를 활용하는 기법.
드리프트(Drift) / 적대적 입력(Adversarial)
시간에 따른 데이터 분포 변화와, 모델을 속이려 조작된 입력. Alibi Detect 등으로 감시.

15. 참고 자료(Sources)


본 문서는 학습·방어(defensive) 목적의 개념·구현 정리입니다. XAI는 강력하지만 "설명이 곧 진실"은 아니며, 여러 기법의 교차확인과 사람의 검증을 함께 사용해야 합니다. 라이브러리 기능·라이선스는 버전에 따라 다를 수 있으니 공식 저장소를 확인하세요.

반응형

Alibi Detect 실전 딥다이브 — 이상치·드리프트·적대적 탐지를 코드로

Alibi Detect(SeldonIO)는 이상치(Outlier)·드리프트(Drift)·적대적 입력(Adversarial)을 탐지하는 프로덕션급 오픈소스 Python 라이브러리입니다. 보안 관점에서 이 셋은 각각 zero-day 이상 트래픽 탐지, 탐지 모델의 노후(개념 표류) 감시, 회피 공격(evasion) 탐지에 직결됩니다. 이 문서는 앞선 "XAI" 문서에서 소개만 했던 Alibi Detect를 실전 코드 중심으로 깊게 다룹니다.

함께 보면 좋은 문서 이 글은 "XAI(설명가능 AI)" 문서의 마지막에 나온 "Alibi Detect로 드리프트·적대적 감시" 부분을 코드로 확장한 심화편입니다. 탐지 모델(RandomForest·CNN 등)과 flow 피처(CIC-IDS 등) 개념을 안다는 전제로 진행합니다.
목차
  1. Alibi Detect란 — 3대 축과 보안 매핑
  2. 설치와 공통 API 패턴
  3. 실전 ① 이상치 탐지 (zero-day) — IForest · Mahalanobis · VAE
  4. 실전 ② 드리프트 탐지 (모델 노후) — TabularDrift · MMDDrift
  5. 실전 ③ 온라인 드리프트 (스트리밍)
  6. 실전 ④ 적대적 탐지 (회피 공격)
  7. 저장·로드·운영 · 백엔드
  8. 보안 파이프라인 통합
  9. 실무 튜닝과 함정
  10. Detector 선택 가이드
  11. 용어 설명
  12. 참고 자료

1. Alibi Detect란 — 3대 축과 보안 매핑

① Outlier (이상치) "평소와 다른 이상 샘플" IForest·Mahalanobis·VAE 보안: zero-day 미지의 이상 트래픽·파일 이상 탐지(anomaly) ② Drift (드리프트) "데이터 분포가 변함" KS·MMD·Tabular·Online 보안: 모델 노후 개념 표류(concept drift) → 재학습 트리거 ③ Adversarial (적대적) "모델을 속이려 조작한 입력" AdversarialAE·Distillation 보안: 회피 공격 evasion / adversarial ML 탐지 우회 시도 포착
그림 1. Alibi Detect 3대 축 — 이상치(zero-day)·드리프트(모델 노후)·적대적(회피 공격). 보안 운영의 3가지 감시축과 딱 맞는다. [확대]

2. 설치와 공통 API 패턴

# 설치 (TensorFlow 백엔드 기본)
pip install alibi-detect
# PyTorch 백엔드로 쓰려면
pip install alibi-detect[torch]

모든 detector는 동일한 반환 구조를 씁니다. predict()meta(메타데이터)와 data(실제 결과) 딕셔너리를 돌려줍니다.

preds = detector.predict(X)
preds['data']['is_outlier']      # 이상치: 0/1 배열
preds['data']['is_drift']        # 드리프트: 0(정상)/1(드리프트)
preds['data']['is_adversarial']  # 적대적: 0/1
preds['data']['instance_score']  # 샘플별 점수(옵션)
preds['data']['p_val']           # 드리프트 p-value(옵션)
preds['meta']                    # detector 이름·버전 등
핵심 개념 3가지참조 데이터(reference) — "정상/기준"을 정의(드리프트는 배포 시점 분포, 이상치는 정상 학습 데이터). ② 임계값(threshold)infer_threshold()로 "정상의 몇 %를 정상으로 볼지" 자동 보정. ③ p-value / 유의수준 — 드리프트는 통계 검정의 p-value가 p_val보다 작으면 "드리프트"로 판정.

3. 실전 ① 이상치 탐지 (zero-day) — IForest · Mahalanobis · VAE

정상 트래픽만 학습한 뒤, 거기서 벗어나는 샘플을 이상치로 봅니다. 라벨이 없어도 되므로 미지의(zero-day) 공격 탐지에 유리합니다(앞 "DDoS 탐지" 문서의 오토인코더/비지도 탐지와 같은 철학).

정상 트래픽 분포(학습) 이상치(outlier) score > threshold infer_threshold로 "정상의 95%가 정상"이 되게 경계를 잡고, 그 밖이면 이상치로 판정한다.
그림 2. 이상치 탐지 — 정상 분포를 학습하고 임계값(threshold)을 넘는 샘플을 이상으로. zero-day 탐지에 적합. [확대]

Isolation Forest — 표(tabular) flow 피처에 가볍고 빠름

import numpy as np
from alibi_detect.od import IForest
from alibi_detect.saving import save_detector, load_detector

# X_normal: 평상시 정상 트래픽 flow 피처 (n_samples, n_features) - 예: CIC-IDS 정상만
od = IForest(n_estimators=200)
od.fit(X_normal)                                  # 정상만 학습(비지도)
od.infer_threshold(X_normal, threshold_perc=95)   # 정상의 95%는 정상으로 → 임계값 자동 보정

preds = od.predict(X_test, return_instance_score=True)
is_outlier = preds['data']['is_outlier']          # 0/1 배열 (1 = 이상 트래픽)
scores     = preds['data']['instance_score']      # 샘플별 이상 점수
print(f"이상 트래픽 {is_outlier.sum()}건 / {len(is_outlier)}건")

save_detector(od, 'detectors/nids_iforest')       # 저장 → 장비에 배포
# od = load_detector('detectors/nids_iforest')    # 로드

Mahalanobis — 온라인(스트리밍) 이상치, 경량

from alibi_detect.od import Mahalanobis
# n_components: 내부 차원축소, std_clip: 이상치 영향 억제, start_clip: 통계 갱신 시작 시점
od = Mahalanobis(n_components=3, std_clip=3, start_clip=100)
od.infer_threshold(X_normal, threshold_perc=99)
preds = od.predict(X_test)                         # 분포 중심에서의 거리로 이상 판정
print(preds['data']['is_outlier'])

OutlierVAE — 복잡/고차원 데이터(딥러닝)

import tensorflow as tf
from tensorflow.keras.layers import Dense, InputLayer
from alibi_detect.od import OutlierVAE

n_features = X_normal.shape[1]; latent_dim = 2
encoder_net = tf.keras.Sequential([
    InputLayer((n_features,)), Dense(25, activation='relu'), Dense(10, activation='relu')])
decoder_net = tf.keras.Sequential([
    InputLayer((latent_dim,)), Dense(10, activation='relu'),
    Dense(25, activation='relu'), Dense(n_features, activation=None)])

od = OutlierVAE(encoder_net=encoder_net, decoder_net=decoder_net, latent_dim=latent_dim)
od.fit(X_normal, epochs=20)                        # 정상만 재구성하도록 학습
od.infer_threshold(X_normal, threshold_perc=95)
preds = od.predict(X_test, outlier_type='instance', return_instance_score=True)
# 복원 오차(reconstruction error)가 크면 이상 → "XAI 문서"의 오토인코더 원리와 동일

4. 실전 ② 드리프트 탐지 (모델 노후) — TabularDrift · MMDDrift

공격·정상 트래픽은 시간이 지나며 변합니다(개념 표류, concept drift). 그러면 배포된 탐지 모델이 낡아 성능이 떨어집니다. 드리프트 탐지는 "지금 들어오는 데이터가 배포 시점(참조)과 통계적으로 달라졌는가"를 검정해, 재학습 시점을 알려 줍니다.

참조(배포시점) 분포 현재 데이터 분포(이동) 통계 검정(KS/MMD) p-value < 0.05 ? → 드리프트! 재학습 분포가 유의하게 달라지면 "드리프트"로 판정 → 모델 재학습·재검증 트리거
그림 3. 드리프트 탐지 — 참조 분포와 현재 분포를 통계 검정으로 비교. 유의하게 다르면 모델이 낡았다는 신호. [확대]

TabularDrift — 혼합형 표 데이터(연속+범주), 피처별 KS·카이제곱

from alibi_detect.cd import TabularDrift

# X_ref: 배포 시점의 참조 데이터(정상 운영 트래픽 피처)
# categories_per_feature: 범주형 피처 인덱스 지정(예: 프로토콜=인덱스 3), 연속형은 생략
cd = TabularDrift(X_ref, p_val=0.05, categories_per_feature={3: None})

preds = cd.predict(X_new, drift_type='batch', return_p_val=True, return_distance=True)
print("드리프트:", preds['data']['is_drift'])       # 0/1
print("피처별 p-value:", preds['data']['p_val'])     # 어떤 피처가 변했는지까지 확인
print("피처별 거리:", preds['data']['distance'])
# → 연속형은 Kolmogorov-Smirnov, 범주형은 Chi-Square 검정, 다중검정은 Bonferroni/FDR 보정

MMDDrift — 고차원·비선형 분포 변화(커널 기반). 전처리로 차원축소 권장

from functools import partial
from alibi_detect.cd import MMDDrift
from alibi_detect.cd.tensorflow import preprocess_drift
from alibi_detect.models.tensorflow import UAE   # Untrained AutoEncoder(무학습 임베딩)

# 고차원(수십~수백 피처)일수록 원시 공간의 검정력이 떨어짐 → 임베딩으로 축소 후 검정
enc = UAE(shape=(X_ref.shape[1],), enc_dim=32)               # 개념 예시(버전별 시그니처 상이)
preprocess_fn = partial(preprocess_drift, model=enc, batch_size=256)

cd = MMDDrift(X_ref, backend='tensorflow', p_val=0.05,
              preprocess_fn=preprocess_fn, n_permutations=100)
preds = cd.predict(X_new)
print(preds['data']['is_drift'], preds['data']['p_val'], preds['data']['distance'])
# 팁: 탐지 모델의 은닉층 출력을 preprocess로 쓰면 "모델이 보는 표현" 기준 드리프트를 본다

5. 실전 ③ 온라인 드리프트 (스트리밍)

배치가 아니라 패킷/이벤트가 실시간으로 흘러드는 환경에서는 온라인 detector를 씁니다. 핵심 파라미터는 ERT(Expected Run-Time) — "드리프트가 없을 때 평균 몇 스텝마다 한 번 오탐하는가"로, 값이 클수록 오탐이 드뭅니다.

임계(ERT 기반) 드리프트 감지 정상 스트림(누적 통계 안정) 분포 변화 → 누적 통계 상승 한 건씩 흘려 넣으면 누적 통계가 임계를 넘는 순간 드리프트로 판정(CUSUM류 원리)
그림 4. 온라인 드리프트 — 스트림을 한 건씩 처리하며 누적 통계가 임계를 넘으면 감지. ERT로 오탐 빈도를 조절. [확대]
from alibi_detect.cd import MMDDriftOnline

ert = 150            # 평균 150 스텝마다 1회 오탐 허용(클수록 보수적)
window_size = 20     # 최근 관측 윈도우
cd = MMDDriftOnline(X_ref, ert=ert, window_size=window_size,
                    backend='pytorch', n_bootstraps=2500)

for x_t in traffic_stream:              # 실시간 이벤트 한 건씩
    pred = cd.predict(x_t)
    if pred['data']['is_drift']:
        alert("트래픽 분포 드리프트 감지 → 모델 재학습/재검증 필요")
        cd.reset_state()                # 감지 후 상태 초기화(재모니터링)

6. 실전 ④ 적대적 탐지 (회피 공격)

공격자는 탐지 모델을 속이도록 입력을 미세 조작(adversarial example)해 회피를 시도합니다. AdversarialAE는 오토인코더로 "분류기가 같은 판단을 유지하도록" 학습해 두고, 입력이 적대적으로 조작되면 그 적대적 점수(adversarial score)가 커지는 것을 이용해 탐지합니다.

정상 입력score 낮음 적대적 입력미세 조작 AdversarialAE재구성 + 분류 일관성 정상 → 통과 적대적 → 경보 분류기 판단을 유지시키는 AE를 통과시켜, 적대적 조작으로 판단이 흔들리면 높은 점수로 탐지
그림 5. 적대적 탐지 — 분류기 판단을 유지시키는 오토인코더로, 적대적 조작 입력을 높은 점수로 걸러낸다. [확대]
import tensorflow as tf
from tensorflow.keras.layers import Dense, InputLayer
from alibi_detect.ad import AdversarialAE

# clf: 이미 학습된 분류기(예: 악성코드/트래픽 분류 모델). 그대로 재사용.
n_features = X_train.shape[1]
encoder_net = tf.keras.Sequential([InputLayer((n_features,)), Dense(40, activation='relu'), Dense(20, activation='relu')])
decoder_net = tf.keras.Sequential([InputLayer((20,)), Dense(40, activation='relu'), Dense(n_features, activation=None)])

ad = AdversarialAE(encoder_net=encoder_net, decoder_net=decoder_net, model=clf)
ad.fit(X_train, epochs=40, batch_size=64)          # 정상 데이터로 학습
ad.infer_threshold(X_train, threshold_perc=99)     # 정상의 99%는 정상으로

preds = ad.predict(X_test, return_instance_score=True)
print("적대적 입력:", preds['data']['is_adversarial'])   # 0/1
print("적대적 점수:", preds['data']['instance_score'])

7. 저장·로드·운영 · 백엔드

from alibi_detect.saving import save_detector, load_detector

save_detector(cd, 'detectors/nids_drift')          # 학습·보정된 detector 저장
cd = load_detector('detectors/nids_drift')          # 장비/서비스에서 로드해 바로 사용

# 백엔드 선택: 일부 detector(MMDDrift 등)는 TensorFlow / PyTorch 모두 지원
# MMDDrift(X_ref, backend='pytorch')  또는  backend='tensorflow'
운영 요령 ① detector를 학습·임계보정까지 끝낸 뒤 저장해 배포한다(장비에서 재학습 불필요). ② 참조 데이터는 주기적으로 갱신(예: 분기별 재보정)해 계절성·정상 변화 반영. ③ GPU가 없다면 IForest·Mahalanobis·TabularDrift 같은 경량 detector가 적합.

8. 보안 파이프라인 통합

Alibi Detect는 탐지 모델(방화벽/IDS/NAC의 ML 엔진) 옆에서 3중 감시를 담당합니다 — 이상치(zero-day) · 드리프트(모델 노후) · 적대적(회피). "XAI" 문서의 통합 아키텍처를 이렇게 확장합니다.

보안 장비FW/IDS/VPN/NAC ML 탐지 엔진RF/CNN/LSTM Outlier 감시zero-day 이상 트래픽 Drift 감시모델 노후 → 재학습 트리거 Adversarial 감시회피 공격 탐지 Alibi Detect SIEM/대시보드경보·재학습·감사
그림 6. 통합 — 탐지 엔진 옆에서 Alibi Detect가 이상치·드리프트·적대적을 3중 감시하고, 결과를 SIEM·재학습 파이프라인으로 보낸다. [확대]

9. 실무 튜닝과 함정

반드시 고려할 것
  • 참조 데이터 선정 — 드리프트의 기준. 대표성 없는 참조는 오탐/미탐을 부른다(계절성·요일 패턴 반영).
  • 고차원 드리프트 — 피처가 많으면 원시 공간 검정력이 떨어진다 → UAE/PCA/모델 임베딩으로 축소 후 검정.
  • p_val·threshold_perc 튜닝 — 너무 민감하면 오탐 폭주, 너무 둔하면 미탐. 운영 트래픽으로 보정.
  • 배치 vs 온라인 — 주기 점검은 배치(TabularDrift), 실시간 스트림은 온라인(MMDDriftOnline)·ERT 조절.
  • 성능 — MMD·VAE는 무겁다. 라인레이트엔 IForest/Mahalanobis/샘플링·주기 검사.
  • 이상치≠공격 — 이상치는 "평소와 다름"일 뿐. 정상 이벤트(신규 서비스)도 이상치가 될 수 있어 사람 검증 필요.

10. Detector 선택 가이드

목적(보안)상황추천 detector
zero-day 이상 트래픽표 flow 피처, 경량·빠름IForest, Mahalanobis
zero-day (복잡/고차원)딥러닝 표현OutlierVAE, OutlierAE
모델 노후(주기 점검)혼합형 표, 피처별 근거 필요TabularDrift(KS+ChiSq)
모델 노후(고차원·비선형)임베딩 기반MMDDrift(+전처리)
모델 노후(실시간 스트림)패킷/이벤트 스트림MMDDriftOnline, LSDDDriftOnline
회피 공격분류기 우회 시도AdversarialAE, ModelDistillation
시계열 이상트래픽량 시계열SpectralResidual, OutlierProphet

11. 용어 설명

Alibi Detect
SeldonIO의 오픈소스 라이브러리. 이상치·드리프트·적대적 입력 탐지를 제공하며 TensorFlow·PyTorch 백엔드를 지원.
이상치 탐지 (Outlier Detection)
정상 분포에서 벗어난 샘플을 찾는 것. 라벨 없이 가능해 zero-day 탐지에 유리.
드리프트 (Drift) / 개념 표류 (Concept Drift)
시간이 지나며 데이터(또는 입력-출력 관계) 분포가 변하는 현상. 배포된 모델을 낡게 만든다.
적대적 입력 (Adversarial Example)
모델의 판단을 속이도록 미세하게 조작한 입력. 보안에선 탐지 회피(evasion)에 악용된다.
infer_threshold
정상 데이터로 "정상의 몇 %를 정상으로 볼지(threshold_perc)"를 정해 이상 판정 경계를 자동 보정하는 함수.
p_val (유의수준)
드리프트 통계 검정에서, 계산된 p-value가 이 값보다 작으면 "분포가 유의하게 달라졌다=드리프트"로 판정.
KS / Chi-Square / MMD
Kolmogorov-Smirnov(연속형 분포 검정), Chi-Square(범주형), Maximum Mean Discrepancy(커널 기반 고차원 분포 차이).
ERT (Expected Run-Time)
온라인 드리프트에서 "드리프트가 없을 때 평균 몇 스텝마다 오탐하는가". 클수록 보수적(오탐↓).
UAE (Untrained AutoEncoder)
학습하지 않은 오토인코더로 만든 임베딩. 고차원 드리프트 검정 전 차원축소 전처리에 쓰인다.
reference data (참조 데이터)
드리프트 판단의 기준이 되는 배포 시점 분포, 또는 이상치 학습의 정상 데이터.
instance_score
샘플별 이상/적대적 점수. 임계값과 비교해 0/1 판정을 만든다.

12. 참고 자료(Sources)


본 문서는 학습·방어(defensive) 목적의 실전 코드 정리입니다. 코드의 클래스·인자 시그니처는 Alibi Detect 버전에 따라 달라질 수 있으니 공식 문서/저장소의 해당 버전 예제를 확인하세요. 일부 코드는 개념 예시입니다.

반응형

Ubuntu 24.04 지키며 재파티션 → Ubuntu 26.04 듀얼부팅 설치 완전 가이드

이미 Ubuntu 24.04가 설치된 노트북의 SSD를 재파티션해 여유 공간을 만들고, 그 공간에 Ubuntu 26.0424.04를 손상시키지 않고 설치하는 전체 과정을 그림과 함께 정리합니다. 핵심은 "실행 중인 파티션은 줄이지 않는다", "EFI 파티션은 재사용하되 포맷하지 않는다", "나중에 설치하는 26.04의 부트로더가 전체 부팅을 통제한다" 세 가지입니다.

⚠ 시작 전 필독 — 백업 파티션 축소는 대부분 안전하지만 정전·오류 시 데이터 손상 가능합니다. 24.04의 중요한 데이터를 외장 디스크/클라우드에 반드시 먼저 백업하세요. 이 문서는 학습용 안내이며 작업 책임은 사용자에게 있습니다.
목차
  1. 3가지 핵심 안전 원칙
  2. 전체 작업 흐름 한눈에
  3. 1단계 — 현재 상태 파악
  4. 2단계 — 목표 파티션 레이아웃 (Before/After)
  5. 3단계 — 24.04에서 공간 정리
  6. 4단계 — 26.04 Live USB 제작
  7. 5단계 — Live USB에서 파티션 축소 (GParted)
  8. 6단계 — Ubuntu 26.04 설치 (ESP 재사용)
  9. 7단계 — 부팅 메뉴(GRUB) 정리
  10. 8단계 — 검증과 기본 부팅 OS 설정
  11. 특수 상황 — LVM · LUKS · /home 공유
  12. 체크리스트 · 용어 설명

1. 3가지 핵심 안전 원칙

① 마운트 해제 후 축소 실행 중인 root는 못 줄임 → Live USB로 부팅해서 축소한다 ② ESP는 재사용·포맷 금지 EFI 파티션은 새로 만들지 않고 기존 것을 공유한다 (포맷 체크 절대 금지) ③ 신버전 GRUB이 통제 나중에 설치하는 26.04의 부트로더가 24.04를 메뉴에 추가한다
그림 1. 반드시 지킬 3가지 — 마운트 해제 후 축소 · ESP 재사용(포맷 금지) · 신버전 GRUB이 부팅 통제. [확대]

2. 전체 작업 흐름 한눈에

① 백업필수 ② 상태 파악lsblk·parted ③ 공간 정리24.04 ④ USB 제작26.04 ISO ⑤ Live 부팅Try Ubuntu ⑥ 축소GParted ⑦ 26.04 설치빈 공간에 ⑧ GRUB정리 ⑨ 검증양쪽 위험 구간 = ⑥ 축소 이 단계 전에 백업 완료 · 전원(어댑터) 연결 필수 작업 중 전원 차단 금지 ①~⑤는 준비, ⑥~⑨는 실제 디스크 작업
그림 2. 전체 9단계 흐름 — 준비(①~⑤) 후 실제 디스크 작업(⑥~⑨). 축소(⑥) 전 백업·전원 연결 필수. [확대]

3. 1단계 — 현재 상태 파악 (24.04에서 실행)

# UEFI인지 Legacy BIOS인지 (요즘 노트북은 대부분 UEFI)
[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"

# 디스크·파티션·파일시스템 확인
lsblk -f
sudo parted -l
df -h

# LVM / 암호화(LUKS) 사용 여부 (중요!)
lsblk | grep -Ei "lvm|crypt"

확인 포인트:

  • UEFI/BIOS 여부와 ESP 위치(보통 /boot/efi, FAT32, 512MB~1GB, esp/boot 플래그).
  • 루트(/) 파티션의 파일시스템(대개 ext4)과 현재 사용량.
  • LVM 또는 LUKS 사용 여부 — 쓰고 있으면 축소 절차가 다릅니다(아래 "특수 상황"). 기본 설치면 보통 단순 ext4입니다.
장치 이름 규칙 NVMe SSD는 /dev/nvme0n1(디스크), 파티션은 /dev/nvme0n1p1, p2… SATA SSD는 /dev/sda, 파티션은 /dev/sda1… 로 나타납니다. 본인 장치명을 정확히 확인하세요.

4. 2단계 — 목표 파티션 레이아웃 (Before/After)

SSD 파티션 재구성 — Before → After Before ESP1GB Ubuntu 24.04 root (ext4)디스크 전체 차지 ▼ 24.04 root를 뒤쪽으로 축소(shrink) → 빈 공간 생성 After ESP공유 24.04 root (축소·유지)그대로 보존 26.04 root (신규 ext4)빈 공간에 설치 (60~100GB 권장)
그림 3. Before/After — ESP는 공유, 24.04 root는 뒤쪽으로 축소해 유지, 생긴 빈 공간에 26.04 root를 새로 만든다. [확대]
  • 26.04용 여유 공간: 최소 40GB, 넉넉히 60~100GB 권장.
  • ESP는 두 OS가 공유합니다(새로 만들지 않음).
  • swap: 요즘 Ubuntu는 root 안의 swapfile을 쓰므로 별도 swap 파티션이 필요 없습니다.

5. 3단계 — 24.04에서 공간 정리

sudo apt clean
# 축소할 목표 크기보다 실제 사용량이 충분히 작은지 확인
df -h /

루트의 실제 사용량이 "축소 후 크기"보다 작아야 합니다. (예: 사용량 60GB면 그보다 작게는 못 줄임)

6. 4단계 — Ubuntu 26.04 Live USB 제작

  • 26.04 LTS ISO를 다른 정상 PC에서 USB로 굽습니다.
    • Windows: Rufus / balenaEtcher
    • Linux: Startup Disk Creator(디스크 만들기) 또는 아래 명령
# ⚠ of= 대상(USB 장치명)을 반드시 정확히 확인! 잘못하면 다른 디스크가 지워짐
sudo dd if=ubuntu-26.04-desktop-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync

노트북 부팅 메뉴(F12/F2/ESC 등)에서 USB로 부팅 → "Try Ubuntu(체험하기)" 선택.

7. 5단계 — Live USB에서 파티션 축소 (GParted)

왜 Live USB에서? 24.04로 부팅한 상태 = root가 "사용 중(마운트)" → 축소 불가 Live USB로 부팅하면 24.04는 마운트 해제 상태 → 안전하게 축소 GParted 축소 방향 24.04 root (여기까지 축소) 빈 공간(뒤쪽) ← 오른쪽(뒤)만 당겨 축소 앞쪽 이동은 느리고 위험 → 하지 말 것
그림 4. Live USB에서 축소하는 이유(마운트 해제)와 GParted 방향 — 뒤쪽(오른쪽)만 당겨 빈 공간을 만든다. [확대]
# Live 세션 터미널에서
sudo apt install gparted          # 없으면 설치 (라이브에 기본 포함되기도 함)

# 먼저 24.04 root 파일시스템 무결성 검사 (대상 장치명 정확히! 예: nvme0n1p2)
sudo fsck -f /dev/nvme0n1pX

sudo gparted

GParted에서:

  1. 24.04 root(ext4) 파티션 선택 → Resize/Move.
  2. 오른쪽 끝을 당겨 크기를 줄이고 뒤쪽에 Unallocated(빈 공간)을 만든다. (앞쪽은 건드리지 말 것)
  3. ESP·다른 파티션은 그대로 둔다.
  4. ✔ Apply → 완료까지 전원 유지.
대안 GParted 없이 설치 마법사의 자동 축소만 써도 됩니다. 다만 GParted로 미리 빈 공간을 만들면 통제가 쉽고 안전합니다.

8. 6단계 — Ubuntu 26.04 설치 (ESP 재사용)

Live 데스크톱의 Install Ubuntu 26.04 실행. 설치 유형 화면에서 두 갈래가 있습니다.

방법 A — 자동 ("Ubuntu 24.04와 함께 설치 / Install alongside")

설치기가 빈 공간에 자동으로 26.04를 설치하고 ESP를 공유합니다. 가장 간단합니다.

방법 B — 수동 ("Manual / 이전의 Something else") — 권장

ESP기존 24.04 root건드리지 않음 빈 공간 → 새 ext4 = /26.04 설치 대상 EFI로 지정 포맷 ✗ 마운트 / , ext4 (새로 포맷 OK) 부트로더 설치 위치 = 디스크 전체 (예 /dev/nvme0n1)
그림 5. 수동 설치 파티션 지정 — 빈 공간에 새 ext4를 /로, 기존 ESP는 "EFI로 지정 + 포맷 금지", 부트로더는 디스크에 설치. [확대]
  1. 앞서 만든 빈 공간(free space) 선택 → → 새 파티션: ext4, 마운트 지점 /.
  2. 기존 ESP(예 /dev/nvme0n1p1, FAT32) 선택 → "EFI System Partition"으로 지정. ⚠ "포맷" 체크는 절대 금지 (마운트 /boot/efi).
  3. 부트로더 설치 위치: ESP가 있는 디스크 전체(예 /dev/nvme0n1)로 지정.
  4. 계정 만들고 설치 진행.
두 Ubuntu의 ESP 공유 두 Ubuntu는 ESP 안에서 같은 EFI/ubuntu 경로를 씁니다. 26.04 설치 때 이 GRUB이 신버전으로 갱신되며, 이 GRUB이 부팅을 통제하고 24.04를 메뉴에 넣어 주므로 정상 동작입니다.

9. 7단계 — 부팅 메뉴(GRUB) 정리

UEFI 펌웨어ESP의 ubuntu 부트로더 실행 GRUB (26.04 버전)전체 부팅 통제 · os-prober로 24.04 감지 Ubuntu 26.04 Ubuntu 24.04
그림 6. 부팅 구조 — UEFI → 26.04의 GRUB → 메뉴에서 26.04/24.04 선택. os-prober가 24.04를 자동 감지해 메뉴에 추가한다. [확대]

재부팅 시 GRUB 메뉴에 26.04와 24.04가 모두 보여야 합니다. 만약 24.04가 안 보이면, 26.04로 부팅한 뒤:

# os-prober가 다른 OS를 찾도록 활성화
sudo os-prober                                  # 24.04가 감지되는지 확인
echo 'GRUB_DISABLE_OS_PROBER=false' | sudo tee -a /etc/default/grub
sudo update-grub                                # GRUB 메뉴 재생성 → 24.04 항목 추가

# UEFI 부팅 항목 확인
efibootmgr -v

10. 8단계 — 검증과 기본 부팅 OS 설정

  • 재부팅 → GRUB에서 26.04와 24.04를 번갈아 부팅해 둘 다 정상인지 확인.
  • 기본 부팅 OS·대기시간 변경(26.04에서):
sudo nano /etc/default/grub
#   GRUB_DEFAULT=0        # 0=첫 항목, 또는 "saved"로 마지막 선택 기억
#   GRUB_TIMEOUT=10
sudo update-grub

11. 특수 상황 — LVM · LUKS · /home 공유

상황주의점
LVM 사용 중GParted로 바로 못 줄임. resize2fs(파일시스템 축소) → lvreduce(논리볼륨) → pvresize(물리볼륨) → 파티션 축소 순서. 순서 틀리면 손상 → 신중히.
LUKS 암호화잠금 해제 후 내부 컨테이너·파일시스템을 축소해야 하며 절차가 복잡. 백업 필수.
/home 공유?서로 다른 버전이 같은 /home을 쓰면 설정 파일(dotfiles) 충돌 위험. 각자 별도 home 권장, 공유가 필요하면 별도 "데이터" 파티션을 만들어 양쪽에서 마운트.
Secure Boot두 Ubuntu 모두 서명돼 있어 켜둔 채로 문제없음.

12. 체크리스트 · 용어 설명

한눈에 보는 체크리스트 ① ☑ 백업 · ② ☑ 상태/UEFI/LVM 확인 · ③ ☑ 24.04 공간 정리 · ④ ☑ 26.04 USB 제작 · ⑤ ☑ Live USB 부팅 · ⑥ ☑ fsck → GParted로 뒤쪽 축소(빈 공간) · ⑦ ☑ 26.04: 빈 공간에 새 ext4 /, 기존 ESP 재사용(포맷 금지) · ⑧ ☑ 필요 시 os-prober 활성화 + update-grub · ⑨ ☑ 양쪽 부팅 검증
파티션 (Partition)
디스크를 논리적으로 나눈 구획. 각 OS·파일시스템이 자기 파티션을 갖는다.
ESP (EFI System Partition)
UEFI 부팅에 필요한 부트로더가 담긴 FAT32 파티션(보통 /boot/efi). 여러 OS가 공유하며, 재파티션 시 포맷하면 안 된다.
UEFI / Legacy BIOS
펌웨어 부팅 방식. 요즘 노트북은 대부분 UEFI. /sys/firmware/efi 존재 여부로 확인.
GRUB
리눅스 부트로더. 부팅 시 어떤 OS·커널로 부팅할지 메뉴를 제공한다. 나중에 설치한 OS의 GRUB이 통제한다.
os-prober
다른 파티션의 운영체제를 탐지해 GRUB 메뉴에 추가하는 도구. 최신 GRUB은 기본 비활성이라 필요 시 켠다.
GParted
그래픽 파티션 편집기. Live USB에서 마운트 해제된 파티션을 안전하게 축소·이동한다.
fsck
파일시스템 무결성 검사·복구 도구. 축소 전 실행해 안정성을 높인다.
ext4
Ubuntu 기본 파일시스템. 축소·확장이 지원된다.
swapfile / swap
메모리 부족 시 사용하는 디스크 영역. 요즘 Ubuntu는 root 안의 파일(swapfile)을 써서 별도 파티션이 불필요.
LVM / LUKS
논리 볼륨 관리(LVM)와 디스크 암호화(LUKS). 사용 중이면 파티션 축소 절차가 더 복잡하다.

본 문서는 학습용 안내입니다. 파티션 작업은 데이터 손실 위험이 있으므로 반드시 백업 후, 본인 디스크의 실제 장치명·레이아웃을 확인하고 진행하세요. 장치명(/dev/...)을 잘못 지정하면 다른 디스크가 지워질 수 있습니다.

반응형

Ubuntu 24.04 지키며 재파티션 → Windows 10 듀얼부팅 설치 (GRUB 복구까지)

이미 Ubuntu 24.04가 설치된 노트북에 SSD를 재파티션해 Windows 10을 함께 설치하는 방법입니다. 이 경우 앞의 "Ubuntu + Ubuntu"와 결정적으로 다른 점이 하나 있습니다 — Windows는 설치되면서 부팅 순서를 자기 것으로 덮어써 GRUB(리눅스 부팅 메뉴)을 밀어냅니다. 그래서 "Windows 설치 → GRUB 복구"가 반드시 한 세트로 진행되어야 합니다.

⚠ 두 가지 먼저 알아두기
  • 백업 필수 — 재파티션은 데이터 손상 위험이 있습니다. 반드시 먼저 백업하세요.
  • Windows 10은 지원 종료(2025년 10월 14일) 상태입니다. 보안 업데이트가 없으므로 가급적 Windows 11을 검토하되, 요청하신 대로 본 문서는 Windows 10 기준으로 설명합니다.
목차
  1. 핵심 차이 — "Windows가 GRUB을 덮어쓴다"
  2. 전체 작업 흐름
  3. 1단계 — 현재 상태 파악
  4. 2단계 — 목표 레이아웃 (Before/After)
  5. 3단계 — Live USB에서 Ubuntu 축소(빈 공간)
  6. 4단계 — Windows 10 설치 USB 제작
  7. 5단계 — Windows 10 설치 (파티션 선택 주의)
  8. 6단계 — GRUB 복구 (가장 중요!)
  9. 7단계 — 검증 · Fast Startup · 시간 문제
  10. 실패 시 대처 · 체크리스트
  11. 용어 설명

1. 핵심 차이 — "Windows가 GRUB을 덮어쓴다"

리눅스의 정석은 "Windows 먼저, 리눅스 나중"입니다. 그러면 리눅스 GRUB이 Windows를 메뉴에 넣어 주기 때문입니다. 그런데 지금은 반대 순서(Ubuntu 먼저, Windows 나중)입니다. Windows 설치기는 자기 부트로더를 UEFI 부팅 1순위로 등록하고 GRUB을 밀어내므로, 설치 직후엔 Ubuntu가 안 보이고 Windows로만 부팅됩니다. 이건 고장이 아니라 예상된 현상이며, 6단계 GRUB 복구로 되살립니다.

설치 전 UEFI → GRUB → Ubuntu 부팅 Windows 설치 직후 UEFI 1순위=Windows GRUB 밀려남 → Ubuntu 안 보임 (예상된 현상 · 정상) GRUB 복구 후 UEFI → GRUB → Ubuntu / Windows 선택
그림 1. Windows 설치는 부팅 순서를 자기 것으로 바꿔 GRUB을 밀어낸다. 설치 후 GRUB을 복구하면 다시 둘 다 선택 가능. [확대]

2. 전체 작업 흐름

① 백업필수 ② 상태 파악UEFI/ESP ③ Ubuntu 축소Live+GParted ④ Win USBRufus ⑤ Windows 설치빈 공간에 ⑥ GRUB 복구Boot-Repair ⑦ 검증·설정FastStartup·시간 ⑤ 다음엔 반드시 ⑥ GRUB 복구 설치 직후 Windows로만 부팅되는 건 정상 → 당황 금지 "Ubuntu 먼저, Windows 나중"이라 복구 단계가 반드시 필요
그림 2. 전체 흐름 — Ubuntu 축소 → Windows 설치 → GRUB 복구 → 검증. ⑥번이 이 시나리오의 핵심. [확대]

3. 1단계 — 현재 상태 파악 (Ubuntu 24.04에서)

# UEFI 여부 (Windows도 같은 방식으로 설치해야 부팅 호환)
[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"

lsblk -f            # 파티션·파일시스템·ESP 위치
sudo parted -l
df -h /             # Ubuntu root 사용량
UEFI + GPT로 통일 Ubuntu가 UEFI로 설치돼 있다면 Windows도 반드시 UEFI(GPT)로 설치해야 부팅이 호환됩니다. (한쪽이 Legacy BIOS면 부팅 메뉴 공존이 어렵습니다.)

4. 2단계 — 목표 레이아웃 (Before/After)

SSD 재구성 — Ubuntu 축소 후 Windows 추가 Before ESP공유 Ubuntu 24.04 root (ext4) ▼ Live USB에서 Ubuntu root를 뒤쪽으로 축소 After ESP공유 Ubuntu (축소·유지) MSR Windows 10 (NTFS)빈 공간에 설치(100GB+ 권장)
그림 3. Before/After — ESP는 공유, Ubuntu는 축소·유지, 빈 공간에 Windows(NTFS)+MSR이 생성된다. Windows가 필요한 보조 파티션은 설치기가 자동 생성. [확대]
  • Windows용 공간: 최소 64GB, 넉넉히 100GB+ 권장(업데이트·앱 여유).
  • ESP는 공유 — Windows는 기존 ESP 안에 자기 부트 파일(Microsoft 폴더)을 넣습니다. ESP를 지우거나 포맷하지 마세요.
  • Windows는 설치 중 MSR·복구 파티션자동 생성하므로, 빈 공간은 unallocated(미할당)로 남겨두면 됩니다.

5. 3단계 — Live USB에서 Ubuntu 축소 (빈 공간 만들기)

Ubuntu(ext4)는 Windows에서 줄일 수 없으므로, 먼저 Ubuntu 24.04 Live USB(또는 아무 Ubuntu Live)로 부팅해 GParted로 Ubuntu root를 줄여 빈 공간을 만듭니다. (실행 중인 root는 못 줄이므로 Live USB 필수 — 앞 문서와 동일 원리)

# Live 세션에서
sudo apt install gparted
sudo fsck -f /dev/nvme0n1pX     # Ubuntu root 무결성 검사(장치명 정확히!)
sudo gparted
# → Ubuntu root(ext4) 선택 → Resize/Move → 오른쪽(뒤)만 당겨 축소 → 빈 공간 생성 → Apply
빈 공간은 미할당으로 Windows 설치기가 알아서 NTFS·MSR·복구 파티션을 만드므로, GParted에서는 포맷하지 말고 unallocated(미할당)로만 남겨두면 됩니다.

6. 4단계 — Windows 10 설치 USB 제작

  • 다른 Windows PC에서 Rufus로 Windows 10 ISO를 USB에 굽습니다.
    • 파티션 구성: GPT, 대상 시스템: UEFI(비 CSM) — Ubuntu가 UEFI이므로 반드시 일치.
    • ISO는 Microsoft "미디어 생성 도구" 또는 공식 ISO 사용.

7. 5단계 — Windows 10 설치 (파티션 선택이 가장 중요)

Windows 설치 → "사용자 지정(Custom)" → 파티션 선택 ESP건드리지 마 Ubuntu (축소·유지)삭제·포맷 금지 미할당 공간(Unallocated)여기 선택 → "새로 만들기" 또는 그대로 설치여기에만 설치 ✔ ⚠ 실수로 ESP나 Ubuntu 파티션을 삭제/포맷하면 Ubuntu가 사라진다 미할당 공간을 선택하면 Windows가 NTFS·MSR·복구 파티션을 자동 생성하고 설치
그림 4. Windows 설치 파티션 선택 — 미할당 공간에만 설치. ESP·Ubuntu 파티션은 절대 삭제·포맷하지 않는다. [확대]
  1. Windows USB로 부팅 → 언어 선택 → "지금 설치" → 제품 키(없으면 "제품 키가 없음").
  2. 설치 유형에서 "사용자 지정(Custom): Windows만 설치" 선택. (업그레이드 아님)
  3. 파티션 화면에서 앞서 만든 미할당 공간(Unallocated)을 선택 → "다음" (또는 "새로 만들기"로 크기 지정).
  4. ⚠ 절대 금지: 기존 ESP(작은 FAT 파티션)·Ubuntu 파티션을 삭제·포맷하지 말 것.
  5. 설치 진행 → 재부팅. 이 시점엔 Windows로만 부팅됩니다(정상). → 6단계로.
Secure Boot / BitLocker ① Windows 설치 중 Secure Boot는 켜둬도 됩니다(Ubuntu도 서명됨). ② Windows 11이었다면 BitLocker 자동 암호화 주의가 있으나 Windows 10은 대개 무관.

8. 6단계 — GRUB 복구 (이 시나리오의 핵심!)

Windows 설치로 밀려난 GRUB을 되살립니다. Ubuntu Live USB로 부팅("Try Ubuntu")한 뒤 두 방법 중 하나를 씁니다.

방법 A — Boot-Repair (가장 쉬움, 권장)

Ubuntu Live USBTry Ubuntu Boot-Repair 설치·실행인터넷 연결 필요 "Recommended repair"자동 복구 GRUB 복구 완료재부팅 Boot-Repair가 os-prober로 Windows도 자동 감지해 GRUB 메뉴에 추가한다
그림 5. Boot-Repair 흐름 — Live USB → 설치·실행 → "Recommended repair" → GRUB 복구(Windows도 메뉴에 자동 추가). [확대]
# Ubuntu Live USB(Try Ubuntu)에서, 인터넷 연결 후
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt update
sudo apt install -y boot-repair
boot-repair
# → 창에서 "Recommended repair" 클릭 → 안내 따라 진행 → 재부팅

방법 B — 수동 chroot로 GRUB 재설치 (Boot-Repair가 안 될 때)

# 장치명은 본인 것으로! (예: root=nvme0n1p2, ESP=nvme0n1p1)
sudo mount /dev/nvme0n1p2 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
for d in dev proc sys run; do sudo mount --bind /$d /mnt/$d; done
sudo chroot /mnt

# (chroot 안에서)
grub-install /dev/nvme0n1        # 디스크 전체 지정
update-grub                      # Windows 감지해 메뉴에 추가
exit

# 정리
for d in run sys proc dev; do sudo umount /mnt/$d; done
sudo umount /mnt/boot/efi && sudo umount /mnt
Windows가 메뉴에 없으면 update-grub 후에도 Windows가 없으면, /etc/default/grubGRUB_DISABLE_OS_PROBER=false를 추가하고 update-grub을 다시 실행하세요. UEFI 부팅 1순위가 여전히 Windows면 sudo efibootmgr -oubuntu를 앞으로 옮깁니다.

9. 7단계 — 검증 · Fast Startup · 시간 문제

  • 부팅 검증: 재부팅 → GRUB 메뉴에서 Ubuntu와 Windows 둘 다 부팅되는지 확인.
  • Windows 빠른 시작(Fast Startup) 끄기: Windows의 빠른 시작은 디스크를 "잠근(hibernate)" 상태로 종료해, 듀얼부팅에서 NTFS 접근·부팅 문제를 일으킬 수 있습니다. 제어판 → 전원 옵션 → 전원 단추 동작 → "빠른 시작 켜기" 체크 해제.
  • 시간(시계) 어긋남 해결: Windows는 기본적으로 하드웨어 시계를 지역 시간(localtime)으로, Ubuntu는 UTC로 봅니다. 그대로 두면 OS 전환 시 시간이 틀어집니다. Ubuntu에서 아래로 맞추면 편합니다.
# Ubuntu에서: 하드웨어 시계를 localtime으로(=Windows와 동일 기준)
timedatectl set-local-rtc 1 --adjust-system-clock
# (대안: Windows 레지스트리에서 RealTimeIsUniversal=1로 UTC 사용하게 하는 방법도 있음)

10. 실패 시 대처 · 체크리스트

증상원인·대처
설치 후 Windows로만 부팅정상 현상. 6단계 GRUB 복구 진행.
GRUB에 Windows가 없음GRUB_DISABLE_OS_PROBER=false + update-grub.
여전히 Windows 우선 부팅efibootmgr -v로 확인 → efibootmgr -o로 ubuntu를 1순위로.
Ubuntu가 아예 안 보임Windows 설치 시 Ubuntu/ESP를 지웠을 가능성 → 백업에서 복구. (그래서 백업 필수)
시간이 계속 틀어짐timedatectl set-local-rtc 1 적용.
NTFS 마운트 오류Windows 빠른 시작·최대 절전 끄기.
체크리스트 ① ☑ 백업 · ② ☑ UEFI/ESP 확인 · ③ ☑ Live USB로 Ubuntu 축소(미할당) · ④ ☑ Windows USB(GPT/UEFI) 제작 · ⑤ ☑ 미할당 공간에만 Windows 설치(ESP·Ubuntu 손대지 않음) · ⑥ ☑ GRUB 복구(Boot-Repair) · ⑦ ☑ 양쪽 부팅 검증 + 빠른 시작 끄기 + 시간 맞추기

11. 용어 설명

부트로더 (Bootloader)
전원이 켜진 뒤 어떤 OS를 부팅할지 담당하는 프로그램. 리눅스는 GRUB, Windows는 Windows Boot Manager.
GRUB
리눅스 부트로더 겸 부팅 메뉴. Windows를 나중에 설치하면 밀려나므로 복구가 필요하다.
ESP (EFI System Partition)
UEFI 부팅 파일이 담긴 FAT32 파티션. Ubuntu와 Windows가 공유하며, 삭제·포맷하면 안 된다.
UEFI / GPT
현대 펌웨어 부팅 방식(UEFI)과 파티션 테이블(GPT). 두 OS를 같은 방식(UEFI+GPT)으로 맞춰야 공존한다.
MSR (Microsoft Reserved Partition)
Windows가 관리용으로 만드는 작은 예약 파티션. 설치기가 자동 생성한다.
NTFS
Windows 기본 파일시스템. Windows는 자기 파티션을 NTFS로 만든다.
Boot-Repair
GRUB·부팅 문제를 자동 진단·복구해 주는 도구. Live USB에서 실행한다.
chroot
Live 환경에서 설치된 시스템으로 "들어가" 명령을 실행하는 방법. 수동 GRUB 재설치에 쓴다.
os-prober
다른 OS(여기선 Windows)를 탐지해 GRUB 메뉴에 추가하는 도구.
efibootmgr
UEFI 부팅 항목·순서를 조회·변경하는 도구. ubuntu를 1순위로 만들 때 사용.
Fast Startup (빠른 시작)
Windows의 하이브리드 종료 기능. 디스크를 잠근 채 꺼서 듀얼부팅에서 문제를 유발 → 끄는 것을 권장.
RTC / localtime / UTC
하드웨어 시계(RTC) 기준. Windows는 localtime, 리눅스는 UTC를 기본 사용해 시간이 어긋날 수 있다.

본 문서는 학습용 안내입니다. 파티션·부트로더 작업은 데이터 손실 위험이 있으니 반드시 백업 후 본인 디스크의 실제 장치명을 확인하고 진행하세요. Windows 10은 지원 종료 상태이므로 보안상 Windows 11 또는 최신 OS 사용을 함께 검토하시길 권합니다.

반응형

Ubuntu 24.04(i5-7200U)에 VirtualBox 설치 → Windows 11 가상머신 만들기

Intel Core i5-7200U가 장착된 Ubuntu 24.04 노트북에 VirtualBox를 설치하고 그 위에 Windows 11을 가상머신(VM)으로 올리는 전체 과정입니다. 이 CPU는 7세대(Kaby Lake, 2016)라 Windows 11의 공식 CPU 요구사항(8세대 이상)을 만족하지 못합니다. 다행히 TPM 2.0·Secure Boot는 VirtualBox 7이 가상으로 제공하고, CPU 검사만 설치 중 우회하면 됩니다. 이 문서는 그 방법까지 포함합니다.

이 CPU(i5-7200U)의 현실
  • VT-x(하드웨어 가상화)는 지원 → VirtualBox 정상 동작.
  • TPM 2.0 · Secure Boot → VirtualBox 7이 에뮬레이트로 제공(호스트에 없어도 OK).
  • CPU 호환성 → Windows 11은 8세대 이상만 공식 지원. 7세대는 설치 중 우회(bypass) 필요.
  • 성능 → 2코어/4스레드 저전력 CPU라 Windows 11 VM은 가볍게 쓰는 용도로만 권장.
목차
  1. 전체 작업 흐름
  2. 하드웨어 궁합 점검 (VT-x·TPM·CPU)
  3. 1단계 — VT-x(가상화) 활성화 확인
  4. 2단계 — VirtualBox 설치 (두 가지 방법)
  5. 3단계 — Windows 11 ISO 준비
  6. 4단계 — VM 생성 (EFI·TPM 2.0·Secure Boot)
  7. 5단계 — Windows 11 설치 + CPU 검사 우회
  8. 6단계 — Guest Additions 설치
  9. 성능 최적화 · 문제 해결
  10. 용어 설명

1. 전체 작업 흐름

① VT-x 확인BIOS·cpuinfo ② VirtualBox 설치apt / Oracle repo ③ Win11 ISOMS 공식 ④ VM 생성EFI+TPM+SecureBoot ⑤ 설치+CPU 우회LabConfig ⑥ GuestAdditions 7세대 CPU라 ⑤에서 "CPU 검사 우회"가 핵심 TPM·Secure Boot는 ④에서 VirtualBox가 가상으로 켜 주므로 별도 우회 불필요
그림 1. 전체 6단계 흐름. i5-7200U에서는 ⑤ CPU 검사 우회가 관건, TPM/Secure Boot는 ④에서 VirtualBox가 해결. [확대]

2. 하드웨어 궁합 점검 (VT-x·TPM·CPU)

Windows 11 요구사항 vs i5-7200U + VirtualBox VT-x (가상화) i5-7200U 지원 ✅ BIOS에서 켜야 함 → VirtualBox 정상 동작 TPM 2.0 · Secure Boot VirtualBox 7 에뮬레이트 ✅ 호스트에 물리 TPM 없어도 VM 설정에서 켜면 해결 CPU 세대 7세대 = 공식 미지원 ⚠ Win11은 8세대 이상 요구 → 설치 중 우회 필요
그림 2. 궁합 점검 — VT-x·TPM·Secure Boot는 해결되고, 7세대 CPU 요구사항만 설치 중 우회하면 된다. [확대]

3. 1단계 — VT-x(가상화) 활성화 확인

먼저 BIOS/UEFI에서 Intel Virtualization Technology(VT-x)가 켜져 있어야 합니다. Ubuntu에서 확인:

# 값이 0보다 크면 CPU가 가상화를 지원 (vmx=Intel)
egrep -c '(vmx|svm)' /proc/cpuinfo

# 더 친절한 확인 도구
sudo apt install -y cpu-checker
kvm-ok        # "KVM acceleration can be used" 나오면 OK

lscpu | grep -i virtual   # Virtualization: VT-x 표시 확인
0이 나오면 재부팅 → BIOS/UEFI 진입(보통 F2/DEL) → Advanced → CPU Configuration → Intel Virtualization Technology → Enabled로 변경 후 저장.

4. 2단계 — VirtualBox 설치 (두 가지 방법)

방법 A — Ubuntu 저장소(간단) apt install virtualbox 설치 쉬움, 버전이 다소 낮을 수 있음 TPM/Win11 지원되는 7.x인지 확인 필요 방법 B — Oracle 공식 저장소(권장) 항상 최신 7.x Windows 11(TPM·Secure Boot) 지원 확실 → 이 문서는 방법 B 권장
그림 3. 설치 두 경로 — 간단한 Ubuntu 저장소(A) vs 최신 7.x가 보장되는 Oracle 공식 저장소(B, 권장). [확대]

방법 A — Ubuntu 저장소 (가장 간단)

sudo apt update
sudo apt install -y virtualbox virtualbox-ext-pack
# 설치 후 버전 확인 (Windows 11엔 7.x 권장)
vboxmanage --version

방법 B — Oracle 공식 저장소 (최신 7.x, 권장)

sudo apt update && sudo apt install -y wget gpg

# Oracle 서명키 등록
wget -O- https://www.virtualbox.org/download/oracle_vbox_2016.asc \
  | sudo gpg --dearmor --yes -o /usr/share/keyrings/oracle-virtualbox-2016.gpg

# 저장소 추가 (Ubuntu 24.04 코드명 = noble)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] \
https://download.virtualbox.org/virtualbox/debian noble contrib" \
  | sudo tee /etc/apt/sources.list.d/virtualbox.list

sudo apt update
sudo apt install -y virtualbox-7.1        # (또는 virtualbox-7.0)

# USB 등 사용 위해 그룹 추가 후 재로그인
sudo usermod -aG vboxusers $USER
호스트 Secure Boot가 켜져 있으면 VirtualBox 커널 모듈(vboxdrv)은 서명이 필요합니다. 설치 중 MOK 등록(비밀번호 설정 → 재부팅 시 "Enroll MOK") 안내가 뜨면 따라 하세요. 안 되면 호스트 BIOS에서 Secure Boot를 잠시 끄는 방법도 있습니다. 모듈 상태 확인: sudo systemctl status vboxdrv 또는 lsmod | grep vboxdrv.

5. 3단계 — Windows 11 ISO 준비

  • Microsoft 공식 사이트에서 Windows 11 디스크 이미지(ISO)를 내려받습니다(64-bit).
  • 다운로드한 .iso 파일 경로를 기억해 둡니다(4단계에서 지정).
라이선스 Windows 11은 상용 OS입니다. 정품 라이선스(제품 키) 준비를 권장합니다(설치 자체는 키 없이 진행 후 나중에 활성화 가능).

6. 4단계 — VM 생성 (EFI · TPM 2.0 · Secure Boot)

VirtualBox를 실행하고 "새로 만들기(New)"로 VM을 만듭니다. Windows 11이 요구하는 TPM·Secure Boot를 여기서 켭니다.

Windows 11 VM 권장 설정 (i5-7200U 기준) 종류: Microsoft Windows / 버전: Windows 11 (64-bit) 메모리(RAM): 4096MB↑ (호스트 8GB면 4GB 할당) CPU: 2 vCPU (i5-7200U는 2코어/4스레드) 디스크: 64GB↑ (동적 할당 VDI) 시스템 → 마더보드 → EFI 사용 체크 TPM: 2.0 선택 Secure Boot 사용 체크 디스플레이 → 비디오 메모리 128MB TPM 2.0 + Secure Boot를 여기서 켜면 Win11의 그 두 요구사항은 충족된다. 남은 건 CPU 검사뿐.
그림 4. VM 설정 — Windows 11(64bit), EFI·TPM 2.0·Secure Boot 활성화, RAM 4GB·2 vCPU·64GB 디스크. [확대]
  1. 새로 만들기 → 이름 입력, ISO 이미지에 내려받은 Win11 ISO 지정.
    • "Skip Unattended Installation(무인 설치 건너뛰기)"을 체크하면 설치 화면을 직접 제어할 수 있어 우회가 쉽습니다.
  2. 종류 Windows 11 (64-bit), RAM 4096MB, CPU 2, 디스크 64GB↑.
  3. 생성 후 설정 → 시스템 → 마더보드: EFI 사용 체크, TPM 2.0 선택.
  4. 설정 → 시스템 → (Secure Boot): Secure Boot 사용 체크.
  5. 디스플레이 비디오 메모리 128MB, 필요 시 3D 가속(성능 여유 없으면 생략).

7. 5단계 — Windows 11 설치 + CPU 검사 우회 (핵심)

VM을 시작해 ISO로 부팅합니다. TPM·Secure Boot는 켰지만 7세대 CPU라 "이 PC는 Windows 11을 실행할 수 없습니다"가 뜰 수 있습니다. 이때 레지스트리로 CPU(및 잔여) 검사를 우회합니다.

"실행할 수 없음"CPU 미지원 화면 Shift + F10명령창 열기 regeditLabConfig 키 생성 뒤로 → 계속설치 진행 HKLM\SYSTEM\Setup\LabConfig 아래 DWORD 값으로 검사 우회 BypassCPUCheck=1, BypassTPMCheck=1, BypassSecureBootCheck=1, BypassRAMCheck=1
그림 5. CPU 검사 우회 — 미지원 화면에서 Shift+F10 → regedit → LabConfig 키에 Bypass 값들을 만들고 설치를 계속한다. [확대]
  1. 설치 도중 "이 PC는 Windows 11을 실행할 수 없습니다"가 뜨면 그 화면에서 Shift + F10 → 명령 프롬프트.
  2. regedit 입력 → 레지스트리 편집기.
  3. HKEY_LOCAL_MACHINE\SYSTEM\Setup에서 Setup 우클릭 → 새로 만들기 → 키 → 이름 LabConfig.
  4. LabConfig 안에 DWORD(32비트) 값들을 만들고 값을 1로:
    • BypassCPUCheck = 1 ← 7세대 CPU 핵심
    • BypassTPMCheck = 1
    • BypassSecureBootCheck = 1
    • BypassRAMCheck = 1
  5. regedit·명령창 닫기 → 설치 화면에서 뒤로 갔다가 다시 진행 → 이제 통과됩니다.
  6. 이후는 일반 Windows 11 설치와 동일(에디션·디스크 선택 → 설치 → 계정 설정).
참고 VM에서 TPM 2.0·Secure Boot를 이미 켰다면 사실상 BypassCPUCheck만 있어도 통과되는 경우가 많지만, 안전하게 위 4개를 모두 넣는 것을 권장합니다. (대안: Rufus로 요구사항 우회 ISO를 만들어 쓰는 방법도 있음)

8. 6단계 — Guest Additions 설치 (화면·성능·클립보드)

설치 후 화면 크기 자동 조절, 마우스 통합, 클립보드 공유, 성능 향상을 위해 Guest Additions를 설치합니다.

  1. Windows 11 VM이 켜진 상태에서 상단 메뉴 장치(Devices) → "Guest Additions CD 이미지 삽입".
  2. Windows 탐색기에서 CD 드라이브 → VBoxWindowsAdditions.exe 실행 → 설치 → 재부팅.
  3. 이후 보기 → 자동 크기 조정, 양방향 클립보드(장치 → 클립보드 공유 → 양방향) 사용 가능.

9. 성능 최적화 · 문제 해결

증상/목표대처
매우 느림i5-7200U는 저전력 2코어라 한계. RAM 4GB·2 vCPU 고정, 불필요 시각효과 끄기, 백그라운드 앱 최소화. 호스트 RAM이 8GB면 VM에 4GB 이상 주기 어려움 → 무거운 작업엔 부적합.
"VT-x is disabled" 오류BIOS에서 Intel VT-x 활성화. 또 호스트에서 KVM과 충돌 시(다른 하이퍼바이저 동시 사용) 한쪽만 사용.
vboxdrv 모듈 오류호스트 Secure Boot MOK 서명 또는 sudo /sbin/vboxconfig. 커널 헤더 필요: sudo apt install -y linux-headers-$(uname -r) dkms.
Win11 설치 요구사항 재차 실패LabConfig 4개 값 재확인, VM의 TPM 2.0·Secure Boot·EFI 설정 재확인.
화면이 작게 고정Guest Additions 설치 후 "자동 크기 조정".
USB 인식 안 됨sudo usermod -aG vboxusers $USER 후 재로그인, Extension Pack 설치.
현실적 기대치 i5-7200U(2C/4T)에서 Windows 11 VM은 가벼운 문서·웹·테스트 용도로는 쓸 만하지만, 영상편집·게임·무거운 개발엔 버겁습니다. 호스트 RAM이 8GB 이하라면 VM과 호스트가 함께 느려질 수 있으니 RAM 증설(16GB)을 권합니다.

10. 용어 설명

VirtualBox
Oracle의 무료 오픈소스 가상화 소프트웨어. 호스트 OS 위에서 다른 OS를 가상머신(VM)으로 실행한다.
VM (Virtual Machine, 가상머신)
소프트웨어로 만든 가상의 컴퓨터. 여기서는 Ubuntu(호스트) 위에 Windows 11(게스트)을 올린다.
호스트 / 게스트 (Host / Guest)
가상화를 실행하는 실제 OS(호스트=Ubuntu)와, 그 안에서 도는 OS(게스트=Windows 11).
VT-x
인텔의 하드웨어 가상화 기술. BIOS에서 켜야 VM이 원활히·64비트로 동작한다. i5-7200U는 지원.
TPM 2.0 (Trusted Platform Module)
보안 키·측정값을 저장하는 하드웨어 모듈. Windows 11 요구사항으로, VirtualBox 7이 가상으로 제공한다.
Secure Boot
서명된 부트로더만 실행하는 UEFI 보안 기능. Windows 11 요구사항이며 VM 설정에서 켠다.
EFI / UEFI
현대 펌웨어 부팅 방식. Windows 11 VM은 EFI로 부팅해야 한다(VM 설정에서 "EFI 사용").
LabConfig / Bypass 키
Windows 설치 중 레지스트리에서 CPU·TPM·Secure Boot·RAM 요구사항 검사를 건너뛰게 하는 값들.
Guest Additions
게스트에 설치하는 드라이버·도구 묶음. 화면 자동조절·클립보드 공유·성능 향상을 제공한다.
Extension Pack
USB 2.0/3.0, RDP 등 추가 기능 팩. (개인·평가용 라이선스 조건 확인)
MOK (Machine Owner Key)
호스트 Secure Boot가 켜졌을 때 커널 모듈(vboxdrv) 서명을 등록하는 절차.

본 문서는 학습용 안내입니다. i5-7200U는 Windows 11 공식 미지원 CPU이므로 우회 설치는 테스트·학습 목적으로 권장되며, 공식 지원·보안 업데이트 보장이 제한될 수 있습니다. Windows는 정품 라이선스 사용을 권장합니다. 명령·메뉴 명칭은 VirtualBox 버전에 따라 다를 수 있습니다.

반응형

GPO와 MDM 완전 정리 — 조직의 단말을 어떻게 통제하는가

회사가 수백~수천 대의 PC와 스마트폰에 일관된 보안 설정·소프트웨어·인증서를 배포하려면 어떻게 할까요? 전통적으로는 Windows의 GPO(Group Policy Object, 그룹 정책 개체)가, 모바일과 클라우드 시대에는 MDM(Mobile Device Management, 모바일 단말 관리)가 그 역할을 합니다. 이 문서는 두 기술의 개념·아키텍처·동작·차이, 그리고 현대적 통합 흐름(UEM·Intune)까지 그림과 함께 자세히 정리합니다.

이 문서를 쓰게 된 맥락 앞서 "SSL 가시화" 문서에서 내부 CA 인증서를 모든 단말에 배포하는 수단으로 GPO와 MDM이 등장했습니다. 이 글은 그 GPO·MDM 자체를 깊게 다루며, 마지막에 "인증서 배포" 실무 시나리오로 다시 연결합니다.
목차
  1. 엔드포인트 관리 — 큰 그림
  2. GPO란 무엇인가
  3. GPO 아키텍처 — AD · GPC · GPT(SYSVOL)
  4. GPO 적용 순서 — LSDOU와 상속
  5. GPO 구성과 관리 도구
  6. MDM이란 무엇인가 — 태동 배경
  7. MDM 아키텍처 — 서버 · Push · 프로파일
  8. MDM 등록(Enrollment)과 정책 배포 절차
  9. MDM을 둘러싼 개념 — EMM · UEM · MAM · MCM
  10. GPO vs MDM 비교
  11. 현대적 흐름 — 클라우드 · Intune · Co-management
  12. 실무 시나리오 — 인증서 · Wi-Fi · 앱 배포
  13. 시장과 선도 기업
  14. 용어 설명

1. 엔드포인트 관리 — 큰 그림

조직이 늘어나는 단말(PC·노트북·스마트폰·태블릿)을 중앙에서 일관되게 통제·보호하는 활동을 엔드포인트 관리(Endpoint Management)라 합니다. 목표는 보안 설정 강제, 소프트웨어·업데이트 배포, 인증서·Wi-Fi·VPN 프로파일 배포, 분실 시 원격 잠금·삭제 등입니다.

GPO (전통) Windows + Active Directory 도메인 사내망의 도메인 가입 PC 중심 클라이언트가 정책을 "가져감(pull)" ✓ 세밀한 Windows 제어 △ 사내망·Windows에 묶임 MDM (현대) 클라우드 + 다양한 OS(iOS·안드로이드·Win·mac) 인터넷 어디서나(원격·BYOD) 서버가 정책을 "밀어줌(push)" ✓ 크로스 플랫폼·원격 △ OS가 허용하는 범위 내
그림 1. GPO(사내망 Windows 중심, pull)와 MDM(클라우드·크로스플랫폼, push)의 큰 그림. [확대]

2. GPO란 무엇인가

GPO(Group Policy Object)는 Microsoft Active Directory(AD) 환경에서 사용자와 컴퓨터의 설정을 중앙에서 정의·강제하는 "정책 묶음"입니다. Windows 2000부터 도입된 그룹 정책(Group Policy)의 핵심 단위로, 하나의 GPO 안에는 수백~수천 개의 설정(암호 정책, 화면 잠금, 방화벽, 소프트웨어 설치, 로그온 스크립트, 인증서 배포 등)을 담을 수 있습니다.

GPO는 AD의 사이트(Site)·도메인(Domain)·조직 단위(OU, Organizational Unit)연결(link)되어, 그 범위 안의 컴퓨터·사용자에게 적용됩니다.

3. GPO 아키텍처 — AD · GPC · GPT(SYSVOL)

하나의 GPO는 물리적으로 두 부분으로 나뉘어 저장됩니다.

  • GPC(Group Policy Container) — AD 데이터베이스에 저장되는 부분. GPO의 속성·버전·상태 등 메타데이터.
  • GPT(Group Policy Template) — 도메인 컨트롤러의 공유 폴더 SYSVOL에 저장되는 실제 설정 파일들(스크립트, 관리 템플릿 값 등). 경로는 \\도메인\SYSVOL\...\Policies\{GUID}.
도메인 컨트롤러 (AD DS) GPC(AD 메타데이터) GPT / SYSVOL(실제 설정 파일) 도메인 가입 PC부팅·로그온 시 적용 도메인 가입 PC 도메인 가입 PC 정책을 가져감(pull) 클라이언트가 주기적으로 DC에 접속해 GPC·GPT를 읽어 스스로 적용한다(pull 방식). 사내망 접근이 전제.
그림 2. GPO 아키텍처 — 메타데이터는 AD(GPC), 실제 설정은 SYSVOL(GPT). 클라이언트가 주기적으로 가져가 적용한다. [확대]
적용 시점과 주기 컴퓨터 설정부팅 시, 사용자 설정로그온 시 적용됩니다. 이후 백그라운드로 약 90분(+0~30분 랜덤)마다 갱신되고, 도메인 컨트롤러는 5분마다 갱신합니다. 즉시 적용하려면 gpupdate /force를 씁니다.

4. GPO 적용 순서 — LSDOU와 상속

한 컴퓨터·사용자에 여러 GPO가 겹칠 수 있습니다. 이때 적용 순서는 LSDOU입니다 — Local(로컬) → Site(사이트) → Domain(도메인) → OU(조직 단위, 상위→하위). 나중에 적용되는 것이 앞의 것을 덮어씁니다. 따라서 대상에 가장 가까운 하위 OU의 GPO가 최종 우선권을 갖습니다.

① Local로컬 정책 ② Site사이트 ③ Domain도메인 ④ OU (상위→하위)조직 단위 나중에 적용되는 것이 우선 → 하위 OU가 최종 승자 Block Inheritance (상속 차단) 하위 OU가 상위 정책을 받지 않도록 차단 Enforced (강제) 상위 정책을 강제해 하위가 못 덮어쓰게 함(상속 차단도 무시)
그림 3. GPO 적용 순서(LSDOU)와 예외 — Block Inheritance(상속 차단)와 Enforced(강제)로 우선순위를 조정한다. [확대]

5. GPO 구성과 관리 도구

모든 GPO는 크게 두 갈래로 나뉩니다.

  • Computer Configuration(컴퓨터 구성) — 컴퓨터에 적용(부팅 시). 예: 방화벽, 서비스, 보안 옵션, 신뢰할 수 있는 루트 인증서.
  • User Configuration(사용자 구성) — 사용자에 적용(로그온 시). 예: 바탕화면, 드라이브 매핑, 앱 제한.

그 아래 Administrative Templates(관리 템플릿)가 대표적인데, ADMX/ADML 파일로 정의되며 실제로는 레지스트리 값을 제어합니다. 조직 공통 템플릿은 SYSVOL의 Central Store에 둡니다.

도구용도
GPMC (Group Policy Management Console)GPO 생성·편집·링크·위임 관리의 중심 콘솔
gpupdate정책 즉시 갱신 (gpupdate /force)
gpresult실제 적용된 정책 결과 확인 (gpresult /r, /h report.html)
RSoP (Resultant Set of Policy)여러 GPO가 겹쳤을 때 최종 결과 시뮬레이션·분석
PowerShell (GroupPolicy 모듈)스크립트로 GPO 자동화
# 정책 즉시 적용 및 결과 확인
gpupdate /force
gpresult /r                       # 적용된 GPO 요약
gpresult /h C:\gpreport.html      # HTML 상세 리포트

# PowerShell로 GPO 만들고 OU에 연결하기 (개념 예시)
New-GPO -Name "보안-화면잠금" -Comment "10분 후 화면 잠금"
New-GPLink -Name "보안-화면잠금" -Target "OU=사무직,DC=corp,DC=example,DC=com"

6. MDM이란 무엇인가 — 태동 배경

MDM(Mobile Device Management)은 스마트폰·태블릿, 그리고 이제는 PC까지 포함한 단말을 인터넷을 통해 원격으로 등록·설정·통제·보호하는 기술입니다. GPO가 "사내망의 Windows"에 최적화됐다면, MDM은 다음 변화에 대응하기 위해 등장했습니다.

  • 스마트폰·태블릿의 폭증 — iOS·안드로이드는 AD 도메인에 가입하지 않는다.
  • BYOD(Bring Your Own Device) — 개인 기기로 업무를 보는 흐름.
  • 원격·재택근무 — 사내망 밖의 단말을 통제해야 함(GPO의 사내망 전제가 깨짐).
  • 크로스 플랫폼 — Windows·mac·iOS·안드로이드를 한 콘솔에서.

7. MDM 아키텍처 — 서버 · Push · 프로파일

MDM은 OS 제조사가 만든 관리 프레임워크 위에서 동작합니다. 핵심은 MDM 서버가 단말에게 "프로파일(정책)"을 밀어(push) 넣는 것인데, 직접 연결하는 대신 OS별 푸시 알림 서비스로 "서버에 접속하라"는 신호를 보내는 구조입니다.

  • Apple(iOS·macOS)APNs(Apple Push Notification service)로 깨우고, 단말이 MDM 서버에 접속해 명령을 받음. Apple MDM 프로토콜 사용.
  • 안드로이드Android Enterprise + FCM(Firebase Cloud Messaging) 푸시.
  • WindowsOMA-DM 표준 프로토콜 + WNS(Windows Notification Service) 푸시.
MDM 서버 (클라우드 · 정책·명령 관리) APNs (Apple)푸시 알림 FCM (Android)푸시 알림 WNS (Windows)푸시 알림 "단말아, 서버에 접속해라" 신호 iPhone / iPad Android Windows / Mac 신호 받은 단말이 MDM 서버에 접속해 프로파일·명령 수신
그림 4. MDM 아키텍처 — 서버가 OS별 푸시(APNs·FCM·WNS)로 단말을 깨우면, 단말이 접속해 프로파일·명령을 받아 적용한다. [확대]

8. MDM 등록(Enrollment)과 정책 배포 절차

MDM은 단말이 등록(Enrollment)되어야 통제가 시작됩니다. 절차는 대략 다음과 같습니다.

① 등록Enrollment ② 신원 확인사용자·인증서 ③ 프로파일 배포정책·Wi-Fi·앱 ④ 컴플라이언스준수 여부 점검 ⑤ 원격 조치잠금·삭제(wipe) 등록 → 신원 확인 → 정책 배포 → 지속 점검 → (위반·분실 시) 원격 조치 대량 자동 등록: Apple ADE(구 DEP) · Android Zero-Touch · Windows Autopilot BYOD는 "선택적 삭제(selective wipe)"로 회사 데이터만 지우고 개인 데이터는 보존
그림 5. MDM 절차 — 등록 → 신원 확인 → 프로파일 배포 → 컴플라이언스 점검 → 원격 조치(분실 시 잠금·삭제). [확대]
<!-- Apple 구성 프로파일(.mobileconfig)의 개념적 구조 (XML) -->
<plist version="1.0">
 <dict>
   <key>PayloadType</key>      <string>com.apple.wifi.managed</string>
   <key>PayloadDisplayName</key> <string>회사 Wi-Fi</string>
   <key>SSID_STR</key>         <string>CORP-WIFI</string>
   <key>EncryptionType</key>   <string>WPA2</string>
 </dict>
</plist>
<!-- MDM 서버가 이런 프로파일을 단말에 push → 사용자가 손대지 않아도 Wi-Fi가 설정됨 -->

9. MDM을 둘러싼 개념 — EMM · UEM · MAM · MCM

MDM은 더 큰 관리 개념의 일부로 발전했습니다. 용어가 헷갈리기 쉬워 관계를 정리합니다.

UEM (Unified Endpoint Management) — 모든 단말 통합 EMM (Enterprise Mobility Management) MDM 단말(Device) 관리 MAM 앱(App) 관리 MCM 콘텐츠(Content) 관리 UEM ⊃ EMM ⊃ (MDM + MAM + MCM + 신원관리). 바깥으로 갈수록 관리 범위가 넓다.
그림 6. 개념의 포함 관계 — MDM(단말) ⊂ EMM(모빌리티 전반) ⊂ UEM(PC·모바일·IoT 통합). MAM은 앱, MCM은 콘텐츠 관리. [확대]
용어관리 대상특징
MDM단말(Device) 전체기기 등록·설정·잠금·삭제. 강력하지만 BYOD엔 부담
MAM (Mobile Application Management)앱 단위기기 등록 없이 회사 앱·데이터만 통제(BYOD에 적합). 예: 앱 보호 정책
MCM (Mobile Content Management)문서·콘텐츠사내 문서의 접근·배포·보안
EMM모빌리티 전반MDM+MAM+MCM+신원(ID)을 묶은 개념
UEM모든 엔드포인트PC·모바일·IoT를 하나의 콘솔로 통합 관리(현재 지향점)

10. GPO vs MDM 비교

항목GPOMDM
기반Active Directory(온프레미스)클라우드 MDM 서비스
대상 OS주로 WindowsiOS·안드로이드·Windows·macOS 등
연결 조건사내망(도메인 컨트롤러 도달 필요)인터넷만 있으면 어디서나
정책 전달클라이언트가 가져감(pull)서버가 밀어줌(push, OS 프레임워크)
적용 단위Site/Domain/OU그룹·태그·동적 그룹
제어 깊이Windows에 대해 매우 세밀OS가 허용하는 API 범위
BYOD·원격불리강점(선택적 삭제·앱 단위 관리)
대표Windows Server AD, GPMCIntune, Workspace ONE, Jamf
GPO — Pull (사내망) AD 도메인 PC PC가 가져감 DC에 접근 가능해야 함(사내망/VPN) MDM — Push (클라우드) 클라우드 MDM 단말 서버가 밀어줌 인터넷만 있으면 어디서나
그림 7. 핵심 차이 — GPO는 사내망에서 클라이언트가 "가져가는(pull)" 방식, MDM은 인터넷 너머로 서버가 "밀어주는(push)" 방식. [확대]

11. 현대적 흐름 — 클라우드 · Intune · Co-management

많은 조직이 온프레미스 AD/GPO에서 클라우드 기반 MDM으로 이동하고 있습니다. 마이크로소프트 진영에서는 Entra ID(구 Azure AD) + Intune 조합이 대표적입니다. 단말을 클라우드에 조인·등록하면, 사내망 없이도 정책·앱·인증서를 배포할 수 있습니다.

  • Co-management(공동 관리) — 기존 ConfigMgr(SCCM)Intune을 함께 써 점진적으로 전환.
  • GPO → MDM 전환 지원 — Intune의 Group Policy Analytics가 기존 GPO를 분석해 대응하는 MDM 설정으로 매핑해 주고, Settings Catalog·Administrative Templates로 유사한 설정을 클라우드에서 제공.
  • 조건부 접근(Conditional Access) — "규정을 준수한(compliant) 단말만 사내 리소스 접근 허용" 같은 정책과 결합.
과거: 온프레미스 AD 도메인 + GPO SCCM(ConfigMgr) 사내망 Windows 중심 Co-management (점진적 전환) 현재: 클라우드 Entra ID + Intune UEM · 조건부 접근 크로스플랫폼·원격·BYOD
그림 8. 흐름 — 온프레미스 AD/GPO에서 클라우드(Entra ID + Intune) 기반 UEM으로. Co-management로 점진 전환한다. [확대]

12. 실무 시나리오 — 인증서 · Wi-Fi · 앱 배포

① 내부 CA 인증서 배포 (SSL 가시화 연계)

"SSL 가시화" 문서에서 본 것처럼, 복호화 장비의 내부 Root CA 인증서를 모든 단말이 신뢰하게 하려면 GPO 또는 MDM으로 배포합니다.

  • GPO: Computer Configuration → Windows Settings → Security Settings → Public Key Policies → Trusted Root Certification Authorities에 CA 인증서를 추가하면 도메인 PC 전체가 자동 신뢰.
  • MDM: "인증서 프로파일(Trusted Certificate)"로 iOS·안드로이드·Windows·mac에 동시에 배포.

② Wi-Fi / VPN 프로파일

사용자가 손대지 않아도 회사 Wi-Fi·VPN이 자동 설정되도록 프로파일을 배포합니다(그림 5의 .mobileconfig 예시).

③ 앱 배포·제한

필수 업무 앱을 자동 설치하고, 금지 앱을 차단합니다. MDM은 앱 스토어(사내 카탈로그)와 연동해 원격 설치·제거가 가능합니다.

④ 보안 기준 강제·컴플라이언스

암호 복잡도, 화면 잠금, 디스크 암호화(BitLocker·FileVault), 최신 OS 버전 등을 강제하고, 미준수 단말은 사내 리소스 접근을 차단(조건부 접근)합니다.

실무 팁 같은 목표(예: CA 배포)라도 도메인 가입 Windows는 GPO, 모바일·원격·BYOD는 MDM으로 나눠 접근하는 것이 현실적입니다. 많은 조직이 당분간 GPO와 MDM을 병행합니다.

13. 시장과 선도 기업

기업 / 제품특징
Microsoft Intune (Entra ID 연계)클라우드 UEM의 대표. Windows·모바일 통합, GPO 전환 지원, 조건부 접근. 사실상 시장 기준
VMware Workspace ONE (구 AirWatch)강력한 크로스 플랫폼 UEM. 대기업에서 널리 사용
JamfApple(iOS·macOS) 전문 MDM의 강자. 교육·크리에이티브 업계 강세
IBM MaaS360 · Ivanti(구 MobileIron)전통적 EMM/UEM 벤더
ManageEngine · Cisco Meraki SM · SOTI · Scalefusion · Kandji중소기업·특화 시장의 다양한 선택지
Google Endpoint ManagementWorkspace·안드로이드 생태계 기반 관리

전체 흐름은 "단순 MDM → 통합 UEM", 그리고 "온프레미스 GPO → 클라우드 관리"로 수렴하고 있습니다. 제로 트러스트(Zero Trust)와 조건부 접근이 결합되며, 단말 관리가 곧 보안의 최전선이 되었습니다.

14. 용어 설명

GPO (Group Policy Object, 그룹 정책 개체)
Active Directory에서 사용자·컴퓨터 설정을 중앙에서 정의·강제하는 정책 묶음.
Active Directory (AD) / 도메인 컨트롤러(DC)
Windows의 디렉터리 서비스와 그 서버. 사용자·컴퓨터·정책을 중앙 관리한다.
OU (Organizational Unit, 조직 단위)
AD 안에서 사용자·컴퓨터를 묶는 컨테이너. GPO를 이 단위에 연결(link)해 적용 범위를 정한다.
GPC / GPT / SYSVOL
GPO의 메타데이터(GPC, AD 저장)와 실제 설정 파일(GPT, SYSVOL 공유 폴더 저장).
LSDOU
GPO 적용 순서: Local → Site → Domain → OU. 나중 것이 앞 것을 덮어쓴다.
Block Inheritance / Enforced
상속 차단(하위가 상위 정책을 안 받음)과 강제(상위 정책을 하위가 못 덮어쓰게 함, 상속 차단도 무시).
Administrative Templates / ADMX
레지스트리 기반 설정을 정의하는 GPO 템플릿과 그 파일 형식(ADMX/ADML).
GPMC / gpupdate / gpresult / RSoP
GPO 관리 콘솔, 즉시 갱신 명령, 적용 결과 확인, 최종 정책 시뮬레이션 도구.
MDM (Mobile Device Management)
단말을 인터넷으로 원격 등록·설정·통제·보호하는 기술. OS 관리 프레임워크 위에서 동작.
Enrollment (등록)
단말을 MDM에 편입시키는 절차. 자동 등록: Apple ADE(구 DEP), Android Zero-Touch, Windows Autopilot.
APNs / FCM / WNS
Apple·안드로이드·Windows의 푸시 알림 서비스. MDM 서버가 단말을 깨워 접속을 유도하는 통로.
OMA-DM
단말 관리 표준 프로토콜. Windows MDM 등에서 사용.
프로파일 (Profile) / .mobileconfig
MDM이 단말에 배포하는 설정 묶음(Wi-Fi·VPN·인증서·제한 등). Apple은 .mobileconfig(XML) 형식.
Remote Wipe / Selective Wipe
원격 데이터 삭제. Selective Wipe는 BYOD에서 회사 데이터만 지우고 개인 데이터는 보존.
EMM / UEM / MAM / MCM
MDM을 확장한 개념들. EMM(모빌리티 전반), UEM(모든 단말 통합), MAM(앱 관리), MCM(콘텐츠 관리).
Co-management (공동 관리)
ConfigMgr(SCCM)와 Intune을 함께 사용해 온프레미스에서 클라우드로 점진 전환하는 방식.
Conditional Access (조건부 접근)
규정을 준수한 단말·사용자만 사내 리소스 접근을 허용하는 정책. 제로 트러스트의 핵심.

본 문서는 학습 목적의 개념·실무 정리입니다. 설정 경로·명령·제품 기능은 OS·제품 버전에 따라 달라질 수 있으니 공식 문서를 확인하세요. "SSL 가시화" 문서의 "내부 CA 배포"가 바로 이 GPO·MDM으로 구현됩니다.

반응형

BGP 완전 정복 — 개념부터 장비 설정, 그리고 클라우드(OpenStack · Kubernetes)까지

BGP(Border Gateway Protocol, 경계 경로 프로토콜)는 "인터넷을 하나로 묶는 접착제"입니다. 전 세계 수만 개의 독립 네트워크(AS)가 서로 어떤 IP 대역이 어디에 있는지를 이 프로토콜로 주고받습니다. 그런데 BGP는 이제 통신사 백본을 넘어 데이터센터 내부, 그리고 OpenStack·Kubernetes 같은 클라우드 안까지 깊숙이 들어와 있습니다. 이 문서는 BGP의 개념·동작·경로 선택부터 실무 장비 설정, 그리고 클라우드 활용 사례까지 그림과 함께 아주 자세히 정리합니다.

함께 보면 좋은 문서 BGP는 앞서 다룬 "Anycast" 문서의 핵심 엔진이자, "DNS"·"OVS(Open vSwitch)" 문서와도 이어집니다. Anycast·데이터센터 패브릭·Kubernetes 네트워킹을 이해하려면 결국 BGP로 돌아오게 됩니다.
목차
  1. BGP란 무엇인가 — 인터넷의 지도 프로토콜
  2. IGP vs EGP — BGP의 자리
  3. 핵심 개념 — AS · eBGP/iBGP · 세션 · 메시지
  4. BGP 상태 머신과 세션 수립 절차
  5. 경로 속성(Path Attributes)과 Best Path 선정
  6. 운영 시나리오 ① 멀티홈(Multihoming)과 이중화
  7. 운영 시나리오 ② 인바운드/아웃바운드 트래픽 제어
  8. 운영 시나리오 ③ iBGP 확장 — Route Reflector
  9. 운영 시나리오 ④ 데이터센터 Spine-Leaf eBGP 패브릭
  10. 실무 장비 설정 (Cisco · Juniper · FRRouting)
  11. BGP 보안과 안정성 — 필터링 · RPKI · 하이재킹
  12. 클라우드 ① OpenStack Neutron 동적 라우팅
  13. 클라우드 ② Kubernetes — Calico · MetalLB · Cilium
  14. 클라우드 ③ BGP EVPN / VXLAN 오버레이
  15. 운영·트러블슈팅 팁
  16. 시장과 생태계
  17. 용어 설명

1. BGP란 무엇인가 — 인터넷의 지도 프로토콜

인터넷은 하나의 거대한 네트워크가 아니라, 독립적으로 운영되는 수만 개의 네트워크(AS, Autonomous System, 자율 시스템)가 서로 연결된 "네트워크들의 네트워크"입니다. 각 AS(통신사, 대기업, 클라우드 사업자 등)는 자신이 보유한 IP 대역을 가지고 있습니다. BGP는 이 AS들 사이에서 "어떤 IP 대역이 어느 경로를 통해 도달 가능한지"를 광고하고 학습하는 프로토콜입니다.

BGP는 경로 벡터(Path Vector) 프로토콜입니다. 단순히 "거리(hop 수)"만 보는 것이 아니라, 목적지까지 거쳐 가는 AS들의 목록(AS_PATH)과 다양한 정책 속성을 함께 전달합니다. 덕분에 루프를 방지하고, 사업자마다 원하는 정책(policy)에 따라 경로를 선택할 수 있습니다.

인터넷 = AS들이 BGP로 이어진 그물 AS 65001 198.51.100.0/24 AS 65002 (ISP) 전송(transit) 사업자 AS 65003 203.0.113.0/24 AS 65010 (콘텐츠) 192.0.2.0/24 eBGP eBGP 각 AS는 자기 IP 대역을 BGP로 광고하고, 이웃 AS로부터 다른 대역으로 가는 경로를 배운다.
그림 1. 인터넷은 AS들이 BGP 피어링으로 연결된 구조. BGP가 "어느 대역이 어디 있는지"의 지도를 만든다. [확대]

2. IGP vs EGP — BGP의 자리

라우팅 프로토콜은 크게 두 종류로 나뉩니다. BGP가 어디에 위치하는지 이해하는 것이 중요합니다.

구분IGP (내부 게이트웨이 프로토콜)EGP (외부 게이트웨이 프로토콜)
대표OSPF, IS-IS, EIGRP, RIPBGP (사실상 유일)
범위하나의 AS 내부AS 사이(그리고 대규모 내부)
목표가장 빠른 경로(최단 거리) 찾기정책(policy) 기반 경로 선택
기준링크 비용·hop 등 메트릭AS_PATH·LOCAL_PREF 등 다수 속성
규모수백~수천 경로전체 인터넷 100만+ 경로 감당
한 줄 정리 IGP는 "우리 집 안에서 방을 오가는 최단 길"을, BGP는 "전 세계 도시들 사이의 정책적 통행로"를 정합니다. 둘은 경쟁이 아니라 함께 씁니다. 실제로 BGP는 다음 홉까지 도달하기 위해 내부적으로 IGP에 의존합니다.

3. 핵심 개념 — AS · eBGP/iBGP · 세션 · 메시지

eBGP와 iBGP

BGP 세션은 두 종류입니다. 어느 AS끼리 맺느냐에 따라 동작이 크게 다릅니다.

  • eBGP(external BGP)서로 다른 AS 사이의 세션. 보통 물리적으로 직접 연결된 이웃과 맺음(기본 TTL 1).
  • iBGP(internal BGP)같은 AS 내부의 라우터끼리 맺는 세션. 외부에서 배운 경로를 AS 내부에 전파하는 데 사용.
AS 65001 R1 R2 iBGP 같은 AS 내부 AS 65002 R3 eBGP 다른 AS 사이(R2 ↔ R3) eBGP로 배운 경로를 AS 내부의 다른 라우터에 알리려면 iBGP가 필요하다.
그림 2. eBGP(AS 사이)와 iBGP(AS 내부). 외부 경로를 내부로 나르는 것이 iBGP의 역할. [확대]
iBGP의 중요한 규칙 — Split Horizon 루프 방지를 위해 iBGP로 배운 경로는 다른 iBGP 이웃에게 다시 전달하지 않습니다. 그래서 전통적으로 모든 iBGP 라우터는 서로 직접 세션을 맺는 Full Mesh가 필요했고, 이 확장성 문제를 푸는 것이 뒤에 나올 Route Reflector입니다.

BGP 세션과 메시지

BGP는 TCP 179번 포트 위에서 동작합니다(신뢰성 있는 전송에 의존). 세션이 맺어지면 4가지 메시지를 주고받습니다.

메시지역할
OPEN세션 시작. AS 번호·BGP 버전·Hold Time·Router ID 등 협상
UPDATE경로 광고/철회. NLRI(도달 가능한 대역)와 Path Attributes를 실어 나름
KEEPALIVE세션이 살아있음을 알리는 주기적 신호(기본 60초, Hold 180초)
NOTIFICATION오류 발생 시 전송하고 세션 종료

4. BGP 상태 머신과 세션 수립 절차

BGP 세션은 정해진 상태 머신(Finite State Machine)을 거쳐 Established(수립 완료)에 도달합니다.

Idle Connect Active OpenSent OpenConfirm Established TCP 연결 시도 OPEN 교환 KEEPALIVE 확인 경로 교환 시작! Established가 되어야 비로소 UPDATE(경로)를 주고받는다
그림 3. BGP 상태 머신 — Idle → Connect → Active → OpenSent → OpenConfirm → Established. 마지막 단계에서만 경로가 오간다. [확대]
운영 팁 세션이 Active에서 멈춰 있으면 대개 TCP 179 연결 실패(방화벽·주소·AS 번호 불일치)입니다. Idle에 머물면 설정 오류나 이웃 미도달이 흔한 원인입니다. Established 여부가 첫 점검 지점입니다.

5. 경로 속성(Path Attributes)과 Best Path 선정

같은 목적지로 가는 경로가 여러 개일 때, BGP는 경로 속성(Path Attributes)을 순서대로 비교해 단 하나의 최적 경로(Best Path)를 고릅니다. 주요 속성은 다음과 같습니다.

속성의미방향/범위
Weight (Cisco 고유)클수록 선호. 해당 라우터에서만 유효(로컬)아웃바운드(로컬)
LOCAL_PREF클수록 선호. AS 내부 전체가 공유 → 아웃바운드 경로 결정AS 내부
AS_PATH짧을수록 선호. 거쳐 온 AS 목록(루프 방지에도 사용)전역
ORIGIN경로의 출처(IGP < EGP < Incomplete)전역
MED (Multi-Exit Discriminator)작을수록 선호. 이웃 AS에게 "우리 쪽 어느 입구로 들어와라" 힌트 → 인바운드 힌트인접 AS
NEXT_HOP다음 홉 IP. iBGP에서 특히 주의(next-hop-self)-
COMMUNITY경로에 붙이는 태그. 정책을 유연하게 적용정책용
Best Path 결정 순서 (위에서부터 비교, 먼저 승부나면 종료) ① Weight 최대 (Cisco 로컬) ② LOCAL_PREF 최대 → 아웃바운드 정책의 핵심 ③ 로컬에서 생성한 경로 우선 ④ AS_PATH 최단 ⑤ ORIGIN 최저 (IGP < EGP < Incomplete) ⑥ MED 최소 (같은 이웃 AS 비교) ⑦ eBGP > iBGP 경로 우선 ⑧ next-hop까지 IGP 메트릭 최소 → ⑨ 오래된 eBGP → ⑩ 최저 Router ID … 우선순위 높음 → 낮음
그림 4. BGP Best Path 결정 순서(요약). 실무에서 가장 많이 만지는 손잡이는 ② LOCAL_PREF, ④ AS_PATH, ⑥ MED이다. [확대]

6. 운영 시나리오 ① 멀티홈(Multihoming)과 이중화

기업이 인터넷 회선을 두 개 이상의 ISP에 연결하는 것을 멀티홈(Multihoming)이라 합니다. 목적은 이중화(한 ISP 장애 시 다른 ISP로 자동 전환)트래픽 분산입니다. 자체 AS 번호와 독립 IP 대역(PI)을 가지고 두 ISP와 각각 eBGP를 맺습니다.

ISP A (AS 64500) 인터넷 ISP B (AS 64501) 인터넷 우리 회사 (AS 65100) 198.51.100.0/24 광고 eBGP eBGP 한쪽 ISP·회선이 죽으면 BGP가 자동으로 살아있는 ISP로 경로를 재수렴 → 무중단에 가까운 이중화.
그림 5. 멀티홈 — 두 ISP와 eBGP를 맺어 이중화·부하분산. 자체 AS와 IP 대역이 필요하다. [확대]

7. 운영 시나리오 ② 인바운드/아웃바운드 트래픽 제어

멀티홈에서 가장 중요한 실무 기술은 "트래픽이 어느 회선으로 나가고 들어오게 할지" 제어하는 것입니다. 핵심 원리는 다음과 같습니다.

  • 아웃바운드(나가는 트래픽) 제어 = LOCAL_PREF — 내부에서 선호 회선을 정한다. 값이 클수록 선호. 내가 통제하기 쉬움.
  • 인바운드(들어오는 트래픽) 제어 = AS_PATH Prepend / MED / Community — 상대가 내 경로를 어떻게 볼지 조정. 상대 정책에 좌우되어 통제가 어려움.
아웃바운드 = LOCAL_PREF ISP A (기본) ISP B 우리 라우터 LOCAL_PREF 200 LOCAL_PREF 100 → 나가는 트래픽은 ISP A로 인바운드 = AS_PATH Prepend ISP A ISP B 우리 라우터 AS_PATH 짧게 AS_PATH 길게 (prepend) → 들어오는 트래픽은 ISP A로 유도 아웃바운드는 내가 LOCAL_PREF로 쉽게 정하고, 인바운드는 AS_PATH를 일부러 길게(prepend) 만들어 덜 매력적으로 보이게 한다.
그림 6. 트래픽 방향 제어 — 아웃바운드는 LOCAL_PREF, 인바운드는 AS_PATH prepend(경로를 길게 보이게)로 유도한다. [확대]

8. 운영 시나리오 ③ iBGP 확장 — Route Reflector

iBGP는 "배운 경로를 다른 iBGP 이웃에 재전달하지 않는다"는 규칙 때문에, 라우터가 N대면 N×(N-1)/2 개의 Full Mesh 세션이 필요합니다. 라우터가 많아지면 관리가 폭발합니다. 이를 해결하는 것이 Route Reflector(RR, 경로 반사기)입니다. RR은 iBGP 경로를 다른 iBGP 이웃(client)에게 대신 반사(reflect)해 주어, Full Mesh 없이도 경로를 전파합니다.

Full Mesh (세션 폭발) 5대 → 10개 세션 (N이 커지면 급증) Route Reflector (단순) RR client는 RR와만 세션 → 세션 수 대폭 감소
그림 7. Route Reflector — Full Mesh의 세션 폭발 문제를 "중앙 반사기"로 해결. 대규모 AS의 필수 설계. [확대]

대규모 환경에서는 RR을 이중화하고, 또 다른 방법인 Confederation(연합)으로 AS를 잘게 나누기도 합니다.

9. 운영 시나리오 ④ 데이터센터 Spine-Leaf eBGP 패브릭

현대 데이터센터는 Spine-Leaf(CLOS) 토폴로지를 씁니다. 흥미롭게도 이 내부 패브릭의 라우팅 프로토콜로 전통적 IGP(OSPF) 대신 eBGP를 쓰는 것이 사실상 표준이 되었습니다(RFC 7938). 각 스위치를 별도 AS로 두고 eBGP로 연결하면, 단순·확장성·트래픽 엔지니어링·멀티벤더 측면에서 유리하기 때문입니다.

Spine-Leaf (CLOS) — 각 스위치가 eBGP로 연결 Spine 1 (AS 65001) Spine 2 (AS 65002) Leaf 1 (65011) Leaf 2 (65012) Leaf 3 (65013) Leaf 4 (65014) 서버 랙 서버 랙 모든 Leaf-Spine이 eBGP로 연결 → 어느 서버든 균일한 hop, 링크 추가로 손쉽게 확장(scale-out).
그림 8. 데이터센터 Spine-Leaf eBGP 패브릭 — 스위치마다 AS를 부여해 eBGP로 연결(RFC 7938). 클라우드 인프라의 토대. [확대]

10. 실무 장비 설정 (Cisco · Juniper · FRRouting)

Cisco IOS — 기본 eBGP 피어링

router bgp 65100
 bgp router-id 10.0.0.1
 neighbor 203.0.113.2 remote-as 64500      ! ISP A와 eBGP
 neighbor 203.0.113.6 remote-as 64501      ! ISP B와 eBGP
 address-family ipv4 unicast
  network 198.51.100.0 mask 255.255.255.0  ! 우리 대역 광고
  neighbor 203.0.113.2 activate
  neighbor 203.0.113.6 activate
 exit-address-family

! 세션/경로 확인
! show ip bgp summary
! show ip bgp
! show ip route bgp

Cisco IOS — 아웃바운드는 ISP A 선호(LOCAL_PREF), 인바운드는 ISP B로 덜 유도(AS_PATH prepend)

! 들어온 경로에 LOCAL_PREF 200 부여 → 나가는 트래픽은 ISP A 우선
route-map FROM-ISP-A permit 10
 set local-preference 200
!
! ISP B로 내보내는 우리 경로의 AS_PATH를 길게(prepend) → 인바운드는 ISP A로 유도
route-map TO-ISP-B permit 10
 set as-path prepend 65100 65100 65100
!
router bgp 65100
 neighbor 203.0.113.2 route-map FROM-ISP-A in
 neighbor 203.0.113.6 route-map TO-ISP-B out

Cisco IOS — iBGP + Route Reflector

router bgp 65100
 neighbor 10.0.0.2 remote-as 65100          ! iBGP (같은 AS)
 neighbor 10.0.0.2 update-source Loopback0  ! 루프백으로 안정적 세션
 address-family ipv4 unicast
  neighbor 10.0.0.2 next-hop-self           ! iBGP next-hop 문제 방지
  neighbor 10.0.0.2 route-reflector-client  ! 이 이웃을 RR client로

Juniper Junos — eBGP

protocols {
    bgp {
        group ISP-A {
            type external;
            peer-as 64500;
            neighbor 203.0.113.2;
        }
    }
}
routing-options {
    autonomous-system 65100;
}
# 확인: show bgp summary / show route protocol bgp

FRRouting (FRR) — 리눅스/클라우드에서 널리 쓰이는 오픈소스 BGP

! vtysh 설정 (Cisco 유사 문법)
router bgp 65100
 bgp router-id 10.0.0.1
 neighbor 203.0.113.2 remote-as 64500
 address-family ipv4 unicast
  network 198.51.100.0/24
  neighbor 203.0.113.2 activate
 exit-address-family
!
! 확인: vtysh -c "show bgp summary"
!       vtysh -c "show bgp ipv4 unicast"
FRRouting이 중요한 이유 FRR(FRRouting, Quagga의 후예)은 리눅스에서 동작하는 오픈소스 라우팅 스택입니다. 뒤에 나올 Kubernetes(Calico, MetalLB, Cilium)와 OpenStack, 그리고 화이트박스 스위치(SONiC)가 내부적으로 FRR을 BGP 엔진으로 사용합니다. "클라우드의 BGP = 사실상 FRR"이라 해도 과언이 아닙니다.

11. BGP 보안과 안정성 — 필터링 · RPKI · 하이재킹

BGP는 태생적으로 "이웃을 신뢰"하도록 설계되어, 잘못된(혹은 악의적인) 경로 광고에 취약합니다. 누군가 남의 IP 대역을 자기 것이라 광고하면 트래픽이 엉뚱한 곳으로 흘러가는데, 이를 BGP 하이재킹(hijacking)이라 합니다.

대책설명
Prefix-list / Route-map 필터링이웃에게 받을/보낼 대역을 명시적으로 제한(가장 기본)
Maximum-prefix이웃이 보내는 경로 수 상한 → 폭주(누출) 시 세션 차단
RPKI / ROA어떤 AS가 어떤 대역을 광고해도 되는지 암호학적으로 검증(Route Origin Validation)
TCP-AO / MD5, GTSM세션 인증(MD5), TTL 검사(GTSM)로 위조 세션 방지
BGPsecAS_PATH 전체를 서명으로 검증(도입 초기 단계)
경로 수신"192.0.2.0/24 by AS64500" RPKI 검증ROA: 이 대역은 AS64500 소유? Valid → 수락 Invalid → 거부 RPKI는 "이 대역을 이 AS가 광고해도 되는가"를 검증해 하이재킹·경로 누출을 막는다.
그림 9. RPKI/ROA 기반 경로 원본 검증(Route Origin Validation) — BGP 하이재킹 방어의 핵심. [확대]

12. 클라우드 ① OpenStack Neutron 동적 라우팅

클라우드에서도 BGP가 깊이 쓰입니다. OpenStack의 네트워킹 서비스 Neutronneutron-dynamic-routing 확장으로 BGP를 지원합니다. 대표 용도는 "테넌트의 사설 IP(프로젝트 서브넷)와 Floating IP를 물리 네트워크로 자동 광고"하는 것입니다. 그러면 외부 라우터가 별도 정적 경로(static route) 없이도 클라우드 내부의 IP로 가는 길을 BGP로 학습합니다.

OpenStack 클라우드 BGP Speakerneutron-dynamic-routing 테넌트 VM들Floating IP Speaker가 프로젝트 서브넷·Floating IP를 BGP로 외부에 광고 eBGP 물리 라우터 (ToR)경로 자동 학습 외부망 정적 경로 수작업 없이, 클라우드가 자기 IP 도달 경로를 BGP로 알려 준다 → 자동화·확장성.
그림 10. OpenStack Neutron 동적 라우팅 — BGP Speaker가 테넌트 서브넷·Floating IP를 물리망에 자동 광고. [확대]
# OpenStack Neutron 동적 라우팅(BGP) 설정 예시
openstack bgp speaker create --local-as 64512 --ip-version 4 my-speaker
openstack bgp speaker add network my-speaker provider-network
openstack bgp peer create --peer-ip 10.0.0.1 --remote-as 64513 tor-router
openstack bgp speaker add peer my-speaker tor-router
# 광고되는 경로 확인
openstack bgp speaker list advertised routes my-speaker

최근에는 OVN(Open Virtual Network) 기반 환경에서 OVN-BGP-Agent가 FRR과 연동해 같은 역할을 더 유연하게 수행합니다.

13. 클라우드 ② Kubernetes — Calico · MetalLB · Cilium

Kubernetes에서 BGP는 "Pod IP와 Service(LoadBalancer) IP를 클러스터 밖 네트워크로 광고"하는 데 핵심적으로 쓰입니다. 오버레이(터널) 없이 Pod IP를 물리망에서 직접 라우팅하거나, 온프레미스에서 LoadBalancer 타입 서비스를 구현할 때 BGP가 등장합니다.

(1) Calico — Pod 네트워크를 BGP로 광고

Calico는 대표적인 CNI(Container Network Interface)로, 각 노드에서 BGP(내부적으로 BIRD 또는 FRR)를 돌려 그 노드에 있는 Pod 대역(예: /26)을 다른 노드와 물리 라우터에 광고합니다. 덕분에 오버레이 없이도 Pod끼리 순수 IP 라우팅(no-overlay)으로 통신할 수 있어 성능·가시성이 좋습니다. 대규모에서는 노드마다 Full Mesh 대신 Route Reflector를 씁니다.

Node 1 Pod 대역 10.244.1.0/26 Pod Pod Calico BGP (BIRD/FRR) Node 2 Pod 대역 10.244.2.0/26 Pod Pod Calico BGP (BIRD/FRR) 물리 라우터 / RR "10.244.1.0/26 여기" "10.244.2.0/26 여기" 각 노드가 자기 Pod 대역을 BGP로 광고 → 오버레이 없이 Pod IP 직접 라우팅
그림 11. Calico BGP — 노드마다 자기 Pod 대역을 광고해 오버레이 없이 Pod IP를 물리망에서 직접 라우팅. [확대]
# Calico 전역 BGP 설정 (AS 번호, RR 등)
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  asNumber: 64512
  serviceClusterIPs:
    - cidr: 10.96.0.0/12    # Service IP도 광고 가능
---
# 물리 라우터(ToR)와 BGP 피어링
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: tor-switch
spec:
  peerIP: 10.0.0.1
  asNumber: 64513

(2) MetalLB (BGP 모드) — 온프레미스 LoadBalancer 서비스

퍼블릭 클라우드가 아닌 온프레미스 Kubernetes에는 LoadBalancer 타입 서비스에 외부 IP를 붙여 주는 장치가 없습니다. MetalLB가 이를 해결하는데, BGP 모드에서는 서비스의 외부 IP를 BGP로 물리 라우터에 광고해 클러스터 밖에서 그 IP로 접속할 수 있게 합니다. 여러 노드가 같은 서비스 IP를 광고하면 ECMP로 부하가 분산됩니다.

온프레미스 Kubernetes MetalLB Speaker Service (LoadBalancer)EXTERNAL-IP 198.51.100.50 Speaker가 198.51.100.50/32를 BGP로 광고 BGP 물리 라우터198.51.100.50 학습 사용자 사용자는 198.51.100.50으로 접속 → 라우터가 BGP로 배운 경로를 따라 클러스터로 전달(여러 노드 ECMP 분산).
그림 12. MetalLB BGP 모드 — LoadBalancer 서비스 IP를 BGP로 광고해 온프레미스에서도 외부 접속·부하분산 실현. [확대]
# MetalLB BGP 모드 — 피어와 IP 풀 정의
apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:
  name: tor-router
  namespace: metallb-system
spec:
  myASN: 64500
  peerASN: 64501
  peerAddress: 10.0.0.1
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: lb-pool
  namespace: metallb-system
spec:
  addresses:
    - 198.51.100.0/24
---
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
  name: lb-adv
  namespace: metallb-system
spec:
  ipAddressPools: [lb-pool]

(3) Cilium — eBPF 기반 CNI의 BGP Control Plane

Cilium은 eBPF 기반의 현대적 CNI로, 자체 BGP Control Plane(내부적으로 GoBGP)을 내장합니다. Pod CIDR와 LoadBalancer IP를 BGP로 광고하는 점은 Calico·MetalLB와 비슷하지만, eBPF의 고성능 데이터 경로와 결합된다는 점이 특징입니다. (참고: Cilium은 앞서 다룬 "eBPF/XDP" 기술과 직접 연결됩니다.)

# Cilium BGP — 클러스터 BGP 설정(개념 예시, 버전별 CRD 상이)
apiVersion: cilium.io/v2alpha1
kind: CiliumBGPClusterConfig
metadata:
  name: bgp-cluster
spec:
  bgpInstances:
    - name: "instance-64512"
      localASN: 64512
      peers:
        - name: "tor-peer"
          peerASN: 64513
          peerAddress: 10.0.0.1
도구BGP 용도BGP 엔진
CalicoPod 대역(및 Service IP) 광고 — 오버레이 없는 라우팅BIRD / FRR
MetalLB (BGP 모드)LoadBalancer 서비스 외부 IP 광고자체 / FRR
CiliumPod CIDR·LoadBalancer IP 광고 (eBPF 결합)GoBGP
kube-routerPod 대역 광고 + 서비스 프록시GoBGP

14. 클라우드 ③ BGP EVPN / VXLAN 오버레이

대규모 데이터센터·클라우드에서는 VXLAN으로 L2 네트워크를 물리망 위에 겹쳐(overlay) 만들고, 그 제어 평면(control plane)으로 BGP EVPN(Ethernet VPN)을 사용합니다. 쉽게 말해 "어떤 가상머신·컨테이너의 MAC/IP가 어느 물리 서버(VTEP)에 있는지"를 BGP로 광고해, 넓은 데이터센터에서도 효율적으로 L2/L3 오버레이를 운영합니다.

BGP EVPN = VXLAN 오버레이의 "두뇌(제어 평면)" 물리 Underlay (IP 패브릭, eBGP Spine-Leaf) Leaf/VTEP AVM MAC/IP 광고 Leaf/VTEP BVM MAC/IP 학습 BGP EVPN 제어 평면 VXLAN 터널 (데이터 평면)
그림 13. BGP EVPN/VXLAN — 물리 IP 패브릭 위에 가상 L2/L3 오버레이를 만들고, MAC/IP 정보를 BGP EVPN으로 광고한다. [확대]

15. 운영·트러블슈팅 팁

  • 세션 상태 먼저show ip bgp summary로 이웃이 Established인지 확인. 숫자(경로 수)가 보이면 정상.
  • Active/Idle 고착 — TCP 179 도달성(방화벽), remote-as·주소·인증(MD5) 불일치 점검.
  • 경로가 안 보임 — 광고측 network/재분배 설정, 수신측 필터(prefix-list/route-map), iBGP next-hop 문제(next-hop-self) 확인.
  • Flap(경로 요동) — 링크 불안정·타이머 문제. 과거엔 route dampening을 썼으나 부작용으로 신중히 사용.
  • 최적 경로 이유show ip bgp <prefix>로 어떤 속성 때문에 best가 됐는지 확인.
  • 안전장치 — 이웃마다 maximum-prefix와 인/아웃 필터를 반드시 설정(경로 누출 방지).

16. 시장과 생태계

구분대표
하드웨어 라우터/스위치Cisco, Juniper, Arista, Nokia, Huawei
오픈소스 BGP 스택FRRouting(FRR), BIRD, GoBGP, OpenBGPD
화이트박스 NOSSONiC(FRR 사용), Cumulus Linux(현 NVIDIA)
클라우드/K8sCalico, Cilium, MetalLB, kube-router, OpenStack Neutron/OVN
보안·모니터링RPKI(각 RIR), BGP 모니터링(BGPStream, RIPE RIS 등)

BGP는 40년 가까이 인터넷의 근간을 지켜 왔고, 이제는 데이터센터 내부와 클라우드·컨테이너로 활동 무대를 넓혔습니다. "라우팅 프로토콜은 통신사만의 것"이라는 시대는 지났고, 개발·인프라 엔지니어에게도 BGP는 필수 소양이 되었습니다.

17. 용어 설명

BGP (Border Gateway Protocol)
AS들 사이에서 IP 대역의 도달 경로를 광고·학습하는 경로 벡터 프로토콜. 인터넷의 표준 라우팅 프로토콜.
AS / ASN (Autonomous System / Number)
하나의 정책으로 운영되는 네트워크 집합과 그 식별 번호. BGP 광고의 주체.
eBGP / iBGP
서로 다른 AS 사이의 세션(eBGP)과 같은 AS 내부 라우터 간 세션(iBGP).
IGP / EGP
AS 내부 라우팅(OSPF·IS-IS 등, IGP)과 AS 간 라우팅(BGP, EGP).
NLRI (Network Layer Reachability Information)
UPDATE 메시지에 실리는 "도달 가능한 IP 대역" 정보.
Path Attributes
경로에 붙는 속성들(AS_PATH, LOCAL_PREF, MED, NEXT_HOP, COMMUNITY 등). Best Path 선정과 정책의 기준.
AS_PATH
경로가 거쳐 온 AS 목록. 짧을수록 선호되며 루프 방지에도 쓰인다. Prepend로 일부러 길게 만들 수 있다.
LOCAL_PREF / MED
LOCAL_PREF는 AS 내부에서 아웃바운드 경로를 결정(클수록 선호), MED는 이웃 AS에 인바운드 입구를 힌트(작을수록 선호).
Best Path
같은 목적지의 여러 경로 중 속성 비교로 선택된 최적 경로.
Route Reflector (RR)
iBGP Full Mesh를 대체하기 위해 경로를 client에게 반사(전파)해 주는 라우터. 대규모 AS의 필수 설계.
CLOS / Spine-Leaf
데이터센터의 확장형 토폴로지. 내부 라우팅으로 eBGP를 널리 사용(RFC 7938).
RPKI / ROA
Resource PKI와 Route Origin Authorization. 어떤 AS가 어떤 대역을 광고해도 되는지 검증해 하이재킹을 막는다.
BGP 하이재킹 / 경로 누출
남의 대역을 자기 것이라 잘못 광고(hijack)하거나, 받은 경로를 잘못 재광고(leak)해 트래픽이 오도되는 사고.
FRRouting (FRR)
리눅스용 오픈소스 라우팅 스택. Kubernetes·OpenStack·화이트박스 스위치의 BGP 엔진으로 널리 쓰인다.
CNI (Container Network Interface)
Kubernetes의 네트워크 플러그인 표준. Calico·Cilium 등이 BGP로 Pod/Service IP를 광고한다.
MetalLB
온프레미스 Kubernetes에서 LoadBalancer 서비스 IP를 제공하는 도구. BGP 모드로 외부 IP를 광고한다.
VXLAN / BGP EVPN
물리망 위에 가상 L2/L3 네트워크를 겹치는 오버레이 기술(VXLAN)과 그 제어 평면(BGP EVPN).
ECMP (Equal-Cost Multi-Path)
비용이 같은 여러 경로로 트래픽을 분산하는 기법. 여러 노드가 같은 IP를 광고할 때 부하분산에 활용.

본 문서는 학습 목적의 개념·실무 정리입니다. 설정 예시는 이해를 돕기 위한 것으로, 실제 적용 시에는 장비·소프트웨어 버전과 공식 문서를 확인하시기 바랍니다. "Anycast"·"DNS"·"OVS" 문서와 함께 보면 BGP의 쓰임새가 더 넓게 보입니다.

반응형
작성일: 2026년 8월 11일

 

 

 

 

SSL 가시화(SSL/TLS Visibility) — 개념 · 아키텍처 · 망구성, 그리고 직접 개발하기

오늘날 인터넷 트래픽의 대부분은 TLS(Transport Layer Security)로 암호화되어 있습니다. 보안이 강해진 것은 좋지만, 역설적으로 방화벽·침입탐지(IDS/IPS)·유출방지(DLP) 같은 보안 장비가 "내용을 볼 수 없는" 사각지대가 생겼습니다. 공격자는 이 암호화 뒤에 악성코드를 숨깁니다. SSL 가시화(SSL/TLS Visibility) 제품은 이 암호화 트래픽을 안전하게 복호화해 보안 장비에 넘겨주고 다시 암호화하는 장치입니다. 이 문서는 그 개념·아키텍처·망구성부터, 오픈소스로 직접 구현하는 방법까지 다룹니다.

함께 보면 좋은 문서 이 글은 앞서 다룬 "SSL Certificate·TLS" 문서를 전제로 합니다. TLS handshake·인증서 체인·CA 개념을 알면 훨씬 쉽습니다. 또 "DDoS 탐지"·"흐름 기반 탐지" 문서의 보안 장비들이 바로 이 복호화된 트래픽을 소비하는 대상입니다.
목차
  1. SSL 가시화란 무엇인가 — 암호화라는 사각지대
  2. 태동 배경과 역사 (Motive)
  3. 두 가지 큰 방향 — 아웃바운드 vs 인바운드
  4. 동작 원리 ① 아웃바운드 Forward Proxy(MITM)
  5. 동작 원리 ② 인바운드(서버 보호) 복호화
  6. Passive/TAP 방식과 TLS 1.3·PFS의 벽
  7. Architecture — 제품 내부 구성요소
  8. 망 구성(Deployment Topology)
  9. Decrypt Broker와 서비스 체이닝 — "한 번 복호화, 여러 번 검사"
  10. 인증서·CA 아키텍처
  11. 직접 개발하기 — 설계 단계
  12. 직접 개발하기 — 오픈소스·라이브러리
  13. 도전 과제 — Pinning · ECH · 성능 · 법적 문제
  14. 시장과 선도 제품
  15. 용어 설명

1. SSL 가시화란 무엇인가 — 암호화라는 사각지대

SSL 가시화(SSL/TLS Visibility, 또는 SSL Inspection·TLS Decryption·복호화 가시성)는 암호화된 TLS 트래픽을 중간에서 복호화하여 그 내용을 보안 장비가 검사할 수 있게 만든 뒤, 다시 암호화하여 목적지로 전달하는 기술·제품입니다.

왜 필요할까요? 현재 웹 트래픽의 대부분(80~95%)이 HTTPS로 암호화되어 있습니다. 그런데 방화벽·IPS·DLP·샌드박스 같은 보안 장비는 암호화된 페이로드(payload)를 들여다볼 수 없습니다. 공격자는 이 점을 노려 악성코드 다운로드, 명령제어(C2), 데이터 유출을 모두 TLS 안에 숨깁니다. "보이지 않으면 막을 수 없다"는 것이 핵심 문제입니다.

사용자 🔒 TLS 암호화 (내용 안 보임) IPS / DLP "검사 불가 ✗" 웹 서버 😈 이 안에 악성코드·유출이 숨어 있어도 보안 장비는 암호화 때문에 아무것도 못 본다
그림 1. 문제 — 트래픽이 암호화되면 IPS·DLP 같은 보안 장비가 내용을 검사할 수 없어 위협이 숨는다. [확대]

2. 태동 배경과 역사 (Motive)

  • HTTPS의 전면 확산 — Let's Encrypt의 무료 인증서, 구글의 "HTTPS 우대" 정책, 브라우저의 "안전하지 않음" 경고로 웹 전체가 암호화됨.
  • 암호화된 위협(Encrypted Threats) — 악성코드·C2·랜섬웨어의 대다수가 이제 TLS를 통해 오간다. 암호화가 공격자의 은신처가 됨.
  • 규제·감사 요구 — 데이터 유출 방지(DLP), 규정 준수(compliance)를 위해 나가는 트래픽 내용을 봐야 하는 필요.
  • TLS 1.3·PFS의 등장 — 과거의 "수동 복호화(passive)"가 불가능해지면서, 인라인 복호화(가시화 장비)가 사실상 필수가 됨.

3. 두 가지 큰 방향 — 아웃바운드 vs 인바운드

구분아웃바운드 (Forward)인바운드 (Reverse)
보호 대상내부 사용자(직원)가 밖으로 나가는 트래픽외부 사용자가 우리 서버로 들어오는 트래픽
목적악성코드 다운로드·데이터 유출·C2 탐지우리 웹 서버로 오는 공격 탐지(WAF·IPS)
서버 개인키없음 → MITM(중간자) 방식으로 인증서를 즉석 생성보유 → 서버 인증서·키로 직접 복호화 가능
클라이언트 신뢰내부 CA를 단말에 배포해야 함(필수)불필요(우리 인증서 사용)
대표 배치기업 인터넷 출구(egress)데이터센터 서버 앞단

4. 동작 원리 ① 아웃바운드 Forward Proxy(MITM)

아웃바운드 가시화의 핵심은 "통제된 중간자(Man-in-the-Middle)"입니다. 가시화 장비는 TLS 세션을 둘로 쪼갭니다 — 클라이언트와는 장비가 서버인 척, 서버와는 장비가 클라이언트인 척. 그 사이에서 평문(plaintext)을 얻어 검사합니다.

  1. 클라이언트가 https://site.com에 접속을 시도(ClientHello의 SNI로 목적지 파악).
  2. 장비가 실제 서버와 먼저 TLS를 맺어 진짜 인증서를 확인.
  3. 장비가 내부 CA로 site.com용 가짜(대리) 인증서를 즉석 생성해 클라이언트에게 제시.
  4. 클라이언트는 (내부 CA를 신뢰하도록 설정돼 있으므로) 이를 정상으로 받아들여 장비와 TLS를 맺음.
  5. 장비는 양쪽 세션의 중간에서 평문을 획득 → 보안 장비로 검사 → 다시 암호화하여 서버로 전달.
클라이언트 🔒 TLS 세션 ① (대리 인증서) 가시화 장비 복호화 → 평문 → 검사 → 재암호화 IPS/DLP 검사 🔒 TLS 세션 ② (진짜 인증서) 서버 클라이언트↔장비 (장비가 "서버인 척") 장비↔서버 (장비가 "클라이언트인 척")
그림 2. Forward Proxy(MITM) — TLS 세션을 둘로 나눠 중간에서 평문을 얻는다. 내부 CA로 대리 인증서를 즉석 생성하는 것이 핵심. [확대]
왜 "내부 CA 배포"가 필수인가 장비가 만든 대리 인증서를 클라이언트가 신뢰하게 하려면, 장비의 내부 CA 인증서를 모든 단말의 신뢰 저장소(trust store)에 미리 배포해야 합니다(GPO·MDM 등). 이게 없으면 브라우저가 인증서 경고를 띄웁니다.

5. 동작 원리 ② 인바운드(서버 보호) 복호화

인바운드 방식은 훨씬 단순합니다. 우리가 서버의 인증서와 개인키를 이미 보유하므로, 장비에 그 키를 넣어 두면 들어오는 트래픽을 중간자 없이 직접 복호화할 수 있습니다(또는 리버스 프록시로 TLS를 종단). 데이터센터에서 웹 서버로 향하는 트래픽을 WAF·IPS로 검사할 때 씁니다.

인바운드의 주의점 개인키로 직접 복호화하는 수동(passive) 방식은 RSA 키 교환일 때만 가능합니다. 요즘 표준인 ECDHE(PFS)TLS 1.3에서는 키가 세션마다 달라져 개인키만으로 복호화할 수 없어, 리버스 프록시(TLS 종단) 형태의 인라인 방식이 필요합니다.

6. Passive/TAP 방식과 TLS 1.3·PFS의 벽

예전에는 트래픽을 복제(TAP/mirror)해서 서버 개인키로 오프라인 복호화하는 수동 방식이 인기였습니다. 장비가 경로에 끼어들지 않아 지연·장애 위험이 없었기 때문입니다. 그러나 이 방식은 사실상 수명을 다했습니다.

과거: RSA 키 교환 세션 키가 서버 개인키로 보호됨 → 개인키 하나로 복제 트래픽을 수동(passive) 복호화 가능 TAP/mirror + 개인키 = OK 경로에 안 끼어들어 안전했음 현재: ECDHE(PFS) · TLS 1.3 세션마다 임시 키 생성(Forward Secrecy) → 서버 개인키를 알아도 세션 키를 복원할 수 없음 수동 복호화 불가능 ✗ → 인라인 MITM/프록시가 필수가 됨
그림 3. PFS(ECDHE)·TLS 1.3의 확산으로 "개인키 기반 수동 복호화"는 불가능해졌다. 이제는 인라인 방식이 표준. [확대]

7. Architecture — 제품 내부 구성요소

SSL 가시화 제품(또는 직접 만들 시스템)은 대체로 다음 구성요소로 이루어집니다.

구성요소역할
트래픽 인터셉션대상 트래픽을 장비로 유도(투명 리다이렉트·명시 프록시·인라인 브리지). SNI 기반 목적지 파악
TLS 종단/재수립 엔진클라이언트 측 TLS 종단 + 서버 측 TLS 신규 수립(세션 분리)
내부 CA·인증서 관리대리 인증서 즉석 생성·캐시, CA 키 보관(HSM), 클라이언트 신뢰 배포
정책 엔진(Policy)무엇을 복호화하고 무엇을 우회(bypass)할지 결정(카테고리·SNI·규정)
복호화 존/서비스 체이닝평문을 IPS·DLP·AV·샌드박스 등 검사 장비로 전달(인라인 또는 ICAP·mirror)
재암호화·포워딩검사 후 다시 암호화하여 목적지로 전송
로깅·관리세션 로그, 감사, 키 관리, 성능 모니터링
인터셉션SNI 파악 TLS 종단세션 분리 정책 엔진복호화/우회판단 평문 검사IPS/DLP/AV서비스 체인 재암호화서버로 전송 목적지 서버 내부 CA · 인증서대리 인증서 즉석 생성
그림 4. 제품 내부 파이프라인 — 인터셉션 → TLS 종단 → 정책 → 평문 검사 → 재암호화. 내부 CA가 대리 인증서를 공급한다. [확대]

8. 망 구성(Deployment Topology)

실제 네트워크에 어떻게 끼워 넣느냐에 따라 세 가지 대표 배치가 있습니다.

방식특징장단점
인라인 투명(L2 Bridge)양쪽 포트 사이에 브리지처럼 끼어듦. 클라이언트 설정 불필요+ 투명·간편 / − 장비 장애가 곧 회선 장애(우회 fail-open 필요)
인라인 라우팅(L3)게이트웨이·라우팅 홉으로 배치+ 유연 / − 라우팅 설계 필요
명시적 프록시(Explicit)브라우저·PAC에 프록시로 지정+ 제어 쉬움 / − 클라이언트 설정 필요
사내 PC 스위치 SSL 가시화 장비 (인라인 투명 브리지) fail-open 바이패스 지원 방화벽/IPS평문 검사 인터넷 경로 중간에 투명하게 끼어들어 복호화 → 방화벽/IPS가 평문 검사 → 재암호화 후 인터넷으로
그림 5. 대표 망구성 — 인터넷 출구에 인라인 투명 브리지로 배치. 장애 시 회선을 살리는 fail-open 바이패스가 중요. [확대]

9. Decrypt Broker와 서비스 체이닝 — "한 번 복호화, 여러 번 검사"

복호화는 CPU를 많이 먹는 비싼 작업입니다. 그래서 여러 보안 장비가 각자 복호화하는 낭비를 없애기 위해, 전용 Decrypt Broker(복호화 중개기)딱 한 번 복호화한 평문을 여러 검사 장비에 순서대로(또는 병렬로) 흘려보내고, 마지막에 한 번 재암호화합니다. 이를 서비스 체이닝(Service Chaining)이라 합니다.

Decrypt Broker 한 번만 복호화 IPS DLP AV/샌드박스 평문(cleartext) 재암호화한 번만 목적지 복호화·재암호화는 각 1회, 검사만 여러 장비로 → 성능·비용 절감 + 보안 장비들은 "평문만 신경 쓰면 됨"
그림 6. Decrypt Broker + 서비스 체이닝 — 한 번 복호화한 평문을 여러 보안 장비가 나눠 검사하고, 마지막에 한 번 재암호화한다. [확대]

10. 인증서·CA 아키텍처

아웃바운드 가시화의 심장은 내부 CA(Certificate Authority)입니다. 장비는 접속 요청이 올 때마다 그 도메인용 대리(leaf) 인증서를 즉석에서 만들어 내부 CA 키로 서명합니다. 이 CA 인증서를 모든 사내 단말이 신뢰하도록 배포해 두면, 클라이언트는 경고 없이 접속합니다.

내부 Root CA (HSM 보관)가시화 장비가 소유한 서명 키 site.com 대리 인증서 즉석 생성·서명SNI/SAN을 실제 서버와 동일하게 복제 사내 단말 신뢰 저장소GPO·MDM으로 CA 배포 CA를 미리 신뢰시킴 ⚠ CA 키가 유출되면 모든 사이트를 위조 가능 → HSM 필수
그림 7. 인증서·CA 아키텍처 — 내부 CA가 대리 인증서를 즉석 서명하고, 그 CA를 단말에 신뢰시킨다. CA 키 보호(HSM)가 절대적으로 중요. [확대]

11. 직접 개발하기 — 설계 단계

실제로 SSL 가시화 시스템을 구현한다면, 대략 다음 순서로 설계합니다.

  1. 배치 모드 결정 — 아웃바운드(Forward MITM)냐 인바운드(Reverse)냐, 인라인이냐 명시 프록시냐.
  2. 트래픽 유도 — 리눅스에서 iptables/nftables + TPROXY로 투명 리다이렉트, 또는 명시 프록시. 목적지는 SNI로 파악.
  3. 내부 CA 구축 — OpenSSL로 Root CA 생성, 키는 HSM/파일 보관. 대리 인증서를 SNI에 맞춰 즉석 생성·캐시.
  4. TLS 세션 분리 — 클라이언트 측은 대리 인증서로 종단, 서버 측은 새 TLS로 재수립. 서버 인증서 검증은 장비가 대신 수행.
  5. 정책 엔진 — 도메인 카테고리·SNI 기반 복호화/우회(bypass) 목록(금융·의료·인증서 pinning 앱은 우회).
  6. 검사 연동 — 평문을 인라인으로 통과시키거나, ICAP·mirror로 IPS/DLP/AV에 전달.
  7. 재암호화·포워딩, 그리고 로깅·감사·성능(하드웨어 암호가속·세션 캐시).
# (1) 투명 인터셉션: iptables로 443 트래픽을 프록시(8080)로 리다이렉트 (개념 예시)
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080

# (2) 내부 Root CA 생성 (OpenSSL)
openssl genrsa -out myCA.key 4096
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 3650 \
  -subj "/CN=MyCorp SSL Visibility CA" -out myCA.crt
# → myCA.crt 를 사내 단말 신뢰 저장소(GPO/MDM)에 배포

12. 직접 개발하기 — 오픈소스·라이브러리

바닥부터 만들 필요는 없습니다. 아래 오픈소스들이 각 구성요소의 훌륭한 출발점입니다.

① TLS 가로채기(MITM) 엔진 — 핵심

도구설명언어
mitmproxy가장 완성도 높은 HTTPS MITM 프록시. 자체 CA로 대리 인증서 즉석 생성, Python 애드온으로 트래픽 가공·검사 자동화. 프로토타입·연구의 1순위Python
SSLsplit투명 TLS/SSL MITM 전용 도구. 성능 지향, 다양한 프로토콜C
PolarProxy복호화한 트래픽을 PCAP로 저장해 Wireshark/IDS로 분석하기 좋음-
Squid + SSL Bump대표 포워드 프록시. ssl_bump의 peek/splice/bump로 선택적 복호화C++
Envoy / HAProxy / Nginx리버스(인바운드) TLS 종단·재암호화 지점으로 활용C++/C
elazarl/goproxyGo로 커스텀 MITM 프록시를 직접 구현할 때 좋은 라이브러리Go

② TLS 라이브러리(직접 구현 시)

OpenSSL, BoringSSL(구글), wolfSSL·mbedTLS(경량/임베디드), s2n-tls(AWS), 그리고 Go의 crypto/tls·Rust의 rustls. 대리 인증서 즉석 생성은 Go의 crypto/x509나 OpenSSL API로 쉽게 구현합니다.

③ 평문 검사(분석) 측

Suricata(IDS/IPS, 인라인 가능), Zeek(네트워크 보안 모니터·TLS 메타데이터), ClamAV(안티바이러스, ICAP 연동), c-icap(ICAP 서버로 서비스 체이닝), nDPI(프로토콜 식별). 복호화된 평문을 이들에게 넘겨 검사합니다.

④ 최신 대안 — eBPF 기반 호스트 가시성

MITM 없이 단말(호스트)에서 평문을 얻는 방법도 뜨고 있습니다. eCapture·Pixie 같은 도구는 eBPF로 애플리케이션의 SSL_write/SSL_read 지점을 후킹해, 인증서 위조 없이 평문을 관측합니다. (앞서 다룬 "eBPF/XDP" 기술의 응용)

오픈소스로 만드는 SSL 가시화 — 컴포넌트 지도 인터셉션iptables/TPROXY MITM 엔진mitmproxy / SSLsplit / goproxy 내부 CAOpenSSL / crypto/x509 평문 검사Suricata / Zeek / ClamAV(ICAP) CA가 MITM 엔진에 대리 인증서 공급 최신 대안: eBPF 호스트 가시성 (eCapture / Pixie) MITM·인증서 위조 없이 SSL_write/read 후킹으로 평문 관측
그림 8. 오픈소스 구성 지도 — MITM(mitmproxy/SSLsplit) + 내부 CA(OpenSSL) + 검사(Suricata/Zeek/ClamAV). eBPF는 MITM 없는 대안. [확대]

mitmproxy로 만드는 최소 프로토타입

# mitmproxy 설치 후 투명 모드로 실행 (자체 CA가 자동 생성됨: ~/.mitmproxy/mitmproxy-ca-cert.pem)
mitmdump --mode transparent --showhost

# 파이썬 애드온으로 복호화된 요청/응답을 검사 로직에 연결하는 예시
# save as inspect.py  →  mitmdump -s inspect.py
def request(flow):
    host = flow.request.pretty_host        # 복호화된 목적지
    # 정책: 금융/의료 도메인은 우회(복호화 로그 남기지 않음)
    if host.endswith("bank.com"):
        return
    body = flow.request.get_text()         # 평문 본문
    # → 여기서 DLP/시그니처 검사 로직 호출 (예: 민감정보 패턴, ClamAV 스캔)

def response(flow):
    ctype = flow.response.headers.get("content-type", "")
    if "application/octet-stream" in ctype:
        data = flow.response.content       # 평문 응답 바이트
        # → 악성코드 스캔(AV)로 전달
# Squid SSL Bump 예시 (선택적 복호화: peek → bump/splice)
# squid.conf 발췌
http_port 3128 ssl-bump \
  cert=/etc/squid/ssl/myCA.pem \
  generate-host-certificates=on dynamic_cert_mem_cache_size=8MB
acl step1 at_step SslBump1
acl bank ssl::server_name .bank.com
ssl_bump peek step1
ssl_bump splice bank        # 금융은 복호화하지 않고 통과(splice)
ssl_bump bump all           # 나머지는 복호화(bump)

13. 도전 과제 — Pinning · ECH · 성능 · 법적 문제

기술적·법적 난제
  • 인증서 고정(Certificate Pinning) — 은행 앱 등은 정해진 인증서만 신뢰해 MITM을 거부한다. 이런 트래픽은 반드시 우회(bypass)해야 한다.
  • ECH(Encrypted Client Hello)·Encrypted SNI — SNI마저 암호화되면 "무엇을 복호화할지" 판단조차 어려워진다. 가시화의 새로운 벽.
  • TLS 1.3 — 핸드셰이크가 더 많이 암호화되어 수동 방식이 불가, 인라인만 가능.
  • 성능 — 복호화·재암호화는 CPU 집약적. 하드웨어 암호가속·세션 캐시·Decrypt Broker로 대응.
  • 보안 리스크 — 내부 CA 키가 유출되면 조직 전체가 위험. HSM 보관·엄격한 접근통제 필수.
  • 프라이버시·법률 — 직원 트래픽 복호화는 사생활·법규(개인정보) 문제. 금융·의료·인증 카테고리는 복호화 제외가 원칙이며, 사전 고지·정책 수립이 필요하다.

14. 시장과 선도 제품

제품 / 기업특징
Gigamon (GigaSMART TLS/SSL Decryption)네트워크 가시성·패킷 브로커의 강자. Decrypt Broker + 서비스 체이닝의 대표
F5 (SSL Orchestrator)복호화·정책·서비스 체이닝을 통합. 대규모 트래픽 오케스트레이션
A10 Networks (Thunder SSLi)고성능 전용 복호화 어플라이언스
Broadcom/Symantec (구 Blue Coat SSL Visibility)오랜 전통의 SSL 가시화 어플라이언스
Palo Alto · Fortinet · Cisco차세대 방화벽(NGFW)에 복호화 기능 내장
Zscaler · Netskope클라우드(SASE) 기반 SSL 검사 — 장비 없이 클라우드에서 복호화·검사
Keysight(Ixia) · Radware가시성·보안 인프라와 결합한 복호화 솔루션

흐름은 전용 어플라이언스 → SASE/클라우드 기반 검사로 이동 중입니다. 재택·모바일이 늘며 "출구 장비"만으로는 부족해졌고, 클라우드에서 복호화·검사하는 방식이 커지고 있습니다.

15. 용어 설명

SSL 가시화 (SSL/TLS Visibility)
암호화된 TLS 트래픽을 복호화해 보안 장비가 검사하게 한 뒤 다시 암호화하는 기술·제품. SSL Inspection·TLS Decryption이라고도 한다.
MITM (Man-in-the-Middle, 중간자)
통신 양단 사이에 끼어들어 트래픽을 중계하는 것. 가시화에서는 "통제된 MITM"으로 합법적으로 복호화한다.
Forward / Reverse Proxy
Forward는 내부 사용자의 아웃바운드 트래픽을, Reverse는 우리 서버로 들어오는 인바운드 트래픽을 다루는 프록시.
대리(대체) 인증서 (Forged/Re-signed Certificate)
가시화 장비가 목적지 도메인용으로 즉석 생성해 내부 CA로 서명한 인증서. 클라이언트가 장비를 서버로 믿게 만든다.
내부 CA (Internal Certificate Authority)
대리 인증서를 서명하는 조직 자체 인증기관. 이 CA를 단말이 신뢰해야 경고 없이 동작한다. 키 유출 시 치명적.
SNI (Server Name Indication)
TLS ClientHello에 담긴 접속 대상 도메인 이름. 무엇을 복호화/우회할지 정책 판단의 기준.
PFS (Perfect Forward Secrecy) / ECDHE
세션마다 임시 키를 쓰는 방식. 서버 개인키가 유출돼도 과거 트래픽을 복호화할 수 없어, 수동 복호화를 불가능하게 만든다.
Passive / Inline 복호화
Passive는 트래픽 복제(TAP)에 개인키로 오프라인 복호화(PFS에서 불가), Inline은 경로에 끼어들어 실시간 복호화.
Decrypt Broker / Service Chaining
한 번만 복호화한 평문을 여러 보안 장비에 순차/병렬로 전달하고 마지막에 한 번 재암호화하는 구조.
ICAP (Internet Content Adaptation Protocol)
프록시가 콘텐츠를 외부 검사 서버(AV·DLP)에 넘겨 검사·수정하게 하는 프로토콜. 서비스 체이닝에 쓰인다.
Certificate Pinning (인증서 고정)
앱이 특정 인증서만 신뢰하도록 고정하는 기법. MITM을 거부하므로 가시화에서 우회 대상이 된다.
ECH (Encrypted Client Hello) / ESNI
SNI를 포함한 ClientHello 일부를 암호화하는 최신 기술. 목적지 파악을 어렵게 해 가시화의 새로운 도전이 된다.
eBPF 호스트 가시성 (eCapture 등)
MITM 없이 단말에서 애플리케이션의 암·복호화 함수를 후킹해 평문을 얻는 방식. 인증서 위조가 필요 없다.
HSM (Hardware Security Module)
암호 키를 안전하게 생성·보관·연산하는 전용 하드웨어. 내부 CA 키 보호의 표준.
fail-open / fail-close
인라인 장비 장애 시 트래픽을 그대로 통과(fail-open)시킬지 차단(fail-close)할지의 정책. 가용성 설계의 핵심.

본 문서는 학습·방어(defensive) 목적의 개념·설계 정리입니다. SSL 복호화는 강력한 만큼 프라이버시·법적 책임이 따릅니다. 실제 도입·구현 시에는 사내 정책·관련 법규를 반드시 확인하고, 금융·의료 등 민감 트래픽은 복호화 대상에서 제외하는 것을 원칙으로 하세요.

+ Recent posts