首页 > 解决方案 > 可以在运行时更改 argv(而不是由应用程序本身)

问题描述

main()我想知道可以在运行时更改输入参数。换句话说,我们应该在处理数据时保护应用程序免受可能的TOCTTOUargv攻击吗?目前,我不知道有什么方法可以更改传入的数据argv,但我不确定这种方法不存在。

UPD:我忘了指出我对从程序外部更改 argv 感到好奇,因为 argv 是从程序外部接受的。

标签: c++csecurityargvtocttou

解决方案


我想说,根据您的威胁模型,这里有两个主要选项:

  1. 您不信任环境,并假设您计算机上的其他特权进程能够在程序运行时更改程序的内存内容。如果是这样,没有什么是安全的,程序可以被修改来做任何事情。在这种情况下,您甚至不能相信整数比较。

  2. 您信任程序运行的环境。在这种情况下,您的程序是其数据的唯一所有者,只要您没有明确决定更改argv或任何其他数据,您就可以依赖它。

在第一种情况下,如果你防范潜在argv的修改并不重要,因为你不信任执行环境,所以即使是那些警卫也可能被愚弄。在第二种情况下,您信任执行环境,因此您不需要首先防范问题。

在上述两种情况下,答案都是:,您不应该在处理数据时保护应用程序免受可能的 TOCTTOU 攻击argv

TOCTTOU类问题通常来自外部不受信任的数据,这些数据可以被其他人修改,并且根据定义不应被信任。一个简单的例子是文件的存在:你不能依赖它,因为机器上的其他用户或程序可以删除或移动它,你可以确保文件可以使用的唯一方法是尝试打开它。在 的情况下argv,数据不是外部的,并且归进程本身所有,所以这个问题真的不适用。


推荐阅读