
2 Raphaël Ollando, Seung Yeob Shin, and Lionel C. Briand
In the context of developing SDN-systems, software testing becomes even more important and
challenging when compared to what is required in traditional networks that provide static and
predictable operations. In particular, even though the centralized controller in an SDN-system
enables exible and ecient services, it can undermine the entire communication network it man-
ages. A software controller presents new attack surfaces that allow malicious users to manipulate
the systems [
16
,
53
]. For example, if malicious users intercept and poison communication in the
system (using ARP spoong [
14
]), such attacks broadly impact the system due to its centralized
control. Furthermore, the centralized controller interacts with diverse kinds of components such as
applications and network switches, which are typically developed by dierent vendors. Hence, the
controller is prone to receiving unexpected inputs provided by applications, switches, or malicious
users, which may cause system failures, e.g., communication breakdown.
To test an SDN controller, engineers need rst to explore its possible input space, which is
very large. A controller takes as input a stream of control messages which are encoded according
to an SDN communication protocol (e.g., OpenFlow [
45
]). For example, if a control message is
encoded with OpenFlow, it can have 2
2040
distinct values [
45
]. Second, engineers need to under-
stand the characteristics of test data, i.e., control messages, that cause system failures. However,
manually inspecting test data that cause failures is time-consuming and error-prone. Furthermore,
misunderstanding such causes typically leads to unreliable xes.
There are a number of prior research strands that aim at testing SDN-systems [
1
,
2
,
5
,
11
,
29
,
35
,
43
,
62
,
64
]. Most of them come from the network research eld and focus on security testing
relying on domain knowledge, e.g., known attack scenarios [
35
]. The most pertinent research
works applied fuzzing techniques to dierent components of SDN-systems. For example, RE-
CHECKER [
62
] fuzzes RESTful services provided by SDN controllers. SwitchV [
1
] relies on fuzzing
and symbolic execution to test SDN switches. BEADS [
29
] tests SDN controllers by being aware
of the OpenFlow specication. However, none of these fuzzing techniques employ interpretable
machine learning techniques to guide their fuzzing process and to provide models that characterize
failure-inducing conditions. Even though the software engineering community has introduced
numerous testing methods, testing SDN-systems has gained little attention. The most pertinent
research lines have proposed techniques for learning-based fuzzing [
10
,
23
,
65
] and abstracting
failure-inducing inputs [
24
,
30
] to eciently explore the input space and characterize eective
test data that cause system failures. Learn@Fuzz [
23
] employs neural-network-based learning
methods for building a model of PDF objects for grammar-based fuzzing. A prior learning-guided
fuzzing technique, named smart fuzzing [
10
], relies on deep learning techniques to test systems
controlled by programmable logic controllers (PLC). SeqFuzzer [
65
] uses deep learning techniques
to infer communication protocols underlying PLC systems and generate fuzzed messages. However,
deep learning techniques are not suitable to characterize failure-inducing test data as they do not
provide interpretable models. Furthermore, these techniques do not account for the specicities of
SDNs, such as SDN architecture and communication protocol. Existing work on abstracting failure-
inducing inputs [
24
,
30
] targets software programs that take as input strings such as command-line
utilities (e.g., nd and grep), which are signicantly dierent from SDN-systems. In summary,
no existing work simultaneously tackles the problem of eciently exploring the input space and
accurately characterizing failure-inducing test data while accounting for the specicities of SDNs.
Contributions. In this article, we propose FuzzSDN, a machine learning-guided
Fuzz
ing method
for testing
SDN
-systems. In particular, FuzzSDN targets software controllers deployed in SDN-
systems. FuzzSDN relies on fuzzing guided by machine learning (ML) to both (1) eciently explore
the test input space of an SDN-system’s controller (generate test data leading to system failures) and
(2) learn failure-inducing models that characterize input conditions under which the system fails.
This is done in a synergistic manner where models guide test generation and the latter also aims at
, Vol. 1, No. 1, Article . Publication date: January 2024.