| Title: Introduction to GrapheneOS | |
| Author: Solène | |
| Date: 12 January 2025 | |
| Tags: android security privacy | |
| Description: In this blog post, you will learn about the security | |
| oriented smartphone operating system GrapheneOS | |
| # Introduction | |
| This blog post is an introduction to the smartphone and security | |
| oriented operating system GrapheneOS. | |
| GrapheneOS official project web page | |
| Thanks to my patrons support, last week I have been able to replace my | |
| 6.5 years old BQ Aquaris X which has been successfully running Lineage | |
| OS all that time, by a Google Pixel 8a now running GrapheneOS. | |
| Introducing GrapheneOS is a daunting task, I will do my best to present | |
| you the basics information you need to understand if it might be useful | |
| for you, and let a link to the project FAQ which contains a lot of | |
| valuable technical explanations I do not want to repeat here. | |
| GrapheneOS FAQ | |
| # What is GrapheneOS? | |
| GrapheneOS (written GOS from now on) is an Android based operating | |
| system that focuses security. It is only compatible with Google Pixel | |
| devices for multiple reasons: availability of hardware security | |
| components, long term support (series 8 and 9 are supported at least 7 | |
| years after release) and the hardware has a good quality / price ratio. | |
| The goal of GOS is to provide users a lot more control about what their | |
| smartphone is doing. A main profile is used by default (the owner | |
| profile), but users are encouraged to do all their activities in a | |
| separate profile (or multiples profiles). This may remind you about | |
| Qubes OS workflow, although it does not translate entirely here. | |
| Profiles can not communicate between each others, encryption is done | |
| per profile, and some permissions can be assigned per profile | |
| (installing apps, running applications in background when a profile is | |
| not used, using the SIM...). This is really effective for privacy or | |
| security reasons (or both), you can have a different VPN per profile if | |
| you want, or use a different Google Play login, different applications | |
| sets, whatever! The best feature here in my opinion is the ability to | |
| completely stop a profile so you are sure it does not run anything in | |
| the background once you exit it. | |
| When you make a new profile, it is important to understand it is like | |
| booting your phone again, the first log-in with the profile you will be | |
| asked questions like if you started the system for the first time. All | |
| settings have the defaults values, and any change is limited to the | |
| profile only, this includes ringtones, sound, default apps, themes… | |
| Switching between profile is a bit painful, you need to get the top to | |
| bottom dropdown menu at full size, then tap the bottom right corner | |
| icon and choose the profile you want to switch to, and tap the PIN of | |
| that profile. Only the owner profile can toggle important settings | |
| like 4G/5G network, or do SIM operations and other "lower level" | |
| settings. | |
| GOS has a focus on privacy, but let the user in charge. Google Play | |
| and Google Play Services can be installed in one click from a dedicated | |
| GOS app store which is limited to GOS apps only, as you are supposed to | |
| install apps from Google Play, F-droid or Accrescent. Applications can | |
| be installed in a single profile, but can also be installed in the | |
| owner profile which lets you copy it to other profiles. This is | |
| actually how I do, I install all apps in the user profile, I always | |
| uncheck the "network permission" so they just can't do anything, and | |
| then I copy them to profiles where I will use it for real. There is no | |
| good or bad approach, this fits your need in terms of usability, | |
| privacy and security. | |
| Just to make sure it is clear, it is possible to use GOS totally Google | |
| free, but if you want to use Google services, it is made super easy to | |
| do so. Google Play could be used in a dedicated profile if you ever | |
| need it once. | |
| # Installation and updates | |
| The installation was really simple as it can be done from the web page | |
| (from a Linux, Windows or macOS system), by just clicking buttons in | |
| the correct order from the installation page. The image integrity | |
| check can be done AFTER installation, thanks to the TPM features in the | |
| phone which guarantees the boot of valid software only, which will | |
| allow you to generate a proof of boot that is basically a post-install | |
| checksum. (More explanations in GOS website). The whole process took | |
| approximately 15 minutes between plugging the phone to my computer and | |
| using the phone. | |
| It is possible to install from the command line, I did not test it. | |
| Updates are 100% over-the-air (OTA), which mean the system is able to | |
| download updates over network. This is rather practical as you never | |
| need to do any adb command to push a new image, which have always been | |
| a stressful experience for me when using smartphones. GOS | |
| automatically download base system updates and offer you to reboot to | |
| install it, while GOS apps will just be downloaded and update in place. | |
| This is a huge difference from LineageOS which always required to | |
| manually download new builds, and applications updates were parts of | |
| the big image update. | |
| # Permission management | |
| A cool thing with GOS is the tight controls offered over applications. | |
| First, this is done by profile, so if you use the same app in two | |
| profiles, you can give different permissions, and secondly, GOS allows | |
| you to define a scope to some permissions. For example, if an | |
| application requires storage permission, you can list which paths are | |
| allowed, if it requires contacts access, you can give a list of | |
| contacts entries (or empty). | |
| GOS Google Play installation (which is not installed by default) is | |
| sand-boxed to restrict what it can do, they also succeeded at | |
| sand-boxing Android Auto. (More details in the FAQ). I have a | |
| dedicated Android Auto profile, the setup was easy thanks to the FAQ | |
| has a lot of permissions must be manually given for it to work. | |
| GOS does not allow you to become root on your phone though, it just | |
| gives you more control through permissions and profiles. | |
| # Performance | |
| I did not try CPU/GPU intensive tasks for now, but there should be | |
| almost no visible performance penalty when using GOS. There are many | |
| extra security features enabled which may lead to a few percent of | |
| extra CPU usage, but there are no benchmark and the few reviews of | |
| people who played high demanding video games on their phone did not | |
| notice any performance change. | |
| # Security | |
| GOS website has a long and well detailed list of hardening done over | |
| the stock Android code, you can read about them on the following link. | |
| GrapheneOS website: Exploitation Protection | |
| # My workflow | |
| As an example, here is how I configured my device, this is not the only | |
| way to proceed, so I just share it to give the readers an idea of what | |
| it looks like for me: | |
| * my owner profile has Google Play installed used to install most apps. | |
| All apps are installed there with no network permission, then I copy | |
| them to the profile that will use the applications. | |
| * a profile that looks like what I was doing in my previous phone: | |
| allowed to phone/SMS, web browser, IM apps, TOTP app. | |
| * a profile for multimedia where I store music files, run audio players | |
| and use Android Auto. Profile is not allowed to run in background. | |
| * a profile for games (local and cloud). Profile is not allowed to run | |
| in background. | |
| * a "other" profile used to run crappy apps. Profile is not allowed to | |
| run in background. | |
| * a profile for each of my clients, so I can store any authentication | |
| app (TOTP, Microsoft authenticator, whatever), use any app required. | |
| Profile is not allowed to run in background. | |
| * a guest profile that can be used if I need to lend my phone to | |
| someone if they want to do something like look up something on the | |
| Internet. This profile always starts freshly reset. | |
| After a long week of use, I came up with this. At first, I had a | |
| separate profile for TOTP, but having to switch back and forth to it a | |
| dozen time a day was creating too much friction. | |
| # The device itself | |
| I chose to buy a Google Pixel 8a 128 GB as it was the cheapest of the 8 | |
| and 9 series which have a 7 years support, but also got a huge CPU | |
| upgrade compared to the 7 series. The device could be bought at 300€ | |
| on second hand market and 400€ brand new. | |
| The 120 Hz OLED screen is a blast! Colors are good, black is truly | |
| black (hence dark themes for OLED reduce battery usage and looks really | |
| great) and it is super smooth. | |
| There is no SD card support, which is pretty sad especially since | |
| almost every Android smartphone support this, I guess they just want | |
| you to pay more for storage. I am fine with 128 GB though, I do not | |
| store much data on my smartphone, but being able to extend it would | |
| have been nice. | |
| The camera is OK, I am not using it a lot and I have no comparison, | |
| from reviews I have read they were saying it is just average. | |
| Wi-Fi 6 works really fine (latency, packet loss, range and bandwidth) | |
| although I have no way to verify its maximum bandwidth because it is | |
| faster than my gigabit wired network. | |
| The battery lasts long, I use my smartphone a bit more now, the battery | |
| approximately drops by 20% for a day of usage. I did not test charge | |
| speed. | |
| # Conclusion | |
| I am really happy with GrapheneOS, I finally feel in control of my | |
| smartphone and I never considered it a safe device before. I never | |
| really used an Android ROM from a manufacturer or iOS, I bet they can | |
| provide a better user experience, but they can not provide anything | |
| like GrapheneOS. | |
| LineageOS was actually ok on my former BQ Aquaris X, but there were | |
| often regressions, and it did not provide anything special in terms of | |
| features, except it was still having updates for my old phone. | |
| GrapheneOS on the other hand provides a whole new experience, that may | |
| be what you are looking for. | |
| This system is not for everyone! If you are happy with your current | |
| Android, do not bother buying a Google Pixel to try GOS. | |
| # Going further | |
| The stock Android version supports profiles (this can be enabled in | |
| system -> users -> allow multiple users), but there is no way to | |
| restrict what profiles can do, it seems they are all administrators. I | |
| have been using this on our Android tablet at home, it is available on | |
| every Android phone as well. I am not sure if it can be used as a | |
| security feature as this. |