Enable ARMv9 Memory Tagging Extension (MTE) on Pixel 8
outflux.net
outflux.net
> Stock Pixel OS has it as a developer option which isn't usable in practice since it breaks far too much. The implementation is also much less powerful than hardened_malloc.
> We integrated it into hardened_malloc where it's able to provide stronger security properties than the experimental stock OS implementation.
> When fully integrated into the compiler and each heap allocator, MTE enforces a form of memory safety. It detects memory corruption as it happens. 4 bit tags limit it to probabilistic detection for the general case, but deterministic guarantees are possible via reserving tags. In hardened_malloc, we deterministically prevent sequential overflows by excluding adjacent tags.
Also, currently it's not clear if it makes sense to enable kernel MTE:
> MTE support for protecting the Linux kernel isn't enabled yet, but we can likely enable that by default too. However, it's currently part of kasan and is more oriented towards debugging than hardening. It's not entirely clear that enabling it in the current state is a good idea.
To anyone using a Pixel: install and donate (if you can)!
The web installer[1] is basically a few clicks on a web page. So damned impressed.
Basically, where other privacy AOSP forks typically offer up to three choices...
- no Google at all
- root and install an extremely fragile FOSS alternative GPS implementation (MicroG)
- root and install the full Google Play Services binary blobs
... GrapheneOS offers option #4: you can install Google Play Services in a sandbox so that they still run, but they don't get root-level access to your system, instead they are treated the same as any other app (so e.g. you get to manage their access to location/storage/contacts etc.).
Note that you don't have to, it's just an option in the built-in Apps menu. I personally run GrapheneOS with no GPS at all in my main profile, and occasionally access my old Gmail/Gdrive accounts via web browser.
I never realized how many permissions the play store had, until I ran it under graphene.
[1] https://grapheneos.org/build#reproducible-builds
Secure -> It's code. There are no absolute guarantees. They have security enhancements on top of AOSP. So that's a rough proxy for what you should expect.
I saw @jchw stating some good point but seems most in this thread here got their head in the sand.
too much trust in a product/service that may be secure on the surface, never means it's actually secure;
I ended up installing lineageOS rooted and firewalling everything and uninstalling useless services...that's better than having a system that is being advertised as state of the art security.
How dl you think google feels if their main OS market is being taken by a "secure" alternative like Graphene OS, unless they both struck a deal or are working together behind closed doors?
I got a suspicion that there's something the lead Dev of Graphene Os is unrevealing to us...hence they put him on desk job like a rookie cop who came across some sh*t that the public shouldn't know...
Meanwhile noone can fully confirm what's inside the OEM signed blobs that are on Graphene OS and other components. What more the heavy suggestion for never rooting; when over 200k apps on the playstore are riddled with malware/spyware?
Why would a billion dollar coorp let such clumsy mistake happen? I am starting to trust the fdroid store over Googleplay (despite being unable to have access to other apps) due to the fact:
Fdroid it's community baded/ the ppl make the app out of purely enjoyment versus montary need.
I have pxl4xl and ended up uninstalling Graphene OS something feels off about it.
No company CEO/Lead Dev just have a public dispute digitally and never explain why and the very next moment they are claimed to have had a mental breakdown.
and the fact that people are asking sincere questions and are being ridiculed for it, even raises more red-flags...
Think about it;
it's 2023, people gotta start thinking for themselves, nothing seems as it awlays is based on surface exposure.
I started only using software/tools by individuals or teams where the morale or principles is non-political and is in alignment with what makes sense no matter where you apply it.
Reading your comment and the dead comment from the other guy, I can't actually tell what the grievance is. One of the lead devs stepped away from social media? Okay?
From what others have explained, graphene OS is fully open, has a number of provable security improvements over AOSP, and has notable improvements in controlling how apps access your device.
Some healthy skepticism in security software is fine. But I don't think there's anything to what you or the other person are saying. Is there a specific portion of the project, some specific lack of reproducibility in builds or some binary blob injection you're worried about? And if a minor personnel issue is enough to make you question an entire project, maybe you should buy a dumb phone with a Faraday cage, and run slackware on a Thinkpad.
> MTE provides a mechanism to detect both [spatial, temporal] categories of memory safety violation. MTE assists the detection of potential vulnerabilities before deployment by increasing the effectiveness of testing and fuzzing. MTE also assists detection of vulnerabilities at scale after deployment ... Memory locations are tagged by adding four bits of metadata to each 16 bytes of physical memory. This is the Tag Granule. Tagging memory implements the lock. Pointers, and therefore virtual addresses, are modified to contain the key.
https://security.googleblog.com/2019/08/adopting-arm-memory-...
> The ability of MTE to detect memory corruption exploitation at the first dangerous access is a significant improvement in diagnostic and potential security effectiveness. The availability of MTE on a production handset for the first time is a big step forward, and I think there's real potential to use this technology to make 0-day harder.
With root access, things can be persistently whitelisted on a per-app basis [2]:
su -c 'setprop persist.arm64.memtag.app.<package name> off'
or based on basename(argv[0]) [3]: su -c 'setprop persist.device_config.memory_safety_native.mode_override.process.<basename> off'
[1] https://googleprojectzero.blogspot.com/2023/11/first-handset...[2] https://cs.android.com/android/platform/superproject/main/+/...
[3] https://cs.android.com/android/platform/superproject/main/+/...
I would definitely advice anyone against enabling "Developer options" on your phone without having a good understanding what those options do. They are hidden and hard to access for a reason.
Such as animation speed. I hate _so much_ all the wobblyness of the GUI! Everything bouncing, sliding, and hovering around. Thankfully one can enable Developer options and set all that stuff to 0x, which effectively disables everything and now the system becomes crisp and instant, as it should be.
Another essential setting for saving much precious battery, is to not have the cellular data active at all times even when WiFi is active. If I come home and enable wifi, I do not want the cellular data to stay active too in the background. It's much better waiting the couple seconds it might take to switch networks, in exchange for some extra juice.
I just added my own tagging to my pointers. I have 48-bit pointers and 16-bit of tagging data.
I replaced all my struct { word type; char* data }; with something like (type << 48) | data. This saves a memory allocation and pointer indirection. It is much faster
So you have a decently sized chunk of RAM set aside for the tag table, more memory bandwidth used up by table lookups, and the cost of the actual tag checks.
Does x86 have something comparable?
AMD processors have Upper Address Ignore (UAI) with 7 bits of ancillary data, for Intel there is Linear Address Masking (LAM) with 6 or 15 bits [1]. The latter has made it into Linux after some initial resistance [2].
[1]: https://lwn.net/Articles/888914
[2]: https://www.phoronix.com/news/Intel-LAM-Merged-Linux-6.4
Currently x86 is the only mainstrem architecture without a plan for hardware memory tagging.
Even RISC-V has an ongoing discussion for hardware memory tagging extensions.
(Apple M3 is ARMv8.x, with X being 4 or 6 depending on who you ask)
(site seems dead)
This allows to assign tag to each memory allocation. And subsequent accesses to the same memory area must be made with a pointer having a correct tag.
This page explains it pretty well: https://msrc.microsoft.com/blog/2022/01/an_armful_of_cheris/