Peer-to-Peer (P2P) Network Testing

This is a work in progress.

Peer-to-Peer network node(s) need(s) to be robust enough to protect from DDoS attacks, malformed packets, brute-force attacks, and any unwanted or unauthorized access.

Network should have triggers that allow for back-off time periods or lock-out. You can incorporate the use of  https://suricata-ids.org/ and https://www.snort.org/ ideas into detection.  IDS/IPS/IMS.

Tests should run some sort of vulnerability assessment scanning method on host especially on exposed network sockets. Vulnerability assessment scanning tools like http://www.openvas.org/https://www.metasploit.com/, Nessus or https://www.kali.org/ have a good use case.

Custom security scripts for RChain could easily be written.

Load generator that can crank up traffic through RChain components and functions should be written. This could test network as well as component thresholds for functionality. You always want to find breaking points in something when it is not in production and then set mitigation controls.

The sooner you stop information in the OSI model (https://en.wikipedia.org/wiki/OSI_model) from a "bad actor" the better. It would be could to "lock-out" bad actors at network layer. You could use firewall on system to do this. Something to be considered.


Just testing the network through put of node.

Tools like iperf https://sourceforge.net/projects/iperf/ can test pure network throughput at different sized packets. We could use this or incorporate our own to test pure flow and reliability of network packets. You don't want dirty communications and dropped packets to be part of the store.

There are java implementations of this tool. https://github.com/ashishvshenoy/iperf-java


There is a lot of load testing software out there. Here are some examples. I think these are all on Kali Linux. Probably a whole lot more. 

https://github.com/httperf/httperf

https://software.microfocus.com/en-us/products/loadrunner-load-testing/overview

It's probably easier to use write your own load generators using BASH, curl and nmap.


More on Packet Crafting

Write your own code or use ...

You can use python scampy http://www.secdev.org/projects/scapy/ for packet mangling or crafting.

Netcat is nice as well. This has been used for ages by hackers.

http://help.ubidots.com/developer-guides/sending-tcpudp-packets-using-netcat

Looks like socat is an option. Looks very netcat like

https://discourse.criticalengineering.org/t/howto-crafting-arbitrary-network-packets-with-socat/51


Notes from conversation with Mike on 4/2

  • Hardening happens on a variety of levels
    • Setting up firewalls or hardware in front of the main node (defense)
    • Packet inspection: intrusion mitigation
      • If people are sending malformed packets, then we need to know and deflect
      • Reject packets that are not signed by the key
      • Either build your packets correctly or get slashed
    • Load balancing on the valid traffic
  • Tools for hardening
    • Generating valid protocol buffers to through at the Casper implementation
  • Fuzzing 
    • Way of generating valid or invalid protobufs at random to see how the software reacts
    • Can be done when the node and firewall is ready


External service blockin

Firewalls on each node

Ports that are open will validate packages with correct signature. Even if it's signed and well-formed, we need a way to through at Casper to prove that it's not malformed.



In April

  • RChain get IP range for bootstrap nodes
  • Decision on where to test - Cost risk to hammer AWS with node testing
    • Either buy time on Amazon
    • Or buy some hardware, upfront cost of hardware 
  • Choose a fuzzer tool
    • Look at planned protobufs to choose a tool
    • Pawel may have insight
  • Have conversation with Pawel and Nash to determine broader testing
  • When do we need horizontal scaling on the node?