Tag: 安全

如何在服务和用户进程之间共享内存?

我有一组Win32应用程序,它们使用CreateFileMapping()和MapViewOfFile()创建的共享内存段共享信息。 其中一个应用是系统服务; 其余部分由登录用户启动。 在Windows XP上,没有问题。 我们将我们的片段命名为“Global \ Something”,一切都很好。 Vista中的额外安全性(以及假设的Windows 7)似乎阻止了这种架构的运行。 不允许普通用户在全局命名空间中创建(Win32错误5)对象。 MSDN表明,如果该帐户具有“创建全局”权限,那么一切都应该很好,但实际上似乎并非如此。 此外,Vista的“完整性”function似乎可以防止“低完整性”用户进程访问“高完整性”服务创建的共享内存对象。 看起来我应该可以通过一些神奇的SetSecurityDescriptorSacl()咒语解决这个问题,但是我很难学会说出来。 所以问题是: 在服务和普通用户进程之间使用共享内存段的正确方法是什么? 为了抢占“刚刚关闭UAC”的简单回答,我们处于一个相当封锁的环境中,这是不可能的。 编辑:服务和用户进程都需要对段进行读/写访问。

sscanf被认为是安全的吗?

我对sscanf很糟糕的建议有一些模糊的记忆。 我知道如果我使用字段宽度说明符,它不会溢出缓冲区,所以我的记忆只是在玩弄技巧吗?

access()安全漏洞

我一直在做一些shell编写,并且遇到了一个建议访问()来检查文件是否存在,可以读取等等。看起来超级易于实现并且比stat()更快。 当我开始查看它的手册页时,我注意到它不建议使用,因为它可能导致安全漏洞。 手册页说: 使用access()检查用户是否有权例如在使用open(2)实际执行此操作之前打开文件会产生安全漏洞,因为用户可能利用检查和打开文件之间的短时间间隔来操作它。 有谁知道如何利用它或者它是否只与检查文件后使用open()有关? 我知道有很多人说使用stat()代替,但是access()很容易实现,特别是对于我用它的shell。 谢谢

C中的字符串处理实践

我正在以C(c99)开始一个主要用于文本的新项目。 由于外部项目的限制,这段代码必须非常简单和紧凑,由一个没有外部依赖的源代码文件或除libc和类似普遍存在的系统库之外的库组成。 根据这种理解,什么是最佳实践,陷阱,技巧或其他技术可以帮助使项目的字符串处理更加健壮和安全?

格式字符串漏洞 – printf

为什么打印内存地址的值为0x08480110? 我不确定为什么有5%的08x参数 – 这会把你带到哪里? address = 0x08480110 address (encoded as 32 bit le string): “\x10\x01\x48\x08” printf (“\x10\x01\x48\x08_%08x.%08x.%08x.%08x.%08x|%s|”); 这个例子来自本文的第11页http://crypto.stanford.edu/cs155/papers/formatstring-1.2.pdf

Memcpy()在安全编程中?

我最近偶然发现了一篇声称微软在其安全编程商店中禁止使用memcpy()函数的文章 。 我了解该function固有的漏洞,但是有必要完全禁止它的使用吗? 我写的程序应该完全避免使用memcpy() ,还是只是确保安全使用它? 有哪些替代品可以提供类似但更安全的function?

strcpy函数总是危险的吗?

strcpy,gets等function总是危险的吗? 如果我写这样的代码怎么办: int main(void) { char *str1 = “abcdefghijklmnop”; char *str2 = malloc(100); strcpy(str2, str1); } 这样,函数不接受参数(参数…),并且str变量将始终具有相同的长度…这里是16或稍微多一些,具体取决于编译器版本……但是100可以满足3月,2011年:)。 有没有办法让黑客利用上面的代码? 10倍!

使用单个系统()调用在C中执行多个命令

在我正在研究的信息安全实验室中,我一直负责执行多个命令,只需调用“system()”(用C编写,在Fedora上运行)。 什么语法允许我执行多个命令通过system()? (如果程序通过system()调用与OS交互,那么你可以通过在远程计算机上运行的程序执行任意命令。) 即: char command[] = “????? \r\n”; system(command);