Showing posts with label general. Show all posts
Showing posts with label general. Show all posts

Tuesday, December 13, 2011

Trusted Execution In Untrusted Cloud


Wouldn't it be nice if we could actually own our data and programs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud? By “owning” here I mean to have control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir confidentiality and integrity. When it comes to confidentiality and integrity for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data, it's not much of a rocket since, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 classic crypto (and secure client systems) is all that we need. I have already wrote about it in an earlier post.
But it would also be nice, if we could somehow get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same confidentiality and integrity assurance for our programs that we upload for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 execution in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud...

For example, a company might want take cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir database application, that deal with all sorts of corporate critical sensitive data, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n upload and safely run this application on e.g. Amazon's EC2, or maybe even to some China-based EC2-clone. Currently there is really nothing that could stop cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 provider, who has a full control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor under which our application (or our VM) executes, from reading cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contents of our process' memory and stealing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 secrets from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. This is all easy stuff to do from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technical point of view, and this is also not just my own paranoia...


Plus, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 usual concerns, such as: is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 infrastructure of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud provider really that safe and secure, as it is advertised? How do we know nobody found an exploitable bug in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor and was not able to compromise ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r customer's VMs from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker-hired VM? Perhaps cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same question applies if we didn't decided to outsource cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps to a 3rd party cloud, but in case of a 3rd party clouds we really don't know about what measures have been applied. E.g. does cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 physical server on which my VMs are hosted also used to host some foreign customers? From China maybe? You get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point.

Sometimes all we really need is just integrity, e.g. if we wanted to host an open source code revision system, e.g. a git repository or a file server. Remember cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel.org incident? On a side note, I find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Jonathan Corbet's self-comforting remarks on how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was really nothing to worry about, to be strikingly naive... I could easily think of a few examples of how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker(s) could have exploited this incident, so that Linus & co. would never (not soon) find out. But that's anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r story...

But, how can one protect a running process, or a VM, from a potentially compromised OS, or a hypervisor/VMM?

To some extent, at least cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365oretically, Intel Trusted Execution Technology (TXT), could be used to implement such protection. Intel TXT can attest to a remote entity, in that case this would be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud customer, about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor (or kernel) that has been loaded on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 platform. This means it should be possible for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to know that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud provider uses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 unmodified Xen 4.1.1 binary as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor and not some modified version, with a built-in FBI backdoor for memory inspection. Ok, it's a poor example, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Xen architecture (and any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r commercially used VMM) allow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 administrator who controls Dom0 (or equivalent) to essentially inspect and modify all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system, also that belonging to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r VMs, and no special backdoors in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor are needed for this.

But let's assume hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tically that Xen 5.0 would change that architecture, and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Dom0 would not be able to access any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r VM's memory anymore. Additionally, if we also assumed that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Xen hypervisor was secure, so that it was not possible to exploit any flaw in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervior, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we should be fine. Of course, assuming also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re were also no flaws in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TXT implementation, and that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMM was properly sandboxed, or that we trusted (some parts of) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BIOS (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are really complex problems to solve in practice, but I know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is some work going on in this area, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is some hope).

Such a TXT-bases solution, although a step forward, still requires us to trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud provider a bit... First, TXT doesn't protect against bus-level physical attacks – think of an attacker who replaces cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DRAM dies with some kind of DRAM emulator – a device that looks like DRAM to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host, but on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r end allows full inspection/modification of its contents (well, ok, this is still a bit tricky, because of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lack of synchronization, but doable).

Additionally for Remote Attestation to make any sense, we must somehow know that we “talk to” a real TPM, and not to some software-emulated TPM. The idea here is that only a “real” TPM would have access to a private key, called Endorsement Key, used for signing during Remote Attestation procedure (or used during cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 generation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AIK key, that can be used alternatively for Remote Attestation). But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n again who generates (and so: owns) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private endorsement keys? Well, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TPM manufacturer, that can be... some Asian company that we not necessarily want to trust that much...

Now we see it would really be advantageous for customers, if Intel decided to return to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 practice of implementing TPM internally inside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y did in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir Series 4 chipsets (e.g. Q45). This would also protect against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 LCP bus-level attacks against TPM (although somebody told me recently that TPM in current systems cannot be so easily attacked from LCP bus, because of some aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication protocol being used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re – I really don't know, as physical attacks have not been cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 area we ever looked at extensively; any comments on that?).

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n again, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem of DRAM content sniffing always remains, although I would consider this to be a complex and expensive attack. So, it seems to me that most governments would be able to bypass such TXT-ensured guarantees in order to “tap” cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's programs executing in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud provides that operate within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir jurisdictions. But at least this could stop malicious companies from staring up fake cloud services with an intent to easily harvest some sensitive data from unsuspecting users.

It seems that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only way to solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above problem of DRAM sniffing attacks is to add some protection at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor level. We can imagine two solutions that processor vendors could implement:

First, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could opt for adding an in-processor hardware mechanism for encrypting all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data that leave cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor, to ensure that everything cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 is kept in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DRAM is encrypted (and, of course, also integrity-protected), with some private key that never leave cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor. This could be seen as an  extension to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Intel TXT.

This would mean, however, we still needed to relay on: 1) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor to not contain bugs, 2) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole VMM architecture to properly protect VM's memory, specifically against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Dom0, 3) Intel TXT to not be buggy eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, 4) SMM being properly sandboxed, or alternatively to trust (some parts of) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BIOS and SMI handler, 5) TPM's EK key to be non-compromised and verifiable as genuine, and 6) TPM bus attacks made impossible (those two could be achieved by moving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TPM back onto cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset, as mentioned above), and finally, 7) on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 encryption key used by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor for data encryption to be safely kept in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor.

That's still quite a lot of things to trust, and it requires quite a lot of work to make it practically really secure...

The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r option is a bit more crazy, but also more powerful. The idea is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor might allow to create untrusted supervisors (or hypervisors). Bringing this down to x86 nomenclature, it would mean that kernel mode (or VT-x root) code cannot sniff or inject code into (crypto-protected) memory of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 usermode processes (or VT-x guests). This idea is not as crazy as you might think, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re has even been some academic work done in this area. Of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are many catches here, as this would require specifically written and designed applications. And if we ever considered to use this technology also for client systems (how nice it would be if we could just get rid of some 200-300 kLOC of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Xen hypervisor from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TCB in Qubes OS!), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 challenges are even bigger, mostly relating to safe and secure trusted output (screen) and, especially, input (keyboard, mouse).

If this worked out, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we would need to trust just one element: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor. But we need to trust it anyway. Of course, we also need to trust some software stack, e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 compilers we use at home to build our application, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 libraries it uses, but that's somehow an unrelated issue. What is important is that we now would be able to choose that (important) software stack ourselves, and don't care about all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r software used by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud provider.

As I wrote above, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor is this final element we always need to rust. In practice this comes down to also trusting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 US government :) But we might imagine users consciously choosing e.g. China-based, or Russia-based cloud providers and require (cryptographically) to run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir hosted programs on US-made processors. I guess this could provide reasonable politically-based safety. And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is also ARM, with its licensable processor cores, where, I can imagine, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 licensee (e.g. an EU state) would be able to put cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own private key, not known to any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r government (here I assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 licensee also audits cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor RTL for any signs of backdoors). I'm not sure if it would be possible to hide such a private key from a foundry in Hong Kong, or somewhere, but luckily cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are also some foundries within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 EU.

In any case, it seems like we could make our cloud computing orders of magnitude safer and more secure than what is now. Let's see whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 industry will follow this path...

Tuesday, August 30, 2011

Interview about Qubes OS

Here is a recent interview with me for Tom's Hardware, where I talk about Qubes, why virtualization alone does not automatically bring much security, and why we need it for secure systems anyway, and all that kind of stuff. Nothing really new, but still might be of interest to some readers.

As for Qubes Beta 2 release -- it really is coming, but we've faced recently some very nasty, race-condition-related problems with new Xen (we bravely switched to Xen 4.1 in Beta 2) that seem to occur on machines with very fast SSDs and we're currently trying to see if we can solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, or should we instead revert back to Xen 3.4 that we used previously in Beta 1. Except for that, Beta 2 is mostly ready, so we should be releasing it within coming weeks.

Friday, June 03, 2011

From Slides to Silicon in 3 years!


Remember our Xen 0wning Trilogy at Black Hat in summer 2008, specifically cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 presentation on Detecting & Preventing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Xen Hypervisor Subversions?

One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 things we were discussing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was a proposal to include an additional restriction to Intel processors that would disallow execution of usermode pages from within supervisor mode (ring0). Such a feature, we argued, apart from obviously making many ring3-to-ring0 exploits much harder, including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very Xen heap overflow exploit we presented in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides, would also bring us closer to efficient runtime code integrity checkers for kernels and hypervisors, as discussed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides.


Slide #97, Detecting and Preventing Xen Hypervisor Subversions, Black Hat USA, July, 2008

Fast forward 3 years. On June 1st, 2011, an Intel engineer is submitting a patch for Xen to support a mysterious new processor feature called SMEP (Supervisor Mode Execution Protection). He writes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feature is not yet documented in SDM, but soon will be. In fact, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 May 2011 update of Intel SDM already contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 details:

Intel SDM, vol. 3a, May 2011, source: intel.com

Some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r people spotted this feature earlier, because of anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r patch submitted by anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Intel engineer to Linux kernel a few weeks ago. Here's a good write up by Dan Rosenberg discussing how this patch makes writing Linux kernel exploits harder, and how it's still possible to write cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

The SMEP feature still doesn't seem to be present in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processors available on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 market, including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latest Sand Bridge processors, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no question it's coming, now that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feature made it into SDM.

It is quite rewarding to see your idea implemented in a processor... I guess this is how physicists feel when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y introduce a new particle as part of a new quantum model, and later discover evidences to support cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existence of this very particle in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wild...

Saturday, May 28, 2011

(Un)Trusting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Cloud


Everybody loves The Cloud cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days, and it is not hard to understand why. When every person owns computers (devices), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud is really hard to beat when it comes to syncing all your digital life back and forth between all those devices, and also sharing with your family members, friends, and colleagues at work. From task lists, through calendars, through health & fitness data, to work-related documents. And I'm not even mentioning all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 unencrypted email that is out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re.

One doesn't need to be especially smart or security conscious to realize how much this might be a threat to security and privacy. How much easier would it be to attack somebody's laptop if I knew precisely in which hotel and when he or she is planning to stay? How much more expensive would my health and life insurance be, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could get a look at my health and fitness progress? Etc.

But we're willing to sacrifice our privacy and security in exchange for easy of syncing and sharing of our data. We decide to trust The Cloud. What specifically does that mean?

First, it means we trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 particular cloud-based service vendor, such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 provides of our training monitoring app and service. We trust that this vendor is: 1) non-malicious and ethical, and so is not going to sell our private data to some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r entity, e.g. insurance company, and 2) that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 software written by this vendor is somehow secure, so it would not be easy for an attacker to break into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir cloud service and download all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's data (and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n sell to health insurance companies).

Next, we trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud infrastructure provider, such as Amazon EC2. We trust that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud provider is 1) non-malicious and ethical, and that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y won't really read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 virtual machine on which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previously mentioned cloud-service is running (and won't make it available to a local government officials, e.g. in China), and 2) that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y secured cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir infrastructure properly (e.g. it wouldn't be easy for one customer to “escape” from a VM and read all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMs belonging to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r customers).

Finally we trust all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 infrastructure that is in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 middle between us and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 service provider, such as e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 networking protocols, are safe to use (e.g. we trust all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 engineers working in any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ISP we use won't sniff/spoof our communication, e.g. by using some fake or quasi-fake SSL certs).

So, that's a hell of a lot of trusting! And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stake is high. Do we really need to make such a sacrifice? Do we really need to hand in all our private data to all those organizations? Of course we don't!

First, notice that in majority of cases, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud is only used basically as a on-line storage. No processing, just dump storage. Indeed, what kind of server-side processing does your task list or calender require? Or your freestyle swimming results? Or your conference slides? None.

And we know for very long how to safely keep secrets on untrusted storage, don't we? This is achieved via encryption (and digital signatures for integrity/aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticity). So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea is very simple: let's encrypt all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data before we send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud. The point here is, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 encryption must be done by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app that is running on our client device. Not in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud, of course.

Ok, so let's say I have my calendar records encrypted in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud, how do I share it with my ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r devices and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r people, such as my partner and colleagues at work? Very simple – you encrypt each record with a random symmetric key and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, for every ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r device or person who you want to grant access to your calendar you make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 symmetric key available to this person, by encrypting it with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir public key (if you're paranoid, you can even verify fingerprints using some out-band communication channel, such as phone, to ensure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud/service provider didn't do MITM attack on you). What if you want to share only some events (or some details) with some group of people (e.g. only your availability info)? Very simple – just encrypt those records you want to share in non-full access with some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r symmetric key and publish only this key to those people/devices you want to grant such non-full access.

Implementing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above would require writing new end-user apps, or plugins for existing apps (such as Outlook), so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do encryption/decryption/signing/verification before sending cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data out to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cloud. But what stops cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 malicious vendor from offering apps that would be leaking out our secrets, e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keys? Well, nothing actually. But this time, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendor would need to explicitly build in some kind of backdoor into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app. The same could be done with any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r vendor, and any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, non-cloud-based app. After all, how do we know that MS Word, which is not cloud-based yet, is not sending out fragments of our texts to Agent Smith? Note how different this is from a situation when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendor already owns all our data, unencrypted, brought legitimately to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir servers, and all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y need to do is to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own disks. No need to plant and distribute any backdoors!

In practice few vendors would be risking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir reputation and would be willing to build in a backdoor into an app that is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n made available to customers. Because every backdoor in such client-exposed code will sooner or later be found (You would really not believe what great lengths all those young people aimed with disassembler and debugger would go to, to win an economy class ticket to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 middle of desert in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hottest summer season, just to be able to deliver a presentation on how evil/stupid a company X is ;).

One problem is, however, with accessing our encrypted cloud over a Web Browser. In contrast to apps, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web browser content is much less identifiable. An app can have a digital signature – everybody know its an App v 1.1, published by X. As explained above it would be racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r stupid for X to plant a backdoor into such an app. But a Web-delivered Javascript is much more tentative, and it's very possible for X to e.g. deliver various versions of scripts to different customers. Digital signature on client-side scripts, paired with ability to whitelist allowed client-side-scripts, would likely solve this problem.

So, why we still haven't got client-side-encrypted cloud-services? The question is rhetorical, of course. Most vendors actually loves cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea of having unlimited access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir customers data. Do you think Google would be happy to give up an opportunity to data mine all your data? This might affect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir ad business, health research, or just Secret Plan To 0wn The World. After our dead body, I can almost hear cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m yelling! After all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have just came up with Chrome OS to bring even more data into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir data mining machine...

To sum it up, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no technical reason we must entrust all those people with our most private data. Sooner or later somebody will start selling client-side-encrypted cloud services, and I would be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first person to sign up for it. Hopefully it will happen sooner than later (to late?).

This post also hopefully shows, again, one more aspect – that we can, relatively easy, move most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IT infrastructure out of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 “TCB” (Trusted Computing Base, used as metaphor here). In ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words, we can design our systems and services so that we don't need to trust a whole lot of things, including servers and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 networking infrastructure (except for its reliability, but not for its security). But, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re always remains one element that we must trust – cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are our client devices. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are compromised, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker can steal everything.

Strangely most people still don't get it, or get it backwards. Just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that “information is not stored on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPad but kept safe on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 corporate network”, doesn't change anything! Really. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker owns your iPad, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n she also can do anything that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 legitimate user could do from this iPad. So if you could get to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 company's secret trade data from your iPad's Receiver, so would be able to do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 malware/attacker.

Saturday, May 21, 2011

The App-oriented UI Model and its Security Implications


Most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 desktop OSes today, such as Windows or Mac, expose and encourage a File-oriented UI model. You pick a file in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file manager, click it, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file manager automagically determines cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best app to handle cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file, starts cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app, and passes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file to it.

Back in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MS-DOS days we used a different model: an app-oriented model – you started an app first, e.g. Word Perfect, or Lotus 1-2-3, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you opened a file from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app (Norton Commander and similar programs somehow changed that later).

Interestingly this very same app-oriented model is now becoming popular again thanks to systems such as iOS and Android. There is no such thing as a global File Explorer or Finder on an iPad. Only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps. One must first pick an app, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application's responsibility to expose an option for opening one of your “files”, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app supports it (e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 calendar or task list apps would always open your default calendar or task list without asking for anything).

I actually like this app-oriented model a lot! It's much less confusing to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user. Just think about all those attacks in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past where an attacker could prepare a file with some innocently-looking extension but which in fact was an MZ executable. Or how many times people are not even aware which app cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y use! One might argue that user should not be distracted by such “unimportant” things as what app he or she uses for her work, but I disagree. Apparently Apple, and millions of iPhone and iPad users, disagree too.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main reason why I like this app-oriented model is because it just fits greatly into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Security by Isolation philosophy.

Just think about it: if it's possible to get users to consciously select an app, and we now know it is possible thanks to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 millions of app-oriented devices sold, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it should be not much more difficult to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to also consciously select cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain or area, such as “work”, or “personal”, which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y wish to use. Just imagine that instead of one “Mail” app, you would have two apps (and two icons): “Mail Work”, and “Mail Personal”.

There are some technicalities here – such as e.g. how to isolate apps between each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r? Do we need to build anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r layer of isolation in a form of VMs to isolate “Mail Work” from “Mail Personal”, or should cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (new) OSes and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (new) APIs be designed in such a way, that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were thin and secure, and allow for very good isolation between processes without using virtualization?

In Qubes we must use this additional layer of abstraction (virtualization), because we want to use Linux apps (and in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future also Windows apps), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y require huge POSIX/X API (and Win32 API) to work correctly. And those APIs are not easily isolate-able. So we use VMs as “API providers”. Same with isolating networking drivers and stacks – we need Linux kernel API to get those drivers and stacks running, so that's why we use a Linux-based “NetVM” for isolating networking. For this reason we expect users to explicitly define domains, such as “work”, “personal”, etc. This is because we cannot afford to run every single app in a separate AppVM (more precisely we cannot afford to create a working copy of this huge POSIX/X API for each app).

But we could very well imagine a well constructed API for apps that would just be easily isolate-able (I'm not saying iOS or Android has such an API), and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re would be no need to define domains explicitly. Still, we would need a possibility to define more than one instance of each app – such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previously mentioned “Mail Work” and “Mail Personal”.


The app-oriented model seems to be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future. And so seems cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Security by Isolation philosophy!

Saturday, April 23, 2011

The Linux Security Circus: On GUI isolation

There certainly is one thing that most Linux users don't realize about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir Linux systems... this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lack of GUI-level isolation, and how it essentially nullifies all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 desktop security. I wrote about it a few times, I spoke about it a few times, yet I still come across people who don't realize it all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time.

So, let me stress this one more time: if you have two GUI applications, e.g. an OpenOffice Word Processor, and a stupid Tetris game, both of which granted access to your screen (your X server), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no isolation between those two apps. Even if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y run as different user accounts! Even if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are somehow sandboxed by SELinux or whatever! None, zero, null, nil!

The X server architecture, designed long time ago by some happy hippies who just thought all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 people apps are good and non-malicious, simply allows any GUI application to control any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r one. No bugs, no exploits, no tricks, are required. This is all by design. One application can sniff or inject keystrokes to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r one, can take snapshots of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 screen occupied by windows belonging to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r one, etc.

If you don't believe me, I suggest you do a simple experiment. Open a terminal window, as normal user, and run xinput list, which is a standard diagnostic program for Xorg (on Fedora you will likely need to install it first: yum install xorg-x11-apps):

$ xinput list

It will show you all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pointer and keyboard devices that your Xorg knows about. Note cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ID of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device listed as “AT keyboard” and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n run (as normal user!):

$ xinput test id

It should now start displaying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 scancodes for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keys you press on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keyboard. If it doesn't, it means you used a wrong device ID.

Now, for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best, start anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r terminal window, and switch to root (e.g. using su, or sudo). Notice how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 xinput running as user is able to sniff all your keystrokes, including root password (for su), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keystrokes you enter in your root session. Start some GUI app as root, or as different user, again notice how your xinput can sniff all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keystrokes you enter to this ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r app!

Yes, I can understand what is happening in your mind and heart right now... Don't worry, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs have also passed through it. Feel free to hate me, throw out insults at me, etc. I don't mind, really (I just won't moderate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m). When you calm down, continue reading.

In Qubes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above problem doesn't exist, because each domain (each AppVM) has it own local, isolated, dummy X server. The main X server, that runs in Dom0 and that handles cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 real display is never exposed to any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVMs directly (AppVMs cannot connect to it via cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X protocol). For details see this technical overview.

You can repeat cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same experiment in Qubes. You just need to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ID of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 “qubesdev” device, as shown by xinput list (should be 7). Run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 xinput in one of your domains, e.g. in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 “red” one. Because we actually use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same device for both mouse and keystrokes, you should now see both cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key scancodes, as well as all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mouse events. Notice how your xinput is able to sniff all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 events that are destined for ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r apps belonging to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same domain where you run xinput, and how it is unable to sniff anything targeted to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domains, or Dom0.

BTW, Windows is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only one mainstream OS I'm aware of, that actually attempts to implement some form of GUI-level isolation, starting from Windows Vista. See e.g. this ancient article I wrote in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 days when I used Vista at my primary laptop. Of course, it's still easy to bypass this isolation, because of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 huge interface that is exposed to each GUI client (that also includes GPU API). Nevercá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365less, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y at least attempt to prevent this at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 architecture level.

Saturday, April 16, 2011

Why cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 US "password revolution" won't work

So, I've been reading this article this morning on how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 US "private and public" institutions are going to revolutionize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way we aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticate on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web. The "ground breaking" idea, also illustrated on this NIST animation, is to use 3rd party authorities that would first verify your identity somehow ("Can we see your id?", "What is your Mam's maiden name?", etc), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n would issue you some kind of a token that you would later use for aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web. A token would be e.g. a smart card, or a USB stick (probably cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y just mean a smart card with USB connector, whatever), or even a "phone application".

The idea is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user will not have to "remember" all those passwords for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various websites, which apparently is a problem in practice, because most users never heard about password manager apps, and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y actually try to remember all those passwords, or even try to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same one all over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 place. Using one password for more than one website is obviously wrong and people should be told not to do that. But an easy way to solve this is to just get people to use password managers.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key problem that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y try to solve, which is identity cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ft, is just not gonna be solved by this "password revolution". This is because if somebody has compromised my laptop, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it really doesn't matter if I use passwords, or smart cards, or whatever ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r multi-factor aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication mechanism -- none of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m will help if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker controls my operating system.

Most people cannot just get it -- this is because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y lack understanding of how computers and operating systems work. They don't understand that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 operating system can impersonate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user at will! This is because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 operating system fully controls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keyboard, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mouse, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 screen.

So, imagine you use your super-secure smart card token for aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication to your bank. So, before you log into your bank account, and perhaps before you make any transaction on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 banking website, you must insert your smart card somewhere (e.g. into smart card reader, or into USB port, etc). Before you insert your token, no one can impersonate you on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bank website. So far, so good! But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, once you inserted your token, it's all lost! The compromised OS could have saved your PIN to this card when you used it previously (even if you configured it not to do so!) and now,  immediately, it could use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 inserted card to aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticate as you to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bank and start issuing transactions on your behalf. And you won't even notice this all, because in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meantime it will show you a faked screen of your banking account. After all, it fully controls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 screen.

The bottom line is that we cannot secure our digital lives, if our client operating systems could not be secured first. And today, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 operating systems we use on our laptops, such as Windows, or Mac, or Ubuntu, are just trivial to be compromised by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attackers. After all, if that wasn't true we wouldn't have all those problems with identity cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ft. But introduction of tokens won't make our operating systems any more secure!

What we need instead are technologies that allow to build next-generation trusted operating systems. Technologies such as Intel TXT or VT-d. And we need OS vendors to actually start using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

You can say I'm biased, because of our work on Qubes OS. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, consider this -- perhaps we would never invest so much money and resources into this project, if we believed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r ways to bring security to our digital life.

Sunday, March 13, 2011

Partitioning my digital life into security domains

The diagram below illustrates how I have decomposed my digital life into security domains. This is a quite sophisticated scheme and most users would probably want something simpler, but I think it's still interesting to discuss it. The domains are implemented as lightweight AppVMs on Qubes OS. The diagram also shows what type of networking connectivity each domain is allowed.



Let's discuss this diagram bit by bit. The three basic domains are work (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 green label), personal (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 yellow label), and red (for doing all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 untrusted, insensitive things) – cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are marked on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 diagram with bold frames.

A quick digression on domain labels (colors) – in Qubes OS each domain, apart form having a distinct name, is also assigned a label, which basically is one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 several per-defined colors. These colors, which are used for drawing window decorations by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trusted Window Manager (color frames), are supposed to be user friendly, easy noticeable, indicators of how trusted a given window is. It's totally up to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user how he or she interprets cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se colors. For me, it has been somehow obvious to associate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 red color with something that is untrusted and dangerous (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 “red light” -- stop! danger!), green with something that is safe and trusted, while yellow and orange with something in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 middle. I have also extended this scheme, to also include blue, and black, which I interpret as indicating progressively more trusted domains than green, with black being something ultimately trusted.

Back to my domains: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work domain is where I have access to my work email, where I keep my work PGP keys, where I prepare reports, slides, papers, etc. I also keep various contracts and NDAs here (yes, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are PDFs, but received from trusted parties via encrypted and signed email – ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise I open cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in Disposable VMs). The work domain has only network access to my work email server (SMTP/IMAP4 over SSL), and nothing more.

For ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r work-related tasks that require some Web access, such as editing Qubes Wiki, or accepting LinkedIn invites, or downloading cool pictures from fotolia.com for my presentations, or specs and manuals from intel.com, for all this I use work-pub domain, which I have assigned cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 yellow label, meaning I consider it only somehow trusted, and I would certainly never put my PGP keys cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, or any work-related confidential information.

The personal domain is where all my non-work related stuff, such as personal email and calendar, holiday photos, videos, etc, are held. It doesn't really have access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Web, but if I was into social networking I would cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n probably allow HTTPS to something like Facebook.
Being somehow on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paranoid side, I also have a special very-personal domain, which I use for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 communication with my partner when I'm away from home. We use PGP, of course, and I have a separate PGP keys for this purpose. While we don't discuss any secret and sensitive stuff cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, we still prefer to keep our intimate conversations private.

I use shopping for accessing all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 internet e-commerce sites. Basically what defines this domain is access to my credit card numbers and my personal address (for shipping). Because I don't really have a dedicated “corporate” credit card, I do all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shopping in this domain, from groceries, through sports equipment, on hotel/plane reservations ending. If I had separate business credit cards, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n I would probably split my shopping domain into personal-shopping and work-shopping. I also have banking domain, which I use only for managing my bank account (which again combines both my personal and company accounts).

I also have a few specialized work-related domains, that I rarely use. The work-admin domain is used to manage almost all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ITL servers, such as our webserver, Qubes repo & wiki servers, email server and DNS management, etc. This domain is allowed only SSH traffic to those server, and HTTPS to a few Web-based management servers. The work-blog is used to manage this very blog you're reading now. The reason why it is separate from work-admin or work, is because I'm over paranoid, and because I fear that if somebody compromises cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 blogger service, and subsequently exploits a bug in my browser that I use for editing my blog, than I don't want this person to be able to also get admin access to all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ITL servers. 

Similarly, if somebody somehow compromised e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Amazon Web Management Console, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n exploited my browser in work-admin, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n I would like at least to retain access to my blog. If I used twitter, I would probably also manage it from this work-blog domain, unless it was a personal twitter account, in which case I would run it from personal.

The qubes-dev domain is used for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes development, merging ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r developers' branches (after I verify signatures on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir tags, of course!), building RPMs/ISOs (yes, Qubes Beta 1 will ship as a DVD ISO!), and finally signing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. Because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signing keys are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, this domain is very sensitive. This domain is allowed only SSH network access to our Qubes git server. Again, even if somebody compromised this Git server, it still would not be a big problem for us, because we sign and verify all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tags in each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs repos (unless somebody could also modify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SSH/Git daemons running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y subsequently exploit a hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical bug in my git client software when I connect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server).

I also decided to keep all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 accounting-related stuff in a separate domain – whenever I get an invoice I copy it to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 accounting domain. The rationale for this is that I trust those PDFs much less than I trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PDFs I keep in my work domain.

Once a year I move cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old stuff from my work domain, such as old email spools, old contracts and NDAs, to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work-archives domain. This is to minimize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 potential impact of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 potential attack on my work domain (my work domain could be attacked e.g. by exploiting a hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical bug in Thunderbird's protocol handshake using a MITM attack, or a hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical bug in GPG).

The vault domain is an ultimately trusted one where I generate and keep all my passwords (using keepass) and master GPG keys. Of course, this vault domain has no networking access. Most of those passwords, such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 email server access password is also kept in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specific domains which uses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work domain, and more specifically in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Thunderbird client (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is absolutely no point in not allowing e.g. Thunderbird to remember cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password – if it got compromised it would just steal it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next time I manually enter it)

And finally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previously mentioned red domain (I have tried to call it junk or random in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past, but I think red is still a better name after all). The red domain is totally untrusted – if it gets compromised, I don't care – I would just recreate it within seconds. I don't even back it up! Basically I do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re everything that doesn't fit into ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domains, and which doesn't require me to provide any sensitive information. I don't differentiate between work-related and personal-related surfing even – I don't care about anonymity for all those tasks I do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. If I was concerned about anonymity, I would create a separate anonymous domain, and proxy all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 traffic through a tor proxy from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re.

Now, this all looks nice and easy ;) but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is one thing that complicates cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above picture...

Data flows between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domains

The diagram below shows cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same domains, but additionally with arrows symbolizing typical data flows between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.


You can see that most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 usual data flows are from more trusted domains to less trusted domains – e.g. copy and pasting a URL that I receive via email in my work domain, so that I could open it in my untrusted browser in red, or moving invoices from my work domain (where I receive cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m via email) to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 accounting domain.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are, unfortunately, also some transfers from less trusted domains to more trusted ones. One example is copy and pasting an interesting URL that I just stumbled upon when surfing in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 red domain, and that I would like to share with a college at work, or a friend, and so I need to copy and paste it to my email client in eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r work (colleague) or personal (friend) domain.

Now, copying data from less trusted domains to more trusted ones presents a significant problem. While one could think that pasting an URL into Thunderbird email editor is a pretty harmless operation, it's still is an untrusted input – and we don't really know what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 red domain really pasted into its local clipboard, and so what we will paste into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work domain's Thunderbird email editor (perhaps 64kB of some junk that will overflow some undo buffer in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 editor?). And even more scary is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 example with copying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cool-looking graphics file from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Web into my work domain so that I could use it in my presentation slides (e.g. an xkcd . Attacks originating through malicious JPEGs or ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r graphics format, and exploiting bugs in rendering code have been known for more than a decade.

But this problem – how to handle data flows from less trusted systems to more trusted ones – is not easily solvable in practice, unfortunately...
Some people who design and build high-security systems for use by military and government takes a somehow opposite approach – cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y say cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not concerned about less-trusted-to-more-trusted data transfers as long as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could assure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no way to perform a transfer in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 opposite direction. 

So, if we could build a system that guarantees that a more trusted domain can never transfer data to a less trusted domain (even if both of those domains are compromised!), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are happy to allow one-way “up transfers”. In practice this means we need to eliminate all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 covert channels between two cooperating domains. The word cooperating is a key word here, and which makes this whole idea not practical at all, IMHO.

Elimination of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 covert channels between cooperating domains is indeed required in this scheme, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 assumption is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data transfer from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 less trusted domain could have indeed compromised cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more trusted domain. But this, at least, should not result in any data leak back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 originating domain, and later to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 less-classified network, which this less-trusted domain is presumably connected to. One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 assumptions here is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user of such a system is connected to more than one, isolated networks. Even in that case, elimination of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 covert channels between domains (or at least minimizing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir bandwith to something unusable – what is unusable, really?) is a big challenge, and can probably only could be done when we're ready to significantly sacrifice cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system's performance (smart scheduling tricks are needed to minimize temporal covert channels).

I would like to make it clear that we are not interested in eliminating cooperative covert channels between domains in Qubes any time in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 near future, and perhaps in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 long term as well. I just don't believe into such approach, and I also don't like that this approach does nothing to preserve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 integrity of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more-trusted domain – it only focuses on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 isolation aspect. So, perhaps cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker might not be able to leak secrets back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 less trusted domain, but he or she can do everything else in this more trusted domain. What good is isolation, if we don't maintain integrity?

An alternative solution to handling cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 less-trusted-to-more-trusted data transfers, is to have trusted “converters” or “verifiers” that could handle specific file types, such as JPEGs, and ensure we get a non-malicious file in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 destination domain. While this might remind cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bad-old A/V technology, it is something different. Here, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trusted converters would likely be some programs written in a safe language, running in anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r trusted domain, racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than a big ugly A/V with a huge database of signatures of “bad” patterns of what might appear in a JPEG file. The obvious problem with such an approach is that somebody must write those converters, and write cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m for all file types that we wish to allow to be transferred to more trusted domains. Perhaps doable in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 longer-term, and perhaps we will do it in some future version of Qubes...

Right now we are ignoring this problem, and we say that all less-trusted-to-more-trusted transfers are to be done on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's own risk :) You're welcome to submit trusted converters for your favorite file type(s) in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meantime!


Copying files between domains


Speaking of copying files between domains, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r security catch here. If we imagined two physically separated machines that share no common network resources, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only way to move files between those two air-gaped machines would be via something like a USB stick or a CDROM or DVD disc. But inserting a USB drive or CDROM into a machine triggers a whole lot of actions: from parsing device-provided information, loading required drivers (for USB), parsing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 driver's partition table, mounting and finally parsing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 filesystem. Each of this stage requires cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 machine's OS to perform a lot of untrusted input processing, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 potential attack space here is quite large. So, even if we could limit ourselves to copy only harmless files between machines/domains (perhaps cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were somehow verified by a trusted party in-between, as discussed above), still cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a huge opportunity that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 originating domain could compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target domain.

In Qubes Alpha we have been using a similar file copy mechanism, using a virtual stick for file copy between domains. In Qubes Beta 1 we will provide a new scheme based on same shared memory channel that we use for GUI virtualization – cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technical details of this solution will be available soon in our wiki. The most sensitive element in this new scheme is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 un-cpio-like utility that runs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target domain and unpacks cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 incoming blob into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pre-defined directory tree (e.g. /home/user/incoming/from-{domainname}/). We believe we can write pretty safe un-cpio-like utility, in contrast to secure all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previously mentioned elements (USB device parsing, partition parsing, fs parsing). The Qubes Beta 1 is planned to be released at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of March, BTW.

Partitioning enforcement and easy of use

For any security partitioning scheme to make sense in real life, it is necessary to have some enforcement mechanism that would ensure that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user doesn't mistakenly bypass it. Specifically for this purpose we have come up with special, previously-mentioned firewalling support in Qubes Beta 1, that I will cover in a separate article soon.

Ancá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r thing is to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 partitioning easy to use. For instance, I would like to be able to setup a hint in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 policy, that when I click on an URL in an email I received in my work domain that it should be automatically opened in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 red domain's default Web browser. Currently we don't do that in Qubes, but we're thinking about doing it in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 near future.

Summary

Partitioning one's digital life into security domains is certainly not an easy process and requires some thinking. This process is also very user-specific. The partitioning scheme that I've come up for myself is quite sophisticated, and most people would probably want something much simpler. In case of corporate deployments, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 scheme would be designed by CIO or IT admins, and enforced on users automatically. Much bigger problem are home and small business users, who would need to come up with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 partitioning cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves. Perhaps in future versions of Qubes we will provide some ready to use templates for select "typical" groups of users.

Monday, September 13, 2010

On Thin Clients Security

I'm constantly being asked about it, and so I thought I would write a handy blog post, so I could just referrer to it in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future, when yet ancá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r person asks me if I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 use of Thin Clients is a game-changer to desktop security...

It is not! Thin Clients do not improve your desktop security in any way, and that's because:

  1. You still run a regular full-blown OS, such as Widows and all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 regular applications, such as those buggy PDF readers, Web browsers, etc - it's just you run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m all on some corporate server, racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r on your laptop. The fact that you run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 corporate server, doesn't make it any less prone to compromises, compared to if you run it locally on your laptop.


  2. A compromise of your laptop, even if it's just a dump terminal, is still fatal! This is because if your laptop's kernel (or MBR, or BIOS, or some PCI device's firmware, or GPU) is compromised, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker can intercept/steal/spoof all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data that you work on remotely, because it is still your laptop that processes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 input (keystrokes, mouse events) and output (pixels). So, an Evil Maid attack on your laptop when you use it as a Thin Client, would be just as devastating, as it is ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise (and don't fool yourselves that crypto tokens can help)

We really need secure end-user systems, even if we just want to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m as dump terminals only! There is really no way we could skip this step (and e.g. focus only on infrastructure, or services security).

Thursday, September 09, 2010

(Un)Trusting your GUI Subsystem

Why do we need secure desktop systems? Why support from hardware is necessary to build secure desktop OSes? Does virtualization make things more, or less complex? Why Dynamic RTM (Intel TXT) is better than Static RTM? Can we have untrusted GUI domain/subsystem?

I tried to cover those questions in my recent keynote at ETISS, and you can grab cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides here.

Particularly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slide #18 presents cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idealistic view of an OS that could be achieved through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 use of hardware virtualization and trusted boot technologies. It might look very similar to many ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r pictures of virtualized systems one can see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days, but what makes it special is that all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 dark gray boxes represent untrusted domains (so, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir compromise is not security-critical, except for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 potential of a denial-of-service).

No OS currently implements this architecture, even Qubes. We still have Storage and GUI subsystem in Dom0 (so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are both trusted), although we already know (we think) how to implement cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 untrusted storage domain (this is described in detail in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 arch spec), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main reason we don't have it now is that TXT market adoption is so poor, that very few people could make use of it.

The GUI subsystem is, however, a much bigger challenge. When we think about, it should really feel impossible to have an untrusted GUI subsystem, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI subsystem really "sees" all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pixmaps that are to be displayed to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user, so also all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 confidential emails, documents, etc. The GUI is different in nature than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 networking subsystem, where we can use encrypted protocols to prevent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 netvm from sniffing or meaningfully intercepting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application-generated traffic, or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 storage subsystem, where we can use fs-encryption and trusted boot technologies to keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 storage domain off from reading or modifying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files used by apps in a meaningful ways. We cannot really encrypt cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pixmaps (in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps, or AppVMs), because for this to work we would need to have graphics cards that would be able to do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 decryption and key exchange (note how this is different from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case of an untrusted storage domain, where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no need for internal hardware encryption!), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea of putting, essentially an HTTPS webserver on your GPU is doubtful at best, because it would essentially move cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GPU, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is really no reason why lots-of-code in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GPU were any harder to attack than lots-of-code in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain...

So we came out recently with an idea of a Split I/O model that is also presented in my slides, where we separate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user input (keyboard, mouse), and keep it still in dom0 (trusted domain), from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 output (GUI, audio), which is moved into an untrusted GUI domain. We obviously need to make sure that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain cannot "talk" to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domains, to make sure it cannot "leak out" cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 secrets that it "sees" while processing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various pixmaps. For this we need to have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor ensure that all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 inter-domain shared pages mapped into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain are read-only for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain, and this would imply that we need cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI protocol, exposed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r AppVMs, to be unidirectional.

There are more challenges though, e.g. how to keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bandwith of timing covert channels, such as those through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU caches, between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r AppVMs on a reasonably low level (please note cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 distinction between a covert channel, which require cooperation of two domains, and a side-channel, which requires just one domain to be malicious - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latter are much more of a cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365oretical problem, and are of a concern only in some very high security military systems, while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 former are easy to implement in practice usually, and present a practical problem in this very scenario).

Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r problem, that was immediately pointed out by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ETISS audience, is that an attacker, who compromised cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain, can manipulate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pixmaps that are being processed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI subsystem to present false picture to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user (remember, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker should have no way to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m out anywhere). This includes attacks such as button relabeling ("OK" becomes "Cancel" and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r way around), content manipulation ("$1,000,000" instead of "$100", and vice-versa), security labels spoofing ("red"-labeled windows becoming "green"-labeled), and so on. It's an open question how practical cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se attacks are, at least when we consider automated attacks, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y require ability to extract some semantics from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pixmaps (where is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 button, where is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 decoration), as well as understanding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's actions, intentions, and behavior (just automatically relabeling my Friefox label to "green" would be a poor attack, as I would immediately realize something is going wrong). Nevercá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365less this is a problem, and I'm not sure how this could be solved with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current hardware architecture.

But do we really need untrusted GUI domain? That depends. Currently in Qubes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI subsystem is located in dom0, and thus it is fully trusted, and this also means that a potential compromise of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI subsystem is considered fatal. We try to make an attack on GUI as hard as possible, and this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reason we have designed and implemented special, very simple GUI protocol that is exposed to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r AppVMs (instead of e.g. using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X protocol or VNC). But if we wanted to add some more "features", such as 3D hardware acceleration for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps (3D acceleration is already available to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Window Manager in Qubes, but not for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we would not be able to keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI protocol so simple anymore, and this might result in introducing exploitable fatal bugs. So, in that case it would be great to have untrusted GUI domain, because we would be able to provide feature-rich GUI protocols, with all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OpenGL-ish like things, without worrying that somebody might exploit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI backend. We would also not need to worry about putting all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various 3rd party software in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI domain, such as KDE, Xorg, and various 3rd party GPU drivers, like e.g. NVIDIA's closed source ones, and that some of it might be malicious.

So, generally, yes, we would like to have untrusted GUI domain - we can live without it, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we will not have all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fancy 3D acceleration for games, and also need to carefully choose and verify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI-related software (which is lots of software).

But perhaps in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next 5 years everybody will have a computer with a few dozens of cores, and also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU-to-DRAM bandwidth will be orders of magnitude faster than today, and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be no longer a need to offload graphic intensive work to a specialized GPU, because one of our 64 cores will happily do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work? Wouldn't that be a nicer architecture, also for many ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r reasons (e.g. better utilization of power/circuit real estate)? In that case nobody will need OpenGL, and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be no need for a richer GUI protocol than what is already implemented in Qubes...

It's quite exciting to see what will happen (and what we will come up for Qubes) :)

BTW, some people might confuse X server de-privileging efforts, i.e. making cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X server run without root privileges, which is being done in some Linux distros and BSDs, with what had been described in this article, namely making cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI subsystem untrusted. Please note that a de-priviliged X server doesn't really solve any major security problems related to GUI subsystem, as whoever controls ("0wns") cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X server (depriviliged or not) can steal or manipulate all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data that this X server is processing/displaying. Apparently cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some reasons why people want to run Xorg as non-root, but in case of typical desktop OSes this provides little security benefit (unless you want to run a few X servers with different user accounts, and on different vt's, which most people would never do anyway).

Thursday, August 19, 2010

The MS-DOS Security Model

Back in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 '80s, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was an operating system called MS-DOS. This ancient OS, some readers might not even remember it today, had a very simple security model: every application had access to all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user files and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r applications.

Today, over two decades later, overwhelming majority of people still use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very same security model... Why? Because on any modern, mainstream OS, be that Linux, Mac, or Windows, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user applications still have full access to all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's files, and can manipulate all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r user's applications.

Does it mean we haven't progressed anywhere from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MS-DOS age? Not quite. Modern OSes do have various anti-exploitation mechanisms, such as ASLR, NX, guard pages (well, Linux has it since last week at least), and even some more.

But in my opinion cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re has been too much focus on anti-exploitation, and on bug finding, (and on patching, of course), while almost nothing has been done on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS architecture level.

Does anybody know why Linux Desktops offer ability to create different user accounts? What a stupid question, I hear you saying - different accounts allow to run some applications isolated from user's ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r applications! Really? No! The X server, by design, allows any GUI application to mess with all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r GUI applications being displayed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same X server (on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same desktop). So, what good it is to have a "random_web_browsing" user, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Firefox run under this user account would still be able to sniff or inject keystrokes to all my ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r GUI applications, take screenshots of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, etc...?

[Yes, I know, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user accounts allows also to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365oretically share a single desktop computer among more than one physical users (also known as: people), but, come on, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days it's that a single person has many computers, and not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r way around.]

One might argue that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 progress in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 anti-exploitation, and also safe languages, would make it nearly impossible to e.g. exploit a Web browser in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next few years, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re would be no need to have a "random_web_browsing" user in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first place. But, we need isolation not only to protect ourselves when somebody exploits one of our application (e.g. a Web Browser, or a PDF viewer), but also, and perhaps most importantly, to protect from maliciously written applications.

Take summer holiday example: imagine you're a scuba diver - now, being also a decently geeky person, no doubt you will want to have some dive log manager application to store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 history of your dives on a computer. There are a dozen of such applications on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web, so all you need to do is to pick one (you know, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 nicest screenshots), and... well you need to install it on your laptop now. But, hey, why this little, made by nobody-knows-who, dive application should be given unlimited access to all your personal files, work email, bank account, and god-know-what-else-you-keep-on-your-laptop? Anti-exploitation technology would do exactly nothing to prevent your files in this case.

Aha, it would be so nice if we could just create a user "diving", and run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app under this account. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future, you could throw in some advanced deco planning application into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same account, still separated from all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r applications.

But, sorry, that would not work, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X server doesn't provide isolation on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI-level. So, again, why should anybody bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r creating any additional user accounts on a Linux Desktop?

Windows Vista made a little step forward in this area by introducing integrity levels, that, at least cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365oretically, were supposed to prevent GUI applications from messing with each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y didn't scale well (IIRC cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re were just 3 or 4 integrity levels available), and it still isn't really clear if Microsoft treats cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m seriously.

So, why do we have user accounts on Linux Desktops and Macs is beyond me (I guess Mac's X server doesn't implement any GUI-level isolation eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r - if I'm wrong, please point me out to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate reference)?

And we haven't even touched cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problems that might arise from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker exploiting a bug in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (over-complex) GUI server/API, or in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (big fat) kernel (with hundreds of drivers). In order for those attacks to become really interesting (like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Rafal's attack we presented yesterday), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user would have to already be using e.g. different X servers (and switch between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m using Ctrl-Shift-Fn), or some sandboxing mechanisms, such as SELinux sandbox, or, in case of Vista, a scheme similar to this one.

Saturday, January 16, 2010

Priorities

It’s interesting how many people don’t realize what are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 priorities in computer security... There are many fields to secure: server security, web applications security, network security, and finally desktop security. Over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last years I met SO many people that always expressed surprise why I would like to focus on desktop systems security? They usually argue that today, as everybody knows, it is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Network that is what computing is all about and that we should focus on securing infrastructure, and forget about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 desktops, which are always to be insecure. The network is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 computer, as somebody said.

What those people forget about, is that it is always cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 desktop that ultimately gets access to all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user’s secretes -- all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passwords, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keys, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 corporate documents, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 nude holiday pictures, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 secret love letters, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 credit card numbers, and many more.

However secure were all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 services (remote servers and network protocols) that we use, if our desktop gets compromised it’s all lost. The recent incident with Google is just yet anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r example of that. Our desktop systems are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most crucial piece of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole puzzle.

It’s funny how many people think that by using some thin client solution on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir desktops cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem. Of course cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y cannot! Just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that your OS executes on a server, racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n on your hardware, doesn’t make it any less prone to all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacks that were ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise possible when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 software executed on your system.

The attempts to secure desktops have been failing for so many years. While recently cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is some attempt to minimize likelihood of remote attacks via Web browsers (or generally to focus on application security), this is still just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tip of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iceberg -- cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are so many ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attack avenue that none of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 popular OSes even tries to address, that I consider myself a brave person (not to say stupid) that I actually use my laptop everyday and keep some sensitive information on it ;)

Ok, so that’s a nice piece of complaining you say, but what are we, at ITL, gonna do about it? Well, we just gonna sit and patiently wait for better OSes to appear some day... Oh, hell, we won’t!

Happy New Year :)


9933 F096 8820 0E23 1AF4 078D 8BDB D97D BDEA 9E9D

Tuesday, September 22, 2009

Intel Security Summit: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides

Last week I was invited to Hillsboro to speak at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Intel's internal conference on security. My presentation title was "A Quest To The Core: Thoughts on present and future attacks on system core technologies", and my goal was to somehow make a quick summary of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recent research our team has done over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last 12 months or so, and explain why we're so keen on hacking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 low-level system components, while all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 world is excited about browser and flash player bugs.

The slides (converted to PDF) can be found here. As you will see, I decided to remove most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "Future" chapter. One reason for that was that we didn't want to hint Loic our competition as to some of our new toys we're working on;) The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r reason was that, I think, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of presenting only thoughts about attacks, i.e. unproven thoughts, or, should I even say, feelings about future attacks, has little research value, and while I can understand such information being important to Intel, I don't see how ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs could benefit from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

I must say it was nice and interesting to meet in person with various Intel architects, i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 people that actually design and create our basic "universe" we all operate in. You can always change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS (or even write your own!), but still you must stick to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rules, or "laws", of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 platform (unless you can break cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m ;)

Wednesday, September 02, 2009

About Apple’s Security Foundations, Or Lack Of Thereof...

Every once in a while it’s healthy to reinstall your system... I know, I know, it’s almost a heresy to say that, but that’s reality in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 world where our systems are totally unverifiable. In fact I don’t even attempt to verify if my Mac laptop has been compromised in any way (most system files are not signed anyway). But sometimes, you got this feeling that something might be wrong and you decide to reinstall to start your (digital) life all over again :)

So, every time I (re)install a Mac-based system, I end up cursing horribly at Apple’s architects. Why? Because in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Apple World cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y seem to totally ignore cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 concept of files integrity, to such extent that it’s virtually impossible to get any assurance that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 programs I install are in any way aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntic (i.e. not tampered by some 3rd party, e.g. by somebody controlling my Internet connection).

Take any Apple installer package, e.g. Thunderbird. In most cases an installer package on Mac is a .dmg file, that represents an installation disk image. Now, when you open such a file under Mac, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS will never display any information about if this file is somehow signed (e.g. by who) or not. In fact, I’m pretty sure it’s never signed. What you end up with, is a .dmg file that you just downloaded over plaintext HTTP and you have absolutely no way of verifying if it is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original file cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendor really published. And you’re just about to grant admin privileges to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 installer program that is inside this file -- after all it’s an installer, so must got root privileges, right (well, not quite maybe)? Beautiful...

Interestingly, this very same Thunderbird installer, but for Windows, is correctly signed, and Windows, correctly, displays that information (togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to examine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate) and allows cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to make a choice of whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to allow it to run or not.



Sure, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate doesn’t guarantee that Mozilla didn’t put a nasty backdoor in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, nor that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file was not compromised due to Mozilla’s internal server compromise. Or that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 private key) wasn’t somehow stolen from Mozilla, or that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issuing authority didn’t make a mistake and maybe issued this certificate to some random guy, who just happened to be named Mozilla.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate provides liability. If it indeed turns out that this very Thunderbird installer was somehow malicious, I could take this signed file to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 court and sue eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Mozilla, or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certification authority for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 damages it might have done to me. Without cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate I cannot do that, because I (and nobody) cannot know if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file was tampered while being downloaded (e.g. malicious ISP) or maybe because my system was already compromised.

But in case of Apple, we have no such choice -- we need to take cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 risk every time we download a program from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet. We must bet cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security of our whole system, that at this very moment nobody is tampering with out (unsecured) HTTP connection, and also that nobody compromised cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendor’s Web Server, and, of course, we hope that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendor didn’t put any malicious code into its product (as we could not sue cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m for it).

So that sucks. That sucks terribly! Without ability to check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 integrity of programs we want to install, we cannot build any solid foundations. It’s funny how people divagate whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Apple implemented ASLR correctly in Snow Leopard, or not? Or whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r NX is bypassable. It’s meaningless to dive into such advanced topics, if we cannot even assure that at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 day 0 our system is clean. We need to start building our systems from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ground up, and not starting from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 roof! Ability to assure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 software we install is not tampered seems like a reasonable very first step. (Sure it could be compromised 5 minutes later, and to protect against this we should have ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r mechanisms, like e.g. mentioned above ASLR and NX).

And Apple should not blame cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendors for such a situation (“Vendors would never pay $300 for a certificate”, blah, blah), as it is just enough to have a look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Windows versions of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same products, and that most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m do have signed installers (gee, even open-source TrueCrypt, has a signed installer for Windows!).

One should say that a few vendors, seeing this problem on Mac, do publish PGP signatures for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir installation files. This includes e.g. PGP Desktop for Mac, KeePassX, TrueCrypt for Mac, and a few ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are just exceptions and I wonder how many users will be disciplined (and savvy) enough to correctly verify those PGP signatures (in general it requires you to download cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendor keys many months before, keep it in your ring, to minimize possibility that somebody alters both cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 installer files and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keys you download). Some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r vendors offer pseudo-integrity by displaying MD5/SHA1 sums on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir websites. That would make some sense only if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website on which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hashes are displayed was itself SSL-protected (still cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file signature is a better option), as ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise we can be sure that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker that is tampering with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 installer file, will also take care about adjusting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website... But of course this never is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case -- have a look e.g. at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMWare download page for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Mac Fusion (one need to register first). Very smart, VMWare! (Needles to say, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMWare Workstation installer for Windows is properly signed).

BTW, anybody checked if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Apple updates are digitally signed somehow?

All I wrote here in this post is just trivial. It should be just obvious for every decently educated software engineer. Believe me it’s really is much more fun for me to write about things like new attacks on chipsets or virtualization. But I have this little hope that maybe somebody at Apple will read this little post and fix cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir OS. Because I really like Apple products for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir aescá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tics...