zoukankan      html  css  js  c++  java
  • Linux下进程隐藏的方法及其对抗

    零、背景



    在应急响应中,经常碰到ps命令和top命令查不到恶意进程(异常进程)的情况,会对应急响应造成很大的影响。轻则浪费时间,重则排查不出问题,让黑客逍遥法外。所以这篇博客研究学习如何对抗linux进程隐藏的手段。

    一、用户态隐藏



    这是一类简单的隐藏方法,同时也是相对容易破解的方法。

    1、命令替换


    替换ps、top、ls等命令的文件,破解方法很简单,查看文件修改时间和HASH值,如果与默认时间,或正常命令文件的HASH值不符,则被替换。破解方法,传回来一个正常的文件重新使用命令操作即可

    #查看文件状态
    stat filename
    #计算文件hash值
    


    2、Hook系统调用


    Hook系统调用
    举例ps

    #ps命令原理:
    (1)调用openat系统函数获取/proc目录的文件句柄
    (2)调用系统函数getdents递归获取/proc目录下所有文件信息(包括子目录)
    (3)调用open函数打开/proc/进程pid/stat和/proc/进程pid/status,以及/proc/进程pid/cmdline文件开始获取进程信息
    (4)然后打印输出
    

    攻击者可以劫持getdents和libc中的readdir函数(修改内核中的系统调用代码或者修改lib中的函数代码)实现过滤特定进程名,从而实现进程隐藏。
    备注:getdents函数对应的系统调用是sys_getdents(),readdir函数对应的系统调用是proc_pid_readdir(),跟踪系统调用可以:

    apt-get install sysdig
    sysdig proc.name=ps
    

    3、劫持lib库


    劫持lib库

    原理解析:利用环境变量LD_PRELOAD或者配置ld.so.preload文件使的恶意的动态库先于系统标准库加载,以达到架空系统标准库中相关函数的目的,最终实现对特定进程的隐藏。
    

    例子参考聊一聊Linux下进程隐藏的常见手法及侦测手段
    方法2和方法3的隐藏只要查看/proc下面找到进程相关信息即可。可以写脚本遍历/proc/pid下面的cmdline

    4、挂载目录到/proc下


    #原理挂载一些空的路径到/proc对应进程号下面,ps等命令在遍历/proc时则没有办法找到该进程的信息。
    # -*- coding:utf-8 -*-
    
    import os
    import time
    
    while True:
        pid = os.getpid()
        print "start!"
        os.system("mount /dev/sda1 /proc/%s"%str(pid))#当然也可以使用mount -o bind /empty/dir /porc/xxxx
        print "end"
        #time.sleep(1) 
    
    



    对抗方法:cat /proc/mount查看挂载情况

    三、内核态隐藏:



    1、劫持VFS接口层


    proc文件系统也是VFS抽象类的一个具体子类,与其它文件系统不同的是,它是存在与内存中的虚拟文件系统,以文件系统的方式为访问内核数据的操作提供接口。在执行ps或ls命令时,proc文件系统会调用readdir函数依次遍历proc目录下的数字目录,而readdir又会调用filldir函数返回改数字目录对应进程的相关信息,因此,只要在filldir函数中增加适当的过滤,就可以实现对进程的隐藏了。
    

    2、劫持系统调用


    #如getdents函数对应的系统调用是sys_getdents(),readdir函数对应的系统调用是proc_pid_readdir()
    

    上面两个方法要么修改内核,要么新增加内核模块(LKM)。修改内核一般需要重启,增加内核模块不需要,所以增加内核模块更隐蔽一些。
    对抗方法:

    • 查看内核编译时间(uname -a)
    • 查看内核模块(lsmod)

    四、参考文献:



  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/10110376.html
Copyright © 2011-2022 走看看