在arm体系下,内核在较早版本的读写限制没有开启,至少在4.4版本之前。但是在4.19之后的内核,默认开启。
这里有个set_mem_rw(unsigned long ,int)
在19版本上理论上可以更改内存的读写属性,但是采取
set_mem_rw = (void *)kallsyms_lookup_name("set_memory_rw");
进行导出引用,发现根本不管用。我还以为这里内核写的有错误。

这里这个chang_memory_common是内核中的set_mem_rw的主要实现。
我们看到红色框里面的flag & VM_ALLOC 标志如果不属于这个,那么就直接退出。

据此,我们导出内存属性中的flagz并做了更改,如黄色框图显示。
再次调用导出set_mem_rw,发现内存成功试下更改。
可见,这个内核函数在做属性更改的同时做了标志检查,但是还是存在绕过的可能。
本文深入探讨了ARM体系下Linux内核版本4.19中内存读写属性的修改机制。重点分析了set_mem_rw函数在内核中的作用,及其如何通过检查内存属性标志来实施权限控制。文章还讨论了绕过检查的可能性,并展示了如何通过导出内存属性标志来成功修改内存属性。
1614

被折叠的 条评论
为什么被折叠?



