heb*_*thu 8 linux security kernel system-calls linux-kernel
我对Linux内核了解不多,有一些疑问。
将内核内存与用户空间内存分开的主要目的是什么?确保用户应用程序不会对内核做任何坏事?
用户级应用程序有多少种方法可以将控制权转移到内核?我能想到的包括(1)调用系统调用,(2)将内存映射到内核(但我认为mmap()也是一个系统调用),以及(3)加载内核模块(但我猜是lsmod还调用一些系统调用)。我对么?还有其他方法我错过了吗?
有多少种攻击内核的方法?我可以简要介绍一下他们吗?
如果我获得了root权限,是否意味着我完全控制了内核?也就是说,我可以对内核和硬件做任何我想做的事情?还是我对内核的权力仍然有限?
如果有人能帮我找出这些问题的答案,我将不胜感激。
我会尽量简短地回答问题。你问的问题通常在大学的操作系统入门课程中得到解决,但我假设你没有上过这样的课程。
用户空间进程的内存隔离是非常可取的——不仅可以保护内核免受恶意用户空间程序的攻击,还可以保护用户空间程序之间的相互隔离。这通常称为虚拟内存。它还可以更容易地实现分页,这对于其他原因也是可取的(更简单的碎片,更简单的链接器/加载器等)。
中断(并非所有中断都由用户级应用程序控制)。放弃处理器也会从进程中夺走“控制”(例如wait,也是系统调用的等等)。内核可能自己决定取消调度应用程序。
这是一个非常广泛的问题。系统调用执行不当的内核很容易受到攻击。写入物理内存的能力将是另一种方式。执行不当的指令可能会导致其他漏洞(例如 Intel 处理器中的 sysret 漏洞)。
root 权限与内核权限不同。以 root 用户身份运行的应用程序仍在使用虚拟内存,仍然必须进行系统调用,仍然必须遵守任何用户级应用程序必须遵守的其他规则。
如果您希望我提供有关某些答案的更多详细信息,请告诉我。
如果有人可以改进某些答案,请随时指出。
| 归档时间: |
|
| 查看次数: |
562 次 |
| 最近记录: |