Android手机 未root时 文件的selinux权限 违反策略的操作拒绝日志查看办法

研究查看selinux日志记录的原因

在安卓10的一个手机上,用ls -l查看一个目录,却发现部分文件aaaa,显示ls: aaaa: Permission denied

或者

-rwxr-xr-x  20 0    0    5.8K 2024-02-12 10:44 bbbb

-?????????   ? ?    ?       ?                ? aaaa

文件的权限 所有组 组 修改时间 都是问号(https://github.com/landley/toybox/commit/c26870dab3462c6176936384b090df6b9ba46dee 这个commit修改的)

 

而su获取root权限后,再次ls,发现

-rwxr-xr-x  20 0    0    5.8K 2024-02-12 10:44 bbbb

-rwxr-xr-x  20 0    0    5.8K 2024-02-12 10:44 aaaa

即aaaa和bbbb的rwx权限明明是一样的,aaaa就是老显示问号

 

还有一个特征是,aaaa和bbbb在同一个目录里,但是只有aaaa显示问号,bbbb正常

如果都显示问号,可能是只有该目录的r权限而没有x权限导致的

 

搜查看selinux日志的方法,很多软件都是Android上用不了的,都是一些其它的发行版Ubuntu、CentOS、Redhat才能用的

 

 

 

 

getenforce

 获取当前SELinux状态

cas:/ $ getenforce
Enforcing

setenforce

setenforce 1 设置为Enforcing

setenforce 0 设置为Permissive

 

查看文件和目录(和进程)的SELinux安全上下文

ls -Z

-Z, --context                   打印文件的安全上下文

cas:/ $ ls -Z /system/xbin
ls: /system/xbin/qadaemon: Permission denied
ls: /system/xbin/shelld: Permission denied
ls: /system/xbin/mqsasd: Permission denied
ls: /system/xbin/miuibooster: Permission denied
ls: /system/xbin/system_perf_init: Permission denied
u:object_r:system_file:s0 antradio_app u:object_r:system_file:s0 miuioneshots (身份字段:角色:类型:灵敏度:[类别])
cas:/ $ /data/local/tmp/toybox-aarch64 ls -Z /system/xbin
? antradio_app ? miuibooster ? miuioneshots ? mqsasd ? qadaemon ? shelld ? system_perf_init

这里,好像toybox-aarch64和系统自带的ls的权限还不一样?

 

cas:/ $ seinfo
/system/bin/sh: seinfo: inaccessible or not found

cas:/ $ sesearch
/system/bin/sh: sesearch: inaccessible or not found

cas:/ $ sestatus
/system/bin/sh: sestatus: inaccessible or not found

 

audit2allow

access vector cache (AVC)

 

 

访问权限拒绝日志

dmesg

可以查看日志,但是没有root权限不能用,会显示

cas:/ $ dmesg
dmesg: klogctl: Permission denied

https://android.stackexchange.com/questions/218223/how-to-fix-dmesg-klogctl-permission-denied-for-normal-user-on-android

试了下logcat -b kernel 什么都不输出

dmesg指令打印的内容只与kernel相关,它的log源于内核缓冲区。可以用来调试内核相关的驱动程序。一般查看内核启动相关的信息,如驱动信息,硬件相关的初始化信息等这些使用dmesg指令。

logcat指令是安卓系统的专用指令,打印的内容只与应用程序相关,也就是只打印用户态的log信息

logcat

查看备用日志缓冲区

Android 日志记录系统为日志消息保留了多个环形缓冲区,而且并非所有的日志消息都会发送到默认的环形缓冲区。如要查看其他日志消息,您可以使用 -b 选项运行 logcat 命令,以请求查看备用的环形缓冲区。您可以查看下列任意备用缓冲区:

  • radio:查看包含无线装置/电话相关消息的缓冲区。
  • events:查看已经过解译的二进制系统事件缓冲区消息。
  • main:查看主日志缓冲区(默认),不包含系统和崩溃日志消息。
  • system:查看系统日志缓冲区(默认)。
  • crash:查看崩溃日志缓冲区(默认)。
  • all:查看所有缓冲区。
  • default:报告 mainsystem 和 crash 缓冲区。
  • kernel :如果属性ro.logd.kernel设置为true(可调试版本上的默认值),Android 的日志守护进程 ( logd ) 将内核消息写入名为kernel的单独缓冲区,可以使用logcat读取该缓冲区(不需要 root):

     

    ~$ logcat -b kernel

 

adb shell su root dmesg | grep 'avc: '

logcat | grep 'avc'

02-14 22:48:54.648 3094 3094 W ls : type=1400 audit(0.0:1932474): avc: denied { getattr } for path="/system/xbin/miuibooster" dev="dm-4" ino=6310 scontext=u:r:shell:s0 tcontext=u:object_r:miuibooster_exec:s0 tclass=file permissive=0

  • 02-14 22:48:54.648 是事件发生的时间戳,表示事件发生在2 月 14 日 22:48:54.648。
  • 3094 3094 是进程的ID,表示事件发生时,进程的ID为 3094。
  • W 表示这是一个警告级别的日志。
  • ls 是进程的名字,表示事件发生时的进程名为 ls
  • type=1400 表示事件的类型,具体含义需要参考Android的安全审计日志类型定义。
  • audit(0.0:1932474) 表示审计事件的序号,用于标识事件在审计日志中的顺序。
  • avc: denied { getattr } for path="/system/xbin/miuibooster" dev="dm-4" ino=6310 scontext=u:r:shell:s0 tcontext=u:object_r:miuibooster_exec:s0 tclass=file permissive=0 是事件的具体描述,包含了发生的事件、权限拒绝的操作、受影响的路径、设备信息、安全上下文等详细信息。
    • avc: denied { getattr } 表示权限被拒绝的操作是 getattr,即获取文件属性。
    • path="/system/xbin/miuibooster" 表示受影响的文件路径是 /system/xbin/miuibooster
    • dev="dm-4" 表示文件所在的设备是 dm-4。(/dev/block/dm-4)
    • ino=6310 表示文件的inode号为 6310。
    • scontext=u:r:shell:s0 表示发起操作的进程的安全上下文。
    • tcontext=u:object_r:miuibooster_exec:s0 表示目标文件的安全上下文。
    • tclass=file 表示目标对象的类型是文件。
    • permissive=0 表示系统当前的 SELinux 模式为严格模式,不允许该操作。

 

logd

logd是日志系统的核心,开机时由init进程启动,在系统后台持续运行。logd维护了一个RAM buffer, 作为日志的缓存。各个进程的日志都会写入这个RAM buffer。如果日志写入过多,会删除最老的日志,删除算法类似于ring buffer的逻辑。

native bin

  在native 层,安卓提供了一个/system/bin/logcat native 命令行程序,作为一个统一的客户端通信进程。开发者通过 adb logcat 相关指令可以读日志或者给logd发送指令。

Linux 内核的审核系统可以记录进程所做的任何系统调用或文件系统更改。Linux 发行版有一个服务auditd,它与内核通信以获取有关安全相关事件的信息。在 Android 上,我们已经有logd,虽然不像auditd那样可配置,但足以进行基本监控。logd主要涵盖其桌面版本syslogd的功能,还包括klogd和部分auditd,以从内核的 SELinux 子系统获取日志。

posted @ 2024-02-14 21:33  hrdom  阅读(129)  评论(0编辑  收藏  举报