Hi,
I wish to do the project 'HTTPS Server Impersonation' as a GSoC project
this year.
For that, I propose an approach for implementation.
I would like to use Nginx as reverse proxy. Because nginx is very widely
used and it is
known for its high performance, stability and low resource consumption.
Once this is used,
this will become the interface for Bridges. All connections to the bridge
will be listened on port 443.
Two back-end servers for this reverse proxy :
1. Tor itself
2. Web server
A special module has to be written for handling the requests. Once the
request is authenticated,
it will be sent to tor process. Otherwise, it will be sent to web server
and suitable response is
sent back.
Once the new tor client finishes its handshake, its IP address will be
mapped to Tor in nginx
'Load Balancer'. Further requests from that IP address will be sent to the
Tor directly.
How does a bridge distinguish between Tor client and attacker?
For this, I need suggestions to select one among the following.
1. Use AUTHORIZE and AUTHORIZED cells as discussed in proposals #187 and
#189
2. Provide a public key while giving the bridge address. I.e. When someone
requests a bridge
address, provide
[IP ADDRESS] + [PORT] + [PUBLIC KEY] [ here port = 443 ]
Once the client gets the public key of bridge, it can encrypt its data send
to bridge. Bridge
uses its private key to decrypt the message, and hence only bridge can
decrypt the message.
If the message received has proper headers it will be sent to tor,
otherwise it will go to the
default web server.
What will the web server contain?
Web Server will have some pages which makes the website look like 'online
storage site' or
'Online gaming site' or 'social networking site' or something like that.
Because a passive attacker
can wonder what the client is sending/receiving from a website which looks
like 'blog'!
Hence from the above discussion, we can achieve the goals of project:
a. Impossible for a passive attacker who examines only a few packets at a
time to distinguish
Tor->Bridge traffic from an HTTPS client talking to an HTTPS server
Tor client -> bridge connection will be TLS. So he can't
distinguish
b. Impossible for an active attacker talking to the server to tell a Tor
bridge server from a regular HTTPS server
Every ill-formed request will be handled by Web server.
c. Against MITM attack
If AUTHORIZE and AUTHORIZED cells are used, I need some help in
making it preventing MITM attack.
If method 2 is used for authentication, MITM attack can be easily
prevented. Because even though
the attacker receives the packet, he can't decrypt the message since he
doesn't have key for decrypting it.
Tor client sends this message along with its public key. Hence the bridge
can encrypt and send back its
response. Once the TLS connection is established then attacker will behave
like hop in communication
d. Code changes to tor
It will be minimum and we just need to implement authorization code.
e. Efficiency
Once the new client completes its handshake, its IP address will be added
to whitelist. Any packets
from a client which is in whitelist will not be authenticated by the
handlers in nginx. It will be directly sent to
Tor process.
Please correct me wherever I'm wrong and please give me suggestions to
improve it.
Thank you
--
Akshay Hebbar Y S
6th sem, PESIT-CSE