You can use dnspython to generate wire format.

Generally, I think that writing more specific fuzzers on top of APIs that 
consumes user input would be more useful than just fuzzing `named`.

F.e. it should be possible to write a fuzzer that takes multiple DNS messages 
as input (starting with query + all DNS messages needed to resolve the query) 
would be more useful that just fuzzing “stuff”.

Also I think that for more complex stuff it would be better to write a protocol 
specific input generator than just generic one found in existing fuzzers.

Ondřej
--
Ondřej Surý — ISC (He/Him)

My working hours and your working hours may be different. Please do not feel 
obligated to reply outside your normal working hours.

> On 5. 8. 2021, at 18:51, Siva Kakarla <sivakesa...@gmail.com> wrote:
> 
> 
> Thanks, Ondrej, for the reply.
> 
> Fuzzing responses is the second part, I would say. For now, I am only fuzzing 
> the authoritative server, so fuzzing named with queries would be a good 
> starting point. I will check the GitHub repository you pointed out. 
> 
> The instructions for running AFL work great, thanks!
> 
> I came across the '-A' option from the report you filed a year ago, but was 
> under the impression that the "client" would be the default but I just saw 
> that it is none in the code so, I guess, named has to be passed with "named 
> -A client:IP:port" to fuzz the authoritative server with queries. I will 
> check the files you pointed more carefully. 
> 
> When the AFL code was first added to Bind 4-5 years ago, what seed input was 
> given to it?
> 
> I understand that they are raw packets, but how did you get them in the raw 
> format? I guess the fuzzer would have generated some of them but what were 
> the starting raw packets? So, there is also no way to convert them from raw 
> format to readable DNS messages as most of them are invalid but is there a 
> way for valid ones?
> 
> I will try to be more specific - say I want to seed with a query <foo.com, 
> A>, how do I get the DNS packet that has this query in the raw format? 
> (capturing it using Wireshark?)
> 
> Thanks a lot again for taking the time to answer my questions.
> 
>> On Thu, Aug 5, 2021 at 9:40 PM Ondřej Surý <ond...@isc.org> wrote:
>> If you want to get your hands dirty, I would recommend looking at 
>> https://github.com/dobin/ffw, but for useful fuzzing, this would also need a 
>> more complicated client fuzzing support because you don’t only want to fuzz 
>> the queries, but also responses given by “fake” authoritative servers and 
>> you want to do that on various levels of DNS tree and for various query 
>> types.  It’s a state machine and by doing fuzzing on single level, you might 
>> never hit all the states.
>> 
>> Ondrej
>> --
>> Ondřej Surý (He/Him)
>> ond...@isc.org
>> 
>> > On 5. 8. 2021, at 18:01, Ondřej Surý <ond...@isc.org> wrote:
>> > 
>> > 
>> > --
>> > Ondřej Surý (He/Him)
>> > ond...@isc.org
>> > 
>> >> On 5. 8. 2021, at 14:37, Siva Kakarla <sivakesa...@gmail.com> wrote:
>> >> 
>> >> Hello Everyone,
>> >> 
>> >> I am trying to understand and set up a fuzzer for the Bind DNS 
>> >> implementation. My current goal is to fuzz the authoritative server with 
>> >> queries. 
>> >> 
>> >> I have looked around and came across different fuzzing engines, but I 
>> >> have some trouble and some questions getting it to work. If anyone has 
>> >> anything to comment on, please reply, and that would be really helpful.
>> >>      • I configured with CC=/path/to/afl/afl-clang./configure 
>> >> --enable-fuzzing=afl or afl-clang-fast to enable fuzzing. Then, I did 
>> >> make and  make install.  I then tried fuzzing the named binary with 
>> >> afl-fuzz -i fuzz/dns_message_parse.in/ -o findings /usr/local/sbin/named 
>> >> -gbut then it stops immediately, sayingthe program crashed with one of 
>> >> the test cases provided. 
>> >>              • How to fuzz the named binary with queries?
>> > 
>> > Read bin/named/fuzz.c and associated code in bin/named/main.c — it’s more 
>> > complicated to set it up (you need to pass -A extra option to `named`).
>> > 
>> >>              • How to get the seed input in raw format? 
>> >>              • Honggfuzz seems to fuzz the named binary, but it produced 
>> >> too many files as crash reports within a minute. I have asked about it on 
>> >> their GitHub. Anyone that worked with Honggfuzz, please reply. 
>> > 
>> > I see, you got response from hongfuzz author directly.
>> > 
>> >>      • A separate fuzz folder contains functions to fuzz small sections 
>> >> of the code. 
>> >>              • Was this created to improve coverage and modularity? (In 
>> >> the sense, can't named be fuzzed directly using the above setup?) 
>> > 
>> > Fuzzing a daemon that depends on various internal state (state of the 
>> > cache, authoritative zones present or not, various configuration options 
>> > enabled or not) is difficult and also sometimes it’s also useless to fuzz 
>> > the big blob and you want to fuzz just specific parts (zone parser, DNS 
>> > message parsers, etc…)
>> > 
>> >>              • I could get them running with oss-fuzz but how to run them 
>> >> with afl-fuzz? The README mentions linking the files; can you please tell 
>> >> me how to do that?
>> > 
>> > with AFL++ do
>> > 
>> > CC=afl-clang-fast ./configure --enable-fuzzing=afl
>> > make -j
>> > cd fuzz
>> > 
>> > and then for each test:
>> > 
>> > make dns_message_parse
>> > LD_LIBRARY_PATH=../lib/isc/.libs:../lib/dns/.libs afl-fuzz -i 
>> > dns_message_parse.in/ -o xxx ./.libs/dns_message_parse
>> > 
>> >>      • How to decode the packets given in 
>> >> https://gitlab.isc.org/isc-projects/bind9/-/tree/main/fuzz/dns_message_parse.in?
>> >>  How to add a new packet to the corpus? (How to convert into a raw 
>> >> packet?)
>> > 
>> > These are raw DNS messages.  There’s bigger corpus f.e. here: 
>> > https://github.com/CZ-NIC/dns-fuzzing
>> > 
>> >> Thank you
>> >> Siva
>> >> 
>> >> --
>> >> Siva Kakarla
>> >> (sivak.dev)
>> >> _______________________________________________
>> >> Please visit https://lists.isc.org/mailman/listinfo/bind-users to 
>> >> unsubscribe from this list
>> >> 
>> >> ISC funds the development of this software with paid support 
>> >> subscriptions. Contact us at https://www.isc.org/contact/ for more 
>> >> information.
>> >> 
>> >> 
>> >> bind-users mailing list
>> >> bind-users@lists.isc.org
>> >> https://lists.isc.org/mailman/listinfo/bind-users
>> 
_______________________________________________
Please visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe 
from this list

ISC funds the development of this software with paid support subscriptions. 
Contact us at https://www.isc.org/contact/ for more information.


bind-users mailing list
bind-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/bind-users

Reply via email to