题目要求:

对于Linux下给定的ELF可执行程序、自行开发签名工具对程序的代码段(Load Segment)首先进行散列,然后对散列值进行签名,签名数据应作为单独的节(Section)附加到原ELF可执行程序的尾部。同时,应开发验证软件并加入操作系统,在运行任何ELF可执行程序前对ELF文件进行验证,若ELF可执行程序没有被签名或者签名验证失败则应停止运行本程序,若签名验证成功则可以正常运行。

签名后的ELF可执行程序可正常运行在带有签名验证的Linux操作系统上,以及不带有签名验证机制的Linux操作系统上;

签名后的ELF可执行程序中的签名数据节应可通过readelf与objdump等程序解析得到正确的值;

运行ELF可执行程序的方式应保持不变,不得通过其他程序运行ELF可执行程序的方式验证签名;

签名验证所需要的公钥、证书以及验证程序可以预先设置在操作系统中;

本题不考察选手对加密算法的实现,因此选手可以选择开源的加密软件库进行加密,但是对应强度应不低于RSA2048;

实现程序主要涉及对ELF可执行格式的理解、Linux操作系统下程序运行的机制的理解,以及对加密算法的运用。

分析:分为几个步骤。第一步要做的是环境配置,这道题目对环境的要求还是比较严苛的,限定使用C语言和UOS系统。

第二步:实现对elf文件的程序解析和散列。

第三步:加入签名程序,对散列值按照一定的规律进行记录,并将签名数据作为单独的节加入到程序末尾

第四步:加入验证程序,通过各种方法对签名进行验证,证明程序合法且未被篡改。

第五步:对判断结果进行处理,若判断结果为通过,运行,若判断结果为不通过,则停止运行

 posted on 2020-05-04 11:00  Aurinko  阅读(632)  评论(0编辑  收藏  举报