NEWS

新闻

了解openKylin最新资讯,关注社区和产品动态。

NEWS

Learn about the latest news.

【“麒麟杯”获奖作品风采】二等奖:ELF文件签名验证工具

2023-11-30 10:27:20

由中国软件行业协会、开放原子开源基金会、中国计算机学会开源发展委员会、中国开源软件推进联盟指导,openKylin开源社区、麒麟软件有限公司、国防科技大学、信创海河实验室联合主办的第十二届“麒麟杯”全国开源应用软件开发大赛已于10月20日完美落幕,自2023年4月开赛以来,吸引了来自全国60+高校的345组队伍报名参赛,经过层层选拔和严格评审,最终评选出大赛的一、二、三等奖及优胜奖,后续主办方将陆续展示开发者们的获奖作品风采,本篇带来二等奖《ELF文件签名验证工具》作品展示!

01
作品介绍
本软件由来自东南大学九龙湖独墅湖队的杨彬,杨翰林和赵伦祺同学合作开发,利用Linux内核中为不同格式可执行文件提供支持的Binfmt机制和用于生成消息摘要和非对称加密的国产商密算法(SM3+SM2),构建了一套ELF文件签名与验证方案。该方案包含用户态签名程序内核态验证模块两部分:
  • 用户态签名程序可由系统开发者或系统管理员执行,对用户需要执行的ELF文件进行签名;

  • 内核态验证模块随内核一同分发,基于开发者或管理员内置于内核中的密钥验证用户执行的ELF文件,从内核层面防止恶意程序执行。

签名程序包含了用户友好的GUI和基于命令行的工具。系统管理员可以通过签名程序对ELF文件进行批量签名、验签,提升工作效率。验签模块还基于openKylin系统通知总线对用户提供了验证失败通知,直观地告知用户软件验证失败及具体失败原因。对于验证流程,本软件还实现了对Linux上运行的ELF文件及其引用的动态库的完整签名验证,大大增强了安全性。

作品地址:https://gitee.com/openkylin/kylin-elf-verification

相关软件界面截图如下:

1. 批量签名功能

openKylin(开放麒麟)

2. 批量验签功能

openKylin(开放麒麟)

3. 未签名/签名错误软件执行前拦截

openKylin(开放麒麟)


02
作品亮点
01

签名验签支持使用国产商密算法(SM3+SM2),对比SHA+RSA,使用国密算法生成的签名长度更短,且国产算法自主可控,安全性更有保障。

02

采用可移植的代码设计,同时支持在RISC-V和X86两种架构上的openKylin系统上运行,且实测在StarFive开发板上可以顺利运行,为国产硬件/操作系统提供了重要的软件生态,实现了国产化全链路的闭环。

03

内核态用户态通过Netlink实现高效地交互,降低开启安全功能带来的系统额外开销,同时结合openKylin系统消息总线,验证结果可以更直观地通知用户。

04

验签模块可以根据用户需求,设置不同的安全等级,在验签效率和安全性间权衡。在开启最高安全等级时,验签模块除了验证可执行文件本身外,还会自动检测其依赖的动态库文件,递归验证ELF文件依赖的动态库,做到签名验证的无死角

03
技术原理

项目技术架构图如下所示:

openKylin(开放麒麟)



(1)签名工具

  • 解析ELF文件结构,将涉及代码执行的部分进行摘要计算和非对称加密生成签名,写入到ELF文件中。
  • 使用PyQt实现跨平台GUI界面。
  • 通过Netlink监听内核态验签结果,结合openKylin系统通知总线通知用户。
(2)验签模块
  • 通过Binfmt机制拦截ELF文件执行,执行前插入验签逻辑。
  • 读取ELF文件的待签名数据段,重新计算签名与文件本身携带的签名进行对比。
  • 对于验证通过的程序进行放行,验签失败的程序拒绝执行,并通过Netlink通知用户态验签结果。
  • 验签过程同时会验证ELF可执行文件所依赖的动态链接库文件的签名,做到全方位保护。
04
获奖感受
感谢麒麟杯主办方给我们提供了比赛平台和全方位的指导,通过这次比赛让我们对国产操作系统和Linux内核有了更深入的认知。赛前答疑,决赛辅导和开发板的借用流程都凸显出了主办方的用心,参赛体验很棒。
大赛期间的困难挑战在于对未知领域的探索。对于之前没有嵌入式开发经验的同学,上手移植RISC-V平台还是有点困难。对作品的功能亮点也在不断地学习,设想,实践,探索中一步步的完善。虽然中间对一些功能点的攻关几经坎坷,甚至产生了放弃的念头,但好在有导师学长的支持和鼓励,最终实现了功能亮点,把作品打磨地更加完善。感谢指导老师沈典的支持和指导,与一起攻坚的队友们锲而不舍的努力,得以把作品以最好的状态呈现给大家。