Stateful Fuzzing of OPC UA
摘要
Fuzzing is a widely used and effective testing technique used to discover bugs in systems. Fuzzers like AFL++ (and its descendants) daily find plenty of bugs in open-source implementations. Unfortunately, the statefulness of some systems (such as protocol implementations) limits the effectiveness of stateless fuzzers since they cannot dig deep into the state model. For such stateful systems, it is necessary to take states into account to get the best results. For example, in recent years, the research community has shown great interest in the security of the OPC UA, a protocol used in Industrial Control Systems. Although a few bugs were found during previous analyses of the protocol, they did not consider the statefulness of the protocol. In this paper, we fuzz three OPC UA implementations with three different fuzzers (AFLnwe, BooFuzz and AFLNet) and find three novel bugs overlooked in the previous analyses. Our results highlight the importance of considering the systems’ stateful nature when choosing the fuzzer to use. Also, they emphasise the importance of having complete grammar when opting for grammar-based fuzzers, i.e., fuzzers that need the messages and state model specification in input.