hands on tutorial
play

Hands on tutorial Willem Toorop, NLNet Labs Shumon Huque, Verisign - PowerPoint PPT Presentation

Hands on tutorial Willem Toorop, NLNet Labs Shumon Huque, Verisign Glen Wiley, Verisign About getdns API= a DNS API specification resolving names getdns API= created by and for applications developers getdns = the first


  1. Hands on tutorial Willem Toorop, NLNet Labs Shumon Huque, Verisign Glen Wiley, Verisign

  2. About  getdns API= a DNS API specification – resolving names  getdns API= created by and for applications developers  getdns = the first implementation of this specification  getdns highlighted feature : Parry pervasive monitoring and man in the middle attacks by bootstrapping encrypted channels  getdns mission slogan : Security Begins with a Name

  3. About DNSSEC  A globally distributed database with authenticated data

  4. About DNSSEC  A global distributed database with authenticated data  Wasn't it about protecting users against domain hijacking?  DNS = the phone book of the Internet  Data unauthenticated  DNSSEC to the rescue

  5. About DNSSEC  A global distributed database with authenticated data  Wasn't it about protecting users against domain hijacking?  DNS = the phone book of the Internet  Data unauthenticated  DNSSEC to the rescue  Yes, but it does so by giving (origin) authenticated answers - where origin means that the authoritative party for a zone authenticates the domain names within that zone

  6. Refresher – Public Key Crypto Encrypt Public Encrypt Encrypted Encrypted Readable Readable message message message message Shared Decrypt Private Decrypt  Asymmetric encryptjon  Symmetric encryptjon

  7. Refresher – DNS in two slides  Zones with distributed authority . .com .org .net oreilly.com getdnsapi.net

  8. Refresher – DNS in two slides  Zones with distributed authority  Three types of name servers/clients  Iterative querying Authoritatives getdnsapi.net A . net NS Application getdnsapi.net A stub getdnsapi.net A Recursive Resolver net getdnsapi.net NS OS getdnsapi.net A getdnsapi.net A getdnsapi getdnsapi.net A

  9. DNSSEC – Public Key Crypto – Signing Readable message Hash hash of msg Equal? Readable Hash Readable message message Decrypt Encrypt signature signature hash of msg Public Private  Verify signature  Create signature

  10. DNSSEC – Public Key Crypto – delegating authority Readable Public message Readable message signature Hash Readable Hash Public message Public Encrypt Encrypt signature signature hash of msg hash signature Private Private  signs the message  Building the chain of trust authorizes

  11. DNSSEC – Chain of Trust  Zones with distributed authority DNSKEY  Chain of trust follows delegations . ✓ ✓ .com DS .org DS ✓ .net DS  DNSKEY P ublic key of zone DNSKEY DNSKEY DNSKEY  DS Hash of DNSKEY .com .org .net signed by parent ✓ getdnsapi.net DS DNSKEY oreilly.com getdnsapi.net

  12. DNSSEC – Public Key Crypto – Verifying delegations Readable Hash hash Hash hash of msg message signature compare compare Readable Public message Public Decrypt Decrypt signature signature signature Public Public Public Public  Verify signature  Verify authorization

  13. DNSSEC – Validating  A Validating Recursive Resolver uses the root's public key to verify (validate) delegations Authoritatives getdnsapi.net A . net NS net DS Application net DNSKEY getdnsapi.net A Validating stub getdnsapi.net A Recursive net DNSKEY net getdnsapi.net NS Resolver OS getdnsapi.net A getdnsapi.net DS getdnsapi.net DNSKEY getdnsapi.net A getdnsapi ✓ getdnsapi.net DNSKEY getdnsapi.net A

  14. DNSSEC for Applications – for TLS  Transport Layer Security (TLS) uses both asymmetric and symmetric encryption  A symmetric key is sent encrypted with remote public key  How is the remote public key authenticated?

  15. TLS Not Leveraging DNSSEC  How is the remote public key authenticated?

  16. How is Remote Public Key Authenticated?  Through Certificate Authorities (CAs), maintained in OS, browser...  Every CA is authorized to authenticate for any name (as strong as the weakest link)  There are 1000+ CAs

  17. Enter DANE-TLS

  18. Enter DANE-TLS @Kloot  D NS-based A uthentication of N amed E ntities (DANE) RFC6698

  19. DANE out of reach for Applications  getaddrinfo() returns addresses, how to ask for TLSA , or SSHFP  getaddrinfo() doesn’t tell if you got Authenticated Data (AD) Authoritatives _443._tcp.getdnsapi.net TLSA . net NS net DS Application net DNSKEY getdnsapi.net TLSA? Validating getaddrinfo() _443._tcp.getdnsapi.net TLSA Recursive net DNSKEY net getdnsapi.net NS Resolver OS getdnsapi.net DS getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA getdnsapi ✓ getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA

  20. Do you trust the resolver? Could be your phone Authoritatives Could be the Wi-Fi getdnsapi.net A . net NS net DS Application net DNSKEY getdnsapi.net A Validating getaddrinfo() getdnsapi.net A getaddrinfo() Recursive net DNSKEY net getdnsapi.net NS Resolver OS getdnsapi.net DS OS getdnsapi.net DNSKEY malicious getdnsapi.net A resolver getdnsapi getdnsapi.net A ✓ getdnsapi.net DNSKEY getdnsapi.net A

  21. Bypass resolver completely... Authoritatives _443._tcp.getdnsapi.net TLSA . net NS Application net DS net DNSKEY _443._tcp.getdnsapi.net TLSA Recursive net DNSKEY Resolver getdnsapi.net NS net getdnsapi.net DS os OS _443._tcp.getdnsapi.net TLSA ✓ getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA getdnsapi.net DNSKEY getdnsapi ✓

  22. Or Do DNSSEC Iteration as a Stub! Authoritatives _443._tcp.getdnsapi.net TLSA . _443._tcp.getdnsapi.net TLSA net NS Application net DS net DNSKEY Validating _443._tcp.getdnsapi.net TLSA Recursive net DNSKEY net getdnsapi.net NS Resolver os getdnsapi.net DS OS ✓ getdnsapi.net DNSKEY getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA _443._tcp.getdnsapi.net TLSA getdnsapi ✓ getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA

  23. Motivation – for a new DNS API  From API Design considerations: … There are other DNS APIs available, but there has been very little uptake … … talking to application developers … … the APIs were developed by and for DNS people, not application developers …

  24. Motivation – for a new DNS API  From API Design considerations: … There are other DNS APIs available, but there has been very little uptake … … talking to application developers … … the APIs were developed by and for DNS people, not application developers …  Goal … API design from talking to application developers … … create a natural follow-on to getaddrinfo() ...

  25. Motivation – for a new DNS API  Goal … API design from talking to application developers … … create a natural follow-on to getaddrinfo() … - http://www.vpnc.org/getdns-api/ - Edited by Paul Hoffman - First publication April 2013 - Updated in February 2014 (after extensive discussion during implementation) - Creative Commons Attribution 3.0 Unported License

  26. Motivation – for a new DNS API  Goal … API design from talking to application developers … … create a natural follow-on to getaddrinfo() … - Implemented by Verisign Labs & NLnet Labs together - http://getdnsapi.net/ - 0.1.0 release in February 2014, 0.1.1 in March, - 0.1.2 & 0.1.3 in June, 0.1.4 in September, 0.1.5 last Friday - Node.js and Python bindings - BSD 3-Clause License

  27. Why this library (and not one of the others)  Offers the full resolving package - Full recursion and DNSSEC … through libunbound - Access to all the resolved data … through ldns

  28. Why this library (and not one of the others)  Delivers a generic data structure … Response Dict - Lists, dicts, data, integers … ubiquitous in modern scripting languages - Very suitable for inspection - Trial and error style programming … resolve, have a look, decide how to proceed - Suitable for scripting language bindings … and those are very developer friendly. Hackathon with Node.js and Python . Ahead are Go , Ruby , Perl ...

  29. Simple Functions – Full Recursion from getdns import * ctx = Context () ext = { "dnssec_return_only_secure": GETDNS_EXTENSION_TRUE } res = ctx.general ( ’_443._tcp.getdnsapi.net’, GETDNS_RRTYPE_TLSA, ext) if res[’status’] = GETDNS_RESPSTATUS_GOOD: # Process TLSA RRs Authoritatives _443._tcp.getdnsapi.net TLSA . net NS Application net DS net DNSKEY _443._tcp.getdnsapi.net TLSA Recursive net DNSKEY Resolver getdnsapi.net NS net getdnsapi.net DS os OS _443._tcp.getdnsapi.net TLSA ✓ getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA getdnsapi.net DNSKEY getdnsapi ✓

  30. Simple Functions – Stub mode from getdns import * ctx = Context () ctx.resolution_type = GETDNS_RESOLUTION_STUB ext = { "dnssec_return_only_secure": GETDNS_EXTENSION_TRUE } res = ctx.general ( ’_443._tcp.getdnsapi.net’, GETDNS_RRTYPE_TLSA, ext) if res[’status’] = GETDNS_RESPSTATUS_GOOD: Authoritatives # Process TLSA RRs _443._tcp.getdnsapi.net TLSA . _443._tcp.getdnsapi.net TLSA net NS Application net DS net DNSKEY Validating _443._tcp.getdnsapi.net TLSA Recursive net DNSKEY net getdnsapi.net NS Resolver os getdnsapi.net DS OS ✓ getdnsapi.net DNSKEY getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA _443._tcp.getdnsapi.net TLSA getdnsapi ✓ getdnsapi.net DNSKEY _443._tcp.getdnsapi.net TLSA

Recommend


More recommend