[openssl-dev] Could someone verify my efforts of a scan for the DROWN attack?

Brian Reichert reichert at numachi.com
Wed Mar 30 16:27:47 UTC 2016


I'm applying the advice from this post:

  https://mta.openssl.org/pipermail/openssl-dev/2016-March/005602.html

I've successfully downloaded and compiled this test utility.

I have a number of varying SSL services I'm scanned; some are Java
apps, and some are linked against OpenSSL.

According to the above URL:

  In both cases all the individual tests in the scripts should print "OK" 
  status if the specific cipher is not supported and report "failed: 0" 
  together with exit status of 0 if you want to automate it.

>From this, I infer that 'fail' means an SSL connection could indeed
be established using that SSL version/cipher combination.  (The code uses
the 'conversation' term, so I'll use that in this post.)

Whereas most of my services come up clean, I have one that I can't
seem to reconfigure such that it passes.

I'm concerned I'm getting bit by false 'failures'.

My actual failing test yields these conversations that 'fail'. I
slightly augmented this script to report the 'failed' conversation:

        else:
		print("BAD {0} ...".format(conversation_name))
		bad+=1


  # PYTHONPATH=. python scripts/test-sslv2-force-cipher.py \
  -h localhost -p 10000 > out
  # grep BAD out
  BAD Connect with SSLv2 EXP-RC4-MD5 ...
  BAD Connect with SSLv3 EXP-RC4-MD5 ...
  BAD Connect with SSLv3 EXP-RC2-CBC-MD5 ...
  BAD Connect with SSLv2 EXP-RC2-CBC-MD5 ...

Each failed conversation yields a 'TLSIllegalParameterException'
error; e.g.

  Connect with SSLv2 EXP-RC4-MD5 ...
  Error encountered while processing node <tlsfuzzer.expect.ExpectServerHello2
  object at 0x2b3e590> (child: <tlsfuzzer.messages.ClientMasterKeyGenerator
  object at 0x2b3e710>) with last message being: None
  Error while processing
  Traceback (most recent call last):
    File "scripts/test-sslv2-force-export-cipher.py", line 109, in main
      runner.run()
    File "/root/tlsfuzzer/tlsfuzzer/runner.py", line 129, in run
      header, parser = self.state.msg_sock.recvMessageBlocking()
    File "/root/tlsfuzzer/tlslite/messagesocket.py", line 100, in
  recvMessageBlocking
      for res in self.recvMessage():
    File "/root/tlsfuzzer/tlslite/messagesocket.py", line 82, in recvMessage
      for ret in self.recvRecord():
    File "/root/tlsfuzzer/tlslite/recordlayer.py", line 682, in recvRecord
      for result in self._recordSocket.recv():
    File "/root/tlsfuzzer/tlslite/recordlayer.py", line 188, in recv
      for record in self._recvHeader():
    File "/root/tlsfuzzer/tlslite/recordlayer.py", line 165, in _recvHeader
      "Malformed record layer header")
  TLSIllegalParameterException: Malformed record layer header

When I test for each of these SSL version/ciphers individually using
s_client, they all fail; e.g.:

  # openssl s_client -connect localhost:10000 -ssl2 \
  -cipher EXP-RC4-MD5 > /dev/null; echo $?
  error setting cipher list
  140548678301512:error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no
  cipher match:ssl_lib.c:1314:
  1

So - are the python-based tests really failing in my case?

For example, hitting port 80, which isn't SSL-enabled at all, also yields
the TLSIllegalParameterException error, and a non-zero exit status:

  # PYTHONPATH=. python scripts/test-sslv2-force-export-cipher.py \
  -h localhost -p 80  | grep TLSIllegalParameterException
  TLSIllegalParameterException: Malformed record layer header
  TLSIllegalParameterException: Malformed record layer header
  TLSIllegalParameterException: Malformed record layer header
  TLSIllegalParameterException: Malformed record layer header
  TLSIllegalParameterException: Malformed record layer header
  TLSIllegalParameterException: Malformed record layer header

I do appreciate any feedback on this matter!

-- 
Brian Reichert				<reichert at numachi.com>
BSD admin/developer at large	


More information about the openssl-dev mailing list