精华内容
下载资源
问答
  • 内核漏洞:各种内核漏洞
  • Windows内核漏洞 简介 Windows内核漏洞 进攻清单 #安全公告#KB#说明#操作系统 [Windows后台智能传输服务特权提升漏洞](Windows 7/8/10,2008/2012/2016/2019) [Microsoft Server Message Block 3.1.1(SMBv3...
  • Linux内核漏洞浅析

    2020-09-16 01:24:30
    Linux内核漏洞浅析
  • 收集了CCS和NDSS两大会议2015-2020年发表的与操作系统内核漏洞相关的论文
  • 内核漏洞学习

    2014-05-05 21:52:32
    一个内核漏洞的学习过程: 漏洞重现,漏洞分析,漏洞利用,漏洞总结

    一个内核漏洞的学习过程:  漏洞重现,漏洞分析,漏洞利用,漏洞总结

    漏洞重现: 环境搭建,POC编译

    漏洞分析:源码分析,反汇编分析,POC分析,补丁对比,内核调试跟踪,蓝屏分析

    漏洞利用:特权提升,远程溢出,本地溢出,远程DOS,本地DOS

    漏洞总结:根本原因,修补方法


    编写安全驱动程序:

    检查输入输出: 

    KPROCESSOR_MODE PreviousMode = KeGetPreviousMode()

    if(PreviousMode != KernelMode)

    {

    ProbeForWrite(Buffer,length,1);

    }

    验证驱动调用者::

    检查调用者进程EPROCESS,进程文件MD5,用户态程序和驱动程序的通信加密,对于解密失败或非法通信数据的情况不予处理


    白名单机制的挑战

    只要白名单中的驱动存在漏洞,利用漏洞进行提权等操作,同样可以实现需要的功能

    解决方法是对白名单设立 “准入制度” ,定期审计,发现该驱动的漏洞或外部公布的漏洞,需要第一时间通知用户,提供补丁升级服务






















    展开全文
  • 内核漏洞利用技术

    2019-09-28 14:01:17
    有漏洞的驱动exploitme.sys 在Ring3可以通过设备名称“\\.\ExploitMe”打开设备,得到设备句柄,进而使用DeviceIoControl函数调用驱动的派遣例程,与驱动进行交互。...内核漏洞利用思路 能够篡改系...

    有漏洞的驱动exploitme.sys

    在Ring3可以通过设备名称“\\.\ExploitMe”打开设备,得到设备句柄,进而使用DeviceIoControl函数调用驱动的派遣例程,与驱动进行交互。

    输入、输出地址都是由Ring3程序指定,读写是在Ring0中完成。因此Ring3可以将输出缓冲区地址指定为内核高端地址,可以篡改内核中任意地址的数据。

    内核漏洞利用思路

    能够篡改系统内核内存数据或执行Ring0 Shellcode的漏洞,主要为三种:任意地址写任意数据,固定地址写任意数据,任意数据和任意地址写固定数据类型的内核漏洞。

    内核漏洞利用方法

    1、篡改内核内存数据。2、执行Ring0 Shellcode

     ProfileSource不为ProfileTime或者ProfileAlignmentFixup 就是我们想要的了

    内核漏洞利用实战与编程

    Explitme.sys漏洞:存在于对IOCTL_EXPLOIT_ME的IoControlCode处理过程。由于IOCTL_EXPLOIT_ME最后两位为3,代表所使用的通信方式为METHOD_NEITHER方式,派遣例程中没有使用ProbeForRead和ProbeForWrite探测输入输出地址是否可读,可写。

    1.获取HalDispatchTable表地址x

      HalDispatch Table 是由内核模块导出的。得到他在内核中的准确地址,首先要得到内核模块的基地址,再加上HalDispatchTable与内核模块基址的偏移

    2.在0x0处申请一段内存,并写入Ring0 Shellcode

    3.利用漏洞向地址y写入0x0

    4.调用NtQueryIntervalProfile函数

    5.Ring0 Shellcode被执行

    Ring0 Shellcode的编写

    提权到SYSTEM:

    恢复内核Hook/Inline Hook:

    添加调用门,中断门,任务门,陷阱门《rootkit ring3进ring0之门系列》 四篇:

    内核方面 以后涉及到了,再学吧

     

    转载于:https://www.cnblogs.com/Ccmr/p/7363474.html

    展开全文
  • 内核漏洞主要的作用包括:远程任意代码执行,本地权限提升,远程。拒绝服务攻击,本地拒绝服务攻击。从漏洞的利用来看,远程拒绝服务和本地拒绝服务类型的内核漏洞利用起来比较简单,不必过多地考虑“构造”(构造...

         本文是阅读《0day安全:软件漏洞分析技术》后的笔记。
         内核漏洞主要的作用包括:远程任意代码执行,本地权限提升,远程拒绝服务攻击,本地拒绝服务攻击。从漏洞的利用来看,远程拒绝服务和本地拒绝服务类型的内核漏洞利用起来比较简单,不必过多地考虑“构造”(构造漏洞成功触发的条件和数据)。相反,远程任意代码执行和本地权限提升类型的内核漏洞,利用起来往往比较复杂,需要有精心的构造,包括漏洞触发条件的构造,相关数据的构造等。

    从公布的漏洞数量来看,远程任意代码执行类型的内核漏洞已经很少见了,更多的是本地权限提升类型的内核漏洞。(说的没错,老铁!!!)
    在这里插入图片描述
        目前主要有这三种:任意地址写任意数据固定地址写任意数据任意地址写固定数据类型的内核漏洞。
        目前常见的内核漏洞利用方法主要有两种:一是篡改内核内存数据;二是执行 Ring0 Shellcode。

        执行 Ring0 Shellcode的实现:
        例如 SSDT(SystemService Dispatch Table)、HalDispatchTable 等。如果能修改这些表中的内核 API 函数地址为事先准备好的 ShellCode 存放的地址(本进程空间内存地址),然后在本进程中调用这个内核 API函数,这样便实现了在 Ring0 权限下执行 Shellcode 的目的。
        在选用内核 API 函数的时候,一定要选用那些“冷门”函数,最好是那些不常被调用的函数。因为我们的 Shellcode 保存在自己进程的 Ring3 内存地址中,别的进程无法访问到,别的进程一旦也调用这个内核 API 函数,就会导致内存访问错误或内核崩溃,是相当危险的。

        调用门/中断门/任务门/陷阱门。有兴趣的可以学习一下四门机制。
        四门机制是出入 Ring0/Ring3 的重要手段。若能在系统中成功添加一个门,就能在后续代码中,自由出入 Ring0 和 Ring3。
        这里以调用门为例,展示如何利用瑞星这个漏洞向系统中添加一个调用门。调用门描述符可以放在 GDT、LDT 中,但是不能放在 IDT 中。在 Windows XP 中,没有 LDT。也就是说,我们要添加调用门需要修改 GDT。Ring3 实际上是可以获取 GDT 地址的,通过 sgdt 指令即可。因此我们的思路就是,在 Ring3 获取 GDT 地址,然后通过这个漏洞来修改 GDT,添加调用门。
    在这里插入图片描述
    GDT 中 0x03e8 偏移处的段选择子的各字段含义

        DPL 为 3 表示 Ring3 有权限调用,调用无参数。DT=0,说明是系统段描述符和门描述符。类型为二进制的 1010,即 0xA,表示“执行/读”属性。
    在这里插入图片描述
        调用此新添加的调用门后,实际上是以 Ring0 权限调用了 GDT 中 0 偏移处的代码,而 GDT 偏移处的第一个指令是一条返回指令,即 0xC3。那么在 Ring3 调用该调用门后,就会直接返回,并且携带有 Ring0 的权限。

    在这里插入图片描述
        利用过程可以大致分成以下 5 个步骤:

    1. 获取 HalDispatchTable 表地址
      HalDispatchTable 是由内核模块导出的。要得到 HalDispatchTable 在内核中的准确地址,首
      先要得到内核模块的基址,再加上 HalDispatchTable 与内核模块基址的偏移。
      有了这个表的地址 x,那么x+4 便存放的是 HalQuerySystemInformation 函数地址。
    2. 在 0x0 处申请一段内存,并写入 Ring0 Shellcode
      在指定的地址申请内存,推荐使用 ZwAllocateVirtualMemory 函数,该函数第二个参数BaseAddress 是一个指针,指向的值便是您指定的要申请内存的地址。系统会从指定的地址开始向下搜寻,找到一段需要大小的内存。
    3. 利用漏洞向地址 x+4写入 0x0
    4. 调用 NtQueryIntervalProfile 函数

    首先,感谢任何一个阅读,关注或点赞我博客的朋友!! 当然博客中的任何问题都欢迎大家随时指出! 欢迎有兴趣的人私信留下你的联系方式,我们可以一起沟通,一起学习哦!我的学习交流QQ群366469549。 再次感谢大家的支持!!! 我会再接再厉的!!!

    展开全文
  • 文章目录内核漏洞的成因不要随便使用MmIsAddressVaild函数在驱动中如果要对用户态地址进行操作请使用try,__except长度为0的缓存或者为NULL的指针长度为0的缓存一个为NULL的指针缓存对齐不正确的内核函数的调用...

    内核漏洞的成因

    不要随便使用MmIsAddressVaild函数

    MmIsAddressValid这个函数的作用是不够准确的,因为它只会判断该地址的一个字节的有效性,例如:

    if(MmIsAddressValid(p1))
    {
    	memcpy(p1,p2);
    }
    

    那么攻击者只需要传入一个字节在有效页,比如0x8000这一页是有效的的,0x9000这一页是未分配的,传入0x8FFF将会使得系统崩溃。

    其次MmIsAddressValid并不能准确地判断pageout的页面。来源于微软的说明:
    在这里插入图片描述

    在驱动中如果要对用户态地址进行操作请使用try,__except

    典型的错误:

    try{
    	ProbeForRead(Buff,Len,Alig);
    }
    __except(EXECUTE_HANDLER_EXCEPTION)
    {
    ...
    }
    if (memcmp(Buff , Buff2 , Len)
    .....
    

    ProbeForRead 只检查在 probe 的那一刻, buff 地址是在用户态地址范围内。
    在try,except块之外进行读写,这个时候并不能保证buff还是用户态的地址。

    长度为0的缓存或者为NULL的指针

    长度为0的缓存

    当一块缓存长度为0的时候,很多函数都不会对其进行检验而直接跳过,比如曾经的ProbeForXXXX:
    在这里插入图片描述
    所以当使用了ProbeForXXX验证了参数,一样要当心长度为0的时候的情况:

    __try{
    ProbeForRead(Str1,Len,sizeof(WCHAR));
    if(wcsnicmp(Str1,Str2,wcslen(Str2))
    {
    ....
    }
    __except(EXECUTE_HANDLER_EXCEPTION)
    {
    ....
    }
    

    当Lenth = 0的时候,这样的代码一样会导致系统崩溃。而且还有一点需要特别注意:
    长度为空的缓存如果用做一些函数的参数可能具有特别的意义,比如:对于 ObjectAttributes->ObjectName的 Length,如果为空,系统会以对应的参数打开ObjectAttributes->RootDirectory 的句柄,攻击者可以先以低权限得到一个受保护对象的句柄,再以长度为空的缓存,将句柄填入RootDirectory 来获取高权限的句柄。

    一个为NULL的指针

    千万不要判断用户态的指针是否为NULL来判别是否放行,因为Windows7及其之前是允许用户申请地址为0的内存的,所以导致了可绕过这类型的判断,

    由此拓展的还有就是缓存对齐的绕过方式和不正确的内核函数的调用。

    缓存对齐

    ProbeForRead 的第三个参数 Alig 即对齐, 如果没有正确地传递这个函数, 也会导致问题,例如对于 ObjectAttributes ,系统默认按 1 来对齐,如果在对其参数处理中使用 sizeof(ULONG)来对齐,就会对本来可以使用的参数引发异常,绕过保护或检查。

    不正确的内核函数的调用

    ObReferenceObjectByHandle

    对于用户态句柄使用 ObRefenceObjectByHandle, 不指定类型仍可以获得对应的对象地址,但如果你直接访问这个对象,就会引发漏洞,
    比较常见的错误:

    ObReferenceObjectByHandle(FileHandle , Access , NULL(ObjectType) ,...&fileobject);
    if(wcsnicmp(fileobject->FileName....)
    

    攻击者可以传入非文件类型的句柄从而造成系统漏洞。

    不正确的Zw函数调用

    不能将任何用户态地址传入Zw函数来传递给内核,用户态内存未经过校验传递给 ZwXXX 会让系统忽略内存检查(因为 ZwXXX 调用时认为上个模式已经是内核模式),即使你进行了校验,传递这样的内存给系统也可以引发崩溃(例如内存页在调用时突然无效),即使你在外部有异常捕获,也可能造成内核内存泄露、对象泄露,甚至权限提升等严重问题。
    常见的错误:

    __try{
    ProbeForRead(ObjectAttrbutes,sizeof(OBJECT_ATTRIBUTES),1);
    ProbeForRead(ObjectAttributes->ObjectName , sizeof(UNICODE_STRING),1);
    ProbeForRead(ObjectAttributes->ObjectName->Buffer ,
    ObjectAttributes->ObjectName->Length,sizeof(WCHAR));
    ZwOpenKey(&hkey,ObjectAttributes....)
    //未校验全部参数就传递给 Zw 函数, ObjectAttributes 还有多个域
    //即使全部校验了也不能传递给 Zw 函数,例如内存如果是无效的用户态内存,
    //最后会被我们驱动的异常捕获,但是内核函数的数据回收很可能没有进行
    }
    

    不要接受任何用户输入的内核对象传递给内核函数。

    接受用户输入的内核对象意味着可以轻易构造内核任意地址写入漏洞,不要在设备控制中接受任何用户输入的内核对象并将其传递给内核函数。
    例如:

    if(IoControlCode==IOCTL_RELEASE_MUTEX)
    {
    KeReleaseMutex((MY_EVT_INFO)(Irp->AssociatedIrp->SystemBuffer)->Mutex);
    }
    

    用户态程序只需要传递一个精心构造的 Mutex 对象 (可以位于用户态内存 ),就可以做到任意地址写入,提升权限。

    给驱动程序提供功能接口需要小心

    例如可以对注册表、文件、内核内存、进程线程等操作的功能性接口,一定要非常小心, 如果不能完全杜绝存在被恶意利用的可能, 一定要限制设备控制的调用者,禁止一切非受信进程的调用。
    如果不小心控制的话很可能会造成白利用这种攻击。


    更新时间于9.20号下午5点。
    如有更深一步的理解再更新。

    展开全文
  • 内核漏洞的利用与防范》涵盖了开发可靠和有效的内核级别漏洞利用所需的理论技术和方法,并将其应用于主流操作系统——UNIX衍生系统、MacOSX和Windows。本书分4个部分共9个章。第一部分介绍了漏洞利用的目标、内核...
  • 本章所提到的漏洞为UAF(释放后利用),这也是目前我所接触到的第一个复杂一点的内核漏洞。参考文章: 传送门 0x01:漏洞原理 NTSTATUS FreeUaFObject() { NTSTATUS Status = STATUS_UNSUCCESSFUL; PAGED_CODE();...
  • 这是内核漏洞挖掘技术系列的第二篇。第一篇:https://bbs.pediy.com/thread-250302.htm前言2013年Project Zero的j00ru开源了用bochs的插桩API实现的挖掘内核double fetch漏洞的工具bochspwn,2018年j00ru更新了...
  • 一直以来内核漏洞安全给很多人的印象就是:难,枯燥。但是内核安全是否掌握是衡量一个系统安全工程师水平的标准之一,也是安全从业人员都应该掌握的基本功。本文通过详细的实例带领读者走进内核安全的大门。难度系数...
  • 内核漏洞概述 内核漏洞的分类 ​ 运行在ring0上的操作系统内核、设备驱动、第三方驱动能共享同一个虚拟地址空间,可以完全访问系统空间的所有内存,而不像用户态进程那样拥有独立私有的内存空间。由于内核程序的特殊...
  • Linux内核漏洞环境搭建方法二 检查本地内核版本号 假如即将调试的内核版本是 4.14.1,先检查一下本地内核的版本号,如下: zhangji16@zhangji16vm:~/c_study/kernel_prj$ uname -a Linux zhangji16vm 4.4.0-154-...
  • Liunx 内核漏洞

    2020-12-24 08:13:08
    利用Linux kernel漏洞过程中掌握linux kernel的运行机制和原理 一个国外黑客写的四篇系列文章 https://blog.lexfo.fr/cve-2017-11176-linux-kernel-exploitation-part1.html 参考:一步步利用Linux ...
  • ​ 在看雪论坛看到许多关于HEVD的Windows内核漏洞教程,其中有一个是翻译国外的一个系列,感觉讲的很好,接下来就会跟着他将这个HEVD系列的漏洞走一遍了。昨天学了栈溢出,其实以前就学过,只不过没有操作过内核态的...
  • 继上一篇“使用自动化脚本进行Windows提权”,本文将介绍有关Windows内核漏洞提权的方法。我将使用内置的Metasploit模块作为演示。通过本文的学习,你将了解系统的哪些部分可被利用,并匹配最佳可利用模块进一步的...
  • 0x00 引⾔本⽂介绍了 Windows 10 1607 和 1703 版本中引⼊的针对内核漏洞利⽤的防护措施,在此基础上将给出相应的绕过⽅案,从⽽使我们能够重新获得内核态下的 RW primitives,并进⼀步实现 KASLR 绕过以及内核中 ...
  • HFL:基于混合模糊测试的Linux内核漏洞挖掘 Remarks Conference: NDSS 2020 Full Paper: https://www.ndss-symposium.org/ndss-paper/hfl-hybrid-fuzzing-on-the-linux-kernel/ Summary 针对的问题: Linux 操作...
  • 原标题:Windows Kernel Exploitation – NullPointer Dereference 原文地址:... 由prison翻译整理,首发i春秋 引言:Windows内核漏洞的利用和学...
  • 一名开发者声称利用FreeBSD内核漏洞成功实现了PS4越狱。PS4运行的是修改自FreeBSD 9.0的Orbis OS系统。这位名叫CTurt的开发者过去几个月一直在研究PS4,他很早就注意到FreeBSD 9自2012年以来发现了多个内核漏洞,...
  • Linux Kernel Exploit 内核漏洞学习(5)-整数溢出 前言 在计算机语言中整数类型都有一个宽度,我们常见的整数类型有8位(单字节字符、布尔类型)、16位(短整型)、32位(长整型)等,也就是说,一个整数类型有一个最大...
  • 在本文中,我们将以CVE-2020-17382漏洞为例来介绍内核漏洞是如何被武器化的。 在上一篇文章中,我们首先解释了攻击者为什么会以驱动程序为攻击目标,然后,分析了驱动程序的组成部分,最后,讲解了驱动程序的逆向...
  • 在上一节中,将HEVD的环境配置完成,接下来进行内核漏洞的调试复现。为什么首先做栈溢出呢,因为我以前学过一些Pwn知识,栈溢出算是最简单的漏洞了。使用的环境为: Windows7 x86 虚拟机系统 双机调试环境 HEVD靶场...
  • android 内核漏洞相关

    2018-03-02 15:48:40
    Linux内核提权漏洞的分析和利用(CVE-2016-0728) 关于Android的root提权漏洞
  • 文章同步发表于看雪:[原创]从0到1开始使用syzkaller进行Linux内核漏洞挖掘-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com​bbs.pediy.com尝试从0到1开始使用syzkaller进行Linux内核漏洞挖掘环境搭建过程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,263
精华内容 905
关键字:

内核漏洞