RFC 9761

Manufacturer Usage Description (MUD) for TLS and DTLS Profiles for Internet of Things (IoT) Devices

πŸ“… published April 2025, from ietf

RFC 9761: Manufacturer Usage Description (MUD) for TLS and DTLS Profiles for Internet of Things (IoT) Devices πŸŽ€

Okay bestie, this is RFC 9761 ✨ It comes from the Internet Engineering Task Force (IETF) and it's a Standards Track document, so it's official πŸ’… The ISSN is 2070-1721 and it's dated April 2025. The authors are T. Reddy.K (Nokia), D. Wing (Citrix), and B. Anderson (Cisco) 🫢 The title block doesn't list any RFCs that it obsoletes or updates, so nothing gets replaced or patched here 🌸

Abstract ✨

Okay so this memo extends the Manufacturer Usage Description (MUD) spec so manufacturers can define TLS and DTLS profile parameters πŸ”₯ The point is that a network security service can spot (D)TLS usage that doesn't belong. That kind of weird traffic can mean there's unauthorized software, malware, or traffic that breaks security policy on an endpoint πŸ‘€

Status of This Memo

This is an Internet Standards Track document πŸ¦‹

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG) πŸ’– If you want more info on Internet Standards, check out Section 2 of RFC 7841 🧚

For the current status, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc9761 🌈

Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved. πŸ”’

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they stand on the date this document was published. Please read these carefully, because they explain your rights and restrictions for this document πŸ“œ Code Components pulled out of this document must include Revised BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Revised BSD License πŸ’œ

Table of Contents

   1.  Introduction
   2.  Terminology
   3.  Overview of MUD (D)TLS Profiles for IoT devices
   4.  (D)TLS 1.3 Handshake
     4.1.  Full (D)TLS 1.3 Handshake Inspection
     4.2.  Encrypted DNS
   5.  (D)TLS Profile of an IoT device
     5.1.  Tree Structure of the (D)TLS Profile Extension to the ACL
           YANG Module
     5.2.  The (D)TLS Profile Extension to the ACL YANG Module
     5.3.  IANA (D)TLS Profile YANG Module
     5.4.  MUD (D)TLS Profile Extension
   6.  Processing of the MUD (D)TLS Profile
   7.  MUD File Example
   8.  Software-Based ACLs and ACLs Within a (D)TLS 1.3 Proxy
   9.  Security Considerations
     9.1.  Challenges in Mimicking (D)TLS 1.2 Handshakes for IoT
           Devices
     9.2.  Considerations for the "iana-tls-profile" Module
     9.3.  Considerations for the "ietf-acl-tls" Module
     9.4.  Considerations for the "ietf-mud-tls" Module
   10. Privacy Considerations
   11. IANA Considerations
     11.1.  (D)TLS Profile YANG Modules
     11.2.  Considerations for the iana-tls-profile Module
     11.3.  ACL TLS Version Registry
     11.4.  ACL DTLS Version Registry
     11.5.  ACL (D)TLS Parameters Registry
     11.6.  MUD Extensions Registry
   12. References
     12.1.  Normative References
     12.2.  Informative References
   Acknowledgments
   Authors' Addresses

1. Introduction 🌸

Okay, encryption is a must for protecting end users' privacy on Internet of Things (IoT) devices πŸ” TLS [RFC8446] and DTLS [RFC9147] are the dominant protocols (counting every (D)TLS version) that encrypt IoT device traffic. The problem is that as IoT apps adopt more encryption, malware authors are using it too, and it gets past network-based analysis like deep packet inspection (DPI) 😭 So we need other ways to help detect malware running on an IoT device.

Malware often reuses certain libraries, and it uses encryption differently from software that isn't malware πŸ‘€ Here are some common patterns in how malware uses (D)TLS:

  • Use of older and weaker cryptographic parameters.
  • TLS server name indication (SNI) extension [RFC6066] and server certificates are made of subjects that look like a domain generation algorithm (DGA) (e.g., "www.33mhwt2j.net").
  • More self-signed certificates than typical legitimate software, which uses certificates from a certificate authority (CA) the device trusts.
  • Mismatches between the SNI TLS extension and the DNS names in the SubjectAltName (SAN) X.509 extension in the server Certificate message.
  • Mismatches in the key exchange algorithm and the client public key length compared with legitimate flows. Quick reminder, the Client Key Exchange message has been removed from TLS 1.3 πŸ™ˆ
  • Less diversity in the extensions TLS clients advertise compared to legitimate clients.
  • Using privacy enhancing technologies like Tor, Psiphon, Ultrasurf (see [MALWARE-TLS]), and evasion techniques such as ClientHello randomization.
  • Using an alternative DNS server (over encrypted transport) to dodge malware DNS filtering services [MALWARE-DOH]. Specifically, malware may not use the Do53 or encrypted DNS server provided by the local network (DHCP, Discovery of Network-designated Resolvers (DNR) [RFC9463], or Discovery of Designated Resolvers (DDR) [RFC9462]).

If (D)TLS profile parameters are defined, these functions that really help local network security become possible πŸ’–

  • Permit intended DTLS or TLS use, and block malicious DTLS or TLS use. This is superior to the Access Control Lists (ACLs) of Layers 3 and 4 in "Manufacturer Usage Description Specification" [RFC8520], which are not suitable for broad communication patterns. The goal of this document is to enhance and complement the existing MUD specifications rather than undermine them 🫢
  • Ensure TLS certificates are valid. Several TLS deployments have been vulnerable to active Man-In-The-Middle (MITM) attacks because of a lack of certificate validation, or a bug in the certificate validation function (see [CRYPTO-VULNERABILITY]). By observing (D)TLS profile parameters, a network element can detect when the TLS SNI doesn't match the SubjectAltName and when the server's certificate is invalid. In (D)TLS 1.2 [RFC5246] [RFC6347], the ClientHello, ServerHello, and Certificate messages are all sent in cleartext. This check isn't possible with (D)TLS 1.3, which encrypts the Certificate message and therefore hides the server identity from any intermediary πŸ•΅οΈ In (D)TLS 1.3, the server certificate validation functions should be executed within an on-path (D)TLS proxy if such a proxy exists.
  • Support new communication patterns. An IoT device can learn a new capability, and that capability can change how the device talks to other devices on the local network and to the Internet ✨ If an IoT device rapidly changes the IP addresses and domain names it talks to while the MUD ACLs update more slowly, the policy becomes inaccurate (see [CLEAR-AS-MUD]). In that case, observable (D)TLS profile parameters can be used to permit intended use and block malicious behavior from the IoT device πŸ¦‹

The YANG module specified in Section 5.2 of this document extends "YANG Data Model for Network Access Control Lists (ACLs)" [RFC8519] to enhance MUD [RFC8520] so it can model observable (D)TLS profile parameters 🧚 With these, an active MUD-enforcing network security service (e.g., a firewall) can spot MUD non-compliant (D)TLS behavior that points to outdated cryptography or malware. This detection can prevent malware downloads, block access to malicious domains, enforce strong ciphers, stop data exfiltration, and more πŸ”₯ Organizations may also have policies about acceptable ciphers and certificates for the websites IoT devices connect to. Examples include no use of old and less secure TLS versions, no use of self-signed certificates, deny-lists or accept-lists of Certificate Authorities, and valid certificate expiration times 🌈 These policies can be enforced by observing the (D)TLS profile parameters. Network security services can use an IoT device's (D)TLS profile parameters to identify legitimate flows by observing (D)TLS sessions, and then make inferences to permit legitimate flows and block malicious or insecure ones. It also supports network communications following security policy by making sure TLS certificates are valid and deprecated cipher suites are avoided πŸ’… This technique is also suitable where decryption isn't ideal because of privacy concerns, non-cooperating endpoints, and expense πŸ’œ

2. Terminology πŸ“

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here πŸ“– Lowercase versions don't count.

  • (D)TLS: Used for statements that apply to both Transport Layer Security [RFC8446] and Datagram Transport Layer Security [RFC6347]. The specific terms "TLS" and "DTLS" are used for any statement that applies to only one of those protocols πŸŽ€
  • DoH/DoT: Refers to DNS-over-HTTPS [RFC8484] and/or DNS-over-TLS [RFC7858] 🌸
  • Middlebox: A middlebox that interacts with TLS traffic can either act as a TLS proxy, intercepting and decrypting the traffic for inspection, or inspect the traffic between TLS peers without terminating the TLS session πŸ‘€
  • Endpoint Security Agent: An Endpoint Security Agent is software installed on endpoint devices that protects them from security threats. It provides features such as malware protection, firewall, and intrusion prevention to keep the device secure and intact πŸ›‘οΈ
  • Network Security Service: A Network Security Service refers to a set of mechanisms designed to protect network communications and resources from attacks πŸ”₯

3. Overview of MUD (D)TLS Profiles for IoT devices ✨

Okay so, in Enterprise networks, protection and detection usually happen both on the end hosts and in the network 🌸 Endpoint security agents see everything on the devices they're installed on, while the network has the bigger picture. Installing agents on IoT devices might not be an option 😭, so a network security service is a super efficient way to protect them πŸ›‘οΈ If the IoT device supports a MUD (D)TLS profile, a middlebox can use that profile's parameters to detect and block malware traffic, while still keeping the privacy of legit encryption πŸ” It also enforces organizational security policies so devices stay compliant πŸ’… By watching (D)TLS parameters, admins can spot outdated TLS versions, weak cryptographic algorithms, and non-compliant certificates πŸ‘€ The middlebox doesn't need to proxy (D)TLS at all. It can just passively observe the handshake parameters from IoT devices, getting visibility into TLS 1.2 and partial visibility into TLS 1.3 πŸ¦‹

Malware devs would have a seriously hard time sneaking past this πŸ₯Ή They'd need to build a malicious agent for each IoT device type, manufacturer, and model, infect the device with that tailored agent, and keep up with the device's (D)TLS profile parameters as they change over time. On top of that, the malware's command and control server certificates would need to be signed by the same certifying authorities trusted by the IoT devices. IoT devices usually have infrastructure for rapid update deployment, so malware agents would have a near-impossible task of deploying their own updates and continuing to mimic the TLS behavior of the device they've infected πŸ’€

Now, if an IoT device has reached end-of-life (EOL) and the manufacturer won't issue a firmware or software update (or won't update the MUD file), the is-supported attribute defined in Section 3.6 of [RFC8520] can be used by the MUD manager to show that the manufacturer no longer supports the device πŸͺ¦ EOL doesn't automatically mean the device is defective! It just means it's no longer getting updates, support, or security patches, so it's time to replace it and upgrade to next-gen devices for continued functionality, security, and compatibility with modern networks πŸ”„ Until the device is replaced, the network security service will have to rely on other techniques discussed in Section 9 to identify malicious connections.

Compromised IoT devices are typically used for launching DDoS attacks (Section 3 of [RFC8576]) 😀 For example, DDoS attacks like Slowloris [SLOWLORIS] and Transport Layer Security (TLS) re-negotiation can be blocked if the victim's server certificate is not signed by the same certifying authorities trusted by the IoT device 🚫


4. (D)TLS 1.3 Handshake 🧚

Here's the tea β˜• In (D)TLS 1.3, full (D)TLS handshake inspection is not possible, because every handshake message except the ClientHello is encrypted. (D)TLS 1.3 introduced new extensions in the handshake record layers called Encrypted Extensions. When those are in use, the handshake messages are encrypted, and network security services (like a firewall) can't decipher the handshake, which means they can't view the server certificate πŸ™ˆ Still, the ClientHello and ServerHello keep some fields visible, like the list of supported versions, named groups, cipher suites, signature algorithms, extensions in the ClientHello, and the chosen cipher in the ServerHello πŸ‘€ So say malware uses an evasion trick like ClientHello randomization. The observable list of cipher suites and extensions it offers won't match the list a legitimate client offers in its ClientHello, and the middlebox can block malicious flows without acting as a (D)TLS 1.3 proxy πŸ™Œ

4.1. Full (D)TLS 1.3 Handshake Inspection

Want more visibility into the negotiated TLS 1.3 parameters? πŸ” Then a middlebox can act as a (D)TLS 1.3 proxy! It can do that for IoT devices owned and managed by the IT team in the Enterprise network, and the (D)TLS proxy has to meet the organization's security and privacy requirements 🏒 In other words, a middlebox acting as a (D)TLS proxy is restricted to the Enterprise network that owns and manages those IoT devices. To act as a compliant (D)TLS 1.3 proxy, the middlebox would have to follow the behavior detailed in Section 9.3 of [RFC8446] πŸ“œ

To up the privacy game even more πŸŽ€, the Encrypted Client Hello (ECH) extension [TLS-ESNI] keeps passive observers from seeing the TLS Server Name Indication extension and other potentially sensitive fields, like the Application-Layer Protocol Negotiation (ALPN) [RFC7301]. For that privacy protection to really work, ECH needs to be used alongside DNS encryption (e.g., DoH) πŸ” A middlebox (e.g., a firewall) passively inspecting the ECH extension can't observe the encrypted SNI, nor the encrypted DNS traffic. And if a middlebox acting as a (D)TLS 1.3 proxy doesn't support the ECH extension, it will act as if it's connecting to the public name and follow the behavior discussed in Section 6.1.6 of [TLS-ESNI] to securely signal the client to disable ECH πŸ¦‹

4.2. Encrypted DNS

Certain IoT devices (e.g., a light bulb) have a very common pattern: they "call home" to a service on the public Internet, referenced by a domain name (an A or AAAA record) 🏠 As discussed in "Manufacturer Usage Description Specification" [RFC8520], these devices tend to need access to very few sites, so all other access should be considered suspect πŸ•΅οΈβ€β™€οΈ This technique complements MUD policy enforcement at the TLS level by making sure DNS queries are monitored and filtered, which boosts overall security πŸ’–

Here's the catch 😬 If an IoT device is pre-configured to use a DNS resolver the network hasn't signaled, the MUD policy enforcement point moves over to that resolver. That resolver can't enforce MUD policy based on domain names (Section 8 of [RFC8520]). And if DNS queries aren't accessible for inspection, it gets really hard for the infrastructure to detect issues. So a DNS resolver that isn't signaled by the network is generally incompatible with MUD 🚩 Instead, a network-designated DoH/DoT server is necessary to allow MUD policy enforcement on the local network, for example using the techniques specified in DNR [RFC9463] and DDR [RFC9462] ✨


5. (D)TLS Profile of an IoT device πŸŽ€

This document specifies a YANG module that represents the (D)TLS profile πŸ“‹ The YANG module gives us a way to characterize the (D)TLS traffic profile of a device. Network security services can use these profiles to permit conformant traffic, or to deny traffic from devices that deviate from it 🚦 This module uses the cryptographic types defined in [RFC9640]. For (D)TLS 1.2 recommendations related to IoT devices, see [RFC7925]. For DTLS 1.3 recommendations related to IoT devices, see [IoT-PROFILE]. And for additional (D)TLS 1.2 recommendations, see [RFC9325] πŸ“š

There's also a companion YANG module that includes a collection of (D)TLS parameters and (D)TLS versions maintained by IANA, called iana-tls-profile (Section 5.3) πŸ§šβ€β™€οΈ

The (D)TLS parameters in each (D)TLS profile include the following:

  • Profile name
  • (D)TLS versions supported by the IoT device.
  • List of supported cipher suites (Section 11 of [RFC8446]). For (D)TLS 1.2, [RFC7925] recommends Authenticated Encryption with Associated Data (AEAD) ciphers for IoT devices.
  • List of supported extension types.
  • List of trust anchor certificates used by the IoT device. If the server certificate is signed by one of the trust anchors, the middlebox continues with the connection as normal. Otherwise, the middlebox reacts as if server certificate validation has failed and takes appropriate action (e.g., blocks the (D)TLS session). An IoT device can use a private trust anchor to validate a server's certificate. For example, the private trust anchor can be preloaded at manufacturing time on the IoT device, and the IoT device fetches the firmware image from the firmware server, whose certificate is signed by the private CA. This empowers the middlebox to reject TLS sessions to servers that the IoT device does not trust πŸ›‘οΈ
  • List of pre-shared key exchange modes.
  • List of named groups (DHE or ECDHE) supported by the client.
  • List of signature algorithms the client can validate in X.509 server certificates.
  • List of signature algorithms the client is willing to accept for the CertificateVerify message (Section 4.2.3 of [RFC8446]). For example, a TLS client implementation can support different sets of algorithms for certificates, and it can signal those capabilities in the signature_algorithms_cert and signature_algorithms extensions πŸ’…
  • List of supported application protocols (e.g., h3, h2, http/1.1 etc.).
  • List of certificate compression algorithms (defined in [RFC8879]).
  • List of the distinguished names [X501] of acceptable certificate authorities, represented in DER-encoded format [X690] (defined in Section 4.2.4 of [RFC8446]).

GREASE [RFC8701] is a mechanism that lets TLS peers send random values on TLS parameters, so TLS extensions stay extensible in the future 🌈 Similar random values might be extended to other TLS parameters too. So the (D)TLS profile parameters defined in the YANG module by this document MUST NOT include the GREASE values for extension types, named groups, signature algorithms, (D)TLS versions, pre-shared key exchange modes, cipher suites, or any other TLS parameters defined in future RFCs 🚫

Last one! πŸ™Œ The (D)TLS profile doesn't include parameters like compression methods for data compression. [RFC9325] recommends disabling TLS-level compression to prevent compression-related attacks πŸ’œ And in TLS 1.3, only the null compression method is allowed (Section 4.1.2 of [RFC8446]) 🫢

5.1. Tree Structure of the (D)TLS Profile Extension to the ACL YANG Module 🌳✨

okay so this doc augments the ietf-acl ACL YANG module from [RFC8519] so IoT devices can signal their (D)TLS profile πŸ’– The new module is called ietf-acl-tls. The symbols in the YANG tree diagram are defined in [RFC8340], and the tree looks like this:

module: ietf-acl-tls
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches:
    +--rw client-profiles {match-on-tls-dtls}?
       +--rw tls-dtls-profile* [name]
          +--rw name                           string
          +--rw supported-tls-version*        ianatp:tls-version
          +--rw supported-dtls-version*       ianatp:dtls-version
          +--rw cipher-suite*                 ianatp:cipher-algorithm
          +--rw extension-type*
          |       ianatp:extension-type
          +--rw accept-list-ta-cert*
          |       ct:trust-anchor-cert-cms
          +--rw psk-key-exchange-mode*
          |       ianatp:psk-key-exchange-mode
          |       {tls13 or dtls13}?
          +--rw supported-groups*
          |       ianatp:supported-group
          +--rw signature-algorithm-cert*
          |       ianatp:signature-algorithm
          |       {tls13 or dtls13}?
          +--rw signature-algorithm*
          |       ianatp:signature-algorithm
          +--rw application-protocol*
          |       ianatp:application-protocol
          +--rw cert-compression-algorithm*
          |       ianatp:cert-compression-algorithm
          |       {tls13 or dtls13}?
          +--rw certificate-authorities*
                  certificate-authority
                  {tls13 or dtls13}?

5.2. The (D)TLS Profile Extension to the ACL YANG Module πŸŽ€

here's the whole module, the (D)TLS Profile Extension to the ACL YANG Module, saved as ietf-acl-tls@2025-04-18.yang 🧚

<CODE BEGINS> file "ietf-acl-tls@2025-04-18.yang"
module ietf-acl-tls {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-acl-tls";
  prefix acl-tls;

  import iana-tls-profile {
    prefix ianatp;
    reference
      "RFC 9761: Manufacturer Usage Description (MUD) for TLS and
                 DTLS Profiles for Internet of Things (IoT) Devices";
  }
  import ietf-crypto-types {
    prefix ct;
    reference
      "RFC 9640: YANG Data Types and Groupings for Cryptography";
  }
  import ietf-access-control-list {
    prefix acl;
    reference
      "RFC 8519: YANG Data Model for Network Access
                 Control Lists (ACLs)";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
     WG List: opsawg@ietf.org

     Author: Tirumaleswar Reddy.K
             kondtir@gmail.com

     Author: Dan Wing
             danwing@gmail.com

     Author: Blake Anderson
             blake.anderson@cisco.com

    ";
  description
    "This YANG module defines a component that augments the
     IETF description of an access list to allow (D)TLS profiles
     as matching criteria.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC 9761; see
     the RFC itself for full legal notices.";

  revision 2025-04-18 {
    description
      "Initial revision.";
    reference
      "RFC 9761: Manufacturer Usage Description (MUD) for TLS and
                 DTLS Profiles for Internet of Things (IoT) Devices";
  }

  feature tls12 {
    description
      "TLS Protocol Version 1.2 is supported.";
    reference
      "RFC 5246: The Transport Layer Security (TLS) Protocol
                 Version 1.2";
  }

  feature tls13 {
    description
      "TLS Protocol Version 1.3 is supported.";
    reference
      "RFC 8446: The Transport Layer Security (TLS) Protocol
                 Version 1.3";
  }

  feature dtls12 {
    description
      "DTLS Protocol Version 1.2 is supported.";
    reference
      "RFC 6347: Datagram Transport Layer Security
                 Version 1.2";
  }

  feature dtls13 {
    description
      "DTLS Protocol Version 1.3 is supported.";
    reference
      "RFC 9147: Datagram Transport Layer Security 1.3";
  }

  feature match-on-tls-dtls {
    description
      "The networking device can support matching on
       (D)TLS parameters.";
  }

  typedef spki-pin-set {
    type binary;
    description
      "Subject Public Key Info pin set as discussed in
       Section 2.4 of RFC 7469.";
  }

  typedef certificate-authority {
    type string;
    description
      "Distinguished Name of Certificate authority as discussed
       in Section 4.2.4 of RFC 8446.";
  }

  augment "/acl:acls/acl:acl/acl:aces/acl:ace/acl:matches" {
    if-feature "match-on-tls-dtls";
    description
      "(D)TLS specific matches.";
    container client-profiles {
      description
        "A grouping for (D)TLS profiles.";
      list tls-dtls-profile {
        key "name";
        description
          "A list of (D)TLS version profiles supported by
           the client.";
        leaf name {
          type string {
            length "1..64";
          }
          description
            "The name of (D)TLS profile; space and special
             characters are not allowed.";
        }
        leaf-list supported-tls-version {
          type ianatp:tls-version;
          description
            "TLS versions supported by the client.";
        }
        leaf-list supported-dtls-version {
          type ianatp:dtls-version;
          description
            "DTLS versions supported by the client.";
        }
        leaf-list cipher-suite {
          type ianatp:cipher-algorithm;
          description
            "A list of cipher suites supported by the client.";
        }
        leaf-list extension-type {
          type ianatp:extension-type;
          description
            "A list of Extension Types supported by the client.";
        }
        leaf-list accept-list-ta-cert {
          type ct:trust-anchor-cert-cms;
          description
            "A list of trust anchor certificates used by the
             client.";
        }
        leaf-list psk-key-exchange-mode {
          if-feature "tls13 or dtls13";
          type ianatp:psk-key-exchange-mode;
          description
            "pre-shared key exchange modes.";
        }
        leaf-list supported-group {
          type ianatp:supported-group;
          description
            "A list of named groups supported by the client.";
        }
        leaf-list signature-algorithm-cert {
          if-feature "tls13 or dtls13";
          type ianatp:signature-algorithm;
          description
            "A list signature algorithms the client can validate
             in X.509 certificates.";
        }
        leaf-list signature-algorithm {
          type ianatp:signature-algorithm;
          description
            "A list signature algorithms the client can validate
             in the CertificateVerify message.";
        }
        leaf-list application-protocol {
          type ianatp:application-protocol;
          description
            "A list application protocols supported by the client.";
        }
        leaf-list cert-compression-algorithm {
          if-feature "tls13 or dtls13";
          type ianatp:cert-compression-algorithm;
          description
            "A list certificate compression algorithms
             supported by the client.";
        }
        leaf-list certificate-authorities {
          if-feature "tls13 or dtls13";
          type certificate-authority;
          description
            "A list of the distinguished names of certificate
             authorities acceptable to the client.";
        }
      }
    }
  }
}
<CODE ENDS>

5.3. IANA (D)TLS Profile YANG Module πŸŽ€

okay so the TLS and DTLS IANA registries live at https://www.iana.org/assignments/tls-parameters and https://www.iana.org/assignments/tls-extensiontype-values 🌸 and any changes to those registries get talked about in [RFC8447] πŸ’…

the values for all the parameters in the "iana-tls-profile" YANG module come straight from the TLS and DTLS IANA registries, except for tls-version, dtls-version, spki-pin-set, and certificate-authority 🧚 those last two, spki-pin-set and certificate-authority, are specific to the IoT device, so they're not coming from the registries πŸ”₯

ngl the version stuff is kinda tricky, so stay with me πŸ™ˆ the TLS and DTLS IANA registries don't keep (D)TLS version numbers. in (D)TLS 1.2 and below, version negotiation uses the "legacy_version" field in the ClientHello message. but in (D)TLS 1.3, the client uses the "supported_versions" extension to say which (D)TLS versions it supports πŸ¦‹ TLS 1.3 ClientHello messages are identified by a "legacy_version" of 0x0303 plus a "supported_versions" extension that has 0x0304 as the highest version. DTLS 1.3 ClientHello messages are identified by a "legacy_version" of 0xfefd plus a "supported_versions" extension that has 0x0304 as the highest version πŸ’œ

to make updating the "iana-tls-profile" YANG module with future (D)TLS versions easier, new (D)TLS version registries are defined in Section 11.3 and Section 11.4 ✨ whenever a brand new (D)TLS protocol version gets defined, the registry gets updated using expert review, and then IANA automatically updates the "iana-tls-profile" YANG module πŸ‘‘

implementers or users of this specification must refer to the IANA-maintained "iana-tls-profile" YANG module, which is available at https://www.iana.org/assignments/yang-parameters 🫢

here's the initial version of the "iana-tls-profile" YANG module, file iana-tls-profile@2025-04-18.yang 🌈

module iana-tls-profile {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-tls-profile";
  prefix ianatp;

  organization
    "IANA";
  contact
    "        Internet Assigned Numbers Authority

     Postal: ICANN
             12025 Waterfront Drive, Suite 300
             Los Angeles, CA  90094-2536
             United States

     Tel:    +1 310 301 5800
     Email:  iana@iana.org>";
  description
    "This module contains the YANG definition for the (D)TLS profile.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     All revisions of IETF and IANA published modules can be found
     at the YANG Parameters registry
     (https://www.iana.org/assignments/yang-parameters).

     The initial version of this YANG module is part of RFC 9761;
     see the RFC itself for full legal notices.

     The latest version of this YANG module is available at
     https://www.iana.org/assignments/yang-parameters.";

  revision 2025-04-18 {
    description
      "Initial revision.";
    reference
      "RFC 9761: Manufacturer Usage Description (MUD) for TLS and
                 DTLS Profiles for Internet of Things (IoT) Devices";
  }

  typedef extension-type {
    type uint16;
    description
      "Extension type in the TLS ExtensionType Values registry as
       defined in Section 7 of RFC 8447.";
  }

  typedef supported-group {
    type uint16;
    description
      "Supported Group in the TLS Supported Groups registry as
       defined in Section 9 of RFC 8447.";
  }

  typedef signature-algorithm {
    type uint16;
    description
      "Signature algorithm in the TLS SignatureScheme registry as
       defined in Section 11 of RFC 8446.";
  }

  typedef psk-key-exchange-mode {
    type uint8;
    description
      "Pre-shared key exchange mode in the TLS PskKeyExchangeMode
       registry as defined in Section 11 of RFC 8446.";
  }

  typedef application-protocol {
    type string;
    description
      "Application-Layer Protocol Negotiation (ALPN) Protocol ID
       registry as defined in Section 6 of RFC 7301.";
  }

  typedef cert-compression-algorithm {
    type uint16;
    description
      "Certificate compression algorithm in TLS Certificate
       Compression Algorithm IDs registry as defined in
       Section 7.3 of RFC 8879.";
  }

  typedef cipher-algorithm {
    type uint16;
    description
      "Cipher suite in TLS Cipher Suites registry
       as discussed in Section 11 of RFC 8446.";
  }

  typedef tls-version {
    type enumeration {
      enum tls12 {
        value 1;
        description
          "TLS Protocol Version 1.2.

           TLS 1.2 ClientHello contains
           0x0303 in 'legacy_version'.";
        reference
          "RFC 5246: The Transport Layer Security (TLS) Protocol
                     Version 1.2";
      }
      enum tls13 {
        value 2;
        description
          "TLS Protocol Version 1.3.

           TLS 1.3 ClientHello contains a
           supported_versions extension with 0x0304
           contained in its body and the ClientHello contains
           0x0303 in 'legacy_version'.";
        reference
          "RFC 8446: The Transport Layer Security (TLS) Protocol
                     Version 1.3";
      }
    }
    description
      "Indicates the TLS version.";
  }

  typedef dtls-version {
    type enumeration {
      enum dtls12 {
        value 1;
        description
          "DTLS Protocol Version 1.2.

           DTLS 1.2 ClientHello contains
           0xfefd in 'legacy_version'.";
        reference
          "RFC 6347: Datagram Transport Layer Security 1.2";
      }
      enum dtls13 {
        value 2;
        description
          "DTLS Protocol Version 1.3.

           DTLS 1.3 ClientHello contains a
           supported_versions extension with 0x0304
           contained in its body and the ClientHello contains
           0xfefd in 'legacy_version'.";
        reference
          "RFC 9147: Datagram Transport Layer Security 1.3";
      }
    }
    description
      "Indicates the DTLS version.";
  }
}

5.4. MUD (D)TLS Profile Extension πŸ¦‹

this doc augments the "ietf-mud" MUD YANG module so it can say whether the device supports the (D)TLS profile πŸ’– if the device supports the "ietf-mud-tls" extension, the MUD file is assumed to implement the "match-on-tls-dtls" ACL model feature defined in this specification 🌸 and, furthermore, only accept or drop actions SHOULD be included with the (D)TLS profile, kinda like the actions allowed in Section 2 of [RFC8520] πŸ’…

this doc defines the YANG module "ietf-mud-tls", and it has the following tree structure:

module: ietf-mud-tls
  augment /ietf-mud:mud:
    +--rw is-tls-dtls-profile-supported?   boolean

here's the model, file ietf-mud-tls@2025-04-18.yang ✨

module ietf-mud-tls {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-mud-tls";
  prefix ietf-mud-tls;

  import ietf-mud {
    prefix ietf-mud;
    reference
      "RFC 8520: Manufacturer Usage Description Specification";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
     WG List: opsawg@ietf.org

     Author: Tirumaleswar Reddy.K
             kondtir@gmail.com

     Author: Dan Wing
             danwing@gmail.com

     Author: Blake Anderson
             blake.anderson@cisco.com

    ";
  description
    "Extension to a MUD module to indicate (D)TLS
     profile support.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC 9761; see
     the RFC itself for full legal notices.";

  revision 2025-04-18 {
    description
      "Initial revision.";
    reference
      "RFC 9761: Manufacturer Usage Description (MUD) for TLS and
                 DTLS Profiles for Internet of Things (IoT)
                 Devices";
  }

  augment "/ietf-mud:mud" {
    description
      "This adds an extension for a manufacturer
       to indicate whether the (D)TLS profile is
       supported by a device.";
    leaf is-tls-dtls-profile-supported {
      type boolean;
      default "false";
      description
        "This value will equal 'true' if a device supports
         (D)TLS profile.";
    }
  }
}

6. Processing of the MUD (D)TLS Profile ✨

okay so this is the rulebook for how a network security service (like a firewall) should handle the MUD (D)TLS Profile πŸ“œ the whole point is to avoid ossification, aka making the internet too rigid to ever change 🫢

  • if a (D)TLS parameter shows up in a session but isn't in the MUD (D)TLS profile AND the firewall recognizes it, that's sus πŸ‘€ it can flag unexpected (D)TLS usage, which might mean unauthorized software or malware on an endpoint. the firewall can block the session or raise an alert so the compromised device gets quarantined and fixed πŸ”₯ example: if the cipher suite TLS_RSA_WITH_AES_128_CBC_SHA shows up in the ClientHello and isn't in the profile, but the firewall knows it, it can identify unexpected TLS usage.
  • if a (D)TLS parameter shows up that's NOT in the profile and the firewall does NOT recognize it either, the firewall ignores it and does not block the session πŸ™…β€β™€οΈ this matches the compliant TLS middlebox description in Section 9.3 of [RFC8446], which says to ignore all unrecognized cipher suites, extensions, and other parameters. example: TLS_CHACHA20_POLY1305_SHA256 in the ClientHello, not in the profile, not recognized, so the firewall just ignores it. this also means the firewall ignores GREASE values from TLS peers and plays nicely with implementations that advertise them 🧚
  • deployments update at different speeds, so an updated profile might support newer parameters 🌈 if the firewall doesn't recognize those, an alert should be triggered to the firewall vendor and the IoT device owner or administrator. a firewall must be readily updatable so that when new parameters are found that it doesn't recognize, it can get updated quickly πŸ’… most importantly, if the firewall isn't readily updatable, its ability to identify emerging malware gets weaker over time πŸ’€ example: if TLS_AES_128_CCM_8_SHA256 is in the MUD (D)TLS profile and the firewall doesn't recognize it, an alert gets triggered. same deal if the (D)TLS version in the MUD file isn't recognized by the firewall.
  • if the MUD (D)TLS profile includes any parameters that are susceptible to attacks (like weaker cryptographic parameters), an alert MUST be triggered to the firewall vendor and the IoT device owner or administrator 🚨 no skipping this one, bestie.

7. MUD File Example πŸŽ€

this example has (D)TLS profile parameters for an IoT device that reaches servers listening on port 443 using TCP transport 🌸 the JSON encoding of YANG-modeled data [RFC7951] is used to illustrate it, so here's the vibe:

{
   "ietf-mud:mud": {
     "mud-version": 1,
      "mud-url": "https://example.com/IoTDevice",
      "last-update": "2024-08-05T03:56:40.105+10:00",
      "cache-validity": 100,
      "extensions": [
           "ietf-mud-tls"
       ],
      "ietf-mud-tls:is-tls-dtls-profile-supported": "true",
      "is-supported": true,
      "systeminfo": "IoT device name",
      "from-device-policy": {
         "access-lists": {
           "access-list": [
             {
               "name": "mud-7500-profile"
             }
           ]
         }
      },
     "ietf-access-control-list:acls": {
       "acl": [
         {
           "name": "mud-7500-profile",
           "type": "ipv6-acl-type",
           "aces": {
             "ace": [
               {
                 "name": "cl0-frdev",
                 "matches": {
                   "ipv6": {
                     "protocol": 6
                   },
                   "tcp": {
                     "ietf-mud:direction-initiated": "from-device",
                     "destination-port": {
                       "operator": "eq",
                       "port": 443
                     }
                   },
                   "ietf-acl-tls:client-profile" : {
                     "tls-dtls-profiles" : [
                        {
                           "name" : "profile1",
                           "supported-tls-versions" : ["tls13"],
                           "cipher-suite" : [4865, 4866],
                           "extension-types" : [10,11,13,16,24],
                           "supported-groups" : [29]
                        }
                      ]
                   },
                   "actions": {
                      "forwarding": "accept"
                   }
               }
            }
          ]
         }
        }
       ]
     }
   }
}

here's how the firewall handles the profile above πŸ‘‘

  • if the extension type "encrypt_then_mac" (code point 22) [RFC7366] shows up in the ClientHello and the firewall recognizes it, it can identify unexpected TLS usage πŸ”
  • if the extension type "token_binding" (code point 24) [RFC8472] is in the MUD (D)TLS profile but the firewall doesn't recognize it, the firewall can ignore it. BUT because "token_binding" is in the profile, an alert gets triggered to the firewall vendor and the IoT device owner or administrator to say the firewall isn't up-to-date 🫠
  • the two-byte values IANA assigned for TLS_AES_128_GCM_SHA256 and TLS_AES_256_GCM_SHA384 are written in decimal format πŸ”’

8. Software-Based ACLs and ACLs Within a (D)TLS 1.3 Proxy 🧚

okay so traditionally ACLs are all about fixed-length bit matching in hardware, like the stuff in Ternary Content-Addressable Memory (TCAM) πŸ”§ but ACLs in software (think iptables) are way more flexible and can do things like string matching πŸ™Œ for MUD (D)TLS profiles, matching binary data and strings is a deliberate choice that takes advantage of software-based ACLs. that gives you more dynamic, context-sensitive access control, which is literally essential for what MUD is for πŸ’– also, the DNS extension added to ACL in the MUD specification [RFC8520] needs software-based ACLs too, so it's a whole thing.

now for MUD (D)TLS ACLs inside a (D)TLS 1.3 proxy πŸ¦‹ the goal is for the proxy to intercept the (D)TLS handshake BEFORE any ACL rules get applied. which means MUD (D)TLS ACL matching has to happen after the proxy decrypts the encrypted TLS handshake messages πŸ” the proxy would then inspect the handshake fields according to the MUD profile. ACL matching happens in two stages: first, by filtering the clear-text TLS handshake messages, and second, by filtering after the TLS handshake messages have been decrypted ✨


9. Security Considerations 🚨

okay bestie, this part is serious 😭 the security considerations in [RFC8520] need to be taken into account. the middlebox MUST follow the invariants discussed in Section 9.3 of [RFC8446] so it acts as a compliant proxy 🫑

even though it's hard for malware to copy the TLS behavior of different IoT device types and models from different manufacturers, malicious agents could still use similar (D)TLS profile parameters as legit devices to dodge detection πŸ‘€ this is tricky because IoT devices often have totally different (D)TLS profiles between models, and especially between manufacturers. malware might struggle to perfectly copy the TLS behavior across all those devices, but it's not impossible πŸ’€ malicious agents might manage to use profile parameters that look like the ones from legit devices. how doable it is depends on the parameters: something like certificate authorities is complex to fake, while something like signature algorithms might be easier to copy. the harder it is to mimic a profile, the more specific the profile is and the more the parameters vary between devices 🧩

network security services should also lean on contextual network data (like domain name, IP address, and so on) to catch false negatives πŸ”Ž for example, they can filter malicious domain names and destination IP addresses with a bad reputation score. to catch these sneaky flows, anomaly detection (deep learning techniques on network data) can be used to spot malicious agents using the same (D)TLS profile parameters as the legit agent on the IoT device πŸ€– the main idea with anomaly detection is to keep learning what "normal" behavior looks like, then flag an "anomaly" (or an attack) based on what's known about normal behavior and how far something deviates from it πŸ“ˆ network security vendors use TLS parameters and contextual network data to identify malware (for example, see [EVE]) 🦠

honestly, the efficacy of catching malware in (D)TLS 1.3 flows will drop a lot without using contextual network data or acting as a proxy 😩 the encryption in (D)TLS 1.3 hides a lot of the handshake details that could otherwise be used for detection πŸ™ˆ

9.1. Challenges in Mimicking (D)TLS 1.2 Handshakes for IoT Devices πŸ“

(D)TLS 1.2 generally doesn't need a proxy, since all the fields in the (D)TLS profile are sent in cleartext during the handshake πŸ‘οΈ it's technically possible for an attacker to watch and copy the handshake, but they'd need a domain name and destination IP address with a good reputation, certificates from the same CAs the IoT devices use, and a way to dodge traffic analysis techniques (for example, [EVE], which spots malicious patterns in encrypted traffic without decrypting it) πŸ•΅οΈβ€β™€οΈ this is really hard because IoT devices often have distinct (D)TLS profiles that vary between models and manufacturers πŸ₯΅ and unlike legit app developers, malware authors have extra constraints, like avoiding any noticeable differences on the infected devices, and the risk of take-down requests hitting their server infrastructure (for example, a CA revoking a certificate once it's reported) 😀

9.2. Considerations for the "iana-tls-profile" Module ✨

Okay so this bit follows the template in Section 3.7.1 of [YANG-GUIDELINES] πŸ’…

The "iana-tls-profile" YANG module is a data model built to be accessed through YANG-based management protocols, like NETCONF [RFC6241] and RESTCONF [RFC8040]. These protocols have to run over a secure transport layer (think SSH [RFC4252], TLS [RFC8446], and QUIC [RFC9000]) and have to use mutual authentication πŸ”

The Network Configuration Access Control Model (NACM) [RFC8341] gives you the tools to limit particular NETCONF or RESTCONF users to a preset subset of all the available protocol operations and content. It's giving organized πŸ‘‘

Now the sensitivity check, bestie 🫢

There are no particularly sensitive writable data nodes. 🌸

There are no particularly sensitive readable data nodes. 🌸

This YANG module defines YANG enumerations for a public, IANA-maintained registry. πŸ“š

YANG enumerations aren't security-sensitive, since they're statically defined in the publicly accessible YANG module. IANA MAY deprecate and/or obsolete enumerations over time as needed to address security issues. So it can clean up its own mess when it needs to 🧹

There are no particularly sensitive RPC or action operations. 🌸

The YANG module defines a set of identities, types, and groupings. These nodes are meant to be reused by other YANG modules. By itself, the module doesn't expose any writable data nodes, data nodes that contain read-only state, or RPCs. So there are no additional security issues related to the YANG module that need to be considered. Main character energy, no notes πŸ¦‹

9.3. Considerations for the "ietf-acl-tls" Module πŸŽ€

This section follows the template in Section 3.7.1 of [YANG-GUIDELINES] ✨

The "ietf-acl-tls" YANG module is a data model meant to be accessed through YANG-based management protocols, like NETCONF [RFC6241] and RESTCONF [RFC8040]. These protocols have to use a secure transport layer (think SSH [RFC4252], TLS [RFC8446], and QUIC [RFC9000]) and have to use mutual authentication πŸ”

NACM [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. πŸ‘‘

Okay this is the serious part, so pay attention 🚨 A bunch of data nodes in this module are writable, creatable, and deletable (that's "config true", which is the default). All the writable data nodes are likely to be reasonably sensitive or vulnerable in some network environments. Write operations (like edit-config) and delete operations on these nodes without proper protection or authentication can have a negative effect on network operations. For example, adding or removing references to trusted anchors, (D)TLS versions, cipher suites, and so on can totally change the security policy that's running. That's why the NACM extension "default-deny-write" has been set for all data nodes defined in this module. Locked down, no exceptions πŸ”’

Some of the readable data nodes in this module may be considered sensitive or vulnerable in some network environments. So it's important to control read access (like via get, get-config, or notification) to these nodes. The YANG module gives insights into (D)TLS profiles of IoT devices, and the privacy considerations in Section 10 need to be taken into account πŸ™ˆ

There are no particularly sensitive RPC or action operations. 🌸

This YANG module uses groupings from other YANG modules that define nodes that may be considered sensitive or vulnerable in network environments. Check the Security Considerations for those dependent YANG modules to see which nodes may be sensitive or vulnerable in network environments. Homework, but worth it πŸ“–

9.4. Considerations for the "ietf-mud-tls" Module 🌈

This section follows the template in Section 3.7.1 of [YANG-GUIDELINES] ✨

The "ietf-mud-tls" YANG module is a data model meant to be accessed through YANG-based management protocols, like NETCONF [RFC6241] and RESTCONF [RFC8040]. These protocols have to use a secure transport layer (think SSH [RFC4252], TLS [RFC8446], and QUIC [RFC9000]) and have to use mutual authentication πŸ”

NACM [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. πŸ‘‘

A bunch of data nodes in this module are writable, creatable, and deletable (that's "config true", which is the default). All the writable data nodes are likely to be reasonably sensitive or vulnerable in some network environments. Write operations (like edit-config) and delete operations on these nodes without proper protection or authentication can have a negative effect on network operations. For example, an update that the device doesn't support a (D)TLS profile can totally change the security policy that's running. That's why the NACM extension "default-deny-write" has been set for all data nodes defined in this module. Nobody's touching these without permission 🚫

There are no particularly sensitive RPC or action operations. 🌸

This YANG module uses groupings from other YANG modules that define nodes that may be considered sensitive or vulnerable in network environments. Check the Security Considerations for those dependent YANG modules to see which nodes may be sensitive or vulnerable in network environments. πŸ“–

10. Privacy Considerations πŸ™ˆ

Okay, privacy is a big deal, so let's talk about it 🫣 The privacy considerations in Section 16 of [RFC8520] about not revealing the MUD URL to an attacker still need to be taken into consideration. The MUD URL can be stored in a Trusted Execution Environment (TEE) for secure operation, enhanced data security, and prevention of exposure to unauthorized software. The MUD URL MUST be encrypted and shared only with the authorized components in the network (see Sections 1.5 and 1.8 of [RFC8520]) so that an on-path attacker cannot read the MUD URL and identify the IoT device. Otherwise, it gives the attacker a hint about what vulnerabilities may be present on the IoT device. 😬

Note that while protecting the MUD URL is valuable, as described above, a compromised IoT device may be susceptible to malware doing vulnerability analysis (and version mapping) of the legitimate software in memory or on non-volatile storage (e.g., disk, NVRAM). However, the malware on the IoT device is intended to be blocked from establishing a (D)TLS connection with the C&C server to reveal this information, because the connection would be blocked by the network security service supporting this specification. So the network is the bouncer here πŸšͺπŸ’€

Full handshake inspection (Section 4.1) requires a (D)TLS proxy device that needs to decrypt traffic between the IoT device and its server(s). There's a tradeoff between privacy of the data carried inside (D)TLS (for example, personally identifiable information and protected health information especially) and efficacy of endpoint security. The use of (D)TLS proxies is NOT RECOMMENDED whenever possible. πŸ™…β€β™€οΈ For example, an enterprise firewall administrator can configure the middlebox to bypass (D)TLS proxy functionality or payload inspection for connections destined to specific well-known services. Alternatively, an IoT device could be configured to reject all sessions that involve proxy servers to specific well-known services. Also, mechanisms based on object security can be used by IoT devices to enable end-to-end security, and the middlebox won't have any access to the packet data. πŸ”βœ¨ For example, Object Security for Constrained RESTful Environments (OSCORE) [RFC8613] is a proposal that protects Constrained Application Protocol (CoAP) messages by wrapping them in the CBOR Object Signing and Encryption (COSE) format [RFC9052]. Wrapping, but make it secure 🎁

11. IANA Considerations 🧚

11.1. (D)TLS Profile YANG Modules πŸ’œ

IANA has registered the following URIs in the "ns" subregistry within the "IETF XML Registry" [RFC3688]:

URI:  urn:ietf:params:xml:ns:yang:iana-tls-profile
Registrant Contact:  IANA.
XML:  N/A; the requested URI is an XML namespace.

URI:  urn:ietf:params:xml:ns:yang:ietf-acl-tls
Registrant Contact:  IESG.
XML:  N/A; the requested URI is an XML namespace.

URI:  urn:ietf:params:xml:ns:yang:ietf-mud-tls
Registrant Contact:  IESG.
XML:  N/A; the requested URI is an XML namespace.

IANA has created an IANA-maintained YANG module called "iana-tls-profile" based on the contents of Section 5.3, which allows for new (D)TLS parameters and (D)TLS versions to be added to "client-profile". Bestie, it's extensible, so the list can grow 🌱

IANA has registered the following YANG modules in the "YANG Module Names" registry [RFC6020] of the "YANG Parameters" registry group. πŸ“‹

Name:  iana-tls-profile
Namespace:  urn:ietf:params:xml:ns:yang:iana-tls-profile
Maintained by IANA:  Y
Prefix:  ianatp
Reference:  RFC 9761

Name:  ietf-acl-tls
Namespace:  urn:ietf:params:xml:ns:yang:ietf-acl-tls
Maintained by IANA:  N
Prefix:  ietf-acl-tls
Reference:  RFC 9761

Name:  ietf-mud-tls
Namespace:  urn:ietf:params:xml:ns:yang:ietf-mud-tls
Maintained by IANA:  N
Prefix:  ietf-mud-tls
Reference:  RFC 9761

11.2. Considerations for the iana-tls-profile Module

Okay so IANA already made the first version of the IANA-maintained YANG module called iana-tls-profile based on Section 5.3 πŸ’– It's the thing that lets brand-new (D)TLS parameters and (D)TLS versions get added later on πŸ¦‹ IANA is asked to add this note:

  • tls-version and dtls-version values must not be directly added to the iana-tls-profile YANG module. Instead, they must be added to the "ACL TLS Version Codes" and "ACL DTLS Version Codes" registries (respectively), provided the new (D)TLS version has been standardized by the IETF. It allows a new (D)TLS version to be added to the iana-tls-profile YANG module. 🌸
  • (D)TLS parameters must not be directly added to the iana-tls-profile YANG module. They must instead be added to the "ACL (D)TLS Parameters" registry if the new (D)TLS parameters can be used by a middlebox to identify a MUD non-compliant (D)TLS behavior. It allows new (D)TLS parameters to be added to the iana-tls-profile YANG module. ✨

When a tls-version or dtls-version value gets added to the "ACL TLS Version Codes" or "ACL DTLS Version Codes" registry (respectively), a new enum statement must be added to the iana-tls-profile YANG module. The following enum statement, and its substatements, should be defined:

  • "enum": Replicates the label from the registry.
  • "value": Contains the IANA-assigned value corresponding to the tls-version or dtls-version.
  • "description": Replicates the description from the registry.
  • "reference": RFC YYYY: <Title of the RFC>, where YYYY is the RFC that added the tls-version or dtls-version.

When a (D)TLS parameter is added to the "ACL (D)TLS Parameters" registry, a new type statement must be added to the iana-tls-profile YANG module. The following type statement, and its substatements, should be defined:

  • "derived type": Replicates the parameter name from the registry.
  • "built-in type": Contains the built-in YANG type.
  • "description": Replicates the description from the registry.

When the iana-tls-profile YANG module is updated, a new revision statement must be added in front of the existing revision statements. πŸŽ€

IANA has added this note to the "ACL TLS Version Codes", "ACL DTLS Version Codes", and "ACL (D)TLS Parameters" registries:

When this registry is modified, the YANG module "iana-tls-profile"
must be updated as defined in [RFC9761].

11.3. ACL TLS Version Registry

IANA has created a new registry titled "ACL TLS Version Codes" πŸ”₯ The codes in here are the valid values of the tls-version parameter. Further assignments get made through Expert Review [RFC8126]. Experts must ensure that the TLS protocol version in a new registration is one that has been standardized by the IETF. The registry is expected to be updated infrequently, mostly when a new TLS version gets standardized by the IETF πŸ’…

+=======+=======+=================+===========+
| Value | Label | Description     | Reference |
+=======+=======+=================+===========+
| 1     | tls12 | TLS Version 1.2 | [RFC5246] |
+-------+-------+-----------------+-----------+
| 2     | tls13 | TLS Version 1.3 | [RFC8446] |
+-------+-------+-----------------+-----------+

                    Table 1

11.4. ACL DTLS Version Registry

IANA has created a new registry titled "ACL DTLS Version Codes" 🌈 The codes in here are the valid values of the dtls-version parameter. Further assignments get made through Expert Review [RFC8126]. Experts must ensure that the DTLS protocol version in a new registration is one that has been standardized by the IETF. The registry is expected to be updated infrequently, mostly when a new DTLS version gets standardized by the IETF πŸ¦‹

+=======+========+==================+===========+
| Value | Label  | Description      | Reference |
+=======+========+==================+===========+
| 1     | dtls12 | DTLS Version 1.2 | [RFC6347] |
+-------+--------+------------------+-----------+
| 2     | dtls13 | DTLS Version 1.3 | [RFC9147] |
+-------+--------+------------------+-----------+

                    Table 2

11.5. ACL (D)TLS Parameters Registry

IANA has created a new registry titled "ACL (D)TLS Parameters" 🧚

The values for all the (D)TLS parameters in this registry are defined in the TLS and DTLS IANA registries (https://www.iana.org/assignments/tls-parameters/ and https://www.iana.org/assignments/tls-extensiontype-values/), excluding the tls-version and dtls-version parameters. Further assignments get made through Expert Review [RFC8126]. Experts must ensure that the (D)TLS parameter in a new registration is one that has been standardized by the IETF. The registry is expected to be updated periodically, mostly when a new (D)TLS parameter gets standardized by the IETF. The registry has been populated with the following initial parameters: πŸ’œ

+============================+=============+========+==============+
| Parameter Name             | YANG Type   | JSON   | Description  |
|                            |             | Type   |              |
+============================+=============+========+==============+
| extension-type             | uint16      | Number | Extension    |
|                            |             |        | type         |
+----------------------------+-------------+--------+--------------+
| supported-group            | uint16      | Number | Supported    |
|                            |             |        | group        |
+----------------------------+-------------+--------+--------------+
| signature-algorithm        | uint16      | Number | Signature    |
|                            |             |        | algorithm    |
+----------------------------+-------------+--------+--------------+
| psk-key-exchange-mode      | uint8       | Number | Pre-shared   |
|                            |             |        | key exchange |
|                            |             |        | mode         |
+----------------------------+-------------+--------+--------------+
| application-protocol       | string      | String | Application  |
|                            |             |        | protocol     |
+----------------------------+-------------+--------+--------------+
| cert-compression-algorithm | uint16      | Number | Certificate  |
|                            |             |        | compression  |
|                            |             |        | algorithm    |
+----------------------------+-------------+--------+--------------+
| cipher-algorithm           | uint16      | Number | Cipher suite |
+----------------------------+-------------+--------+--------------+
| tls-version                | enumeration | String | TLS version  |
+----------------------------+-------------+--------+--------------+
| dtls-version               | enumeration | String | DTLS version |
+----------------------------+-------------+--------+--------------+

                               Table 3

11.6. MUD Extensions Registry

IANA has created a new MUD Extension Name "ietf-mud-tls" in the "MUD Extensions" IANA registry https://www.iana.org/assignments/mud ✨


12. References πŸ“š

12.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <https://www.rfc-editor.org/info/rfc2119>.

[RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
           DOI 10.17487/RFC3688, January 2004,
           <https://www.rfc-editor.org/info/rfc3688>.

[RFC4252]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
           Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252,
           January 2006, <https://www.rfc-editor.org/info/rfc4252>.

[RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security
           (TLS) Protocol Version 1.2", RFC 5246,
           DOI 10.17487/RFC5246, August 2008,
           <https://www.rfc-editor.org/info/rfc5246>.

[RFC6241]  Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
           and A. Bierman, Ed., "Network Configuration Protocol
           (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
           <https://www.rfc-editor.org/info/rfc6241>.

[RFC6347]  Rescorla, E. and N. Modadugu, "Datagram Transport Layer
           Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347,
           January 2012, <https://www.rfc-editor.org/info/rfc6347>.

[RFC8040]  Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
           Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
           <https://www.rfc-editor.org/info/rfc8040>.

[RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
           2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
           May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8341]  Bierman, A. and M. Bjorklund, "Network Configuration
           Access Control Model", STD 91, RFC 8341,
           DOI 10.17487/RFC8341, March 2018,
           <https://www.rfc-editor.org/info/rfc8341>.

[RFC8446]  Rescorla, E., "The Transport Layer Security (TLS) Protocol
           Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
           <https://www.rfc-editor.org/info/rfc8446>.

[RFC8519]  Jethanandani, M., Agarwal, S., Huang, L., and D. Blair,
           "YANG Data Model for Network Access Control Lists (ACLs)",
           RFC 8519, DOI 10.17487/RFC8519, March 2019,
           <https://www.rfc-editor.org/info/rfc8519>.

[RFC8520]  Lear, E., Droms, R., and D. Romascanu, "Manufacturer Usage
           Description Specification", RFC 8520,
           DOI 10.17487/RFC8520, March 2019,
           <https://www.rfc-editor.org/info/rfc8520>.

[RFC8701]  Benjamin, D., "Applying Generate Random Extensions And
           Sustain Extensibility (GREASE) to TLS Extensibility",
           RFC 8701, DOI 10.17487/RFC8701, January 2020,
           <https://www.rfc-editor.org/info/rfc8701>.

[RFC8879]  Ghedini, A. and V. Vasiliev, "TLS Certificate
           Compression", RFC 8879, DOI 10.17487/RFC8879, December
           2020, <https://www.rfc-editor.org/info/rfc8879>.

[RFC9000]  Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
           Multiplexed and Secure Transport", RFC 9000,
           DOI 10.17487/RFC9000, May 2021,
           <https://www.rfc-editor.org/info/rfc9000>.

[RFC9147]  Rescorla, E., Tschofenig, H., and N. Modadugu, "The
           Datagram Transport Layer Security (DTLS) Protocol Version
           1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022,
           <https://www.rfc-editor.org/info/rfc9147>.

[RFC9640]  Watsen, K., "YANG Data Types and Groupings for
           Cryptography", RFC 9640, DOI 10.17487/RFC9640, October
           2024, <https://www.rfc-editor.org/info/rfc9640>.

[X690]     ITU-T, "Information technology - ASN.1 encoding Rules:
           Specification of Basic Encoding Rules (BER), Canonical
           Encoding Rules (CER) and Distinguished Encoding Rules
           (DER)", ITU-T Recommendation X.690, 2021,
           <https://www.itu.int/rec/T-REC-X.690-202102-I/en>.

12.2. Informative References ✨

okay bestie, these are the extra reads πŸ“š not required to implement anything, but they're where the backstory lives πŸ’…

[CLEAR-AS-MUD] Hamza, A., Ranathunga, D., Gharakheili, H. H., Roughan, M., and V. Sivaraman, "Clear as MUD: Generating, Validating and Applying IoT Behaviorial Profiles (Technical Report)", arXiv:1804.04358, DOI 10.48550/arXiv.1804.04358, April 2018, https://arxiv.org/pdf/1804.04358.pdf.

[CRYPTO-VULNERABILITY] Perez, B., "Exploiting the Windows CryptoAPI Vulnerability", January 2020, https://securityboulevard.com/2020/01/exploiting-the-windows-cryptoapi-vulnerability/.

[EVE] Cisco, "Encrypted Visibility Engine", Cisco Secure Firewall documentation, https://secure.cisco.com/secure-firewall/docs/encrypted-visibility-engine.

[IoT-PROFILE] Tschofenig, H., Fossati, T., and M. Richardson, "TLS/DTLS 1.3 Profiles for the Internet of Things", Work in Progress, Internet-Draft, draft-ietf-uta-tls13-iot-profile-13, 3 March 2025, https://datatracker.ietf.org/doc/html/draft-ietf-uta-tls13-iot-profile-13.

[MALWARE-DOH] Cimpanu, C., "First-ever malware strain spotted abusing new DoH (DNS over HTTPS) protocol", ZDNET, July 2019, https://www.zdnet.com/article/first-ever-malware-strain-spotted-abusing-new-doh-dns-over-https-protocol/.

[MALWARE-TLS] Anderson, B. and D. McGrew, "TLS Beyond the Browser: Combining End Host and Network Data to Understand Application Behavior", IMC '19: Proceedings of the Internet Measurement Conference, pp. 379-392, DOI 10.1145/3355369.3355601, October 2019, https://dl.acm.org/citation.cfm?id=3355601.

[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, October 2010, https://www.rfc-editor.org/info/rfc6020.

[RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS) Extensions: Extension Definitions", RFC 6066, DOI 10.17487/RFC6066, January 2011, https://www.rfc-editor.org/info/rfc6066.

[RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, "Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, July 2014, https://www.rfc-editor.org/info/rfc7301.

[RFC7366] Gutmann, P., "Encrypt-then-MAC for Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)", RFC 7366, DOI 10.17487/RFC7366, September 2014, https://www.rfc-editor.org/info/rfc7366.

[RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., and P. Hoffman, "Specification for DNS over Transport Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May 2016, https://www.rfc-editor.org/info/rfc7858.

[RFC7925] Tschofenig, H., Ed. and T. Fossati, "Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things", RFC 7925, DOI 10.17487/RFC7925, July 2016, https://www.rfc-editor.org/info/rfc7925.

[RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", RFC 7951, DOI 10.17487/RFC7951, August 2016, https://www.rfc-editor.org/info/rfc7951.

[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, https://www.rfc-editor.org/info/rfc8126.

[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, https://www.rfc-editor.org/info/rfc8340.

[RFC8447] Salowey, J. and S. Turner, "IANA Registry Updates for TLS and DTLS", RFC 8447, DOI 10.17487/RFC8447, August 2018, https://www.rfc-editor.org/info/rfc8447.

[RFC8472] Popov, A., Ed., Nystroem, M., and D. Balfanz, "Transport Layer Security (TLS) Extension for Token Binding Protocol Negotiation", RFC 8472, DOI 10.17487/RFC8472, October 2018, https://www.rfc-editor.org/info/rfc8472.

[RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, https://www.rfc-editor.org/info/rfc8484.

[RFC8576] Garcia-Morchon, O., Kumar, S., and M. Sethi, "Internet of Things (IoT) Security: State of the Art and Challenges", RFC 8576, DOI 10.17487/RFC8576, April 2019, https://www.rfc-editor.org/info/rfc8576.

[RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, "Object Security for Constrained RESTful Environments (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, https://www.rfc-editor.org/info/rfc8613.

[RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): Structures and Process", STD 96, RFC 9052, DOI 10.17487/RFC9052, August 2022, https://www.rfc-editor.org/info/rfc9052.

[RFC9325] Sheffer, Y., Saint-Andre, P., and T. Fossati, "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November 2022, https://www.rfc-editor.org/info/rfc9325.

[RFC9462] Pauly, T., Kinnear, E., Wood, C. A., McManus, P., and T. Jensen, "Discovery of Designated Resolvers", RFC 9462, DOI 10.17487/RFC9462, November 2023, https://www.rfc-editor.org/info/rfc9462.

[RFC9463] Boucadair, M., Ed., Reddy.K, T., Ed., Wing, D., Cook, N., and T. Jensen, "DHCP and Router Advertisement Options for the Discovery of Network-designated Resolvers (DNR)", RFC 9463, DOI 10.17487/RFC9463, November 2023, https://www.rfc-editor.org/info/rfc9463.

[SLOWLORIS] Wikipedia, "Slowloris (cyber attack)", December 2024, https://en.wikipedia.org/w/index.php?title=Slowloris_(cyber_attack)&oldid=1263305193.

[TLS-ESNI] Rescorla, E., Oku, K., Sullivan, N., and C. A. Wood, "TLS Encrypted Client Hello", Work in Progress, Internet-Draft, draft-ietf-tls-esni-24, 20 March 2025, https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-24.

[X501] "Information Technology - Open Systems Interconnection - The Directory: Models", ITU-T Recommendation X.501, October 2019, https://www.itu.int/rec/T-REC-X.501-201910-I/en.

[YANG-GUIDELINES] Bierman, A., Boucadair, M., and Q. Wu, "Guidelines for Authors and Reviewers of Documents Containing YANG Data Models", Work in Progress, Internet-Draft, draft-ietf-netmod-rfc8407bis-23, 15 April 2025, https://datatracker.ietf.org/doc/html/draft-ietf-netmod-rfc8407bis-23.


Acknowledgments 🫢

Thanks to Flemming Andreasen, Shashank Jain, Michael Richardson, Piyush Joshi, Eliot Lear, Harsha Joshi, Qin Wu, Mohamed Boucadair, Ben Schwartz, Eric Rescorla, Panwei William, Nick Lamb, Tom Petch, Paul Wouters, Thomas Fossati, and Nick Harper for the discussion and comments. πŸ’œ

Thanks to Xufeng Liu for YANGDOCTOR review. Thanks to Linda Dunbar for SECDIR review. Thanks to Qin Wu for OPSDIR review. Thanks to R. Gieben for DNSDIR review. 🌸

Thanks to Roman Danyliw, Orie Steele, Γ‰ric Vyncke, Mahesh Jethanandani, Murray Kucherawy, Zaheduzzaman Sarker, and Deb Cooley for the IESG review. You all are iconic πŸ‘‘πŸŒˆ


Authors' Addresses πŸ¦‹

Tirumaleswar Reddy.K
Nokia
India
Email: kondtir@gmail.com
Dan Wing
Citrix Systems, Inc.
4988 Great America Pkwy
Santa Clara, CA 95054
United States of America
Email: danwing@gmail.com
Blake Anderson
Cisco Systems, Inc.
170 West Tasman Dr
San Jose, CA 95134
United States of America
Email: blake.anderson@cisco.com
πŸ“¦ where this page comes from