Software-defined networks (SDN) enable flexible and effective communication systems, e.g., data centers, that are managed by centralized software controllers. However, such a controller can undermine the underlying communication network of an SDN-based system and thus must be carefully tested. When an SDN-based system fails, in order to address such a failure, engineers need to precisely understand the conditions under which it occurs. In this paper, we introduce a machine learning-guided fuzzing method, named FuzzSDN, aiming at both (1) generating effective test data leading to failures in SDN-based systems and (2) learning accurate failure-inducing models that characterize conditions under which such system fails. This is done in a synergistic manner where models guide test generation and the latter also aims at improving the models. To our knowledge, FuzzSDN is the first attempt to simultaneously address these two objectives for SDNs. We evaluate FuzzSDN by applying it to systems controlled by two open-source SDN controllers. Further, we compare FuzzSDN with two state-of-the-art methods for fuzzing SDNs and two baselines (i.e., simple extensions of these two existing methods) for learning failure-inducing models. Our results show that (1) compared to the state-of-the-art methods, FuzzSDN generates at least 12 times more failures, within the same time budget, with a controller that is fairly robust to fuzzing and (2) our failure-inducing models have, on average, a precision of 98% and a recall of 86%, significantly outperforming the baselines.
翻译:由软件定义的网络(SDN)能够使由中央软件控制器管理的灵活而有效的通信系统,例如数据中心,由中央软件控制器管理。然而,这样的控制器可以破坏基于SDN的系统的基本通信网络,因此必须仔细测试。当基于SDN的系统失败时,为了解决这种失败,工程师需要准确理解发生失败的条件。在本文中,我们引入了机器学习引导的模糊方法,名为FuzzSDN,目的是:(1) 产生有效的测试数据,导致基于SDN的系统失败,(2) 学习精确的故障诱导模型,这是系统失败的特征。这是以协同方式进行的,模型指导生成,而后者也是为了改进模型。据我们了解,FuzdsDN是同时处理SDN的这两个目标的首个尝试。我们通过将FuzzzDDN应用到两个开放源SDN控制器控制的系统,我们将FizsDN与两个最高级的测试方法都比起来, 将FizSDN的精确度方法比起来,在两种最差的精确的基线方法里, 和两个基准(i) 将我们的正常的运行方法比得更精确地显示我们目前12次的失败的方法。这些方法的精确的推延延延延。比。在12次。我们的现有方法。