【发布时间】:2020-08-12 19:13:43
【问题描述】:
我想知道main()的输入参数可以在运行时更改。换句话说,在处理argv 中的数据时,我们是否应该保护应用程序免受可能的TOCTTOU 攻击?目前,我不知道有什么方法可以更改在argv 中传递的数据,但我不确定这种方法不存在。
UPD:我忘了指出我对从程序外部更改 argv 感到好奇,因为 argv 是从程序外部接受的。
【问题讨论】:
-
argv 向量是进程空间的一部分,因此只有可能写入该进程内存的其他进程才能更改它(通常这是不可能的或仅适用于特权进程)
-
任何可以改变
argv内容的东西也可以改变你进程空间中的任何其他数据;所以DLL intection,调试器等。问题简化为:什么可以改变我的程序进程空间中的任意数据? -
参数数组中的字符串与程序中的其他字符串或定长数组没有区别。
-
@ctx,恕我直言,问题试图询问是否允许进程本身将
argv参数修改为main()。由于它属于进程,它应该能够,具体取决于参数字符串是位于只读存储器还是可写存储器中。 -
FWIW 当我的进程尝试将 main() 的原始 argv[] 数组中的字符指针设置为指向不同的字符串时,我在 Windows 下遇到了崩溃问题。我通过创建一个单独的 newArgv[] 数组来修改和使用来避免它们。 (虽然在其他操作系统下直接修改 argv[] 似乎可以正常工作)
标签: c++ c security argv tocttou