|  | .. _hardening: | 
|  |  | 
|  | Hardening Tool | 
|  | ############## | 
|  |  | 
|  | Before launching a product, it's crucial to ensure that your software is as secure as possible. This | 
|  | process, known as "hardening", involves strengthening the security of a system to protect it from | 
|  | potential threats and vulnerabilities. | 
|  |  | 
|  | At a high-level, hardening a Zephyr application can be seen as a two-fold process: | 
|  |  | 
|  | #. Disabling features and compilation flags that might lead to security vulnerabilities (ex. making | 
|  | sure that no "experimental" features are being used, disabling features typically used for | 
|  | debugging purposes such as assertions, shell, etc.). | 
|  | #. Enabling optional features that can lead to improve security (ex. stack sentinel, hardware stack | 
|  | protection, etc.). Some of these features might be hardware-dependent. | 
|  |  | 
|  | To simplify this process, Zephyr offers a **hardening tool** designed to analyze an application's | 
|  | configuration against a set of hardening preferences defined by the **Security Working Group**. The | 
|  | tool looks at the KConfig options in the build target and provides tailored suggestions and | 
|  | recommendations to adjust security-related options. | 
|  |  | 
|  | Usage | 
|  | ***** | 
|  |  | 
|  | .. zephyr-app-commands:: | 
|  | :tool: all | 
|  | :zephyr-app: samples/hello_world | 
|  | :board: reel_board | 
|  | :goals: hardenconfig | 
|  |  | 
|  | The output should be similar to the table below. For each configuration option set to a value that | 
|  | could lead to a security vulnerability, the table will propose a recommended value that should be | 
|  | used instead. | 
|  |  | 
|  | .. code-block:: console | 
|  |  | 
|  | +---------------------------------------+-----------+---------------+----------------+ | 
|  | | Name                                  | Current   | Recommended   | Check result   | | 
|  | +=======================================+===========+===============+================+ | 
|  | | CONFIG_BUILD_OUTPUT_STRIPPED          | n         | y             | FAIL           | | 
|  | +---------------------------------------+-----------+---------------+----------------+ | 
|  | | CONFIG_FAULT_DUMP                     | 2         | 0             | FAIL           | | 
|  | +---------------------------------------+-----------+---------------+----------------+ | 
|  | | CONFIG_MPU_STACK_GUARD                | n         | y             | FAIL           | | 
|  | +---------------------------------------+-----------+---------------+----------------+ | 
|  | | CONFIG_OVERRIDE_FRAME_POINTER_DEFAULT | n         | y             | FAIL           | | 
|  | +---------------------------------------+-----------+---------------+----------------+ | 
|  | | CONFIG_STACK_SENTINEL                 | n         | y             | FAIL           | | 
|  | +---------------------------------------+-----------+---------------+----------------+ | 
|  | | CONFIG_EXCEPTION_DEBUG                | y         | n             | FAIL           | | 
|  | +---------------------------------------+-----------+---------------+----------------+ | 
|  | | CONFIG_PRINTK                         | y         | n             | FAIL           | | 
|  | +---------------------------------------+-----------+---------------+----------------+ |