我一直在从事一个使用 PID/proc
和命令行分析来验证系统进程的项目。我的代码必须由安全人员检查,他们设法用一行代码破解它……尴尬!
#!/usr/bin/env perl
$0="I am running wild"; # I had no clue you can do this!
system("cat /proc/$$/cmdline");
print("\n");
system("ps -ef | grep $$");
# do bad stuff here...
我的问题:
我看到了上面的一些用例,比如隐藏命令行上给出的密码(也是不好的做法),但是当一个人可以隐藏进程和欺骗时,我看到了更多的问题/问题
cmdline
。有理由允许吗?不是系统漏洞吗?我该如何预防或检测到这种情况?我研究了
/proc
安装选项。我也知道可以lsof
根据意外行为来识别欺骗进程,但这在我的情况下不起作用。目前我正在使用一种简单的方法来检测是否cmdline
包含至少一个 null (\0
) 字符,该字符假定至少存在一个参数。在上面的代码中,需要用空值替换空格以绕过该检查,这是我在 Perl 中找不到如何实现的检查 - 直到第一个\0
.