当前位置: 首页 > Linux

特工-动态修改计算机系统调用

时间:2023-04-06 06:07:28 Linux

我们最近录制了一个特工节目,一个全球独家的视频节目,全程2.5小时,这个视频节目就是围绕这样一个实验进行的。本期视频节目,我们重点关注:ARM64架构中的内存管理,ARM64页表管理,ARM64Linux内核如何遍历页表,ARM64Linux内核系统调用是如何实现的?如何应对宕机?这个实验将面临4种不同的停机时间。详细分析宕机日志,用kdump手工拆掉宕机问题本大叔保证全世界的视频网站和培训机构都没有这么有深度和广度的视频。只有本大叔的旗舰视频才有!如果喜欢,请点击文末“阅读原文”订阅。这个实验是姜扬子的:“假设你是一名安全员,你正在执行一项秘密任务。这个秘密任务是深入敌方作战指挥中心的电脑中安装窃听程序。简单来说就是动态替换电脑的系统调用,假设你的同事已经帮你破解了敌机的root密码,那么就看你如何动态修改系统调用了。注意:写的内核模块不能让敌机重启,crash/panic,否则行踪暴露,秘密操作失败1)编写内核模块实验环境:ARM64架构,Linux5.0内核,需要替换系统调用表(sys_call_table)中的某个系统调用,换成一个自己写的系统调用处理函数(例如:my_new_syscall()),在新的系统调用函数中打印一句“hello,Ihavehackedthissyscall”,然后回调到原来的系统调用处理功能。例如,使用ioctl以系统调用为例,它在系统调用表中的编号是__NR_ioctl。然后需要修改系统调用表sys_call_table[__NR_ioctl]的指针指向my_new_syscall()函数,然后在my_new_syscall()函数中打印一句,调用原来sys_call_table[__NR_ioctl]指向的处理函数.2)卸载模块时,将系统调用表恢复到原来的状态。3)使用clone系统调用验证你的驱动,clone系统调用号为__NR_clone。本实验来自于一个实际项目,原本是国庆期间本叔VIP微信群里朋友提问的问题。他们表示,这个问题困扰了他们很久。他们的实验平台是某鹏的ARM64服务器芯片。傻大叔看了一眼他们的代码,喝了一杯二锅头就解决了这个问题。后来本大叔觉得这道题对学习linux驱动和内核的朋友很有帮助,尤其是加深对ARM64架构、ARM64内存管理、系统调用、如何处理崩溃的理解。根据VIP朋友的问题,我对其进行了修改和抽象,并做了一个实验,分享给大家。本叔叔让小本本做这个实验。百花齐放的小笨笨同学笨叔先给小笨笨介绍了ARM64架构的一些知识。小笨笨开始手写内核模块,花了一个下午写了一个驱动模块。但是这个驱动一运行就崩溃了,整个过程会出现4次不同的宕机。第一次电脑死机,小奔奔惊呆了。..在笨大叔的指导下,第一次宕机就搞定了。重新编译内核模块后,一运行就第二次崩溃了。小奔奔傻眼了。本大叔给他讲解了一些系统调用的基本原理后,马上就把第二次宕机定下来了。这次小笨笨把ioctl系统调用号改成了clone号,重新编译内核模块,跑起来,立马就死机了,第三次了。小奔奔这次哭了,大叔,我不玩了~~~~哄着小奔奔:别怕,小奔奔,我们仔细分析一下崩溃日志,你看,你只把第一个读-only一个page的属性改为writable,但是因为clone系统调用号是220,所以每个系统调用号在系统调用表sys_call_table中占用8个字节,但是这个表并没有按照pagesize来对齐存储,所以,这个克隆可能存储在第二页,你找到了吗?小笨同学。小奔奔看着奔奔大叔,大叔,看来是这么回事。大叔你好帅啊!小奔奔很快修改了代码,在电脑上运行后,机器好像没有宕机。本大叔:小本,你的驱动写的很好,但是我们在卸载模块的时候需要把系统调用表恢复到原来的状态。小奔奔马上去修改卸载模块的功能。在电脑上运行后,又死机了~~,这次小奔奔真的哭了:大叔,好难啊。为什么我一修改就死机了。小伙伴们,有没有兴趣和笨笨一起玩这个实验呢?本叔录制了2个多小时的高清视频,详细讲解了这个实验。感兴趣的同学可以点击“阅读原文”订阅本大叔的旗舰视频合集。此外,我们精心制作了400多页的实验指导手册,独家提供给大家免费下载。下载方式:登录“润巴linux社区”微信公众号,在微信公众号中输入“实验使用说明书”。