This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C129ENCPDT:二进制安全和栈日志

Guru**** 2926370 points

Other Parts Discussed in Thread: TM4C129ENCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1170384/tm4c129encpdt-binary-security-and-stack-canaries

器件型号:TM4C129ENCPDT

大家好、

我们 在器件中将上述微控制器 TM4C129ENCPDT 与 TI RTOS 结合使用,我们进行了安全和漏洞 检查的审核,他们提到了有关二进制文件安全性和堆栈日志的几点。

安全审核报告:

标题:

缺少二进制保护- 在器件上执行的固件缺少二进制保护。  

"重现步骤:
1.识别固件反汇编中的任何功能。
在启用了堆栈保护的二进制文件中、在每个函数的开头、随机变量立即推入堆栈、并在函数返回之前与基线进行比较。 请注意、固件中不存在行为。
*这表示没有层叠 Canaries。
3.识别任何子例程调用或长分支指令。
请注意、跳转的目标是二进制地址空间内的字面量。
*这表示没有 PIE。"

上面提到的步骤由安全审核人员提供,如何将上述主题实施到我的代码中,如果有任何链接,请提供。

提前感谢

Chiranth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Chiranth、

     我不是一名安全专家、但经过一些研究、堆栈库似乎更是一项可在编译器上启用的功能、而不是从应用程序或 TI-RTOS 中启用的功能。 我将把您的帖子提交给我们的编译器专家以征求意见。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="539690" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1170384/tm4c129encpdt-binary-security-and-stack-canaries "]我们 在器件中将上述微控制器 TM4C129ENCPDT 与 TI RTOS 搭配使用[/quot]

    您的项目是否使用 GNU (GCC)或 TI ARM 编译器?

    找到 了具有 GCC 的栈日志:在运行时检查栈溢出 、该操作描述了如何使用 GCC 启用栈日志。

    将 tcpEcho_EK_TM4C1294XL_GNU 示例从 tirtos_tivac_2_16_01_14示例导入到 CCS 12.1中、并使用 CCS 菜单 Help -> Install GCC ARM Compiler Tools 选择安装的"GNU v9.2.1 (Linaro)"编译器。

    在 Build -> GNU Compiler -> Miscellaneous 下的 CCS Project Properties 中、 将-fstack-proter-all 添加到了 Miscellaneous C source Specific flags 中:

    添加 了-fstack-proter-all 选项后、链接  器会报告错误、指出对_stack_chk_fail 和__stack_chk_guard 的引用未定义、这意味着添加该选项会启用堆栈保护器。

    将以下内容添加到工程中的源文件中、然后启用程序链接:

    unsigned long __stack_chk_guard = 0xDEADBEEF;
    
    void __stack_chk_fail(void) { /* will be called if guard/canary gets corrupted */
      /* Handle error, print error message, stop the target, ... */
      __asm volatile ("cpsie i" : : : "memory"); /* Disable interrupts */
      __asm volatile("bkpt #0"); /* break target */
    }
    

    注:

    1.我尚未测试  GCC 编译器生成的堆栈保护器(也称为堆栈日志)是否正常工作

    2.通过查看 TI ARM 编译器文档、我找不到提及 支持 Stack Canaries 的地方。 CCS/TMS570LC4357:STACK_OVERFLOAD_CHECK 包含:

    [引用]旧版本的 ARM 编译器具有检测堆栈溢出的功能。  对 IT 的支持已在几年前结束。[/QUERP]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    切斯特,您好!

    非常感谢您的回复, 即为 TI RTOS 中的 TI 编译器编写的当前代码,您能不能建议我如何使用相同的代码和文件切换到 GCC 编译器, 建议我如何将编译器从 TI 更改为 GCC GNU Lianaro 编译器。

    提前感谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Charles

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Chiranth 和 Chester、

    无需使用 GCC 编译器、因为全新的 TI Arm Clang 编译器(基于 LLVM、可有效取代旧版"TI ARM (armcl)"编译器)支持堆栈仓/堆栈绑定检测。  这里有相关文档:

    https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/using_compiler/compiler_options/instrumentation_options.html

    基于 LLVM 的 TI Arm Clang 编译器还支持堆栈日志/堆栈散列。 旧版'armcl'专有编译器不支持此功能。

    我们提供了将代码从旧版编译器迁移到 TI Arm Clang 的迁移指南:

    https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/migration_guide/index.html

    -Alan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alan:

    我尝试使用 TI ARM Clang 编译器、因为我遇到错误、说 TI ARM clang 编译器不支持 TI RTOS

    线性调频脉冲

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TI-RTOS 经过测试和记录、可与特定版本的编译器配合使用。  遗憾的是、TI Arm Clang 编译器不是这些编译器之一。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的最后一篇文章有点错误。  支持 TI Arm Clang、TI-RTOS 和 TI 器件的某些组合。  例如、请参阅 此常见问题解答。  请注意、它如何不包含本论坛主题中讨论的 TM4C 器件。

    谢谢、此致、

    乔治