1. 이론 학습
VLAN 호핑 공격
VLAN 호핑 공격은 라우터 없이도 한 VLAN의 트래픽이 다른 VLAN에서 보이게 만드는 공격이다.
기본 VLAN 호핑 공격에서 위협 행위자는 호스트를 스위치처럼 동작하도록 구성하여 대부분의 스위치 포트에 기본으로 활성화된 자동 트렁킹 포트 기능을 악용한다.
공격자는 호스트를 구성해 802.1Q 시그널링과 Cisco 고유의 DTP(Dynamic Trunking Protocol) 시그널링을 스푸핑하여 연결된 스위치와 트렁크를 형성한다. 성공하면 스위치는 호스트와 트렁크 링크를 설정하고, 공격자는 스위치의 모든 VLAN에 접근할 수 있게 된다. 이로써 임의의 VLAN에서 송수신이 가능해져 VLAN 간 이동(hopping)이 가능하다.
VLAN 더블 태깅 공격
특정 상황에서 공격자는 이미 802.1Q 태그가 있는 프레임 안에 또 다른 숨겨진 802.1Q 태그를 삽입할 수 있다.
이 두 번째 태그는 프레임을 원래 태그에서 지정하지 않은 VLAN으로 보내도록 한다.
공격자는 이중 태그된 802.1Q 프레임을 스위치로 보낸다. 외부 헤더에는 공격자의 VLAN(여기서는 네이티브 VLAN 10)이, 내부 태그에는 피해자 VLAN(여기서는 VLAN 20)이 지정된다. 첫 번째 스위치는 외부 VLAN 10 태그를 보고 이를 네이티브 VLAN이므로 제거한 뒤 VLAN 10 포트로 프레임을 전달한다. 이때 내부 VLAN 20 태그는 그대로 유지된다. 두 번째 스위치는 이 프레임이 네이티브 VLAN에서 온 것으로 인식해 태그 없이 수신하고, 내부 VLAN 20 태그를 읽어 VLAN 20으로 전달한다.
이 공격은 단방향이며, 공격자가 트렁크 포트의 네이티브 VLAN과 동일한 VLAN에 연결된 경우에만 동작한다. 더블 태깅은 원래 차단된 VLAN으로 데이터를 전송할 수 있게 하며, 반환 트래픽도 허용될 가능성이 있어 통신이 가능해진다.
VLAN 공격 방어
- 모든 액세스 포트에서 트렁킹 비활성화
- 트렁크 링크에서 자동 트렁킹 비활성화(수동으로만 허용)
- 네이티브 VLAN은 트렁크 링크에서만 사용
DHCP 공격
DHCP 공격은 DHCP 스타베이션(Starvation)과 DHCP 스푸핑(Spoofing)으로 나뉜다.
두 공격 모두 DHCP 스누핑(DHCP Snooping)으로 방어 가능하다.
DHCP 스타베이션 공격
- 목표: 네트워크 클라이언트에 DoS 상태를 유발
- Gobbler 같은 툴 사용, 모든 IP 주소를 요청하여 임대 풀 소진
- 가짜 MAC 주소로 DHCP 디스커버리 메시지를 대량 전송
DHCP 스푸핑 공격
- 공격자가 네트워크에 가짜 DHCP 서버를 연결해 클라이언트에 잘못된 IP 설정 제공
- 예시:
- 잘못된 기본 게이트웨이: 공격자 호스트를 경유하게 해 중간자 공격 수행
- 잘못된 DNS 서버: 악성 사이트로 유도
- 잘못된 IP 주소: 클라이언트 DoS 유발
- 과정:
- 공격자가 타겟과 동일 서브넷/VLAN에 가짜 DHCP 서버 연결
- 클라이언트가 DHCP Discovery 브로드캐스트 전송
- 정상/가짜 서버 모두 응답, 클라이언트는 먼저 도착한 오퍼를 선택
- 가짜 서버가 요청 승인(Ack) 응답, 정상 서버는 통신 중단
ARP 공격
ARP는 특정 IPv4 주소의 MAC 주소를 찾기 위해 요청을 브로드캐스트한다.
해당 IPv4 주소를 가진 장치는 ARP Reply를 전송한다.
문제는 공격자가 스푸핑된 MAC 주소로 그라튜이셔스 ARP(Gratuitous ARP)를 보내면, 스위치 MAC 테이블이 이를 반영해 잘못된 매핑을 저장한다는 점이다. 이로 인해 공격자는 원하는 IP-MAC 조합을 주장할 수 있다.
일반적인 공격은 기본 게이트웨이의 IPv4 주소에 공격자 MAC 주소를 매핑하는 것이다.
ARP 스푸핑 시나리오:
- 공격자가 R1(10.0.0.1)과 PC1(10.0.0.11) 모두에 대해 자신의 MAC 주소로 매핑하는 가짜 ARP Reply 전송
- R1과 PC1의 ARP 캐시가 공격자 MAC으로 덮어쓰기 됨
- 공격자가 모든 트래픽을 중간에서 가로채는 Man-in-the-Middle 공격 가능
주소 스푸핑 공격 IP 주소 또는 MAC 주소를 위조하는 공격.
- IP 스푸핑: 다른 장치의 유효 IP를 도용하거나 임의 IP 사용
- MAC 스푸핑: 호스트의 MAC 주소를 다른 장치의 주소로 변경
- 스위치는 소스 MAC의 진위를 검증할 메커니즘이 없으므로 취약
- 공격자는 지속적으로 프레임을 전송해 스위치가 잘못된 매핑을 유지하게 함
- 방어: IPSG(IP Source Guard)
2. 이론 실습
MAC 주소 테이블 공격 완화
MAC 주소 테이블 오버플로우 공격을 방지하는 가장 간단하고 효과적인 방법은 포트 보안(Port Security)을 활성화하는 것이다.
포트 보안은 포트에서 허용되는 유효한 MAC 주소의 수를 제한한다. 관리자는 포트에 대해 MAC 주소를 수동으로 구성하거나, 스위치가 제한된 수의 MAC 주소를 동적으로 학습하도록 허용할 수 있다. 포트 보안이 활성화된 포트가 프레임을 수신하면, 프레임의 출발지 MAC 주소를 수동 구성되었거나 동적으로 학습된 보안 MAC 주소 목록과 비교한다.
허용 MAC 주소 수를 1로 설정하면, 네트워크 무단 접근을 방지할 수 있다.
포트 보안 활성화(Enable Port Security)
switchport port-security 명령이 거부되었다. 이는 포트 보안이 수동으로 설정된 액세스 포트나 수동으로 설정된 트렁크 포트에서만 구성 가능하기 때문이다. 기본적으로 Layer 2 스위치 포트는 dynamic auto(자동 트렁킹) 모드로 설정되어 있다. 따라서 예시에서는 먼저 switchport mode access 명령으로 액세스 모드로 변경한 후 포트 보안을 활성화해야 한다.
위 사진에서 포트 보안이 활성화되어 있고, 포트 상태가 Secure-down은 연결된 장치가 없고 위반이 발생하지 않은 상태. 장치가 연결되면 상태는 Secure-up으로 변경되고, 스위치는 해당 장치의 MAC 주소를 자동으로 보안 MAC으로 추가한다.
위반 모드는 Shutdown이며, 허용 가능한 최대 MAC 주소 수는 1이다.
MAC 주소 제한 및 학습 방법
포트에서 허용되는 최대 MAC 주소 수를 설정하려면 다음 명령을 사용한다:
Switch(config-if)# switchport port-security maximum <값>
기본 포트 보안 값은 1이며, 구성 가능한 보안 MAC 주소 최대 수는 스위치와 IOS 버전에 따라 다르다.
스위치는 보안 포트에서 MAC 주소를 다음 세 가지 방식 중 하나로 학습할 수 있다:
1. 수동 구성(Manually Configured) :관리자가 포트의 각 보안 MAC 주소를 수동으로 다음 명령으로 설정한다:
Switch(config-if)# switchport port-security mac-address
2. 동적 학습(Dynamically Learned) :설정하지 않으면 기본 상태. 포트 보안 명령을 입력하면 현재 연결된 장치의 출발지 MAC 주소가 자동으로 보안 MAC으로 등록되지만, 스타트업 구성에는 저장되지 않는다. 스위치가 재부팅되면 포트는 해당 MAC 주소를 다시 학습해야 한다.
3. 동적 학습 - Sticky(Dynamically Learned – Sticky) :관리자가 스위치가 MAC 주소를 동적으로 학습하고 이를 실행 중인 구성에 "붙여넣도록" 설정할 수 있다:
Switch(config-if)# switchport port-security mac-address sticky 실행 중인 구성을 저장하면 동적으로 학습된 MAC 주소가 NVRAM에 반영된다.
예시 구성: 다음 예시는 G0/0 포트에 호스트가 연결된 상태에서의 포트 보안 설정이다. 관리자가 최대 2개의 MAC 주소를 허용하고, 하나는 수동으로 보안 MAC 주소를 지정하며, 나머지는 Sticky 방식으로 학습되도록 설정한다.
S1(config)# interface g0/0
S1(config-if)# switchport mode access
S1(config-if)# switchport port-security
S1(config-if)# switchport port-security maximum 2
S1(config-if)# switchport port-security mac-address aaaa.bbbb.1111
S1(config-if)# switchport port-security mac-address sticky
S1(config-if)# end
S1# show port-security interface g0/0
S1# show port-security
show port-security interface 명령 출력에서는 포트 보안이 활성화되어 있고, 포트 상태가 Secure-up이며, 총 2개의 MAC 주소가 허용됨을 보여준다. 여기에는 하나의 정적 MAC 주소와 하나의 Sticky 방식으로 학습된 MAC 주소가 포함된다.
show port-security address 명령 출력에서는 학습된 두 개의 MAC 주소가 표시된다.
포트 보안 에이징(Port Security Aging)
포트 보안 에이징 기능은 특정 포트의 정적(Static) 및 동적(Dynamic) 보안 MAC 주소에 대한 에이징 시간을 설정하는 데 사용된다. 포트당 두 가지 에이징 유형을 지원한다.
- Absolute: 지정한 에이징 시간이 지나면 해당 포트의 보안 MAC 주소가 삭제된다.
- Inactivity: 지정한 에이징 시간 동안 해당 MAC 주소의 트래픽이 없으면 삭제된다.
에이징 기능을 사용하면 기존 보안 MAC 주소를 수동으로 삭제하지 않고도 제거할 수 있다.
또한 에이징 시간을 늘려 이전 보안 MAC 주소를 유지하면서 새로운 MAC 주소를 추가할 수 있다.
정적으로 설정된 보안 MAC 주소의 에이징 여부는 포트별로 활성화하거나 비활성화할 수 있다.
명령어 형식: Switch(config-if)# switchport port-security aging { static | time | type { absolute | inactivity } }
static | 해당 포트에서 정적으로 구성된 보안 주소에 대한 에이징을 활성화 |
time time | 해당 포트의 에이징 시간 지정 (범위: 0~1440분, 0은 비활성화) |
type absolute | 절대 에이징 시간 설정. 지정된 시간이 지나면 해당 포트의 모든 보안 주소가 보안 주소 목록에서 제거됨 |
type inactivity | 비활성 에이징 설정. 지정된 시간 동안 해당 보안 MAC 주소에서 데이터 트래픽이 없으면 제거됨 |
S1(config)# interface g0/0
S1(config-if)# switchport port-security aging static
S1(config-if)# switchport port-security aging time 2
S1(config-if)# switchport port-security aging type absolute
S1(config-if)# end
S1# show port-security address
포트 보안 위반 모드
포트에 연결된 장치의 MAC 주소가 보안 주소 목록과 다르면 ‘포트 위반(port violation)’이 발생한다.
기본값으로 포트는 에러-비활성(err-disabled) 상태로 들어간다.
설정 명령 Switch(config-if)# switchport port-security violation { protect | restrict | shutdown }
Mode | Description |
shutdown (default) | 포트가 즉시 에러-비활성 상태로 전환되고, 포트 LED가 꺼지며, Syslog 메시지를 보낸다. 위반 카운터가 증가한다. 에러-비활성 상태의 보안 포트를 다시 사용하려면 shutdown 후 no shutdown 명령으로 재활성화해야 한다. |
restrict | 알 수 없는 출발지 주소의 패킷을 드롭한다. 최대 보안 MAC 수 이하로 줄이거나 최대값을 늘릴 때까지 드롭이 계속된다. 위반 카운터가 증가하고 Syslog 메시지를 보낸다. |
protect | 세 모드 중 가장 보안성이 낮다. 알 수 없는 출발지 MAC의 패킷을 드롭하지만 Syslog 메시지를 보내지 않으며 위반 카운터도 증가시키지 않는다. |
S1(config)# interface g0/0
S1(config-if)# switchport port-security violation restrict
S1(config-if)# end
S1# show port-security interface g0/0
에러-비활성 상태의 포트
포트 보안 위반 모드가 shutdown으로 설정된 상태에서 위반이 발생하면, 해당 포트는 물리적으로 종료되고 에러-비활성(err-disabled) 상태로 전환된다. 이 상태에서는 포트로 들어오거나 나가는 트래픽이 전혀 없다.
예시에서, 포트 보안 위반 모드를 기본값인 shutdown으로 변경한 후, 새로운 호스트를 g0/0 포트에 연결한다.
이때 콘솔에는 포트 보안 관련 메시지가 출력된다.
S1(config)# int g0/0
S1(config-if)# switchport port-security violation shutdown
S1(config-if)# end
참고: 이 과정에서 포트 프로토콜과 링크 상태가 down으로 변경되며, 포트 LED가 꺼진다.
show interface 명령어 출력에서는 포트 상태가 err-disabled로 표시된다.
show port-security interface 명령어에서는 포트 상태가 Secure-up에서 Secure-shutdown으로 바뀌고,
보안 위반 카운터(Security Violation counter)가 1 증가한다.
S1# show interface g0/0
S1# show port-security interface g0/0
관리자는 보안 위반의 원인을 확인해야 한다. 무단 장치가 보안 포트에 연결되어 있다면, 포트를 다시 활성화하기 전에 보안 위협을 제거해야 한다.
포트를 재활성화하려면 먼저 shutdown 명령을 실행한 후, no shutdown 명령으로 포트를 작동 상태로 되돌린다.
S1(config)# interface g0/0
S1(config-if)# shutdown
S1(config-if)# no shutdown
'네트워크 > 네트워크 보안' 카테고리의 다른 글
PortFast & BPDU Guard 실습 (4) | 2025.08.13 |
---|---|
DAI(Dynamic ARP Inspection) 실습 (6) | 2025.08.13 |
DHCP Snooping 실습 (3) | 2025.08.13 |