Several months ago, when Parallels Desktop for Mac was first covered on MacSlash, I posted a warning about the techniques used by Parallels in their Linux client.
I had conducted a cursory glance over the code in the main driver module distributed with the Linux version of Parallels Workstation and been dismayed to find :
Extracted from parallels-2.1.1670-lin/data/drivers/drv_main/ioctl s.c
<snip>
if (copy_from_user(&mFunc, arg, sizeof(struct monitor_functions_def_t) * MONFUNC_COUNT))
break;
/* setup functions pointers */
for (i = 0; i < MONFUNC_COUNT; i++)
param->iData.Moni torFuncs = (monitor_funct_t)mFunc.fId;
/* initialize callbacks */
vmSetExports(param);
/* Monitor open */
if (param->iData.MonitorFuncs[MONFUNC_OPEN]) {
ret = param->iData.MonitorFuncs[MONFUNC_OPEN](¶m- >drvInfo, 0, param);
}
</snip>
This is part of the ioctl() system call handler for a device created by the drv_main module installed by Parallels workstation.
Basically, it copies some function pointers in to the kernel from user space, installs them as event handlers (for what I'm not entirely sure), then calls one of them, while running in kernel mode! And it presumably calls the others at some point.
This means that any process that is able to make this system call on the device in question is able to introduce its own arbitrary code into your kernel. This may or may not even require administrative priveleges. Surreptitiously introducing code into the kernel is generally referred to as a rootkit. There are some protections on this; specifically the caller must be able to produce a special "salt" (like a really long password of random characters) that was generated when the module was loaded (this is an optional protection that can be easily turned off by the user). But if someone does figure out this salt (or it is disabled), they will have complete, unbridled access to literally everything on your computer (e.g., you're bank account number as you type it into your online banking website), and they will be able to alter the way in which the operating system does things like interpret the filesystem (e.g., if they don't want you to see the file "Evil Hacker Toolbox of Doom" you won't, even if you're an administrator). Really, subverting the ability to introduce random code into the most trusted component of a system is the ultimate ability.
Although I have only looked at part of their Linux version and none of their OS X version, my understanding of their design is that they're "hypervisor" straddles the divide between your operating system kernel, and the user space of your kernel by passing function references from a user land process to their modules. This design realizes none of the stability or security enhancing properties of the true hypervisor design because it shares an execution context with the primary OS kernel (it may take advantage of the speed benefits), and I believe it to be inherently insecure because it provides an easily exploitable mechanism by which arbitrary code can be run in a highly trusted execution environment. This is why I do not trust Parallels Workstation/Desktop.
The Mac OS X has thus far been relatively resistant to threats. This is partly due to its relative obscurity, but is also the result of a reasonable privilege model (I refuse to get sucked into the debate over which is more relevant; both are important). Long time Mac users remember the days before OS X when there was no hard separation between user space and kernel space; it was a dangerous time it which a single misbehaving application could wreak havoc across your whole platform. I don't want to go back to that time, but if I'm right about how Parallels' produce works, that is exactly where they are taking us.
If I am wrong about my interpretation of Parallels' design I urge someone more familiar with the inner workings of the software to set me straight. Because Parallels' software is mostly closed source, I believe the only people who are likely to be qualified to correct me are engineers working for Parallels, however anyone is welcome to try to dissuade me. I would also just like to take the chance to urge Parallels to provide full source code to their product so that others in the community are able to either verify my suspicions, or to disprove them (or maybe even verify that the problems exist, and correct them).
-jaaron