Linux PAM&&PAM后门
Linux PAM&&PAM后门
0x00 PAM简介
PAM (Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。
0x01 PAM工作流程
0x02 PAM配置文件语法
module-type
control-flagmodule_path
optional
在/etc/pam.d/
下的文件中,与服务名称相对应的文件,为该服务的pam验证文件,例如服务为sshd,则在/etc/pam.d
下存在sshd这个文件,里面包含sshd验证规则。其中有个一特殊的文件为other,如果有的服务与之没有向对应的文件,则对应other。
module-type
服务类型,即 auth、account、session 或 password。
验证模块(auth)用于验证用户或设置/销毁凭证。
帐户管理模块(account)将执行与访问、帐户及凭证有效期、密码限制/规则等有关的操作。
会话管理模块(session)用于初始化和终止会话。
密码管理模块(passwd)将执行与密码更改/更新有关的操作。
control-flag
用于指明在确定服务的集成成败值过程中模块所起的作用。有效的控制标志包括 include、optional、required、requisite 和 sufficient。
required 表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同一stack 中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必要条件。
requisite 与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程序。是一个必要条件。
sufficient 表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是如果本模块返回失败的话可以 忽略。可以认为是一个充分条件。
optional表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
module-path
用于实现服务的库对象的路径,一般都只写库名,库的路径一般为/lib/security(32位),/lib64/security(64位)
module-options
传递给服务模块的选项,可选。
几个公用的参数:
debug 该模块应当用syslog( )将调试信息写入到系统日志文件中。
no_warn 表明该模块不应把警告信息发送给应用程序。
use_first_pass 表明该模块不能提示用户输入密码,而应使用前一个模块从用户那里得到的密码。
try_first_pass 表明该模块首先应当使用前一个模块从用户那里得到的密码,如果该密码验证不通过,再提示用户输入新的密码。
use_mapped_pass 该模块不能提示用户输入密码,而是使用映射过的密码。
expose_account 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用,因为泄漏用户名会对安全造成一定程度的威胁。
[root@localhost pam.d]# cat sshd
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so
0x03 PAM 堆栈工作原理
图1:PAM形成堆栈的过程(solaris,有的linux不包含)
图2:PAM如何确定最终的返回值(solaris)
0x04 常用PAM模块
从官方文档翻译出来的(/usr/share/doc/pam-1.1.1
),翻译可能有不对的地方
1、pam_securetty.so
类型:auth
作用:只对root有限定,限定root登陆的终端,系统默认的“安全”中断保存在/etc/securetty中。
2、pam_access.so
类型:account
作用:基于登录名,主机名或者所属域,ip地址或者网络
终端编号(类似于/etc/securetty)。默认的配置文件为/etc/security/access.conf
3、pam_tally2.so
类型:auth 作用:当用户输入密码的错误次数超过指定次数时,锁定账户参数:
onerr=[fail|succeed]:
file=/path/to/counter:当登陆超过允许次数时,日志保存的地方。默认的为/var/log/tallylog。当开启的时候,每当登陆失败一次,则会写入一次,使用pam_tally2 可以读出
audit:如果用户找不到,则把此用户名记录到日志中
silent:不输出任何信息
no_log_info:不进行日志记录
deny=N:当用户连续输错n次是,在第n+1次锁定该用户,没有 设定解锁解锁时间,则锁定之后需要手工解锁。
pam_tally.so -u username --reset lock_time=n:当输入密码错误一次时,在N秒内不能再次登陆该账户。
unlock_time=n:解锁时间,当账户被锁定时,过n秒时,该账户 被接触锁定(清空/var/log/tallylog中的相关信息),配合deny参数使用 magic_root:当uid=0时,不会往/var/log/tallylog中写入计 数,即这个PAM不生效 even_deny_root:对root用户生效(不加magic_root参数,对 root也是不处理的) root_unlock_time=n:是针对even_deny_root的,root用户的解锁时间 每当用户成功登陆过一次后,/var/log/tallylog中关于这个用 户的记录就会清空
4、pam_cracklib
类型:password
作用:限定更改密码的长度,复杂度等等。
参数:
dubug:把修改密码的行为记录到日志中
retry=N:修改密码时,允许错误的次数,默认是1次
difok=N:新密码与旧密码不同的位数。如果超过一半不同,则通过验证,则忽略difok的设置
minlen=N:密码的最短长度
dcredit=N:至少有N的数字
ucredit=N:至少有N的大写字码
lcredit=N:至少有N个小写字母
ocredit=N:至少有N个特殊字符
minclass=N:密码组成的范围(数字,大小写字母,特殊字符)
maxrepeat=N:最多与上一个密码重复
5、pam_limits.so
类型:session
作用:限制资源的使用,默认的配置文件为/etc/security/limits.conf是全局的,/etc/security/limits.d/下存放各个子文件
6、pam_listfile
类型:auth
作用:验证用户是否能够登陆
参数:
item=[tty|user|rhost|ruser|group|shell]:控制的对象
sense=[allow|deny]:控制的方法
file=/path/filename:文件的路径,每个占一行
onerr=[succeed|fail]:指定某类事件发生时的返回值。
实例:
authrequired pam_listfile.soonerr=succeed item=user sense=deny file=/etc/ftpusers
保存在/etc/ftpusers中的用户,是不允许的。
7、pam_nologin.so
类型:auth
作用:用于拒绝除root外的不同用户的登陆(当/etc/nologin存在,或者重新制定file的情况下)
参数:auth
file=/path/nologin:如果文件存在,当拒绝用户登陆的时候,同时会输出该文件中保存的内容。默认文件为/etc/nologin。
0x05 PAM后门
测试环境CentOS 6.2 64位
0x05a 查询本机的PAM版本
rpm –aq | grep pam
下载对应的版本
下载地址:
http://www.linux-pam.org/library/
https://fedorahosted.org/releases/l/i/linux-pam/
0x05b 修改源代码
1
2
|
vim /mnt/Linux-PAM-1 .1.1 /modules/pam_unix/pam_unix_auth .c 在PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags,int argc, const char **argv)中定义FILE *fp; |
PS:网上的那种后门补丁也就是修改这些
0x05c 编译源代码
解决依赖性
1
2
|
yum install gcc make flex –y configure&& make |
编译出来的pam_unix.so在
/mnt/Linux-PAM-1.1.1/modules/pam_unix/.libs
对/lib64/security中的文件进行替换(32位系统放入/lib/security)
0x05d 登录测试
0x05e 使用touch –r来更改时间
PS:但是两个文件的大小是不同的
对于这种修改的方法,在/var/log/secure中和正常登录的是有差距
0x05f 优化一下下
1
|
vim /mnt/Linux-PAM-1 .1.1 /modules/pam_unix/pam_unix_auth .c |
1
|
vim /mnt/Linux-PAM-1 .1.1 /modules/pam_unix/support .c |
登录测试后的日志
一致了,o(∩_∩)o
0x05g 还有一种猥琐的方法,直接修改/etc/pam.d/sshd文件,输入什么都能登录的
正常日志
PS:为什么能登录,好好看前面的基础部分就知道了
Linux PAM&&PAM后门的更多相关文章
- Linux的一个后门引发对PAM的探究
转自http://www.91ri.org/16803.html 1.1 起因 今天在搜索关于Linux下的后门姿势时,发现一条命令如下:软链接后门: 1 ln -sf /usr/sbin/ssh ...
- linux中pam模块
https://www.cnblogs.com/ilinuxer/p/5087447.html linux中pam模块 一.pam简介 Linux-PAM(linux可插入认证模块)是一套共享库,使本 ...
- Arch Linux sudo: PAM authentication error: Module is unknown [Solved!]
问题描述: 我的 Arch Linux 已经用了快半年多,由于 Arch Linux 的滚挂问题,我从没有直接升级过系统.软件版本以及库自然落后了一些. 就在我准备需要用到 NFS 时,挂载网络文件系 ...
- [转] linux中pam模块
一.pam简介 Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式. 换句话说,不用(重新编写)重新编译一个包含PAM功能的应用程序,就可以改变它使 ...
- Linux下PAM模块学习总结
在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等.在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM( ...
- linux的PAM认证和shadow文件中密码的加密方式
它是一种统一的认证方案.PAM 让您能随时改变您的认证方法以及需求,并且不需要重新编译任何代码就封装了所有本地认证方法.具体见 PAM 网站. 对于 PAM 您只需要做: 对您的密码采用不同于 DES ...
- 一起来学linux:PAM模块
在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等 在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM( ...
- Linux系统木马后门查杀方法详解
木马和后门的查杀是系统管理员一项长期需要坚持的工作,切不可掉以轻心.以下从几个方面在说明Linux系统环境安排配置防范和木马后门查杀的方法: 一.Web Server(以Nginx为例) 1.为防止跨 ...
- Kali Linux之常见后门工具介绍
1.Meterpreter 它是Metasploit框架中功能强大的后渗透模块.可以通过Meterpreter的客户端执行攻击脚本,远程调用目标主机上运行的Meterpreter服务端. 命令 作用 ...
随机推荐
- ,net运行框架
.NET FrameWork框架 是一套应用程序开发框架,主要目的提供一个开发模型. 主要的两个组件: 公共语言运行时(Common Language Runtime)(CLR): 提供内存管理.线程 ...
- JavaEE基本了解
1. 为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担. 为了程 ...
- PostgreSql字符串函数和操作符
本节描述了用于检查和操作字符串数值的函数和操作符.在这个环境中的字符串包括所有 character, character varying, text 类型的值.除非另外说明,所有下面列出的函数都可以处 ...
- POJ 2486-Apple Tree(树状背包)
题意 n个节点的树,每个节点都有价值,求在树上最多走k步获得的最大价值(从1开始走,节点的价值只能获取一次) 分析: 开始以为是最基础的树形背包,但后来发现,不能只走子树,有可能还回到根节点,dp[i ...
- [转]Hadoop YARN任务提交流程
Yarn是随着hadoop发展而催生的新框架,全称是Yet Another Resource Negotiator,可以翻译为“另一个资源管理器”.yarn取代了以前hadoop中jobtracker ...
- OpenCV2.4.6与vs2008配置问题
刚刚学习Opencv,发现配置的时候蛮复杂的,特此记下以备后续. 我的opencv安装在D:\OpenCV\opencv 1.设置环境变量 首先说一下环境配置,看到很多网上说的是根据系统的位数来判断, ...
- sublime text2注册码
----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E-855605 813A03DD 5E4AD9E6 6C0EEB94 BC ...
- Spring配置MyBatis
1.MyBatis配置文件(mybatis-config) <?xml version="1.0" encoding="UTF-8"?> <! ...
- cocos2d-x 3.0 开发(一) Hello_New_World
1.Previous On 2dx 2dx 的3.0版本是个与以往不同的版本.变化比2dx从1.x 到2.x的变化还要大不少.具体的新功能可以参见:CocoaChina大会见闻——cocos2 ...
- 设计模式23---设计模式之装饰模式(Decorator)(结构型)
1.装饰模式讲解 1.1定义 动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活. 1.2装饰模式要点 透明的给一个对象增加功能,换句话说就是要给一个对象增加功能,但是不能 ...