added writeup on the experiment setup
This commit is contained in:
commit
9841dffb82
102
README.md
Normal file
102
README.md
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
# Revealing Guard Nodes via Traffic Induced Watermarking
|
||||||
|
|
||||||
|
Revealing the primary guard node used by a party within the
|
||||||
|
TOR network can be a significant step in a deanononimization
|
||||||
|
attack. This proposed attack attempts to detect the primary
|
||||||
|
guard node of a client connecting to a malicious server through
|
||||||
|
the TOR network. The attacker attempts to induce high traffic
|
||||||
|
volumes on potential guard nodes to watermark traffic forwarded by
|
||||||
|
them and then attempts to recognize these watermarks later in
|
||||||
|
traffic received from the exit node.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Experiment Setup
|
||||||
|
|
||||||
|
The first experiments purpose is to see, whether recognizable
|
||||||
|
watermarks can be introduced into traffic just by controlling
|
||||||
|
the load on the guard node. We deploy a network of one victim,
|
||||||
|
one private guard node and one malicious server. The victim
|
||||||
|
frequently (in 10 second intervals) accesses the server through
|
||||||
|
the TOR network, using the private guard node as the first
|
||||||
|
component of its circuit. In this first experiment, the guard
|
||||||
|
node is known to the server, allowing us to test different
|
||||||
|
mechanisms of introducing traffic patterns.
|
||||||
|
|
||||||
|
### Network Structure Details
|
||||||
|
|
||||||
|
All parties in this experiment are part of one virtual private
|
||||||
|
network `10.2.0.0/24`. The network consists of three main
|
||||||
|
components as well as an arbitrary number of members running
|
||||||
|
experiments.
|
||||||
|
|
||||||
|
**Victim**
|
||||||
|
|
||||||
|
The victim's IP is `10.2.0.2`. It constructs a circuit with
|
||||||
|
the guard node `10.2.0.3` and two random TOR relays and then
|
||||||
|
accesses the website `rsca.vanrissenbeck.com` every 10 seconds.
|
||||||
|
|
||||||
|
**Guard Node**
|
||||||
|
|
||||||
|
The guard node's IP is `10.2.0.3`. It's used by the victim
|
||||||
|
as well as by the attacker when attempting to increase the
|
||||||
|
traffic load. The guard node is not publicly reachable by
|
||||||
|
the TOR network.
|
||||||
|
|
||||||
|
**Proxy**
|
||||||
|
|
||||||
|
The proxy is the one publicly reachable component of this network.
|
||||||
|
It has to be public, because otherwise the exit node which is not
|
||||||
|
controlled by us wouldn't be able to reach the malicious service.
|
||||||
|
Its internal IP is `10.2.0.4`. Requests to `rsca.vanrissenbeck.com`
|
||||||
|
are redirected by a caddy instance running in the Oracle cloud
|
||||||
|
to port 8080. To test out a certain attack strategy, port 8080
|
||||||
|
of the proxy is further forwarded to a server hosting the actual
|
||||||
|
malicious site. This allows researchers to spin up any kind of
|
||||||
|
application serving the malicious website independent of the
|
||||||
|
network infrastructure (see setup instructions below).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Setup Instructions
|
||||||
|
|
||||||
|
Experimenting with this network is rather simple: First, you'll
|
||||||
|
have to become part of the `10.2.0.0/24` network. I'll send you
|
||||||
|
a WireGuard config on request. To install WireGuard, run
|
||||||
|
```
|
||||||
|
sudo apt install wireguard-tools
|
||||||
|
```
|
||||||
|
or an equivalent command for your distro. Then install the
|
||||||
|
configuration I've sent to you by running
|
||||||
|
```
|
||||||
|
# replace N with the lowest non-negative integer
|
||||||
|
# so that you don't overwrite existing configs
|
||||||
|
sudo cp wg-rsca.conf /etc/wireguard/wgN.conf
|
||||||
|
```
|
||||||
|
and finally boot up the VPN
|
||||||
|
```
|
||||||
|
sudo wg-quick up wgN
|
||||||
|
```
|
||||||
|
You can test the configuration by sending a ping
|
||||||
|
to `10.2.0.1`.
|
||||||
|
|
||||||
|
|
||||||
|
Next you'll have to develop some malicious HTTP service.
|
||||||
|
For testing purposes, this could be an instance of python's
|
||||||
|
`http.server` module. Run your service, e.g.
|
||||||
|
```
|
||||||
|
python3 -m http.server 1337
|
||||||
|
```
|
||||||
|
Finally, you'll make the service publicly available, by
|
||||||
|
forwarding port 8080 of the proxy to port 1337 on your
|
||||||
|
local device using ssh reverse port forwarding. This
|
||||||
|
can be achieved by running
|
||||||
|
```
|
||||||
|
ssh -NR 8080:127.0.0.1:1337 anon@10.2.0.4
|
||||||
|
```
|
||||||
|
The password is `rsca2025nA4g1A`. Your malicious HTTP
|
||||||
|
service should be publicly visible under the domain
|
||||||
|
`rsca.vanrissenbeck.com` and receive requests by the victim
|
||||||
|
through the TOR network about every 10 seconds. If you
|
||||||
|
used the `http.server` example, a directory listing should
|
||||||
|
be visible on that domain.
|
402
architecture.svg
Normal file
402
architecture.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 47 KiB |
282
attack.svg
Normal file
282
attack.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 30 KiB |
Loading…
Reference in New Issue
Block a user