From: D Yuniskis on
Hi,

I'm deploying a prototype of a distributed system to
benchmark some algorithms before committing to final
hardware.

I have a large supply of 1GHz, 1GB diskless workstations
that I'll use (headless) as they are freely available,
small, reasonably (ha!) low power, etc. Almost everything
is written in portable languages so the fact that this
is x86 doesn't impact my codebase.

For the prototype system, I'll deploy 30 of these.
Most will be 100BaseTX ethernet. Some will be 802.11g
or n. A single server hosts images.

Since these are COTS boxes (and *diskless*), they are
indistinguishable from each other besides MAC. And,
MAC can be spoofed :-/

I was originally thinking of PXE booting each box. Then,
letting that bootstrap bring up the *secure* network for
the rest of IPL (key exchange, etc.).

But, I don't see any way that I can do this *without*
controlling the loading of the initial (PXE) image!
I.e., an attacker could intercept the PXE boot
request and force arbitrary code to be executed.
So, even if I added some local key storage, that
code could freely examine the key, reset the
processor and let the *next* PXE boot request go
through "as normal".

It seems like I *must* make the PXE sequence secure
if I want to have any hope of the rest of the process
being secure (?). I.e., boot locally (add some sort
of medium) and implement my own form of PXE boot. :<

However, the number of "tricks" that these folks
come up with for working in spite of adversary leaves
me never quite sure if someone hasn't already come
up with a workaround for this sort of situation -- ?

Any ideas?

Thx,
--don
From: Tauno Voipio on
On 2.7.10 6:19 , D Yuniskis wrote:
> Hi,
>
> I'm deploying a prototype of a distributed system to
> benchmark some algorithms before committing to final
> hardware.
>
> I have a large supply of 1GHz, 1GB diskless workstations
> that I'll use (headless) as they are freely available,
> small, reasonably (ha!) low power, etc. Almost everything
> is written in portable languages so the fact that this
> is x86 doesn't impact my codebase.
>
> For the prototype system, I'll deploy 30 of these.
> Most will be 100BaseTX ethernet. Some will be 802.11g
> or n. A single server hosts images.
>
> Since these are COTS boxes (and *diskless*), they are
> indistinguishable from each other besides MAC. And,
> MAC can be spoofed :-/
>
> I was originally thinking of PXE booting each box. Then,
> letting that bootstrap bring up the *secure* network for
> the rest of IPL (key exchange, etc.).
>
> But, I don't see any way that I can do this *without*
> controlling the loading of the initial (PXE) image!
> I.e., an attacker could intercept the PXE boot
> request and force arbitrary code to be executed.
> So, even if I added some local key storage, that
> code could freely examine the key, reset the
> processor and let the *next* PXE boot request go
> through "as normal".
>
> It seems like I *must* make the PXE sequence secure
> if I want to have any hope of the rest of the process
> being secure (?). I.e., boot locally (add some sort
> of medium) and implement my own form of PXE boot. :<
>
> However, the number of "tricks" that these folks
> come up with for working in spite of adversary leaves
> me never quite sure if someone hasn't already come
> up with a workaround for this sort of situation -- ?
>
> Any ideas?
>
> Thx,
> --don


PXE, and BOOTP / DHCP, is pretty promiscuous. The machine
being booted up is not selective to the boot image sent to it
nor to the server sending the image.

There are two kinds of attack to consider:

a) An unauthorized client attempts to get an authorized image,
b) An unauthorized server attempts to feed a fake image.

The MAC spoofing applies to a).

The problem is much the same as in HTTPS. You may need to
verify both the server and the client. To do this, you need
to install in a client both an individual client key and
the common server key, so the basic PXE boot code is not
sufficient.

The keys have to be exchanged in a secure way, either with
asymmetric encryption or challenge-response exchange with
symmetric encryption.

Just my .02 EUR.

--

Tauno Voipio
tauno voipio (at) iki fi

From: Glyn Davies on
D Yuniskis <not.going.to.be(a)seen.com> wrote:
> Hi,
>
> I'm deploying a prototype of a distributed system to
> benchmark some algorithms before committing to final
> hardware.
>
> I have a large supply of 1GHz, 1GB diskless workstations
> that I'll use (headless) as they are freely available,
> small, reasonably (ha!) low power, etc. Almost everything
> is written in portable languages so the fact that this
> is x86 doesn't impact my codebase.
>
> For the prototype system, I'll deploy 30 of these.
> Most will be 100BaseTX ethernet. Some will be 802.11g
> or n. A single server hosts images.
>
> Since these are COTS boxes (and *diskless*), they are
> indistinguishable from each other besides MAC. And,
> MAC can be spoofed :-/
>
> I was originally thinking of PXE booting each box. Then,
> letting that bootstrap bring up the *secure* network for
> the rest of IPL (key exchange, etc.).
>
> But, I don't see any way that I can do this *without*
> controlling the loading of the initial (PXE) image!
> I.e., an attacker could intercept the PXE boot
> request and force arbitrary code to be executed.
> So, even if I added some local key storage, that
> code could freely examine the key, reset the
> processor and let the *next* PXE boot request go
> through "as normal".
>
> It seems like I *must* make the PXE sequence secure
> if I want to have any hope of the rest of the process
> being secure (?). I.e., boot locally (add some sort
> of medium) and implement my own form of PXE boot. :<
>
> However, the number of "tricks" that these folks
> come up with for working in spite of adversary leaves
> me never quite sure if someone hasn't already come
> up with a workaround for this sort of situation -- ?
>
> Any ideas?
>
> Thx,
> --don

The good, old, chicken and egg prob

Are the devices physically secure?
If not the there is always a risk

Do a PXE boot and once up and running use a smartcard or other physical
dev to auth the connection to the net?

What is your secure network anyway?
Do you have 802.1x or anything?

It's a prototype anyway, so how extreme are the lengths you need to go
to?

Glyn
From: Boudewijn Dijkstra on
Op Fri, 02 Jul 2010 05:19:33 +0200 schreef D Yuniskis
<not.going.to.be(a)seen.com>:
> I'm deploying a prototype of a distributed system to
> benchmark some algorithms before committing to final
> hardware.
>
> I have

"I have" is the keyword here. You have control over the network.
Physical control for wired communications is easy; for any wireless-only
boxen you could put them in a shielded room.


--
Gemaakt met Opera's revolutionaire e-mailprogramma:
http://www.opera.com/mail/
(remove the obvious prefix to reply by mail)
From: Jim Stewart on
D Yuniskis wrote:
> Hi,
>
> I'm deploying a prototype of a distributed system to
> benchmark some algorithms before committing to final
> hardware.
>
> I have a large supply of 1GHz, 1GB diskless workstations
> that I'll use (headless) as they are freely available,
> small, reasonably (ha!) low power, etc. Almost everything
> is written in portable languages so the fact that this
> is x86 doesn't impact my codebase.
>
> For the prototype system, I'll deploy 30 of these.
> Most will be 100BaseTX ethernet. Some will be 802.11g
> or n. A single server hosts images.
>
> Since these are COTS boxes (and *diskless*), they are
> indistinguishable from each other besides MAC. And,
> MAC can be spoofed :-/
>
> I was originally thinking of PXE booting each box. Then,
> letting that bootstrap bring up the *secure* network for
> the rest of IPL (key exchange, etc.).
>
> But, I don't see any way that I can do this *without*
> controlling the loading of the initial (PXE) image!
> I.e., an attacker could intercept the PXE boot
> request and force arbitrary code to be executed.
> So, even if I added some local key storage, that
> code could freely examine the key, reset the
> processor and let the *next* PXE boot request go
> through "as normal".

> It seems like I *must* make the PXE sequence secure
> if I want to have any hope of the rest of the process
> being secure (?). I.e., boot locally (add some sort
> of medium) and implement my own form of PXE boot. :<
>
> However, the number of "tricks" that these folks
> come up with for working in spite of adversary leaves
> me never quite sure if someone hasn't already come
> up with a workaround for this sort of situation -- ?

I've gotta ask, is this a theoretical problem or are
you really concerned with someone hacking your prototype?

What kind of a prototype environment would you have that
you'd be worried about spoofed MAC addresses?

As others have pointed out, physical security should
be the first goal.

Assuming you really are concerned with someone hacking
your prototype network, wouldn't it be enough just to
*detect* a rouge PXE server? That should be easy enough.

Likewise, it should be possible to detect that your PXE
server has downloaded and validated one and only one good
image to each MAC address. With the existence of a
spoofed MAC, there should ultimately be more than one.

Finally, you could have a honeypot node. It could be
running an app that would look like a node wanting to
PXE boot, then validating the boot code it gets and
sounding an alarm if it's suspect. In fact, the PXE
server should be able to run a process that detects
other suspicious PXE servers. You could even bait
them with an inert boot and see who responds...