You are on page 1of 23

Machine Translated by Google

BỘ KHOA HỌC MÁY TÍNH

DỰ ÁN NGHIÊN CỨU:

HỆ THỐNG PHÁT HIỆN XÂM NHẬP

TRONG TỰ CHỮA CHỮA DỰA TRÊN SDN

MẠNG LƯỚI BQLDA

Học kỳ mùa xuân 2016

Được viết bởi:


˜
Carlos De Las Munecas *
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 1

Hệ thống phát hiện xâm nhập trong

hệ thống tự phục hồi dựa trên SDN


Mạng lưới Ban QLDA

Carlos De Las Munecas, ‘ Khoa CS, IIT


*phối hợp với Adrian Tirados, Phòng CS, IIT

Tóm tắt—Ngày nay, lưới điện là cơ sở hạ tầng quan trọng mà mọi một bộ tổng hợp, nhận dữ liệu từ nhiều PMU và kết hợp nó trước khi gửi
thứ khác đều dựa vào và hoạt động đúng đắn của chúng là ưu tiên nó lên cấp cao hơn trong hệ thống phân cấp, PDC cấp cao hơn hoặc trực
cao nhất. Các thiết bị thông minh mới đang được triển khai để có tiếp đến trung tâm điều khiển. Hệ thống kết quả có thể được coi như một
thể quản lý, điều khiển lưới điện hiệu quả hơn, tránh tình trạng
cây phân cấp, với trung tâm điều khiển ở trên cùng của cây và các PMU là
mất ổn định. Tuy nhiên, việc triển khai các thiết bị thông minh
các phần tử hoặc lá cuối cùng.
như Bộ đo lường Phasor (PMU) và Bộ tập trung dữ liệu Phasor (PDC),
mở ra cơ hội mới cho những kẻ tấn công mạng khai thác các lỗ hổng
Việc bổ sung các thiết bị thông minh vào lưới điện có những ưu điểm và
mạng. Nếu một PDC bị xâm phạm, tất cả dữ liệu từ PMU đến PDC đó
sẽ bị mất, làm giảm khả năng quan sát của mạng. nhược điểm riêng:

Cách tiếp cận của chúng tôi để giải quyết vấn đề này là phát • Thuận lợi:
triển Hệ thống phát hiện xâm nhập (IDS) trong Mạng do phần mềm
Lưới điện thông minh nhìn chung sẽ hiệu quả hơn nhiều
xác định (SDN). cho phép hệ thống IDS phát hiện các thiết bị bị
khoa
xâm nhập và sử dụng thông tin đó làm đầu vào cho bộ điều khiển
SDN tự phục hồi, chuyển hướng dữ liệu của PMU sang một PDC mới, học Làm cho lưới dễ điều khiển hơn cải

không bị xâm phạm, duy trì khả năng quan sát mạng tối đa có thể thiện tốc độ phản hồi trong trường hợp
sự thất bại.
tại mọi thời điểm.
Trong quá trình nghiên cứu này, chúng tôi đã triển khai thành
công tính năng Tự phục hồi trong một mạng mẫu với bộ điều khiển
• Nhược điểm: Mỗi
SDN dựa trên bộ điều khiển Ryu. Chúng tôi cũng đã đánh giá các lỗ
khi bạn thêm các thiết bị thông minh, được kết nối, điều này
hổng nội tại của mạng Hệ thống quản lý diện rộng (WAMS) và SCADA,
sẽ tạo ra các lỗ hổng mới.
đồng thời phát triển một số quy tắc cho hệ thống Phát hiện xâm
nhập nhằm bảo vệ cụ thể các lỗ hổng của các mạng này. Việc bổ sung thêm các thiết bị thông minh như PMU sẽ tạo cơ
hội cho những kẻ tấn công mạng can thiệp vào mạng. Một
Việc tích hợp IDS và bộ điều khiển SDN cũng thành công. số nghiên cứu
gần đây cho thấy PMU và PDC có thể trở thành mục tiêu của các
Để đạt được mục tiêu này, các bước đầu tiên sẽ là triển khai bộ cuộc tấn công từ chối dịch vụ và tấn công trung gian [2],
điều khiển SDN Tự phục hồi hiện có và đánh giá các lỗ hổng nội
[3].
tại của Hệ thống đo lường diện rộng (WAMS) và mạng SCADA. Sau đó,
chúng tôi sẽ tích hợp bộ điều khiển Ryu với Snort và tạo các quy
tắc Snort dành riêng cho các hệ thống và giao thức SCADA hoặc WAMS.

A. Tuyên bố vấn đề

Từ khóa—Hệ thống phát hiện xâm nhập (IDS), Mạng được xác định
Nếu một thiết bị bị xâm nhập hoặc bị ngắt kết nối, một phần của hệ
bằng phần mềm (SDN), An ninh mạng, Bộ tập trung dữ liệu Phasor
thống sẽ không được giám sát, ảnh hưởng đến việc ước tính và làm giảm
(PDC), Đơn vị đo pha (PMU), Hệ thống đo diện rộng (WAMS), SCADA.
khả năng phát hiện các điểm bất thường trong lưới điện. Điều này có thể
dẫn đến những lỗi không được phát hiện trong hệ thống.
Dự án này sẽ cố gắng giải quyết vấn đề này bằng cách sử dụng mạng tự
I. GIỚI THIỆU
phục hồi dựa trên SDN. Trong bối cảnh này, vấn đề có thể được chia thành

Ngày nay, lưới điện đang phát triển và một loại lưới điện thông minh hai vấn đề phụ:

mới đang được triển khai trong các hệ thống giám sát diện rộng. Để thu
thập dữ liệu từ lưới điện, các đơn vị đo pha (PMU) đang được lắp đặt. 1) Vấn đề đầu tiên là phát hiện các thiết bị bị xâm nhập. Để sử dụng
Các thiết bị này có thể thực hiện nhiều phép đo như ước tính trạng thái cơ chế tự phục hồi, trước tiên thiết bị bị xâm nhập phải được
của lưới điện, phát hiện và ngăn chặn sự cố mất điện đường dây, v.v.[1] phát hiện và cách ly để ngăn chặn sự lây nhiễm thêm nếu có thể.
Để đạt được điều này, chúng tôi muốn triển khai hệ thống phát
hiện xâm nhập (IDS). Điều này có thể được thực hiện bằng cách sử
Các phép đo do PMU thu thập sau đó được chuyển đến bộ tập trung dữ liệu dụng Snort kết hợp với bộ điều khiển SDN. Hơn
pha (PDC), hoạt động như
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 2

thông tin về điều này có thể được tìm thấy trong Phần III của

bài viết này.

2) Giai đoạn thứ hai liên quan đến việc tự phục hồi mạng. Trong trường
hợp thiết bị bị xâm nhập là PMU, điều này không quá nghiêm trọng
vì chỉ có một thiết bị giám sát sẽ không thu thập được dữ liệu.

Nhưng nếu một PDC bị xâm phạm, tất cả dữ liệu được gửi bởi nhiều
PMU sẽ bị mất. Để thu thập dữ liệu đó, lưu lượng có thể được
định tuyến lại đến một PDC khác. Cụ thể, mô hình lập trình tuyến

tính số nguyên (ILP) được tìm thấy trong nghiên cứu trước đây
được sử dụng để cùng giảm thiểu chi phí cấu hình lại mạng truyền
thông trong khi xem xét hạn chế về tài nguyên phần cứng của nó,
chẳng hạn như kích thước của bảng chuyển tiếp trong các thiết bị
chuyển mạch. [4]

B. Điểm tương đồng giữa mạng WAMS và SCADA

Để nghiên cứu sâu hơn, cần lưu ý rằng chúng tôi coi mạng SCADA và

WAMS là tương đương nhau, vì kiến trúc đằng sau chúng thực sự giống nhau.
Vì lý do đó, giải pháp đưa ra trong dự án này có thể được phát triển cho
SCADA thay vì WAMS tùy thuộc vào nguồn lực sẵn có và khả năng tương thích
của bộ điều khiển và cơ chế IDS.

Hình 1. Mạng WAMS


C. Kiến trúc mạng

Kiến trúc mạng của WAMS có thể được nhìn thấy trong hình ảnh bên dưới.
A. Triển khai Bộ điều khiển SDN tự phục hồi
Một số PMU được kết nối hợp lý với một PDC duy nhất, mặc dù chúng không
Giai đoạn đầu tiên này giải quyết nhu cầu triển khai ứng dụng tự phục
nhất thiết phải được kết nối trực tiếp nhưng có thể có một số bộ chuyển
hồi cho bộ điều khiển Ryu do [4] đề xuất. Tại thời điểm này, chúng tôi
mạch giữa chúng.
PDC cũng được kết nối với trung tâm điều khiển hoặc PDC cấp độ tiếp theo. đã có thể sao chép giải pháp thông qua bộ điều khiển được mã hóa cứng
với chức năng hạn chế. Chúng tôi dự định mở rộng bộ điều khiển này và
thêm tất cả các chức năng và bước khác nhau được đề xuất trong công việc
Kiến trúc SCADA có cùng loại kiến trúc là nhiều thiết bị thu thập thông
trước đó: trước tiên hãy khôi phục khả năng quan sát, sau đó tối đa hóa
tin và sau đó gửi nó đến thiết bị cấp cao hơn và chúng sử dụng hệ thống
khả năng quan sát này bằng cách khôi phục tất cả các PMU bị ngắt kết
liên lạc Master-slave. Trong kiến trúc SCADA, thông thường PLC đóng vai
nối còn lại.
trò tương tự như các PMU trong WAMS. Các PLC này hoạt động như nô lệ và
Để làm được như vậy, chúng tôi sẽ giải quyết vấn đề tối ưu hóa hiện tại
chúng được điều khiển bởi Master của tôi để gửi thông báo điều khiển.
để định tuyến lại một cách tối ưu. Cuối cùng, chúng tôi sẽ đánh giá kết
quả của mình trong Mininet, một nền tảng phần mềm dành cho SDN, để chứng
minh cơ chế tự phục hồi trong hệ thống mạng mô phỏng.
Phần còn lại của bài viết này được tổ chức như sau. Phần II thảo
luận về những đóng góp có liên quan của nghiên cứu trước đây.
Phần III thảo luận về phương pháp nghiên cứu của chúng tôi, bao gồm
các bước khác nhau trong kế hoạch của chúng tôi và xem xét những phần
B. Nghiên cứu giao thức SCADA/WAMS Hệ
thách thức nhất của dự án này. Phần IV trình bày kết quả của chúng tôi
thống SCADA và Hệ thống đo lường diện rộng (WAMS) có một số điểm
cho đến thời điểm hiện tại và phần V đưa ra kết luận của chúng tôi về
tương đồng cụ thể có thể giúp giải pháp của chúng tôi phù hợp với cả hai
chủ đề này.
kiến trúc:
II. PHƯƠNG PHÁP NGHIÊN CỨU

Phần này mô tả cách chúng tôi tập trung vào phương pháp nghiên cứu và 1) Hệ thống SCADA giám sát các thiết bị hiện trường thông qua Thiết
giới thiệu từng bước. Sau khi xem xét công việc trước đây trong lĩnh vực bị đầu cuối từ xa (RTU), trong khi Hệ thống WAMS thực hiện đọc

này, chúng tôi đã sẵn sàng lên kế hoạch cho hướng nghiên cứu của mình. thông qua Thiết bị đo pha (PMU).
Dự án này sẽ có một số giai đoạn tiến triển, mỗi giai đoạn được xây dựng
chồng lên nhau, ngoại trừ giai đoạn đầu tiên có thể được thực hiện song
song với các giai đoạn còn lại. Chúng tôi tin rằng cách tiếp cận này sẽ 2) Cả hai kiến trúc đều chia sẻ bộ tổng hợp dữ liệu (Các nút trong
có những thách thức nhất định và sẽ được giải quyết ở cuối phần này. SCADA và Bộ tập trung dữ liệu Phasor (PDC) trong
WAMS), được sử dụng để kết hợp các phép đo khác nhau và gửi
chúng đến cấp độ tiếp theo
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 3

tập hợp hoặc trung tâm điều khiển. F. Phát triển quy tắc Snort

Giai đoạn này bao gồm việc phát triển các quy tắc Snort cụ thể có
Tuy nhiên, Hệ thống SCADA và WAMS khác nhau về số lượng và đặc điểm tính đến chuyên môn thu được từ các bước trước: đánh giá lỗ hổng sẽ cho
dữ liệu mà chúng giám sát. Một mặt, SCADA thường có thông tin không đồng phép chúng tôi chỉ định các quy tắc nhất định cần kiểm tra và bộ tiền xử
bộ cứ sau vài giây. Mặt khác, WAMS yêu cầu đồng bộ hóa và đọc cứ sau vài lý sẽ tăng cường chức năng của IDS chạy phối hợp với SDN bộ điều khiển.
mili giây. Tuy nhiên, thực tế này không cho thấy bất kỳ rủi ro nào trong Công việc này bao gồm giai đoạn thiết kế và phát triển cuối cùng, trước
công việc của chúng tôi, vì bộ tiền xử lý sẽ có khả năng giám sát mạng khi tiến hành các thử nghiệm cuối cùng và đánh giá kết quả.
theo cách giống nhau trong cả hai kiến trúc.

Đây là lý do chính tại sao một trong những bước đầu tiên của chúng
G. Đánh giá và kết quả
tôi sẽ là nghiên cứu sâu về các giao thức SCADA và WAMS, cụ thể là Modbus
và DNP3 cho SCADA và C37.118-2005 cho WAMS. Sau khi chúng tôi hiểu chính Cuối cùng, sau khi hoàn thành tất cả các giai đoạn phát triển, chúng
xác các giao thức này, chúng tôi sẽ có thể hoàn thành giai đoạn tiếp theo. tôi sẽ đánh giá hiệu suất của giải pháp được đề xuất về tốc độ và độ
chính xác. Để thực hiện việc này, chúng tôi sẽ mô phỏng một kịch bản
trên Mininet với bộ điều khiển SDN và ứng dụng IDS cần thiết. Các kết
C. Đánh giá tính dễ bị tổn thương quả bổ sung về khả năng mở rộng hoặc tác động đến hiệu suất mạng có thể

Bước tự nhiên tiếp theo cần thực hiện là đánh giá lỗ hổng cho Hệ thống được cung cấp.

SCADA và WAMS. Như chúng tôi đã đề cập trước đây, đã có một số công
trình trong lĩnh vực này sẽ tạo tiền đề cho giai đoạn này. Chúng tôi dự
định cung cấp một nghiên cứu chi tiết về các công nghệ này, đồng thời
H. Những thách
tập trung vào những thách thức mà việc bổ sung Mạng được xác định bằng
thức Cần đề cập đến một số thách thức mà chúng tôi nghĩ rằng chúng
phần mềm có thể mang lại bức tranh toàn cảnh. Kết quả đánh giá lỗ hổng
tôi có thể gặp phải trong dự án nghiên cứu này:
này sẽ là điểm khởi đầu cho quá trình phát triển các quy tắc của Hệ thống
Phát hiện Xâm nhập của chúng tôi.
• Tích hợp Ryu-Snort: Mặc dù đã có một số công việc trong lĩnh vực
này, chúng tôi tin rằng bước này có thể là một trong những bước

D. Tìm một bộ tiền xử lý thích hợp Bộ tốn nhiều thời gian nhất, cả trong công việc hệ thống và công
việc thử nghiệm. Cố gắng tích hợp hai công nghệ này vào mạng Lưới
tiền xử lý cho phép mở rộng đáng kể chức năng của Snort. Chúng có
điện là một cách tiếp cận mới và sẽ gặp nhiều khó khăn.
thể được sử dụng để kiểm tra các gói để tìm hoạt động đáng ngờ hoặc sửa
đổi các gói để công cụ phát hiện có thể giải thích chúng một cách chính
xác. Bộ tiền xử lý là không thể thiếu trong việc phát hiện các cuộc tấn
• Đánh giá lỗ hổng bảo mật: Các giao thức SCADA và WAMS ít được nghiên
công không dựa trên chữ ký và chúng chịu trách nhiệm bình thường hóa lưu
cứu hơn so với các giao thức Internet cổ điển, điều đó có nghĩa
lượng truy cập để công cụ phát hiện có thể khớp chính xác các chữ ký.
là ít lỗ hổng kiến trúc được phát hiện hơn. Thực tế này sẽ
Một chức năng khác đáng được đề cập là khả năng đánh bại các cuộc tấn
công nhằm tránh công cụ phát hiện của Snort bằng cách thao túng các mẫu
đặt vào tình thế khó khăn hơn để xác định danh sách các lỗ hổng
lưu lượng truy cập. Do đó, bộ tiền xử lý sẽ là một phần quan trọng trong
đáng tin cậy, rộng rãi.
hệ thống của chúng tôi. Điều quan trọng là phải tiến hành nghiên cứu sâu
rộng trong lĩnh vực này và cố gắng xác định giải pháp phù hợp nhất cho
• Quy tắc IDS: Do thiếu chuyên môn và công việc trước đây của chúng
giải pháp của chúng tôi. Hiện tại, hai nhà đóng góp chính cho lĩnh vực
tôi trong lĩnh vực này, đây có thể là một thách thức tiềm tàng
này là Digital Bond (với bộ tiền xử lý DNP3 cho Snort) và Cisco (với cả
khác trong nghiên cứu của chúng tôi. Để mở đường, chúng ta sẽ bắt
giải pháp Modbus và DNP3).
đầu đào tạo với các quy tắc giao thức cổ điển để có thể hiểu rõ
hơn cách hoạt động của hệ thống IDS.

E.Ryu - Tích hợp Snort

Một trong những thành phần quan trọng nhất trong phương pháp tiếp cận
III. CÔNG TRÌNH LIÊN QUAN
mới của chúng tôi là sự kết hợp giữa bộ điều khiển SDN với IDS. Do các
công việc trước đây trong lĩnh vực này, chúng tôi đã chọn Ryu làm bộ Đã có một số nghiên cứu trước đây về IDS trong loại mạng này, đặc

điều khiển SDN và Snort làm Hệ thống phát hiện xâm nhập. biệt là trong mạng SCADA. Trong bài báo “An ninh mạng công nghiệp cho hệ

Ryu là một khung SDN dựa trên thành phần, nhẹ, cung cấp API được xác thống điện và mạng SCADA”[5], các tác giả trình bày một phân tích cấp

định rõ ràng cho phép các nhà phát triển tạo các ứng dụng điều khiển và cao thú vị về các lỗ hổng và mối đe dọa có thể ảnh hưởng đến môi trường

quản lý mạng mới. Snort là một IDS mã nguồn mở có khả năng phân tích lưu nhà máy điện, bao gồm thông tin về các thiết bị thường được sử dụng và

lượng truy cập theo thời gian thực và ghi nhật ký gói. thảo luận về các lỗ hổng nội tại của nhà máy điện.

Sau khi giai đoạn tích hợp hoàn tất, nó sẽ được thử nghiệm bằng ứng
dụng bộ điều khiển đơn giản trong cấu trúc liên kết một chuyển mạch Có nhiều nghiên cứu thú vị hơn về bảo mật trong mạng SCADA trong bài báo
trước khi bắt đầu giai đoạn phát triển tiếp theo. “Chiến lược bảo mật cho
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 4

Scada Networks”, trong đó hai chiến lược khác nhau được mô tả để bảo • Tấn công DOS: Kẻ tấn công cũng có thể giả mạo các gói Modbus/
vệ mạng SCADA và nêu ra một số lỗ hổng cần được cải thiện để bảo mật DNP3 vô nghĩa, mạo danh Master và tiêu thụ tất cả tài nguyên.
loại kiến trúc này. Vấn đề trong những môi trường này thường là nhiều
giao thức truyền thông được sử dụng trong môi trường công nghiệp (ví
dụ: Modbus, DNP3, v.v.) không được thiết kế có lưu ý đến vấn đề bảo • Tấn công MITM: Việc không có cơ chế toàn vẹn khiến kẻ tấn công
mật. dễ dàng thao túng tin nhắn

Cũng có một số tài liệu nghiên cứu thú vị về các giao thức này, trong
đó có một tài liệu nhằm mục đích sửa các lỗ hổng trong DNP3. Trong • Tấn công lặp lại: Không có cơ chế nào để đẩy lùi loại tấn công
bài báo “Khung bảo mật Giao thức Mạng Phân tán (DNPSec)” các tác giả này, do đó các hệ thống này dễ bị tấn công bởi các thông báo
trình bày một phần mở rộng cho giao thức DNP3 để giải quyết một số điều khiển phát lại độc hại.
lỗ hổng được tìm thấy trong giao thức này, bổ sung tính toàn vẹn, xác
thực, chống chối bỏ, v.v.[7] Tất cả các bài viết đã thảo luận trước đây đều tập trung vào việc
phát hiện xâm nhập, chứ không phải phần tự phục hồi trong dự án của
chúng tôi. Có thể đạt được khả năng tự phục hồi trong mạng PMU bằng
Việc sử dụng các biện pháp đối phó bảo mật CNTT cổ điển để bảo vệ cách khai thác các tính năng của mạng được xác định bằng phần mềm
mạng quy trình và mạng hiện trường của hệ thống SCADA đã được chứng (SDN) để đạt được khả năng phục hồi trước các cuộc tấn công mạng tấn
minh là không đầy đủ [8], [9]. công [4] Sau khi phát hiện thiết bị bị xâm nhập, các thiết bị chuyển
Tường lửa truyền thống thường không thể phát hiện các kiểu tấn công mạch trong mạng sẽ được cấu hình lại để cách ly thiết bị đó và duy
được thiết kế đặc biệt để khai thác lỗ hổng SCADA, vì hầu hết các trì kết nối của các PMU với một PDC, đảm bảo khả năng quan sát của hệ thống.
giao thức này được mã hóa ở cấp ứng dụng và chạy trên ngăn xếp giao Điều này có thể được thực hiện bằng mô hình lập trình tuyến tính số
tiếp TCP/IP.
nguyên (ILP) để giảm thiểu chi phí tự phục hồi, với các hạn chế về
Mặc dù đúng là Cisco đã bắt đầu phát triển một nguyên mẫu mô-đun khả năng quan sát của hệ thống điện, tài nguyên phần cứng và cấu trúc
Netfilter với khả năng thực hiện phân tích lọc trên các gói Modbus liên kết mạng [4].
đơn lẻ [10], loại cơ chế này chỉ có thể phát hiện các gói độc hại
trong mạng chứ không thể xác định các cuộc tấn công phức tạp. trong
IV. ĐÁNH GIÁ TÌNH TRẠNG TỔN THƯƠNG
đó kẻ tấn công đưa nhiều lệnh hợp pháp vào để khiến hệ thống có hành
vi không ổn định. Phần này bao gồm đánh giá lỗ hổng kỹ lưỡng trên mạng WASM. Đây là
một phần quan trọng trong cuộc điều tra của chúng tôi, vì nó sẽ cung

Hầu hết các hệ thống SCADA ban đầu được thiết kế cho truyền thông cấp cơ sở để thiết kế Quy tắc Snort. Phần này có cấu trúc như sau:

nối tiếp, khi bảo mật không phải là yếu tố liên quan đối với các hệ đầu tiên, giới thiệu ngắn gọn về giao thức PMU IEEE C37.118 cho phép

thống điều khiển này. Các giao thức này (ví dụ Modbus, DNP3), sau đó người đọc hiểu kiến trúc và đặc điểm của giao thức này. Sau đó, một

đã được chuyển sang cấp ứng dụng để chạy trên ngăn xếp giao thức TCP/ tập hợp các lỗ hổng trên giao thức này sẽ được đưa ra, cùng với các

IP cổ điển, gây ra sự phức tạp hơn cho việc quản lý việc phân phối ví dụ và kết quả có thể xảy ra từ việc khai thác chúng.

các gói điều khiển đáng tin cậy với các ràng buộc thời gian thực mạnh
mẽ và đã giới thiệu các giao thức mới các lỗ hổng chống lại các cuộc
tấn công mạng. Một số lỗ hổng này là:

A. Thông tin cơ bản về IEEE C37.118 Mặc

dù một số tiêu chuẩn và giao thức hỗ trợ truyền thông cơ sở hạ


• Không đảm bảo tính toàn vẹn: Các giao thức này không thực hiện
tầng WAMS, chúng tôi sẽ tập trung vào phiên bản mới nhất của giao
bất kỳ loại kiểm tra tính toàn vẹn nào đối với các gói điều
thức PMU/PDC, IEEE C37.118 [13]. Lý do chính là giao thức của chúng
khiển được gửi giữa chủ và phụ, cho phép dễ dàng thay đổi các
tôi tập trung vào việc tự phục hồi các PMU bị xâm phạm, do đó, chúng
gói.
tôi phải phân tích giao thức liên quan trực tiếp đến loại thiết bị
này.
• Không xác thực: Bất kỳ ai tự xưng là 'Master' đều có thể gửi
IEEE C37.118 đã thay thế giao thức đồng bộ pha IEEE 1344 trước đó
lệnh đến các nô lệ, vì không có cơ chế xác thực.
cho các PMU vào năm 1998. Mục tiêu chính của IEEE C37.118 là cải tiến
giao thức trước đó cũng như xác định rõ ràng định dạng dữ liệu truyền
từ PMU tới PDC. Nói tóm lại, chúng ta có thể nói rằng IEEE C37.118
• Không có cơ chế chống phát lại
là một giao thức xác định các quy ước dữ liệu đồng bộ pha, độ chính
xác của phép đo và các định dạng truyền thông.
Điều này giúp kẻ tấn công dễ dàng thực hiện một số loại tấn công như
[12]: Như vậy, IEEE C37.118 giới thiệu 4 frame khác nhau:

• Thực thi lệnh trái phép: Bất kỳ ai có quyền truy cập vào mạng • Lệnh: Nội dung của khung này nếu thông tin nhị phân chứa các
đều có thể gửi tin nhắn điều khiển để vận hành các thiết bị hành động cụ thể trong mạng WAMS. Nó được PDC hoặc PMU nhận
phụ để thực hiện một hành động nhất định và nó luôn được gửi đi
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 5

theo thứ bậc từ PCD đến PDC hoặc PMU cấp thấp hơn. tem thời gian GPS giả mạo của các phép đo.

• Người đàn ông ở giữa tấn công. Cuộc tấn công này là một trong

• Cấu hình: Khung nhị phân này chứa thông tin và các tham số những cuộc tấn công có quy mô lớn nhất và mạng PMU không

xử lý của PMU (ví dụ: pha, tần số, số lượng giá trị tương phải là ngoại lệ. Trong kiến trúc WAMS, kẻ tấn công được
tự, hệ số chuyển đổi). bố trí giữa PDC và PMU, khiến PDC nghĩ rằng nó đang nói
chuyện với PMU và ngược lại.
Cuộc tấn công này có thể dẫn đến các chứng chỉ bị xâm phạm.

• Dữ liệu: Chỉ chứa dữ liệu nhị phân, nó cung cấp thông tin Một biện pháp đối phó rõ ràng là cung cấp xác thực từ máy

liên quan đến dữ liệu pha, tần số, ước tính, v.v. khách đến máy chủ. Các công trình khác [20] gợi ý rằng với
một vài PMU bổ sung, khả năng phát hiện và nhận dạng dữ
liệu xấu của một hệ thống nhất định có thể được cải thiện

• Tiêu đề: Tiêu đề duy nhất được viết trên ASCII, do đó con đáng kể.
người có thể đọc được. Nó chứa thông tin về PMU, nguồn dữ

liệu, thuật toán và thông tin liên quan khác có thể hữu • Từ chối dịch vụ. Các cuộc tấn công từ chối dịch vụ (DoS) tập
ích cho quản trị viên. trung vào việc làm cạn kiệt tài nguyên của nạn nhân (ví
dụ: CPU, băng thông, bộ nhớ) để ngăn tài nguyên hoạt động
bình thường. Điều này rất quan trọng trong mạng WAMS vì có
sự mất mát lớn về khả năng hiển thị và khả năng kiểm soát.
Có nhiều kỹ thuật [21] để từ chối dịch vụ, ở đây chúng tôi

B. Lỗ hổng của IEEE C37.118 sẽ đề cập đến một số kỹ thuật trong số đó:

ICMP Smurf: Kẻ tấn công giả mạo địa chỉ IP của nạn
IEEE C37.118 không tự hỗ trợ xác thực, bảo mật hoặc toàn vẹn. nhân trên trường người gửi và gửi yêu cầu ICMP đến
Nếu nó không được kết hợp với các biện pháp bảo mật khác, nó có
nhiều máy chủ sẽ trả lời nạn nhân, làm quá tải tài
thể dẫn đến các hành vi khai thác tiềm ẩn có thể làm tổn hại đến
nguyên của nạn nhân. Làm mờ: Cuộc
các mạng cơ sở hạ tầng quan trọng. Một số lỗ hổng mà chúng tôi đã
tấn công này dựa trên việc tạo ra các gói mạng ngẫu nhiên
xác định được là:
có giá trị không chính xác trong các trường của nó,
điều này có thể làm hỏng các ứng dụng, dịch vụ và
• Phân tích gói tin. Các gói TCP/IP được gửi từ PMU rõ ràng khởi động lại mềm do đột biến giao thức. DDoS: Kẻ
rất dễ bị nghe lén và phân tích sau này. Phần mềm đánh hơi tấn công kiểm soát một lượng lớn máy (bot), có thể gửi
đơn giản có thể cho phép kẻ tấn công phân tích lưu lượng các gói ICMP đến nạn nhân với tần suất đủ để hạ gục
truy cập trên mạng nếu không sử dụng mã hóa. Ví dụ: [15] nó.
sử dụng Wireshark [16] để phân tích các gói trong mạng
đồng bộ pha và nhận thấy rằng chúng được gửi ở dạng văn Các biện pháp đối phó khả thi có thể bao gồm việc lọc các
bản thuần túy. bộ định tuyến, vô hiệu hóa việc phát sóng IP và thực hiện
Một biện pháp đối phó khả thi là mã hóa lưu lượng từ đầu phát hiện xâm nhập, sẽ được đề cập trong phần tiếp theo
đến cuối giữa PMU và PDC, bằng các kỹ thuật như tạo đường của tài liệu.
hầm VPN qua SSL/TLS [15]. Tuy nhiên, chúng ta không thể
quên rằng giải pháp này cũng có những lỗ hổng nổi tiếng. • Tấn công vật lý. Loại lỗ hổng cuối cùng này nằm ở khía cạnh
Những lỗ hổng này sẽ không
vật lý thay vì thế giới bảo mật thông tin, nhưng điều quan
được đề cập trong bài viết này do tính mở rộng hạn chế của trọng cần lưu ý là những cuộc tấn công này có thể gây ra
nó, nhưng có một lượng lớn tài liệu về chủ đề này. hậu quả thảm khốc.
Một biện pháp đối phó khả thi khác được phân tích trên [22]. Việc truy cập trái phép vào cơ sở hạ tầng quan trọng có

thể dẫn đến việc thao túng PMU hoặc đưa các thiết bị vào
các mạng an toàn.
• Tiêm gói tin. Trong cuộc tấn công có thể xảy ra này, kẻ tấn
công sẽ gửi các gói từ một thiết bị bị xâm nhập trong mạng
V. BỘ ĐIỀU KHIỂN MININET VÀ SDN
tới các PMU hoặc PDC khác. Các gói này có thể chứa các
hướng dẫn có thể gây nguy hiểm cho khả năng hiển thị của Để phát triển và thử nghiệm bộ điều khiển của Mạng do Phần mềm
hệ thống hoặc khiến các PMU ngừng thực hiện các phép đo. xác định, có hai khía cạnh cần lựa chọn: • Môi trường thử nghiệm:
Hơn nữa, kẻ tấn công có thể có khả năng tiêm mã hoặc mã Có một số công cụ mô phỏng mạng, mặc dù Mininet có vẻ là lựa
shell để gửi các hướng dẫn độc hại đến hệ thống quản lý cơ chọn đơn giản và tốt nhất cho mạng SDN.
sở dữ liệu hiện có [17]. Cuối cùng, cũng có thể chèn dữ
liệu sai vào mạng nhằm giả mạo PMU và chiếm đoạt các kết
quả đo. Các công việc trước đây trong cuộc tấn công này • Bộ điều khiển: Có một số bộ điều khiển SDN nguồn mở có thể
bao gồm [18], đưa dữ liệu sai vào hệ thống và [19], trong được sử dụng cho nhiệm vụ này, như NOX, POX, Floodlight,
đó các nhà nghiên cứu có thể Ryu, v.v.
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 6

A. mininet Trong nghiên cứu này, hiệu suất của bộ điều khiển không
ưu tiên cao nhất, vì mục tiêu là kiểm tra khả năng tự phục hồi
Mininet đã được chọn làm môi trường thích hợp để
các thuật toán trong mạng SDN và để tích hợp thuật toán này với
kiểm tra khả năng tự phục hồi trong mạng được xác định bằng phần mềm, bởi vì
Hệ thống phát hiện xâm nhập. Đây là lý do Floodlight
nó cho phép bạn dễ dàng tương tác với mạng của mình bằng cách sử dụng
không phải là một lựa chọn tốt vì nó được lập trình bằng Java và có một
ứng dụng khách Mininet, tùy chỉnh nó hoặc thậm chí triển khai nó trên
đường cong học tập dốc.
phần cứng thực sự. Mininet rất hữu ích cho sự phát triển,
Hỗ trợ cho các phiên bản mới hơn là một tính năng đáng mong đợi trong tương lai
học tập và nghiên cứu. Đó là một cách đáng tin cậy để phát triển và
thử nghiệm và phát triển. Vì những lý do đã nêu trước đây,
thử nghiệm với các mạng OpenFlow và được xác định bằng phần mềm
chúng tôi nhận thấy Ryu là người phù hợp nhất cho dự án của chúng tôi vì nó cung cấp
và được phát hành theo giấy phép Nguồn mở BSD cho phép.
một API tốt và tài liệu tốt, được viết bằng Python,
giúp dễ dàng phát triển và hỗ trợ nhiều
B. Bộ điều khiển SDN phiên bản OpenFlow

Có nhiều lựa chọn trong số các dự án SDN nguồn mở


VI. TÍCH HỢP SNORT
troller. Ở đây chúng tôi đưa ra một danh sách ngắn các đặc điểm của họ.

• NOX: Đây là OpenFlow rất phổ biến đầu tiên Phần này giải thích việc tích hợp SDN - Snort trong
giải pháp. Nó được chia thành bốn phần nhỏ: đầu tiên, chúng tôi giới thiệu
bộ điều khiển. Nó chủ yếu không được thực hiện nhiều
vì NOX được lập trình chủ yếu bằng C++ và một nền tảng ngắn gọn về Snort và các quy tắc của nó; sau đó, trận chung kết

thiếu tài liệu tốt. Nó hỗ trợ OpenFlow 1.0 kiến trúc đề xuất được trình bày; tiếp theo, một bộ quy tắc là

chỉ một.
được đưa ra như một ví dụ về sự tích hợp này; và cuối cùng, chúng tôi
thảo luận về những lợi ích và hạn chế của giải pháp này.

• POX: Nó là phiên bản kế thừa của NOX và có giao diện dễ dàng hơn
môi trường phát triển để làm việc và A. ID khịt mũi
API và tài liệu được viết hợp lý. Nó
SNORT là một xâm nhập mạng mã nguồn mở phổ biến
được viết bằng Python, thường rút ngắn
Hệ thống phát hiện (NIDS) do Martin Roesch tạo ra vào năm 1998.
chu kỳ thử nghiệm và phát triển. Nó hỗ trợ
Nó có khả năng thực hiện phân tích lưu lượng truy cập thời gian thực và
Chỉ OpenFlow 1.0.
ghi nhật ký gói trên mạng IP. Có ba cái khác nhau
chế độ hoạt động có sẵn:
• Ryu: Tương tự như POX nhưng được phát triển
một cách độc lập. Ryu cung cấp linh kiện phần mềm 1) Sniffer: đọc các gói mạng và hiển thị chúng trên
phần cuối.
với API được xác định rõ ràng giúp phát triển đơn giản
ứng dụng mạng mới. Nó cũng được viết bằng Python,
và hỗ trợ các phiên bản Openflow 1.0, 1.1, 1.2, 1.3, 2) Packet logger: ghi nhật ký các gói vào đĩa.

1.4, 1.5 và phần mở rộng Nicira.


3) Phát hiện xâm nhập mạng: phân tích lưu lượng truy cập

• Đèn pha: Cái này là Fork từ cái trước một bộ quy tắc do người dùng xác định.

bộ điều khiển 'Đèn hiệu'. Nó được viết bằng Java, có


tài liệu tốt và hiệu suất tốt hơn Chế độ Phát hiện xâm nhập mạng là chế độ phù hợp nhất cho giải

bộ điều khiển khác đã đề cập, nhưng không dễ để pháp của chúng tôi, vì chúng tôi sẽ chạy Snort dưới dạng NIDS
phát triển và cũng thiếu sự hỗ trợ cho OpenFlow sau này giám sát một số giao diện mạng. Điều này sẽ cho phép chúng tôi
phiên bản (chỉ OpenFlow 1.0) phân tích lưu lượng từ PMU đến PDC (và từ PDC đến các
PDC cấp cao nhất) và kiểm tra nó dựa trên bộ quy tắc cụ thể
được thiết kế cho mạng PMU.
Trong bảng sau, bạn có thể thấy tóm tắt về
đặc trưng. Trong Snort, các quy tắc được định nghĩa là các chuỗi văn bản
thuần túy bao gồm các phần khác nhau (ví dụ: hành động, giao thức, nguồn và
địa chỉ IP đích, cổng nguồn và cổng đích, và
BẢNG I. SO SÁNH CÁC BỘ ĐIỀU KHIỂN SDN
tùy chọn thông báo và quy tắc cho quản trị viên). Sự linh hoạt này

NOX THỦY Ryu Đèn pha


là một trong những lý do chính khiến chúng tôi chọn Snort: chúng tôi có thể

dễ dàng phát triển các quy tắc cho bất kỳ giao thức nào nếu chúng ta hiểu nó
Ngôn ngữ C++ Python Python JAVA
kiến trúc và các lỗ hổng một cách chính xác.

phân phối KHÔNG KHÔNG Đúng Đúng

B. Kiến trúc
Dòng chảy mở 1,0-1,5 +
1.0 1.0 1.0
phiên bản phiên bản Nicira
Kiến trúc của sự tích hợp này bao gồm một trong những
Học hỏi những quyết định quan trọng nhất của giải pháp này. Chúng ta phải
Vừa phải Dễ Vừa phải Dốc
đường cong
phân tích tất cả các lựa chọn thay thế có thể, cả hai đều có lợi thế
Hiệu suất Tốt Trung bình Trung bình Tốt và nhược điểm để chọn ra loại phù hợp nhất. Chúng tôi
phải phân tích kiến trúc từ hai cấp độ quan điểm:
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 7

cái đầu tiên, trong mạng PMU chung, trong khi cái thứ hai sẽ giải • Triển khai Ryu và Snort trên các máy khác nhau. Mặt khác, tùy
quyết kiến trúc cấp thiết bị. chọn này có hiệu suất tốt hơn do sức mạnh tính toán lớn mà
Khi nói đến thiết kế kiến trúc mạng, có hai lựa chọn cần tính Snorts yêu cầu để phân tích các gói. Ryu sẽ nhận được các
đến: gói cảnh báo Snort qua Network Socket trong trường hợp này.

• Kiến trúc tập trung. Kiến trúc này sẽ thực hiện một phiên bản
Chúng tôi đã quyết định rằng giải pháp phù hợp nhất là chạy Ryu
Snort duy nhất giám sát tất cả các giao diện mạng cùng một
lúc tại một trong các thiết bị chuyển mạch trung tâm. và Snort trên các máy khác nhau. Chúng ta có thể thấy kiến trúc

Để đạt được điều này, chúng ta cần thực hiện phản chiếu cổng được đề xuất trong Hình [2].
từ tất cả các thiết bị chuyển mạch trong mạng sang giao diện

sẽ được Snort IDS đánh hơi.


Thông tin được Snort thu thập sẽ được gửi đến bộ điều khiển
thông qua một trong hai tùy chọn sẽ được phân tích sau.

Ưu điểm chính của giải pháp này là việc bảo trì và thiết lập
sẽ dễ dàng hơn vì chúng ta chỉ cần chăm sóc một phiên bản
Snort. Tuy nhiên, kiến trúc tập trung sẽ có khả năng mở rộng
kém hơn và có thể xảy ra tắc nghẽn nếu lưu lượng tăng theo
quy mô, vì lượng lưu lượng có thể vượt quá dung lượng mạng
trong giao diện được giám sát.

• Kiến trúc phân tán. Mặt khác, kiến trúc phân tán sẽ thực hiện
nhiều phiên bản Snort giám sát từng 'đơn vị mạng' được tạo
bởi PDC, các PMU phụ thuộc trực tiếp vào nó và bộ chuyển
mạch kết nối các thiết bị được đề cập trước đó.

Trong trường hợp này, Snort sẽ giám sát một giao diện của
switch sẽ có lưu lượng còn lại được phản chiếu tới nó, đảm
bảo rằng chúng tôi đánh hơi được tất cả các gói trong mạng
(chúng tôi chỉ có thể giám sát PDC, nhưng chúng tôi sẽ mất
Hình 2. Kiến trúc đề xuất cho việc tích hợp Ryu-Snort
nỗ lực liên lạc có thể có). giữa các PDC, điều này sẽ không
xảy ra trong điều kiện bình thường). Cũng cần lưu ý rằng
Chức năng này rất đơn giản: để giám sát các gói giữa bất kỳ máy
chúng ta có thể đơn giản hóa kiến trúc này để chỉ giám sát
chủ nào, Ryu sẽ cài đặt các luồng tương ứng để phản chiếu các gói
trong các bộ chuyển mạch trung tâm của mạng, thay vì từng bộ
tới Snort, nơi quá trình tiền xử lý và kiểm tra quy tắc sẽ diễn ra.
chuyển mạch riêng lẻ, sau đó thêm nhiều phiên bản Snort hơn
Trong trường hợp một trong các quy tắc này bị phá vỡ, Snort sẽ gửi
khi mạng mở rộng.
cảnh báo đến bộ điều khiển SDN. Sau đó, ứng dụng bộ điều khiển sẽ
quyết định cách tiến hành quá trình tự phục hồi mạng trong khi vẫn
Tuy nhiên, đây không phải là mục tiêu của nghiên cứu này và
giữ được khả năng quan sát tối đa.
chúng tôi sẽ tập trung vào kiến trúc phân tán đơn giản.
Ưu điểm chính của giải pháp này là khả năng mở rộng tốt hơn
so với giải pháp tập trung. Tuy nhiên, kiến trúc này phức
tạp hơn và dễ xảy ra lỗi. C. Phát triển quy tắc Một

trong những lợi ích của việc tích hợp Snort với SDN là tính linh
Chúng tôi đã quyết định rằng kiến trúc phân tán là tốt nhất cho
hoạt mà các quy tắc của nó mang lại. Với một bộ quy tắc được tinh
nhu cầu của chúng tôi, đặc biệt là do khả năng mở rộng của nó. chỉnh, chúng tôi có thể cảnh báo Ryu về một số nỗ lực khai thác và
Sau quyết định kỹ thuật này, đã đến lúc đánh giá cách tương tác
hành động theo đó, chẳng hạn như cài đặt quy tắc SDN mới cho các
giữa bộ điều khiển Ryu và Snort IDS sẽ được thực hiện như thế nào. luồng tương ứng hoặc bắt đầu quá trình tự phục hồi nếu PMU bị xâm
Một lần nữa, chúng ta có hai lựa chọn khác nhau ở cấp độ thiết kế phạm. Trong tiểu mục này, chúng tôi giới thiệu một số quy tắc làm
này: ví dụ về cách chúng tôi có thể hưởng lợi từ IDS trên môi trường SDN.

• Triển khai Ryu và Snort trên cùng một máy. Tùy chọn này phù
hợp hơn cho các bản demo hoặc thử nghiệm nhanh. Ví dụ: chúng ta có thể viết các quy tắc sau để cảnh báo bộ điều
Trong kiến trúc này, Ryu sẽ nhận được các gói cảnh báo Snort khiển rằng một cuộc tấn công DoS đang diễn ra trong mạng:
thông qua Ổ cắm miền Unix.
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 số 8

cảnh báo tcp bất kỳ bất kỳ -> $PDCIP bất kỳ (tin nhắn:"Syn Flood to D. Kết luận
PDC"; cờ:S,CE; luồng:to_server;
detect_filter: theo dõi by_src, đếm 500, giây 1; mức độ ưu tiên:5;
sid:1000001;)
Chúng ta có thể rút ra một vài kết luận về sự tích hợp của
Snort trong mạng SDN:
cảnh báo tcp bất kỳ bất kỳ -> $PMUIP bất kỳ (msg:'Syn Flood to
Ban QLDA'; cờ:S,CE; luồng:to_server;
detect_filter: theo dõi by_src, đếm 500, giây 1; mức độ ưu tiên:5; • Không có giải pháp hoàn hảo. Trong quá trình thiết kế, chúng tôi
sid:1000001;) cần phải đưa ra một số quyết định liên quan đến kiến trúc của
giải pháp của mình. Sự lựa chọn của chúng tôi không phải lúc
Cụ thể, quy tắc đầu tiên trước đó sẽ cảnh báo Ryu khi bất kỳ kết nối
nào cũng tối ưu, nhưng chúng tôi tin rằng nó phù hợp nhất với
TCP nào từ bất kỳ địa chỉ IP nào và bất kỳ cổng nào có đích đến là
nhu cầu và yêu cầu của chúng tôi.
bất kỳ cổng nào của PDC vượt quá tốc độ 500 gói/giây, được coi là đủ
để làm gián đoạn dịch vụ của thành phần mạng này. Theo cách tương tự,
quy tắc thứ hai sẽ thực hiện cảnh báo tương tự khi nạn nhân là bất • Tính linh hoạt của Snort cho phép chúng tôi kiểm tra các phát

kỳ PMU nào. hiện xâm nhập hoặc tạo cảnh báo về các lỗ hổng khác trong hệ
thống của chúng tôi trong khi vẫn giữ được các lợi ích của
SDN: tính độc lập của dữ liệu và mặt phẳng điều khiển, dễ

Đây chỉ là một ví dụ về cách một quy tắc đơn giản có thể giúp phát quản lý, độ chi tiết của mạng tốt hơn.

hiện và tránh một lỗ hổng nghiêm trọng. Tài liệu về chủ đề này thực
sự rất khan hiếm, nhưng chúng ta có thể chỉ ra công việc phát triển
• Ngoài ra, SDN còn mang lại lợi ích cho các hệ thống IDS truyền
các quy tắc chống lại các cuộc tấn công làm mờ trên [14].
thống bằng cách bổ sung chế độ xem tập trung của mạng do bộ
Có nhiều quy tắc chúng ta có thể sử dụng cho bộ tiền xử lý Snort điều khiển cung cấp, nhờ đó giải quyết được những khó khăn
trong trường hợp chúng ta muốn bảo vệ hệ thống SCADA bằng giao thức trong quản lý khi chúng ta có nhiều phiên bản NIDS.
Modbus hoặc DNP3.

Giả sử mạng của bạn có thiết bị cảm biến DNP3.


Trong trường hợp này, trạm chính thường thăm dò thiết bị để đọc dữ
liệu nhưng hiếm khi gửi bất kỳ yêu cầu ghi nào đến thiết bị vì hoạt
động bình thường của nó là gửi dữ liệu đến trạm chủ.
Nếu một yêu cầu ghi được đưa ra, điều này cần được thông báo vì đây
VII. THÍ NGHIỆM
có thể là một cuộc tấn công (hoặc chỉ là hành vi hợp pháp nhưng vẫn
bất thường). Để thông báo về một hoạt động như vậy, bạn có thể sử
dụng quy tắc sau:

Như đã đề cập trước đó, Snort IDS có thể được tích hợp vào cùng
cảnh báo tcp $EXTERNAL_NET bất kỳ -> $MY_SENSOR 20000 ( thiết bị với bộ điều khiển hoặc chạy trên một máy khác. Dưới đây bạn
msg:"GHI YÊU CẦU TRÊN CẢM BIẾN DNP3!"; luồng: đã thiết lập, tới_server;
có thể thấy cả hai khả năng được trình bày.
dnp3_func:viết; sid :1000000 ;)

Quy tắc trước đó sẽ cảnh báo nếu thấy yêu cầu Ghi DNP3 hướng tới
"CẢM BIẾN CỦA TÔI". Nếu Snort đang chạy nội tuyến, những yêu cầu này
thậm chí có thể bị chặn.
Bạn có thể xem một ví dụ dưới đây:

thả tcp !$MASTER bất kỳ -> $MY_SENSOR 20000 ( thông điệp:"


Lệnh Khởi động lại DNP3 nhận được không bắt nguồn từ địa chỉ IP của thiết bị
Master, Nó đã bị hủy vì lý do bảo mật"; flow: đã thiết lập,to_server;

dnp3_func:cold_restart; sid:1000001;)

Các quy tắc trước đây là một ví dụ về cách làm cho Snort tự động
loại bỏ bất kỳ gói tin nào. Trong trường hợp này, nó sẽ loại bỏ các
gói chứa lệnh DNP3, buộc khởi động lại nguội nếu nó không có địa chỉ
IP của trạm chính làm nguồn của gói.

Snort là một công cụ rất hữu ích giúp phát triển các quy tắc mới
rất dễ dàng và rất linh hoạt, khiến nó trở thành một lựa chọn tuyệt
vời làm Hệ thống phát hiện xâm nhập cho mục đích của chúng tôi. Hình 3. SDN với Ryu và Snort IDS trong các máy riêng biệt
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 9

• Bộ điều khiển: Ryu+ Snort IDS

• 4 switch đường trục

• Công tắc nhiều cạnh

• Mỗi switch biên có một PDC được kết nối

• Mỗi switch biên có một hoặc nhiều PMU được kết nối

• Mỗi PMU được gán cho một PDC và lưu lượng chỉ có thể được
thực hiện giữa các PMU và PDC được chỉ định của chúng

B. Chạy mạng hoàn chỉnh Để mô phỏng

mạng, một số quy trình phải được khởi chạy. Các bước sau đây đã
được thực hiện để mô phỏng mạng:

• Chạy miniedit
Hình 4. SDN với Snort IDS được tích hợp trong bộ điều khiển Ryu

• Tải cấu trúc liên kết và chạy mạng


Chúng tôi quyết định sử dụng phiên bản thứ hai để đơn giản hơn,
vì việc kết hợp Snort IDS và bộ điều khiển sẽ mang lại cái nhìn dễ • Đợi mạng được tải vào mininet. Khởi động bộ điều khiển được
dàng hơn về mạng. Nó cũng tránh được việc trao đổi thêm lưu lượng
phát triển tích hợp Ryu và Snort IDS
giữa IDS và bộ điều khiển vì cả hai đều được tích hợp vào chỉ một
thiết bị.
Trong tiểu mục sau, chúng tôi mô tả cấu trúc liên kết được sử dụng
Trước khi kiểm tra toàn bộ mạng, bộ điều khiển Ryu đã được kiểm
trong môi trường mininet để kiểm tra sự tích hợp của Snort và Ryu.
tra độc lập để xác minh hoạt động chính xác của bộ điều khiển và
kiểm tra các đặc tính tự phục hồi của mạng. Khi tính năng này hoạt
động hoàn toàn, Snort IDS có thể chạy trong mạng và trao đổi thông
A. kịch bản mininet tin với bộ điều khiển Ryu. • Bắt đầu quá trình giám sát Snort

Trong hình ảnh sau, bạn có thể xem qua mạng được sử dụng trong
các thử nghiệm của chúng tôi, đây là ảnh chụp màn hình từ miniedit,
công cụ GUI được phát triển cho mininet.
• Tại thời điểm này, mọi thứ đều chạy trong cùng một mạng, Snort
IDS và Ryu được tích hợp vào bộ điều khiển

VIII. KẾT QUẢ VÀ PHÂN TÍCH

Bằng cách sử dụng mạng mẫu được trình bày ở phần trước, chúng
tôi đã thử triển khai một số quy tắc Snort để xác thực chức năng
triển khai chính xác. Trong ví dụ sau, chúng tôi hiển thị một số
kết quả mẫu được lấy từ các thử nghiệm.
Một quy tắc đã được triển khai để cảnh báo mỗi khi thực hiện ping
giữa PDC và PMU.

Hình 6. cấu trúc liên kết mininet

Hình 5. cấu trúc liên kết mininet

Cảnh báo này được kích hoạt bởi quy tắc Snort đơn giản sau:

Kịch bản thể hiện trong hình trên trong miniedit là một mạng cảnh báo icmp bất kỳ bất kỳ -> bất kỳ bất kỳ (tin nhắn:"Pinging...";
PMU đơn giản bao gồm: sid:1000004;)
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 10

Nếu chúng tôi sử dụng quy tắc cụ thể hơn, như chặn lưu lượng truy hữu ích hơn trong môi trường thực tế là hiệu suất là chìa khóa.
cập không mong muốn đang cố truy cập PMU từ một địa chỉ bên ngoài,
chúng tôi có thể nhận được thông báo như sau:

Bộ điều khiển Ryu tùy chỉnh tích hợp Snort đã phát hiện thành công các
điểm bất thường, dẫn đến việc ngắt kết nối các PDC hoạt động sai, có thể
được đánh dấu là không hoạt động.
Lưu lượng truy cập từ các PMU có đích đến PDC bị xâm phạm sẽ được chuyển
Hình 7. cấu trúc liên kết mininet hướng đến PDC gần đó, cho phép mạng tự phục hồi và duy trì khả năng quan
sát 100%, đây là điều quan trọng trong các mạng quan trọng này.

Điều này sẽ xảy ra với nỗ lực truy cập từ địa chỉ IP bên ngoài mạng
10.0.0.0/24 (trong trường hợp này là 10.0.2.1) nếu bạn sử dụng quy tắc
IX. KẾT LUẬN
như sau:

Trong dự án này, chúng tôi đã trình bày một cách tiếp cận sáng tạo đối
cảnh báo ![10.0.0.0/24] bất kỳ -> [10.0.0.0/24] 1111 ( msg:" KẾT NỐI KHÔNG MONG
MUỐN.";sid:1000005;) với Hệ thống phát hiện xâm nhập trong Hệ thống SCADA và WAMS. Cơ chế này
được hỗ trợ bởi các công trình trước đây trong lĩnh vực này, đã được giải
Sau khi phát hiện mối đe dọa thực sự, nếu hành vi bất thường xuất phát thích ở Phần II.
từ một thiết bị bên trong, thiết bị đó sẽ bị ngắt kết nối và cô lập, còn

nếu đó là PDC, các PMU đã kết nối trước đó với thiết bị đó sẽ được chuyển Chúng tôi tin rằng chúng tôi đã có thể đối mặt thành công với những
hướng đến PDC gần đó. thách thức xuất hiện trong giai đoạn thiết kế và phát triển.

Hệ thống được phát triển kết hợp sức mạnh của hai công nghệ hiện có: bộ
điều khiển Ryu SDN và Snort, một phần mềm mã nguồn mở IDS phổ biến. Sau
khi giám sát mạng và kiểm tra các quy tắc được thiết lập, IDS sẽ gửi cảnh
báo tương ứng đến ứng dụng tự phục hồi của bộ điều khiển.

Việc tích hợp hệ thống Phát hiện xâm nhập Snort với bộ điều khiển Ryu
SDN đã được chứng minh là thành công trong các thử nghiệm của chúng tôi.

Việc sử dụng công nghệ này trong các mạng cơ sở hạ tầng quan trọng có
thể tránh được một số lỗ hổng mà các hệ thống này hiện có và bảo vệ hệ
thống khỏi lưu lượng độc hại hoặc các cuộc tấn công mạng.

Sự kết hợp giữa hệ thống Phát hiện xâm nhập và mạng SDN có thể tỏ ra
rất hiệu quả vì nó kết hợp các lợi thế về tính linh hoạt và kiểm soát mà
Hình 8. cấu trúc liên kết mininet Mạng do phần mềm xác định mang lại, đồng thời tránh được một số lỗ hổng
mà các mạng này mắc phải.

Ở đây bạn có thể thấy PDC bị xâm phạm là ”PDC1”, vì vậy nó đã bị cô


lập. Bộ điều khiển kiểm tra PMU nào đang gửi lưu lượng truy cập của nó Chúng tôi tin rằng điều này có thể mang lại những cải tiến lớn về hiệu
quả và tính bảo mật cho mạng cảm biến.
tới PDC1 và thực hiện thuật toán tự phục hồi để chuyển hướng lưu lượng
truy cập của chúng đến PDC gần đó, trong trường hợp này là PDC4.
X. CÔNG TRÌNH TƯƠNG LAI

Trong dự án nghiên cứu này, chúng tôi tập trung vào các chủ đề sau: •
Kết quả của các cuộc thử nghiệm rất hứa hẹn. Kết quả kết hợp Triển
thành công trong các lĩnh vực khác nhau.
khai khả năng tự phục hồi trong SDN 'giống PMU'
Mạng
• Trước hết, Snort đã được triển khai trên Mạng SDN và một số quy tắc
đã được thử nghiệm thành công để đưa ra cảnh báo.
• Triển khai Hệ thống Phát hiện Xâm nhập
Khịt mũi trong mạng SDN

• Cơ chế tự phục hồi đã được thử nghiệm và hoạt động bình thường trên
• Nghiên cứu về Snort Rules cho mạng PMU
bộ điều khiển Ryu

• Chúng tôi đã có thể tích hợp thành công Snort và Ryu vào cùng một • Tích hợp Hệ thống phát hiện xâm nhập với bộ điều khiển tự phục hồi

mạng. Trong kịch bản thử nghiệm, chúng tôi chỉ cố gắng tích hợp
Ryu và Snort vào cùng một máy, nhưng việc tách chúng thành hai
thiết bị khác nhau sẽ thực sự giống nhau, nhưng có thể chứng minh Mặc dù chúng tôi đã tích hợp bộ điều khiển tự phục hồi và Snort IDS vào
được điều đó cùng một mạng và chúng tôi đã sử dụng một
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 11

kiến trúc PMU mẫu, chúng tôi không sử dụng máy chủ PMU thực tế [19] Shepard, Daniel P., Todd E. Humphreys và Aaron A. fansler,

trình giả lập và do đó không thể kiểm tra Snort cụ thể ”Đánh giá tính dễ bị tổn thương của các đơn vị đo pha đối với

quy tắc cho các môi trường này. Đây sẽ là một bổ sung tốt đẹp Tấn công giả mạo GPS”, Tạp chí quốc tế về cơ sở hạ tầng quan trọng
Bảo vệ 5.3, 2012
đến dự án.
[20] Chen, Jian và Ali Abur, ”Bố trí các PMU để kích hoạt dữ liệu xấu
phát hiện trong ước tính trạng thái”, Hệ thống điện, Giao dịch IEEE trên
21.4, 2006
NGƯỜI GIỚI THIỆU
[21] Morris, T., và cộng sự, ”Thử nghiệm an ninh mạng của các thiết bị đo pha và
[1] P. Zhang, ”Việc triển khai và triển khai Đơn vị đo pha (PMU) bộ tập trung dữ liệu pha trong trạm biến áp”, The 7th Annual
Ứng dụng”, Palo Alto, CA, 2007. Hội thảo nghiên cứu thông tin tình báo và an ninh mạng ACM
(CSIIRW), 2011
[2] T. Morris, S. Pan, J. Lewis, J. Moorhead, N. Younan, R. King,
M.Freund và V. Madani, ”Thử nghiệm rủi ro an ninh mạng của trạm biến áp [22] Sikdar, Biplab và Joe H. Chow, ”Bảo vệ dữ liệu đồng bộ pha
đơn vị đo phasor và bộ tập trung dữ liệu phasor”, Kết quả của Hội thảo thường mạng chống lại các cuộc tấn công phân tích lưu lượng”, Smart Grid, IEEE Transac-

niên lần thứ bảy về An ninh mạng và tions ngày 2.4, 2011

Nghiên cứu Thông tin Thông minh - CSIIRW '11, 2011, trang 14. [23] King, Joel W., ”Mạng được xác định bằng phần mềm: Giới thiệu về Open-2014
[3] C. Beasley, GK Venayagamoorthy và R. Brooks, ”An ninh mạng Chảy" ,

đánh giá các bộ đồng bộ pha trong hệ thống điện”, Hội nghị Hệ thống Điện
(PSC), 2014 Đại học Clemson, 2014, trang 15.

[4] Hui Lin, Chen Chen, Jianhui Wang, Junjian Qi, Dong Jin,”Mạng lưới PMU có khả
năng tự phục hồi trước các cuộc tấn công để vận hành hệ thống điện”

[5] AA Creery, EJ Byres, ” An ninh mạng công nghiệp cho hệ thống điện
và mạng SCADA”, Tạp chí Ứng dụng Công nghiệp IEE, tháng 7-tháng 8 năm 2007

[6] R. Chandia, J. Gonzalez, T. Kilpatrick, M. Papa và S. Shenoi,


”Chiến lược bảo mật cho mạng Scada”, Kỷ yếu của Int.
Hội nghị về Bảo vệ cơ sở hạ tầng quan trọng, Hanover, NH., Hoa Kỳ,
Ngày 19 - 21 tháng 3 năm 2007.

[7] M. Majdalawieh, F. Parisi-Presicce, D. Wijesekera, ”Khung bảo mật Bảo mật Giao
thức Mạng Phân tán (DNPSec)”, Trong Kỷ yếu của Hội nghị Ứng dụng Bảo mật Máy
tính Thường niên lần thứ 21,
Ngày 5-9 tháng 12 năm 2005, Tucson, Arizona.

[8] I. Nai Fovino, M. Masera, R. Leszczyna, ”Đánh giá an ninh CNTT-TT


của một nhà máy điện, một nghiên cứu điển hình”,Kỷ yếu của Int thứ hai.
Hội nghị về Bảo vệ cơ sở hạ tầng quan trọng, Arlington, Hoa Kỳ,
tháng 3 năm 2008

[9] A. Carcano, I. Nai Fovino, M. Masera, A. Trombetta: ”Scada


Phần mềm độc hại, một bằng chứng về khái niệm”,kỷ yếu của Quốc tế thứ 3
Hội thảo về An ninh cơ sở hạ tầng thông tin quan trọng, Rome,
Ngày 13-15 tháng 10 năm 2008

[10] Venkat Pothamsetty, Matthew Franz, ”Lọc Modbus/TCP trong suốt với Linux”, Có
sẵn trực tuyến http://modbusfw.sourceforge.net/
. Truy cập lần cuối 10/03/2016

[11] M. Roesch, ”Snort -Phát hiện xâm nhập hạng nhẹ cho các công trình mạng”, Kỷ
yếu của LISA 99: Hội nghị Quản trị Hệ thống lần thứ 13, Seattle, Washington,
Hoa Kỳ, 712 tháng 11 năm 1999

[12] Andrea Carcano, Igor Nai Fovino, Marcelo Masera ”Modbus/DNP3,


Hệ thống lọc dựa trên nhà nước”, Viện Bảo vệ và An ninh
của Trung tâm nghiên cứu chung công dân Ủy ban châu Âu Ispra, Ý

[13] IEEE, ”Tiêu chuẩn cho bộ đồng bộ pha cho hệ thống điện”, trong IEEE
Std C37.118-2005 (Bản sửa đổi của IEEE Std 1344-1995), 2006

[14] Đọc Sprabery, Thomas H. Morris, Shengyi Pan, Uttam Adhikari,


và Vahid Madani, “Phát hiện xâm nhập đột biến giao thức cho truyền thông
đồng bộ pha”, Trong Kỷ yếu của Hội nghị thường niên lần thứ tám
Hội thảo Nghiên cứu Thông tin Thông minh và An ninh mạng (CSI-IRW '13), New
York, NY, Hoa Kỳ, 2013

[15] Stewart, John và cộng sự, ”Thực hành bảo mật đồng bộ pha”, Schweitzer
Phòng thí nghiệm Kỹ thuật, Pullman, Washington, 2010

[16] Wireshark, https://www.wireshark.org/

[17] Yuan, Liwei, và cộng sự, ”Vi phạm an ninh do sai lệch của PMU: phát hiện
và xác định các cuộc tấn công bảo mật bằng cách sử dụng bộ đếm hiệu suất”,
Biên bản của Hội thảo Châu Á-Thái Bình Dương lần thứ hai về Hệ thống, ACM,
2011

[18] Sridhar, Siddharth, Adam Hahn và Manimaran Govindarasu, ”An ninh hệ thống vật
lý mạng cho lưới điện”, Kỷ yếu
của IEEE 100.1, 2012
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 12

XI. PHỤ LỤC 1: MẠNG MININET

1 # ! / usr / bi n / p yt hon
2
3 từ rom mininet 4 từ . netimport rt Mi ni n et
rom mininet 5 từ rom . nhập nút C nhập nút điều khiển , Điều khiển từ xa , OV SC o ll er
mininet 6 từ rom . CPULimitedHost nhập nút OVSKe , Chủ nhà , Nút
mininet 7 từ rom . rnelSwitch nhập nút IVSSwitc h , Bạn ser S với ch
mininet 8 từ rom .
mininet 9 từ rom . nhập CLI
mininet 10 từ rom . logimpo rt s et L og L ev el info ,
mininet . linkimpo rt TCLink , tôi không biết

11 từ cuộc gọi rom subprocessimpo rt


12
13 def myNetwork ( ) :
14
15 net = Mi ni n et ( topo =None build ,
16 = F al sei pB ,
17 ase = ' 1 0 . 0 . 0 . 0 / 8 ' )
18

19 info ( ' Thêm bộ điều khiển \n ' )


20 c0= netadd. C ontroller ( name = ' c0 ' ,
21 control = R em ot eC o nt roll erip = ' ,
22 1 2 7 . 0 . 0 . 1' ,
' '
23 giao thức = tcp ,
24 cổng = 6 6 3 3 )
25

26 thông tin ( ' Thêm công tắc \n ' )


27 s 1 7 = netadd. Swit ch ( ' s17 ' cls =OVSKe
, rnelSwitch )
28 s 1 5 = netadd. Swit ch ( ' s15 ' cls =OVSKe
, rnelSwitch )
29 s 2 0 = netadd. Swit ch ( ' s20 ' cls =OVSKe
, rnelSwitch )
30 s 1 9 = lưới . thêm Chuyển ch ( ' s19 ', cls =OVSKe rnelSwitch )
31 1 6 = lưới . thêm Chuyển ch ( ' s16 '
, cls =OVSKe rnelSwitch )
32 s 3 = lưới . thêm Chuyển ch ( ' s3 , cls =OVSKe rnelSwitch )
33 4 = lưới . ' thêm Chuyển ch ( ' , cls =OVSKe rnelSwitch )
'
34 s 7 = lưới . s4 ' thêm Chuyển ch , cls =OVSKe rnelSwitch )
35 6 = lưới . ( ' s7 thêm Chuyển ch , cls =OVSKe rnelSwitch )
36 ( ' s6 ' s 1 . thêm Chuyển ch ('s11'
, cls =OVSKe rnelSwitch )
37 1 = nets 9 . add Swit ch ( ' s9 , cls =OVSKe rnelSwitch )
38 = nets 8 = net. ' add Swit ch ( ' , cls =OVSKe rnelSwitch )
39 s8 ' s 1 2 = . thêm Chuyển ch ( ' s12 ' , cls =OVSKe rnelSwitch )
40 nets 1 3 = . thêm Chuyển ch ( ' s13 ' , cls =OVSKe rnelSwitch )
41 nets 1 8 = . thêm Chuyển ch ( ' s18 ' , cls =OVSKe rnelSwitch )
42 nets 1 = netadd
. Swit ch ( ' s1 ' , cls =OVSKe rnelSwitch )
43 s 1 4 = nets . thêm Chuyển ch ('s14' , cls =OVSKe rnelSwitch )
44 .
5 = netadd Switch ch ( ' s5 ' s 1 , cls =OVSKe rnelSwitch )
45 0 = lưới 2 = . thêm Chuyển ch ('s10' , cls =OVSKe rnelSwitch )
46 lưới . thêm Chuyển ch ('s2' , cls =OVSKe rnelSwitch )
47

48 thông tin ( ' Thêm máy chủ \n ' )


49 pmu9 = netad dH .o st ( ' pmu9 ' pmu12 , cls =IP máy chủ
, = ' 1 0 . 0 . 0 . 2 5 ' mặc
, định R oute =None )
50 = net pdc3 = . ad dH o st ( 'pmu12' , cls =IP máy chủ, = ' 1 0 . 0 . 0 . 2 8 ' , mặc định R oute = Không)
51 .
netad dH o st ( ' pdc3 ' pdc11 = net , cls =Máy chủ , ip = ' 1 0 . 0 . 0 . 3 ', mặc định R out =None )
52 pdc12 = net . ad dH o st ( ' pdc11 ' , cls =IP máy chủ ,= ' 1 0 . 0 . 0 . 1 1 ' cls , mặc định R oute = Không)
53 pmu27 = net pdc8 . ad dH o st ( ' pdc12 ' , =IP máy chủ = ' ,1 0 . 0 . 0 . 1 2 ' ip = ' , mặc định R oute = Không)
54 = netad dH o st . ad dH o st ( ' pmu27 ' , cls =Máy chủ , 1 0 . 0 . 0 . 4 3 ' ip = , mặc định R oute = Không)
55 ( ' pdc8 ' pmu14. = net , cls =Máy chủ , mặc định ' 1R 0oute
. 0 =. Không
0 . ),
56 . ad dH o st ( 'pmu14' , 8 ' cls =IP máy ,
chủ = ' 1 0 . 0 . 0 . 3 0' , mặc định R oute = Không)
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 13

57 pmu19 = net pdc15 . ad dH o st ( 'pmu19' ad , cls =Máy chủ , ip=' 1 0 . 0 . 0 . 3 5 ' , mặc định R oute = Không)
58 = net pdc4 = . dH o st ( ' pdc15 ' , cls =Máy chủ , ip = ' 1 0 . 0 . 0 . 1 5 , mặc định R oute = Không)
59 netad dH o st ( '. pdc4 ' pmu22 = net , cls =Máy chủ , ' ip = ' 1 0 . 0 . 0 . 4 ,' mặc định R out =None )
60 pdc5 = netad dH . ad dH o st ( 'pmu22' , cls =IP máy chủ, = ' 1 0 . 0 . 0 . 3 8 ' , mặc định R oute = Không)
61 .
o st ( ' pdc5 ' pmu5 = netad dH o st ( ' , cls =Máy chủ , ip = ' 1 0 . 0 . 0 . 5 ', mặc định R out =None )
62 . pmu4 = netad dH o st ,
pmu5 ' pmu10 = net cls =Máy chủ , ip=' 1 0 . 0 . 0 . 2 1 ' , mặc định R oute = Không)
63 ( ' pmu4 ' pmu25 . ad dH o st ( 'pmu10' , cls =IP máy chủ ,= ' 1 0 . 0 . 0 . 2 6 ' ip = , mặc định R oute = Không)
64 = net pmu13 = net. pdc9 = netad dH o st , cls =Máy chủ , ' 1 0 . 0 . 0 . 2 0 ' cls , mặc định R oute = Không)
65 ( ' pdc9 ' pmu17 . ad dH o st ( 'pmu25' ad , =IP máy chủ = ' ,1 0 . 0 . 0 . 4 1 ' cls =IP , mặc định R oute = Không)
66 = net pmu28 = net . dH o st ( 'pmu13' , máy chủ = ' 1 0 ,. 0 . 0 . 2 9 ' ip = ' 1 0 . , mặc định R oute = Không)
67 pmu6 = netad dH o. st ( ' pmu6 ' pdc6 = , cls =Máy chủ , 0 . 0 . 9 ' mặc định R out, =None )
68 netad dH o st ( ' . ad dH o st ( 'pmu17' ad , cls =IP máy chủ ,= ' 1 0 . 0 . 0 . 3 3 ' cls , mặc định R oute = Không)
69 pdc6 ' pmu1 = . dH o st ( ' pmu28 ' , =IP máy chủ = ' ,1 0 . 0 . 0 . 4 4 ' ip = ' 1 , mặc định R oute = Không)
70 netad dH o st ( '. pmu1 ' pmu8 = netad , cls =Máy chủ , 0 . 0 . 0 . 2 2 ' ip = ' , mặc định R oute = Không)
71 dH o st ( ' pmu8 .' pmu29 = net pmu15 = , cls =Máy chủ , 1 0 . 0 . 0 . 6' ip = ' , mặc định R oute = Không)
'
72 .
net pmu16 = net pdc7 = netad dH o st ( ' , cls =Máy chủ , 1 0 . 0 . 0 . 1 7 mặc định R, oute =None )
73 . pmu30 = net pdc2 =
pdc7 ' pmu26 = net , cls =Máy chủ , ip=' 1 0 . 0 . 0 . 2 4 ' , mặc định R oute =None )
74 netad dH o st ( ' . ad dH o st ( 'pmu29' ad , cls =IP máy chủ ,= ' 1 0 . 0 . 0 . 4 5 ' cls , mặc định R oute = Không)
75 pdc2 ' pdc1 = . dH o st ( ' pmu15 ' ad , =IP máy chủ = ' ,1 0 . 0 . 0 . 3 1 ' cls =IP , mặc định R oute = Không)
76 netad dH o st ( ' . dH o st ( ' pmu16 ' , máy chủ = ' 1 0 ,. 0 . 0 . 3 2 ' ip = ' 1 , mặc định R oute = Không)
'
77 .
pdc1 ' pmu23 = netad dH o st ( ' pmu23 , cls =Máy chủ , 0 . 0 . 0 . 7 mặc định R ,out =None )
78 ' pdc14 = netad . ad dH o st ( 'pmu26' ad , cls =IP máy chủ,= ' 1 0 . 0 . 0 . 4 2 ' cls , mặc định R oute = Không)
79 dH o st ( ' pdc14 . dH o st ( 'pmu30' , =IP máy chủ = ',1 0 . 0 . 0 . 4 6 ' ip = ' , mặc định R oute = Không)
80 . o st ( ' pmu21 '
' pmu21 = netad dH , cls =Máy chủ , 1 0 . 0 . 0 . 2 ' mặc định , R out =None )
81 pmu11 = netad dH .o st ( ' pmu11 ' pdc16 , cls =Máy chủ , ip=' 1 0 . 0 . 0 . 1 ', mặc định R out = Không )
82 = netad dH o st ( '. pdc16 ' pdc10 = netad , cls =IP máy chủ =, ' 1 0 . 0 . 0 . 3 9 ' cls , mặc định R oute = Không)
83 dH o st ( ' pdc10 '. pmu7 = netad dH o st , =IP máy chủ = ' 1
, 0 . 0 . 0 . 1 4 ' cls =IP , mặc định R oute = Không)
'
84 .
( ' pmu7 pdc13 = netad dH o st ( ' pdc13 ' , máy chủ = ' 1 0 .
, 0 . 0 . 3 7 cls =IP máy , mặc định R oute = Không)
'
85 . ' pmu20 = net pmu3 =
ad dH o st ( ' pmu20 , chủ = ' 1 0 . 0 .
, 0 . 2 7 cls =IP máy chủ = , mặc định R oute = Không)
86 .
netad dH o st ( ' pmu3 ' pmu24 = net pmu2 , ' 1 0 . 0 . 0 . 1
, 6 ' ip = ' 1 0 . 0 . 0 . 1 , mặc định R oute = Không)
87 = netad dH o st ( '. pmu2 ' pmu18 = net , cls =Máy chủ , 0 ' ip = ' 1 0 . 0 . 0 . 2 , mặc định R oute = Không)
'
88 . , cls =Máy chủ , 3 ' cls =IP máy chủ = ' 1 , mặc định R oute = Không)
89 . , 0 . 0 . 0 . 1 3 '
, cls =IP máy chủ = ' 1 0 . , mặc định R oute = Không)
90 . , 0 . 0 . 3 6 ' ip,= ' 1 0 . 0 . 0 . 1 9 ' mặc , mặc định R oute = Không)
91 . , cls =Máy chủ , định R oute =None ) ,
92 . ad dH o st ( 'pmu24' , cls =IP máy chủ, = ' 1 0 . 0 . 0 . 4 0 ' ip , mặc định R oute = Không)
93 . , cls =Máy chủ , , định R oute =None )
= ' 1 0 . 0 . 0 . 1 8 ' mặc
94 . ad dH o st ( 'pmu18' , cls =IP máy chủ,= ' 1 0 . 0 . 0 . 3 4' , mặc định R oute = Không)
95

96 thông tin ( ' Thêm liên kết \n ' )


97 . quảng cáo dLi nk ( s1 s,1 7 )

98 netad .dLi nk ( s2 s 1 7 ,)
mạng lưới

99 mạng lưới . quảng cáo dLi nk ( s3 s,1 7 )

100 mạng lưới . quảng cáo dLi nk ( s4 s, 1 7 )

101 mạng lưới . quảng cáo dLi nk ( s5 s, 1 8 )

102 mạng lưới . quảng cáo dLi nk ( s6 s, 1 8 )

103 mạng lưới . quảng cáo dLi nk ( s7 s, 1 8 )

104 mạng lưới . quảng cáo dLi nk ( s8 s, 1 8 )

105 mạng lưới . quảng cáo dLi nk ( s19 s,9 )

106 mạng lưới . quảng cáo dLi nk ( s19 s,1 0 )


107 mạng lưới . quảng cáo dLi nk ( s11 s,1 9 )

108 mạng lưới . quảng cáo dLi nk ( s12 s,1 9 )

109 mạng lưới . quảng cáo dLi nk ( s16 s,2 0 )


110 mạng lưới . quảng cáo dLi nk ( s15 s,2 0 )
111 mạng lưới . quảng cáo dLi nk ( s14 s,2 0 )
112 mạng lưới . quảng cáo dLi nk ( s13 s,2 0 )

113 mạng lưới . quảng cáo dLi nk ( s17 s,1 8 )


114 mạng lưới . quảng cáo dLi nk ( s17 s,2 0 )
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 14

115 mạng lưới . quảng cáo dLi nk ( s20 s, 1 9 )

116 mạng lưới . quảng cáo dLi nk ( s18 s, 1 9 )

117 mạng lưới . quảng cáo dLi nk ( s17 s, 1 9 )

118 mạng lưới . quảng cáo dLi nk ( s20 s, 1 8 )

119 mạng lưới . quảng cáo dLi nk ( pdc2 , s 2 )

120 mạng lưới . quảng cáo dLi nk ( pdc3 , s 3 )

121 mạng lưới . quảng cáo dLi nk ( pdc4 , s 4 )

122 mạng lưới . quảng cáo dLi nk ( pdc5 , s 5 )

123 mạng lưới . ad dLi nk ( pdc6 , s 6 )

124 mạng lưới . ad dLi nk ( pdc7 , s 7 )

125 mạng lưới . quảng cáo dLi nk ( pdc8 , s 8 )

126 mạng lưới . quảng cáo dLi nk ( pdc9 , s 9 )

127 mạng lưới . ad dLi nk ( pdc10 , s 1 0 )

128 mạng lưới . quảng cáo dLi nk ( pdc11 , s 1 1 )

129 mạng lưới . quảng cáo dLi nk ( pdc12 , s 1 2 )

130 mạng lưới . quảng cáo dLi nk ( pdc13 , s 1 3 )

131 mạng lưới . quảng cáo dLi nk ( pdc14 , s 1 4 )

132 mạng lưới . quảng cáo dLi nk ( pdc15 , s 1 5 )

133 mạng lưới . quảng cáo dLi nk ( pdc16 , s 1 6 )

134 mạng lưới . ad dLi nk ( pdc1 , s 1 )

135 mạng lưới . quảng cáo dLi nk ( pmu2 , s 1 )

136 mạng lưới . quảng cáo dLi nk ( pmu4 , s 1 )

137 mạng lưới . quảng cáo dLi nk ( pmu1 , s 1 )

138 mạng lưới . quảng cáo dLi nk ( s2 , pmu3 )

139 mạng lưới . quảng cáo dLi nk ( s3 , pmu5 )

140 mạng lưới . quảng cáo dLi nk ( s3 , pmu7 )

141 mạng lưới . quảng cáo dLi nk ( s4 , pmu6 )

142 mạng lưới . quảng cáo dLi nk ( s4 , pmu8 )

143 mạng lưới . quảng cáo dLi nk ( s5 , pmu9 )

144 mạng lưới . quảng cáo dLi nk ( s5 , pmu11 )

145 mạng lưới . quảng cáo dLi nk ( s6 , pmu10 )

146 mạng lưới . quảng cáo dLi nk ( s6 , pmu17 )

147 mạng lưới . quảng cáo dLi nk ( s6 , pmu20 )

148 mạng lưới . quảng cáo dLi nk ( s6 , pmu21 )

149 mạng lưới . quảng cáo dLi nk ( s7 , pmu12 )

150 mạng lưới . quảng cáo dLi nk ( s7 , pmu13 )

151 mạng lưới . quảng cáo dLi nk ( s7 , pmu14 )

152 mạng lưới . quảng cáo dLi nk ( s8 , pmu15 )

153 mạng lưới . quảng cáo dLi nk ( s8 , pmu18 )

154 mạng lưới . quảng cáo dLi nk ( s8 , pmu23 )

155 mạng lưới . quảng cáo dLi nk ( pmu16 , s 9 )

156 mạng lưới . quảng cáo dLi nk ( s10 , pmu19 )

157 mạng lưới . quảng cáo dLi nk ( s11 , pmu22 )

158 mạng lưới . quảng cáo dLi nk ( s12 , pmu24 )

159 mạng lưới . quảng cáo dLi nk ( s13 , pmu25 )

160 mạng lưới . quảng cáo dLi nk ( s13 , pmu26 )

161 mạng lưới . quảng cáo dLi nk ( s14 , pmu27 )

162 mạng lưới . quảng cáo dLi nk ( s15 , pmu28 )

163 mạng lưới . quảng cáo dLi nk ( s16 , pmu29 )

164 mạng lưới . quảng cáo dLi nk ( pmu30 , s 1 4 )

165

166 thông tin ( ' S tartingn etw ork \n ' )


167 mạng lưới . xây dựng ( )

168 thông tin ( ' S tartingcontrollers \n ' )


169 forcontrollerinnet . bộ điều khiển:

170 bộ điều khiển . bắt đầu ( )

171

172 thông tin ( ' S tartingswitches \n ' )


Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 15

173 mạng lưới


. lấy ( 's17' ) . bắt đầu ( [ c0 ] )
174 mạng lưới
. lấy ( 's15' ) . bắt đầu ( [ c0 ] )
175 mạng lưới
. lấy ( 's20' ) . bắt đầu ( [ c0 ] )
176 mạng lưới
. lấy ( 's19' ) . bắt đầu ( [ c0 ] )
177 mạng lưới
. lấy ( 's16' ) . bắt đầu ( [ c0 ] )
178 mạng lưới
. lấy ( 's3' ) . bắt đầu ( [ c0 ] )
179 mạng lưới
. lấy ( 's4' ) . bắt đầu ( [ c0 ] )
180 mạng lưới
. lấy ( 's7' ) . bắt đầu ( [ c0 ] )
181 mạng lưới
. lấy ( 's6' ) . bắt đầu ( [ c0 ] )
182 mạng lưới
. lấy ('s11'). bắt đầu ( [ c0 ] )
183 mạng lưới
. lấy ( 's9' ) . bắt đầu ( [ c0 ] )
184 mạng lưới
. lấy ( 's8' ) . bắt đầu ( [ c0 ] )
185 mạng lưới
. lấy ('s12'). bắt đầu ( [ c0 ] )
186 mạng lưới
. lấy ( 's13' ) . bắt đầu ( [ c0 ] )
187 mạng lưới
. lấy ( 's18' ) . bắt đầu ( [ c0 ] )
188 mạng lưới
. lấy ( 's1' ) . bắt đầu ( [ c0 ] )
189 mạng lưới
. lấy ( 's14' ) . bắt đầu ( [ c0 ] )
190 mạng lưới
. lấy ( 's5' ) . bắt đầu ( [ c0 ] )
191 mạng lưới
. lấy ( 's10' ) . bắt đầu ( [ c0 ] )
192 mạng lưới
. lấy ( 's2' ) . bắt đầu ( [ c0 ] )
193

194 thông tin ( ' Đăng cấu hình bộ chuyển mạch và máy chủ \n ' )
195

196 CLI (mạng)

197 mạng lưới . dừng lại ( )

198

199 nếu tên == ' chính ' :


'
200 s et L og Lev el ( ' info )

201 Mạng của tôi ( )


Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 16

XII. PHỤ LỤC 2: BỘ ĐIỀU KHIỂN

1 # Copy ri g ht (C ) 2016 Jiaqi Yan 2 # , IIT

3 # Li hươngdưới Apache Li hương Ver si on 2 . 0 (“Linh ,hương”);


4 # bạn không được sử dụng tập tin này ngoại trừ việc tuân thủ Giấy phép 5 # Bạn có thể lấy một .
bản sao Giấy phép
6 #
7 # http://www. apache . org / giấy phép / LICENSE 2.0
8 #
9 # Không được yêu cầu bởi luật hiện hành hoặc đồng ý bằng văn bản, 10 # được phân phối theo giấy phần mềm
phép được phân phối trên CƠ SỞ "NGUYÊN TRẠNG" 11 # KHÔNG CÓ BẢO ĐẢM HOẶC ĐIỀU KIỆN DƯỚI BẤT KỲ LOẠI NÀO người ,
thể hiện ,
12 # ngụ ý 13 # .
Xem Li enseforthespecla nguagegover ni ngpermissions và
14 #hạn chế của Lí hương 15 .

16 ” ” ”
17 Bộ điều khiển điều khiển mạng điện bus IEEE 30

18 Dựa trên OpenFlow 1 . 0 L2 learning switchimpleme ntation 19 ” ” ” .

20
21 mảng nhập khẩu
22
23 từ rom ryu . ứng dụng baseimpo rt ma na ge r
24 từ rom ryu . bộ điều khiểnnhập khẩu sự cố
25 từ rom ryu . bộ điều khiểnxử lýmpo
. rt CẤU HÌNH DISPATCHERbộ điều khiểnxử lýmpo , ĐIỀU PHỐI CHÍNH
26 từ rom ryu . rt setevcls .
27 từ rom ryu . ofprotoimport ofpr ot ov 1 0
28 từ rom ryu . lib mac
. impo rt haddrtobin
29 từ rom ryu . lib . gói tin nhập khẩu
30 từ rom ryu . sự . packetimpo rt ethernet
31 từ rom ryu . . gói dữ liệu ethertypes
32 từ rom ryu . . packetimpo rt ipv 4 , icmp
33 từ rom ryu . kiện libliblibtop ol ogyimpo rt
34 từ rom ryu . tuyệt vời quá. apiimpo rt getswitch , getlink
35 f rom ryu 36 . libimpo rt khịt mũi

37
38 lỗi PDC s = [ F alseforiinrange ( 0 39 , 1 6 )]

Trình điều khiển tự học lớp 40 (app ma na ge r . RyuApp):


'
41 ”Bộ điều khiển tự thândựa trên ryu s sim m pleswitch ”
42 PHIÊN BẢN OFP = [ ofpr ot ov 1 0 . PHIÊN BẢN OFP]
43 snortlib'BỐI
: snortlib 44. Không có gì L ib }
CẢNH = { '

45
46 chắc chắn trong đó ( bản thân , lập luận , kwa rgs ):
” ” ”
47
48 Đối tượng điều khiển C reate
49
50 Thuộc tính :
51 topologyapiapp : mo nit orthetop ol ogychanges by
” ”
52 ryu manage r observe linksswitches
'
53 ( listofint ) : lưu trữ mọi liên kết sw (2 sd pi d
54 leveldict ): lưu trữ số cổng từ rom
55 sw ( phím cấp 1 , d pid dpi) d ) sang sw ( phím cấp 2 ,
56 swtoho st ( dict ): lưu trữ số cổng từ rom sw ( key cấp 1 , d pi d )
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 17

57 tohost ( phím cấp 2 , chuỗi IP)


” ” ”
58
59 siêu (S elf H eal C ontroller , bản thân ) . trong đó
( lập luận , kwa rgs )
60
61 chính . topologyapiapp = tự
62 mình . công tắc = [ ]
63 bản thân . liên kết = {}
64 bản thân . swtoho st = {}
65
'
66 chính . khịt mũi = kwa rgs khịt mũi ']
67 mình . [ snortport = 3
68 . mactopo rt = {}
69 socketconfig = { ' u ni xsock ' : ĐÚNG VẬY }
70 . khịt mũi( .socketconfig )
selfsetconfig
71 máy chủ
. khịt cắm. bắt
tự ổmũi ( ) đầu
72

73 # initp at hf rom ed ge sw to PDCs


74 foriinrange ( 1 tự , 1 7 ):
75 . swtoho st [ i ] = { ' 1 0 . 0 . 0 .%d' %i : 1 }
76 # khởi tạo từ hf rom ed ge sw tới PMU
'
77 .
selfswtoho st [ 1 ] [ ' 1 0 . 0 . 0 . 1 7] = 4
78 .
selfswtoho st [ 1 ] [ ' 1 0 . 0 . 0 . 1 8 '] = 2
79 .
selfswtoho st [ 1 ] [ ' 1 0 . 0 . 0 . 2 0 ' ] = 3
80 .
selfswtoho st [ 2 ] [ ' 1 0 . 0 . 0 . 1 9 '] = 2
81 .
selfswtoho st [ 3 ] [ ' 1 0 . 0 . 0 . 2 1 '] = 2
82 .
selfswtoho st [ 3 ] [ ' 1 0 . 0 . 0 . 2 3 ' ] = 3
83 .
selfswtoho st [ 4 ] [ ' 1 0 . 0 . 0 . 2 2 ' ] = 2
84 .
selfswtoho st [ 4 ] [ ' 1 0 . 0 . 0 . 2 4 '] = 3
85 .
selfswtoho st [ 5 ] [ ' 1 0 . 0 . 0 . 2 5 '] = 2
'
86 .
selfswtoho st [ 5 ] [ ' 1 0 . 0 . 0 . 2 7] = 3
87 bản thân . swtoho st [ 6 ] [ ' 1 0 . 0 . 0 . 2 6 '] = 2

88 . swtoho st [ 6 ] [ ' 1 0 . 0 . 0 . 3 3 '] = 3


89 . swtoho st [ 6 ] [ ' 1 0 . 0 . 0 . 3 6 '] = 4
'
90 . swtoho st [ 6 ] [ ] = '
51 0 . 0 . 0 .
91 . 3 7 swtoho st [ 7 ] [ ' 1 0 . 0 . 0 . 2 8 '] = 2
92 . swtoho st [ 7 ] [ ' 1 0 . 0 . 0 . 2 9 '] = 3
93 . swtoho st [ 7 ] [ ' 1 0 . 0 . 0 . 3 0 ' ] = 4
94 . swtoho st [ 8 ] [ ' 1 0 . 0 . 0 . 3 1 '] = 2
95 . swtoho st [ 8 ] [ ' 1 0 . 0 . 0 . 3 4 '] = 3
96 . swtoho st [ 8 ] [ ' 1 0 . 0 . 0 . 3 9 '] = 4
97 . swtoho st [ 9 ] [ ' 1 0 . 0 . 0 . 3 2 ' ] = 2
98 . swtoho st [ 1 0 ] [ ' 1 0 . 0 . 0 . 3 5 '] = 2
99 . swtoho st [ 1 1 ] [ ' 1 0 . 0 . 0 . 3 8 '] = 2
100 . swtoho st [ 1 2 ] [ ' 1 0 . 0 . 0 . 4 0 '] = 2
101 . swtoho st [ 1 3 ] [ ' 1 0 . 0 . 0 . 4 1 '] = 2
102 . swtoho st [ 1 3 ] [ ' 1 0 . 0 . 0 . 4 2 ' ] = 3
103 . swtoho st [ 1 4 ] [ ' 1 0 . 0 . 0 . 4 3 '] = 2
104 . swtoho st [ 1 4 ] [ ' 1 0 . 0 . 0 . 4 6 '] = 3
105 . swtoho st [ 1 5 ] [ ' 1 0 . 0 . 0 . 4 4 '] = 2
106 . swtoho st [ 1 6 ] [ ' 1 0 . 0 . 0 . 4 5 '] = 2
107 . swtoho st [ 1 7 ] = {}
108 . swtoho st [ 1 8 ] =
{}
109 . swtoho st [ 1 9 ] = {}
110 selfselfselfselfselfs
. swtoho st [ 2 0elfselfselfselfse
] = {} lfselfselfselfself fselfselfselfselfself selfself
111

112
113 defpacketprint ( self , p kt ):
114 p kt = gói P gói et. ( mảng . , p kt ) ) mảng ('B'
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 18

115
116 eth = p kt . giao thức get ( ethernetethernet ) .
117 ipv 4 = p kt . giao thức get ( ipv 4 ipv 4 ).
118 icmp = p kt . giao thức get ( icmp . icmp )
119
120 nếu icmp:

121 bản thân . tiều phu . thông tin ("% r , icmp )
122
123 ifipv 4:

124 bản thân . tiều phu . thông tin ("% r , ipv4 )
125
126 nếu :

127 bản thân . tiều phu . thông tin ("% r , eth )
128
129 # forpinp kt . giao thức:
'
130 # ifhasattr ( p , p ot oc ol n am e ' ) là F alse :
131 # phá vỡ
132 # print ( ' p : %s ' % p . pro ot oc ol n am e )
133
134 def ta ke d ow np dc ( self ):

135 print ” keqerfqorgo @ s et
136 ev cl s ( snortlibdefd um p . E v nt Al e , NGƯỜI ĐIỀU PHỐI CHÍNH )
137 al e rt ( self msg = ev . msg , rt ev ):
138
139
140 print ( ' \ n\nALERT : %s \n\ n D chi tiết : ' % ' ' . join ( msg .alertmsg ) )
141
142 bản thân . gói tin ( tin nhắn . p kt )
143 in ”\ n\n ”
144
145 @ s et ev cl s ( eventdef . E v nt S wit ch E n er )
146 lấy dữ liệu cấu trúc liên kết ( self ,
ev ):
” ” ”
147 Tự động tạo sw sang sw porttable @ sel f . liên kết .
148
149 Không có gì là @ev không được sử dụng
” ” ”
150
151 . selflogger
thông tin . ( ” U pd ati ngport bản đồ giữa các switches ” )
152 danh sách chuyển đổi = getswitch ( self Không. ứng
có )dụng ol ogya pi hàng đầu,
153 # đã tạo ánh xạ pi dtodatapath
154 cho sw inswitchlist :
155 nếu sw . dp . tôi không biết chính . công tắc:
156 mình đã. chuyển đổi . ứng dụng ( sw . dp . id )
157
158 # createlinks : theport trên src sw todst sw
159 danh sách liên kết = getlink (tự . ứng dụng ol ogya pi hàng đầu, Không có )
160 forlinkinlinklist :
161 liên kết nếu . src . d pi d ot inselflinksd pi. d ] = . phím ( ):
162 . liên kết . src . {}
163 bản thân .
selflinks [ liên [. src
linkdst
. d pi d ] [ liên kết . . d pi d ] = liên kết . src . cổng không
164 tự in . kết liên kết
165
166 @ s et ev cl s . E v nt PortM o di fy )
167 ( eventdeflinkdeletehan dler ( self , ev ):
” ” ”
168 Phản ứng với sự kiện liên kết xuống
169
170 @ev : từ rom mà chúng tôi ca nextract P ortobject
” ” ”
171
172 cổng = ev. Hải cảng
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 19

173 d pi d = . d pi d
” ” ”
” ” ” ” ” ” ”
174 porthosts , KHÔNG , KHÔNG , KHÔNG , KHÔNG ]
KHÔNG
” ” ” ” ” ” ” ” ” ”
175 = [ máy chủ KHÔNG , KHÔNG , KHÔNG , KHÔNG , KHÔNG ]
” ” ” ” ” ” ” ” ” ”
176 2 = [ discPMUs KHÔNG , KHÔNG , KHÔNG , KHÔNG , KHÔNG ]
” ” ” ” ” ” ” ” ” ”
177 = [ discPMUs2 = [ KHÔNG , KHÔNG , KHÔNG , KHÔNG , KHÔNG ]
” ” ” ” ” ” ” ” ” ”
178 máy chủ 3 KHÔNG , KHÔNG , KHÔNG , KHÔNG , KHÔNG ]
” ” ” ” ” ” ” ” ” ”
179 = [ discPMUs3 = KHÔNG , KHÔNG , KHÔNG , KHÔNG , KHÔNG ]
180 [ n= 1
181 d pi d 2 =0
182 d pi d 3 =0
183 toàn cầu của PDC
184 f aili ng PDC s [ d pi d 1]= T r ue
185 print ”\ n\n ”+ str ( f aili ng PDC s )+”\n\n ”
186 # cổng số = cổng . cổng không
187 # e v nt name = port .tên
188
189 # đảm bảo bộ điều khiển có toàn bộ chế độ xem
190 bản thân . gettopologydata ( Không có )
191
192 cổng . isd ow n ( ):
193 rawinp ut ( ” S tartself tự chữa lành bằng cách nhấn Enter + str . . . ”)

194 print ” PDC bị lỗi là # p tại hfor ( d pi d ) +”\n ”
195 pmu15 ( 1 0 . 0 . 0 . 3 1 ) đến pdc5 ( 1 0 . 0 . 0 . 5 )
196 máy chủ = selfswtoho
. st [ d pi d ] . phím ( )
197 máy chủ = [ ]
198 ho st 2 = [ ]
199 kích thước = len (máy chủ)

200 # print ”\ n Số lượng Ban QLDA là : + str ( size )

201 print ”Các Ban QLDA liên kết với PDC này như sau : đối với số trong phạm
202 vi ( kích thước 0 ): ,
203 ,
máy chủ =map ( inthosts [ num ] . tách ra ( ' ' .) )

204 ifhosts [ num ] ! = KHÔNG ” và máy chủ [ 3 ] >1 6:
205 n=n+1
206 discPMUs [ n ]= máy chủ [ num ]
207 in ” PMU”+ str ( n + 1 ) + ”: ”+ str ( discPMUs [ n ] )
208
209 print ”\ n S tartselfhealing \n ”
210 x = ( ( d pi d 1) / 4 ) 4
211 y=x+3
212 coreswitch =17+ x / 4
213 # print ”\ n X= ”+ str ( x ) +” Y= ”+ str ( y ) +”\n ”

214 # print ”\ n Co re switchis : + str ( coreswitch ) +” \n ”
215 newPDC= d pi d 1
216 nếu newPDC==x :
217 mớiPDC=y+1
218 print ”PDC mới được gán là PDC”+ str ( newPDC ) +”\n ”
219 # bây giờ hãy để m = 0 cố gắng kết nối lại pmus với hthene xt pdc ( pdc [ d pi d + 1 ] )
220
221 forminrange ( 0 # ,n + 1 ):
222 rawinp ut ( ” Các PMU kinh tế: PRess Enter ” ) . .

223 .
selfswtoho st [ newPDC ] [ discPMUs [m ] ] = selfselfswtoho st . liên kết [ newPDC ] [ coreswitch ]
224 .
[ coreswitch ] [ discPMUs [m ] ] = selfselfswtoho st [ d pi d ] [ ' . liên kết [ coreswitch ] [ d pi d ]
'
225 1 0 . .
0 . 0 . lõi chuyển mạch] + str( newPDC ) ]= selflinks. [ d pi d ] [

'
226 bản thân . swtoho st [ coreswitch ] [ ' 1 0 . 0 . 0 . + str( newPDC ) ]= self . liên kết [
coreswitch] [ newPDC ]
227 print ”\nPMU với h Địa chỉ IP ”+ đĩaPMU [m] + ” đã được kết nối lại với h
” ”
PDC”+ str ( newPDC ) # , IP : 1 0 . 0 . 0 . + str ( newPDC )
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 20

228
” ” ” ” ”
229 # in [ # tự + . swtoho st [ + str ( newPDC ) + ] [ + discPMU [m] + ” ] ] = bản thân . liên kết
” ” ” ”
str ( newPDC ) + tự ] [ + str ( coreswitch ) + + \ n
” ” ” ” ”
230 in . swtoho st [ str ( coreswitch ) + ] + đĩaPMU [m] + ] = bản thân .
” ” ” ”
liên + str (coreswitch) + ] \ n + str ( d pi [ ” ]
” '
231 kết [ # bản thân . [ swtoho st [ d pi d ] [ d ) + ' 1 0 . 0 . 0 . + str( newPDC ) ]= self . liên kết [ d pi d ] [

printcoreswitch ]
” '
232 # printwtoho tự
st [ . coreswitch ] [ coreswitch ] ' 1 0 . 0 . 0 . + str( newPDC ) ]= self . liên kết [

[ newPDC ]
233
234 ifd pi d ==y + 1:
235 d pi d 2 =x+1
236 khác :
237 d pi d 2 = d pi d +1
238
239 ifd pi d 2 ==y + 1:
240 d pi d 3 =x+1
241 khác :
242 d pi d 3 = d pi d 2 +1
243
244 # in ” d pi d : ”+ str ( d pi d ) +” d pi d 2 : ”+ str ( d pi d 2 )+”\n ”
245
246 nếu PDC không hoạt động [ d pi d 2 1] và không có PDC không hoạt động [ d pi d 3 1 ]:
247 .
máy chủ 2 = selfswtoho st [ d pi d 2 ] . phím ( )
248 kích thước 2 = len ( máy chủ 2 )
249 k= 1
250 ,
cho num2 trong phạm vi ( 0 size 2 ):
251 ,
máy chủ 2 =bản đồ ( inthosts 2 [ num2 ] . tách ra ( ' ' .) )

252 ifhosts 2 [ num2 ] ! = KHÔNG ” và máy chủ 2 [ 3 ] >1 6:
253 k=k+1
254 discPMUs2 [ k ]= máy chủ 2 [ num2 ]
255 in ” PMU”+ str ( k + 1 ) + ”: ”+ str ( discPMUs2 [ k
] )
256
257 m=0
258 forminrange ( 0 ,k + 1 ):
259 . swtoho st [ newPDC ] [ discPMUs2 [m ] ] = self . liên kết [ newPDC ] [
selfcoreswitch ]
260 .
selfswtoho st [ coreswitch ] [ discPMUs2 [m ] ] = selfcoreswitch ] . liên kết [
[ d pi d 2 ]
'
261 .
selfswtoho st [ d pi d 2 ] [ ' 1 0 . 0 . 0 . ] + str( newPDC ) ]= self . liên kết [ d pi d 2
[ lõi chuyển đổi ]
'
262 .
selfswtoho st [ coreswitch ] [ ' 1 0 . 0 . 0 . + str( newPDC ) ]= self . liên kết [
coreswitch] [ newPDC ]
263 print ”\nPMU với h Địa chỉ IP ”+ đĩaPMU [m] + ” đã được n
” ”
đã kết nối lại với h PDC”+ str ( newPDC ) # IP : 1 0, . 0 . 0 . + str (
PDC mới )
264
265
266 # không thành công với PDC s [ d pi d 2 1] và không thành công PDC s [ d pi d 3 1 ]:
267
268
269 print ”\n R o ut es fi cốed \n ! ”
270
271
272
273
274 luồng defadd ow ( self , đường dẫn dữ liệu , nhập khẩu , dst , hành động):
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 21

” ” ”
275 Tôi ssue FlowMod me s sa ge toswitch @ data pat h
276
277 Tellitthatp kt to @dst sho ul d be sendto @inpo rt @ a cti ons : listof P ack .
278 et O ut p ut actions (thường chỉ là một trong những hành động đó)
” ” ”
279
280 ofproto = đường dẫn dữ liệu . củaproto
281
282 match = datapathdst ) ) . ofprotoparser . OFPMatch ( inport = inport , dldst = haddrtobin (

283 # khớp = đường dẫn dữ liệu . ofprotoparser . OFPMatch ( inport = inport , nw d st = dst )
284
285 mod = đường dẫn dữ liệu . ofprotoparser . OFFlowMod (
286 datapath = datapath , match=match coo ki, e =0 ,
287 command= ofproto . THÊM OPFFC, thời gian chờ = 0 mức độ ưu tiên , hết thời gian =0 ,
288 = ofproto. Cờ ƯU TIÊN MẶC ĐỊNH OFP = ofproto . OFPFF GỬI ,
289 FLOW REM, hành động = hành động)
290 đường dẫn dữ liệu. gửi tin nhắn ( mod )
291
292 @ s et ev cl s . E v ntOFPPac ket I n , NGƯỜI ĐIỀU PHỐI CHÍNH )
293 ( ofpeventdefpacketinha ndler ( self , ev ):
” ” ”
294 ” ” ” Tin nhắn xử lý gói tin ( ICMP ) =
295 ev . tin nhắn
296 đường dẫn dữ liệu = tin nhắn. đường dẫn dữ liệu
297 ofproto = datapathofproto .
298 d pi d = datapathid .
299
300 p kt = gói Pack et .
( tin nhắn . data )
301 pkteth = p kt . getprotocol ( ethernetethdst = . ethernet)
302 pktethdst .
303 ethsrc = pkteth # . src
304 ignlldpacket
305 ifpkteth . loại ether == loại ether .LOẠI ETH LLDP:
306 trở lại
307 bản thân . tiều phu . thông tin ( ” gói tin %s ( cổng %s ) từ %sto %s ” , \
308 d pi d , tin nhắn . ,
inportethsrcethdst) ,
309
310 p kt i cm p = p kt . giao thức get ( icmp . icmp )
311 ifp kt i cm p :
312 pktip = p kt . getprotocol ( ipv 4 ipdst = . ipv4 )
313 str ( pktip . dst )
314 #find tại htodsthost
315 ifipdstinselfswtoho st [ d .pi d ] . phím ( ):
316 outport = selfswtoho st .[ d pi d ] [ ipdst ]
317 .
selfloggeroutport .)thông tin ( ” chuyển tiếp %s ” ,
318 # installa flow toav oi dpacketinne xt thời gian e
319 .
hành động = [ datapathofprotoparser . OFPActi o nO ut p ut ( outport ) ]
320 luồng tự
. thêm (datapathinportethdsta ctions)
, tin , ,
321 # selfinportipdstaction
. nhắn . thêm luồng
s ) ( datapath
, tin nhắn . , ,
322 dữ liệu = Không có
323 nếu tin nhắn . đệm == ofproto . OFP KHÔNG CÓ BỘ ĐỆM:
324 dữ liệu = tin nhắn. dữ liệu
325 .
o ut = datapathofprotoparser , \ . OFPacketOut ( \
326 ,
đường dẫn dữ liệu = datapathbufferid = tin nhắn. đệmidinport =
327 ,
tin nhắn. inportactions = actionsdata = data ) ,
328 đường dẫn dữ liệu . gửi tin nhắn ( o ut )
329

330 # @ s et ev cl s ( ofpeventportstatushan .E v nt OFPP hoặc rt St tại chúng tôi , NGƯỜI ĐIỀU PHỐI CHÍNH )
chắc chắn
dler ( self 331 # , ev ):
Machine Translated by Google

CS-558: BÁO CÁO CUỐI CÙNG, THÁNG 5 NĂM 2016 22

” ” ”
332 Tổng quát hơn E v nt P o rtM o di fy ? ” ” ”
#333 tin nhắn = ev. tin nhắn
#334 lý do = tin nhắn. lý do
#335 mô tả
rt no = msg . . cổng không
#336 #
337 # .
ofproto = tin nhắn . datapathofproto
338 # ifreason == ofproto . THÊM OFPPR:
339 .
selfloggerinfo (.” portad de d %s ” , port no )
#340 elifreason == ofproto . XÓA OFPPR:
#341 .
selfloggerinfo (.” đã xóa cổng %s ” , cổng số )
#342 elifreason == ofproto . SỬA ĐỔI OFPPR:
#343 .
selfloggerinfo (.” portmo di fi ed %s ” , cổng số )
#344 khác :
#345 # bản thân . tiều phu . thông tin ( " Tôi sẽ chuyển trạng thái %s %s ” , cổng số , lý do )

You might also like