关键词:
Linux内核模块
函数调用跟踪
序列模式挖掘
摘要:
随着安卓设备、嵌入式技术以及国产化信息系统等领域的不断发展,基于Linux内核的操作系统市场占有率逐渐提升,因此国内外对Linux操作系统的应用或内核的安全性分析也得到了广泛的研究。目前对于Linux程序的分析研究多为程序的静态或动态分析,无法广泛的捕获其在内核层发生的行为,也不能有效地分析其行为特征或影响。Linux内核模块(Linux Kernel Module,LKM)是直接作用于内核的,应用程序可以通过LKM对内核产生间接影响内核的行为,LKM本身的行为也会对内核资源产生访问和修改的操作。因此,研究LKM在内核中的行为对于Linux内核的安全性有重要意义。本文通过对国内外现有LKM安全性分析等技术的研究及总结,针对LKM行为捕获不全、分析方法适应性不强的问题,首先提出了一种将LKM静态分析和动态跟踪相结合的方法实现LKM函数调用的获取。该方法将静态分析得到的LKM的自定义函数和依赖函数作为动态跟踪的输入,并采用前缀树的数据结构加虚拟孩子节点实现函数调用序列的存储,扩大了LKM函数调用的跟踪范围,兼顾了序列的广度和深度。为了从LKM的函数调用序列中获取有用的信息,以及适应内核函数调用序列的特点,本文利用函数在调用栈中的深度以及函数被调用的次数作为权重度量加入算法,解决了非加权算法在函数调用分析方面产生较多冗余项的问题。并且在此基础上,提出了基于哈希表映射位矩阵作为搜索空间的两阶段加权频繁模式挖掘算法TSWP-Miner(Two Stage Weighted Pattern-Miner),可以有效对LKM的函数调用序列进行加权频繁模式挖掘。通过对实验环境中的已载入模块进行函数调用分析,并分别与单纯静态分析和动态跟踪进行实验对比发现,本文所提出的静态动态结合的函数跟踪方法所获取的LKM函数调用的范围更广,可以有效发现LKM的潜在函数调用,函数节点覆盖度更高;基于相同的数据集,对本文所提出的加权频繁模式挖掘算法与现有算法进行了实验对比,结果表明,本文算法在时间效率和空间效率上效果更好,并且在序列数据库越大、支持度阈值越小时结果越明显。最后利用Metasploit渗透工具对靶机系统进行攻击,通过所提出的方法对产生的LKM内核函数调用序列进行了跟踪,并利用本文所提算法进行了分析,证明了其有效性。