是否有支持默认内核功能的Google设备?


14

如果我无系统根目录(未对/system分区进行任何修改)Nexus设备,是否能够在不更改原始内核二进制文件的情况下在可执行文件上设置功能

我经常想不受终端限制地管理文件(需要CAP_DAC_READ_SEARCH。但是,我也不想使用超级用户。
必需的东西是用来设置内核支持上限以使用它们的工具(它不依赖于其他用户空间的东西)

问题是,我没有这样的设备。因此,我无法确定它是否适用于任何一个Nexus 5X Nexus 6P Nexus 9 Pixel C


2
我也找不到
连结

我对此表示怀疑...由于Android使用的是Bionic libc,而不是标准的GNU libc(glibc)库,因此它甚至与POSIX兼容。您也许可以使用像CrystaX NDK这样的不同libc而不是Bionic来编译自己的内核,但是我不知道这些功能是否也包含其中。
acejavelin

@acejavelin:仅在设置包含功能的扩展属性时才需要userland部分。其他一切都是内核方面的。我只是注意到/system/bin/ping命令提示我的实际三星设备上不是setuid CAP_NET_RAW。但是,我不会在实际设备上使用root身份,也不知道可以使用哪个工具查看相关信息,因此无法检查。
user2284570

为什么不启动Nexus设备?它仅用于此目的,不会使您的保修无效。将任何Nexus设备还原到默认状态,非root用户和锁定状态非常简单,该设备基本上是不可固定的。
acejavelin

@acejavelin:我不拥有一个Nexus设备……我的目标是进行安全研究,而Google只为它自己的设备提供奖励。因此,我需要知道问题中设备之一的内核是否支持使用xattr功能。我在银河选项卡上看到的内容可能仅与三星有关。如果我不涉及我的问题,可能会以不清楚的方式结束
user2284570

Answers:


1

尽管问题很旧,但问题始终出现在“ 未回答(我的标签)”问题之上。所以我认为我应该回答这个问题:)

AOSP的功能支持:

问题专门针对Google设备,我从未使用过Google设备。但是我可以肯定地说的是,大多数运行于Android 1.6以下版本的设备(如果不是全部)必须已启用Linux(进程)功能。可以在init和中找到参考system_server,这两个都是AOSP的非常主要的组成部分。例如,在Android 4.2中,installd-另一个核心组件-可以在已删除的功能下运行。

文件系统功能Android 4.3中的主要安全增强功能之一,该功能set-uid/ 删除set-gid了二进制run-as文件,并在其中设置了文件功能。这引起了Android生根历程的革命性变化

在Android 8中添加了对环境功能的支持,这不鼓励使用文件功能:

反过来,文件功能会带来安全风险,因为执行具有文件功能的文件的任何进程都将能够获得这些功能。

许多init服务都依赖于它们,例如storaged,包括我自己的服务sshddnscrypt-proxy服务。

内核对功能的支持:

谈到内核部分,构建没有功能的内核不是可选的:

从内核2.5.27到内核2.6.26,功能是可选的内核组件,可以通过CONFIG_SECURITY_CAPABILITIES内核配置选项启用/禁用。

和:

在Linux 2.6.33之前的内核中,文件功能是一个可选功能,可以通过CONFIG_SECURITY_FILE_CAPABILITIES选项进行配置。从Linux 2.6.33开始,已删除了配置选项,并且文件功能始终是内核的一部分。

在Android库最古老的通用内核版本2.6.39是其中包含文件功能的支持了。

某些OEM 必须延迟了对内核端文件系统功能的支持,但他们必须切换,因为否则功能会中断。例如,自Android 7.1起,surfaceflinger(Android的Surface Composer)如果没有文件功能将无法运行。

Mainline Linux内核4.3于9月15日针对Ambient(进程)功能进行了修补,并于2016年向后移植到Android内核3.18和4.1。因此它们必定是内核的一部分。

结论:

在Linux发行版中,很少有程序使用Linux功能。虽然有pam_cap,大多(或全部?)的发行版仍然使用set-uidsusudopingmountpasswd等。但是在Android上,功能已深深集成在框架和核心服务中。删除它们将需要在AOSP和内核源代码中编辑数百行或数千行。OEM(尤其是Google,它开发了AOSP并为Android修改了Linux内核)毫无意义,而没有在Android内核中立即可用的免费安全功能,这是没有道理的。它是与OS相关的纯粹功能,不需要任何额外的硬件支持。因此,来自任何制造商的任何电话都必须具有支持的功能。


问题:

我是否能够在不更改原始内核二进制文件的情况下在可执行文件上设置功能?

是的,你一定是。

必需的东西是设置上限的工具...

我一直在用capshgetcapsetcapgetpcapslibcapnetcappscaplibcap-ng没有任何问题。但是我更喜欢Ambient功能,这些功能易于配置,并且不像文件功能那样依赖任何文件系统功能,例如扩展属性。你也可以使用listxattrgetxattrsetxattrremovexattr从工具xattr_syscall_wrapper操纵security.capability或任何其他XATTR直接。

根据您的评论:

我只是注意到该/system/bin/ping命令不在setuid我真正的三星设备上,提示CAP_NET_RAW

Android的ping既没有也set-uid没有CAP_NET_RAW。它创建了一个特殊的非RAW套接字IPPROTO_ICMP,与之不同的IPPROTO_RAW是,该套接字不需要任何特权。


更多参考资料:

除了上面给出的10多个参考,这里还有AOSP代码的其他一些部分,它们支持和利用Linux功能:

  • 核心组件:仿生libcinittrusty(OS)
  • 外部部件: libcaplibcap-ng
  • 守护程序/服务: zygote(分叉的应用程序和system_server), ,hostapdwpa_supplicantdnsmasq,(logd 经理,私人DNS), (测试),守护,,,,(PERFETTO),性(IPSec) ,若干HAL守护进程,包括。netdNetLinkdebuggerdsdcardperformancedincidentdmtpdtraced_probesracoonwificondrild
  • 可执行文件: reboot(INIT), , ,dumpstate,(tcpdump , 等)straceiputilspingtraceroute
  • Minijail:专用于功能的沙盒工具和库。adbd利用此库来放弃特权。
  • SELinux使用capability类来授予/拒绝域功能。

结论是,Android高度依赖Linux功能,这不是一个很少使用的功能。


有关:


根本不回答任何事情。您所说的一切都是已知的。问题的关键是,因为它很少使用,是否包括Google品牌的设备在内。
user2284570
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.