I don't like that viewpoint.
While that's technically the truth, it doesn't represent the actual state of events. 99%, and probably 99,9% don't use their devices responsibly. And then companies that bare no responsibility for the actual hack still suffer PR damage, because journalists don't report responsibly too.
For example, take the story from a little while back about how Gmail add-ons could access your messages. Any programmer looks at that situation, and they think, "Duh... OF COURSE an add-on could access your data, because how else on earth could it possibly work?"
But a non-programmer doesn't think this way. They think, "Gmail is a platform and a service that I use, which is run by somebody that I'm supposed to be able to trust to handle all that stuff for me. They ought to reason through all these things before they offer it to me." They very well may not have a good enough understanding about how software works to reason through the implications like we can. It isn't self-evident to them where your data goes and what will happen to it if you do this or that. moreover, Gmail (and tech generally) isn't the center of their universe, and they may not realize these add-ons come from a third party or may assume a certain level of vetting would be done if they do.
Whether this expectation is right is one question. In theory people ought to take responsibility for their own choices.
But putting that question aside for the moment, when designing a product, we ought to never forget that many users lack either the knowledge or the inclination to think through all this. You're building a product that you're going to hand over to users, and a lot of users, maybe even the majority of them, are going to approach it this way. I don't have a great solution to offer, but blindly assuming that all users are knowledgeable certainly isn't the right path.
It was completely impossible to explain to him the technical background (e.g. that him sending an email through the program and the program sending an email by itself is technically the same thing for Gmail) and he wouldn't accept that Google is quite rightly informing him about the implications (Google should change the text to say it only allows him to send emails).
As you said he expected Google to give him technically impossible guarantees and handle that the third party software can't do anything without him confirming it.
So I do understand Apple's approach. Unfortunately, Apple muddies the waters by mixing up security protections with their own business interests and the interests of authoritarian regimes. To a degree I fear this is unavoidable.
I think the best solution is to have that very restrictive app store that you can trust to vet things for you, but in addition to that they should permit side-loading for apps and content that you have to vet yourself or rely on a third party vetting system.
When we realize that many exploits can mean that devices get co-opted by bad actors to serve some rather nefarious purposes, we have to do more than "trust that the user will be smart" in order to suppress dangerous or economically destructive criminal uses of these devices
More and more I realize that it's not our strategies that I dislike, it's how incompetent and error-prone users actually are. If we were perfect users, none of this would be required.
But staying in a single apartment for the whole life is not healthy for most people or society. Modern computing grew because people were able to build and experiment on things way beyond what the original manufacturers of hardware envisioned. Even if that gave some people Windows viruses.
It's like saying "quarantine is pointless in my rural village of 29 people, so therefore it's also pointless in my city of nine million"
"It seems that you are using a screen reader or something else that uses the Accessibility services. If you have no idea what this is, do not continue past this screen. The below buttons will be enabled in 30 seconds [I know what is happening] [This doesn't sound familiar, exit]"
(Of course it only appears when you actually have something subscribed into the accessibility services, which is how I found out) Yes, it's inconvenient, but forces you to actually read the message instead of blindly barging through Accept Accept Accept.
And how does this actually prevent abuse? Wouldn’t malware happily wait 30 seconds and click “yes”? And if the dialog isn’t accessible to the screen reader, doesn’t it then exclude some users entirely?
So actually that's not how it works. If it was just reading the screen it would only get a single OTP password which is only valid for up to 60 seconds.
The trojan is actually tricking user to enable accessibility privileges. Those privileges give the trojan ability to control the phone. With this privileges it actually can navigate settings and grant itself other permissions.
I suspect that with authenticator it can navigate and extract a private key somehow. I don't know how it's doing, because I don't see an option in the UI to obtain such key. So perhaps it is still somehow exposed to accessibility application but not the user. Or the report makes it look worse than it is and only talks about the one time code (it is not clear).
Anyway the real issue though is that accessibility is giving app full access to the phone. Restricting that though would affect accessibility, I believe Android though should make such accessibility request more scary.
I think the fatal flaw there is maybe allowing an app to prompt the user to enable accessibility settings. Although it is still not as terrible, an app can only send the user to the right setting page, but it can write whatever it wants in the description of the app (typically they say why they need the setting). The only warning from android is when you're about to enable the setting, but that warning is very dry, it lists the permissions, and some description for them. It doesn't seem to distinguish more scary ones from less scary ones. It also conflates them.
For example I have app called "back button" which basically emulates a back button (actually also other buttons), quite useful when it is broken. Though the only permission the app is requesting is "observe your actions (receive notifications when you're interacting with an app)" it doesn't say anywhere that it is more than that, the app actually can emulate pressing various buttons and nothing like that is even mentioned.
[1] https://www.threatfabric.com/blogs/cerberus-a-new-banking-tr...
Not sure if possible, but perhaps the authenticator app could detect that accessibility mode is on, and refuse to show the codes? (or at least do it behind a warning?)
Also, I think the trojan app would need to ask for accessibility permission from the user to be able to read other apps' text?
Whether or not it should use its own text to speech depends on whether or not you need to worry about malware subverting the system wide text to speech system.
If it does use its own text to speech, it might be possible for it to just use the system text to speech system on install to do generate speech for the 10 digits and save that, and use those recordings for speaking codes.
That avoids having to worry about system text to speech compromises except during authenticator app installation so is probably almost as safe is including a dedicated text to speech system, an ensures that they can handle all languages that the system text to speech can handle.
Redirecting all output to a single mono headphone is really important, and most users who use talkback adjust the speed and how things are spoken to better suit them.
And it still doesn't solve the problem, as accessibility services can still tap into the audio output and run speech-to-text to get the codes back still accomplishing the same exact thing.
But how about the first part of my suggestion, which was to have whether or not accessibility features are used in the authenticator app controlled by a setting in the app separate from the system wide settings?
For people not needing accessibility, at least, and so have it off both system wide and in the authenticator app they would be protected. A rogue app getting system wide accessibility access would still not get access to the authenticator.
[1] The system might have to support two independent sets of accessibility privileges and settings, one for most apps and one for security apps, with severe restrictions on what regular apps can do when a security app is running.
Couldn't the accessibility app just approve the warning? Otherwise how would blind users do it?
Why are 3rd party apps needed for accessibility ? How about Google take accessibility serious and make the OS accessible without expecting others to pick up the slack ? An API with this kind of far reaching access shouldn't even need to exist.
Google undoubtedly has the resources to build say, Android for Blind People. But it's not realistic to expect Android for this one guy who can twitch his nose, but is otherwise paralysed; or Android for the woman whose brain can't process shapes properly.
By enabling a generic Accessibility feature it doesn't close the door to anybody. If you can adapt it, or get anybody else to adapt it, to be accessible to you then this feature will help you get that done. To do that it's enormously powerful, which means bad guys with this permission can take over your phone.
Android doesn't support this, so a workaround is to use the accessibility service. The trade-off is having to grant all those permissions. You can also open the app directly and copy-paste, but that's a lot more extra steps. The killer features for password managers are that they're both more secure AND quick/convenient.
You can block accessibility from the specific field of the OTP app, if you also have a system framework that retrieves exactly the contents of that field into your paste buffer when you interact with a privileged UI element (i.e. the keyboard-UI “autofill 2FA” accelerator.)
(See also: accessibility of elevation prompts in Windows.)
In the former case, you just call your app SuperLegitScreenReader, prompt the user to grant accessibility access, and then snarf up data. Bonus points if you bundle in some open source or pirated screen reader code so your app can act the part, but you could probably just say “fetching reader data, screen reading will be functional in ~60 minutes” and count on most users to not bother uninstalling the app or revoking permissions.
In the latter case, you call your app “CandyNinjaBirds”, and have it pop up and say “to let you share cute stickers to your friends, you need to enable accessibility access” and count on the vast majority of people to click “allow”.
The latter case is way more common because the former case limits your target audience to people who actually want a screen reader.
True - but you can make accessibility access an opt-in feature. I hate phrasing it like that. But a piece of security software should allow people to disable accessibility features when they aren't needed.
It already is. You have to explicitly go and enable it per requesting program in the system settings.