利用GDB、KGDB调试应用程序及内核驱动模块 (blog.nsfocus.net)

【简介】

这几天看了一下linux内核提权的一个漏洞,里面涉及到了驱动程序漏洞及驱动调试内容,由于各类linux操作系统版本的不同,如果不能在自己机器上亲自调试驱动程序,可以说即使给了漏洞利用的POC源码也根本无法成功利用。因为内核漏洞的利用涉及到指令集的POC构造,不同内核版本模块加载指令地址不同,导致即使有POC也根本无法利用,只有在自己系统中亲自调试,才能做出相应的修改,达到内核漏洞利用的效果。这样就要求我们对linux内核驱动的调试过程,调试方法有个深入了解。经过两天的各处查找,配置,调试,终于弄清楚了内核调试的基本方法,为之后内核调试,漏洞分析提供技术支持。
目标

在驱动程序开发或是内核漏洞分析过程中经常需要对内核模块进行调试。在通常情下对于驱动程序的调试是利用最直接的方式即打印调试的方式,在驱动程序中通过printk,加入调试信息。同时通过动态加载模块的方式,即可实现对驱动的动态调试,这也是最简单的调试方式。而对于内核漏洞的分析,由于linux系统是开源项目,所有不管对于应用程序的调试还是对内核驱动程序的调试都可以通过查看源码找到漏洞的触发点。

那如果想像调试用户态应用程序一样对内核驱动做动态的源码即调试或是更进一步的对驱动程序进行汇编级调试或是开发内核漏洞利用程序那又该怎么办呢?也许有人会说一般没有必要进行汇编级调试。但是在对内核漏洞利用过程中经常需要调试内核驱动程序,并且需要对内核驱动进行汇编指令级单步跟踪,这样才能确定程序的走向。或是我们需要构造特殊的指令块来完成某项功能。这样就对我们调试内核带来的新的挑战。

那内核里面又是怎么实现的呢,又该如果能够去跟进内核内部去调试呢?

本文就是要解决这个问题:在动态汇编调试用户态应用程序的同时,能够跟进应用程序的的系统调用接口,直接源码级或是汇编级的调试(如果没有符号表)调试驱动程序。

本文演示的程序是通过一个应用程序demo,调用自己写的一个驱动程序接口,通过在调试应用程序的是时候能够跟进调试驱动程序。搭建这样的环境我们使用了vmware虚拟机,该虚拟机使用普遍,安装简单。为了能够调试程序,需要一个目标机和一个客户机。

目标机是用来安装驱动程序,同时运行应用程序,应用程序会调用驱动程序中的接口。同时目标机自己调试应用程序(用户态使用GDB调试)。

客户机是用来连接客户机,同时在客户机中调试目标机中的驱动程序(使用GDB调试)。

需要注意几点:
为了能够能够调试目标机的驱动程序,要求目标机需要支持KGDB调试。
为了能让客户机与目标机通信,我们在vmware中配置这两台机器通过串口通信调试。
客户机如果要支持驱动的源码级调试需要将驱动程序的符号表加载的客户机的调试器中。
本文用的vmware虚拟机需要将目标机和客户机同时安装在虚拟机中。
由于在文章中会包含客户机和目标机的操作过程和调试过程,本文中会使用绿框表示客户机相关操作,使用红框表示目标机上的相关操作。

点击查看原文 >>

@技术头条 2017-03-14 18:55 / 0个评论
赞过的人: @技术头条
要不要再学学下面的文章?
探索 AI 驱动的网络安全框架:深度学习技术、GPU 支持和未来增强 (paper.seebug.org)
这篇文章详细分析了现代网络攻击中的 DGA(域名生成算法)技术,涵盖了其工作原理、分类及在恶意软件中的应用实例。通过技术解析和实际案例,展示了如何检测和防御 DGA 带来的安全威胁。内容适合网络安全研究人员、安全工程师以及对恶意软件分析感兴趣的技术爱好者,提供了系统化的学习参考。
by @技术头条 2025-01-03 00:07 查看详情
容器技术驱动下的代码沙箱实践与思考 (blog.yuanpei.me)
本文探讨了基于容器技术的代码沙箱应用,旨在隔离代码执行环境,提升安全性和稳定性。通过 Docker 容器创建语言镜像,支持多语言代码执行。文章介绍了使用 Jupyter 实现代码可视化,并借助 nbformat 和 nbconvert 管理和执行 Jupyter 笔记本,增强代码展示效果。此方案不仅提高了开发灵活性,还便于在 AI 编程中实时展示和分析结果。
by @技术头条 2024-11-02 16:40 查看详情
新一代实验分析引擎:驱动履约平台的数据决策 (tech.meituan.com)
本文介绍了美团履约技术平台的新一代实验分析引擎,该引擎对核心实验框架进行了标准化,并融合了众多先进解决方案,有效解决小样本挑战。同时,提供了多样化的溢出效应应对策略,并针对不同业务场景提供了精准的方差和P值计算方法,以规避统计误差。希望对大家有所帮助或启发。
by @技术头条 2024-11-02 16:18 查看详情
领域驱动设计DDD在B端营销系统的实践 (tech.meituan.com)
领域驱动设计(DDD)在复杂业务系统中的应用非常有效,特别是在 B 端营销系统中。本文分享了美团如何通过 DDD 实践,优化营销系统的架构与设计,提升业务应对能力。想了解如何应对复杂业务需求的变化?千万别错过!
by @技术头条 2024-09-09 23:41 查看详情
如何巧妙构建“LDAPS”服务器利用JNDI注入 (www.leavesongs.com)
如何利用 LDAPS 和 JNDI 注入?本文详细讲解了构建恶意 LDAPS 服务器并利用 Java JNDI 漏洞的过程,还介绍了如何通过 TLS 代理和工具组合来实现漏洞利用。如果你对安全测试或漏洞利用感兴趣,这篇文章提供了全面的实战指南!
by @技术头条 2024-09-09 23:39 查看详情
应用程序的内存是大还是小? (www.diguage.com)
应该在内存容量大的少量实例(即机器)上运行应用程序,还是在内存容量小的大量实例上运行应用程序?哪种策略是最佳的?这个问题可能会经常遇到。在开发应用程序长达 20 年,且构建了 JVM 性能工程/故障排除工具( GCeasy、 FastThread,、 HeapHero)之后,我仍然不知道这个问题的正确答案。同时,我相信这个问题也没有非黑即白的答案。在本文中,我想与大家分享一下我对这个问题的看法和经验。
by @技术头条 2024-01-13 23:50 查看详情
利用gorm自身提供的方法实现存在更新不存在则创建的能力 (wiki.eryajf.net)
MySQL 有一个语句是 UPSERT 的操作,它结合了 update 和 insert 两种操作的功能。当执行 upsert 操作时,如果指定的记录已经存在,则执行更新操作;如果指定的记录不存在,则执行插入操作。这种操作可以用来确保数据的一致性,并且可以减少对数据库的访问次数。
by @技术头条 2024-01-13 23:49 查看详情
HTTP2 请求走私利用剖析 (paper.seebug.org)
文章将主要对HTTP/2协议的新特性以及HTTP/2中的请求走私进行详细介绍。
by @技术头条 2024-01-13 23:47 查看详情
nginx 防火墙模块开发总结 (www.addesp.com)
那段时间我的站点有时会打不开,起初以为是网络问题,后来越来越严重,进入后台才发现数据库 IO 拉满了。看了看 nginx 的日志才发现站点被疯扫,于是打算做点什么。

然后在 Github 上看了几个防火墙模块,要不然功能不全,要不然使用复杂,于是萌生了自己写模块的想法。
by @技术头条 2023-12-26 22:24 查看详情
如何利用「深度上下文兴趣网络」提升点击率? (tech.meituan.com)
美团到店广告平台在用户行为序列建模算法的迭代落地中,基于对业务实际场景中用户决策心智的观察,创新性地提出了深度上下文兴趣网络,精确建模了用户的兴趣,提升了CTR等线上业务指标。本文介绍了相应算法背后的动机、建模方法以及工程优化,希望能为从事相关工作的同学带来一些启发或帮助。
by @技术头条 2023-11-29 23:40 查看详情