_____ _                 _    _______         
 / ____(_)               | |  |__   __|        
| (___  _ _ __ ___  _   _| | __ _| | ___  _ __ 
 \___ \| | '_ ` _ \| | | | |/ _` | |/ _ \| '__|
_ ___) | | | | | | | |_| | | (_| | | (_) | |   
|_____/|_|_| |_| |_|\__,_|_|\__,_|_|\___/|_|   

About

Welcome to SimulaTor, a tool for the rapid deployment of testing Tor networks across physical hardware. Until now, researchers relied on virtualization tools that required significant computational power to research Tor. With SimulaTor, researchers can quickly and easily utilize cheap computers for research on the Tor network.

While tools such as Chutney and Shadow allow researchers to create virtual Tor networks, there is no resource to help researchers create a simulated Tor network using physical nodes. While researching bandwidth inflation attacks, we have compiled information on creating a physical private Tor network and are excited to release the SimulaTor framework. Replicability is extremely important in research, and we hope that the SimulaTor framework will allow other researchers to be able to easily create simulated Tor networks to verify others' findings.

Why SimulaTor

In order to fully mitigate the various threats that face Tor users, we must conduct research to understand how an adversary can attack Tor. While the best environment for understanding these threat actors may be the live Tor network, it can be extremely risky to run these experiments as they can potentially deanonymize Tor users. As a result, there is a strong need to simulate Tor networks for researchers to conduct their experiments.

Currently, there is no clear documentation or tools for researchers to construct testing Tor networks on physical hardware, and researchers must rely on virtualization tools such as Shadow and Chutney. While these are amazing tools, there can be situations where it is preferred or necessary to conduct experiments over a physical network rather than a virtual environment.

How does SimulaTor work?

SimulaTor works by connecting to each potential relay on your local network and running a configuration script to install Tor, apply necessary settings, and share the relay's unique fingerprint with other relays on your network. This allows for the rapid deployment of a Tor network for research purposes, without needing to fiddle with certificates and Tor settings.

How To Use SimulaTor

The deployment process assumes you have a main machine running that will not be used as a relay within your testing network. This will be referred to as your 'main machine', while the other computers on your local network you wish to include in your Tor network will be referred to as 'relays'.

Dependencies:

SimulaTor requires python installed on your main machine. You can install python using your systems package manager.

1. Clone the repository to your main machine:

git clone https://github.com/zkornas/SimulaTor.git

2. Ensure all relays are powered on

For ease of deployment, you can also optionally choose to share your SSH key between you main machine and your relays. The SimulaTor deployment process will share setup and configuration scripts between the relays as well as relay fingerprints, and you may need to enter your password multiple times if you choose not to share keys.

Another suggestion would be to create a user on each relay and allow them to execute sudo commands without needing to enter a password. The scripts mentioned earlier will need to run at sudo level for proper configuration and you may need to enter your password multiple times.

These suggestions entirely depend on your environment and use case, so choose the appropriate option for your set up.

3. Gather the local IP addresses and user account names for your relays

The user account listed will be used by SimulaTor to SSH into your relays and run the configuration scripts.

4. Running SimulaTor

You can now run SimulaTor using python:

sudo python /path/to/SimulaTor/simulator.py

After reviewing the preprogram checklist, you will be asked to enter the relay IP addresses, user account names, and what you would like to call these relays.

You should enter these in a comma-separated list.

5. Complete

You should now be left with a functional, private Tor network! You can use the circ_reader.py script on a client of your private network to view the circuits generated in your network.