是否可以在linux中阻止覆盖argv [0]变量的可能性,例如: strcpy(argv [0],“test”,strlen(argv [0]))?我想阻止或至少记录这些变化。
P.S。我急于改变内核,只是帮助我找到内核源代码中的调用或函数,我可以“捕获”这个变化。我注意到,当argv [0]发生变化时,/ proc / _pid_cmdline的内容也会发生变化,我试图在fs / proc / base.c中将一个简单的日志记录放入proc_pid_cmdline()但是它不起作用我想了。感谢。
答案 0 :(得分:3)
通常,解决方案是使包含参数的内存页面为只读,这会在尝试更改内容时导致内存访问冲突。通过修改C运行时存根或Linux内核,可以捕获它并决定之后要做什么。
答案 1 :(得分:2)
仅仅通过argv
“修复”内核而不是公开/proc/$pid/cmdline
会更容易/更好;可以说,这实际上是一个危险的安全漏洞,暴露了属于该进程的私有内存。例如,这是一个愚蠢的例子,但是一个符合规定的程序可以在使用参数完成后,在其参数字符串之前占用的空间中存储密码,加密密钥等。
如果你确实想要允许但是将更改记录到cmdline
,那将会更加艰难。您必须安排数据在初始只读页面中,并对其进行陷阱写入,允许写入,但在发生写入尝试时记录更改。我认为,这将非常脆弱,难以维持。