Randomized Testing of Byzantine Fault Tolerant Algorithms

Journal Article (2023)
Authors

Levin N. Winter (Student TU Delft)

Florena Buşe (Student TU Delft)

Daan de Graaf (Student TU Delft)

Klaus von Gleissenthall (Vrije Universiteit Amsterdam)

Burcu Kulahcioglu Kulahcioglu Ozkan (TU Delft - Software Engineering)

Research Group
Software Engineering
Copyright
© 2023 Levin N. Winter, Florena Buşe, Daan de Graaf, Klaus von Gleissenthall, Burcu Kulahcioglu Ozkan
To reference this document use:
https://doi.org/10.1145/3586053
More Info
expand_more
Publication Year
2023
Language
English
Copyright
© 2023 Levin N. Winter, Florena Buşe, Daan de Graaf, Klaus von Gleissenthall, Burcu Kulahcioglu Ozkan
Research Group
Software Engineering
Issue number
OOPSLA(1)
Volume number
7
Pages (from-to)
757-788
DOI:
https://doi.org/10.1145/3586053
Reuse Rights

Other than for strictly personal use, it is not permitted to download, forward or distribute the text or part of it, without the consent of the author(s) and/or copyright holder(s), unless the work is under an open content license such as Creative Commons.

Abstract

Byzantine fault-tolerant algorithms promise agreement on a correct value, even if a subset of processes can deviate from the algorithm arbitrarily. While these algorithms provide strong guarantees in theory, in practice, protocol bugs and implementation mistakes may still cause them to go wrong. This paper introduces ByzzFuzz, a simple yet effective method for automatically finding errors in implementations of Byzantine fault-tolerant algorithms through randomized testing. ByzzFuzz detects fault-tolerance bugs by injecting randomly generated network and process faults into their executions. To navigate the space of possible process faults, ByzzFuzz introduces small-scope message mutations which mutate the contents of the protocol messages by applying small changes to the original message either in value (e.g., by incrementing the round number) or in time (e.g., by repeating a proposal value from a previous message). We find that small-scope mutations, combined with insights from the testing and fuzzing literature, are effective at uncovering protocol logic and implementation bugs in real-world fault-tolerant systems.

We implemented ByzzFuzz and applied it to test the production implementations of two popular blockchain systems, Tendermint and Ripple, and an implementation of the seminal PBFT protocol. ByzzFuzz detected several bugs in the implementation of PBFT, a potential liveness violation in Tendermint, and materialized two theoretically described vulnerabilities in Ripple’s XRP Ledger Consensus Algorithm. Moreover, we discovered a previously unknown fault-tolerance bug in the production implementation of Ripple, which is confirmed by the developers and fixed.