精华内容
下载资源
问答
  • Windows内核安全与驱动开发

    千次阅读 2015-07-24 16:51:55
    Windows内核安全与驱动开发 本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与Windows客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用...

    Windows内核安全与驱动开发


    本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与Windows客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从32位到64位,从Windows XP到Windows 8都有涉及,大部分程序不经过修改即可在Windows 10上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。


    详细解读 和小伙伴们一起来吐槽

    展开全文
  • 驱动开发专家解读 寒江独钓 Windows内核安全编程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    驱动开发专家解读《寒江独钓——Windows内核安全编程》

    本文由网友 李丁盼 - 网名:doskey  提供

    寒江独钓——Windows内核安全编程

     

     

        对专业技术人员来说,拿到一本书最关心的是书的实用性。市面上的技术书籍多如牛毛,《寒江独钓——Windows内核安全编程》(下简称《寒江》)是否是我们所需要的书呢?其实我拿到本书的时候并没有感到任何意外。因为我一直都很关注《寒江独钓》这本书。我认识本书的三位作者多年,他们都是安全行业从事 Windows驱动开发的顶尖高手,拥有Windows驱动开发有着丰富的经验和独到见解。


        从本书的目录就可以看出,《寒江》涉及到驱动开发的方方面面,可以说是面面俱到。经过几天的阅读过后,我由衷的感到:虽然本书内容众多,但是内容并没有显得杂乱,而是非常系统的阐述了每种驱动的特性,深入浅出的介绍了每种驱动的实现方法,并且将驱动开发中需要注意的每个细节都一一标出、无一遗漏,不得不佩服作者的细心。这几天的精读让我做到了温故而知新,了解了一些之前我并不太了解的知识。
        当然,《寒江》也有它的不足之处。比如在某些专业术语的描述上有欠妥当,如果可以在专用名词后面标上原英语短语应该会达到更好的效果。另一方面,本书对Windows本身的架构描述不够详细。初学者在阅读本书之前需要做很多准备工作,才能够达到阅读本书的要求。期待作者其他的作品。


        总的来说,《寒江》的目录编排合理,内容丰富,面面俱到,不失细节。适合想了解驱动开发而无处下手的初学者,也可以当作专业技术开发人员手边的速查手册。


        李丁盼 - 网名:doskey。国内著名黑客。COMODO中国研发中心组长&项目主管。拥有多年安全产品开发经验,精通Windows驱动开发、逆向分析等技术。

     

    本书购买地址:当当网    卓越网  互动网 

    更多精彩:驱动专题

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • RHSA-2020:3220-重要: 内核 安全和BUG修复更新 2、CVE编号 CVE-2019-19527 在drivers/hid/usbhid/hiddev.c driver中恶意USB设备导致UAF漏洞 CVE-2020-10713 grub2 缓冲区错误漏洞 CVE-2020-10757 Linux kernel ...

    1、漏洞提示:

    RHSA-2020:3220-重要: 内核 安全和BUG修复更新
    

    2、CVE编号

    CVE-2019-19527		在drivers/hid/usbhid/hiddev.c driver中恶意USB设备导致UAF漏洞
    CVE-2020-10713		grub2 缓冲区错误漏洞
    CVE-2020-10757		Linux kernel 缓冲区错误漏洞
    CVE-2020-12653		在5.5.4之前的Linux内核中发现一个问题	
    CVE-2020-12654		在5.5.4之前的Linux内核中发现了一个问题
    

    3、修复建议

    yum update kernel
    yum update kernel-headers
    yum update kernel-tools
    yum update python-perf
    
    yum update kernel-devel  -------2020.09.09新增,博客:shengfakun1234 -补充
    

    4、重启验证:

    reboot
    
    展开全文
  • linux 内核安全机制

    千次阅读 2019-04-10 21:57:09
    Android是一个基于Linux内核的移动操作系统。Linux是一个支持多用户的系统,...Android在Linux内核提供的基于UID和GID的安全机制的基础上,又实现了一套称为Permission的安全机制,如图1所示: 图1 Linux的UID/...

     Android是一个基于Linux内核的移动操作系统。Linux是一个支持多用户的系统,系统中的文件的访问权限是通过用户ID(UID)和用户组ID(GID)来控制的。换句话说,就是Linux的安全机制是基于UID和GID来实现的。Android在Linux内核提供的基于UID和GID的安全机制的基础上,又实现了一套称为Permission的安全机制,如图1所示:

    图1 Linux的UID/GID安全机制与Android的Permission安全机制

            那么,这两个安全机制是如何对应起来的呢?

            我们首先看一下Linux基于UID和GID的安全机制,它包含三个基本角色:用户、进程和文件,如图2所示:

    图2 Linux基于UID/GID的安全机制的三个角色

            Linux中的每一个用户都分配有一个UID,然后所有的用户又按组来进划分,每一个用户组都分配有一个GID。注意,一个用户可以属于多个用户组,也就是说,一个UID可以对应多个GID。在一个用户所对应的用户组中,其中有一个称为主用户组,其它的称为补充用户组。

            Linux中的每一个文件都具有三种权限:Read、Write和Execute。这三种权限又按照用户属性划分为三组:Owner、Group和Other。如图3所示:

    图3 Linux的文件权限划分

            从图3就可以看出文件acct:1. 所有者为root,可读可写可执行;2. 所有者所属的主用户组为root,在这个组中的其它用户可读可执行;3. 其余的用户可读可执行。

            Linux中的每一个进程都关联有一个用户,也就是对应有一个UID,如图4所示:

    图4 Linux的进程

             由于每一个用户都对应有一个主用户组,以及若干个补充用户组,因此,每一个进程除了有一个对应的UID之外,还对应有一个主GID,以及若干个Supplementary GIDs。这些UID和GID就决定了一个进程所能访问的文件或者所能调用的系统API。例如,在图4中,PID为340的进程一般来说,就只能访问所有者为u0_a19的文件。

             一个进程的UID是怎么来的呢?在默认情况下,就等于创建它的进程的UID,也就是它的父进程的UID。Linux的第一个进程是init进程,它是由内核在启动完成后创建的,它的UID是root。然后系统中的所有其它进程都是直接由init进程或者间接由init进程的子进程来创建。所以默认情况下,系统的所有进程的UID都应该是root。但是实际情况并非如此,因为父进程在创建子进程之后,也就是在fork之后,可以调用setuid来改变它的UID。例如,在PC中,init进程启动之后,会先让用户登录。用户登录成功后,就对应有一个shell进程。该shell进程的UID就会被setuid修改为所登录的用户。之后系统中创建的其余进程的UID为所登录的用户。

            进程的UID除了来自于父进程之外,还有另外一种途径。上面我们说到,Linux的文件有三种权限,分别是Read、Wirte和Execute。其实还有另外一个种权限,叫做SUID。例如,我们对Android手机进行root的过程中,会在里面放置一个su文件。这个su文件就具有SUID权限,如图5所示:

    图5 su的SUID和SGID

            一个可执行文件一旦被设置了SUID位,那么当它被一个进程通过exec加载之后,该进程的UID就会变成该可执行文件的所有者的UID。也就是说,当上述的su被执行的时候,它所运行在的进程的UID是root,于是它就具有最高级别的权限,想干什么就干什么。

            与SUI类似,文件还有另外一个称为SGID的权限,不过它描述的是用户组。也就是说,一个可执行文件一旦被设置了GUID位,么当它被一个进程通过exec加载之后,该进程的主UID就会变成该可执行文件的所有者的主UID。

            现在,小伙伴们应该可以理解Android手机的root原理了吧:一个普通的进程通过执行su,从而获得一个具有root权限的进程。有了这个具有root权限的进程之后,就可以想干什么就干什么了。su所做的事情其实很简单,它再fork另外一个子进程来做真正的事情,也就是我们在执行su的时候,后面所跟的那些参数。由于su所运行在的进程的UID是root,因此由它fork出来的子进程的UID也是root。于是,子进程也可以想干什么就干什么了。

            不过呢,用来root手机的su还会配合另外一个称为superuser的app来使用。su在fork子进程来做真正的事情之前,会将superuser启动起来,询问用户是否允许fork一个UID是root的子进程。这样就可以对root权限进行控制,避免被恶意应用偷偷地使用。

            这里是su的源代码,小伙伴们可以根据上面所讲的知识读一读:https://code.google.com/p/superuser/source/browse/trunk/su/su.c?r=2

            在传统的UNIX以及类UNIX系统中,进程的权限只划分两种:特权和非特权。UID等于0的进程就是特权进程,它们可以通过一切的权限检查。UID不等于0的进程就非特权进程,它们在访问一些敏感资源或者调用一个敏感API时,需要进行权限检查。这种纯粹通过UID来做权限检查的安全机制来粗放了。于是,Linux从2.2开始,从进程的权限进行了细分,称为Capabilities。一个进程所具有Capabilities可以通过capset和prctl等系统API来设置。也就是说,当一个进程调用一个敏感的系统API时,Linux内核除了考虑它的UID之外,还会考虑它是否具有对应的Capability。

            这里就是Linux所设计的Capabilities列表,有兴趣的小伙伴可以再读一读:http://man7.org/linux/man-pages/man7/capabilities.7.html

            以上就是Linux基于UID/GID的安全机制的核心内容。接下来我们再看Android基于Permission的安全机制,它也有三个角色:apk、signature和permission,如图6所示:

    图6 Android的Permission安全机制

            

            Android的APK经过PackageManagerService安装之后,就相当于Linux里面的User,它们都会被分配到一个UID和一个主GID,而APK所申请的Permission就相当于是Linux里面的Supplementary GID。

            我们知道,Android的APK都是运行在独立的应用程序进程里面的,并且这些应用程序进程都是Zygote进程fork出来的。Zygote进程又是由init进程fork出来的,并且它被init进程fork出来后,没有被setuid降权,也就是它的uid仍然是root。按照我们前面所说的,应用程序进程被Zygote进程fork出来的时候,它的UID也应当是root。但是,它们的UID会被setuid修改为所加载的APK被分配的UID。

           参照Android应用程序进程启动过程的源代码分析一文的分析,ActivityManagerService在请求Zygote创建应用程序进程的时候,会将这个应用程序所加载的APK所分配得到的UID和GID(包括主GID和Supplementary GID)都收集起来,并且将它们作为参数传递给Zygote进程。Zygote进程通过执行函数来fork应用程序进程:

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片

    1. /* 
    2.  * Utility routine to fork zygote and specialize the child process. 
    3.  */  
    4. static pid_t forkAndSpecializeCommon(const u4* args, bool isSystemServer)  
    5. {     
    6.     pid_t pid;  
    7.       
    8.     uid_t uid = (uid_t) args[0];  
    9.     gid_t gid = (gid_t) args[1];  
    10.     ArrayObject* gids = (ArrayObject *)args[2];  
    11.     ......  
    12.       
    13.     pid = fork();  
    14.       
    15.     if (pid == 0) {  
    16.         ......  
    17.           
    18.         err = setgroupsIntarray(gids);  
    19.         ......  
    20.           
    21.         err = setgid(gid);  
    22.         ......  
    23.           
    24.         err = setuid(uid);  
    25.         ......  
    26.     }     
    27.       
    28.     .....  
    29.       
    30.     return pid;  
    31. }     

            参数args[0]、args[1]和args[]保存的就是APK分配到的UID、主GID和Supplementary GID,它们分别通过setuid、setgid和setgroupsIntarray设置给当前fork出来的应用程序进程,于是应用程序进程就不再具有root权限了。

            那么,Signature又充当什么作用呢?两个作用:1. 控制哪些APK可以共享同一个UID;2. 控制哪些APK可以申请哪些Permission。

            我们知道,如果要让两个APK共享同一个UID,那么就需要在AndroidManifest中配置android:sharedUserId属性。PackageManagerService在安装APK的时候,如果发现两个APK具有相同的android:sharedUserId属性,那么它们就会被分配到相同的UID。当然这有一个前提,就是这两个APK必须具有相同的Signature。这很重要,否则的话,如果我知道别人的APK设置了android:sharedUserId属性,那么我也在自己的APK中设置相同的android:sharedUserId属性,就可以去访问别人APK的数据了。

            除了可以通过android:sharedUserId属性申请让两个APK共享同一个UID之外,我们还可以将android:sharedUserId属性的值设置为“android.uid.system”,从而让一个APK的UID设置为1000。UID是1000的用户是system,系统的关键服务都是运行在的进程的UID就是它。它的权限虽然不等同于root,不过也足够大了。我们可以通过Master Key漏洞来看一下有多大。

            Master Key漏洞发布时,曾轰动了整个Android界,它的具体情况老罗就不分析了,网上很多,这里是一篇官方的文章:http://bluebox.com/corporate-blog/bluebox-uncovers-android-master-key/。现在就简单说说它是怎么利用的:

            1. 找到一个具有系统签名的APP,并且这个APP通过android:sharedUserId属性申请了android.uid.system这个UID。

            2. 通过Master Key向这个APP注入恶意代码。

            3. 注入到这个APP的恶意代码在运行时就获得了system用户身份。

            4. 修改/data/local.prop文件,将属性ro.kernel.qemu的值设置为1。

            5. 重启手机,由于ro.kernel.qemu的值等于1,这时候手机里面的adb进程不会被setuid剥夺掉root权限。

            6. 通过具有root权限的adb进程就可以向系统注入我们熟悉的su和superuser.apk,于是整个root过程完成。

            注意,第1步之所以要找一个具有系统签名的APP,是因为通过android:sharedUserId属性申请android.uid.system这个UID需要有系统签名,也就是说不是谁可以申请system这个UID的。另外,/data/local.prop文件的Owner是system,因此,只有获得了system这个UID的进程,才可以对它进行修改。

            再说说Signature与Permission的关系。有些Permission,例如INSTALL_PACKAGE,不是谁都可以申请的,必须要具有系统签名才可以,这样就可以控制Suppementary GID的分配,从而控制应用程序进程的权限。具有哪些Permission是具有系统签名才可以申请的,可以参考官方文档:http://developer.android.com/reference/android/Manifest.html,就是哪些标记为“Not for use by third-party applications”的Permission。

            了解了Android的Permission机制之后,我们就可以知道:

             1. Android的APK就相当于是Linux的UID。

             2. Android的Permission就相当于是Linux的GID。

             3. Android的Signature就是用来控制APK的UID和GID分配的。

             这就是Android基于Permission的安全机制与Linux基于UID/GID的安全机制的关系,概括来说,我们常说的应用程序沙箱就是这样的:

    图7 Android的Application Sandbox

    展开全文
  • 本篇介绍密钥管理子系统,只涉及内核如何管理密钥,不涉及内核加密算法的实现。密钥本质上是一段数据,内核对它的管理有些类似对文件的管理。但是因为Linux内核不愿意让密钥像文件那样“静态”存储在磁盘或者其他...
  • Linux内核安全模块学习-导言

    千次阅读 2020-05-24 22:54:48
    什么是安全 国际上对计算机安全勉强概括了三个特性:私密性(Confidentiality)、完整性(Integrity)、可用性(Availability),简写CIA。私密性就是数据不被未授权的人看到,完整性指存储或传输的信息不被篡改,可用性是...
  • 寒江独钓-Windows内核安全编程(完整版).pdf 编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件、硬件资源。因此,稍有不慎就有可能将系统变得不稳定。Windows的设计者设计了各种...
  • Linux 内核安全模块学习总结

    千次阅读 2016-03-15 18:34:42
    Linux安全模块(LSM) ...户可以根据自己的需求选择合适的安全模块加载到内核上实现。 LSM设计思想: LSM的设计思想:在最少改变内核代码的情况下,提供一个能够成功实现强制访 问控制模块需要的结构或者接口。L
  • 寒江独钓——Windows内核安全编程

    千次阅读 热门讨论 2009-04-10 08:50:00
    《寒江独钓——Windows内核安全编程》书评看到本书的书名,我立即就想起了柳宗元的诗句:千山鸟飞绝,万径人踪灭。孤舟蓑笠翁,独钓寒江雪。寒江中那位孤独寂寞,又抗寒傲雪,毅然垂钓的渔翁,是诗人自己的写照,...
  • Android内核安全机制理解

    千次阅读 2016-09-20 16:44:48
    Android是基于Linux内核的,所以其内核层的安全机制是基于Linux内核的,这里主要讨论文件访问控制机制,进程隔离与保护机制,内存管理机制。文件访问控制机制主要是使一个文件有三种访问权限,分别是该用户,该用户...
  • BSD的内核安全级别

    千次阅读 2010-02-09 17:21:00
    bsd一直是公认的最安全的unix操作系统,因为它提供了基于内核安全保护而不仅仅是老式unix的基于访问控制的安全保护。bsd为内核划分了安全 等级,这样就可以限制很多不安全的操作,而且bsd在安全设置上是单点的,...
  • linux安全加固技术--内核安全模块LSM

    万次阅读 2018-08-31 17:57:45
    Linux安全相关技术 SELinux AppArmor openSSL TPM SGX LSM   linux上六种常用的安全加固技术: 1 安全的编码(Secure Code),减少编写的错误。 2 应用层漏洞缓解技术(Application-level exploitation)...
  • 我首先想请教的是,内核空间和用户空间的分离,是不是主要就是从安全角度考虑的? 其次,从用户空间影响内核空间,都有哪些方式?我能想到的有,通过系统调用,通过内存映射(但mmap()本身也是系统调用),通过...
  • windows internals 的中文译本 windows内核原理与实现
  • 驱动开发专家解读《寒江独钓——Windows内核安全编程》本文由网友 李丁盼 - 网名:doskey 提供 对专业技术人员来说,拿到一本书最关心的是书的实用性。市面上的技术书籍多如牛毛,《寒江独钓——Windows内核安全...
  • strongSwan Linux内核安全框架

    千次阅读 2009-10-06 22:28:00
    strongSwan是一个完整的2.4和2.6的Linux内核下的IPsec和...的重点项目是strongSwan强认证机制,使用X.509公 开密钥证书和可选的安全储存私钥对智能卡通过一个标准化的PKCS # 11接口。一个特点是使用的X.509属性证书
  • Android 内核安全机制-selinux简介

    万次阅读 2014-09-24 15:16:45
    SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)领导开发的GPL项目,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,...
  • CentOS 是基于 Red Hat Enterprise Linux 的操作系统,所以它也继承了其安全更新,最近的更新是对 Red Hat Enterprise Linux 7 内核软件包发现的五个漏洞打而进行的修补,这些漏洞也会影响到 CentOS 7 用户。...
  • 对于xp和32位win7系统,内核层文件加载执行控制主要是...patchguard技术在windows内核启动阶段开启安全定时器,并对SSDT等关键数据结构的完整性进行定期检查,一旦发现这些数据结构被修改,则立即转入紧急处理模式(多数
  • 寒江独钓-Windows内核安全编程总结

    千次阅读 2010-10-04 15:27:00
    内核编程工具集安装: 1:下载安装WDK 2:编写程序(DrvierEntry必选),编译 3:利用srvinstw.exe等工具安装服务,用net start启动服务 4:使用WinDbg,利用串口和虚拟机通信,将目标...
  • 1、 内核中字符串的用法 在Windows内核环境不要使用printf之类的字符串处理函数,一定要是使用内核已经定义了相应API的函数来处理。 // Step1 WCHAR wName[32]; UNICODE_STRING strName; ULONG id = 1; // Step2 ...
  • Linux内核安全

    千次阅读 2016-06-18 10:03:33
    本文译自Linux.orgDevynCJohnson的系列文章...上一篇文章中我们谈到了内核的驱动程序,今天我们来聊一聊内核安全性。内核是Linux系统的核心,如果有恶意的代码控制或者是破坏了内核的一部分,整个系统就会受到严重的
  • 第二章 Android Linux 内核安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 作为最广为人知的开源项目之一,Linux 已经被证明是一个安全,可信和稳定的软件,全世界数千人...
  • linux内核模块的安全

    千次阅读 2016-05-25 15:32:45
    linux可以动态的加载内核模块,在很多场合可能需要确保加载内核安全性。如果被攻击者加载恶意内核模块,将会使得内核变得极其危险。    当然,稳妥的做法就是给内核模块进行签名,内核只加载能正确验证的签名...
  • Win32 Hook来Hook去很蛋疼……各种Hook  Irp hook ssdt hook idt hook sssdt hook ...hook到都形成了hook链 你hook你的,我hook我的……Win32脆弱的内核安全机制使得rk大行其道,一旦加驱成功,系统基
  • 关于Linux内核利用Linux内核利用思考Linux漏洞检测工具Linux提权辅助工具Linux内核利用任意内核读写问题内存损坏漏洞问题1-内核栈漏洞:2-内核堆漏洞...Linux内核利用思考     在网络安全领域,对于系统的渗透...
  • 内核对象的安全描述符

    千次阅读 2010-06-25 09:10:00
    内核对象的安全描述符 当你需要创建、打开和操作各种内核对象的时候,系统要创建和操作若干类型的内核对象,强如存取符号对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、信箱...
  • Linux内核五个安全模块简述

    千次阅读 2013-01-01 17:12:04
    名称  作者/维护者  第一个公开 ... NSA(美国国家安全局)  2000/12/22  2003/8/8  2.6.0-test3  SMACK  Casey Schaufler  2008/4/16  2.6.25  Tomoyo  NTT data

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 292,203
精华内容 116,881
关键字:

内核安全