# FortRadar **Repository Path**: anolis/fortradar ## Basic Information - **Project Name**: FortRadar - **Description**: FortRadar是一款检测二进制文件对应所有源文件的编译加固选项以及链接加固选项添加情况的工具 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2025-09-29 - **Last Updated**: 2025-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FortRadar #### 介绍 现代编译器(包括gcc)提供了一些安全加固选项,用于增大程序被攻击的难度。目前业界一般都要求全部或部分开启这些安全加固选项,但是由于这些安全功能专业性较强,难以判断程序是否成功开启。 FortRadar是一款检测二进制文件对应所有源文件的编译加固选项以及其链接加固选项添加情况的工具。本工具支持检测CANARY、FORTITY、RELRO、PIE、NX五种类型加固选项的添加情况,并对该二进制文件对应的每一个.c文件是否添加加固选项给出汇总表格,以便用户查阅、分析。 #### 软件架构 软件架构说明 FortRadar主要包括monitor与analyzer两个模块。 ![monitor与analyzer模块结构](https://foruda.gitee.com/images/1759132169105107302/5f232e64_7839377.png "图片1.png") monitor的监控流程如图 ![monitor的监控流程如图](https://foruda.gitee.com/images/1759132255140921170/4ebe66b9_7839377.png "图片2.png") #### 安装教程 1.解压FortRadar.tar,并得到以下脚本与文件: FortRadar.sh harden_for_exe.sh harden_for_obj.sh monitor readelf #### 使用说明 1.启动检测 使用FortRadar.sh启动待检测工程构建命令: 例如某工程使用make构建,则启动命令为: /home/FortRadar/FortRadar.sh make 2.查看结果 使用FortRadar重新构建工程后,会在当前工程目录下新建Chk_result文件夹,并将检测结果存放到该文件夹内。下面以一个简单的构建过程为例,介绍各个检测结果文件的含义。 工程构建过程示例如图3-1所示: ![图3-1](https://foruda.gitee.com/images/1759131900961181512/03d57dca_7839377.png "ddfd8942-aed7-4fc1-a32b-de96c9b1b078.png") 图3-1 使用FortRadar重新构建上述工程后并生成Chk_result目录,过程如图3-2所示: ![图3-2](https://foruda.gitee.com/images/1759131832722648658/518ccee0_7839377.png "1a219bc0-cb37-4a08-bbb5-1ddc443b114f.png") 图3-2 Chk_result目录下存放了总体检测结果(result.csv文件)和文件级检测结果(示例工程为test目录),各结果解释如下。 3.1 总体检测结果:result.csv result.csv中仅仅包含当前构建产生的目标二进制文件(这里是test)在CANARY、FORTITY、RELRO、PIE、NX五种类型加固选项上的添加情况。用excel打开result.csv后如表5.2.1所示: 表3.1-1 | FILE | CANARY | FORTITY | RELRO | PIE | NX | |------|---------|----------|----------|-----|-----| | test | YES:ALL | FORITY_1 | YES:Full | YES | YES | 表格中各个属性的含义如下: FILE:当前构建产生的目标二进制文件名。 CANARY:该二进制文件的CANARY栈保护加固选项添加情况: ① NO:该文件没有添加任何栈保护编译加固选项,显示为NO; ② YES:ALL:参与该文件链接的所有.o文件均添加了-fstack-protector-all; ③ YES:STRONG:参与该文件链接的所有.o文件均添加了-fstack-protector-strong; ④ YES:BASE:参与该文件链接的所有.o文件均添加了-fstack-protector; ⑤ PARTIAL:参与该文件链接的.o文件中存在未添加任何栈保护选项的.o文件,即组成该文件的源码不是全部都添加了CANARY保护; ⑥ MIX:参与该文件链接的所有.o文件均添加了栈保护编译加固选项,但添加的不是同一种加固选项。 FORTITY:该二进制文件的FORTITY加固选项添加情况: ① NO:该文件没有添加任何FORTITY编译加固选项; ② FORITY_1:参与该文件链接的所有.o文件均添加了-D_FORTIFY_SOURCE=1; ③ FORITY_2:参与该文件链接的所有.o文件均添加了-D_FORTIFY_SOURCE=2; ④ PARTIAL:参与该文件链接的所有.o文件中存在未添加FORTITY编译加固选项的.o文件,即组成该文件的源码不是全部都添加了FORTITY保护; ⑤ MIX:参与该文件链接的所有.o文件均添加了FORTITY编译加固选项,但添加的不是同一种加固选项。 3.2 文件级检测结果:obj.csv 如果总体检测结果中发现二进制文件的CANARY和FORTITY检测结果为Partial,可以检查对应的obj.csv文件,该文件记录了对应二进制文件的所有.c源文件编译加固选项添加情况,可用于排查遗漏加固选项的文件。 例如上面示例中构建产生的二进制文件为test,那么Chk_result文件夹里将会新增test/obj.csv文件,记录参与链接test的所有文件的编译加固选项添加情况,这里的test/obj.csv文件如表5.2.2所示: 表3.2-1 | FILE | CANARY | FORTITY | RELRO | PIE | NX | |-----------------|---------|----------|-------|-----|----| | test1.o:test1.c | YES:ALL | FORITY_1 | - | - | - | | test2.o:test2.c | YES:ALL | FORITY_1 | - | - | - | | test3.o:test3.c | YES:ALL | FORITY_1 | - | - | - | 表中各个属性含义为: FILE:当前构建中生成的目标文件与其对应的源文件。 CANARY:该目标文件的CANARY栈保护加固选项添加情况: ① NO:该文件没有添加任何栈保护编译加固选项; ② YES:ALL:参与该文件链接的所有.o文件均添加了-fstack-protector-all; ③ YES:STRONG:参与该文件链接的所有.o文件均添加了-fstack-protector-strong; ④ YES:BASE:参与该文件链接的所有.o文件均添加了-fstack-protector; ⑤ PARTIAL:参与该文件链接的.o文件中存在未添加栈保护选项的.o文件,即组成该文件的源码不是全部都添加了CANARY保护; ⑥ MIX:参与该文件链接的所有.o文件均添加了栈保护编译加固选项,但添加的不是同一种加固选项。 FORTITY:该目标文件的FORTITY加固选项添加情况: ① NO:该文件没有添加任何FORTITY编译加固选项; ② FORITY_1:参与该文件链接的所有.o文件均添加了-D_FORTIFY_SOURCE=1; ③ FORITY_2:参与该文件链接的所有.o文件均添加了-D_FORTIFY_SOURCE=2; ④ PARTIAL:参与该文件链接的所有.o文件中存在未添加FORTITY编译加固选项的.o文件,即组成该文件的源码不是全部都添加了FORTITY保护; ⑤ MIX:参与该文件链接的所有.o文件均添加了FORTITY编译加固选项,但添加的不是同一种加固选项。 注意:由于目标文件不具备RELRO、PIE、NX,所有目标文件的这三个属性均显示为“-”。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)