美文网首页操作系统导论
操作系统-Security篇

操作系统-Security篇

作者: KyoDante | 来源:发表于2020-10-08 19:53 被阅读0次

    序言(灵魂三问):

    How can you ensure that secrets remain confidential?
    How can you guarantee the integrity of your important data?
    How can you ensure that you can use your computer resources when you want to?
    SOMEBODY WANTS YOUR PEACH!!!!

    1. 如何保密?
    2. 如何保证重要数据的完整性?
    3. 如何保证你可以使用计算机的资源?

    不仅仅是可靠性(reliability,软件对抗)的问题,更重要的是,有人要偷我们的桃子(与坏人对抗)。


    OS安全导论

    安全很重要。为什么?差不多所有东西跑在OS上。就算自己的程序写得完美无瑕,从底层进行破坏才是根本性的。(就好比沙上建房,房子的构建再好,洪水冲击房下地基,照样能毁掉上层房屋。)

    • 就算你不在乎数据库、服务器、中间件平台,但它们是运行在OS之上的。OS上的安全漏洞都会产生巨大的影响。
    • 另外就是,我们的软件依赖于底层硬件适当的行为,而OS拥有诸如:处理器,内存,外围设备等的最高权限。
    • 保护OS的安全并不容易。就像程序一样,越短越好保证程序无暇,但是没有比现代OS还要大和复杂的程序了。
    • 另一个是支持多进程下的安全。做好进程间的隔离,保护好共享的硬件。
    • 从另一个角度考虑,OS提供的抽象:安全实现。而应用们可能是在此基础上建立的安全机制。比如,OS的文件系统的访问限制(修改文件读写属性等)。如果OS没有提供可信任的抽象实现,那开发者就需要更多方法来实现安全目标。

    怎么保护OS资源

    • 进程是否访问了它可以访问的资源?
    • 需要从OS获得什么原语(primitives)?
    • 硬件需要提供什么机制?

    我们要保护什么?保护所有OS能做的事情:

    • 检查或者改变处理器的内存
    • 在可写的持久性存储介质上,读、写、删任何文件。(比如硬盘或者flash)。
    • 改变进程调度或者中断执行
    • 发送任何信息到任何位置。(比如进程希望发送的被改变版本)
    • 开启或者关闭外围设备
    • 将其他进程的资源权限给任意进程
    • 任意拿走进程控制(process controls)的任意资源
    • 对任意系统调用响应一个危害最大的谎言。

    安全飞地(enclaves)
    OS控制了几乎所有的硬件。有什么例外?在90年代开始,硬件开发者看到了需要隔离一些硬件的需求,比如:第一个保护OS启动进程的硬件,Trusted Platform Module(TPM)提供启动保障。
    跟密码学有关的一些数据可能就会存在安全飞地里,比如IPhone里面的用户指纹数据。

    当OS本身是恶意的时候,进程保护不了自己,所以OS本身的安全补丁是很重要的。


    计算机安全四大金刚:

    • 机密性(confidentiality):有的信息你不希望别人知道,这些信息就是机密的。
    • 完整性(integrity):信息不被对手改变。其中一点就是可靠性(authenticity):不只是信息不被改变,而且是由特定机构创建的,而不是对手。
    • 有效性/可用性(availability):信息自己能访问到,而对手没办法阻止我们使用。
    • 另外一点是我们希望跟特定群体共享信息,但是又不想要另外的人知道。
    • 不可否认性(non-repudiation):别人向我们说了事情,但不能否认”说“这件事情没有发生。

    提供更具体和确切的目标是实际需要做的,我们需要把模糊的目标转换成高度具体的安全策略(policies)。 比如:策略具体到->”A和B能写文件X,但其他用户不能“。

    安全 VS. 容错
    虚拟化资源能解决安全问题吗?可以(大部分恶意问题可以通过虚拟化所有东西和不允许任何东西之间的交互来解决)但也不行(当有人要颠覆他们时,就没办法抵挡不良行为)。
    其次,我们不希望完全隔离各个进程。进程默认下会共享一些OS资源。这些虚拟化约束的刻意放松,在使用恰当的时候是没有问题的。OS并不始终拥有硬件的完整控制权。


    设计安全的系统

    • 机制的经济性
      系统尽可能小(有少的bugs)和简单(可以认识系统的行为)。

    • 失败-安全的默认
      默认应该更安全。

    • 完整调解
      每次动作前要检查安全性。

    • 公开设计
      实践中,假设对手知道我们的设计;如果能保持安全,那就最好不过。

    • 权限分离
      独立的机构或证书来执行关键动作。比如,双因素的认证。(password+硬件)

    • 最小权限
      只提供最小的权限给用户或者进程,确保用户或者第三方不会滥用权限;或者他们被攻击时,泄露我们的权限。

    • 最小公共机制
      不同用户或者进程,应该使用分离的数据结构或者机制。比如,每个进程有自己的页表(在虚拟内存系统里),确保进程没办法访问其他进程的页。

    • 可接受度
      如果用户不接受安全系统,那系统就是无价值的。太多安全系统被拒绝了,因为它们向用户请求太多事情了。


    OS安全的基础

    进程之间会互相影响(与硬件交互或者进程间通信)。所以,最好做到硬件上的“隔离”,将不同进程能够接触到的部分进行“隔离”,防止安全问题发生。

    小心最薄弱的环节。

    可以使用访问控制机制来决定被识别的进程是不是被授权以执行请求的动作。


    总结:安全是一个取决于不同系统的事情,有的系统要求明确,而且对安全的需求放在首位,那就应该从底层开始考虑安全的事务。
    而我们在OS上能提供什么机制来支持安全策略?虚拟化进程和内存是一种不错的机制。接下来,我们会了解到其他有用的机制。

    相关文章

      网友评论

        本文标题:操作系统-Security篇

        本文链接:https://www.haomeiwen.com/subject/snrwuktx.html