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.

错误:搜索内容不能为空,请输入英文关键词
错误:关键词超出字数限制,请精简
高级检索

Stateful Fuzzing of OPC UA

  • Cristian Daniele,
  • Mark Fijneman,
  • Erik Poll

摘要

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.