• kptr_restrict 内核文件简介 Hello


    一、简介

    系统为了保护内核符号地址不被泄露, 而用的一种保护手段, 从而使除 root 用户外的普通用户不能直接查看符号地址。原因在于内核文件 kallsyms.c 中的显示符号地址命令中做了如下限制:

    seq_printf(m, "%pK %c %s\n", (void *)iter->value, iter->type, iter->name);

    只需要把其中的 %pK 换成 %p 就可以让普通用户查看符号地址了. 很多提权漏洞一般会用到此处的修改来获取符号地址。

    内核提供控制变量 /proc/sys/kernel/kptr_restrict 来进行修改. 从内核文档 Documentation/sysctl/kernel.txt 中可以看到 kptr_restrict 用于控制内核的一些输出打印,Documentation/printk-formats.txt 有更加详细的描述。

    值和权限对应关系如下:

    kptr_restrict        权限描述
    ---------------------------------------------------------------------
        2                内核将符号地址打印为全0, root和普通用户都没有权限
        1                root用户有权限读取, 普通用户没有权限
        0                root和普通用户都可以读取

    二、实验

    1. 为0时可以看到符号地址

    # echo 0 > /proc/sys/kernel/kptr_restrict
    
    # cat /proc/kallsyms | head -10
    ...
    ffffffee02481000 t efi_header_end
    ffffffee02481000 t sun4i_handle_irq
    
    # cat /proc/modules | head -5
    ...
    rmnet_offload 28672 0 - Live 0xffffffedb6e9b000 (O)
    rmnet_shs 159744 0 - Live 0xffffffedb7192000 (O)

    2. 为2时root用户也看不到符号地址

    # echo 2 > /proc/sys/kernel/kptr_restrict
    
    # cat /proc/kallsyms | head -10
    ...
    0000000000000000 t efi_header_end
    0000000000000000 t sun4i_handle_irq
    
    # cat /proc/modules | head -5
    rmnet_offload 28672 0 - Live 0x0000000000000000 (O)
    rmnet_shs 159744 0 - Live 0x0000000000000000 (O)

    参考:https://blog.csdn.net/gatieme/article/details/78311841

  • 相关阅读:
    如何找bug
    信号量
    带组装的测试
    Oracle的一些操作
    NPOI的操作
    初次认识 C# win32 api
    C# 通过Selecnuim WebDriver操作非IE浏览器
    DevExpress.chartControt画趋势图
    DevExpress.chartContro控件保存图片和打印图片
    SqlServer基础复习
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/16468019.html
Copyright © 2020-2023  润新知