네트워크 보안의 원리 (3) - 네트워크 공격과 방어 - soo:bak
작성일 :
프로토콜의 취약점
네트워크 통신의 원리 시리즈에서 살펴본 프로토콜들은 대부분 1970~80년대에 설계되었습니다. 당시 인터넷은 소수의 신뢰할 수 있는 연구 기관들만 사용했기 때문에 보안은 설계 목표가 아니었습니다.
그 결과 많은 프로토콜이 다음과 같은 근본적인 취약점을 가지게 되었습니다:
- ARP: 인증 없음
- DNS: 인증 없음 (기본)
- BGP: 인증 없음 (기본)
- IP: 출발지 주소 검증 없음
이 취약점들이 어떻게 악용되고, 어떻게 방어하는지 살펴봅니다.
공격의 분류
네트워크 공격은 크게 세 가지로 분류됩니다.
도청(Eavesdropping)
통신 내용을 몰래 엿보는 공격으로, 기밀성을 침해합니다.
위조(Spoofing)
자신을 다른 존재로 속이는 공격으로, 인증을 우회합니다.
서비스 거부(Denial of Service)
정상적인 서비스를 방해하는 공격으로, 가용성을 침해합니다.
도청: 패킷 스니핑
네트워크 트래픽은 지나가는 장비에서 볼 수 있습니다. 이를 패킷 스니핑이라 하며, 환경에 따라 난이도가 달라집니다.
허브 환경
허브는 모든 포트에 모든 패킷을 복사하므로, 같은 허브에 연결된 누구나 모든 트래픽을 볼 수 있습니다.
스위치 환경
스위치는 목적지 MAC으로만 패킷을 전달하지만, ARP 스푸핑으로 우회할 수 있습니다.
Wi-Fi
무선 신호는 공기 중에 방송되므로 암호화되지 않은 Wi-Fi는 누구나 도청할 수 있습니다. WPA2/WPA3를 사용해도 같은 네트워크 사용자는 암호화 키를 알고 있으므로 도청이 가능합니다.
방어
엔드-투-엔드 암호화(TLS)가 근본적인 해결책입니다. 네트워크 경로의 어느 지점에서 도청당해도 내용은 보호됩니다.
ARP 스푸핑: 2계층 공격
네트워크 통신의 원리 (3)에서 설명한 ARP는 IP 주소를 MAC 주소로 변환하는 프로토콜입니다.
ARP의 문제:
ARP 응답에 대한 인증이 없어 누구나 “나는 192.168.1.1의 MAC이다”라고 주장할 수 있습니다.
ARP 스푸핑 공격:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
정상 상태:
Gateway (192.168.1.1) Victim (192.168.1.10)
MAC: AA:AA:AA MAC: BB:BB:BB
│ │
└──────────────────────┘
공격자가 위조 ARP 전송:
"192.168.1.1의 MAC은 CC:CC:CC야" (Victim에게)
"192.168.1.10의 MAC은 CC:CC:CC야" (Gateway에게)
결과:
Gateway (192.168.1.1) Attacker Victim (192.168.1.10)
│ CC:CC:CC │
└───────────────────┴──────────────┘
모든 트래픽이 Attacker를 거침
공격자는:
- 모든 통신을 볼 수 있음 (도청)
- 내용을 변조할 수 있음 (MITM)
- 특정 통신을 차단할 수 있음
방어:
- Static ARP: 중요한 주소에 대해 고정 ARP 항목 설정
- DAI(Dynamic ARP Inspection): 스위치에서 ARP 패킷 검증
- 802.1X: 네트워크 접근 인증
- TLS: 도청되어도 내용 보호
DNS 스푸핑: 이름을 속이다
DNS는 도메인 이름을 IP 주소로 변환하는 프로토콜이지만, 기본적으로 인증 메커니즘이 없습니다.
DNS 스푸핑 공격:
공격자가 위조된 DNS 응답을 정상 응답보다 먼저 전송하여 피해자를 속입니다.
1
2
3
4
5
6
사용자: "google.com의 IP는?"
정상 DNS 서버: "142.250.196.110" (지연됨)
공격자: "1.2.3.4 (악성 서버)" (먼저 도착)
→ 사용자는 악성 서버에 접속
DNS 캐시 포이즈닝:
DNS 서버의 캐시를 오염시키는 공격으로, 한 번 성공하면 해당 서버를 사용하는 모든 사용자가 영향을 받습니다.
2008년 Dan Kaminsky는 DNS의 근본적 취약점을 발표했는데, 트랜잭션 ID가 16비트로 예측 가능하다는 점이 핵심이었습니다.
방어:
- DNSSEC: DNS 응답에 암호화 서명
- DNS over HTTPS(DoH): DNS 쿼리를 HTTPS로 암호화
- DNS over TLS(DoT): DNS 쿼리를 TLS로 암호화
- 무작위 소스 포트: 예측 어렵게
IP 스푸핑: 출발지 위조
IP 패킷의 출발지 주소는 쉽게 위조할 수 있습니다. IP 프로토콜 자체는 출발지를 검증하지 않기 때문입니다.
문제점:
공격자 추적이 어렵고, 반사/증폭 공격에 악용됩니다.
BCP 38 (Ingress Filtering):
이를 방지하기 위해 ISP가 자신의 네트워크에서 나가는 패킷의 출발지를 검증하는 방식입니다. 고객 네트워크(예: 10.0.0.0/8)에서 온 패킷인데 출발지가 다른 주소면 차단합니다.
모든 ISP가 이를 구현하면 IP 스푸핑이 어려워지지만, 아직 전 세계적으로 완벽히 적용되지는 않았습니다.
서비스 거부 공격: 가용성 파괴
DoS(Denial of Service)는 정상 사용자가 서비스를 이용하지 못하게 하는 공격이고, DDoS(Distributed DoS)는 다수의 공격 출처를 사용하여 더욱 강력한 공격을 수행합니다.
공격 유형:
볼륨 기반 공격(Volumetric)
UDP Flood, ICMP Flood 등을 통해 대역폭을 소진시킵니다.
프로토콜 공격(Protocol)
SYN Flood 등을 통해 서버의 연결 테이블이나 메모리를 소진시킵니다.
애플리케이션 공격(Application Layer)
HTTP Flood, Slowloris 등을 통해 서버의 처리 능력을 소진시킵니다.
SYN Flood: TCP의 약점
TCP 3-way 핸드셰이크를 악용합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
정상 연결:
Client: SYN
Server: SYN-ACK (half-open 연결 저장)
Client: ACK
→ 연결 완료, half-open 제거
SYN Flood:
Attacker: SYN (위조된 출발지)
Server: SYN-ACK → 존재하지 않는 주소
(half-open 연결 저장, 타임아웃까지 대기)
Attacker: SYN, SYN, SYN, SYN... (대량)
Server: half-open 테이블 가득 참
→ 정상 연결 요청 거부
방어:
- SYN Cookies: half-open을 저장하지 않고 SYN-ACK에 정보 인코딩
- SYN Proxy: 프록시가 핸드셰이크를 대신 처리
- Rate Limiting: 동일 출발지의 SYN 비율 제한
증폭 공격: 적은 비용으로 큰 피해
공격자가 작은 요청을 보내면 훨씬 큰 응답이 피해자에게 돌아가는 방식의 공격입니다.
1
2
3
4
5
공격자 → 취약 서버 (작은 요청, 출발지 위조: 피해자)
↓
취약 서버 → 피해자 (큰 응답)
증폭률 = 응답 크기 / 요청 크기
증폭에 사용되는 프로토콜:
1
2
3
4
5
6
프로토콜 증폭률 설명
───────────────────────────────────
NTP 556배 monlist 명령
DNS 28~54배 ANY 쿼리
SSDP 30배 UPnP 검색
memcached 50000배 대용량 캐시 덤프
2018년 GitHub에 대한 1.35Tbps 공격은 memcached 증폭을 사용했습니다.
방어:
- 서비스 보안 설정: monlist 비활성화, 오픈 리졸버 차단
- BCP 38: 출발지 위조 방지
- Rate Limiting: 응답 비율 제한
봇넷: 분산 공격의 도구
봇넷은 악성코드에 감염된 다수의 기기들로 구성되며, 공격자가 원격으로 제어합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
공격자
│
┌─────┴─────┐
│ C&C 서버 │
└─────┬─────┘
│
┌───────┼───────┐
│ │ │
Bot Bot Bot
(감염된 (감염된 (감염된
PC) IoT) 서버)
│ │ │
└───────┼───────┘
│
▼
피해자
Mirai 봇넷(2016):
IoT 기기(IP 카메라, 라우터)를 기본 비밀번호로 로그인하여 감염시켰습니다. Dyn DNS에 대한 공격을 통해 Twitter, Netflix 등 대규모 서비스 장애를 유발했습니다.
방어:
- IoT 보안: 기본 비밀번호 변경, 펌웨어 업데이트
- 네트워크 세분화: IoT 기기를 별도 네트워크에 격리
- 트래픽 모니터링: 이상 트래픽 탐지
방화벽: 첫 번째 방어선
방화벽(Firewall)은 네트워크 트래픽을 필터링하여 허용된 트래픽만 통과시키는 보안 장비입니다.
패킷 필터링(Stateless)
각 패킷을 독립적으로 검사하여 출발지/목적지 IP, 포트, 프로토콜을 기준으로 허용하거나 차단합니다.
1
2
3
4
5
규칙 예시:
허용: TCP 목적지 포트 443 (HTTPS)
허용: TCP 목적지 포트 80 (HTTP)
차단: TCP 목적지 포트 22 (SSH) from 외부
기본: 차단
하지만 연결 상태를 모르므로 정교한 공격에 취약하다는 한계가 있습니다.
상태 기반 검사(Stateful)
이를 보완하기 위해 연결 상태를 추적하여 내부에서 시작된 연결의 응답만 허용합니다.
1
2
3
4
5
내부 → 외부: SYN → 상태 테이블에 기록
외부 → 내부: SYN-ACK → 상태 테이블 확인 후 허용
내부 → 외부: ACK → 연결 설정됨
외부 → 내부: 갑자기 SYN-ACK → 상태 테이블에 없음 → 차단
애플리케이션 레벨(ALG, WAF)
애플리케이션 계층까지 검사하여 SQL 인젝션, XSS 같은 웹 공격을 탐지할 수 있습니다. WAF(Web Application Firewall)는 이러한 웹 애플리케이션 보호에 특화된 방화벽입니다.
IDS/IPS: 탐지와 차단
IDS(Intrusion Detection System)는 침입을 탐지하고 알리는 시스템이며, IPS(Intrusion Prevention System)는 탐지 후 자동으로 차단까지 수행합니다.
탐지 방식:
시그니처 기반(Signature-based)
알려진 공격 패턴과 비교하여 탐지합니다. 알려진 공격에는 정확하지만, 새로운 공격(제로데이)은 탐지하지 못한다는 단점이 있습니다.
이상 탐지(Anomaly-based)
정상 트래픽의 기준선을 학습하고 기준선에서 벗어나면 경고합니다. 새로운 공격을 탐지할 수 있지만, 오탐(false positive)이 많을 수 있습니다.
배치 위치:
1
2
3
4
인터넷 → 방화벽 → IDS/IPS → 내부 네트워크
│
▼
관리 콘솔
IPS는 인라인(inline)으로 배치되어 트래픽을 직접 차단하고, IDS는 미러링된 트래픽을 분석하여 경고만 발생시킵니다.
DDoS 완화 전략
대규모 DDoS는 단일 장비로 막을 수 없습니다.
Anycast 기반 분산
같은 IP 주소를 여러 위치에서 광고하여 트래픽이 지리적으로 가장 가까운 서버로 분산되도록 합니다. 공격 트래픽도 분산되어 단일 지점에 집중되지 않습니다.
스크러빙 센터
모든 트래픽을 스크러빙 센터로 우회시켜 악성 트래픽을 걸러내고 정상 트래픽만 원본 서버로 전달합니다.
1
2
인터넷 ─── 스크러빙 센터 ─── 원본 서버
(필터링)
Rate Limiting
특정 임계값을 초과하는 요청을 제한합니다. 정상 사용자도 영향받을 수 있으므로 적절한 임계값 설정이 중요합니다.
CAPTCHA/Challenge
봇과 사람을 구분하는 방식으로, 공격 시에만 활성화하여 사용자 경험에 대한 영향을 최소화합니다.
네트워크 세분화
세분화(Segmentation)는 네트워크를 작은 구역으로 나누어 침해가 발생해도 다른 구역으로 확산되는 것을 방지합니다.
VLAN(Virtual LAN)
물리적으로 같은 스위치에서 논리적으로 네트워크를 분리하는 기술입니다. VLAN 간 통신은 라우터(또는 L3 스위치)를 거쳐야 하므로, 라우터에서 접근 제어를 적용할 수 있습니다.
1
2
3
4
5
6
VLAN 10 (서버) VLAN 20 (워크스테이션) VLAN 30 (IoT)
│ │ │
└────────────────────┴──────────────────────┘
│
L3 스위치/방화벽
(VLAN 간 트래픽 제어)
마이크로세분화
워크로드 단위로 세분화하여 같은 서브넷 내에서도 호스트 간 통신을 제어합니다. 주로 소프트웨어 정의 네트워킹(SDN)으로 구현합니다.
Zero Trust: 신뢰하지 않는다
전통적 보안 모델에서는 경계 내부를 신뢰하고 외부를 불신뢰하며, 방화벽이 이 경계를 보호했습니다.
그러나 이 모델에는 문제가 있습니다. 내부자 위협에 취약하고, 경계가 뚫리면 내부는 무방비 상태가 됩니다. 또한 클라우드와 원격 근무의 확산으로 경계 자체가 모호해졌습니다.
Zero Trust 원칙:
“절대 신뢰하지 말고, 항상 검증하라”
핵심 요소:
- 모든 접근 검증: 네트워크 위치와 상관없이
- 최소 권한: 필요한 것만 허용
- 침해 가정: 이미 침해당했다고 가정하고 설계
- 지속적 검증: 초기 인증 후에도 계속 검증
구현 예:
- 모든 서비스 앞에 인증 프록시
- 기기 상태 확인 (패치 수준, 백신 등)
- 세션 기반 접근 제어
- 암호화된 마이크로세분화
보안은 계층적이다
단일 보안 솔루션으로 모든 위협을 막을 수 없으므로, 심층 방어(Defense in Depth) 전략이 필요합니다.
1
2
3
4
5
6
7
8
계층 대책
───────────────────────────────────
물리적 시설 보안, CCTV
네트워크 방화벽, IDS/IPS, 세분화
호스트 백신, 호스트 방화벽, 패치
애플리케이션 WAF, 입력 검증, 인증
데이터 암호화, 접근 제어, 백업
사용자 보안 교육, 다단계 인증
각 계층이 실패해도 다른 계층이 보호하므로, 공격자는 여러 계층을 모두 뚫어야 합니다.
결국 네트워크 보안은 기술만의 문제가 아닙니다. 프로세스, 정책, 사람이 모두 중요한 요소입니다.
관련 글