如何隐藏/更改名称 从 ps 在 Bash 脚本中调用的进程



我是bash脚本的新手,编写bash来执行一些命令, 样本:

#!/bin/bash
var1=$1
var2=$2
var3="$(~/ourCcompiledprogram -c check -v error -f syn)"
$var3 $var1 $var2

当我们运行 bash 脚本时,它运行得很好, 但问题是,如果有人登录到服务器并执行 ps aux、top、htop 等...... 将看到进程像这样运行:/home/user/ourCcompiledprogram -c check -v error -f force ~/input.file ~/output.file

如何防止这种情况? 或者添加到 bash 脚本中的内容以运行在 bash 中作为指定名称调用的所有外部命令!?

Linux 提供了有关在/proc文件系统中不同位置运行进程的信息。其中大多数都很难欺骗,没有很多工作。通常,您必须修改系统执行环境,即使这样,您也可能无法完全隐藏信息。

在注释中,@sjsam提供了指向一篇文章的链接,该文章显示了如何使用预加载机制来拦截将打开/proc文件系统的调用,并使用它来隐藏有关特定进程的信息。但是,正如该文章还指出的那样,还有其他获取过程信息的机制。

有四个/proc条目保存相关信息:(在以下所有条目中,PID应替换为过程的数字 PID。

  • /proc/PID/cmdline:这是最容易欺骗的,因为它显示argv数组(或者更准确地说,argv数组的前 4,096 个字节),其中argv[0]显示为命令名称。通过内置的 bashexec,您可以使用-a标志提供所需的任何内容作为argv[0]值。(这是一个 bash 扩展。它可能不存在于其他贝壳中。因此,您可以简单地使用:

    exec -a SpoofedName RealCommandName arg...
    

    由于这是ps的默认信息来源,它将隐藏命令名称(但不是参数),以免随意使用ps

  • /proc/PID/stat/proc/PID/status:它们显示PID的状态信息;第一个是程序易于解析的格式,第二个是人类更容易阅读的格式。两者都显示进程可执行文件的实际文件名。这是pscomm选择器的信息源,也是top中进程名称的信息源。

    您可以通过创建可执行文件的符号链接并执行符号链接而不是原始文件来欺骗此名称。这将照顾ps -ocommtop

  • /proc/PID/exe:这是指向实际可执行文件的符号链接。我不相信有一种简单的方法来欺骗这个值,除了实际将可执行文件复制到新文件并执行该文件(这不是真正的欺骗)。但是,据我所知,任何显示进程信息的命令行实用程序都没有使用它。用户需要键入如下内容:

    ls -ld /proc/8325/exe
    

    readlink /proc/8325/exe
    

    以查看可执行文件的文件名。

相关内容

  • 没有找到相关文章