内容简介:可插拔认证模块PAM-Pluggable Authentication Modules是一套共享库,用来对应用程序或服务的使用进行认证授权以及提供其他安全服务。起初它是由美国Sun公司为Solaris操作系统开发的,后来,很多操作系统都实现了对它的支持,Red hat 5.0后的发行版在默认基础安装包中都包括了PAM。PAM的优点是它的实用性和灵活性,对于Linux服务器上的应用程序或服务,可以根据需求实施各种安全策略,甚至可以自己编写认证模块进行调用。
可插拔认证模块PAM-Pluggable Authentication Modules是一套共享库,用来对应用程序或服务的使用进行认证授权以及提供其他安全服务。起初它是由美国Sun公司为Solaris操作系统开发的,后来,很多操作系统都实现了对它的支持,Red hat 5.0后的发行版在默认基础安装包中都包括了PAM。
PAM的优点是它的实用性和灵活性,对于 Linux 服务器上的应用程序或服务,可以根据需求实施各种安全策略,甚至可以自己编写认证模块进行调用。
本期安仔课堂,ISEC实验室的张老师为大家详解PAM。
一、PAM的认证机制
图1
当User访问一个Service或者Program,应用程序需要进行认证服务,会根据自身定义认证的PAM配置文件来调用PAM相关模块进行验证,最后将验证结果返回给应用程序,应用程序再产生相应的动作。
二、PAM的配置
PAM主要的文件为 /usr/lib/security或 /usr/lib64/security目录下的pam_*.so模块文件,以及/etc/pam.d目录下的特定应用程序的PAM配置文件。
图2
图3
以passwd为例,我们看一下当执行passwd时,PAM进行了哪些处理。查看passwd的PAM配置文件:
图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配置:
图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 模块名进行查询:
图6
三、PAM后门
通过在pam_unix下的pam_unix_auth.c源码中添加判断条件,使得_unix_verify_password返回值为PAM_SUCCESS。这样就可以在用系统存在的任意用户名与设置的后门密码进行登录。
首先查看服务器PAM的版本信息:
图7
安装之前需要先安装flex flex-deve,否则在64位系统上编译PAM的时候会遇到yywrap()函数未定义错误。
图8
下载指定版本的PAM进行修改然后编译成so文件,再复制到系统pam模块目录下替换原文件,这样就造好后门了。
关于PAM后门的排查:
如果添加的是自定义的PAM模块,那么只要查询模块所属的包就可以发现PAM后门:
图9
对于通过修改原PAM模块,可以通过计算MD5值与原来进行diff
图10
图11
四、PAM实现双因子认证
买了台ECS/VPS,设置密码太复杂了不方便记住也不方便输入,用证书登录得y用证书也不方便。何不设置个弱口令外加个动态验证码?
双因子可以使用Google动态令牌,也可以使用Duo Unix,Duo Unix支持App动态口令、短信口令以及电话。
首先需要到DUO官网注册账号,新建一个UNIX Application保护应用,获得Integration key、Secret key、API hostname。
图12
然后安装pam_duo
图13
安装后修改配置文件/etc/duo/pam_duo.conf
图14
然后在配置文件中添加该模块,SSH需要在配置文件开启USE PAM以及USE DNS
图15
接着登录服务器,这时会出现一个url让你进行注册
图16
访问url绑定注册完成后再次登录时就可以选择动态验证码了
图17
五、PAM_DUO源码浅析
DUO_UNIX项目地址: https://github.com/duosecurity/duo_unix
PAM_DUO认证中主要就是pam_sm_authenticate函数的处理,处理时首先会读取DUO的配置文件,之后检测是否配置了其他config文件,有则更新conf的值。此外,也将检测是否配置了debug参数。
图19
图20
然后调用duo_parse_config检查配置文件的读写权限,当返回值为-2时抛出错误“config文件应仅root可读”,当返回值为-1时抛出文件不可打开错误:
图21
图22
然后检查是否开启fips_mode:
图23
调用pam_get_user获取认证用户信息,检查用户密码信息:
图24
对于SSH服务,关闭增量状态信息提示:
图25
调用duo_check_groups检查认证用户是否是否在DUO认证的配置组中:
图26
检查获取用户/etc/passwd的GECOS信息并进行转换:
图27
调用duo_local_ip解析本机ip地址:
图28
这边开始进行DUO认证过程。使用pam_duo.conf配置的ikey、skey、apihost调用DUO API接口,检测API接口连接,当处理错误返回DUO服务错误:
图29
接着调用duo_login进行登录,在duo_login函数中会POST一个BOSN格式的认证信息到服务器,当返回错误为NULL则认证成功。
图30
以上所述就是小编给大家介绍的《Linux运维安全之PAM安全策略实施》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithms
Alfred V. Aho、Jeffrey D. Ullman、John E. Hopcroft / Addison Wesley / 1983-1-11 / USD 74.20
The authors' treatment of data structures in Data Structures and Algorithms is unified by an informal notion of "abstract data types," allowing readers to compare different implementations of the same......一起来看看 《Data Structures and Algorithms》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
XML、JSON 在线转换
在线XML、JSON转换工具