关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

Linux安全知多少?PAM这样实施安全策略(一)

2020.10.05

可插拔认证模块PAM-Pluggable Authentication Modules是一套共享库,用来对应用程序或服务的使用进行认证授权以及提供其他安全服务。起初它是由美国Sun公司为Solaris操作系统开发的,后来,很多操作系统都实现了对它的支持,Red hat 5.0后的发行版在默认基础安装包中都包括了PAM。

PAM的优点是它的实用性和灵活性,对于Linux服务器上的应用程序或服务,可以根据需求实施各种安全策略,甚至可以自己编写认证模块进行调用。

本期安仔课堂,ISEC实验室的张老师为大家详解PAM。

一、PAM的认证机制

image.png

图1

当User访问一个Service或者Program,应用程序需要进行认证服务,会根据自身定义认证的PAM配置文件来调用PAM相关模块进行验证,最后将验证结果返回给应用程序,应用程序再产生相应的动作。

二、PAM的配置

PAM主要的文件为 /usr/lib/security或 /usr/lib64/security目录下的pam_*.so模块文件,以及/etc/pam.d目录下的特定应用程序的PAM配置文件。

image.png

图2

image.png

图3

以passwd为例,我们看一下当执行passwd时,PAM进行了哪些处理。查看passwd的PAM配置文件:

image.png

图4

PAM的配置文件以如下空白分隔的字段组成:

module_type control_flag module_path module_options

module_type:为服务指定模块类型。有效模块类型是 auth、account、session 或 password,给定的模块将提供对一个或多个模块类型的支持。

control_flag:为模块指定堆栈行为。受支持的控制标志是 required、requisite、sufficient 或 optional。

module_path:指定为服务装入的模块。

module_option:指定能够发送到服务模块的空格划定的选项列表。该字段的值取决于在 module_path 字段中定义的模块支持的选项,此字段是可选的。

passwd的PAM配置应用了system-auth配置:

image.png

图5

pam_env模块将根据管理员在/etc/security/pam_env.conf中设置的内容设置环境变量,pam_faildelay模块设置了失败delay时间为2s。

pam_fprintd模块是进行指纹验证,由于控制标志为sufficient,验证失败并不影响继续验证。Pam_unix nullok参数允许空密码,try_first_pass使用先前模块的密码进习惯验证。

pam_succeed_if设置了当uid大于1000时,不记录登录信息到系统日志中。当前面模块没有验证成功,最后的pam_deny模块将直接拒绝 OTHER的默认动作。关于PAM模块的详细信息可以通过man 模块名进行查询.

三、PAM后门

通过在pam_unix下的pam_unix_auth.c源码中添加判断条件,使得_unix_verify_password返回值为PAM_SUCCESS。这样就可以在用系统存在的任意用户名与设置的后门密码进行登录。

首先查看服务器PAM的版本信息:

image.png

图6

安装之前需要先安装flex flex-deve,否则在64位系统上编译PAM的时候会遇到yywrap()函数未定义错误。

image.png

图7

下载指定版本的PAM进行修改然后编译成so文件,再复制到系统pam模块目录下替换原文件,这样就造好后门了。

关于PAM后门的排查:

如果添加的是自定义的PAM模块,那么只要查询模块所属的包就可以发现PAM后门:

Linux安全知多少?PAM这样实施安全策略!

图8

对于通过修改原PAM模块,可以通过计算MD5值与原来进行diff

image.png

图9

image.png

图10


推荐
热点排行
一周推荐
关闭