1008 KiB
Propagacja ataku sieci z wykorzystaniem spacerów losowych
- Marcin Kostrzewski
- Mateusz Tylka
- Krystian Wasilewski
Problem
W jakich topologiach sieci komputerowych potencjalny atak wirusa rozprzestrzeniałby się najszybciej, a w których najwolniej? Aby rozwiązać ten problem zaprojektowaliśmy symulację ataków wirusa na różne rodzaje topologii sieci.
Graf
Grafem nazywamy kolekcję dwóch zbiorów: zbioru wierzchołków V oraz zbioru krawędzi E. Zbiór wierzchołków jest dowolnej postaci. Elementami zbioru krawędzi są e∈E, które są podzbiorami postaci v1,v2 dla pewnych dwóch wierzchołków v1,v2∈V (jeśli graf jest nieskierowany) lub parą uporządkowaną (v1,v2) jeśli graf jest skierowany.
Spacer losowy na grafie
Inaczej błądzenie losowe. Obiekt przemieszczający się na grafie losowo wybiera jeden z sąsiednich do obecnego wezłów, żeby się do nich przemieścić. Ruch ten nie zależy od historii ruchów - tylko ostatnie przemieszczenie jest brane pod uwagę przy podejmowaniu decyzji.
Model
Model sieci reprezentowany jest jako graf nieskierowany. Każdy węzeł reprezentuje w nim urządzenie a krawędzie połączenia między nimi. Węzły zaznaczone na czerwono reprezentują urządzenie zainfekowane przez wirusa, który przemieszcza się do nowych urządzeń spacerem losowym - w każdym kroku wirus wybiera jeden z sąsiadujących węzłów z jednakowym prawdopodobieństwem i próbuje go zainfekować.
Implementacja
W naszym przypadku dana topologia sieci będzie przedstawiona za pomocą grafu nieskierowanego, a wirus będzie infekować sieć przemieszczając się po jego krawędziach za pomocą spaceru losowego.
Kod
Eksperymenty
Magistrala
from network_attack_propagation import bus_experiment
bus_experiment()
MovieWriter ffmpeg unavailable; using Pillow instead.
MovieWriter ffmpeg unavailable; using Pillow instead.
20 NODE bus average degree = 1.9 propagation speed = 1.15 bus0 rounds survived = 24
MovieWriter ffmpeg unavailable; using Pillow instead.
28 NODE bus average degree = 1.93 propagation speed = 2.07 bus8 rounds survived = 59
35 NODE bus average degree = 1.94 propagation speed = 2.09 bus15 rounds survived = 74
Pierścień
from network_attack_propagation import ring_experiment
ring_experiment()
MovieWriter ffmpeg unavailable; using Pillow instead.
MovieWriter ffmpeg unavailable; using Pillow instead.
20 NODE ring average degree = 2 propagation speed = 0.75 ring0 rounds survived = 16
MovieWriter ffmpeg unavailable; using Pillow instead.
28 NODE ring average degree = 2 propagation speed = 1.11 ring8 rounds survived = 32
35 NODE ring average degree = 2 propagation speed = 1.0 ring15 rounds survived = 36
Gwiazda
from network_attack_propagation import star_experiment
star_experiment()
MovieWriter ffmpeg unavailable; using Pillow instead.
MovieWriter ffmpeg unavailable; using Pillow instead.
13 NODE STAR average degree = 1.85 propagation speed = 0.85 star0 rounds survived = 12
MovieWriter ffmpeg unavailable; using Pillow instead.
31 NODE STAR average degree = 1.94 propagation speed = 0.84 star2 rounds survived = 27
MovieWriter ffmpeg unavailable; using Pillow instead.
57 NODE STAR average degree = 1.96 propagation speed = 0.91 star4 rounds survived = 53
91 NODE STAR average degree = 1.98 propagation speed = 0.85 star6 rounds survived = 78
Gwiazda (z odpornością wierzchołków o najwyższych stopniach)
from network_attack_propagation import weighted_star_experiment
weighted_star_experiment()
MovieWriter ffmpeg unavailable; using Pillow instead.
MovieWriter ffmpeg unavailable; using Pillow instead.
13 NODE STAR average degree = 1.85 propagation speed = 1.46 star0 rounds survived = 20
MovieWriter ffmpeg unavailable; using Pillow instead.
31 NODE STAR average degree = 1.94 propagation speed = 1.32 star2 rounds survived = 42
57 NODE STAR average degree = 1.96 propagation speed = 0.84 star4 rounds survived = 49
MovieWriter ffmpeg unavailable; using Pillow instead.
91 NODE STAR average degree = 1.98 propagation speed = 0.77 star6 rounds survived = 71
Wniosek
Najszybciej wirus rozprzestrzenia się w gwieździe, a najwolniej w magistrali.