ffp.html 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <meta name="GENERATOR" content="TtH 3.44">
  5. <style type="text/css"> div.p { margin-top: 7pt;}</style>
  6. <style type="text/css"><!--
  7. td div.comp { margin-top: -0.6ex; margin-bottom: -1ex;}
  8. td div.comb { margin-top: -0.6ex; margin-bottom: -.6ex;}
  9. td div.hrcomp { line-height: 0.9; margin-top: -0.8ex; margin-bottom: -1ex;}
  10. td div.norm {line-height:normal;}
  11. span.roman {font-family: serif; font-style: normal; font-weight: normal;}
  12. span.overacc2 {position: relative; left: .8em; top: -1.2ex;}
  13. span.overacc1 {position: relative; left: .6em; top: -1.2ex;} --></style>
  14. <title>
  15. Fuzzy Fingerprints -
  16. Attacking Vulnerabilities in the Human Brain
  17. </title>
  18. <body bgcolor="white">
  19. <table width="640" align="center">
  20. <tr><td>
  21. <br><br>
  22. <title>
  23. Fuzzy Fingerprints\
  24. Attacking Vulnerabilities in the Human Brain</title>
  25. <h1 align="center">
  26. Fuzzy Fingerprints<br />
  27. Attacking Vulnerabilities in the Human Brain </h1>
  28. <h3 align="center">Plasmoid (plasmoid@thc.org) <br />
  29. On behalf of The Hacker's Choice - <a href="http://www.thc.org">http://www.thc.org</a> </h3>
  30. <p align="center">
  31. This document is also available in the Portable Document Format
  32. [PDF]: <a href="ffp.pdf">ffp.pdf</a>
  33. </p>
  34. <br><br>
  35. <div class="p"><!----></div>
  36. <h1>Contents </h1><a href="#tth_sEc1"
  37. >1&nbsp; Introduction</a><br />
  38. <a href="#tth_sEc2"
  39. >2&nbsp; Theoretical background</a><br />
  40. &nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc2.1"
  41. >2.1&nbsp; Key exchange using public-key cryptography</a><br />
  42. &nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc2.2"
  43. >2.2&nbsp; Cryptographic fingerprints for key verification</a><br />
  44. &nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc2.3"
  45. >2.3&nbsp; Fuzzy fingerprint quality</a><br />
  46. &nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc2.4"
  47. >2.4&nbsp; Finding fuzzy fingerprints</a><br />
  48. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc2.4.1"
  49. >2.4.1&nbsp; Tweaking RSA key generation</a><br />
  50. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc2.4.2"
  51. >2.4.2&nbsp; Tweaking DSA key generation</a><br />
  52. <a href="#tth_sEc3"
  53. >3&nbsp; Implementation details</a><br />
  54. &nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc3.1"
  55. >3.1&nbsp; Installation of <tt>ffp</tt></a><br />
  56. &nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc3.2"
  57. >3.2&nbsp; Usage of <tt>ffp</tt></a><br />
  58. &nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc3.3"
  59. >3.3&nbsp; Sample session using <tt>ffp</tt> and SSHarp</a><br />
  60. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc3.3.1"
  61. >3.3.1&nbsp; Investigating the victim host</a><br />
  62. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc3.3.2"
  63. >3.3.2&nbsp; Generating a key pair with a good fuzzy fingerprint</a><br />
  64. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#tth_sEc3.3.3"
  65. >3.3.3&nbsp; Launching <tt>ssharp</tt> with the generated keys</a><br />
  66. <a href="#tth_sEc4"
  67. >4&nbsp; Thanks and greetings</a><br />
  68. <div class="p"><!----></div>
  69. <h2><a name="tth_sEc1">
  70. 1</a>&nbsp;&nbsp;Introduction</h2>
  71. <div class="p"><!----></div>
  72. Welcome to the world of <em>Fuzzy Fingerprinting</em>, a new technique to
  73. attack cryptographic key authentication protocols that rely on human
  74. verification of key fingerprints. It is important to note that while fuzzy
  75. fingerprinting is an attack against a protocol, it is <em>not</em> a
  76. cryptographic attack and thus does not attack any cryptographic algorithm.
  77. <div class="p"><!----></div>
  78. This document covers the theoretical background and the generation of fuzzy
  79. fingerprints and also details on the implementation <tt>
  80. ffp</tt> [<a href="#ffp" name="CITEffp">FFP</a>] and its usage. For people who don't want to waste their time
  81. reading pseudo-academic Blabla it is essential to skip to the more pratical
  82. part of this document <a href="#ri">3</a>, the details on the implementation
  83. and the provided sample session using SSHarp [<a href="#sfp" name="CITEsfp">SFP</a>].
  84. <div class="p"><!----></div>
  85. <h2><a name="tth_sEc2">
  86. 2</a>&nbsp;&nbsp;Theoretical background</h2>
  87. <div class="p"><!----></div>
  88. <h3><a name="tth_sEc2.1">
  89. 2.1</a>&nbsp;&nbsp;Key exchange using public-key cryptography</h3>
  90. <div class="p"><!----></div>
  91. Asymmetric cryptography has revolutionized the classic cryptography and
  92. created new cryptographic techniques such as hybrid cryptosystems or digital
  93. signatures. In order to cover the background of fuzzy fingerprinting, this
  94. document focuses on the hybrid cryptosystems and their key exchange
  95. protocols. Fuzzy fingerprinting may also have an impact on digital
  96. signatures or integrity verification systems, for now we simply ignore these
  97. aspects.
  98. <div class="p"><!----></div>
  99. Let's introduce the classical problem of communicating using a symmetric
  100. cypher. Two parties that want to encrypt a communication using a fast
  101. symmetric cipher need to exchange a secret session key before starting to
  102. communicate. This problem is not easy to solve, meeting in real life or
  103. exchanging the session key via telephone are solutions, but often
  104. impossible to realize.
  105. <div class="p"><!----></div>
  106. Using public-key cryptography both parties can elegantly and securely
  107. exchange the session key: Both parties first exchange their public keys,
  108. then one chooses a session key and transmits it to the other encrypting it
  109. with its public key. Both continue communicating using the session key. An
  110. outside attacker is not able to able to read the secret session key if he
  111. just passively eavesdrops the communication of both.
  112. <div class="p"><!----></div>
  113. While public-key cryptography looks like a really good solution to the
  114. problem, it introduces a new problem into the scenario. An active attacker
  115. might intercept the communication between both parties and replaces the
  116. transmitted public keys with his own public key. Both parties would exchange
  117. keys, but in fact each would receive the public key of the attacker. Any
  118. communication first goes to the attacker who decrypts the messages using his
  119. private key and then re-encrypts them using the target's public key. He's
  120. now able to read the session key in cleartext and can also read the
  121. following secure communication that uses this session key. This attack is
  122. known as <em>man-in-the-middle attack</em>.
  123. <div class="p"><!----></div>
  124. <h3><a name="tth_sEc2.2">
  125. 2.2</a>&nbsp;&nbsp;Cryptographic fingerprints for key verification</h3>
  126. <div class="p"><!----></div>
  127. Several protocols have been proposed to prevent man-in-the-middle attacks
  128. when using public-key cryptography, e.g. the interlock protocol [<a href="#ilp" name="CITEilp">ILP</a>].
  129. Other protocols rely on digital signatures or trusted key distribution
  130. centers to verify the integrity of the public keys. Unfortunately in most
  131. situation such methods are not available and the initially exchanged public
  132. keys are verificated using so called <em>cryptographic fingerprints</em>.
  133. <div class="p"><!----></div>
  134. Cryptographic fingerprints (also called messages digests) are short blocks
  135. generated by cryptographic one-way hash functions (also called
  136. collision-free hash functions). These cryptographic fingerprints act similar
  137. to real fingerprints, if two fingerprints match it is <em>very</em> likely that
  138. they have been made by the same person. In order to verify the integrity of
  139. a public key the sender and receiver both generate a cryptographic
  140. fingerprint from the key and compare these fingerprints, e.g. by phone.
  141. <div class="p"><!----></div>
  142. The longer a fingerprint is, the better is its security against collisions
  143. but the harder it is for a common human subject to compare the fingerprint
  144. against another fingerprint. It has been observed that most people tend to
  145. compare only a sequence at the start and at the end of the fingerprint
  146. instead of checking every single digit. Some more sophisticated human
  147. subjects also compare a sequence in the middle - but only very few have been
  148. spotted that compare all digits. This observation led to the idea of
  149. fuzzy fingerprints.
  150. <div class="p"><!----></div>
  151. <h3><a name="tth_sEc2.3">
  152. 2.3</a>&nbsp;&nbsp;Fuzzy fingerprint quality</h3>
  153. <div class="p"><!----></div>
  154. The intention of fuzzy fingerprinting is no to collide against a target
  155. fingerprint, but to find a fuzzy fingerprint that would pass lazy human
  156. comparison. This attack has been proposed by Plasmoid and Skyper in
  157. a private discussion at HAL2001.
  158. <div class="p"><!----></div>
  159. There are some methods for the generation of fuzzy fingerprints. The most
  160. basic is the <em>fuzzy map weighting</em> that was introduced by Plasmoid.
  161. <div class="p"><!----></div>
  162. Each digit of a cryptographic fingerprint is weighted according to a map of
  163. importance. The weights range from 0 to 1 and represent the importance for a
  164. comparison, so that first and last digits have a higher importance than
  165. middle ones. If a digit of the fuzzy fingerprint and the target
  166. fingerprint match the weight is added to the quality of the fuzzy
  167. fingerprint. The sum of the weighted digits is the quality of the fuzzy
  168. fingerprint and equal fingerprints have a quality of 1 or 100
  169. <div class="p"><!----></div>
  170. In order to imitate the natural laziness an inverse gaussian distribution
  171. could be used to generate the fuzzy map. The following example shows an
  172. inverse gaussian distribution for a small 2 byte fingerprint.
  173. <div class="p"><!----></div>
  174. <table>
  175. <tr><td align="right">Target Fingerprint </td><td align="center">= </td><td align="center">9 </td><td align="center">F </td><td align="center">:</td><td align="center">2 </td><td align="center">3 </td></tr>
  176. <tr><td align="right">Fuzzy Map </td><td align="center">= </td><td align="center">25% </td><td align="center">10% </td><td align="center">:</td><td align="center">5% </td><td align="center">20% </td></tr>
  177. <tr><td align="right"></td></tr>
  178. <tr><td align="right">Fuzzy Fingerprint </td><td align="center">= </td><td align="center">9 </td><td align="center">3 </td><td align="center">:</td><td align="center">1 </td><td align="center">3 </td><td align="center"></td></tr>
  179. <tr><td align="right">Quality </td><td align="center">= </td><td align="center">25% </td><td align="center">+ 10% </td><td align="center"></td><td align="center">+ 5% </td><td align="center">+ 20% </td><td align="center">= 45% </td></tr></table>
  180. <div class="p"><!----></div>
  181. Eventhough only 2 digits of 6 are equal the calculated quality is near 50because the important digits at the start and at the end do match. At the
  182. first glance a gaussian distribution might be an overkill for such a simple
  183. map, but it allows the generation of variable-length maps that can be
  184. generated for several one-way hash functions, e.g. MD5 [<a href="#md5" name="CITEmd5">MD5</a>] with 16
  185. bytes fingerprints or SHA1 [<a href="#dss" name="CITEdss">DSS</a>] with 20 bytes fingerpints.
  186. <div class="p"><!----></div>
  187. Instead of the gaussian distribution a cosine function might be used with 3
  188. maxima. This can be achieved if the map is generated within the interval
  189. from <font face="symbol">-</font
  190. >2<font face="symbol">p</font
  191. > to 2<font face="symbol">p</font
  192. >. Important parts of the fingerprint therefore
  193. become the start, the end <em>and</em> the middle sequence.
  194. <div class="p"><!----></div>
  195. An extension for finding fuzzy fingerprints has been proposed by Heinrich
  196. Langos eventhough he probably can't remember that. In addition to the fuzzy
  197. map, a map of common key confusions is added to the quality calculation.
  198. Digits like 6 and 9 or 1 and 7 are often mixed up depending on the format of
  199. the digits, e.g. down written or graphic fonts. A <em>confusion key map</em>
  200. contains the confusion and a quality representing the probability of the
  201. confusion. The following example shows just a few confusions.
  202. <div class="p"><!----></div>
  203. <table>
  204. <tr><td align="center">Target Key </td><td align="center"></td><td align="center">Fuzzy Key </td><td align="center">Quality </td></tr>
  205. <tr><td align="center">6 </td><td align="center"><font face="symbol">®</font
  206. > </td><td align="center">9 </td><td align="center">12% </td></tr>
  207. <tr><td align="center">9 </td><td align="center"><font face="symbol">®</font
  208. > </td><td align="center">6 </td><td align="center">12% </td></tr>
  209. <tr><td align="center">1 </td><td align="center"><font face="symbol">®</font
  210. > </td><td align="center">7 </td><td align="center">8% </td></tr>
  211. <tr><td align="center">7 </td><td align="center"><font face="symbol">®</font
  212. > </td><td align="center">1 </td><td align="center">4% </td></tr></table>
  213. <div class="p"><!----></div>
  214. A confusion map adds more granularity to the quality function of fuzzy maps,
  215. fuzzy fingerprints generated with confusions maps not only contain similar
  216. start and end-sequences in comparison to the target fingerprint, but also
  217. feature digits that might easily be confused with digits from the target
  218. fingerprint.
  219. <div class="p"><!----></div>
  220. It is important to note that such a key mapping is not necessary symmetric
  221. and also that such a confusion key map has not been implemented in this
  222. release but may be added later.
  223. <div class="p"><!----></div>
  224. <h3><a name="tth_sEc2.4">
  225. 2.4</a>&nbsp;&nbsp;Finding fuzzy fingerprints</h3>
  226. <div class="p"><!----></div>
  227. With the fuzzy quality as an instrument to order fuzzy fingerprints, an
  228. attacker is able to search for fingerprints with the best fuzzy quality.
  229. This search involves two major calculation components, the one-way hash
  230. function and the key generation, because the attacker has to bruteforce for
  231. keys that have a good fuzzy fingerprint generated using a hash function.
  232. <div class="p"><!----></div>
  233. Cryptographic one-way hash functions are collision-resistant (or try to be),
  234. therefore changing just one bit of the input data should result in a
  235. complete different fingerprint (50issues into account, it should be very hard to predict the output of a hash
  236. function so that there would be any other way than bruteforcing to receive
  237. good fuzzy fingerprints. Any performance optimisations need to be done
  238. in the key generation component.
  239. <div class="p"><!----></div>
  240. For this document the RSA [<a href="#rsa" name="CITErsa">RSA</a>] and the DSA [<a href="#dss" name="CITEdss">DSS</a>] key generation
  241. have been reviewed. The intention was to improve the performance of the key
  242. generation under the new aspect that the resulting keys not necessary have
  243. to be cryptographic secure but still need to work.
  244. <div class="p"><!----></div>
  245. <h4><a name="tth_sEc2.4.1">
  246. 2.4.1</a>&nbsp;&nbsp;Tweaking RSA key generation</h4>
  247. <div class="p"><!----></div>
  248. The RSA algorithm uses the following interesting variables
  249. <ul>
  250. <li> p, q and n = pq, two strong prime numbers<br /><br /></li>
  251. <li> <font face="symbol">f</font
  252. >(n)=(p<font face="symbol">-</font
  253. >1)(q<font face="symbol">-</font
  254. >1)<br /><br /></li>
  255. <li> e with gcd(e,<font face="symbol">f</font
  256. >(n))=1, the public key<br /><br /></li>
  257. </ul>
  258. <div class="p"><!----></div>
  259. There are two possible approaches to the generation of an RSA key pair
  260. <div class="p"><!----></div>
  261. <ul>
  262. <li> The first step is to randomly choose the public key e and continue to
  263. search for two prime numbers p and q so that p and q meet
  264. gcd(e,<font face="symbol">f</font
  265. >(n))=1 or in other words e and <font face="symbol">f</font
  266. >(n) are relative prime.
  267. This approach has been implemented by the OpenSSL Project [<a href="#ssl" name="CITEssl">SSL</a>].<br /><br /></li>
  268. <li> The other approach is to first calculate the two prime numbers p and
  269. q and then search for an e so that e meets gcd(e,<font face="symbol">f</font
  270. >(n))=1. This
  271. approach is integrated in the <tt>ffp</tt> implementation [<a href="#ffp" name="CITEffp">FFP</a>].<br /><br /></li>
  272. </ul>
  273. <div class="p"><!----></div>
  274. While both approaches create the same result the second one better fits into
  275. the needs of bruteforcing, because the expensive prime number generations
  276. are only performed once. An attacker could calculate the two primes p
  277. and q at the start of the bruteforce process and then search successivly
  278. for public keys e.
  279. <div class="p"><!----></div>
  280. In order to improve the performance even the check for e being relative
  281. prime can be skipped, this is called <em>sloppy</em> key generation. While this
  282. step dramatically increases the performance, it is not guaranteed that the
  283. generated keys still work. Test allow the assumption that only very few
  284. keys are broken and if an attacker stores a list of best keys, e.g. 10 there
  285. is more than a fair chance that more than one key is working.
  286. <div class="p"><!----></div>
  287. <h4><a name="tth_sEc2.4.2">
  288. 2.4.2</a>&nbsp;&nbsp;Tweaking DSA key generation</h4>
  289. <div class="p"><!----></div>
  290. The algorithm uses the following interesting variables
  291. <ul>
  292. <li> p, a prime number of variable length<br /><br /></li>
  293. <li> q, a 160-bit prime factor of p<font face="symbol">-</font
  294. >1<br /><br /></li>
  295. <li> x with x &lt; q, the private key<br /><br /></li>
  296. <li> g, something different [Do we need to discuss any detail?]<br /><br /></li>
  297. <li> y = g<sup>x</sup> mod p, the public key<br /><br /></li>
  298. </ul>
  299. <div class="p"><!----></div>
  300. <a name="slow-dsa">
  301. </a>Increasing the performance of the DSA key generation is a diffcult problem.
  302. At the first step one would start the key generation process similar to
  303. the improvements done to the sloppy RSA key generation by first
  304. calculating the two prime numbers p and q. Note that p and q in
  305. case of DSA old more constraints than in the RSA algorithm.
  306. <div class="p"><!----></div>
  307. After two primes have been found, it is possible to bruteforce over the
  308. private key x that only needs to meed x &lt; q which is a simple and fast
  309. comparison. Unfortunatley it is necessary for each x to calculate the
  310. appropriate public key y which involves calculating a modulus and an
  311. exponentiation with very big numbers and thus is very time consuming.
  312. <div class="p"><!----></div>
  313. Tests with the <tt>ffp</tt> implementation show that DSA is about 1000 times
  314. slower than RSA key generation and therefore will only be available to the
  315. bruteforce process for fuzzy fingerprinting in the next centuries.
  316. <div class="p"><!----></div>
  317. <h2><a name="tth_sEc3">
  318. 3</a>&nbsp;&nbsp;Implementation details</h2>
  319. <a name="ri">
  320. </a>
  321. <div class="p"><!----></div>
  322. Now you have read through a rather strange description of the background and
  323. honestly I know that some points have been discussed far from complete,
  324. nevertheless I also like to present an implementation of the discussed ideas
  325. that is callesd <tt>ffp</tt> and available at The Hacker's Choice website. This
  326. implementation uses the fuzzy fingerprinting technique in order to attack
  327. the key verification protocol used in the client of SSH protocol version 2.
  328. As a good victim the implementation OpenSSH [<a href="#ssh" name="CITEssh">SSH</a>] has been chosen,
  329. because it is free and really good software that can mess with all
  330. commercial implementations (Humble me says so!).
  331. <div class="p"><!----></div>
  332. OpenSSH makes use of the routines from the free crypto and SSL
  333. libraries provided by the OpenSSL Project [<a href="#ssl" name="CITEssl">SSL</a>]. Therefore several
  334. implementation issues have been looked up in the OpenSSL source code
  335. and some parts have even been taken from the actual implementations of
  336. the RSA and DSA key generation.
  337. <div class="p"><!----></div>
  338. OpenSSH uses a hybrid cryptosystem: public-key cryptography is used to
  339. exchange a session key between the client and the server and the following
  340. client-server-communication is encrypted with a symmetric cipher, but
  341. OpenSSH, strictly implementing the SSH protocol, fully relies on the user
  342. verificating of an initially received public key by asking for confirmation
  343. if the generated cryptographic fingerprint is known and matches.
  344. <div class="p"><!----></div>
  345. <pre>
  346. $ ssh foo@fluffy
  347. The authenticity of host 'fluffy (10.0.0.2)' can't be established.
  348. RSA key fingerprint is 54:3a:12:db:d4:35:71:45:3d:61:51:c1:df:47:bc:bc.
  349. Are you sure you want to continue connecting (yes/no)?
  350. </pre>
  351. <br clear="all" /><table border="0" width="100%"><tr><td>
  352. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  353. </td></tr></table>
  354. </td></tr></table>
  355. <div class="p"><!----></div>
  356. Once the fingerprint and the key have been approved the key is stored in a
  357. file called <tt>known_hosts</tt> or <tt>known_hosts2</tt> and upon further
  358. connections the retrieved public key is compared to the stored key an no
  359. user interaction is necessary. It has also been shown that there exists
  360. tricks to force the SSH client to ask again for the confirmation of a key
  361. eventhough a correct version has already been retrieved [<a href="#sfp" name="CITEsfp">SFP</a>]. Using
  362. these techniques, a man-in-the-middle tool and <tt>ffp</tt> form a quite
  363. mailicous attack that can be launched against any SSH connection using the
  364. SSH protocol version 2.
  365. <div class="p"><!----></div>
  366. Therefore <tt>ffp</tt> acts an extension to common man-in-the-middle tools such
  367. as dsniff [<a href="#ds" name="CITEds">DS</a>] or ettercap [<a href="#ec" name="CITEec">EC</a>]. If the attacker sends a public
  368. key to the victim that has a fuzzy fingerprint that nearly looks like the
  369. target fingerprint, the victim might easier be fooled to accept the public
  370. key and continue the eavesdropped connection. Because all those theory is
  371. gray, we are quickly installing our implementation and then start to
  372. actively generate a fuzzy fingerprint to be used with Sebastian Krahmer's
  373. tool SSHarp.
  374. <div class="p"><!----></div>
  375. <h3><a name="tth_sEc3.1">
  376. 3.1</a>&nbsp;&nbsp;Installation of <tt>ffp</tt></h3>
  377. <div class="p"><!----></div>
  378. In order to install this release, you need a Unix environment or at
  379. least something very similar such as Cygwin or QNX. You will also need
  380. a mathematical library which is present in most Unix system and the
  381. OpenSSL libraries available at <tt>http://www.openssl.org</tt>.
  382. <div class="p"><!----></div>
  383. If everything is place, follow the boring GNU autoconf/automake installation
  384. process:
  385. <div class="p"><!----></div>
  386. <pre>
  387. $ ./configure
  388. $ make
  389. $ su -c "make install"
  390. </pre>
  391. <br clear="all" /><table border="0" width="100%"><tr><td>
  392. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  393. </td></tr></table>
  394. </td></tr></table>
  395. <div class="p"><!----></div>
  396. If you want to you can use the <tt>-prefix</tt> option to install this
  397. software to a specific direction. The default location is <tt>/usr/local</tt>.
  398. If you need to you can use the <tt>-with-ssl-dir</tt> option to specify the
  399. directory of your OpenSSL installation.
  400. <div class="p"><!----></div>
  401. If during the compilation or installation process errors occur ask yourself
  402. at first, if you have done anything wrong, wait for a time, say 2 minutes,
  403. and ask yourself again if you have been honest to yourself. If it turns out
  404. that there is really something wrong with the code of <tt>ffp</tt> drop a mail
  405. to Plasmoid <tt>plasmoid@thc.org</tt> and describe your problems. Please
  406. understand that you are on your own if you try to fiddle with any Windows
  407. release and Cygwin.
  408. <div class="p"><!----></div>
  409. <h3><a name="tth_sEc3.2">
  410. 3.2</a>&nbsp;&nbsp;Usage of <tt>ffp</tt></h3>
  411. <div class="p"><!----></div>
  412. The current release of Fuzzy Fingerprint is a command line tool called <tt>
  413. ffp</tt> that has the following command line option
  414. <div class="p"><!----></div>
  415. <pre>
  416. Usage: ffp [Options]
  417. Options:
  418. -f type Specify type of fingerprint to use [Default: md5]
  419. Available: md5, sha1, ripemd
  420. -t hash Target fingerprint in byte blocks.
  421. Colon-separated: 01:23:45:67... or as string 01234567...
  422. -k type Specify type of key to calculate [Default: rsa]
  423. Available: rsa, dsa
  424. -b bits Number of bits in the keys to calculate [Default: 1024]
  425. -K mode Specify key calulation mode [Default: sloppy]
  426. Available: sloppy, accurate
  427. -m type Specify type of fuzzy map to use [Default: gauss]
  428. Available: gauss, cosine
  429. -v variation Variation to use for fuzzy map generation [Default: 4.3]
  430. -y mean Mean value to use for fuzzy map generation [Default: 0.08]
  431. -l size Size of list that contains best fingerprints [Default: 10]
  432. -s filename Filename of the state file [Default: /var/tmp/ffp.state]
  433. -e Extract SSH host key pairs from state file
  434. -d directory Directory to store generated ssh keys to [Default: /tmp]
  435. -p period Period to save state file and display state [Default: 60]
  436. -V Display version information
  437. </pre>
  438. <br clear="all" /><table border="0" width="100%"><tr><td>
  439. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  440. </td></tr></table>
  441. </td></tr></table>
  442. <div class="p"><!----></div>
  443. If you have read the theoretical background covered in this paper you should
  444. already have an idea how some of these options work and which parameters
  445. they influence. Due to the fact that <tt>ffp</tt> is not a kernel module, you
  446. run through the classical try and error phase and find the rest out
  447. yourself. Instead of discussing each detail of the implementation, this
  448. document demonstrates a sample session of <tt>ffp</tt> and SSHarp.
  449. <div class="p"><!----></div>
  450. <h3><a name="tth_sEc3.3">
  451. 3.3</a>&nbsp;&nbsp;Sample session using <tt>ffp</tt> and SSHarp</h3>
  452. <div class="p"><!----></div>
  453. This part of the documentation demonstrates how to use <tt>ffp</tt> in
  454. conjunction with a man-in-the-middle tool and describes a sample session
  455. that finally demonstrates the transmission and display of a fuzzy
  456. fingerprint. Other nasty techniques, such as ARP spoofing, that are
  457. necessary for the successful interception and manipulation of SSH
  458. connections, have been wisely left out because the author doesn't have any
  459. idea how these things actually work, but hopes to know some bad guys who do.
  460. <div class="p"><!----></div>
  461. <h4><a name="tth_sEc3.3.1">
  462. 3.3.1</a>&nbsp;&nbsp;Investigating the victim host</h4>
  463. <div class="p"><!----></div>
  464. The first step could be to investigate the victim SSH server in order to
  465. find out which version of SSH is used and which public key algorithms are
  466. available. The OpenSSH package [<a href="#ssh" name="CITEssh">SSH</a>] provides all tools we need for
  467. gathering information from a remote SSH server. Our victim will be the
  468. server <tt>skena.foo.roqe.org</tt> which luckily is not available outside the
  469. sample network.
  470. <div class="p"><!----></div>
  471. <pre>
  472. foo@fluffy:doc&#62; ssh-keyscan -t rsa skena.foo.roqe.org &#62; /tmp/skena-sshd
  473. # skena.foo.roqe.org SSH-1.99-OpenSSH_3.4
  474. foo@fluffy:doc&#62; cat /tmp/skena-sshd
  475. skena.foo.roqe.org ssh-rsa
  476. AAAAB3NzaC1yc2EAAAABIwAAAIEAtE/CTgGl2HSUZUiCiSqhJafup [...]
  477. </pre>
  478. <br clear="all" /><table border="0" width="100%"><tr><td>
  479. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  480. </td></tr></table>
  481. </td></tr></table>
  482. <div class="p"><!----></div>
  483. It turns out that <tt>skena.foo.roqe.org</tt> is using an OpenSSH v3.4 server
  484. able to run the SSH v2 protocol and also has an RSA public host key
  485. available. This is good news for us, because <tt>ffp</tt> only support SSH v2
  486. keys and RSA key generation is faster than DSA <a href="#slow-dsa">2.4.2</a>. The SSH
  487. server version is important to play banner tricks on the server as they
  488. have been covered in Sebastian's paper.
  489. <div class="p"><!----></div>
  490. Now let's take a closer look at the bits used in the RSA algorithm and
  491. of course at the MD5 fingerprint of the host key we retrieved from
  492. <tt>skena.foo.roqe.org</tt>.
  493. <div class="p"><!----></div>
  494. <pre>
  495. foo@fluffy:doc&#62; ssh-keygen -f /tmp/skena-sshd -l
  496. 1024 d6:b7:df:31:aa:55:d2:56:9b:32:71:61:24:08:44:87 skena.foo.roqe.org
  497. </pre>
  498. <br clear="all" /><table border="0" width="100%"><tr><td>
  499. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  500. </td></tr></table>
  501. </td></tr></table>
  502. <div class="p"><!----></div>
  503. Again excellent news, good old <tt>skena.foo.roqe.org</tt> is only using a 1024
  504. bit RSA key and we also note the cryptographic fingerprint <tt>
  505. d6:b7:df:31:aa:55:d2:56:9b:32:71:61:24:08:44:87</tt>. So using a 2048 or even
  506. 4096 host key is not only a good necessary protection against cryptographic
  507. attacks but also a protection against cheap attacks such as fuzzy
  508. fingerprinting.
  509. <div class="p"><!----></div>
  510. <h4><a name="tth_sEc3.3.2">
  511. 3.3.2</a>&nbsp;&nbsp;Generating a key pair with a good fuzzy fingerprint</h4>
  512. <div class="p"><!----></div>
  513. The next step is to generate a public key and a private key for an OpenSSH
  514. server so that the public key has a fuzzy fingerprint that nearly matches
  515. the target fingerprint. In order to do so we launch <tt>ffp</tt> with the
  516. appropriate options. <tt>ffp</tt> will output a lot of information and then
  517. start to crunch. This process can take several days, the longer you wait
  518. the better the fuzzy fingerprint can get. Please note that the process is
  519. not linear at all or in any way predictable, therefore you'll need a lot of
  520. time or a lot of luck, best is both.
  521. <div class="p"><!----></div>
  522. <pre>
  523. foo@fluffy:doc&#62;./ffp -f md5 -k rsa -b 1024 \
  524. -t d6:b7:df:31:aa:55:d2:56:9b:32:71:61:24:08:44:87
  525. </pre>
  526. <br clear="all" /><table border="0" width="100%"><tr><td>
  527. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  528. </td></tr></table>
  529. </td></tr></table>
  530. <div class="p"><!----></div>
  531. Periodically <tt>ffp</tt> will send some status information to the screen and
  532. also show the best fuzzy fingerprint that was generated so far. Internally
  533. <tt>ffp</tt> keeps a list of best fuzzy fingerprints, so that you are later
  534. able to choose the best yourself. The output of <tt>ffp</tt> during the
  535. crunching process looks like this:
  536. <div class="p"><!----></div>
  537. <pre>
  538. ---[Current State]--------------------------------------------------------
  539. Running: 0d 00h 02m 00s | Total: 2216k hashs | Speed: 18469 hashs/s
  540. --------------------------------------------------------------------------
  541. Best Fuzzy Fingerprint from State File /var/tmp/ffp.state
  542. Hash Algorithm: Message Digest 5 (MD5)
  543. Digest Size: 16 Bytes / 128 Bits
  544. Message Digest: d1:bc:df:32:a2:45:2e:e0:96:d6:a1:7c:f5:b8:70:8f
  545. Target Digest: d6:b7:df:31:aa:55:d2:56:9b:32:71:61:24:08:44:87
  546. Fuzzy Quality: 47.570274%
  547. </pre>
  548. <br clear="all" /><table border="0" width="100%"><tr><td>
  549. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  550. </td></tr></table>
  551. </td></tr></table>
  552. <div class="p"><!----></div>
  553. The program displays the time it is running the number of hashs it has
  554. been tested in "kilohashs" and the speed. An 1.2 GHz PC has a fair
  555. speed of 130000 hashs per second, where my poor UltraSparc machine only
  556. calculates 20000 hashs per second.
  557. <div class="p"><!----></div>
  558. You can interrupt a running session, by pressing the keys <tt>CTRL-C</tt>, <tt>
  559. ffp</tt> will abort and store the current environment in a so called state file
  560. that is usually stored in <tt>/var/tmp/ffp.state</tt>. Issuing again simple
  561. command <tt>ffp</tt> without any options continues the crunching process from
  562. the saved state file.
  563. <div class="p"><!----></div>
  564. Please note that while writing this documentation, the author did not find
  565. the time to search for a good fuzzy fingerprint and therefore used a
  566. fingerprint that was achieved after only a few minutes of intensive
  567. crunching on an Ultra 10. Extraction of the fingerprints is done using the
  568. following command.
  569. <div class="p"><!----></div>
  570. <pre>
  571. foo@fluffy:src&#62; ./ffp -e -d /tmp
  572. ---[Restoring]------------------------------------------------------------
  573. Reading FFP State File: Done
  574. Restoring environment: Done
  575. Initializing Crunch Hash: Done
  576. --------------------------------------------------------------------------
  577. Saving SSH host key pairs: [00] [01] [02] [03] [04] [05] [06] [07]
  578. </pre>
  579. <br clear="all" /><table border="0" width="100%"><tr><td>
  580. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  581. </td></tr></table>
  582. </td></tr></table>
  583. <div class="p"><!----></div>
  584. The generated public and private SSH host keys in the <tt>/tmp</tt> directory
  585. can be investigated using the following command. The attacker should use
  586. the key that looks best in a human sense. Eventhough fuzzy map weighting is
  587. a nice measure for the quality of fuzzy fingerprints the human eye may
  588. best choose which fingerprint has the greatest chance to be confused with
  589. the original target fingerprint.
  590. <div class="p"><!----></div>
  591. <pre>
  592. foo@fluffy:doc&#62; for i in /tmp/ssh-rsa??.pub ; do ssh-keygen -f $i -l ; done
  593. 1024 d6:b7:8f:a6:fa:21:0c:0d:7d:0a:fb:9d:30:90:4a:87 /tmp/ssh-rsa00.pub
  594. 1024 d6:b5:d0:34:aa:03:ca:9b:7f:66:b4:79:0a:86:74:a7 /tmp/ssh-rsa01.pub
  595. 1024 d6:87:6f:71:9d:2c:5d:fb:57:54:03:a2:2d:09:51:87 /tmp/ssh-rsa02.pub
  596. 1024 d6:b2:3f:ac:13:ce:ca:59:3f:b1:4b:c2:f0:03:44:97 /tmp/ssh-rsa03.pub
  597. 1024 d6:b9:0f:31:85:b3:34:1e:19:f5:d9:60:79:be:f4:85 /tmp/ssh-rsa04.pub
  598. 1024 96:57:df:31:8d:11:f2:b1:28:a4:fd:6d:34:5f:b2:87 /tmp/ssh-rsa05.pub
  599. 1024 d0:b0:df:0e:7c:f6:54:94:46:12:72:94:3a:07:a4:87 /tmp/ssh-rsa06.pub
  600. 1024 d6:b7:dd:be:f3:52:d9:8f:7e:53:30:49:f1:a8:94:5a /tmp/ssh-rsa07.pub
  601. </pre>
  602. <br clear="all" /><table border="0" width="100%"><tr><td>
  603. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  604. </td></tr></table>
  605. </td></tr></table>
  606. <div class="p"><!----></div>
  607. In this sample session the private key <tt>/tmp/ssh-rsa00</tt> and the public
  608. key <tt>/tmp/ssh-rsa00.pub</tt> have been chosen for the attack against the
  609. host <tt>skena.foo.roqe.org</tt>. But also note that only after a few minutes
  610. of crunching there are already several fingerprints that contain a good
  611. start and end sequence and two fingerprints that share the correct first two
  612. bytes.
  613. <div class="p"><!----></div>
  614. <h4><a name="tth_sEc3.3.3">
  615. 3.3.3</a>&nbsp;&nbsp;Launching <tt>ssharp</tt> with the generated keys</h4>
  616. <div class="p"><!----></div>
  617. The special thing about the SSHarp implementation is the fact that this
  618. tool is build upon the OpenSSH server and therefore the configuration is
  619. very similar to the OpenSSH server configuration. We are now going to start
  620. a simple man-in-the-middle session. We launch the <tt>ssharpd</tt> server
  621. on the host <tt>fluffy.foo.roqe.org</tt> on port 10000.
  622. <div class="p"><!----></div>
  623. <pre>
  624. foo@fluffy:ssharp&#62; ./ssharpd -f /etc/ssh/sshd_config -d \
  625. -h /tmp/ssh-rsa00 -4 -p 10000
  626. Dude, Stealth speaking here. This is 7350ssharp, a smart
  627. SSH1 &amp; SSH2 MiM attack implementation. It's for demonstration
  628. and educational purposes ONLY! Think before you type ... (&lt;ENTER&#62; or
  629. &lt;Ctrl-C&#62;)
  630. debug1: Seeding random number generator
  631. debug1: sshd version OpenSSH_2.9p1
  632. debug1: read PEM private key done: type RSA
  633. debug1: private host key: #0 type 1 RSA
  634. Disabling protocol version 1. Could not load host key
  635. debug1: Bind to port 10000 on 0.0.0.0.
  636. Server listening on 0.0.0.0 port 10000.
  637. </pre>
  638. <br clear="all" /><table border="0" width="100%"><tr><td>
  639. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  640. </td></tr></table>
  641. </td></tr></table>
  642. <div class="p"><!----></div>
  643. While this example looks very simple it might be necessary to study the
  644. details of the SSHarp implementation by reading the file <tt>README.sharp</tt>
  645. in order to setup a working environment. It has already been noted in the
  646. beginning that this session doesn't demonstrate all necessary steps to setup
  647. a man-in-the-middle attack and only focuses on the parts that are relevant
  648. to see <tt>ffp</tt> in active process.
  649. <div class="p"><!----></div>
  650. We can now connect to our host <tt>fluffy.foo.roqe.org</tt> at port 10000
  651. and see our faked public key and its fuzzy fingerprint in action using
  652. the normal SSH client
  653. <div class="p"><!----></div>
  654. <pre>
  655. foo@fluffy:ssharp&#62; ssharp -l foo fluffy.foo.roqe.org -2 -p 10000
  656. The authenticity of host '10.0.0.2 (10.0.0.2)' can't be established.
  657. RSA key fingerprint is d6:b7:8f:a6:fa:21:0c:0d:7d:0a:fb:9d:30:90:4a:87.
  658. Are you sure you want to continue connecting (yes/no)?
  659. </pre>
  660. <br clear="all" /><table border="0" width="100%"><tr><td>
  661. <table align="center" cellspacing="0" cellpadding="2"><tr><td nowrap="nowrap" align="center">
  662. </td></tr></table>
  663. </td></tr></table>
  664. <div class="p"><!----></div>
  665. What we are seeing is in fact our fuzzy fingerprint and our client is
  666. asking for confirmation. If the user has got a headache, trouble with
  667. his/ger girl/boyfriend or is not that concentrated, pressing <em>yes</em> at
  668. this situation might allow an attacker to eavesdrop <em>all</em> following
  669. communications with the host <tt>skena.foo.roqe.org</tt>.
  670. <div class="p"><!----></div>
  671. In order to complete your man-in-the-middle setup, you need to redirect
  672. the traffic to <tt>skena.foo.roqe.org</tt> to our fake server at
  673. <tt>fluffy.foo.roqe.org</tt>, e.g. by using ARP spoofing. You also need to
  674. use port forwarding on <tt>fluffy</tt> to redirect port 10000 to 22, so
  675. that normal SSH connection will be accepted. That's it.
  676. <div class="p"><!----></div>
  677. <h2><a name="tth_sEc4">
  678. 4</a>&nbsp;&nbsp;Thanks and greetings</h2>
  679. <div class="p"><!----></div>
  680. 2
  681. <ul>
  682. <li> Skyper <br />
  683. Who invented the idea with me and is still working on a
  684. different approach to very fast RSA key generation.<br /><br /></li>
  685. <li> Wilkins and Arrow <br />
  686. For the classical old-fashioned booze-ups and the
  687. obligatoric action.<br /><br /></li>
  688. <li> Hannes and Heinrich <br />
  689. Who really believe this is serious, academic
  690. work and code. Indeed, it is!<br /><br /></li>
  691. <li> TTEHSCO Fusion <br />
  692. This is the first unofficial release for TTEHSCO. Cheers
  693. to all fellows and rockers at The Hacker's Choice and
  694. Team TESO.<br /><br /></li>
  695. <li> All that jazz around <br /><br /><br /></li>
  696. </ul>
  697. <div class="p"><!----></div>
  698. <h2>References</h2>
  699. <dl compact="compact">
  700. <dt><a href="#CITEffp" name="ffp">[FFP]</a></dt><dd>
  701. <b> Implementation of Fuzzy Fingerprinting for
  702. RSA, DSA, MD5 and SHA1</b>
  703. <div class="p"><!----></div>
  704. Plasmoid
  705. <div class="p"><!----></div>
  706. <a href="http://www.thc.org/releases.php">http://www.thc.org/releases.php</a>
  707. <div class="p"><!----></div>
  708. </dd>
  709. <dt><a href="#CITErsa" name="rsa">[RSA]</a></dt><dd>
  710. <b>A Method for Obtaining Digital Signatures and Public-Key
  711. Cryptosystems</b>
  712. <div class="p"><!----></div>
  713. Ronald L. Rivest, Adi Shamir, and Leonard M. Adleman.
  714. Communications of the ACM 21,2 (Feb. 1978), 120-126.
  715. <div class="p"><!----></div>
  716. <a href="http://theory.lcs.mit.edu/~rivest/rsapaper.pdf">http://theory.lcs.mit.edu/&nbsp;rivest/rsapaper.pdf</a>
  717. <div class="p"><!----></div>
  718. </dd>
  719. <dt><a href="#CITEilp" name="ilp">[ILP]</a></dt><dd>
  720. <b>How to Expose an Eavesdropper</b>
  721. <div class="p"><!----></div>
  722. R. L. Rivest, Adi Shamir, Communications of the ACM, v. 27, n. 4,
  723. February 1978, pp. 120-126.
  724. <div class="p"><!----></div>
  725. </dd>
  726. <dt><a href="#CITEmd5" name="md5">[MD5]</a></dt><dd>
  727. <b>The MD5 Message Digest Algorithm</b>
  728. <div class="p"><!----></div>
  729. R. L. Rivest, RFC 1321. April 1992
  730. <div class="p"><!----></div>
  731. <a href="http://theory.lcs.mit.edu/~rivest/Rivest-MD5.txt">http://theory.lcs.mit.edu/&nbsp;rivest/Rivest-MD5.txt</a>
  732. <div class="p"><!----></div>
  733. </dd>
  734. <dt><a href="#CITEdss" name="dss">[DSS]</a></dt><dd>
  735. <b>Digital Signature Standard (DSS)</b>
  736. <div class="p"><!----></div>
  737. National Institute of Standards and Technology, NIST FIPS PUB 186,
  738. U.S. Department of Commerce, May 1994.
  739. <div class="p"><!----></div>
  740. <a href="http://csrc.nist.gov/publications/fips/fips186-2/fips186-2.pdf">http://csrc.nist.gov/publications/fips/fips186-2/fips186-2.pdf</a>
  741. <div class="p"><!----></div>
  742. </dd>
  743. <dt><a href="#CITEsfp" name="sfp">[SFP]</a></dt><dd>
  744. <b>SSH for Fun and Profit</b>
  745. <div class="p"><!----></div>
  746. Sebastian Krahmer, July 2002
  747. <div class="p"><!----></div>
  748. <a href="http://stealth.7350.org/ssharp.pdf">http://stealth.7350.org/ssharp.pdf</a>
  749. <div class="p"><!----></div>
  750. </dd>
  751. <dt><a href="#CITEssh" name="ssh">[SSH]</a></dt><dd>
  752. <b>OpenSSH Suite</b>
  753. <div class="p"><!----></div>
  754. Free version of the SSH protocol suite of network connectivity
  755. tools.
  756. <div class="p"><!----></div>
  757. <a href="http://www.openssh.org">http://www.openssh.org</a>
  758. <div class="p"><!----></div>
  759. </dd>
  760. <dt><a href="#CITEssl" name="ssl">[SSL]</a></dt><dd>
  761. <b>OpenSSL Project</b>
  762. <div class="p"><!----></div>
  763. Open Source toolkit implementing the Secure Sockets Layer (SSL
  764. v2/v3) and Transport Layer Security (TLS v1) protocols.
  765. <div class="p"><!----></div>
  766. <a href="http://www.openssl.org">http://www.openssl.org</a>
  767. <div class="p"><!----></div>
  768. </dd>
  769. <dt><a href="#CITEds" name="ds">[DS]</a></dt><dd>
  770. <b>DSniff - Tools for network auditing and penetration
  771. testing</b>
  772. <div class="p"><!----></div>
  773. Dug Song
  774. <div class="p"><!----></div>
  775. <a href="http://www.monkey.org/~dugsong/dsniff">http://www.monkey.org/&nbsp;dugsong/dsniff</a>
  776. <div class="p"><!----></div>
  777. </dd>
  778. <dt><a href="#CITEec" name="ec">[EC]</a></dt><dd>
  779. <b>Ettercap Multiprupose Sniffer/Interceptor/Logger</b>
  780. <div class="p"><!----></div>
  781. A. Ornaghi, M. Valleri
  782. <div class="p"><!----></div>
  783. <a href="http://ettercap.sourceforge.net">http://ettercap.sourceforge.net</a></dd>
  784. </dl>
  785. <div class="p"><!----></div>
  786. </td></tr>
  787. </table>
  788. </body>
  789. <div class="p"><!----></div>
  790. <br /><br /><hr /><small>File translated from
  791. T<sub><font size="-1">E</font></sub>X
  792. by <a href="http://hutchinson.belmont.ma.us/tth/">
  793. T<sub><font size="-1">T</font></sub>H</a>,
  794. version 3.44.<br />On 25 Oct 2003, 16:39.</small>
  795. </html>