-
-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
vm-existence confirmation attacks #2436
Comments
This is hard to do for one another case: when qrexec policy set to 'ask'. Some (IMO very bad) solution would be always showing some message - also For the case of whonix-ws (after fixing blocking error dialog), maybe @adrelanos any opinion? Best Regards, |
That's a clever solution. The downside is, of course, that it generates additional prompts for the user, and as @marmarek pointed out, we want to reduce them, not add more. On the other hand, these prompts would occur only once for each pair of VMs, so perhaps the benefits are worth the cost? I don't know. |
The more I think about it, the more I think it should be a combination of @marmarek's and @jpouellet's proposals: Create an a new "permission to know about existence" prompt, but only for Whonix VMs. Why? Because only Whonix VMs come with any guarantee of privacy in the first place. There are a thousand other side-channels that compromise the privacy of non-Whonix VMs, and our standard reply to all of those (for now, anyway) is: "If privacy is a concern, use a Whonix VM." |
I don't like the idea of special-casing dom0 policy a particular VM type. How do we even detect a whonix vm? By name? By name of proxyvm? By name of template of proxyvm? What if a user wants to change this? Do they suddenly lose guarantees that they don't know were being provided in the first place? If you really want to make a distinction between "can be known" and "can not be known", then let the user decide that with a configuration option or something. I'd say don't tie it to whonix. Perhaps I have some vault VM where I keep secret offline documents, and this vm is named something guessable and indicative of the contents of the documents. Sure, this is bad practice, but now we need to increase user education? I just don't think this is the right path forward. One dialog per edge seems like a small price to pay to me. |
In practice, I have ~40 VMs already, and only ~10 or so edges. Note that 10 << 40**2. However, I also often copy things from a DispVM back to the thing that launched that DispVM, so perhaps we wish to pre-authorize that case? |
The usability problem with your approach is it will fail the first I think better approach would be to configure it specifically for Whonix
Then, whonix VMs would have set tag 'privacy' set - for example by This of course is possible only in Qubes 4.0. Best Regards, |
I think having a privacy tag would be useful in general, but if the problem here is usability, then a privacy tag does not solve the problem.
This is true. I agree that this is undesired. I believe there is a way around this involving adding a blocking error dialog in the event of a deny match (which should not happen under normal circumstances, and an argument can be made in favor of wanting the user to know that either to warn them of attack or simply report a bug), but I need to more carefully enumerate and think through all cases before I am sure, and am definitely too tired to do so confidently at the moment. Still, this does not sound like the ideal solution. More radical proposal:In the case of copy/paste, and both source and destination are indicated to dom0 in a secure manner by which windows receive the copy/paste shortcuts, which is a direct path from user to dom0 without any opportunity for AppVM interference, and therefore (obviously) requires no confirmation dialog. (Ignoring focus stealing attacks for the sake of argument.) One thing I always found kind of odd was that other operations (file copy, etc) do not share the same secure user->dom0 path for target/destination vm indication. For any inter-vm operation, at some point the user needs to choose which vm it will come from and which vm it will go to. Doing so in an AppVM is inherently insecure, and this is why we have the dom0 "confirm" dialog in the first place. If instead, we move the target selection to dom0, then:
I believe this proposal would still be an improvement outside the context of this issue. tl;dr - have appvm say "i want to do this operation to some target", and dom0 specify "ok, this target" Thoughts? (perhaps this type of proposal belongs on the mailing list instead?) |
Maybe a short-term 95% solution could consist of a combination of a) tweaking the general a)
b) (Relevant for #2280)
"Don't use either of the following policy definitions if you want to keep the existence of secret-vm private:
Indeed. There's a ticket somewhere about somehow asking for the destination VM name in a dom0 popup for enhanced UX and privacy, but I can't find it... |
#910? |
@andrewdavidwong: That's it, thanks. Generalizing the copy-and-paste workflow as @jpouellet suggested sounds like it could be an amazingly fruitful approach. I'm thinking along the lines of:
In one swoop, this would get rid of:
|
That would be indeed good idea @jpouellet. I think the only missing part Best Regards, |
@rustybird Can you elaborate on how you suggest copy/paste might change? I was not going to touch the copy/paste workflow at all, rather I just brought it up as an example of securely identifying VMs.
I do not see this as a problem. I view them as different actions. Why do you think they should be unified?
IMO focus stealing is really a separate issue entirely which warrants its own solution, but regardless, I do not believe need a trusted keyboard shortcut to achieve focus-stealing attack mitigation in this particular case. Forcing the user to choose a VM (from dropdown, autocompleting text-field, etc.) in a way where any human-queued muscle memory input actions do not have an effect on the dialog just popped appears to me to be sufficient. Furthermore, not requiring a keyboard shortcut if not necessary seems like a better UX. |
@marmarek wrote:
Syntax for what exactly? I (perhaps naively) don't see any required changes. If you mean for explicit target being forbidden, I don't see why this could not simply interpret If you mean syntax for qrexec-client-vm, qvm-copy-to-vm, qvm-move-to-vm, qvm-open-in-vm, etc., then I suggest we just drop the vmname positional parameter (or more likely: keep it for backwards compat, but ignore it, and possibly deprecate |
Note that we should revisit the issue of vm-existence leakage when privacy-tagged whonix VMs become reality, and consider possibly some substitution of QREXEC_REMOTE_DOMAIN with a random unique-per-vm value. Except for QREXEC_REMOTE_DOMAIN, I now see this issue as effectively a duplicate of #910. |
Well, I kind of liked the general direction so much that I jumped straight ahead to an even more extreme version :), where copy-and-paste would be just a regular qrexec service. This still seems to me like it could somehow simplify the concept and implementation, but I see that I haven't thought it through enough yet. In particular the hypothetical "qrexec keyboard shortcut" couldn't really replace Ctrl-Shift-C in this case. Sorry for derailing! |
@rustybird Well, copy-and-paste is implemented as qrexec service ;) for HVM domains. But policy is evaluated for all the cases. With one specific difference: pressing Ctrl-Shift-V is assumed to confirm the call, even if policy says 'ask'. If you call @jpouellet not sure what to do with QREXEC_REMOTE_DOMAIN. Generally it is important in many cases. For example in file copy, you place files in directory named after source domain. This require being something easy for user (human) to parse. Random, unique, per-vm value is not... For other cases, moving discussion to #910. |
That sounds confusing. Imagine a user who has set it to ask but then when trying it does not actually ask. Seems like a bug to the user. Perhaps another option. What if VM does not exist or request is denied by policy, have qrexec wait a random amount of seconds to make it always looks like the user manually denied it? [That feature with the ability to opt-out. Opt-in by default.] |
On Thu, Nov 17, 2016 at 09:21:17AM -0800, Patrick Schleizer wrote:
I'm not proposing some magic, hidden option. I'm proposing changing
I don't think it will help much. Compromised VM can try to guess when Best Regards, |
Marek Marczykowski-Górecki:
Sounds good. I however see a usability issue. Would be hard then to copy That can be solved. In case of deny, perhaps show a one time popup. VM X tried Y. Request was refused. See link to documentation of this [ ] Do not show this popup again. OK Alternatively there could be a one time passive popup notification. |
It would be nice to try to prevent
whonix-ws
from confirming the existence of${workplace_name}-vault
(or similar).qrexec currently leaks such information in various ways, for example:
In this case the difference in time is quite obvious because it blocks while an error dialog is open in dom0, but there are many other more subtle side channels dependent on individual qrexec policies.
I think to solve this correctly it would need to be handled in a generic way by qrexec, independent of policy config. The path forward is to try to identify and normalize the qrexec-client-visible differences between rpc requests to VMs that don't exist vs ones that are unauthorized.
EDIT:
Note that we should revisit the issue of vm-existence leakage when privacy-tagged whonix VMs become reality, and consider possibly some substitution of QREXEC_REMOTE_DOMAIN with a random unique-per-vm value.
The text was updated successfully, but these errors were encountered: