• cwe_checker初识别


    一、cwe_checker是什么?

    1.1、介绍

    cwe_checker是一套用于检测常见错误类的检查,例如空指针引用和缓冲区溢出。这些错误类正式称为通用弱点枚举(CWE)

    这些检查基于各种分析技术,从简单的启发式到基于抽象解释的数据流分析。 它的主要目标是帮助分析师快速找到潜在的易受攻击的代码路径

    它的主要关注点是在Linux和Unix操作系统上常见的ELF二进制文件。cwe_checker 使用 Ghidra 将二进制文件反汇编为一种通用的中间表示,并在此 IR 上实现自己的分析。因此,分析可以在大多数CPU架构(Ghidra 可以反汇编)上运行,这使得 cwe_checker 成为固件分析的宝贵工具。

    1.2、特点

    • 设置非常简单,只需构建 Docker 容器!

    • 它分析了几种 CPU 架构的 ELF 二进制文件,包括 x86、ARM、MIPS 和 PPC

    • 由于其基于插件的架构,它是可扩展的

    • 它是可配置的,例如 将分析应用于新 API查看在 Ghidra 中注释的结果

    • cwe_checker 可以作为插件集成到 FACT 中

    1.3、已分析的CWE 警告列表

    cwe_checker 将二进制文件作为输入,基于二进制文件的静态分析运行多项检查,然后输出在分析期间发现的 CWE 警告列表。

    到目前为止,实施了以下分析:

    • CWE-78: OS Command Injection (currently disabled on standard runs)   操作系统命令注入

    • CWE-119 and its variants CWE-125 and CWE-787: Buffer Overflow   缓冲区溢出

    • CWE-134: Use of Externally-Controlled Format String   使用外部控制的格式字符串

    • CWE-190: Integer Overflow or Wraparound   整数溢出或环绕

    • CWE-215: Information Exposure Through Debug Information  通过Debug信息导致的信息暴露

    • CWE-243: Creation of chroot Jail Without Changing Working Directory  未改变工作目录时创建chroot Jail

    • CWE-332: Insufficient Entropy in PRNG     PRNG中信息熵不充分

    • CWE-367: Time-of-check Time-of-use (TOCTOU) Race Condition 检查时间与使用时间(TOCTOU)的竞争条件

    • CWE-416: Use After Free and its variant CWE-415: Double Free  释放后使用

    • CWE-426: Untrusted Search Path  不受信任的搜索路径

    • CWE-467: Use of sizeof() on a Pointer Type  在指针类型上使用sizeof()

    • CWE-476: NULL Pointer Dereference  空指针引用

    • CWE-560: Use of umask() with chmod-style Argument  在chmod类型参数中使用umask()

    • CWE-676: Use of Potentially Dangerous Function  潜在危险函数的使用

    • CWE-782: Exposed IOCTL with Insufficient Access Control  无充分访问控制条件下暴露IOCTL

    二、基本使用

    1、拉取镜像

    docker pull fkiecad/cwe_checker:stable

    2、使用下面这个命令即可用这个镜像里的工具去测试二进制

    docker run -v /PATH/TO/BINARY:/input  fkiecad/cwe_checker:stable  /input --json --quiet

    参数:

    • PATH/TO/BINARY:二进制的路径

    • /input:二进制的名字

    3、运行成功,出现如下页面

    1. root@node1:~# docker run -it -v /data/.../squashfs-root/usr/sbin/IGD:/input fkiecad/cwe_checker:stable /input --json --quiet
    2. [
    3. {
    4. "name": "CWE467",
    5. "version": "0.2",
    6. "addresses": [
    7. "0000aa7c"
    8. ],
    9. "tids": [
    10. "instr_0000aa7c_1"
    11. ],
    12. "symbols": [],
    13. "other": [],
    14. "description": "(Use of sizeof on a Pointer Type) sizeof on pointer at 0000aa7c (strncpy)."
    15. },
    16. {
    17. "name": "CWE676",
    18. "version": "0.1",
    19. "addresses": [
    20. "00009b20"
    21. ],
    22. "tids": [
    23. "instr_00009b20_1"
    24. ],
    25. "symbols": [
    26. "FUN_00009adc"
    27. ],
    28. "other": [
    29. [
    30. "dangerous_function",
    31. "strlen"
    32. ]
    33. ],
    34. "description": "(Use of Potentially Dangerous Function) FUN_00009adc (00009b20) -> strlen"
    35. },
    36. {
    37. "name": "CWE676",
    38. "version": "0.1",
    39. "addresses": [
    40. "00009b3c"
    41. ],
    42. "tids": [
    43. "instr_00009b3c_1"
    44. ],
    45. "symbols": [
    46. "FUN_00009adc"
    47. ],
    48. "other": [
    49. [
    50. "dangerous_function",
    51. "strncpy"
    52. ]
    53. ],
    54. "description": "(Use of Potentially Dangerous Function) FUN_00009adc (00009b3c) -> strncpy"
    55. }
    56. ]

  • 相关阅读:
    进程信号的保存和处理
    【讲解下Gitea】
    江波龙入选国家级专精特新“小巨人”企业
    如何返回一个数字的所有质因数?
    2、Redis中简单动态字符串的简介,也就是Redis中的键和值的字符串底层表达
    Dockerfile(容器与镜像 自定义nginx tomcat 镜像优化)
    Patroni的pause和resume功能
    echarts绘制地图
    Spark SQL 实现分层抽样和分层随机抽样
    基于PaddleOCR开发easy click文字识别插件
  • 原文地址:https://blog.csdn.net/leiwuhen92/article/details/125634453