Linux安全知多少?PAM这样实施安全策略!
可插拔认证模块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 模块名进行查询.
三、PAM后门
通过在pam_unix下的pam_unix_auth.c源码中添加判断条件,使得_unix_verify_password返回值为PAM_SUCCESS。这样就可以在用系统存在的任意用户名与设置的后门密码进行登录。
首先查看服务器PAM的版本信息:
图6
安装之前需要先安装flex flex-deve,否则在64位系统上编译PAM的时候会遇到yywrap()函数未定义错误。
图7
下载指定版本的PAM进行修改然后编译成so文件,再复制到系统pam模块目录下替换原文件,这样就造好后门了。
关于PAM后门的排查:
如果添加的是自定义的PAM模块,那么只要查询模块所属的包就可以发现PAM后门:
图8
对于通过修改原PAM模块,可以通过计算MD5值与原来进行diff
图9
图10
四、PAM实现双因子认证
买了台ECS/VPS,设置密码太复杂了不方便记住也不方便输入,用证书登录得y用证书也不方便。何不设置个弱口令外加个动态验证码?
双因子可以使用Google动态令牌,也可以使用Duo Unix,Duo Unix支持App动态口令、短信口令以及电话。
首先需要到DUO官网注册账号,新建一个UNIX Application保护应用,获得
Integration key、Secret key、API hostname。
图11
然后安装pam_duo
图12
安装后修改配置文件/etc/duo/pam_duo.conf
图13
然后在配置文件中添加该模块,SSH需要在配置文件开启USE PAM以及USE DNS
图14
接着登录服务器,这时会出现一个url让你进行注册
图15
访问url绑定注册完成后再次登录时就可以选择动态验证码了
图16
五、PAM_DUO源码浅析
进入DUO_UNIX项目地址,PAM_DUO认证中主要就是pam_sm_authenticate函数的处理,处理时首先会读取DUO的配置文件,之后检测是否配置了其他config文件,有则更新conf的值。此外,也将检测是否配置了debug参数。
图17
图18
然后调用duo_parse_config检查配置文件的读写权限,当返回值为-2时抛出错误“config文件应仅root可读”,当返回值为-1时抛出文件不可打开错误:
图19
图20
然后检查是否开启fips_mode:
图21
调用pam_get_user获取认证用户信息,检查用户密码信息:
图22
对于SSH服务,关闭增量状态信息提示:
图23
调用duo_check_groups检查认证用户是否是否在DUO认证的配置组中:
图24
检查获取用户/etc/passwd的GECOS信息并进行转换:
图25
调用duo_local_ip解析本机ip地址:
图26
这边开始进行DUO认证过程。使用pam_duo.conf配置的ikey、skey、apihost调用DUO API接口,检测API接口连接,当处理错误返回DUO服务错误:
图27
接着调用duo_login进行登录,在duo_login函数中会POST一个BOSN格式的认证信息到服务器,当返回错误为NULL则认证成功。
图28
安胜作为国内领先的网络安全类产品及服务提供商,秉承“创新为安,服务致胜”的经营理念,专注于网络安全类产品的生产与服务;以“研发+服务+销售”的经营模式,“装备+平台+服务”的产品体系,在技术研究、研发创新、产品化等方面已形成一套完整的流程化体系,为广大用户提供量体裁衣的综合解决方案!
我们拥有独立的技术及产品的预研基地—ISEC实验室,专注于网络安全前沿技术研究,提供网络安全培训、应急响应、安全检测等服务。此外,实验室打造独家资讯交流分享平台—“ISEC安全e站”,提供原创技术文章、网络安全信息资讯、实时热点独家解析等。
2018
承担全国两会网络安保工作;
承担青岛上合峰会网络安保工作。
2017
承担全国两会网络安保工作;
承担金砖“厦门会晤”网络安保工作;
承担北京“一带一路”国际合作高峰论坛网络安保工作;
承担中国共产党第十九次全国代表大会网络安保工作;
承担第四届世界互联网大会网络安保工作。
2016
承担全国两会网络安保工作;
为贵阳大数据与网络安全攻防演练提供技术支持;
承担G20峰会网络安保工作;
承担第三届世界互联网大会网络安保工作。
2015
承担第二届世界互联网大会网络安保工作。
不忘初心、砥砺前行;未来,我们将继续坚守、不懈追求,为国家网络安全事业保驾护航!
图片新闻
技术文库
最新活动更多
-
即日-12.26立即报名>>> 【在线会议】村田用于AR/VR设计开发解决方案
-
1月8日火热报名中>> Allegro助力汽车电气化和底盘解决方案优化在线研讨会
-
1月9日立即预约>>> 【直播】ADI电能计量方案:新一代直流表、EV充电器和S级电能表
-
即日-1.14火热报名中>> OFweek2025中国智造CIO在线峰会
-
即日-1.20限时下载>>> 爱德克(IDEC)设备及工业现场安全解决方案
-
即日-1.24立即参与>>> 【限时免费】安森美:Treo 平台带来出色的精密模拟
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论