Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

121 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Introduction

This document provides instructions for the NDSS Artifact Evaluation (AE) process for our paper, Towards Comprehensive Multipath Obfuscation Against Traffic Analysis Attacks in Wireless Networks (Draft). The evaluation procedure is organized into four sections:

  1. VM Setup: We explain how to prepare the VMs for the artifact evaluation. This includes creating VirtualBox VMs, compiling the custom kernel, and building our system.
  2. Before Starting the Evaluations: We explain how to configure the VirtualBox NAT Network required for communication between the VMs before running the experiments.
  3. Basic Functionality Test (E1): We explain how to run our system on the VMs and verify its basic functionality.
  4. Scaled-Down Traffic-Analysis Evaluation (E2): We explain how to conduct the scaled-down traffic-analysis evaluation on the VMs. This includes collecting real network traffic, preprocessing the traffic traces, and training the attack classifiers.

To simplify the setup process, we also provide pre-configured VMs as OVA files.

The pre-configured VMs (i.e., OVA files) are available here.

If you use the provided OVA files, please note the following:

  • You can import each VM into VirtualBox by selecting File > Import Appliance and choosing the provided OVA file.
  • The VM password is ndss2027.
  • When you boot the VMs, the GRUB menu will appear and prompt you to select a kernel version. You can either wait approximately 10 seconds, in which case GRUB will boot the previously selected kernel, or manually select the custom kernel under Advanced options for Ubuntu > Linux 6.13.0-rc3+.

Once you have imported the VMs from the OVA files, you can skip the VM setup steps in Section 1 and proceed directly to Section 2.

While our goal was to provide a self-contained evaluation environment and workflow, we plan to release the full dataset and scripts used to produce the results reported in our paper soon.

(1) VM Setup

This section describes how to prepare the client and proxy-server VMs for the TrafficSplitter artifact evaluation.

If you are using the provided OVA files, you may skip this section.

  • The VM setup consists of two main steps: (1) installing Ubuntu 24.04 Desktop on VirtualBox and (2) installing the custom Linux kernel. We use Ubuntu 24.04 Desktop rather than the Server edition to make the overall evaluation process easier and more user-friendly.
  • Our system uses a non-mainline Linux kernel. We began developing the system when the MPTCP eBPF scheduler was still an experimental feature and had not yet been included in the mainline Linux kernel. Since then, the MPTCP eBPF scheduler has become an official kernel feature. However, we continue to use the older custom kernel because (1) the eBPF-related structures have changed in newer kernel versions, and (2) our system has already been extensively tested and is stable with the kernel version used during development and evaluation.

1.1 Ubuntu Installation

  1. Download the Ubuntu 24.04 Desktop image from:

  2. Create two VirtualBox VMs:

    • one for the client;
    • one for the proxy server.

    We recommend allocating at least:

    • 50 GB of storage
    • 3 CPU cores
    • 8 GB of RAM

    These resources are mainly required for kernel compilation. After the kernel has been successfully compiled and installed, you may reduce the allocated resources if needed.

  3. Install Ubuntu 24.04 Desktop on both VMs.

1.2 Custom Kernel Installation

Please note that shell scripts are provided for the following procedure. You may use the scripts instead of performing each step manually.

  1. Clone the MPTCP kernel repository and check out the exact version used in our artifact.

    git clone https://github.com/multipath-tcp/mptcp_net-next.git
    cd mptcp_net-next
    git fetch origin
    git checkout 4d907d0e9f974e706ad6f916b8bf2391d82573bf
  2. Update the Ubuntu APT source configuration.

    Open the APT source file:

    sudo vim /etc/apt/sources.list.d/ubuntu.sources

    Replace or update the contents so that both binary packages (deb) and source packages (deb-src) are enabled:

    Types: deb deb-src
    URIs: http://us.archive.ubuntu.com/ubuntu/
    Suites: noble noble-updates noble-backports noble-proposed
    Components: main restricted universe multiverse
    Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
    
    Types: deb deb-src
    URIs: http://security.ubuntu.com/ubuntu/
    Suites: noble-security
    Components: main restricted universe multiverse
    Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
    

    This configuration enables access to both binary and source packages from the standard Ubuntu 24.04 repositories. The source repositories are required for installing some kernel build dependencies and related development packages.

  3. Update and upgrade the system:

    sudo apt update
    sudo apt upgrade
  4. Install the required kernel build dependencies:

    sudo apt-get build-dep linux linux-image-unsigned-$(uname -r)
    sudo apt-get install libncurses-dev gawk flex bison openssl \
        libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev \
        autoconf
  5. Copy the current kernel configuration into the mptcp_net-next directory:

    cp /boot/config-$(uname -r) .config
    make olddefconfig
  6. Generate a self-signed certificate for kernel module signing.

    From the mptcp_net-next directory, run:

    openssl req -x509 -newkey rsa:4096 \
        -keyout certs/mycert.pem \
        -out certs/mycert.pem \
        -nodes \
        -days 3650
  7. Update the kernel configuration to use the generated certificate.

    Open the kernel configuration file:

    sudo vim .config

    Find the following options:

    CONFIG_SYSTEM_TRUSTED_KEYS
    CONFIG_MODULE_SIG_KEY
    

    Update them as follows:

    CONFIG_SYSTEM_TRUSTED_KEYS="certs/mycert.pem"
    CONFIG_MODULE_SIG_KEY="certs/mycert.pem"
    

cert config

  1. Compile and install the kernel.

    This step may take some time.

    make -j$(nproc)
    sudo make modules_install
    sudo make install
  2. Configure GRUB to boot the desired kernel version.

    Open the GRUB configuration file:

    sudo vim /etc/default/grub

    Make the following changes:

    GRUB_DEFAULT=saved
    GRUB_SAVEDEFAULT=true
    GRUB_TIMEOUT_STYLE=menu
    GRUB_TIMEOUT=10
    

    Then update the GRUB configuration:

    sudo update-grub

    Reboot the VM and select the newly installed kernel from the GRUB menu.

    GRUB should remember the selected kernel for subsequent boots.

  3. After rebooting, verify the running kernel:

uname -r

1.3 TrafficSplitter Build

  1. Clone the TrafficSplitter repository:

    git clone https://github.com/LENSS/TrafficSplitter.git
  2. Move to the src directory:

    cd TrafficSplitter/src/
  3. Make the build scripts executable:

    chmod +x ./scripts/*.sh
  4. Run the provided scripts to install the BPF tools and build the TrafficSplitter components:

    sudo ./scripts/01-install-bpf-tools.sh
    sudo ./scripts/02-generate-vmlinux-header.sh
    sudo ./scripts/03-build-schedulers.sh
    sudo ./scripts/04-build-mptun.sh

    These scripts build the required BPF tools, MPTCP schedulers, and MPTun client/server binaries.

  5. Verify the generated files:

    ls MPTun_proxy/build/
    ls Saflo_scheduler/build/
  6. Optionally, remove the local bpftool source directory after installation:

    sudo rm -rf tools/

After completing these steps on both VMs, proceed to the VirtualBox network configuration.

(2) Before Starting the Evaluations

Before conducting experiments, we need to configure the NAT network for the communication between VMs. This configuration generates the network topology shown below.

cert config

The client VM uses two network interfaces for MPTCP, while the proxy VM provides the remote MPTCP endpoint. Both VMs communicate through the VirtualBox `aeNet` NAT Network, and outbound traffic is forwarded through the host machine to the Internet.

2.1 NAT Network Setup

We assume that you have already installed VirtualBox and prepared the two VMs either by following the VM setup instructions or by importing the OVA files provided with the artifact.

First, create a VirtualBox NAT Network named aeNet on the host machine. This network enables communication between the client and proxy VMs.

The intended IP configuration is:

Machine Adapter IP Address
User (Client) NIC 1 192.168.10.10
User (Client) NIC 2 192.168.10.11
Proxy Server NIC 1 192.168.10.12
NAT Gateway 192.168.10.1
DHCP Server 192.168.10.2

The dynamic DHCP pool is configured as 192.168.10.100–192.168.10.254, leaving the lower addresses available for the fixed VM addresses.

Linux Host

Open a terminal on the host machine.

1. Create and start the NAT Network

VBoxManage natnetwork add \
  --netname aeNet \
  --network "192.168.10.0/24" \
  --enable \
  --dhcp on
VBoxManage natnetwork start --netname aeNet

2. Configure the DHCP server

VBoxManage dhcpserver modify \
  --network aeNet \
  --server-ip 192.168.10.2 \
  --lower-ip 192.168.10.100 \
  --upper-ip 192.168.10.254 \
  --netmask 255.255.255.0 \
  --enable

3. Check the VM names

Before assigning the fixed IP addresses, check the names of the imported VMs:

VBoxManage list vms

The following commands assume that the VM names are:

  • user
  • proxy-server

If your VM names are different, replace them accordingly in the commands below.

4. Assign fixed IP addresses

Client NIC 1:

VBoxManage dhcpserver modify \
  --network aeNet \
  --vm "user" \
  --nic 1 \
  --fixed-address 192.168.10.10

Client NIC 2:

VBoxManage dhcpserver modify \
  --network aeNet \
  --vm "user" \
  --nic 2 \
  --fixed-address 192.168.10.11

Proxy Server NIC 1:

VBoxManage dhcpserver modify \
  --network aeNet \
  --vm "proxy-server" \
  --nic 1 \
  --fixed-address 192.168.10.12

5. Restart the DHCP server

VBoxManage dhcpserver restart --network aeNet

Windows Host

Open Command Prompt or PowerShell on the host machine.

1. Create and start the NAT Network

VBoxManage.exe natnetwork add --netname aeNet --network "192.168.10.0/24" --enable --dhcp on
VBoxManage.exe natnetwork start --netname aeNet

2. Configure the DHCP server

VBoxManage.exe dhcpserver modify --network aeNet --server-ip 192.168.10.2 --lower-ip 192.168.10.100 --upper-ip 192.168.10.254 --netmask 255.255.255.0 --enable

3. Check the VM names

VBoxManage.exe list vms

The following commands assume that the VM names are user and proxy-server. If your VM names are different, replace them accordingly.

4. Assign fixed IP addresses

VBoxManage.exe dhcpserver modify --network aeNet --vm "user" --nic 1 --fixed-address 192.168.10.10
VBoxManage.exe dhcpserver modify --network aeNet --vm "user" --nic 2 --fixed-address 192.168.10.11
VBoxManage.exe dhcpserver modify --network aeNet --vm "proxy-server" --nic 1 --fixed-address 192.168.10.12

5. Restart the DHCP server

VBoxManage.exe dhcpserver restart --network aeNet

If Windows reports that VBoxManage.exe is not recognized, run the commands from the VirtualBox installation directory, for example:

C:\Program Files\Oracle\VirtualBox

2.2 VM Network Adapter Configuration

After creating the NAT Network, configure the network adapters of the two VMs.

User (Client)

The client VM requires two network adapters:

  • Adapter 1: NAT Network → aeNet
  • Adapter 2: NAT Network → aeNet

cert config cert config

The expected IP addresses are:
NIC 1: 192.168.10.10
NIC 2: 192.168.10.11

Proxy Server

The proxy VM requires one network adapter:

  • Adapter 1: NAT Network → aeNet

The expected IP address is:

cert config

NIC 1: 192.168.10.12

(3) Basic Functionality Test (E1)

This test verifies that the MPTCP tunnel is established correctly, that two subflows are created, and that the Saflo scheduler operates as expected.

3.1 Preparation

On both the client VM and the proxy server VM, open a terminal and move to the eval directory of the TrafficSplitter repository:

cd ~/ndss27/TrafficSplitter/eval

Prepare two terminal tabs on each VM:

  • Tab 1: Run the system.
  • Tab 2: Monitor the Saflo subflow manager log.

3.2 Start the Proxy Server

On the proxy server VM, run the following command in the first terminal tab:

sudo ./01-run-func/run-trafficsplitter-server.sh

The script configures MPTCP, registers and selects the Saflo scheduler, starts the MPTun proxy server, and starts the Saflo subflow manager.

In the second terminal tab, monitor the subflow manager log:

tail -f 01-run-func/subflow-manager.log

The log shows kernel-level MPTCP subflow information and the operation of the Saflo scheduler.

3.3 Start the Client

On the client VM, run the following command in the first terminal tab:

sudo ./01-run-func/run-trafficsplitter-client.sh

In the second terminal tab, monitor the client-side subflow manager log:

tail -f 01-run-func/subflow-manager.log

After the client connects to the proxy, you should observe that the MPTCP tunnel is established with two subflows. The log also shows kernel-level information about the subflows and the operation of the Saflo scheduler.

cert config

3.4 Observe Traffic Distribution

You can now observe how traffic is distributed across the two client network paths.

Option A: Wireshark

On the client VM, open another terminal tab and run:

sudo wireshark

In Wireshark, monitor both client network interfaces.

Then, open Firefox and generate traffic, for example by:

  • visiting several websites; or
  • playing an online video.

Observe how the MPTCP traffic is distributed across the two network interfaces.

Option B: Interface Traffic Script

On the client VM, open another terminal tab and run:

./01-run-func/show-interface-traffic.sh 20

Then, open Firefox and generate traffic, for example by:

  • visiting several websites; or
  • playing an online video.

Run the script multiple times while generating traffic. You should observe that the traffic distribution ratio between the two paths varies across measurements due to the randomness introduced by our traffic-obfuscation strategy.

3.5 Expected Result

A successful basic functionality test should show:

  • an MPTCP tunnel established between the client and proxy;
  • two active MPTCP subflows;
  • Saflo scheduler activity in the subflow manager log; and
  • network traffic distributed across both client interfaces.

When you are finished, press Ctrl+C in the terminals running run-trafficsplitter-server.sh and run-trafficsplitter-client.sh to stop the evaluation processes.

Optionally, you can run our BWR implementation with MPTun and eBPF instead of TrafficSplitter and monitor its operation using run-bwr-server.sh and run-bwr-client.sh.

BWR does not use the Saflo subflow manager component.

(4) Scaled-Down Traffic-Analysis Evaluation (E2)

This artifact evaluation compares two defense configurations:

  • TrafficSplitter
  • BWR

The goal is to reproduce, at a reduced scale, the main qualitative comparison reported in the paper. TrafficSplitter is designed to provide broader protection against both website fingerprinting (WF) and video fingerprinting (VF), as well as other traffic-analysis attacks with characteristics between them. In contrast, BWR is a traffic-splitting defense designed primarily for website fingerprinting and is therefore used as an attack-specific baseline.

We assume a single-path eavesdropper that can monitor one of the network paths between the client and the MPTun proxy server. The eavesdropper is assumed to know the defense strategy and trains its attack classifier using traffic traces generated under each defense.

The evaluation can be performed using either the pre-collected traces included in the Git repository or traces collected by the evaluator. If your goal is to verify the reproducibility of the traffic-analysis evaluation, you may use the pre-collected traces and skip directly to Section 4.2.

4.1 Prepare Traffic Traces

Option A: Use the Pre-Collected Traces

The Git repository includes pre-collected website and video traces for both TrafficSplitter and BWR. To use them, move to the data-collection directory and extract the archives:

sudo apt install -y unzip
cd ~/ndss27/TrafficSplitter/eval/02-data-collection
unzip "*.zip"

After extraction, the traces should be available in the following directories:

TrafficSplitter/eval/02-data-collection/bwr-video-traces/
TrafficSplitter/eval/02-data-collection/bwr-web-traces/
TrafficSplitter/eval/02-data-collection/trafficsplitter-video-traces/
TrafficSplitter/eval/02-data-collection/trafficsplitter-web-traces/

You may then proceed directly to Section 4.2.

Option B: Collect New Traffic Traces

If you would like to collect the traffic traces yourself or extend the provided dataset, follow the procedure below. We assume that the eavesdropper monitors the first network interface of the client VM. The client generates traffic by visiting websites or playing YouTube videos in Google Chrome, while tcpdump records the corresponding traffic.

First, on both VMs, move to the evaluation directory:

cd ~/ndss27/TrafficSplitter/eval

As in Section (3), start the proxy server first, followed by the client.

TrafficSplitter

On the proxy-server VM:

sudo ./01-run-func/run-trafficsplitter-server.sh

On the client VM:

sudo ./01-run-func/run-trafficsplitter-client.sh

BWR

On the proxy-server VM:

sudo ./01-run-func/run-bwr-server.sh

On the client VM:

sudo ./01-run-func/run-bwr-client.sh

Note: BWR does not use the Saflo subflow-manager component.

Collect Website Traces

Open a new terminal on the client VM and run:

./02-data/collection/web-collecting.sh <trace-name>

For TrafficSplitter:

./02-data/collection/web-collecting.sh trafficsplitter

For BWR:

./02-data/collection/web-collecting.sh bwr

The script automatically opens the 10 websites specified in the shell script while tcpdump captures the corresponding network traffic.

Collect Video Traces

Similarly, collect video traces on the client VM using:

./02-data/collection/video-collecting.sh <trace-name>

For TrafficSplitter:

./02-data/collection/video-collecting.sh trafficsplitter

For BWR:

./02-data/collection/video-collecting.sh bwr

The script automatically plays the five YouTube videos specified in the shell script while tcpdump captures the corresponding network traffic.

Note: The provided traces were collected using a YouTube Premium account to avoid advertisements that could introduce additional traffic unrelated to the target videos.

Run Website and Video Collection Sequentially

You may also run the website and video collection scripts sequentially.

For TrafficSplitter:

./02-data/collection/web-collecting.sh trafficsplitter && \
./02-data/collection/video-collecting.sh trafficsplitter

For BWR:

./02-data/collection/web-collecting.sh bwr && \
./02-data/collection/video-collecting.sh bwr

The second script starts only after the first script completes successfully.

4.2 Run the Scaled-Down Traffic-Analysis Evaluation

The traffic-analysis evaluation is conducted on the client VM, where the traffic traces are stored.

Prerequisites

If you imported the provided OVA files, the required Python environment is already configured and you may skip this step. Otherwise, create and activate a Python virtual environment:

sudo apt install -y python3-venv python3-full

cd ~/ndss27/TrafficSplitter/eval/03-traffic-analysis

python3 -m venv .venv
source .venv/bin/activate

python -m pip install --upgrade pip
python -m pip install tensorflow pandas matplotlib

matplotlib is optional and is required only for plotting traffic traces.

Before running the evaluation, confirm that the TrafficSplitter and BWR website and video traces are available under:

TrafficSplitter/eval/02-data-collection/

Run the Evaluation

Move to the traffic-analysis directory:

cd ~/ndss27/TrafficSplitter/eval/03-traffic-analysis

Then run:

./run-traffic-analysis.sh

The script automatically:

  1. preprocesses the TrafficSplitter and BWR website traces;
  2. preprocesses the TrafficSplitter and BWR video traces;
  3. trains and evaluates the website-fingerprinting classifier;
  4. trains and evaluates the video-fingerprinting classifier; and
  5. prints a summary table in the terminal.

Because this artifact evaluation uses a substantially smaller dataset than the full evaluation reported in the paper, it uses lighter versions of the WF and VF classifiers to reduce training time and computational requirements on the VM.

At the end of the evaluation, you should see a summary similar to:

============================================================
 Traffic-Analysis Evaluation Results
============================================================

Attack                    | TrafficSplitter  | BWR
--------------------------+------------------+-----------------
Website Fingerprinting    | ...              | ...
Video Fingerprinting      | ...              | ...

Values represent mean validation accuracy across the 5 folds.

Clear Evaluation Results

After the evaluation, you can remove all generated TFRecords, trained models, and evaluation logs by running:

./run-traffic-analysis.sh --clear

This command does not remove the original traffic traces.

4.3 Expected Result and Interpretation

The exact accuracy values may differ from the full-scale results reported in the paper because this artifact evaluation uses a smaller dataset and lighter attack classifiers. The goal is therefore not to reproduce the exact numerical values, but to reproduce the same qualitative trend.

TrafficSplitter is designed to provide broader protection across different types of traffic-analysis attacks. It should therefore provide comparatively consistent protection under both WF and VF. In contrast, BWR is primarily designed as a website-fingerprinting defense, so its defense effectiveness is expected to degrade more noticeably under VF.

The key observation to reproduce is that TrafficSplitter provides more comprehensive protection across WF and VF, whereas BWR is more attack-specific.

cert config

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages