On Wed, Mar 22, 2017 at 03:22:29PM -0700, Konstantin Serebryany wrote:
> >
> > There are various combinations of how this works exactly, but it
> > boils down that you get a packet, decrypt that, and then parse the
> > decrypted packet.
> >
>
> Is it possible to simply fuzz the "then parse the decrypted packet" part?
I guess it's possible to set up a fuzzer for only parsing the client
hello message and so on. But with the parsed data it's normally going
to do things, based on that it will enable certain things, send
back 1 or more packets (that's not in the input file), get other
packets in return, and so on. There is a whole statemachine that is
affected by the parsed data, by things from a previous packet and so
on. And I really want to fuzz as much as possible of that, which
includes all the interactions between the different packets.
There is possibly a large different in place of where the data is
parsed and where it has an effect in the flow. I assume that the
fuzzers are smart enough to see if I change a bit at some place,
it has an effect much later then were it's parsed.
But with encryption, changing a bit will actually change the whole
decrypted packet, and I guess it can't see anymore how changing
that has an effect. And that in the encrypted part is currently just
dumb luck that it finds something useful.
So clearly having a mode where the encryption doesn't do anything
is useful. I added the NULL ciphers, but I think I should at least
also have an option to turn all ciphers into a NULL cipher.
Kurt