From 6500229000f0603311631ca0b6eb9cc4479f0909 Mon Sep 17 00:00:00 2001 From: Kevin Froman Date: Sun, 2 Feb 2020 21:21:51 -0600 Subject: [PATCH] added attack simulation scripts --- scripts/README.md | 4 +++- scripts/announce-attack.py | 25 +++++++++++++++++++++++++ scripts/block-spammer.py | 21 +++++++++++++++++++++ src/etc/onionrvalues.py | 2 +- 4 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 scripts/announce-attack.py create mode 100755 scripts/block-spammer.py diff --git a/scripts/README.md b/scripts/README.md index 1796b01a..a91e9c63 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,4 +1,6 @@ This directory contains useful scripts and utilities that don't make sense to include as official Onionr features. passphrase-generator.py: very simple utility to generate and print a strong passphrase to stdout. 256 bits of entropy by default. -enable-dev-config.py/disable-dev-config.py: enable/disable dev default config setup \ No newline at end of file +enable-dev-config.py/disable-dev-config.py: enable/disable dev default config setup +block-spammer.py: attack tool for spamming blocks +announce-attack.py: flood a node with false nodes \ No newline at end of file diff --git a/scripts/announce-attack.py b/scripts/announce-attack.py new file mode 100644 index 00000000..fca438dc --- /dev/null +++ b/scripts/announce-attack.py @@ -0,0 +1,25 @@ +import sys +import os +import secrets +import base64 +os.chdir('../') +sys.path.append("src/") +from onionrutils import stringvalidators +from onionrutils import basicrequests + + +def random_tor_generator(): + return base64.b32encode(secrets.token_bytes(35)).decode().replace("=", "").lower() + ".onion" + +node = input("Enter node to attack. Note that you must legally use your own, and even that might lead to issues") +assert stringvalidators.validate_transport(node) + +count = int(input("Attack amount: ")) +port = input("Socks:") +for x in range(count): + new = random_tor_generator() + print(f"Introducing {new} to {node}") + basicrequests.do_post_request( + f'http://{node}/announce', + data = {'node': new}, + port=port) diff --git a/scripts/block-spammer.py b/scripts/block-spammer.py new file mode 100755 index 00000000..34e7d962 --- /dev/null +++ b/scripts/block-spammer.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +"""Spam a bunch of Onionr blocks""" + +# Please don't run this script on the real Onionr network. You wouldn't do anything but be annoying + +print("Please don't run this script on the real Onionr network. You wouldn't do anything but be annoying, and possibly violate law") + +import sys +import os +os.chdir('../') +sys.path.append("src/") +import onionrblocks + + +amount = int(input("Number of blocks:")) + +for i in range(amount): + onionrblocks.insert(data=os.urandom(32)) + print(i, "done") + diff --git a/src/etc/onionrvalues.py b/src/etc/onionrvalues.py index 6db86b4b..3348a3e7 100755 --- a/src/etc/onionrvalues.py +++ b/src/etc/onionrvalues.py @@ -53,7 +53,7 @@ MAX_NEW_PEER_QUEUE = 1000 """Make announce take a few seconds (on average) to compute to discourage excessive node announcements""" ANNOUNCE_POW = 6 """30 days is plenty of time for someone to decide to renew a block""" -DEFAULT_EXPIRE = 2592000 +DEFAULT_EXPIRE = 300 # Metadata header section length limits, in bytes BLOCK_METADATA_LENGTHS = {'meta': 1000, 'sig': 200, 'signer': 200, 'time': 10, 'pow': 1000, 'encryptType': 4, 'expire': 14}