一种基于eBPF对PAM认证模块监控的方法技术

技术编号:35782440 阅读:14 留言:0更新日期:2022-12-01 14:28
本发明专利技术公开了一种基于eBPF对PAM认证模块监控的方法。首先在Linux系统中搜寻可插拔认证模块动态库文件,解析之后获得其中的各个Section和ELF Header。遍历ELF Header寻找其中的认证模块、账户模块、会话模块和口令模块的函数位置。然后关联经编译之后的eBPF机器码程序和PAM各个模块的函数位置,形成对内核中用户空间事件的观察。通过内核探针触发eBPF事件,读取eBPF的上下文数据并解析,将相关数据赋值给PAM模块的变量,最后将PAM模块变量数据写入PAM安全事件信息,实现对Linux系统PAM安全的监控。本发明专利技术提出一种基于PAM模块的pam_get_authtok接口功能和eBPF的基于系统或程序事件高效安全执行特定代码的通用能力实现的对PAM认证模块监控的方法,以获得更高的速度和性能、低侵入性等效果。低侵入性等效果。低侵入性等效果。

【技术实现步骤摘要】
一种基于eBPF对PAM认证模块监控的方法


[0001]本专利技术属于网络安全认证
,具体涉及一种基于eBPF对PAM认证模块监控的方法。

技术介绍

[0002]服务器的系统安全至关重要,确认系统中使用应用程序或服务的用户确是用户本人、限制指定用户的访问服务的时间段、限制各种应用程序或服务对系统资源的使用率等都是系统安全的重要内容。Linux系统在设计时采取将不同的底层认证机制集中到一个高层次的API中的策略,从而省去开发人员自己去设计和实现各种繁杂的认证机制的麻烦。具体而言,其使用了一种安全验证方式是基于模块化设计、具有可插入功能的一种独立于应用程序之外的验证方式,因此大部分的Linux发行版在实现过程中集成了PAM (Pluggable Authentication Modules,可插拔认证模块)技术,所有应用程序统一由PAM管理执行认证工作给,使得程序主体无需再关注认证问题。PAM提供了对所有服务进行认证的中央机制,可适用于login,远程登录(telnet, rlogin, fsh, ftp, PPP),su等应用程序中。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略,应用程序开发者通过在服务程序中使用PAM API来实现对认证方法的调用,而PAM服务模块的开发者则利用PAM SPI来编写模块(主要是引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不同的认证机制加入到系统中。PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。
[0003]eBPF(extended Berkeley Packet Filter,扩展的伯克利包过滤器)是一套通用执行引擎,提供了可基于系统或程序事件高效安全执行特定代码的通用能力,通用能力的使用者不再局限于内核开发者。eBPF 可由执行字节码指令、存储对象和 Helper 帮助函数组成,字节码指令在内核执行前必须通过 BPF 验证器 Verifier 的验证,同时在启用 BPF JIT 模式的内核中,会直接将字节码指令转成内核可执行的本地指令运行。eBPF 也逐渐在观测(跟踪、性能调优等)、安全和网络等领域发挥重要的角色。Facebook、NetFlix 、CloudFlare 等知名互联网公司的内部都广泛采用基于 eBPF 技术的各种程序用于性能分析、排查问题、负载均衡、防范 DDoS 攻击,据相关信息显示在 Facebook 的机器上内置一系列 eBPF 的相关工具。eBPF 的观测类型有多种,其中uprobe类型主要用来对用户空间进行调试追踪, 属于比较轻量级的机制, 本质上是在指定的探测点(比如函数的某行, 函数的入口地址和出口地址, 或者内核的指定地址处)插入一组处理程序。内核执行到这组处理程序的时候就可以获取到当前正在执行的上下文信息, 比如当前的函数名, 函数处理的参数以及函数的返回值, 也可以获取到寄存器甚至全局数据结构的信息。
[0004]目前的现有技术主要从两个方面来实现对正在运行的PAM认证事件的监控。一种是基于动态库修改的技术,通过修改动态库内部的相关逻辑,在原有的函数入口添加自己的监控代码来获取相关的参数、变量和内存数据等并编译生成新的PAM动态库,在Linux系统启动时有限加载这个新的PAM动态库从而实现对原有PAM函数的监控并记录,这种方法对
系统的侵入较大,不仅需要等待系统重启,不能及时生效,而且一旦这个新编译生成的PAM动态库出错,就会导致系统启动失败;另一种是基于ptrace对正在运行的PAM动态库进行挂钩hook,类似于gdb对PAM模块中的认证函数设置断点,并获取当前的内存、寄存器和变量值等数据,但是这种方法的使用场景非常受限。

技术实现思路

[0005]针对以上现有技术中存在的缺点和不足,本专利技术提出一种基于PAM模块的pam_get_authtok接口功能和eBPF的基于系统或程序事件高效安全执行特定代码的通用能力实现的对PAM认证模块监控的方法,以获得更高的速度和性能、低侵入性等效果。
[0006]为实现上述目的,本专利技术采用的技术方案为一种基于eBPF对PAM认证模块监控的方法,包含以下步骤:S1:在Linux系统中搜寻可插拔认证模块动态库文件libpam.so;S2:使用ELF解析工具对搜寻到的libpam.so文件进行解析,获得ELF Header和各个ELF Section;S3:解析ELF Header中的各个Section的类型,函数名保存在sh_type为SHT_SYMTAB和SHT_DYNAMIC的section中,遍历ELF Header的sh_type找到对应的section的位置,并根据这个位置提取出SHT_SYMTAB段和SHT_DYNAMIC段;S4:遍历SHT_SYMTAB段和SHT_DYNAMIC段,找到其中的PAM认证模块、PAM账户模块、PAM会话模块和PAM口令模块的函数位置;S5:关联经由编程、底层虚拟机编译、验证和即时编译生产的eBPF机器码程序和上述PAM各个模块的函数位置,形成对内核中用户空间事件的eBPF观察器;S6:eBPF观察器接收内核探针触发的eBPF事件;S7:eBPF观察器读取eBPF的上下文数据;S8:对所述上下文数据进行解析,将相关数据赋值给PAM模块的变量;S9:将所述PAM模块的变量数据写入PAM安全事件信息,实现对Linux系统PAM安全的监控。
[0007]鉴于Linux系统的所有动态库文件都存在/lib目录、/usr/lib目录和/etc/ld.so.conf指定的其他目录中,因此步骤1中在搜寻可插拔认证模块动态库文件时,优先搜寻的目录包括/lib目录、/usr/lib目录和/etc/ld.so.conf。
[0008]步骤5中,所述eBPF机器码程序的生成包含以下步骤:S31:编写eBPF程序代码;S32:经过底层虚拟机编译,将前述eBPF程序代码编译成字节码程序;S33:经过验证器和JIT即时编译器,对所述字节码程序进行编译,生成eBPF机器码程序。
[0009]进一步,步骤6中所述内核探针触发的eBPF事件包括login、passwd、ssh、su、sudo。
[0010]与现有技术相比,本专利技术具有以下的有益技术效果:1,具有更高的速度和性能。因为eBPF可以看做是一个最小“虚拟”机,带有eBPF解释器和JIT编译器,监控PAM口令的功能编译字节码后,将调用eBPF加载并执行,而不需要反复地调用字节码的新解释,因而在速度和性能上有了较大的提升。
[0011]2,更安全的低侵入性。因为eBPF程序是沙箱化的,该技术只能在安全的环境内有限地执行指定的监控PAM的口令事件,因而内核源代码仍然受到保护并且没有改变,验证步骤能确保资源不会被运行无限循环的程序堵塞。
[0012]3,更便捷的编程性。使用 eBPF 有助于增加环境的特性丰富度,而无需添加额外的层。同样,由于代码直接在内核中运行,因此可以在 eBPF 事件之间存储数据,而不需要像其他本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于eBPF对PAM认证模块监控的方法,其特征在于,包含以下步骤:S1:在Linux系统中搜寻可插拔认证模块动态库文件libpam.so;S2:使用ELF解析工具对搜寻到的libpam.so文件进行解析,获得ELF Header和各个ELF Section;S3:解析ELF Header中的各个Section的类型,函数名保存在sh_type为SHT_SYMTAB和SHT_DYNAMIC的section中,遍历ELF Header的sh_type找到对应的section的位置,并根据这个位置提取出SHT_SYMTAB段和SHT_DYNAMIC段;S4:遍历SHT_SYMTAB段和SHT_DYNAMIC段,找到其中的PAM认证模块、PAM账户模块、PAM会话模块和PAM口令模块的函数位置;S5:关联经由编程、底层虚拟机编译、验证和即时编译生产的eBPF机器码程序和上述PAM各个模块的函数位置,形成对内核中用户空间事件的eBPF观察器;S6:eBPF观察器接收内核探针触发的eBPF事件...

【专利技术属性】
技术研发人员:卜国强杨子松张嘉磊
申请(专利权)人:江苏深网科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1