4.2.2. Tiết lộ thông tin (Information Disclosure)
Tấn công tiết lộ thông tin đề cập đến việc những kẻ xâm nhập cố gắng thực hiện một cuộc tấn công bằng cách tiêu thụ nhiều tài nguyên khác nhau [14]. Bằng cách tính tốn thời gian phản hồi của việc xử lý các gói tin khác nhau, có thể biết liệu sự tấn cơng tiết lộ thơng tin có thể thành cơng trong dịch vụ định tuyến của SDN hay không.
Tiết lộ thơng tin có nghĩa là thơng tin không được công khai sẽ được thu thập. Những nội dung của bảng luồng trong mỗi chuyển mạch hoặc bảng cấu trúc liên kết trong mỗi bộ điều khiển được biết bởi những kẻ xâm nhập. Do đó, mạng SDN được tạo thành từ bộ chuyển mạch hoặc bộ điều khiển đang ở trong tình trạng rất nguy hiểm.
Trong phần này, mô phỏng các hành vi sử dụng CSP. Đầu tiên, giới thiệu một tiến trình phụ có tên là Clock. Nếu Clock nhận được một yêu cầu tại thời điểm hiện tại thơng qua kênh time, nó sẽ trả lại thời gian i cho thực thể cần nó.
𝐶𝑙𝑜𝑐𝑘(𝑖) =𝑑𝑓 (𝑡𝑖𝑐𝑘 → 𝐶𝑙𝑜𝑐𝑘(𝑖 + 1))
(𝑡𝑖𝑚𝑒? 𝑟𝑒𝑞𝑢𝑒𝑠𝑡 → 𝑡𝑖𝑚𝑒! 𝑖 → 𝐶𝑙𝑖𝑐𝑘(𝑖)). (4.15)
Bây giờ, sẽ thay đổi mơ hình của InputBuffer như bên dưới. Khi chuyển ra một thơng điệp từ tiến trình InputBuffer, nó sẽ nhận được thời gian hiện tại dựa trên tiến trình
Clock. Event_NoChange được sử dụng để biểu thị cho những hành vi trong InputBuffer
không thực hiện bất kỳ thay đổi nào, bao gồm cả việc nhận gói tin từ các thiết bị chuyển mạch khác và tiến trình SwitchProcessor. 𝐼𝑛𝑝𝑢𝑡𝐵𝑢𝑓𝑓𝑒𝑟𝑖(𝐼𝑛𝑝𝑢𝑡𝑀𝑠𝑔𝑖) =𝑑𝑓 ( 𝐸𝑣𝑒𝑛𝑡_𝑁𝑜𝐶ℎ𝑎𝑛𝑔𝑒 (𝑡𝑖𝑚𝑒! 𝑟𝑒𝑞𝑢𝑒𝑠𝑡𝑡𝑖𝑚𝑒 → 𝑡𝑖𝑚𝑒? 𝑡 → 𝑃𝑎𝑐𝑘𝑒𝑡𝑡𝑜𝑃𝑟𝑜𝑐𝑒𝑠𝑠𝑖! 𝑠𝑟𝑐. 𝑑𝑠𝑡 → 𝐼𝑛𝑝𝑢𝑡𝐵𝑢𝑓𝑓𝑒𝑟𝑖(𝐼𝑛𝑝𝑢𝑡𝑀𝑠𝑔𝑖 − 〈𝑠𝑟𝑐. 𝑑𝑠𝑡〉)) ).(4.16)
Nếu một kẻ xâm nhập muốn thực hiện một cuộc tấn cơng, những gì hắn cần làm chỉ là gửi ba thơng điệp từ tiến trình InputBuffer đến SwitchProcessor để được xử lý. Ba thông điệp này là messA, messB và messC. Khi một thơng điệp được giải quyết hồn
tồn, việc xử lý thơng điệp tiếp theo sẽ bắt đầu. Do đó, khi messC được gửi đi, hắn ta có thể tính tốn thời gian xử lý messA và messB tương ứng. Nếu thời gian tiêu tốn của messA bằng thời gian của messB, thì hắn ta khơng thể tìm thấy bất kỳ thứ gì. Nếu thời gian xử lý của messA nhỏ hơn của messB, hắn ta suy đốn rằng src và dst trong thơng điệp đầu tiên nằm trong bảng luồng. Trong trường hợp này, thơng tin chính của một mục nhập luồng trong bảng luồng sẽ bị lộ cho kẻ xâm nhập.
Trong PAT, trước khi gửi thông điệp đầu tiên, sẽ ghi lại thời gian hiện tại được gọi là time0. Time1 được sử dụng để biểu thị thời gian sau khi giải quyết hồn tồn thơng điệp đầu tiên. Với ứng dụng time2, nó hiển thị thơng điệp thứ hai đã được xử lý. Do đó,
(time1-time0) mơ tả thời gian xử lý gói đầu tiên, trong khi (time2-time1) được sử dụng
luồng, nó sẽ tốn 10 đơn vị thời gian do bộ điều khiển của nó. Nếu khơng, nó có thể kết thúc chuyển tiếp trong vịng 1 đơn vị thời gian. Bằng cách phân tích sự khác biệt giữa
(time1-time0) và (time2-time1), có thể kiểm tra xem nội dung chính của gói tin đầu tiên
có bị kẻ xâm nhập biết hay không. Nếu hiệu số bằng 9 (10 trừ 1), kẻ tấn cơng có thể thành cơng. Nếu khơng, hắn ta sẽ thất bại.
#𝑑𝑒𝑓𝑖𝑛𝑒 𝑖𝑠𝐷𝑖𝑠𝑐𝑙𝑜𝑠𝑢𝑟𝑒 (𝑡𝑖𝑚𝑒1 − 𝑡𝑖𝑒𝑚0) == ((𝑡𝑖𝑚𝑒2 − 𝑡𝑖𝑚𝑒1) − 9); (4.17) #𝑎𝑠𝑠𝑒𝑟𝑡 𝐼𝑛𝑓𝑜𝑟𝐷𝑖𝑠𝑐𝑙𝑜𝑠𝑢𝑟𝑒 𝑟𝑒𝑎𝑐ℎ𝑒𝑠 𝑖𝑠𝐷𝑖𝑠𝑐𝑙𝑜𝑠𝑢𝑟𝑒; . (4.18)
Từ kết quả đó, có thể biết rằng src và dst trong thông điệp đầu tiên tồn tại trong bảng luồng và cuộc tấn công đã thành công.
Common
Fake
Intercept
Fake Intercept
4.2.3. Kẻ xâm nhập giả mạo (Intruder faking)
Như đã biết, chuyển mạch giao tiếp với bộ điều khiển thơng qua kênh an tồn. Các kênh an toàn dựa trên TLS, tên viết tắt của Transport Layer Security (Bảo mật tầng truyền tải) như được quy định trong giao thức OpenFlow [6]. Tuy nhiên, bản thân TLS khơng an tồn và phải đối mặt với rất nhiều cuộc tấn công như MIMT Attack [29] và Cuộc tấn công tạo chứng chỉ bắt buộc [30].
Do đó, việc giao tiếp giữa bộ chuyển mạch và bộ điều khiển cũng phải đối mặt với những rủi ro. Sự truyền thông giữa bộ điều khiển và bộ điều khiển hoặc giữa các chuyển mạch mà khơng có bất kỳ biện pháp bảo vệ nào, sẽ nguy hiểm hơn.
Trong các tình huống, cho phép những kẻ xâm nhập thực hiện các hành động như chặn tin nhắn khi các thực thể giao tiếp với nhau hoặc giả mạo các tin nhắn và sau đó gửi đến các thực thể bình thường khác.
Ví dụ đơn giản chứa một chuyển mạch và bộ điều khiển được đưa ra như trong
Hình 4.9. Ở đây, các kênh kết nối các thực thể bình thường được đánh dấu là Common.
Những người khác được sử dụng giữa kẻ xâm nhập và các thiết bị bình thường, chẳng hạn như Fake.
Hình 4.9. Giao tiếp với kẻ xâm nhập [2]
Ở đây đưa ra một mơ hình chính thức của hệ thống con, chỉ đơn thuần xem xét tiến trình InstructBuffer. Việc đổi tên CSP được sử dụng ở đây. Tiến trình này có thể thực hiện sự kiện 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑆𝑒𝑐𝑢𝑟𝑒𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡 hoặc 𝐹𝑎𝑘𝑒? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡 bất cứ khi nào nó thực hiện một sự kiện tương ứng 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑆𝑒𝑐𝑢𝑟𝑒𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡.
Hơn nữa, nó có thể được giải thích trong cơng thức (4.19) và (4.20). Và các hệ
Switch Controller
thống con khác cũng tương tự như hệ thống này. 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝐵𝑢𝑓𝑓𝑒𝑟𝑖(𝐼𝑛𝑠𝑡𝑟𝑀𝑠𝑔𝑖 =𝑑𝑓 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝐵𝑢𝑓𝑓𝑒𝑟𝑖(𝐼𝑛𝑠𝑡𝑟𝑀𝑠𝑔𝑖) [[𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑆𝑒𝑐𝑢𝑟𝑒𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡 ← 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑆𝑒𝑐𝑢𝑟𝑒𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡, ...(4.19) 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑆𝑒𝑐𝑢𝑟𝑒𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡 ← 𝐹𝑎𝑘𝑒? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡, ...(4.20) 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑡𝑜𝑃𝑟𝑜𝑐𝑒𝑠𝑠𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡 ← 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑡𝑜𝑃𝑟𝑜𝑐𝑒𝑠𝑠𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡, ...(4.21) 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑡𝑜𝑃𝑟𝑜𝑐𝑒𝑠𝑠𝑖? 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡 ← 𝐼𝑛𝑡𝑒𝑟𝑐𝑒𝑝𝑡! 𝑠𝑟𝑐. 𝑑𝑠𝑡. 𝑝𝑜𝑟𝑡]]. ...(4.22)
Ở đây sẽ đưa ra một minh họa ngắn gọn về các hành vi của kẻ xâm nhập. I biểu thị những gì kẻ xâm nhập đã biết. Hàm info được sử dụng để khiến kẻ xâm nhập lấy được các phần khác nhau của thông điệp như info(src.dst) = src, dst, nghĩa là kẻ xâm
nhập hiểu được thông điệp chứa src và dst.
𝐼𝑛𝑡𝑟𝑢𝑑𝑒𝑟(𝐼) =𝑑𝑓 (
𝐶𝑜𝑚𝑚. 𝑚 → 𝐼𝑛𝑡𝑟𝑢𝑑𝑒𝑟0(𝐼 ∪ 𝑖𝑛𝑓𝑜(𝑚)) … (4.23) 𝐼𝑛𝑡𝑒𝑟𝑐𝑒𝑝𝑡. 𝑚 → 𝐼𝑛𝑡𝑟𝑢𝑑𝑒𝑟0(𝐼 ∪ 𝑖𝑛𝑓𝑜(𝑚) … (4.24) 𝐹𝑎𝑘𝑒. 𝑚 → 𝐼𝑛𝑡𝑟𝑢𝑑𝑒𝑟0(𝐼) … (4.25)
)
Phần đầu tiên trong Intruder mơ tả rằng thơng điệp có thể bị rò rỉ. Một khi kẻ xâm nhập nghe được một thơng điệp, nó sẽ làm cho thơng tin của nó trở nên phong phú hơn, có thể được mơ tả trong công thức (4.23). Trong phần thứ hai, kẻ tấn cơng chặn thơng điệp và nó thêm thơng điệp vào bộ nhớ của nó. Sử dụng cơng thức (4.24) để giải thích trường hợp này. Nếu kẻ tấn cơng giả mạo một thơng điệp, nó khơng thể lấy thêm thơng tin như được hiển thị trong cơng thức (4.25). Khi tiến trình Intruder được thêm vào hệ
thống ban đầu, hệ thống sẽ khơng an tồn nữa. Hơn nữa, các hệ thống có thể được cập nhật như sau:
𝑆𝑦𝑠𝑡𝑒𝑚_1 =𝑑𝑓 𝑆𝑦𝑠𝑡𝑒𝑚_𝐻 || 𝐼𝑛𝑡𝑟𝑢𝑑𝑒𝑟(𝐼) (4.26) 𝑆𝑦𝑠𝑡𝑒𝑚_2 =𝑑𝑓 𝑆𝑦𝑠𝑡𝑒𝑚_𝐾 || 𝐼𝑛𝑡𝑟𝑢𝑑𝑒𝑟(𝐼). (4.27)
Chỉ một bộ chuyển mạch / bộ điều khiển làm cho thông tin được gửi đi một bộ điều khiển / bộ chuyển mạch nhất định mới có thể lấy được thơng tin đó. Do đó, số lượng thơng điệp được gửi từ tất cả các thực thể được cho là giống với số lượng các thơng điệp mà các thực thể đó nhận được.
Để kiểm tra nó, sẽ lấy tiến trình gửi chỉ thị từ bộ điều khiển đến chuyển mạch làm ví dụ. Sau đó, sử dụng một khẳng định để mơ tả tình huống này.
#𝑑𝑒𝑓𝑖𝑛𝑒 𝑖𝑠𝐹𝑎𝑘𝑒 𝑐𝑜𝑢𝑛𝑡𝑆𝑒𝑛𝑑 > 𝑐𝑜𝑢𝑛𝑡𝑅𝑒𝑐𝑒𝑖𝑣𝑒; (4.28) #𝑎𝑠𝑠𝑒𝑟𝑡 𝐹𝑎𝑘𝑒𝑃𝑎𝑡ℎ 𝑟𝑒𝑎𝑐ℎ𝑒𝑠 𝑖𝑠𝐹𝑎𝑘𝑒; (4.29)
Biến countSend và countReceive được sử dụng để ghi lại số lần gửi và nhận thông tin tương ứng. Các giá trị ban đầu là 0. Khi sự khác biệt giữa countSend và countReceive khơng bằng 0, ta có thể khai báo sự tồn tại của một đường dẫn giả trong mạng. Hình 4.11 cho thấy một mơ phỏng về giao tiếp với một đường dẫn giả. Do thực tế là addSend xuất hiện hai lần và sự kiện addReceive xuất hiện một lần, điều đó có nghĩa là một đường dẫn giả xuất hiện khi một chuyển mạch nhất định nhận được lệnh từ chủ sở hữu của nó.
Hình 4.11. Mơ phỏng cho một thơng điệp giả mạo
4.2.4. Tin nhắn giả mạo (A tampered message)
Như mơ hình ở trên, cũng có thể kiểm chứng xem các thơng điệp đã bị giả mạo hay chưa. Một cách để kiểm chứng nó là đánh giá xem tin nhắn khi được gửi đi có giống với tin nhắn khi nhận được hay khơng. Trong tiến trình gửi lệnh từ bộ điều khiển đến
một bộ chuyển mạch, kẻ xâm nhập có thể thêm một số bộ chuyển mạch hoặc một số cổng vào lệnh. Chúng cũng có thể được sửa đổi hoặc xóa bởi kẻ tấn cơng. Xác nhận được mô tả trong PAT như dưới đây.
#𝑑𝑒𝑓𝑖𝑛𝑒 𝑖𝑛𝑐𝑜𝑛𝑠𝑖𝑠𝑡𝑒𝑛𝑡 𝑛𝑒𝑤𝑑𝑠𝑡! = 𝑜𝑙𝑑𝑑𝑠𝑡; (4.30) #𝑎𝑠𝑠𝑒𝑟𝑡 𝐼𝑛𝑐𝑜𝑛𝑠𝑖𝑠𝑡𝑒𝑛𝑡𝑀𝑠𝑔 𝑟𝑒𝑎𝑐ℎ𝑒𝑠 𝑖𝑛𝑐𝑜𝑛𝑠𝑖𝑠𝑡𝑒𝑛𝑡;. (4.31)
Hình 4.12. Kết quả kiểm chứng Tin nhắn giả mạo
Newdst và olddst được sử dụng để biểu thị giá trị của đích thu được bởi chuyển
mạch và được gửi từ bộ điều khiển. Với điều kiện newdst không bằng olddst, nó tuyên bố rằng chỉ thị đã bị giả mạo.
Những gì có thể học được từ chỉ thị, switch4 là điểm cuối của dịch vụ định tuyến. Thứ nhất, kẻ xâm nhập chặn thông điệp. Để làm xáo trộn giao tiếp giữa bộ điều khiển và chuyển mạch, nó thay đổi điểm đích thành switch3, sau đó gửi chỉ thị tới chuyển mạch.
InstructSecure[1].0.3.2 là viết tắt của lệnh thu được bởi một chuyển mạch. Vì lý do được
minh họa ở trên, biết rằng thông điệp đã bị giả mạo bởi một kẻ xâm nhập.
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
5.1. Kết luận
Trong Hình 4.1, Hình 4.2, Hình 4.3, Hình 4.4, Hình 4.5, Hình 4.6, có thể thấy
rằng tất cả các thuộc tính đều hợp lệ. Có nghĩa các hệ thống trong kiến trúc HyperFlow và kiến trúc Kandoo đáp ứng cho các thuộc tính đó. Tuy nhiên, tính nhất qn và khôi phục lỗi duy nhất chỉ phục vụ cho hệ thống trong kiến trúc HyperFlow. Kết quả cho biết rằng SDN theo kiến trúc đa bộ điều khiển có một số chức năng bổ sung, so với SDN với bộ điều khiển đơn và mạng truyền thống. Ví dụ, nó có khả năng phục hồi với lỗi điểm đơn. Do đó, hiệu suất của mạng có thể được nâng cao.
Trong Hình 4.7, Hình 4.8, Hình 4.9, Hình 4.10, Hình 4.11, Hình 4.12, Hình 4.13, mơ tả các kết quả kiểm chứng thuộc tính bảo mật được hiển thị đều hợp lệ. Các hình cho biết rằng ngồi việc đối phó với Từ chối dịch vụ bằng phương pháp được mô tả trong [15], hệ thống vẫn đối mặt với một số vấn đề về bảo mật.
5.2. Hướng phát triển
Đề tài luận văn này được tập trung vào việc mơ hình hóa dịch vụ định tuyến của SDN với đa bộ điều khiển trên cơ sở giao thức OpenFlow, đặc biệt là kiến trúc HyperFlow và kiến trúc Kandoo. Dựa trên các mơ hình được hình thức như trên và đã được triển khai chúng trong PAT. Đã kiểm chứng được ba thuộc tính như sau: tính khơng có bế tắc, tính nhất qn và khả năng chịu lỗi. Hơn nữa, tính bảo mật của mạng đã được nghiên cứu thêm xử lý với Từ chối Dịch vụ và Tiết lộ Thơng tin. Ngồi ra, một đường dẫn giả có thể tồn tại trong mạng và đường dẫn có thể bị giả mạo khi được cung cấp. Kết quả cho biết rằng mạng phục vụ cho các thuộc tính đó khơng an tồn ở một số khía cạnh. An ninh của mạng vẫn còn một số vấn đề trong đề tài luận văn. Trong tương lai đề tài luận văn cần phải tiếp tục làm việc để phát triển cho việc bảo mật giữa các bộ điều khiển (hoặc giữa các bộ chuyển mạch) cũng như giữa các bộ chuyển mạch và các bộ điều khiển. Hơn nữa, sẽ có kế hoạch đưa ra một số giao thức để đảm bảo sự an toàn của giao tiếp giữa các thực thể này.
TÀI LIỆU THAM KHẢO
[1]. Diego Kreutz, Fernando M.V. Ramos, and Paulo Verissimo. Towards secure and dependable software-defined networks. In Proceedings of the Second ACM SIGCOMM
Workshop on Hot Topics in Software Defined Networking, HotSDN ’13, page 55–60,
New York, NY, USA, 2013. Association for Computing Machinery.
[2]. Lili Xiao, Huibiao Zhu, Shuangqing Xiang, and Phan Cong Vinh. Modeling and verifying sdn under multi-controller architectures using csp. Concurrency and Computation: Practice and Experience, 33(2):e5334, 2021. e5334 cpe.5334.
[3]. PAT. System architecture and communicating sequential programs module availabe: https://pat.comp.nus.edu.sg/wp-source/resources/OnlineHelp/htm/index.htm. [4]. Jun Sun, Yang Liu, and Jin Song Dong. Model checking csp revisited: Introducing a process analysis toolkit. In Tiziana Margaria and Bernhard Steffen, editors,
Leveraging Applications of Formal Methods, Verification and Validation, pages 307–
322, Berlin, Heidelberg, 2008. Springer Berlin Heidelberg.
[5]. Lili Xiao, Shuangqing Xiang, and Huibiao Zhuy. Modeling and verifying sdn with multiple controllers. In Proceedings of the 33rd Annual ACM Symposium on Applied Computing, SAC ’18, page 419–422, New York, NY, USA, 2018. Association
for Computing Machinery.
[6]. ONF. Onf: Open networking foundation. availabe: https://www.opennetworking.org/.
[7]. Lê Thị Thúy. Phân tích và kiểm chứng kiến trúc haystack trong mạng xã hội facebook. 2021.
[8]. Csp & actor model. availabe:
https://www.programmersought.com/article/73484520845/, [Accessed 07/30/2021]. [9]. Ling Shi, Yang Liu, Jun Sun, Jin Song Dong, and Gustavo Carvalho. An analytical and experimental comparison of csp extensions and tools. In Toshiaki Aoki and Kenji Taguchi, editors, Formal Methods and Software Engineering, pages 381–397,
Berlin, Heidelberg, 2012. Springer Berlin Heidelberg.
[10]. Diego Kreutz, Fernando M. V. Ramos, Paulo Esteves Veríssimo, Christian Esteve Rothenberg, Siamak Azodolmolky, and Steve Uhlig. Software-defined networking: A comprehensive survey. Proceedings of the IEEE, 103(1):14–76, 2015.
[11]. Ying Li, Ligang Dong, Jianping Qu, and Huafei Zhang. Multiple controller management in software defined networking. In 2014 IEEE Symposium on Computer Applications and Communications, pages 70–75, 2014.
[12]. Hui-Ching Hsieh and Yen-Chiu Chen. Improving the fault-tolerance for controllers’ negotiation model under multi-domain sdn environments. In 2015 International Conference on Cloud Computing and Big Data (CCBD), pages 321–326,
2015.
[13]. Stefan Schmid and Jukka Suomela. Exploiting locality in distributed sdn control.
In Proceedings of the Second ACM SIGCOMM Workshop on Hot Topics in Software Defined Networking, HotSDN ’13, page 121–126, New York, NY, USA, 2013.
Association for Computing Machinery.
[14]. Rowan Kloti, Vasileios Kotronis, and Paul Smith. Openflow: A security analysis.
In 2013 21st IEEE International Conference on Network Protocols (ICNP), pages 1–6,
2013.
[15]. Mohan Dhawan, Rishabh Poddar, Kshiteej Mahajan, and Vijay Mann. SPHINX: detecting security attacks in software-defined networks. In 22nd Annual Network and
Distributed System Security Symposium, NDSS 2015, San Diego, California, USA,
February 8-11, 2015. The Internet Society, 2015.
[16]. C. A. R. Hoare. Communicating Sequential Processes. Prentice-Hall, Inc., USA, 1985.
[17]. PAT. Process analysis toolkit availabe: https://pat.comp.nus.edu.sg/.
[18]. Amin Tootoonchian and Yashar Ganjali. Hyperflow: A distributed control plane for openflow. In Proceedings of the 2010 Internet Network Management Conference on
Research on Enterprise Networking, INM/WREN’10, page 3, USA, 2010. USENIX
Association.
[19]. Jeremy Stribling, Yair Sovran, Irene Zhang, Xavid Pretzer, Jinyang Li, M. Frans Kaashoek, and Robert Morris. Flexible, wide-area storage for distributed systems with wheelfs. In Proceedings of the 6th USENIX Symposium on Networked Systems Design
and Implementation, NSDI’09, page 43–58, USA, 2009. USENIX Association.
[20]. Soheil Hassas Yeganeh and Yashar Ganjali. Kandoo: A framework for efficient and scalable offloading of control applications. In Proceedings of the First Workshop on
Hot Topics in Software Defined Networks, HotSDN ’12, page 19–24, New York, NY,
USA, 2012. Association for Computing Machinery
[21]. G. Lowe and B. Roscoe. Using csp to detect errors in the tmn protocol. IEEE Transactions on Software Engineering, 23(10):659–669, 1997.
[22]. Bettina Buth, Michel Kouvaras, Jan Peleska, and Hui Shi. Deadlock analysis for a fault-tolerant system. In Proceedings of the 6th International Conference on Algebraic
Methodology and Software Technology, AMAST ’97, page 60–74, Berlin, Heidelberg,
1997. Springer-Verlag.
[23]. Syed Waleed, Muhammad Faizan, Maheen Iqbal, and Muhammad Irfan Anis. Demonstration of single link failure recovery using bellman ford and dijikstra algorithm in sdn. In 2017 International Conference on Innovations in Electrical Engineering and
Computational Technologies (ICIEECT), pages 1–4, 2017.
[24]. Talal Alharbi, Marius Portmann, and Farzaneh Pakzad. The (in)security of topology discovery in software defined networks. In 2015 IEEE 40th Conference on Local Computer Networks (LCN), pages 502–505, 2015.
[25]. Jun Sun, Yang Liu, Jin Song Dong, and Jun Pang. Pat: Towards flexible verification under fairness. In Ahmed Bouajjani and Oded Maler, editors, Computer Aided Verification, pages 709–714, Berlin, Heidelberg, 2009. Springer Berlin
[26]. Yuanjie Si, Jun Sun, Yang Liu, Jin Dong, Jun Pang, Shao Zhang, and Xiaohu Yang. Model checking with fairness assumptions using pat. Frontiers of Computer