Trust Anchor Signals from Custom Applications

Slides:



Advertisements
Similar presentations
Sergei Komarov. DNS  Mechanism for IP hostname resolution  Globally distributed database  Hierarchical structure  Comprised of three components.
Advertisements

Survey of DNSSEC Lutz Donnerhacke DNSSEC Meeting ( )
TCP/IP Protocol Suite 1 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 19 Domain Name System (DNS)
Domain Name System | DNSSEC. 2  Internet Protocol address uniquely identifies laptops or phones or other devices  The Domain Name System matches IP.
Information-Centric Networks03a-1 Week 3 / Paper 1 What DNS is not –Paul Vixie –CACM, December 2009, vol. 52, no. 12 Main point –“DNS is many things to.
Chapter 16 – DNS. DNS Domain Name Service This service allows client machines to resolve computer names (domain names) to IP addresses DNS works at the.
Geoff Huston APNIC Labs
25.1 Chapter 25 Domain Name System Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
McGraw-Hill©The McGraw-Hill Companies, Inc., 2000 Network Protocols Chapter 25 (Data Communication & Networking Book): Domain Name System (DNS) 1.
© NLnet Labs, Licensed under a Creative Commons Attribution 3.0 Unported License.Creative Commons Attribution 3.0 Unported License Troubleshooting.
Tyre Kicking the DNS Testing Transport Considerations of Rolling Roots Geoff Huston APNIC.
Packet Filtering & Firewalls. Stateless Packet Filtering Assume We can classify a “good” packet and/or a “bad packet” Each rule can examine that single.
Rolling the Keys of the DNS Root Zone Geoff Huston APNIC Labs.
Measuring DNSSEC Use Geoff Huston APNIC Labs. We all know…
TCP/IP Protocol Suite 1 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 19 Domain Name System (DNS)
DNS Session 5 Additional Topics Joe Abley AfNOG 2006, Nairobi, Kenya.
Information-Centric Networks Section # 3.1: DNS Issues Instructor: George Xylomenos Department: Informatics.
What if Everyone Did It? Geoff Huston APNIC Labs.
Ch 6: DNSSEC and Beyond Updated DNSSEC Objectives of DNSSEC Data origin authentication – Assurance that the requested data came from the genuine.
What's so hard about DNSSEC? Paul Ebersman – May 2016 RIPE72 – Copenhagen 1.
Domain Name System: DNS To identify an entity, TCP/IP protocols use the IP address, which uniquely identifies the Connection of a host to the Internet.
Rolling the Root Geoff Huston APNIC Labs March 2016.
Increasing the Zone Signing Key Size for the Root Zone
BIND 10 DNS Project Status + DNS Resolver Status/Plans Shane Kerr 23 January 2013.
Ip addressing: dhcp & dns
Understand Names Resolution
DNS Security The Domain Name Service (DNS) translates human-readable names to IP addresses E.g., thesiger.cs.ucla.edu translates to DNS.
Security Issues with Domain Name Systems
So You Inherited a DNS Server…
KSK Rollover Update David Conrad, CTO ICANN 59 – ccNSO Members Meeting
Welcome POS Synchronize Concept 08 Sept 2015.
A longitudinal, End-to-End View of the DNSSEC Ecosystem
DNS Security Advanced Network Security Peter Reiher August, 2014
KSK Rollover Update David Conrad, CTO ICANN 59 – GAC 29 June 2017.
Domain Name System Tony Kombol ITIS 3110.
Geoff Huston APNIC Labs
Root Zone KSK Rollover: delay and next steps
Living on the Edge: (Re)focus DNS Efforts on the End-Points
Geoff Huston APNIC Labs September 2017
DNS Session 5 Additional Topics
Root Zone KSK Rollover Update
draft-huston-kskroll-sentinel
DNS Cache Poisoning Attack
CPS 512 midterm exam #1, 10/5/17 Your name please: NetID:_______ Sign for your honor:____________________________.
DNS Security The Domain Name Service (DNS) translates human-readable names to IP addresses E.g., thesiger.cs.ucla.edu translates to DNS.
DNS security.
Chapter 19 Domain Name System (DNS)
DNSSEC Basics, Risks and Benefits
New Functionality in ARIN Online
Managing Name Resolution
Distributed Peer-to-peer Name Resolution
Root KSK Roll Update DNS-OARC 27 Matt Larson, VP of Research
Measuring KSK Roll Readiness
Chapter 25 Domain Name System
Issues in Client/Server Programming
Geoff Huston APNIC Labs
Measuring KSK Roll Readiness
OurSQL = MySQL + Blockchain
Ip addressing: dhcp & dns
Chapter 25 Domain Name System
Domain Name System: DNS
COMPUTER NETWORKS PRESENTATION
(DNS – Domain Name System)
Windows Name Resolution
DNS Security The Domain Name Service (DNS) translates human-readable names to IP addresses E.g., thesiger.cs.ucla.edu translates to DNS.
DNS Security The Domain Name Service (DNS) translates human-readable names to IP addresses E.g., thesiger.cs.ucla.edu translates to DNS.
The Curious Case of the Crippling DS record
ECDSA P-256 support in DNSSEC-validating Resolvers
What part of “NO” is so hard for the DNS to understand?
Neda Kianpour - Lead Network Engineer - Salesforce
Presentation transcript:

Trust Anchor Signals from Custom Applications Barber, Thomas, Weinberg, Wessels October 14, 2018

Email from ICANN Subject: [EXTERNAL] Important DNSSEC information about unprepared DNS resolvers in AS7342 On 11 October 2018, ICANN will change or "roll over" the DNSSEC key signing key (KSK) of the DNS root zone. Based on information from your network received at the DNS root name servers [1], we believe that there may be at least one recursive resolver (also referred to as a recursive name server or caching name server) with DNSSEC validation enabled in AS7342 that is unprepared for the KSK rollover. If that resolver is not updated before 11 October 2018, users of that resolver will not be able to resolve any DNS queries, resulting in an outage for them. To repeat this important point: any DNS resolvers on your network with DNSSEC validation enabled that are not properly updated to use the new KSK will fail on 11 October 2018 or shortly thereafter.

How could this be? grep 7342 http://root-trust-anchor- reports.research.icann.org/rfc8145-addresses.txt ASN 28-day Count Address Also saw both TAs 7342 3 2620:74:3a:100::217 False 1 2620:74:3a:100::220

How could this happen? CC all the people look at Recursive DNS boxes check config check root.anchor file No problems found Image source: https://www.123rf.com/photo_16158365_cartoon-character-of-a-man-with-hair-on-fire.html

What if... ...the signal didn’t originate with us? ...a recursive client, perhaps?

Packet Capture Time! $ tcpdump | grep ‘NULL.*_ta-4a5c\.’ 10:04:25.210307 IP XX.137.123.172.43229 > 64.6.64.6.53: 64810+ [1au] NULL? _ta-4a5c. (37) 10:04:25.210307 IP XX.137.123.172.23078 > 64.6.64.6.53: 33478+ [1au] NULL? _ta-4a5c. (37) 10:04:25.210307 IP XX.137.123.172.48291 > 64.6.64.6.53: 8738+ [1au] NULL? _ta-4a5c. (37) 10:04:25.211316 IP ZZ.7.73.217.13327 > 192.5.5.241.53: 26701% [1au] NULL? _Ta-4a5c. (37)

What other queries come from XX.137.123.172? $ tcpdump | grep XX.137.123.172 10:04:23.189356 IP XX.137.123.172.54540 > 64.6.64.6.domain: 2+ AAAA? dns.msftncsi.com. (34) 10:04:23.212666 IP XX.137.123.172.34455 > 64.6.64.6.domain: 3+ A? dns.msftncsi.com. (34) 10:04:23.572534 IP XX.137.123.172.24622 > 64.6.64.6.domain: 40858+ [1au] TXT? updates.moneropulse.net. (52) 10:04:23.573544 IP XX.137.123.172.57112 > 64.6.64.6.domain: 40185+ [1au] TXT? updates.moneropulse.co. (51) 10:04:23.573544 IP XX.137.123.172.18723 > 64.6.64.6.domain: 7901+ [1au] TXT? updates.moneropulse.org. (52) 10:04:23.573544 IP XX.137.123.172.35646 > 64.6.64.6.domain: 37488+ [1au] TXT? updates.moneropulse.se. (51) 10:04:25.208288 IP XX.137.123.172.6024 > 64.6.64.6.domain: 14979+ [1au] TXT? updates.moneropulse.org. (52) 10:04:25.208288 IP XX.137.123.172.14259 > 64.6.64.6.domain: 23079+% [1au] TXT? updates.moneropulse.org. (52) 10:04:25.209297 IP XX.137.123.172 > 64.6.64.6: ICMP XX.137.123.172 udp port 18723 unreachable, length 556 10:04:25.209297 IP XX.137.123.172.43460 > 64.6.64.6.domain: 1390+% [1au] TXT? updates.moneropulse.org. (52) 10:04:25.210307 IP XX.137.123.172.43229 > 64.6.64.6.domain: 64810+ [1au] NULL? _ta-4a5c. (37) 10:04:25.210307 IP XX.137.123.172.23078 > 64.6.64.6.domain: 33478+ [1au] NULL? _ta-4a5c. (37) 10:04:25.210307 IP XX.137.123.172.48291 > 64.6.64.6.domain: 8738+ [1au] NULL? _ta-4a5c. (37) 10:04:25.210307 IP XX.137.123.172.52658 > 64.6.64.6.domain: 55282+% [1au] TXT? updates.moneropulse.org. (52) 10:04:25.210307 IP XX.137.123.172.16817 > 64.6.64.6.domain: 34291+% [1au] TXT? updates.moneropulse.org. (52) 10:04:27.769329 IP XX.137.123.172.56725 > 64.6.64.6.domain: 2+ AAAA? dns.msftncsi.com. (34) 10:04:27.853466 IP XX.137.123.172.33297 > 64.6.64.6.domain: 3+ A? dns.msftncsi.com. (34) 10:04:33.854205 IP XX.137.123.172.35104 > 64.6.64.6.domain: 2+ AAAA? dns.msftncsi.com. (34) 10:04:33.855214 IP XX.137.123.172.52980 > 64.6.64.6.domain: 12094+ A? time.nist.gov. (31) 10:04:33.886635 IP XX.137.123.172.36501 > 64.6.64.6.domain: 3+ A? dns.msftncsi.com. (34) Hmmm… Monero…?

What is Monero? Open-source cryptocurrency Blockchain, proof-of-work, etc. Ranked 10th in market capitalization per coinmarketcap.com https://github.com/monero-project/monero libunbound is a dependency Unbound enabled RFC 8145 signaling by default as of v1.6.7 (Oct 2017) Monero logo: https://getmonero.org/press-kit/

Monero has a hard-coded trust anchor src/common/dns_utils.cpp: /*  * The following two functions were taken from unbound-anchor.c, from  * the unbound library packaged with this source.  The license and source  * can be found in $PROJECT_ROOT/external/unbound  */ [...] /** return the built in root DS trust anchor */ static const char* get_builtin_ds(void) {   return ". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5\n"; }

Monero emits trust anchor signals at startup 20:38:36.261509 IP 45.56.70.104.28395 > 173.255.199.5.53: 36362+ [1au] A? seeds.moneroseeds.li. (49) 20:38:36.261930 IP 173.255.199.5.53 > 45.56.70.104.28395: 36362 NXDomain 0/1/1 (111) 20:38:36.263128 IP 45.56.70.104.6731 > 66.228.53.5.53: 54801+ [1au] A? seeds.moneroseeds.ae.org. (53) 20:38:36.263390 IP 66.228.53.5.53 > 45.56.70.104.6731: 54801 NXDomain 0/1/1 (115) 20:38:36.263917 IP 45.56.70.104.41930 > 72.14.188.5.53: 26564+ [1au] A? seeds.moneroseeds.ch. (49) 20:38:36.265010 IP 45.56.70.104.65371 > 72.14.188.5.53: 59840+ [1au] A? seeds.moneroseeds.se. (49) 20:38:36.265161 IP 45.56.70.104.60189 > 72.14.188.5.53: 20577+% [1au] DNSKEY? . (28) 20:38:36.265194 IP 45.56.70.104.54616 > 173.255.199.5.53: 40475+ [1au] NULL? _ta-4a5c. (37) 20:38:36.265288 IP 45.56.70.104.8754 > 173.255.199.5.53: 59865+% [1au] DNSKEY? . (28) 20:38:36.265515 IP 45.56.70.104.10562 > 72.14.188.5.53: 9525+ [1au] NULL? _ta-4a5c. (37) If linked with Unbound 1.6.7 or later

Does Monero work with a bad trust anchor? Maybe? Sort of...? Monero uses DNS for Software updates (TXT) Checkpoints (TXT) Segregation height in wallet code (TXT) Address lookups (A, AAAA) load_txt_records_from_dns() logs a warning and doesn’t return unvalidatable answers 2018-09-05 19:00:52.869    [P2P1]  WARN    net.dns src/common/dns_utils.cpp:509    WARNING: no two valid MoneroPulse DNS checkpoint records were received In functions like node_server(), dnssec_valid return flag is not checked.

Monero output with bad TA - Modified source code to use a bad trust anchor 2018-09-07 10:00:26.494 [P2P1]  INFO    global  src/cryptonote_protocol/cryptonote_protocol_handler.inl:310     [70.49.140.40:53878 INC] Sync data returned a new top block candidate: 1656021 -> 1646386 [Your node is 9635 blocks (13 days) ahead] SYNCHRONIZATION started 2018-09-07 10:00:27.317 [P2P2]  INFO    global  src/cryptonote_core/blockchain.cpp:1534 ----- BLOCK ADDED AS ALTERNATIVE ON HEIGHT 1646385 id:     <17034c69f9a43840d0cd63e9ab556d143455d833845cd92b2c45f20b82ae6b24> PoW:    <a9c8f5a5add64e44f80ae1caf69b009e287739ebc6db7a4a87a2100100000000> difficulty:     53596510308 2018-09-07 10:00:27.318 [P2P2]  INFO    global  src/cryptonote_protocol/cryptonote_protocol_handler.inl:1561    SYNCHRONIZED OK 2018-09-07 10:54:34.322 [P2P8]  WARN    net.dns src/common/dns_utils.cpp:509    WARNING: no two valid MoneroPulse DNS checkpoint records were received 2018-09-07 11:54:34.437 [P2P7]  WARN    net.dns src/common/dns_utils.cpp:509    WARNING: no two valid MoneroPulse DNS checkpoint records were received 2018-09-07 11:55:26.333 [P2P8]  INFO    global  src/cryptonote_core/blockchain.cpp:1534 ----- BLOCK ADDED AS ALTERNATIVE ON HEIGHT 1591490 id:     <87c752cdeee4c9ba7aefc879ca1285e39563e1a5c752fc6d8d743a2be452812d> PoW:    <db280407898f1f66f1ef1a8cf74f0001913b0c97fcd5cc691820300600000000> difficulty:     46963208575 2018-09-07 12:54:50.514 [P2P7]  WARN    net.dns src/common/dns_utils.cpp:509    WARNING: no two valid MoneroPulse DNS checkpoint records were received 2018-09-07 13:37:42.970 [P2P2]  INFO    global  src/cryptonote_core/blockchain.cpp:1534 ----- BLOCK ADDED AS ALTERNATIVE ON HEIGHT 1656128 id:     <82567e414b4c8c634fbec5749eb6d8f3a3661b8d5d6069f3b57264ae6de8c673> PoW:    <ee5c9960d9c63b87e956f564d8deca7cbf43169adbd5723ff9a2e70100000000> difficulty:     66702392438 2018-09-07 13:56:25.337 [P2P9]  WARN    net.dns src/common/dns_utils.cpp:509    WARNING: no two valid MoneroPulse DNS checkpoint records were received 2018-09-07 14:59:23.618 [P2P1]  WARN    net.dns src/common/dns_utils.cpp:509    WARNING: no two valid MoneroPulse DNS checkpoint records were received

Opened a github issue Marked as duplicate, Roy Arends (ICANN) beat us to it (10 days) Roy opened hundreds of issues on similar projects (thanks Roy!) Developer was unsure of DNSSEC specifics and bad trust-anchor consequences “The code does enforce validation if there is a DNSSEC signature, but accepts unsigned data IIRC.”

Thoughts / Lessons

TA signals from applications RFC 8145 trust anchor signaling perhaps did not fully anticipate signals from applications vs validating name servers. It’s good to see validation in applications. kskroll-sentinel won’t find applications with bad trust anchors.

Applications and TA updates How should applications keep trust anchors updated? This is tied up with the way Unbound works and is distributed. For the name server, an unbound-anchor service generally runs alongside. Unix applications can depend on libunbound, which doesn’t include the unbound-anchor service. libunbound doesn’t provide a TA. Applications must provide their own TAs. Can this be improved?

Not checking validation status An application that sends TA signals but doesn’t enforce validation leads to confusion. RFC 8145 treats validation as black / white Either you (always) validate, or you don’t