Hi everybody, my name is Mark Henderson. I’m the VP of Engineering at Equilibrium and part of the Ziggurat team. We are interested in expanding our coverage to The Graph network and, as per the grant instructions, are soliciting feedback on our approach before applying.
We have successfully applied the Ziggurat process to ZCash, XRPL, and Algorand, finding networking layer bugs and security vulnerabilities in their P2P networks which are very similar to the one that powers The Graph. Our claim is that, one day soon, a malicious attack on a peer-to-peer network will take down an entire blockchain. The ultimate goal of Ziggurat is to prove our own claim wrong.
Ziggurat expands beyond the standard suite of network tests coupled with the node by reverse engineering the network protocol to create a “synthetic node” that speaks the network protocol and then and using the it to perform a battery of black box tests that validate the networking spec, test the nodes under load, and simulate things like malicious intent.
The overall steps are:
1. Pre-flight checks
- Study of existing network documentation and/or code base
- Liaising with existing developers
- Set up existing test harness
2. Reverse engineer the network protocol via the use of a synthetic node
3. Write the test suite for a single network node
- Identify instances where a node’s behavior is non-conformant to spec
- “Fuzz” the inputs with unexpected values
- Test performance under heavy load / DoS conditions
- Emulate malicious actors and disclose findings
4. Expand test suite to network wide
- Crawl the network looking for reachable nodes via the network layer (not RPC)
- Analyze network topography to detect centrality and islands
- Conduct “red team” exercises on testnet
We would be thrilled to perform any or all of these activities for The Graph’s network. A successful implementation will likely find critical bugs and flaws in the existing network implementation, or at least convincingly validate the robustness of the existing network implementation in the absence of bugs and flaws.
Ziggurat not only helps existing node developers harden their implementations, it also makes it easier for others to create their own node implementations.
Please let us know what you think, and if you have any questions/comments/suggestions!