检查控制台应用程序是否真正退出

检查控制台应用程序是否真正退出

假设我启动了一个控制台应用程序并完成,然后 shell 提示符再次出现。但我如何确定它是真正的命令提示符呢?例如,如果该应用程序是一个“键盘记录器”,当我尝试退出时它会启动虚假提示怎么办?

那么,我怎样才能检测到我是实际上在纯 shell(例如 bash)提示符下?

答案1

从技术上来说,我会回答你的问题,好吧。如何确保您已返回 shell?如果您认为该程序不是恶意的但你认为它可能运行另一个 shell,你可以手动定义一个带有秘密内容的秘密函数(当然你不会导出):

$ my_secret_func() { echo "Still alive"; }
$ ~/Downloaded/dubious_program
$ my_secret_func
Still alive

如果dubious_program是恶意的,它可以通过将您的输入传递给原始 shell 并让它做出反应来轻松欺骗您。更一般地说,不安全的可执行文件有多种方法可以以您的身份安装键盘记录器(并执行许多其他恶意操作),例如将其自身安装在您的身份中~/.bashrc。即使没有明显的影响,它也可以这样做——事实上,大多数恶意软件都试图不产生任何立即可见的影响,以尽量减少被发现的风险。

因此,如果您不确定执行的内容是否安全,请nobody在沙箱中与用户一起执行它,或者根本不执行它。

答案2

如何检查是否已返回 shell

比较运行命令前后shell的PID(相同的PID表示相同的shell):

$ echo $$
6215
$ bash --posix
bash-4.3$ echo $$
10230
bash-4.3$ exit
$ echo $$
6215

在上面的演示中,您可以看到我启动了一个应用程序,在本例bash中是另一个 POSIX 模式的应用程序。返回后,我们验证我们使用的 shell 的 PID 是否相同,因此我们可以假设这是实际的 shell。当然可以通过添加$$到 shell 提示符来自动化:

$ PS1="[$$] $PS1 "
[6215] $

主题的变化可以通过检查前后的sha256sum(或任何其他校验和,如)来完成。 md5Sha-sums,如果您不知道的话,通常用于检查文件的完整性,尤其是下载和iso图像。在下面的演示中,我们使用/proc/<SHELL PID>/exefile,它是实际二进制文件的符号链接(在本例中,它将是我的mkshshell)。这样我们就可以验证我们正在运行的可执行文件是否是同一个。

[12107][xieerqi][21:34]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6  /proc/12107/exe

[12107][xieerqi][21:34]:
$ bash --posix
bash-4.3$ sha256sum /proc/$$/exe
c2615a71ff5c004e51aef248103a2950c25715f5eb8130837695770e1d78ecfa  /proc/12434/exe
bash-4.3$ exit

[12107][xieerqi][21:35]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6  /proc/12107/exe

返回外壳并不能保证安全

至于键盘记录器,它们不一定需要在壳内。如果您使用图形终端模拟器,键盘记录器可以简单地侦听发送到任何窗口的击键,无论您使用什么 shell。

就 shell 本身而言,可以在后台启动进程。例如,shell 脚本使用 & 符号,如下command & 所示在后台启动一些东西。我不确定后台进程是否仍然可以读取密钥,但 shell 退出的事实并不能保证应用程序退出。在下面的小演示中,您可以看到一个函数在后台启动,脚本看似退出,但该函数仍然每秒写入 out.txt。

[10754][xieerqi][21:12]:
$ cat launch_background_app.sh

#!/bin/bash

run_in_background()
{
    while true;
    do
       date +%s > out.txt
       sleep 1
    done
}

run_in_background &

[10754][xieerqi][21:12]:
$ ./launch_background_app.sh

[10754][xieerqi][21:12]:
$ cat out.txt
1484280777

[10754][xieerqi][21:12]:
$ cat out.txt
1484280778

[10754][xieerqi][21:12]:
$ cat out.txt
1484280779

编辑须知:请不要从我的示例中删除提示 - 它用于演示目的,以表明 shell PID 保持不变。

附:安全首先从安装受信任的应用程序开始,因此请考虑确保应用程序的完整性首先使用它。

答案3

键盘记录器不会尝试伪造 shell 提示符,它几乎肯定会留下一个监视后台进程/dev/input或类似的东西(它也会尝试将自己隐藏在进程列表中)。你肯定以错误的方式看待问题。

运行不受信任的二进制文件的常见方法是设置虚拟机并在其中运行它们。即使这并不能为您提供 100% 的安全性,但它通常被认为对于实际使用来说足够安全(当然,您不会在生产服务器上或银行受保护的网络内运行带有不受信任代码的虚拟机)。

答案4

 suspect-command; echo I am thinking of the number 43987

命令退出后 echo 将运行。您应该在命令提示符上方的行中看到结果。

相关内容