Marc Juarez Marc.JuarezMiro@esat.kuleuven.be writes:
Hi all,
I am a GSoC student working in a new PT for the development of future Website Fingerprinting countermeasures in Tor.
The PT is not targeting any specific defense, but to link padding defenses in general. The idea is to implement a set of primitives that any link padding-based defense would benefit of.
In this email I provide a more detailed description of these primitives and give a short update about their state. I forked the obfsproxy repo and made it publicly available in bitbucket:
https://bitbucket.org/mjuarezm/obfsproxy-wfpadtools.
I would appreciate comments from the Tor development community. I'm specially looking for advices that help me generalizing the padding module (padutils) and comments about the primitives I describe below.
The envisaged primitives are:
- A general padding class that provides methods to pad the link
This part is almost finished. For that I reused the Scramblesuit's probdist and fifobuffer modules to buffer and flush data according to a given probability distribution.
Using this class I have implemented a simple version of BuFLO (which is also included in the padutils module).
Sounds reasonable.
(BTW, we recently found that scramblesuit's genDistribution() function in probdist.py does not generate a uniform distribution. You can see this, since the way the prob distr is generated, its first element has a mean value of 1/2 instead of 1/n. Yawning fixed this in obfs4 I think, but it remains unfixed in scramblesuit.)
- Create a framing layer for the PT
This layer would allows to signal padding messages so that they can be filtered out. I have to implement the protocol's message scheme so I can parse the flags in the header and get rid of the padding messages.
OK. You might want to write a small spec for your framing layer.
- Implement the state machine of the basic padding protocol.
BuFLO assumes that there exists a mechanism to detect the beginning and end visits. I would implement this using a new state in the protocol's state machine (ST_VISITING), but I still need to find a way to signal the beginning and the end of each visit.
Hm, by 'visit' you mean website visits? So your PT needs to know when you change websites? This is not supported at the moment. You can't even learn this information from within Tor, which is one layer closer to the browser than the PT.
Why does BuFLO need to know about individual visits?
Making PTs aware of website visits will require non-trivial changes to little-t-tor (and possibly implementation of proposal 196, etc.)
- Implement the protocol's handshake.
I took a look to the Scramblesuit's handshake.The handshake of this protocol would boil down to the negotiation of the parameters (e.g., probability distributions) for the padding.
In the end, I think this handshake will need to be confidential (encrypted) somehow. Otherwise, the adversary could read the probability distributions and unwrap your padding layer more easily. Or is this not in your threat model?
- Implement a flow control protocol
This would adjust the padding parameters while running. The fifobuffer we are currently using helps queuing the messages but we will need an extra logic to detect congestion.
- Padding operations
We will implement padding operations that might be handy for the future countermeasure. For example, one possible operation could be to specify the number of cells to send in response to a padding cell request.
- A module to test protection against Website Fingerprinting
This module would leverage the Peekaboo's framework by Dyer et al. (we may consider to extend it to include the newest Website Fingerprinting attacks).
Best,