
STP 및 CDP 프로토콜을 악용하는 레이어 2 네트워크 공격 프레임워크로, Cisco 스위치에서 DoS, 루트 역할 하이재킹, 메모리 고갈 공격을 가능하게 합니다.
conf BPDU를 계속 전송하여 자신이 루트라고 주장합니다!!! 루트 경로 비용(root pathcost)을 0으로 설정하고, 무작위로 생성된 브리지 ID(따라서 동일한 루트 ID) 및 기타 필드의 기본값을 사용하여 conf BPDU를 지속적으로 전송함으로써, 우리 주변의 스위치를 방해하여 STP 엔진을 구문 분석하고 재계산하려고 할 때 DoS를 유발하려고 합니다.
소스 MAC: 무작위 생성.
대상 MAC: 01:80:c2:00:00:00
브리지 ID: 8000:소스_MAC
루트 ID: 8000:소스_MAC
Hello 시간: 2
전달 지연: 15
최대 수명: 20
루트 경로 비용: 0
<시스코 로그 출력>
01:20:26: STP: VLAN0001 heard root 32768-d1bf.6d60.097b on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-9ac6.0f72.7118 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-85a3.3662.43dc on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-3d84.bc1c.918e on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-b2e2.1a12.dbb4 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-4ba6.2d45.5844 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-deb0.4f14.7288 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-4879.8036.0e24 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-2776.e340.9222 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-299e.de76.c07d on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-d38b.bc5b.e90d on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-78ee.0205.afdb on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-b32b.e969.81b1 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-b16b.c428.88a3 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-dd01.1436.9044 on Fa0/8
</output>
이 공격은 tcn BPDU를 지속적으로 전송하여 루트 스위치가 변경을 승인하는 conf BPDU를 보내도록 합니다. 또한, 루트 스위치는 트리 멤버들에게 토폴로지 변경 알림을 보내고, 멤버들은 새 변경 사항을 학습하기 위해 STP 엔진을 재계산해야 합니다.
소스 MAC: 무작위 생성.
대상 MAC: 01:80:c2:00:00:00
<시스코 로그 출력>
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
</output>
이제 우리의 목표는 트리의 루트 역할을 얻는 것입니다. 어떻게 이 문제를 해결할 수 있을까요? 네트워크를 수신하여 루트 역할이 무엇인지 알아낸 다음, 낮은 우선순위를 가진 conf BPDU를 보내어 루트가 되는 것입니다.
소스 MAC: 스니핑된 BPDU와 동일.
대상 MAC: 스니핑된 BPDU와 동일.
브리지 ID: 스니핑된 것보다 약간 낮은 우선순위를 갖도록 수정된 값
루트 ID: 8000: 브리지 ID와 동일.
Hello 시간: 스니핑된 BPDU와 동일.
전달 지연: 스니핑된 BPDU와 동일.
최대 수명: 스니핑된 BPDU와 동일.
루트 경로 비용: 스니핑된 BPDU와 동일.
<시스코 로그 출력>
01:58:48: STP: VLAN0001 heard root 32769-000e.84d4.2280 on Fa0/8
01:58:48: supersedes 32769-000e.84d5.2280
01:58:48: STP: VLAN0001 new root is 32769, 000e.84d4.2280 on port Fa0/8, cost 19
</output>
우리는 STP를 가지고 놀며 우리의 루트 ID를 자랑하는 또 다른 이상한 스위치인 척 합니다 :)
config BPDU를 보내면서 우선순위를 자동 감소시키면, STP 트리에서 무한한 루트 선거를 유발할 수 있습니다. 이는 승자를 결정하기 위해 선거 투표를 재검표하는 것과 비슷합니다 (플로리다 기억나시나요?)
<시스코 로그 출력>
00:20:21: STP: VLAN0001 heard root 32769-000e.84d4.2280 on Fa0/9
00:20:21: supersedes 32769-000e.84d5.2280
00:20:21: STP: VLAN0001 new root is 32769, 000e.84d4.2280 on port Fa0/9, cost 19
00:20:23: STP: VLAN0001 heard root 32769-000e.84d3.2280 on Fa0/9
00:20:23: supersedes 32769-000e.84d4.2280
00:20:23: STP: VLAN0001 new root is 32769, 000e.84d3.2280 on port Fa0/9, cost 19
00:20:25: STP: VLAN0001 heard root 32769-000e.84d2.2280 on Fa0/9
00:20:25: supersedes 32769-000e.84d3.2280
00:20:25: STP: VLAN0001 new root is 32769, 000e.84d2.2280 on port Fa0/9, cost 19
00:20:27: STP: VLAN0001 heard root 32769-000e.84d1.2280 on Fa0/9
00:20:27: supersedes 32769-000e.84d2.2280
00:20:27: STP: VLAN0001 new root is 32769, 000e.84d1.2280 on port Fa0/9, cost 19
00:20:29: STP: VLAN0001 heard root 32769-000e.84d0.2280 on Fa0/9
00:20:29: supersedes 32769-000e.84d1.2280
00:20:29: STP: VLAN0001 new root is 32769, 000e.84d0.2280 on port Fa0/9, cost 19
00:20:31: STP: VLAN0001 heard root 32769-000e.84cf.2280 on Fa0/9
00:20:31: supersedes 32769-000e.84d0.2280
00:20:31: STP: VLAN0001 new root is 32769, 000e.84cf.2280 on port Fa0/9, cost 19
00:20:33: STP: VLAN0001 heard root 32769-000e.84ce.2280 on Fa0/9
00:20:33: supersedes 32769-000e.84cf.2280
00:20:33: STP: VLAN0001 new root is 32769, 000e.84ce.2280 on port Fa0/9, cost 19
00:20:35: STP: VLAN0001 heard root 32769-000e.84cd.2280 on Fa0/9
00:20:35: supersedes 32769-000e.84ce.2280
00:20:35: STP: VLAN0001 new root is 32769, 000e.84cd.2280 on port Fa0/9, cost 19
00:20:37: STP: VLAN0001 heard root 32769-000e.84cc.2280 on Fa0/9
00:20:37: supersedes 32769-000e.84cd.2280
00:20:37: STP: VLAN0001 new root is 32769, 000e.84cc.2280 on port Fa0/9, cost 19
00:20:39: STP: VLAN0001 heard root 32769-000e.84cb.2280 on Fa0/9
00:20:39: supersedes 32769-000e.84cc.2280
00:20:39: STP: VLAN0001 new root is 32769, 000e.84cb.2280 on port Fa0/9, cost 19
</output>
이번에는 루트 선거 프로세스를 소진시키려고 합니다. 우리는 STP 트리에서 루트가 되지만, max_age (보통 20초)에 도달할 때까지 config BPDU 전송을 중단하여 새 선거 프로세스를 강제합니다.