Showing posts with label philosophical. Show all posts
Showing posts with label philosophical. Show all posts

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!

Monday, May 03, 2010

On Formally Verified Microkernels (and on attacking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m)

Update May 14th, 2010: Gerwin Klein, a project lead for L4.verified, has posted some insightful comments. Also it's worth reading cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir website here that clearly explains what assumptions cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y make, and what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y really prove, and what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y don't.

You must have heard about it before: formally verified microkernels that offer 100% security... Why don't we use such a microkernel in Qubes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n? (The difference between a micro-kernel and a type I hypervisor is blurry. Especially in case of a type I hypervisor used for running para-virtualized VMs, such as Xen used in Qubes. So I would call Xen a micro-kernel in this case, although it can also run fully-virtualized VMs, in which case it should be called a hypervisor I think.)

In order to formally prove some property of any piece of code, you need to first assume certain things. One such thing is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correctness of a compiler, so that you can be sure that all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 properties you proved for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code, still hold true for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 binary generated from this source code. But let's say it's a feasible assumption -- we do have mature compilers indeed.

Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r important assumption you need, and this is especially important in proving kernels/microkernels/hypervisors, is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 model of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware your kernel interacts with. Not necessarily all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware, but at least cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU (e.g. MMU, mode transitions, etc) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Chipset.

While cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPUs are racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r well understood today, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir architecture (we're talking IA32 here) doesn't change so dramatically from season to season. The chipsets, however, are a whole different story. If you take a spec for any modern chipset, let's say only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MCH part, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one closer to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor (on Core i5/i7 even integrated on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same die), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are virtually hundreds of configuration registers cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. Those registers are used for all sorts of different purposes -- cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y configure DRAM parameters, PCIe bridges, various system memory map characteristics (e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory reclaiming feature), access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 infamous SMM memory, and finally VT-d and TXT configuration.

So, how are all those details modeled in microkernels formal verification process? Well, as far as I'm aware, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not! They are simply ignored. The nice way of saying this in academic papers is to say that "we trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware". This, however, might be incorrectly understood by readers to mean "we don't consider physical attacks". But this is not equal! And I will give a practical example in a moment.

I can bet that even cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset manufactures (think e.g. Intel) do not have formal models for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir chipsets (again, I will give a good example to support this cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365sis below).

But why are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipsets so important? Perhaps cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are configured "safe by default" on power on, so even if we don't model all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration registers, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir effects on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system, and if we won't be playing with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, maybe it's safe to assume all will be fine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n?

Well, it might be that way, if we could have secure microkernels without IOMMU/VT-d and without some trusted boot mechanism.

But we need IOMMU. Without IOMMU cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no security benefit of having a microkernel vs. having a good-old monolithic kernel. Let me repeat this statement again: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no point in building a microkernel-based system, if we don't correctly use IOMMU to sandbox all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 drivers.

Now, setting up IOMMU/VT-d permissions require programming cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset's registers, and is by no means a trivial task (see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Intel VT-d spec to get an impression, if you don't believe me). Correctly setting up IOMMU is one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most security-critical tasks to be done by a hypervisor/microkernel, and so it would be logical to expect that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y also formally prove that this part is done flawlessly...

The next thing is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trusted boot. I will argue that without proper trusted boot implementation, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system cannot be made secure. And I'm not talking about physical attacks, like Evil Maid. I'm talking about true, remote, software attacks. If you haven't read it already, please go back and read my very recent post on "Remotely Attacking Network Cards". Building on Loic's and Yves-Alexis' recent research, I describe cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re a scenario how we could take cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir attack furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to compromise even such a securely designed system as Qubes. And this could be possible, because of a flaw in TXT implementation. And, indeed, we demonstrated an attack on Intel Trusted Execution Technology that exploits one such flaw before.

Let's quickly sketch cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole attack in points:

  1. The attacker attacks a flaw in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network card processing code (Loic and Yves-Alexis)

  2. The attacker replaces cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NIC's firmware in EEPROM to survive cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reboot (Loic and Yves-Alexis)

  3. The new firmware attacks cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system trusted boot via a flaw in Intel TXT (ITL)

    • If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system uses SRTM instead, it's even easier -- see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous post (ITL)

    • If you have new SINIT module that patched our attack, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is still an avenue to attack TXT via SMM (ITL)

  4. The microkernel/hypervisor gets compromised with a rootkit and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker gets full control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system:o

And this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 practical example I mentioned above. I'm sure readers understand that this is just one example, of what could go wrong on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware level (and be reachable to a software-only attacker). Don't ignore hardware security! Even for software attacks!

A good question to ask is: would a system with a formally verified microkernel also be vulnerable to such an attack? And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 answer is yes! Yes, unless we could model and prove correctness of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole chipset and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU. But nobody can do that today, because it is impossible to build such a model. If it was, I'm pretty sure Intel would already have such a model and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y would not release an SINIT module with this stupid implementation bug we found and exploited in our attack.

So, we see an example of a practical attack that could be used to fully compromise a well designed system, even if it had a formally verified microkernel/hypervisor. Compromise it remotely, over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network!

So, are all those whole microkernel/hypervisor formal verification attempts just a waste of time? Are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y only good for academics so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could write more papers for conferences? Or for some companies to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in marketing?

Perhaps cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 formal verification of system software will never be able to catch up with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pace of hardware development... By cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time people will learn how to build models (and how to solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m) for hardware used today, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware manufactures, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meantime, will present a few new generations of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware. For which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 academics will need anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r 5 years to catch up, and so on.

Perhaps cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 industry will take a different approach. Perhaps in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 coming years we will get hardware that would allow us to create untrusted hypervisors/kernels that would not be able to read/write usermode pages (Hey Howard;)? This is currently not possible with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware we have, but, hey, why would a hypervisor need access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Firefox pages?

And how this all will affect Qubes? Well, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes project is not about building a hypervisor or a microkernel. Qubes is about how to take a secure hypervisor/microkernel, and how to build 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 system in a secure, and easy to use, way, using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 isolation properties that this hypervisor/microkernel is expected to provide. So, whatever kernels we will have in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future (better formally verified, e.g. including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 model), or based on some exciting new hardware features, still Qubes architecture would make perfect sense, I think.

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, August 26, 2009

PDF signing and beyond

Today I got an advertising email from GlobalSign (where I previously bought a code signing certificate for Vista kernel drivers some years ago) highlighting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir new (?) type of certificates for signing of Adobe PDF files. It made me curious, because, frankly, I've been recently more and more missing this feature. After a quick online research it turned out that this whole Adobe Certified Documents Services (CDS) seem to be nothing new, as apparently even Adobe Reader 6.0 had support for verifying those CDS certificates. The certificates are also available from ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r popular certification authorities like e.g. Entrust and Verisign, and a couple of ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs.

So, I immediately felt stupid that I haven't been aware of such a great feature, which apparently is out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re for a few years now. Why I thought it was so great a feature? Consider cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following scenario…

At our Invisible Things Lab resources page we offer a handful of files to download — slides and some proof of concept code. The website is served over a plaintext HTTP. This means that if you're downloading anything over a public WiFi (hotel, airport lounge, etc) you never know if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PDF you actually get has not been infected somewhere in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 middle, e.g. by a guy in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lobby that is messing with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hotel WiFi.

So, one might argue that I should have paid a few hundred bucks and get an SSL certificate for my website and start serving it over HTTPS. But here's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem — I, as zillions of ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r small businesses and individuals, host my website on some 5-dollar-a-month one-of-cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365-thousands hosting provider. I have zero knowledge about what people work cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re and if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can be trusted, and I also know nothing (and have zero impact) on how secure (or not, for that matter) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server is. (Same applies to my cell phone carrier, ISP, etc, BTW).

Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SSL certificate for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website "knows" nothing about how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files on my website should look like, in particular if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are compromised or not. All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SSL certificate does is to give assurance to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remote client that he or she downloaded cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual files that were on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment of downloading — 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ý bet365y were cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original ones authored by me, or perhaps maliciously modified by somebody who got access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.

So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 solution with an SSL certificate would work only if I trusted my web server, which could be assumed only if I run my own dedicated server. That, however, would be an overkill for a small company like ITL, especially that our business is not based on our web presence — in fact cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website is maintained mainly for ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r researchers and students, who can easily download our papers and code from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, and also for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reporters so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can e.g. download a press release from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re.

Surprisingly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website has never been compromised, probably because it doesn't present an interesting target for any skilled person (or maybe exceptionally skilled people work at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hosting provider?). But I cannot know for sure, as I don't constantly monitor all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hashes of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files, as this would require… well a dedicated server that would be running an SHA1 calculating script in a loop for 24/7 :)

Of course, zillions of ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r websites works this very same way and present cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very same problems.

Now, ability to sign PDFs would be just a great solution here, because I could sign all those files with my certificate, 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 people downloading stuff from ITL could know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are getting original PDFs that were created on one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ITL members desktop computers, no matter how compromised cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web server or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network connection is.

For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same reasons, I would welcome if ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs started doing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same, as currently I simply must assume every PDF I download from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 net (and PDFs account for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 majority of file downloads I do) to be potentially malicious. So, I always open cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in my Red or Yellow VM (depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 download), and only if it "looks good" (very fuzzy term, I know), I might decide to move it to my host desktop (it's easier to work with PDFs on your host, and actually you should use your host desktop for something).

(Yes, I know, Kostya Kortchinsky, or Rafal, can sometimes escape from VMWare, but still I believe that today cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best isolation I can get on a desktop, without sacrificing much convince, is via a type II hypervisor. It's horribly inelegant, but well, that's life).

So, I read some more about this Adobe CDS, being all excited about it, and ready to spend a few hundred euros on a certificate, only to realize that it doesn't look as good as I thought.

First disappointment comes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that you must create a PDF using Adobe Acrobat software (not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Reader, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 commercial one). I've created all my PDFs using eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Office (in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past) or iWork (today), and none of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m seem to offer a way to digitally sign cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PDF. I would like to get a simple tool, say pdfsign.exe, that I could use to sign any PDF I have, no matter how I generated it. Also, not surprisingly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Mac native PDF viewer (Preview) doesn't seem to recognize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 digital signature, and I bet some Linux PDF viewers do not as well.

Worst of all, even cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Acrobat Reader 9, that I tested under Windows, and that correctly displayed all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CDS information, does one unbelievably stupid thing — it parses and renders cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole PDF before displaying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signature info. So, if you downloaded a malicious PDF, Acrobat Reader will happily open it and parse, without asking you a question of whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r you would like to open it (as it is perhaps unsigned). At least I was unable to find an option that would force it to do that. So, if this PDF contained an exploit for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader, it surely would get executed. Compare this with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (correct) behavior of Vista UAC where it presents cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable signature details before executing it.

You can see how your software works with Adobe PDF signatures, e.g. by looking at this exemplary file signed by GlobalSign.

So, Adobe CDS, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are today, seem to be pretty useless, as far as protection from potentially malicious PDFs is considered (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y surely have ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r positive applications, e.g. to certify about aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticity of e.g. a diploma).

But wouldn't it be great to have such a file signing mechanism globally adopted and not only for PDFs, but for any sort of files, including ZIPs, tgz's, heck, even plain text files? And have our main OSes generically recognize those signatures and display unified prompts of whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r we want to allow an application to to open cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file or not? Perhaps, in some situations, we could even define policies for specific applications. This seems easy 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 — we just need to "hook" (oh, God, did I say "hook"?) high-level OS API's like e.g. open() or CreateFile().

What about PGP and possibility of using this for signing any sort of files? Well, we use PGP a lot at ITL, but mainly for securing peer-to-peer communication (e.g. between us and our clients). There really is no good way to publish one's PGP key — cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 concept of Web of Trust might be good for some closed groups of people, but not for publishing files "to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 world". And, of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first thing that an attacker who subverted PDFs on our website will do is to also subvert cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PGP key displayed on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website. I also tried once to publish a PGP key to a key server, but got discouraged immediately after I noticed it didn't use SSL for submission. BTW, anybody knows if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key servers today use SSL? If not, how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trust is established? Maybe email clients, e.g. Thunderbird, come with built in PGP keys for select key servers?

So, I guess that was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main point of writing this post — to express how madly I would welcome a generic, OS-based, non-obligatory, signature verification for files, based on PKI :)

Ah, before a dozen of people jumps to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comment box to tell me that digital signatures do not assure non-maliciousness of anything — please don't do that, because I actually know that. In fact, it is not possible to assure non-maliciousness of pretty much anything, especially without strictly defining an ethical system we would like to use first. What cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 signatures provide is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 liability, so that I know who to sue, in case my naked holiday pictures got leaked to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public because of some malicious PDF exploiting my system. In that case I can sue eicá 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 actual person who signed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PDF (if this person is identifiable) or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certification authority who issued cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate to a wrong (unidentifiable) person.

Tuesday, June 02, 2009

More Thoughts on CPU backdoors

I've recently exchanged a few emails with Loic Duflot about CPU-based backdoors. It turned out that he recently wrote a paper about hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical CPU-backdoors and also implemented some proof-of-concept ones using QEMU (for he doesn't happen to own a private CPU production line). The paper can be bought here. (Loic is an academic, and so he must follow some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 strange customs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 academic world, one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m being that papers are not freely published, but racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r being sold on a publisher website… Heck, even we, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ultimately commercialized researchers, still publish our papers and code for free).

Let me stress that what Loic writes about in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paper are only hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical backdoors, i.e. no actual backdoors have been found on any real CPU (ever, AFAIK!). What he does is he considers how Intel or AMD could implement a backdoor, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n he simulate this process by using QEMU and implementing those backdoors inside QEMU.

Loic also focuses on local privilege escalation backdoors only. You should however not underestimate a good local privilege escalation — such things could be used to break out of any virtual machine, like VMWare, or potentially even out of a software VMs like e.g. Java VM.

The backdoors Loic considers are somewhat similar in principle to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 simple pseudo-code one-liner backdoor I used in my previous post about hardware backdoors, only more complicated in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual implementation, as he took care about a few important details, that I naturally didn't concern. (BTW, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main message of my previous post about was how cool technology this VT-d is, being able to prevent PCI-based backdoors, and not about how doomed we are because of Intel- or AMD-induced potential backdoors).

Some people believe that processor backdoors do not exist in reality, because if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y did, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 competing CPU makers would be able to find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs' products, and later would likely cause a "leak" to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public about such backdoors (think: Black PR). Here people make an assumption that AMD or Intel is technically capable of reversing each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs processors, which seems to be a natural consequence of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m being able to produce cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

I don't think I fully agree with such an assumption though. Just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that you are capable of designing and producing a CPU, doesn't mean you can also reverse engineer it. Just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that Adobe can write a few hundred megabyte application, doesn't mean cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are automatically capable of also reverse engineering similar applications of that size. Even if we assumed that it is technically feasible to use some electron microscope to scan and map all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 electronic elements from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is still a problem of interpreting of how all those hundreds of millions of transistors actually work.

Anyway, a few more thoughts about properties of a hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical backdoors that Intel or AMD might use (be using).

First, I think that in such a backdoor scenario everything besides cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "trigger" would be encrypted. The trigger is something that you must execute first, in order to activate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor (e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CMP instruction with particular, i.e. magic, values of some registers, say EAX, EBX, ECX, EDX). Only 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 backdoor gets activated and e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor auto-magically escalates into Ring 0. Loic considers this in more detail in his paper. So, my point is that all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker's code that executes afterwards, think of it as of a shellcode for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor, that is specific for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS, is fetched by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor in an encrypted form and decrypted only internally inside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU. That should be trivial to implement, while at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time should complicate any potential forensic analysis afterwards — it would be highly non-trivial to understand what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor actually have done.

Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r crucial thing for a processor backdoor, I think, should be some sort of an anti-reply attack protection. Normally, if a smart admin had been recording all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network traffic, and also all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executables that ever got executed on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host, chances are that he or she would catch cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 triggering code and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shellcode (which might be encrypted, but still). So, no matter how subtle cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trigger is, it is still quite possible that a curious admin will eventually find out that some tetris.exe somehow managed to breakout of a hardware VM and did something strange, e.g. installed a rootkit in a hypervisor (or some Java code somehow was able to send over all our DOCX files from our home directory).

Eventually cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 curious admin will find out that strange CPU instruction (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trigger) after which all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 strange things had happened. Now, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 admin was able to take this code and replicate it, post it to Daily Dave, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, assuming his message would pass through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Moderator (Hi Dave), he would effectively compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor vendor's reputation.

An anti-replay mechanism could ideally be some sort of a challenge-response protocol used in a trigger. So, instead having you always to put 0xdeadbeaf, 0xbabecafe, and 0x41414141 into EAX, EBX and EDX and execute some magic instruction (say CMP), you would have to put a magic that is a result of some crypto operation, taking current date and magic key as input:

Magic = MAGIC (Date, IntelSecretKey).

The obvious problem is how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor can obtain current date? It would have to talk to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 south-bridge at best, which is 1) nontrivial, and 2) observable on a bus, and 3) spoof'able.

A much better idea would be to equip a processor with some sort of an eeprom memory, say big enough to hold one 64-bit or maybe 128-bit value. Each processor would get a different value flashed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re when leaving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 factory. Now, in order to trigger cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor vendor (or backdoor operator, think: NSA) would have to do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:

1) First execute some code that would read this unique value stored in eeprom for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 particular target processor, and send this back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m,

2) Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could generate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual magic for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trigger:

Magic = MAGIC (UniqeValueInEeprom, IntelSecretKey)

3) ...and send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual code to execute cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor and shellcode, with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct trigger embedded, based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 magic value.

Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor will automatically increment cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 unique number stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 eeprom, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same backdoor-exploiting code would not work twice for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same processor (while at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time it would be easy for NSA to send anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r exploit, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y know what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next value in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 eeprom should be). Also, such a customized exploit would not work on any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r CPU, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 assumption was that each CPU gets a different value at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 factory, so again it would not be possible to replicate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack and proved that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 particular code has ever done something wrong.

So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment I learn that processors have built-in eeprom memory, I will start thinking seriously cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are backdoors out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re :)

One thing that bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs me with all those divagations about hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical backdoors in processors is that I find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m pretty useless in at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 day. After all, by talking about those backdoors, and how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might be created, we do not make it any easier to protect against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re simply is no possible defense here. Also this doesn't make it any easier for us to build such backdoors (if we wanted to become cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bad guys for a change). It might only be of an interest to Intel or AMD, or whatever else processor maker, but I somewhat feel cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have already spent much more time thinking about it, and chances are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y probably can only laugh at what we are saying here, seeing how unsophisticated our proposed backdoors are. So, my Dear Reader, I think you've been just wasting time reading this post ;) Sorry for tricking you into this and I hope to write something more practical next time :)

Thursday, May 28, 2009

Thoughts About Trusted Computing

Here are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides about Trusted Computing I used for my presentations at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 EuSecWest today, and at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Confidence conference last week.

As this was supposed to be a keynote, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides are much less technical cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n our ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r slides, and also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are no new attacks presented cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. Still, I hope cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might be useful as some sort of an "alternative" introduction to Trusted Computing :)

A cool presentation I saw today was about PCI-based backdoors by Christophe Devine and Guillaume Vissian. They basically took a general-purpose FPGA programmable PC-card (AKA PCMCIA), flashed it with an FPGA "program" that implemented a simple state machine. The purpose of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 state machine was to wait until its DMA engine gets initialized and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n to modify certain bytes in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host memory, that happened to be part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 winlogon.exe process (IIRC cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y changed XOR AL, AL into MOV AL, 1, or something like that, at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of some password verification function inside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 winlogon.exe process). The slides should be available soon on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 conference website. I also hope cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y will publish all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code needed to flash your own personal "winlogon unlocker".

The live demo was really impressive — cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y showed a winlogon screen, tried to login a few times with wrong passwords, of course all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attempts failed, 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 inserted cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir magic, $300 worth, PC-card, and… 2 seconds later cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could log in using any password cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y wanted.

While not necessary being a breakthrough, as everybody has known such things could be done for years, I think it is still important that somebody eventually implemented this, discussed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technical details (FPGA-related), and also showed how to implement it with a cheap generic "reflashable" hardware without using a soldering iron.

Of course I have also discussed in my presentation how to prevent PCI-based backdoors (like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one discussed here) using VT-d, but this defense is currently only available if you use Xen 3.3 or later, and also requires that you manually create driver domain partitions and come up with a reasonable scheme for assigning devices to driver domains. All in all 99.9% of users are not (and will not be anytime soon) protected against such attacks. Oh, wait, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is actually a relatively simple software-based workaround (besides putting a glue into your PC-card slot, which is not a very subtle one)… I wonder who else will find out :)

Wednesday, March 25, 2009

Trusting Hardware

So, you're a decent paranoid person, running only open source software on your box: Linux, GNU, etc. You have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feeling you could, if you only wanted to, review every single line of code (of course you will probably never do this, but anyway). You might be even more paranoid and also try running an open source BIOS. You feel satisfied and cannot understand all those stupid people running closed source systems like e.g. Windows. Right?

But here's where you are stuck — you still must trust your hardware. Trust that your hardware vendor has not e.g. built in a backdoor into your network card micro-controller…

So, if we buy a laptop from vendor X, that might be based in some not-fully-democratic country, how do we know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y didn't put backdoors cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re? And not only to spy on Americans, also to spy on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own citizens? When was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last time you reverse-engineered all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PCI devices on your mocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rboard?

Scared? Good!

Enters cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 game-changer: IOMMU (known as VT-d on Intel). With proper OS/VMM design, this technology can address cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very problem of most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware backdoors. A good example of a practical system that allows for that is Xen 3.3, which supports VT-d and allows you to move drivers into a separate, unprivileged driver domain(s). This way each PCI device can be limited to DMA only to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory region occupied by its own driver.

The network card's microcontroller can still compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network card driver, but nothing else. Assuming we are using only encrypted communication, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is not much an attacker can gain by compromising this network card driver, besides doing a DoS. Similarly for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 disk driver — if we use full disk encryption (which is a good idea anyway), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is not much an attacker can gain from compromising cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 low-level disk driver.

Obviously cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 design of such a system (especially used for desktop computing) is not trivial ans needs to be thoroughly thought out. But it is possible today(!), thanks to those new virtualization technologies.

It seems than, that we could protect ourselves against potentially malicious hardware. With one exception however… we still need to trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU and also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory controller (AKA northbridge AKA chipset), that implements that IOMMU.

On AMD systems, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory controller has long been integrated into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor. Also Intel's recent Nehalem processors integrate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory controller on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same die.

This all means we need to trust only one vendor (Intel or AMD) and only one component, i.e. The Processor. But should we blindly trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m? After all it would be trivial for Intel or AMD to build in a backdoor into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir processor. Even something as simple as:

if (rax == MAGIC_1 && rcx == MAGIC_2) jmp [rbx]

Just a few more gates in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU I guess (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are apparently already about 780 million gates on Core i7, so a few more should not make much difference), and no performance penalty. Exploitable remotely on most systems and any more complex program I guess. Yet, totally undetectable for anybody without an electron microscope (and tons of skills and knowledge).

And this is just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 simplest example that comes to mind within just a few minutes. I'm sure one could come up with something even more universal and reliable. The fact is — if you are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU vendor, it is trivial for you to build in an effective backdoor.

It's funny how various people, e.g. European government institutions, are afraid of using closed source software, e.g. Windows, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are afraid of Microsoft putting backdoors cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. Yet, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not concerned about using processors made by some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r US companies. It is significantly more risky for Microsoft to put a backdoor into its software, where even a skilled teenager equipped with IDA Pro can find it, than it is for Intel or AMD, where effectively nobody can find it.

So, I wonder whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r various government and large corporate customers from outside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 US will start asking Intel and AMD to provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exact blueprints of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir processors. After all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y already require Microsoft to provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code under an NDA, right? So, why not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "source code" for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor?

Unfortunately cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is nothing that could stop a processor vendor to provide its customers with a different blueprints than those that are used to actually "burn" cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processors. So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 additional requirement would be needed that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y also allow to audit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir manufacturing process. Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r solution would be to hire some group of independent researchers, equip cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with an electron microscope and let cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m reverse engineer some randomly chosen processors… Hmmm, I even know a team that would love to do that ;)

A quick summary in case you get lost already:
  1. On most systems we are not protected against hardware backdoors, e.g. in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network card controller.
  2. New technologies, e.g. Intel VT-d, can allow to protect against potentially malicious hardware (requires specially designed OS, e.g. specially configured Xen)…
  3. … except for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 potential backdoors in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor.
  4. If we don't trust Microsoft, why should we trust Intel or AMD?
BTW, in May I will be speaking at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Confidence conference in Krakow, Poland. This is gonna be a keynote, so don't expect new attacks to be revealed, but racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r some more philosophical stuff about trusted computing (why it is not evil) and problems like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one discussed today. See you cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re!

Friday, March 20, 2009

The Sky Is Falling?

A few reporters asked me if our recent paper on SMM attacking via CPU cache poisoning means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sky is really falling now?

Interestingly, not many people seem to have noticed that this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 3rd attack against SMM our team has found in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last 10 months. OMG :o

But anyway, does cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact we can easily compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMM today, and write SMM-based malware, does that mean cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sky is falling for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 average computer user?

No! The sky has actually fallen many years ago… Default users with admin privileges, monolithic kernels everywhere, most software unsigned and downloadable over plaintext HTTP — cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main reasons we cannot trust our systems today. And those pacá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tic attempts to fix it, e.g. via restricting admin users on Vista, but still requiring full admin rights to install any piece of stupid software. Or selling people illusion of security via A/V programs, that cannot even protect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves properly…

It's also funny how so many people focus on solving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security problems by "Security by Correctness" or "Security by Obscurity" approaches — patches, patches, NX and ASLR — all good, but it is not gonna work as an ultimate protection (if it could, it would worked out already).

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 hand, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some emerging technologies out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re that could allow us to implement effective "Security by Isolation" approach. Such technologies as VT-x/AMD-V, VT-d/IOMMU or Intel TXT and TPM.

So we, at ITL, focus on analyzing those new technologies, even though almost nobody uses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m today. Because those technologies could actually make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 difference. Unlike A/V programs or Patch Tuesdays, those technologies can change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 level of sophistication required for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker dramatically.

The attacks we focus on are important for those new technologies — e.g. today Intel TXT is pretty much useless without protection from SMM attacks. And currently cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no such protection, which sucks. SMM rootkits sound sexy, but, frankly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bad guys are doing just fine using traditional kernel mode malware (due to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that A/V is not effective). Of course, SMM rootkits are just yet anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r annoyance for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 traditional A/V programs, which is good, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might not be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most important consequence of SMM attacks.

So, should cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 average Joe Dow care about our SMM attacks? Absolutely not!

Monday, January 26, 2009

Closed Source Conspiracy

Many people in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 industry have an innate fear of closed source (AKA proprietary software), which especially applies to everything crypto-related.

The usual arguments go this way: this (proprietary) crypto software is bad, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vendor might have put some backdoors in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. And: only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 open source crypto software, which can be reviewed by anyone, can be trusted! So, after my recent post, quite a few people wrote to me and asked how I could defend such an evil thing as BitLocker, which is proprietary, and, even worse, comes from Microsoft?

I personally think this way of reasoning sucks. In majority of cases, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact something is distributed without cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 accompanying source code does not prevent ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs from analyzing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code. We do have advanced disassemblers and debuggers, and it is really not that difficult to make use of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m as many people think.

Of course, some heavily obfuscated programs can be extremely difficult to analyze. Also, analyzing a chipset's firmware, when you do not even know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 underlying CPU architecture and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 I/O map might be hard. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are special cases and do not apply to majority of software, that usually is not obfuscated at all.

It seems like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 argument of Backdoored Proprietary Software usually comes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 open-source people, who are used to unlimited accesses to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code, and consequently do not usually have much experience with advanced reverse engineer techniques, simply because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do not need cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir happy "Open Source Life". It's all Darwinism, after all ;)

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 hand, some things are hard to analyze, regardless of 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 source code is available or not, think: crypto. Also, how many of you who actively use open source crypto software, e.g. TrueCrypt or GnuPG, have actually reviewed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code? Anyone?

You might be thinking — maybe I haven't looked at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code myself, but because it is open source, zillions of ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r users already have reviewed it. And if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was some backdoor in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y would undoubtedly have found it already! Well, for all those open source fetishists, who blindly negate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of anything that is not open source, I have only one word to say: Debian.

Keep in mind: I do not say closed source is more secure than open source — I only resist cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 open-source fundamentalism, that defines every proprietary software as inherently insecure, and everything open source as ultimately secure.

So, how should one (e.g. a government institution) verify security-level of a given crypto software, e.g. to ensure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are no built-in backdoors in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re? I personally doubt it could be performed by one team, as it just usually happens that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same people who might be exceptionally skilled in code review, system-level security, etc, at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time are average cryptographers and vice-versa.

Imagine e.g. that you need to find out if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are any weaknesses in your system drive encryption software, something like BitLocker. Even if you get access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code, you still would have to analyze a lot of system-level details — how is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trusted boot implemented (SRTM? DRTM? TPM interaction?), which system software is trusted, how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation withstands various not-crypto-related attacks (e.g. some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacks I described in my previous post), etc…

But this all is just system-level evaluation. What should come later is to analyze cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual crypto algorithms and protocols. Those later tasks fall into cryptography field and not into system-level security discipline, and consequently should be performed by some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r team, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 crypto experts.

So, no doubt, it is not an easy task, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is not C/C++ source code available, is usually one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 minor headaches (a good example is our attack on TXT, where we were able to discover bugs in Intel's specific system software, which, of course, is not open source).

Tuesday, September 02, 2008

The three approaches to computer security

If we looked at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 computer systems and how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y try to provide security, I think we could categorize those attempts into three broad categories:

1) Security by Correctness
2) Security by Isolation
3) Security by Obscurity

Let's discuss those categories in more detail below.

Security by Correctness

The assumption here is obvious: if we can produce software that doesn't have bugs (nor any maliciously behaving code), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we don't have security problems at all. The only problem is that we don't have any tools to make sure that a given code is correct (in terms of implementation, design and ethical behavior). But if we look at various efforts in computer science, we will notice a lot of effort has been made to achieve Security by Correctness: "safe" languages, code verifiers (although not sound ones, just heuristic based), developer's education, manual code audit, etc. Microsoft's famed Secure Development Life-cycle is all about Security by Correctness. The only problem is: all those approaches sometimes work and sometimes do not, sometimes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y miss some bug and also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are problems that I simple don't believe can be addresses by automatic code verifiers or even safe languages, like e.g. logic/design bugs or deciding on wheatear a given code behaves maliciously or not (after all this is an ethical problem in many cases, not a computer science problem).

To sum it: I think that in some more or less distant future (some people think abuout a timeframe of 50 years or so), we would get rid of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation bugs, thanks to safe languages and/or sound code verifiers. But I don't believe we could assure correctness of software on any higher level of abstraction cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n implementation level.

Security by Isolation

Because of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problems with effectively implementing Security by Correctness approach, people, from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very beginning, has also taken anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r approach, which is based on isolation. The idea is to split a computer system into smaller pieces and make sure that each piece is separated from 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 ones, so that if it gets compromised/malfunctions, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it cannot affect 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 entities in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system. Early UNIX's user accounts and separate process address spaces, things that are now present in every modern OS, are examples of Security by Isolation.

Simple as it sound, in practice cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 isolation approach turned out to be very tricky to implement. One problem is how to partition cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system into meaningful pieces and how to set permissions for each piece. The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r problem is implementation - e.g. if we take a contemporary consumer OS, like Vista, Linux or Mac OSX, all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m have monolithic kernels, meaning that a simple bug in any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel components (think: hundreds of 3rd party drivers running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re), allows to bypass of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 isolation mechanisms provided by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel to 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 system (process separation, ACLs, etc).

Obviously cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem is because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernels are monolithic. Why not implement Security by Isolation on a kernel level cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n? Well, I would personally love that approach, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 industry simply took anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r course and decided that monolithic kernels are better cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n micro-kernels, because it's easier to write cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m and (arguably) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y offer better performance.

Many believe, including myself, that this landscape can be changed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 virtualization technology. Thin bare-metal hypervisor, like e.g. Xen, can act like a micro kernel and enforce isolation between ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r components in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system - e.g. we can move drivers into a separate domain and isolate 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ý bet365 rest of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system. But again cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are challenges here on both cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 design- as well as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation-level. For example, we should not put all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 drivers into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same domain, as this would provide little improvement in security. Also, how to make sure that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor itself is not buggy?

Security by Obscurity (or Security by Randomization)

Finally we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Security by Obscurity approach that is based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 assumption that we cannot get rid of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bugs (like in Security by Isolation approach), but at least we can make exploitation of those bugs very hard. So, it's all about making our system unfriendly to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker.

Examples of this approach include Address Space Layout Randomization (ASLR, present in all newer OSes, like Linux, Vista, OSX), StackGuard-like protections (again used by most contemporary OSes), pointer encryption (Windows and Linux) and probably some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r mechanisms that I can't remember at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment. Probably cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most extreme example of Security by Obscurity would be to use a compiler that generates heavily obfuscated binaries from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code and creates a unique (on a binary level) instances of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same system. Alex did his PhD on this topic and his an expert on compilers and obfuscators.

The obvious disadvantage of this approach is that it doesn't prevent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bugs from being exploited - it only make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meaningful exploitation very hard or even impossible. But if one is concerned also about e.g. DoS attacks, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n Security by Obscurity will not prevent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in most cases. The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r problem with obfuscating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 performance (compiler cannot optimize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code for speed) and maintenance (if we got a crash dump on an "obfuscated" Windows box, we couldn't count on help from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technical support). Finally cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a problem of proving that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole scheme is correct and that our obfuscator (or e.g. ASLR engine) doesn't introduce bugs to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 generated code and that we will not get random crashes later (that we would be most likely unable to debug, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code will be obfuscated).

I wonder if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above categorization is complete and if I haven't forgotten about something. If you know an example of a security approach that doesn't fit here (besides blacklisiting), please let me know!