Git Product home page Git Product logo

draft-pauly-adaptive-dns-privacy's Introduction

ADAPTIVE Drafts

This is the working area for individual Internet-Drafts.

Oblivious DNS Over HTTPS

Adaptive DNS Resolver Discovery

Building the Drafts

Formatted text and HTML versions of the draft can be built using make.

$ make

This requires that you have the necessary software installed. See the instructions.

Contributing

See the guidelines for contributions.

draft-pauly-adaptive-dns-privacy's People

Contributors

chris-wood avatar davidschinazi avatar ekinnear avatar enygren avatar marwanfayed avatar mcmanus avatar mstojens avatar sudheesh001 avatar tanyav2 avatar tfpauly avatar yannk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

draft-pauly-adaptive-dns-privacy's Issues

allow Do53 for local zones?

I hesitate to suggest this, but it might be a compromise that would really help deployment.

The idea would be a dnszone found on a locally designated (i.e. via RA) server could opt-in to being looked up over plaintext 53. probably opt-in via an attribute in dohNS and be signed.

The idea being that a legacy setup could transition to internet doh while not having to setup a new server for intranet stuff thus making it easier to swallow. Definitely a trade-off, but maybe a winner. discuss!

Describe failure models for client algorithm

We should describe how the client handles resolution/connectivity failures:

  • VPN resolution fails or is blocked
  • DoH connections fail, or resolution over DoH fails
  • Oblivious DoH fails

SvcParamKey values

Please keep the numeric SvcParamKey values as ? in the text until IANA confirms a value. Choosing fixed values creates a risk of confusion for future readers who come across this draft. (The numeric values you've chosen also collide with values in the SVCB draft.)

Oblivious Resolution isn't only for privacy-sensitive connections

Oblivious Resolution

For all privacy-sensitive connection queries for names that do not correspond
to a Designated DoH Server, the client SHOULD use Oblivious DoH to help
conceal its IP address from eavesdroppers and untrusted resolvers.

We learn from the Hostname Resolution Algorithm that step 4, Oblivious Resolution, should be used for all queries, not just the ones that are privacy-sensitive. Therefore should we remove the term "privacy-sensitive" from the statement above?

The only difference with privacy-sensitive queries is how we respond to failure.

Add warnings about "example.com" vs "bad-example.com"

From @enygren:

We need to be careful to call how clients handle and partition
caches. For example, if you query a DRR for example.com
and ask for "www.example.com" and get back:

  www.example.com CNAME www.bad-example.net.
  www.bad-example.net AAAA 2001:db8::f00d

then while it might be reasonable to assume this is a fine response
for "www.example.com" it's important that the client not use the
"www.bad-example.net" record in-cache for other lookups. (This is
creating a weirdly blurred line between recursives and
authoritatives and puts a bunch of complexity into the client to
make things safe, at least unless clients DNSSEC validate everything
which may not be a reasonable assumption.)

Define scope of designation for domains

From @enygren:

We need to crisply define the scope of "designation" for DRRs
(designated recursive resolver) as well as what answers
from them can be trusted. Along with this, we should
be crystal clear about which SVCB record designations
for DRRs are designating for which domains.
For example, if I have:

  www.example.com  CNAME  svc.example.net.
  svc.example.net	HTTPSSVC  1 svc2.example.net. ( dohuri=https://doh.example.org/query [...] )

when which domains does that dohuri correspond to?
And which lookups can and should then go to which resolvers?
For example, does that dohuri apply to www.example.com,
svc.example.net, or svc2.example.net, or some mixture of those?

It would be really nice if example.net can specify a DRR
that gets used for svc2.example.net and/or all of example.net.
One possibility would be that HTTPSSVC records don't themselves
include dohuri or odnskeys but instead reference others.
For example, the parameter might be "drrdomain=example.net,example.com"
which would then prompt the client to do SVCB lookups for _drr.example.com
and _drr.example.net.

Specify SVCB query, reserve a label?

From @enygren:

When saying "issue a SVCB query" we should say what
SVCB query they should issue. I'd suggest that it
should generally be for a special label associated
with a domain. For example:

 _drr.example.com SVCB 1 {something} ( dohuri=https://doh.example.org/query [...] )

would designate a DRRs (designated recursive resolver)
for example.com. A question here is what should be used
as the SvcDomainName field for this stand-alone case?
I'm not sure what the right answer is? (Maybe just "."
although that has otherwise defined meaning.)

the .well-known for the pvd is harmful

doh is defined on a resource level rather than the server level. that's why its configuration primitive is a URI (template) instead of a .well-known. You can totally have multiple doh servers on the same origin.. perhaps they have different policies (one for filtered and one for not.. one that represents a bl or some kind of database rather than ip addresses like the spam bl.. etc..)

that's a http best practice

having the doh server pvd use a well-known breaks that level of indirection. Maybe this pvd request can be done with a particular method or headers or something to the DoH URI instead?

DoH Provisioning

Reference 8484 for DoH and explain that PvD provisions using a URI template

probing concern

Beyond providing basic DoH server functionality, server nodes SHOULD
offer a set of extended configuration to help clients discover the default
set of domains for which the server is designated, as well as other
capabilities offered by the server deployment.

Some server operators will not like the thought that their customer list can be probed in this way. Perhaps it can be fixed with a MAY and some considerations..

Describe multi-CDN load balancing approach

For multi-CDN names that want to control the spilt of traffic (say, 90/10 split), we should spell out the recommended deployment model.

Off the top of my head, this would involve having a third-party (or one of the CDNs) be responsible for doing all of the DNS resolution and doing the balancing.

Reconsider client behavior

Step #3 in the client behavior section seems problematic. Does it not allow an authenticated provider that wants DNS interception to simply offer encrypted DNS as a service and slurp up all client queries? For example, it seems that the current algorithm would urge clients to send DNS queries for apple.com to facebook.com if they only had an authoritative WebPVD for facebook.com (no direct PVD and no PVD for apple.com). If that's the correct interpretation, I'm not sure it's desirable behavior. Let's discuss!

why require post?

8484 defines how various methods are used. what's the motivation for obfuscated doh to change that?

Admin configuration across networks versus domains

From the call with network operators today, the topic came up of how a device admin might specify that a given DoH server should be used regardless of which network is currently being used.

While I agree this can't be universal due to a slew of edge cases, this document could call this out as a possibility as it would be a good supportive feature for privacy-centric users (namely, that if a user wants to trust one DNS provider in the general case, they can specify that once rather than per network they connect to). For example, today in iOS I believe I can only specify manual DNS servers per network.

The point being the doc state today doesn't prevent supporting this, but stating it as the requirement would create a more privacy friendly experience across all platforms that adopt this.

Separating the proxy pool from the target servers

The document currently requires every designated doh server also be willing to act as a proxy server and target server.. this is tacitly a commitment to serve arbitrary amounts of recursive traffic in order to be able to authoritatively serve any domain over adaptive dns.

I expect that to be too much to ask of many folks to be successful.

And even among the folks that can offer that kind of service, they might reasonably want to provision it into different origins and infrastructures than they use for the authoritative designated doh server traffic.

The lack of quality control would also be a factor.

I suggest we filter the potential obfuscating servers by a new 'isProxy' attribute on their signed DOHNS RRs. Further,. we can bootstrap the system with a set of well known Proxies and Targets downloadable from a well known URL: https://www.doh-root-servers.net/proxyList - each proxy in that list would need a corresponding DOHNS with the isProxy attribute. It seems that URL could be looked up in a privacy insensitive way.

We should add an explanation about why having "sensitive" flows isn't a privacy risk

We should add an explanation about why having "sensitive" flows isn't a privacy risk.
Specifically, that information isn't visible off the device at all and can't be fingerprinted, so an attacker can't identify which flows should be targeted with extra energy.

Only the non-sensitive flows get to be seen on the local network and there is no difference between a sensitive flow that didn't get queried and one that didn't exist.

(We should also make sure that this is true, current top risk seems to be that someone on the local network "i.e. the router itself" can see things that didn't ask it and never resulted in a connection, ideally those are still okay because other things that did resolve via a Web PvD even non-sensitive would look the same way if they reuse a connection)

Is NXDomain really a failure

This is about the hostname resolution algorithm (3.3). If we think NXDomain is a failure which it is not in DNS then we will leak this name to all further resolvers we try. If we believe that for the enterprise case have a PVD from the network with the private domain that continuing the resolution when getting an NXDomain is the wrong thing from a privacy perspective.

Captive portal behaviour

When reading the drafts it wasn't clear to me how the Hostname Resolution Algorithm is intended to work for a client sitting behind a captive portal.

One option is that Adaptive DNS is not intended to come into play until after the captive portal process has been completed.

Another option is that it should always be used. When "captive" I would expect this to result in failure of step 1 (Exclusive Direct Resolver). Would step 2 (Direct Resolver) sometimes work, for example if the local router published a domain that was also the one the client was asking for? If it didn't work, we carry on through and know that on reaching step 5 then it should work, assuming the captive portal detection domain should never be thought of as privacy-sensitive.

Address secure randomness

Some values, like the Query ID in aDNS, are random values. This should be described as a secure random.

Communication of filtering reason and responsible entity, for user consent

Section 6.2.4 (Network-Based Filtering) says:

Clients that receive indication of filtering requirements SHOULD NOT use any other
resolver for the filtered domains, but treat the network as claiming authority. However,
since this filtering cannot be authenticated, this behavior SHOULD NOT be done
silently without user consent.

This presents two scenarios.

  1. The network says filtering is optional.

The client needs to ask the user whether it should use that filtering or not. How is the user to make that decision? I think the protocol needs a way to communicate the reason why this optional filtering is made available. For example a PvD key could say "If you use our DNS service, we'll prevent access to all the malware domains that we know about." There should also be a way to confirm to the user whose DNS service this is, e.g. cryptographic assurance that this is supplied by Large Company X. The name on the TLS certificate is one obvious way to supply that, but it's possible there are better ways, particularly if the entity responsible for filtering could be distinct from the name on the certificate.

  1. The network says filtering is required.

The client needs to ask the user whether to proceed on this network or not. In a similar way to the first case, I think the protocol needs a way to communicate some statement from the named responsible entity on why filtering is required.

Define "destinations" beyond domains

We should consider defining the concept of "where I'm trying to go" beyond just a domain, which is what we use today. Probably something like endpoint?

is the eTLD restriction necessary?

a DOHNS record needs to be
1] dnssec signed
2] for something more specific than an eTLD

what's the rationale for 2 if we have 1?

I can think of 2 reasons to remove it
1] dealing with the PSL is complicated and full of state. And the PSL is pretty inaccurate anyhow
2] don't we want to look up eTLD records over doh directly? e.g. us.com is considered an eTLD and it also has an A record and a valid https://us.com site.

http errors

it would probably be good to define http errors for

  • proxy doesn't want to forward this (403? 404?)
  • target can't decrypt this (400?)

Clarify the cipher suite for the symmetric key

The ODOH document says the cipher suite is passed by the client along with the symmetric key, but the struct doesn't seem to include this. Also, is there any negotiation of this? What if a suite becomes deprecated?

Consider path-based proxying method

From @enygren:

I really, really do NOT like how :authority is having its meaning
altered in the ODNS draft. This breaks HTTP semantics and this
breaks a bunch of assumptions on how CDN servers do hostname-based
service multiplexing. It would require having separate IP addresses
for DoH servers from CDN servers, for example. (Which has worse
privacy properties.) I'd propose instead that ODNS followes adds
some path elements. For example:

:method = POST
:authority = dnsproxy.example.net
:path = /dns-query?targethost=dnstarget.example.net&targetpath=/dns-query
...

makes this be normal HTTPS semantics. It also avoids problems if the
proxy and target have different DoH template URI paths which
I don't believe the current draft handles?

concerns about proxy and target selection

if a proxy and target collude then the client address and DNS information are trivially correlated.

If a single entity has more than one origin in the list of known targets then a client will eventually route a 'blinded' request through both of them creating an unfortunate liability.

it seems useful to have some way of marking this kind of redundancy.

we might also want to encourage doh servers to use anycast and/or geo-dns to minimize origin names and the potential for conflict.

consider confidentiality when selecting proxy server

better latency properties than others. To optimize performance, clients SHOULD
maintain statistics to track the performance characteristics and success rates of
particular pairs.

If taken literally this would often mean picking 2 servers located very close to the client - which could be almost as identifying as the IP address we're trying to hide.

Man in the middle for obfuscated DOH

I think we need to update the security considerations.

In obfuscated DOH you are explicitly not trusting either name server, s.t. no one server can know both the client IP and the name the client wants resolved.
But if you don’t trust the Obfuscation Target, it can still get the client IP indirectly. The Target can just give out some man-in-the-middle IP address to the client for the given name. Then when the client connects to that address, the man-in-the-middle server just forwards the connection to the real server. The man-in-the-middle server doesn’t actually terminate the client HTTPS, but it does have enough info to (reasonably) reliably associate client IP to name it resolved. This works much better with V6, since you’d need 1 man-in-the-middle IP per name.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.