Linux运维安全之PAM安全策略实施

栏目: 服务器 · 发布时间: 5年前

内容简介:可插拔认证模块PAM-Pluggable Authentication Modules是一套共享库,用来对应用程序或服务的使用进行认证授权以及提供其他安全服务。起初它是由美国Sun公司为Solaris操作系统开发的,后来,很多操作系统都实现了对它的支持,Red hat 5.0后的发行版在默认基础安装包中都包括了PAM。PAM的优点是它的实用性和灵活性,对于Linux服务器上的应用程序或服务,可以根据需求实施各种安全策略,甚至可以自己编写认证模块进行调用。

Linux运维安全之PAM安全策略实施

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

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

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

一、PAM的认证机制

Linux运维安全之PAM安全策略实施

图1

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

二、PAM的配置

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

Linux运维安全之PAM安全策略实施

图2

Linux运维安全之PAM安全策略实施

图3

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

Linux运维安全之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配置:

Linux运维安全之PAM安全策略实施

图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 模块名进行查询:

Linux运维安全之PAM安全策略实施

图6

三、PAM后门

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

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

Linux运维安全之PAM安全策略实施

图7

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

Linux运维安全之PAM安全策略实施

图8

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

关于PAM后门的排查:

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

Linux运维安全之PAM安全策略实施 图9

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

Linux运维安全之PAM安全策略实施

图10

Linux运维安全之PAM安全策略实施

图11

四、PAM实现双因子认证

买了台ECS/VPS,设置密码太复杂了不方便记住也不方便输入,用证书登录得y用证书也不方便。何不设置个弱口令外加个动态验证码?

双因子可以使用Google动态令牌,也可以使用Duo Unix,Duo Unix支持App动态口令、短信口令以及电话。

首先需要到DUO官网注册账号,新建一个UNIX Application保护应用,获得Integration key、Secret key、API hostname。

Linux运维安全之PAM安全策略实施

图12

然后安装pam_duo

Linux运维安全之PAM安全策略实施

图13

安装后修改配置文件/etc/duo/pam_duo.conf

Linux运维安全之PAM安全策略实施

图14

然后在配置文件中添加该模块,SSH需要在配置文件开启USE PAM以及USE DNS

Linux运维安全之PAM安全策略实施

图15

接着登录服务器,这时会出现一个url让你进行注册

Linux运维安全之PAM安全策略实施

图16

访问url绑定注册完成后再次登录时就可以选择动态验证码了

Linux运维安全之PAM安全策略实施

图17

五、PAM_DUO源码浅析

DUO_UNIX项目地址: https://github.com/duosecurity/duo_unix

PAM_DUO认证中主要就是pam_sm_authenticate函数的处理,处理时首先会读取DUO的配置文件,之后检测是否配置了其他config文件,有则更新conf的值。此外,也将检测是否配置了debug参数。

Linux运维安全之PAM安全策略实施

图19

Linux运维安全之PAM安全策略实施

图20

然后调用duo_parse_config检查配置文件的读写权限,当返回值为-2时抛出错误“config文件应仅root可读”,当返回值为-1时抛出文件不可打开错误:

Linux运维安全之PAM安全策略实施

图21

Linux运维安全之PAM安全策略实施

图22

然后检查是否开启fips_mode:

Linux运维安全之PAM安全策略实施

图23

调用pam_get_user获取认证用户信息,检查用户密码信息:

Linux运维安全之PAM安全策略实施

图24

对于SSH服务,关闭增量状态信息提示:

Linux运维安全之PAM安全策略实施

图25

调用duo_check_groups检查认证用户是否是否在DUO认证的配置组中:

Linux运维安全之PAM安全策略实施

图26

检查获取用户/etc/passwd的GECOS信息并进行转换:

Linux运维安全之PAM安全策略实施

图27

调用duo_local_ip解析本机ip地址:

Linux运维安全之PAM安全策略实施

图28

这边开始进行DUO认证过程。使用pam_duo.conf配置的ikey、skey、apihost调用DUO API接口,检测API接口连接,当处理错误返回DUO服务错误:

Linux运维安全之PAM安全策略实施

图29

接着调用duo_login进行登录,在duo_login函数中会POST一个BOSN格式的认证信息到服务器,当返回错误为NULL则认证成功。

Linux运维安全之PAM安全策略实施

图30


以上所述就是小编给大家介绍的《Linux运维安全之PAM安全策略实施》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Haskell

Haskell

Simon Thompson / Addison-Wesley / 1999-3-16 / GBP 40.99

The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on th......一起来看看 《Haskell》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具