Uwe Hermann: Physical memory attacks via Firewire/DMA - Part 1: Overview and Mitigation
This is part 1 of a series on articles about the Firewire security issues mentioned below.
For many years now, attacks via Firewire / i.LINK / IEEE 1394 have been a known security issue. Basically, if you gain physical access to a PC or laptop which has Firewire ports (or PCMCIA/Cardbus/ExpressCard, more on that later) you can
- read arbitrary RAM contents from the victim's system,
- overwrite arbitrary RAM contents with whatever you want,
- and perform many, many severe attacks based on the two issues above. Examples include grabbing a full RAM dump via Firewire (takes only a few minutes), grabbing ssh-agent keys, grabbing screen contents, modifying screen contents, bypassing login/password screens, and many, many more...
- Pacsec 2004: 0wned by an iPod (PDF)
- 21C3: Hacking with Fire / Feuriges Hacken - Spa mit Firewire (PDF)
- Cansecwest 2005: Firewire: all your memory are belong to us (PDF)
- pyfw-20041111.tar.gz: Mac OS X Firewire bindings for Python, various demos
- http://c0re.23.nu/c0de/pyfw/: Other versions of the above code
- pyfw_linux.tar.gz: Linux Firewire bindings for Python (can be used with above demo code on Linux)
- ipod-linux-pyfw.tar.bz2: Instructions (+ disk image) on how to turn your iPod into a Firewire attack tool
- pythonraw1394-1.0.tar.gz: Python bindings for libraw1394 (Linux). Tools: businfo, romtool, 1394memimage
- winlockpwn: Python script which can circumvent a locked Windows XP screen (an arbitrary password will log you in)
- bioskbsnarf: Grabs/shows the BIOS keyboard buffer via Firewire (which often contains your BIOS password)
- 2007: OpenChaos: hacking in physically addressable memory (no extra slides)
- Easterhegg 2008: FireWire Hacking: paper (PDF), slides (PDF)
- More papers here...
- http://0null.net/software/SEAT1394/: tools and libraries for pyhsical memory access via Firewire/DMA: 1394csrtool, liblinear, libphysical, debug-sshkey, dump-memory, remote-ps, show-stack, snarf-sshkey, test-all-pagedirs, dmashell, ...
$ modprobe ohci1394 phys_dma=0I have personally tested this on some boxes and I can confirm that it renders the currently published tools useless. As for the new "juju" Firewire stack, I'm not so sure. A few quick tests showed that the currently available tools don't work with the new stack, but you shouldn't feel too secure! AFAIK the new stack does support (or will support soon) physical DMA for Firewire, so it's probably just a matter of adapting the tools a bit (I'll do some testing/research on this later, as time permits). Mitigation: Mac OS On Mac OS you might also be able to completely remove Firewire support from the kernel (but I don't know if/how that can be done, not sure if you can easily recompile Mac OS kernels, and/or if you even have buildable source code and toolchains for that). However, you can at least remove the Firewire support in the default Mac OS installation by unloading AppleFWOHCI.kext:
$ sudo kextunload /System/Library/Extensions/IOFireWireFamily.kext/Contents/PlugIns/AppleFWOHCI.kextThanks to a Daniel Reutter for letting me abuse his MacBook via Firewire and for finding the above kextunload command line. We have successfully tested that after unloading AppleFWOHCI.kext the current tools won't work anymore. The tests were done on a Mac OS X Tiger (I think) with all recent security updates applied. Please leave a comment if you can test other versions of Mac OS X... Mitigation: Windows As for Windows, well, I guess you're screwed. While Windows XP does implement sort of "protection" in that it only allows physical DMA access via Firewire to devices which "deserve it", e.g. iPods (or any other Firewire mass storage device, I guess) this can be easily defeated by having your attack PC/laptop pretend to be an iPod (see the romtool Python script by Adam Boileau). The only remaining option I know of (short of removing/destroying Firewire ports or preventing physical access alltogether) is to disable the Firewire ports/drivers in the device manager (untested by me so far). If you do that, remember to also disable all PCMCIA/Cardbus/ExpressCard controllers, of course (see above). So far I've tested Windows XP SP2/SP3 successfully with Adam Boileau's tools. I haven't yet been able to test Windows 95/98/Vista, if you can verify one of them, please leave a comment. Mitigation: OpenBSD/FreeBSD/NetBSD/OpenSolaris/... On OpenBSD you're likely not vulnerable as OpenBSD doesn't have any Firewire drivers at all, as far as I know ;-) As for FreeBSD, NetBSD, OpenSolaris, and other OSes I don't have any information. I might be able to test one or two of them in the nearer future, but please leave a comment if you have some information about whether they are vulnerable and/or how you can secure your system... Conclusion That's it for now. I hope you now have a good overview of these issues and how to protect. I can only urge you to take this problem seriously! Three or four minutes of leaving your laptop unattended are fully sufficient for an attacker to get a full forensic image of all your RAM contents for later analysis. This is at least as critical as the Cold Boot attacks, if not worse. I will follow-up with more articles about some more interesting details on these Firewire issues, how to use the above tools, and I'll report on some of the stuff I was able to find in RAM dumps gathered via Firewire...
Hi folks!
We’re almost done for the official Summer of Code program and I thought that I couldn’t let it end without another update, so here we are (you may thank Daniel Burrows for additional poking).
The Gtk+ interface for Aptitude is making great progress. The product is not final yet but already implements many of the planned ideas, with others to come.
Here are the screenies:



You can approach debconf translation work in two ways: you can be active and seek out packages to translate and update, or you can be reactive and translate and update packages when someone requests it to be done. Usually, nobody takes a purely active or reactive stance; for example, lately I used to react to calls for translation updates, but when I had some spare time I would go translate a couple of new packages.
When you work actively, the web page whose URL you need to know is 
( I love acronyms :-D )
)
In the meantime,
FFS. If you're running a forum site (
After excruciatingly long months of waiting for all pieces of the puzzle to fall into place, I am pleased to announce that
I'm in the process of converting my poor-man's SAN from IDE disks attached
to the host by IDE-USB adapters to SATA disks attached by eSATA to SATA
cables.
I had some spare time tonight, so I thought I'd prepare the new RAID-10 on
brutus. The intent is to then take the 4-port USB 2.0 card out of
minotaur during a lull in recordings on Saturday, and put it in
brutus as well, and do a giant pvmove, then put the
4-port eSATA card back in minotaur with the new disks attached.
So I've got the 4-port eSATA card (a Silicon Image SiI 3124) in
brutus, and I've built the RAID-10 with
I’m going to the Google Europe Headquarters in Zerich, Switzerland, tomorrow (July 10th).
Google is inviting us Summer of Code students, which is really nice.
I should be there in the middle of the afternoon from Paris.
I’ll be wearing a
There are few programs I use with so much combined love & loathing than GNU screen.
Yesterday I spent a while adding another feature I've been wanting for so long, the unbindall primitive.
In many cases I find myself using screen as a wrapper around other things. But usually I end up having to disable dangerous keybindings, to gain security or to protect users from themselves.
Typically this leads to a screenrc file looking like this:













