gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:39 24 4
gpt4 key购买 nike

我是 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提供 a link to an article它显示了如何使用预加载机制来拦截将打开 /proc 文件系统的调用,并使用它来隐藏有关特定进程的信息。然而,正如那篇文章也指出的那样,还有其他获取过程信息的机制。

/proc 中有四个条目包含相关信息:(在以下所有内容中,PID 应替换为进程的数字 PID。)

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

    exec -a SpoofedName RealCommandName arg...

    因为这是 ps 的默认信息源,它会隐藏命令名称(但不是参数)以防止随意使用 ps

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

    您可以通过创建指向可执行文件的符号链接(symbolic link)并执行符号链接(symbolic link)而不是原始文件来欺骗此名称。这将处理 ps -ocommtop

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

    ls -ld /proc/8325/exe

    readlink /proc/8325/exe

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

关于linux - 如何隐藏/更改名称从 ps 在 Bash 脚本中调用的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37641695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com