gpt4 book ai didi

c - 解决 “Writing Secure Code” 中的安全漏洞 '

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:39 24 4
gpt4 key购买 nike

我正在研究代码安全性,我正在尝试对以下 2 个摘自“编写安全代码”,第 2 版的片段进行安全性分析:

http://www.di.uniba.it/~ndm/corsi/sa/materiale/lab/StackOverrun.c

http://www.di.uniba.it/~ndm/corsi/sa/materiale/lab/FormatString.c

在第一个中,我认为唯一不安全的声明是 strcpy(buf, 输入);应该是 strncpy(buf, 输入, sizeof(buf-1));所有其他 printf 都是安全的:即使他们使用的参数比他们应该使用的少,但他们是故意这样做的。

在第二个中,printf 是安全的,但 fprintf(stdout, buf); 不是,应该替换为以下代码:fprintf (标准输出, "%s", 缓冲器);

我的问题是 pFile = fopen(argv[1], "r"); 由于可能的竞争条件也被分析程序认为是不安全的,但我看不出这是不可能的在此代码中被利用。如果文件以只读方式打开,攻击者可以用它做一些令人讨厌的事情吗?我认为没有。

那么问题来了:你认为这个分析正确吗?你能找到其他缺陷还是我的推理有问题?

谢谢!

最佳答案

我的第一个想法是,将未经净化的程序输入传递给 libc 调用是不好的。 libc 溢出的情况太多了,开发人员不应传递超出 libc 预期的参数(例如在这种情况下字符串应为 < PATH_MAX)。

但是既然你提到了竞争条件,我认为虽然在这个特定的例子中没有特别的问题,但通常不赞成使用 fopen(),因为它容易出现竞争条件。如果您正在寻址一个文件,任何文件,使用接受文件名而不是文件句柄的函数。如果通过一个或另一个操作通过文件的路径名引用文件,文件的状态可能会改变,并且程序对该状态的假设可能不再正确。下面的文章对此有更好的解释。

http://www.sans.edu/research/security-laboratory/article/race-cndtns

http://www.unixprogramming.info/s_isregfile-race-conditions

关于c - 解决 “Writing Secure Code” 中的安全漏洞 ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com