[tor-bugs] #11015 [Obfsproxy]: UniformDH should not block the main event loop

Tor Bug Tracker & Wiki blackhole at torproject.org
Sat Feb 22 06:00:22 UTC 2014


#11015: UniformDH should not block the main event loop
-----------------------------------------------+---------------------
 Reporter:  yawning                            |          Owner:  asn
     Type:  defect                             |         Status:  new
 Priority:  normal                             |      Milestone:
Component:  Obfsproxy                          |        Version:
 Keywords:  python, UniformDH, cpu exhaustion  |  Actual Points:
Parent ID:                                     |         Points:
-----------------------------------------------+---------------------
 This isn't as big of a deal when gmpy is installed, but depending on how
 determined the adversary is, it still might be a problem.

 I got curious I went and benchmarked the obfsproxy UniformDH
 implementation.  On the test machine I used (i5-3320M), the generate +
 exchange takes ~24 - 25 msec (With gmpy it takes ~3.8 msec).

 Since the obfsproxy code does the key exchange in the main event loop,
 this means that on each incoming connection, the server will spend that
 much time doing the modular exponentiation and nothing else (To be
 pedantic for the obfs3 transport the attacker needs to only open a ton of
 TCP connections, even without sending anything to be successful).

 Things that should be done:
  * Use twisted.internet.threads.deferToThread to do the modular
 exponentiation in a thread pool, leaving the main event loop free to
 process other connections.
  * Rate limit the number of incoming connections processed per interval to
 something sane.  Also strongly consider rate limiting by source IP, so
 that an adversary at least has to get a bot net.
  * modexp.powMod should also support using gmpy2 (Different import).  Per
 the authors "gmpy2 is now the recommended version, especially if you use
 the pre-compiled versions for Windows."
  * I do have a OpenSSL based implementation of the key exchange that is
 similar in performance to the gmpy based code.  I could write a python
 module for it.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/11015>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list