我正在考虑让 Linux 更安全。我可以编写代码来抓取大量内存并查看它们以寻找“有趣”的东西吗?
main()
{
char *p = (char *)malloc(10000000);
scan_for_stuff(p,10000000);
}
我可以想象通过这种方式很难找到有趣的东西,但你永远不知道......
答案1
不,Linux 不会将其内存归零后释放它。大多数库在分配内存时都会将其归零,但这取决于编程语言,并且可以被覆盖。
对我来说,访问“热”内存似乎不是一个有效的攻击媒介。要利用这一点,您需要能够以更有效的方式使用的特权。如果您决定重写 malloc 函数,则需要访问以替换 glibc 库。
最后,我想提一下冷启动攻击向量。我最近在自己的笔记本电脑上尝试了这种方法,效果令人印象深刻。您需要物理访问(您的情况不需要),但实际上您不必在计算机上执行任何操作;因此几乎没有机会留下软件审计线索。
答案2
由于malloc
只是一个库函数,它取决于你的实现malloc
。但是它不能使用任何系统调用来访问属于另一个进程的页面,除非该进程做了一些事情让你可以访问它们。
典型的实现通过使用或映射来malloc
获取页面,这两种方法都只提供零页面。如果您从典型的获得非零页面,那只是因为您的进程在其中放置了某些内容。sbrk
/dev/zero
malloc
如果某个进程可以通过某种方式访问另一个进程的废弃页面,则每个进程都必须在丢弃页面之前将其清零,这样就可能出现各种攻击,即导致某个进程崩溃,然后尝试获取其废弃页面。除非第一个进程明确要求该行为,否则不为某个进程提供获取另一个进程最后修改的非清零页面的方法会更有意义。