【问题标题】:How OS protects against malicious memory access from assembly level code?操作系统如何防止来自汇编级代码的恶意内存访问?
【发布时间】:2017-04-26 03:55:46
【问题描述】:

我知道操作系统提供的用于保护程序不访问其他程序内存的系统调用。但这只有在我使用了 OS 提供的系统调用库时才有帮助。如果我自己编写一个汇编代码,为内核模式设置 CPU 位并执行特权指令(假设修改操作系统在内存中的程序段)怎么办。操作系统可以防止这种情况吗? 附言出于好奇的问题。如果可以提供任何好的博客或书籍参考,那将很有帮助,因为我想尽可能详细地研究操作系统。

【问题讨论】:

  • 操作系统将标准进程置于这样的指令将导致异常的模式。内存也受到保护,包括禁用从数据区域运行代码的能力。但是,调试器类型的进程可以覆盖所有这些。
  • 操作系统如何设置这种指令会导致异常的模式?一旦操作系统将 CPU 交给一个进程,那么该进程就可以做任何事情。所以进程不能为特权模式设置CPU标志并执行任何指令
  • 这取决于处理器,但通常程序在受限模式下运行,以防止它们脱离受限模式。

标签: memory-management operating-system system-calls kernel-mode memory-safety


【解决方案1】:

处理器通过 (1) 要求您处于提升模式(对于我们这里的示例,KERNEL)来再次保护此类恶意恶作剧; (2) 限制对内核模式的访问。

为了从用户模式进入内核模式,要么必须有中断(此处不适用)要么有异常。通常两者的处理方式相同,但有一些奇怪的处理器(有人说英特尔吗?)做事有点不同

操作系统异常和中断处理程序必须限制用户模式程序可以做什么。

如果我自己编写一个汇编代码,为内核模式设置 CPU 位并执行特权指令会怎样

你不能只在处理器状态寄存器中设置内核模式位来进入内核模式。

操作系统可以防止这种情况发生吗?

CPU 可以防止这种情况发生。

如果可以提供任何好的博客或书籍参考,那将很有帮助,因为我想尽可能详细地研究操作系统。

VAX/VMS Systems Internals 这本书很旧,但它很便宜,并且展示了如何实现真正的操作系统。

【讨论】:

  • 那么如果 CPU 防止程序设置内核模式位,它如何只让操作系统设置内核模式?它如何区分操作系统是要设置内核模式还是标准程序.l?
  • @RishiSharma:操作系统首先在系统上运行;它以更高的权限设置所有的东西,然后要求处理器(内核)执行用户环中的程序或用户程序(较低的权限)。而操作系统继续运行我们所说的保护模式。
【解决方案2】:

这个博客清楚地解释了我的困惑。 http://minnie.tuhs.org/CompArch/Lectures/week05.html 即使用户程序可以切换到内核模式,但他们必须通过中断指令(在 x86 情况下为 int)来完成,并且对于此中断,中断处理程序由操作系统编写。 (可能在启动时处于内核模式时)。所以这种方式所有特权指令只能由操作系统代码执行。

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2019-02-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多