| .. _sensor-threat: |
| |
| Sensor Device Threat Model |
| ########################## |
| |
| This document describes a threat model for an IoT sensor device. |
| Spelling out a threat model helps direct development effort, and can |
| be used to help prioritize these efforts as well. |
| |
| This device contains a sensor of some type (for example temperature, or a |
| pressure in a pipe), which sends this data to an SoC running a |
| microcontroller. This microcontroller connects to a cloud service, and |
| relays this sensor data to this service. The cloud service is also able |
| to send configuration data to the device, as well as software update |
| images. A general diagram can be seen in Figure 1: |
| |
| .. figure:: media/sensor-model.svg |
| |
| Figure 1. Sensor General Diagram |
| |
| In this sensor device, the sensor connects with the SoC via an SPI bus, |
| and the SoC has a network interface that it uses to communicate with the |
| cloud service. The particulars of these interfaces can impact the threat |
| model in unexpected ways, and variants on this will need to be |
| considered (for example, using a separate network interface SoC |
| connected via some type of bus). |
| |
| This model also focuses on communicating via the MQTT-over-TLS protocol, |
| as this seems to be in wide use [1]_. |
| |
| Assets |
| ====== |
| |
| One aspect of the threat model to consider are assets involved in the |
| operation of the device. The following list enumerates the assets |
| included in this model: |
| |
| 1. **The bootloader**. This is a small code/data image contained in |
| on-device flash that is the first code to run. In order to establish |
| a root of trust, this image must be immutable. This model assumes |
| that the SoC provides a mechanism to protect a region of the flash |
| from future writes, and that this will be done after this image is |
| programmed into the device, early in production [th-imboot]_. |
| |
| 2. **The application firmware image**. This asset consists of the |
| remainder of the firmware run by the microcontroller. The distinction |
| is made because this part of the image will need to be updated |
| periodically as security vulnerabilities are discovered. Requirements |
| for updates to this image are: |
| |
| a. The image shall only be replaced with an authorized image |
| [th-authrepl]_. |
| |
| b. When an authorized replacement image is available, the update |
| shall be done in a timely manner [th-timely-update]_. |
| |
| c. The image update shall be seen as atomic, meaning that when the |
| image is run, the flash shall contain either the update image in |
| its entirety, or the old image in its entirety |
| [th-atomic-update]_. |
| |
| 3. **Root certificate list**. In order to authenticate the cloud service |
| (server), the IoT device must have a list of root certificates that |
| are allowed to sign the certificate on the server. For cloud-provider |
| based services, this list will generally be provided by the service |
| provider. Because the root certificates can expire, and possibly be |
| revoked, this list will need to be periodically updated |
| [th-root-certs]_, [th-root-check]_. |
| |
| 4. **Client secrets**. To authenticate the client to the service, the |
| client must possess some kind of secret. This is generally a private |
| key, usually either an RSA key or an EC private key. When |
| establishing communication with the server, the device will use |
| this secret either as part of the TLS establishment, or to sign a |
| message used in the communication. |
| |
| This secret is generally generated by the service provider, or by |
| software running elsewhere, and must be securely installed on the |
| device. Policy may dictate that this secret be replaced |
| periodically, which will require a way to update the client secret. |
| Typically, the service will allow two or three active keys to allow |
| this update to proceed while the old key is used. |
| |
| These secrets must be protected from read, and the smallest amount |
| of code necessary shall have access to them. [th-secret-storage]_ |
| |
| 5. **Current date/time**. TLS certificate verification requires |
| knowledge of the current date and time in order to determine if the |
| current time falls within the certificate's current validity time. |
| Also, token based client authentication will generally require the |
| client to sign a message containing a time window that the token is |
| valid. Certificate validation requires the device's notion of date and |
| time to be accurate within a day or so. Token generation generally |
| requires the time to be accurate within 5-10 minutes. |
| |
| It may be possible to approximate secure time by querying an |
| external time server. Secure NTP is possibly beyond the |
| capabilities of an IoT device. The main risks of having incorrect |
| time are denial of service (the device rejects valid certificates), |
| and the generation of tokens with invalid times. It could be |
| possible to trick the device into generating tokens that are valid in |
| the future, but the attacker would also have to spoof the server's |
| certificate to be able to intercept this. [th-time]_ |
| |
| 6. **Sensor data**. The data received from the sensor itself, and |
| delivered to the service shall be delivered without modification or |
| tampering. |
| |
| 7. **Device configuration**. Various configuration data, such as the |
| hostname of the service to connect to, the address of a time server, |
| frequency and parameters of when sensor data is sent to the service, |
| and other need to be kept by the device. This configuration data will |
| need to be updated periodically as the configuration changes. Updates |
| should be allowed only from authorized parties. [th-conf]_ |
| |
| 8. **Logs**. In order to assist with analysis of security issues, the |
| device shall log information about security-pertinent events. IoT |
| devices generally have limited storage, and as such, these logs need |
| to be carefully selected. It may also be possible to send these log |
| events to the cloud service where they can be stored in a more |
| resource-available environment. Types of events that should be logged |
| include: |
| |
| a. **Firmware image updates**. The system should log the download of |
| new images, and when an image is successfully updated. |
| |
| b. **Client secret changes**. Changes and new client secrets should be |
| logged. |
| |
| c. **Changes to the device configuration**. |
| |
| [th-logs]_ |
| |
| Communication |
| ============= |
| |
| In addition to assets, the threat model also considers the locations |
| where data or assets are communicated between entities of the system. |
| |
| 1. **Flash contents**. The flash device contains several regions. The |
| contents of flash can be modified programmatically by the SoC's CPU. |
| |
| a. **The bootloader**. As described in the Assets section, the |
| bootloader is a small section of the flash device containing the |
| code initially run. This section shall be written early in the |
| lifecycle of the device, and the flash device then configured to |
| permanently disallow modification of this section. This |
| configuration should also prevent modification via external |
| interfaces, such as JTAG or SWD debuggers. |
| |
| The bootloader is responsible for verifying the signature of the |
| application image as well as updating the application image from |
| the update image when an update is needed. |
| |
| The bootloader shall verify the signature of the update image |
| before installing it. |
| |
| The bootloader shall only accept an update image with a newer |
| version number than the current image. |
| |
| b. **The application image**. The application image contains the code |
| executed during normal operation of the device. Before running |
| this image, the bootloader shall verify a digital signature of the |
| image, to avoid running an image that has been tampered with. The |
| flash/system shall be configured such that after the bootloader |
| has completed, the CPU will be unable to write to the application |
| image. |
| |
| c. **The update image**. This is an area of flash that holds a new |
| version of the application image. This image will be downloaded |
| and stored by the application during normal operation. When this |
| has completed, the application can trigger a reboot, and the |
| bootloader can install the new image. |
| |
| d. **Secret storage**. An area of the flash will be used to store |
| client secrets. This area is written and read by a subset of the |
| application image. The application shall be configured to |
| protect this area from both reads and writes by code that does |
| not need to have access to it, giving consideration to possible |
| exploits found within a majority of the application code. |
| Revealing the contents of the secrets would allow the attacker |
| to spoof this device. |
| |
| Initial secrets shall be placed in the device during a |
| provisioning activity, distinct from normal operation of the |
| device. Later updates can be made under the direction of |
| communication received over a secured channel to the service. |
| |
| e. **Configuration storage**. There shall be an area to store other |
| configuration information. On resource-constrained devices, it is |
| allowed for this to be stored in the same region as the secret |
| storage, however, this adds additional code that has access to the |
| secret storage area, and as such, more code that must be |
| scrutinized. |
| |
| f. **Log storage**. The device may have an area of flash where log |
| events can be written. |
| |
| 2. **Sensor/Actuator interface**. In this design, the sensor or actuator |
| communicates with the SoC via a bus, such as SPI. The hardware design |
| shall be made to make intercepting this bus difficult for an attack. |
| Required techniques depend on the sensitivity and use of the sensor |
| data, and can range from having the sensor mounted on the same PCB as |
| the MCU to epoxy potting the entire device. |
| |
| 3. **Communication with cloud service**. Communication between the |
| device, and the cloud service will be done over the general |
| internet. As such, it shall be assumed that an attacker can |
| arbitrarily intercept this channel and, for example, return spoofed |
| DNS results or attempt man-in-the-middle attacks |
| against communication with cloud services. |
| |
| The device shall use TLS for all communication with the cloud |
| service [th-all-tls]_. The TLS stack shall be configured to use only cipher suites |
| that are generally considered secure [2]_, including forward |
| secrecy. The communication shall be secured by the following: |
| |
| a. **Cipher suite selection**. The device shall only allow |
| communication with generally agreed secure cipher suites |
| [th-tls-ciphers]_. |
| |
| b. **Server certificate verification**. The server presented by the |
| server shall be verified [th-root-check]_. |
| |
| i. **Naming**. The certificate shall name the host and service |
| the cloud service server is providing. |
| `RFC6125 <https://tools.ietf.org/html/rfc6125>`__ describes |
| best practices for this. It is permissible for the device to |
| require the certificate to be more restrictive than as |
| described in this RFC, provided the service can use a |
| certificate that can comply. |
| |
| ii. **Path validation**. The device shall verify that the |
| certificate chain has a valid signature path from a root |
| certificate contained within the device, to the certificate |
| presented by the service. |
| `RFC4158 <https://tools.ietf.org/html/rfc4158>`__ describes |
| this is general. The device is permitted to require a more |
| restricted path, provided the server certificate used |
| complies with this restriction. |
| |
| iii. **Validity period**. The validity period of all presented |
| certificates shall be checked against the device's best |
| notion of the current time. |
| |
| c. **Client authentication**. The client shall authenticate itself to |
| the service using a secret known only to that particular device. |
| There are several options, and the technique used is generally |
| mandated by the particular service provider being used |
| [th-tls-client-auth]_. |
| |
| i. **TLS client certificates**. The TLS protocol allows the |
| client to present a certificate, and assert its knowledge of |
| the secret described by that certificate. Generally, these |
| certificates will be stored within the service provider. These |
| certificates can be self-signed, or signed by a CA. Since the |
| service provider maintains a list of valid certificates |
| (mapping them to a device identity), having these certificates |
| signed by a CA does not add any additional security, but may |
| be useful in the management of these certificates. |
| |
| ii. **Token-based authentication**. It is also possible for the |
| client to authenticate itself using the *password* field of |
| the MQTT CONNECT packet. However, the secret itself must not |
| be transmitted in this packet. Instead, a token-based |
| protocol, such as |
| `RFC7519 <https://tools.ietf.org/html/rfc7519>`__\ 's JSON Web |
| Token (JWT) can be used. These tokens will generally have a |
| small validity period (e.g. 1 hour), to prevent them from |
| being reused if they are intercepted. The token shall not be |
| sent until the device has verified the identity of the server. |
| |
| d. **Random/Entropy source**. Cryptographic communication requires the |
| generation of secure pseudorandom numbers. The device shall use a |
| modern, accepted cryptographic random-bit generator to generate |
| these random numbers. It shall use either a Non-Deterministic |
| Random Bit Generator (True RBG) implemented in hardware within the |
| SoC, or a Deterministic Random Bit Generator (Pseudo RBG) seeded |
| by an entropy source within the SoC. Please see NIST SP 800-90A |
| for information on approved RBGs and NIST SP 800-90B for |
| information on testing a device's entropy source [th-entropy]_. |
| |
| 4. **Communication with the time service**. Ideally, the device shall |
| contain hardware that maintains a secure time. However, most SoCs in |
| use do not have support for this, and it will be necessary to consult |
| an external time service. |
| `RFC4330 <https://tools.ietf.org/html/rfc4330>`__ and referenced RFCs |
| describe the Simple Network Time Protocol that can be used to query |
| the current time from a network time server. |
| |
| 5. **Device lifecycle**. An IoT device will have a lifecycle from |
| production to destruction and disposal of the device. Aspects of this |
| lifecycle that impact security include initial provisioning, normal |
| operation, re-provisioning, and destruction. |
| |
| a. **Initial provisioning**. During the initial provisioning stage, |
| it is necessary to program the bootloader, an initial application |
| image, a device secret, and initial configuration data |
| [th-initial-provision]_. In |
| addition, the bootloader flash protection shall be installed. Of |
| this information, only the device secret needs to differ per |
| device. This secret shall be securely maintained, and destroyed in |
| all locations outside of the device once it has been programmed |
| [th-initial-secret]_. |
| |
| b. **Normal operation**. Normal operation includes the behavior |
| described by the rest of this document. |
| |
| c. **Re-provisioning**. Sometimes it is necessary to re-provision a |
| device, such as for a different application. One way to do this is |
| to keep the same device secret, and replace the configuration |
| data, as well as the cloud service data associated with the |
| device. It is also possible to program a new device secret, but if |
| this is done it shall be done securely, and the new secret |
| destroyed externally once programmed into the device |
| [th-reprovision]_. |
| |
| d. **Destruction**. To prevent the device secret from being used to |
| spoof the device, upon decommissioning, the secret for a |
| particular device shall be rendered ineffective |
| [th-destruction]_. Possibilities include: |
| |
| i. Hardware destruction of the device. |
| |
| ii. Securely wiping the flash area containing the |
| secret [3]_. |
| |
| iii. Removing the device identity and certificate from the |
| service. |
| |
| Other Considerations |
| ==================== |
| |
| In addition to the above, network connected devices generally will need |
| a way to configure them to connect to the network environment they are |
| placed in. There are numerous ways of doing this, and it is important |
| for these configuration methods to not circumvent the security |
| requirements described above. |
| |
| Threats |
| ======= |
| |
| .. [th-imboot] Must boot with an immutable bootloader. |
| |
| .. [th-authrepl] Application image shall only be replaced with an |
| authorized image. |
| |
| .. [th-timely-update] |
| Application updates shall be done in a timely manner. |
| |
| .. [th-atomic-update] |
| Application updates shall be atomic. |
| |
| .. [th-root-certs] |
| TLS must have a list of trusted root certificates. |
| |
| .. [th-root-check] |
| TLS must verify root certificate from server is valid. |
| |
| .. [th-secret-storage] |
| There must be a mechanism to securely store client secrets. The |
| least amount of code necessary shall have access to these secrets. |
| |
| .. [th-time] |
| System must have moderately accurate notion of the current |
| date/time. |
| |
| .. [th-conf] |
| The system must receive, and keep configuration data. |
| |
| .. [th-logs] |
| The system must log security-related events, and either store them |
| locally, or send to a service. |
| |
| .. [th-all-tls] |
| All communications with the cloud service shall use TLS. |
| |
| .. [th-tls-ciphers] |
| TLS shall be configured to allow only generally agreed cipher |
| suites (including forward secrecy). |
| |
| .. [th-tls-client-auth] |
| The device shall authenticate itself with the cloud provider using |
| one of the methods described. |
| |
| .. [th-entropy] |
| The TLS layer shall use a modern, accepted cryptographic random-bit |
| generator seeded by an entropy source within the SoC. |
| |
| .. [th-initial-provision] |
| The device shall have a per-device secret loaded before deployment. |
| |
| .. [th-initial-secret] |
| The initial secret shall be securely maintained, and destroyed in |
| any external location as soon as the device is provisioned. |
| |
| .. [th-reprovision] |
| Reprovisioning a device shall be done securely. |
| |
| .. [th-destruction] |
| Upon decommissioning, the device secret shall be rendered |
| ineffective. |
| |
| Notes |
| ===== |
| |
| .. [1] |
| See https://www.slideshare.net/kartben/iot-developer-survey-2018. As |
| of this writing, the three major cloud IoT service providers, AWS |
| IoT, Google Cloud IoT, and Microsoft Azure IoT all provide MQTT over |
| TLS. Some feedback has suggested that some find difficulty with UDP |
| protocols and routing issues on various networks. |
| |
| .. [2] |
| As new exploits are discovered, what is considered secure can |
| change. |
| Organizations such as https://www.ssllabs.com/ provide information on |
| current ideas of how TLS must be configured to be secure. |
| |
| .. [3] |
| Note that merely erasing this flash area is unlikely to be |
| sufficient. |