Slashdot Mirror


Graphing Randomness in TCP Initial Sequence Numbers

Saint Aardvark writes "This is neat: Graphic visualization of how random TCP Initial Sequence Numbers really are for different OSs. It's a great way of seeing how secure a TCP stack really is. Cisco IOS is great; OS9, OpenVMS and IRIX aren't. Posted to the ever-lovin' BugTraq mailing list." This is a follow-up to the previous report.

53 of 145 comments (clear)

  1. amazing by Phosphor3k · · Score: 5, Funny

    He must be running a server with no tcp stack. heh.

  2. New TCP/IP flags by Tinfoil · · Score: 5, Funny

    I propose a new flag in the standard TCP/IP packet. We shall call this the Slashdot Flag. The general purpose of this flag is to state whether or not the bandwidth limits of the server can handle the requirements a Slashdot posting can impose. If the flag is set false, Slashcode will automatically generate numerous, random, 'this page has been slashdotted' posts requesting a link to a mirror.

    That being said, the page *is* finally loading up so I'm going to go look at some pictures now.

    1. Re:New TCP/IP flags by guacamole · · Score: 2

      It won't really help. Something like that has already been considered

    2. Re:New TCP/IP flags by kubrick · · Score: 2

      I propose a new flag in the standard TCP/IP packet... If the flag is set false, Slashcode will automatically generate numerous, random, 'this page has been slashdotted' posts requesting a link to a mirror.

      To misquote Douglas Adams: "There is another theory that states that this has already happened."

      :)

      --
      deus does not exist but if he does
  3. Already Slashdotted by Quixote · · Score: 5, Insightful
    The story's barely out on /. and its already slashdotted.

    /. story submission page should have a checkbox: "Please mirror the contents of this page (including graphics, which Google doesn't cache) before posting the story".

  4. Original report by Caine · · Score: 5, Informative
  5. Re:I find it interesting by OrangeSpyderMan · · Score: 3, Informative

    You will find the original report here, and you might like to check out the linux section. Credit to a previous poster for that link, however.

    --
    Try NetBSD... safe,straightforward,useful.
  6. Comment removed by account_deleted · · Score: 4, Informative

    Comment removed based on user account deletion

  7. Re:Um, Why no Linux in the report by Clover_Kicker · · Score: 5, Informative
    >Why isn't Linux tested in the report? Its
    >certainly more common than many of the other
    >selections.
    >
    >Should we assume Linux matches *BSD or some other
    >flavor? or do I need to read more carefully :-)

    You need to read more carefully.


    In this section, we review a number of operating systems that were either identified as not satisfactory in the original publication, or were not covered by our research at the time. Several systems, such as Linux, use the same, satisfactory ISN generator as the one used a year ago, and because of that, are not covered here in any more detail.
  8. 3rd parties don't have the authority by DrSkwid · · Score: 4, Insightful

    "Please could you violate the site's copyright before posting the story"

    although "please use server xxx.xxx as the proxy" for submissions could be a solution

    could even set up Apache to do that on a url therefore subtly circumventing the copyright problem, banners could be passed through.

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
  9. Re:Previously posted.... by mvw · · Score: 2, Interesting
    Hm, I am not 100% sure, but isn't this the third time this article was featured on Slashdot?

    But it is still a nice article, illustrating Knuth's advice simply to plot random numbers to visually quickly judge the quality of a pseudo random number generator.

  10. Understanding Randomness by Nosher · · Score: 5, Insightful

    Lets face it: current computers and humans are both as bad as each other at randomness. The fact that computers have to "calculate" randomness is a bad sign in itself, and the humans that program these computers are almost utterly incapable of perceiving true randomness anyway. I'm waiting for the day when the national lottery comes up 1,2,3,4,5 with a bonus ball of 6. Society will crumble, public enquiries will be called for and conspiracy theorists will have something to bang on about for years. I think that barring the sudden development of Quantum x86 chips (at which point randomness becomes "real" and encryption becomes pretty much unbreakable), the only real solution for decent randomness must surely be TCP/IP seeding based on Lava Lamps

    --
    It's too late for me to die young
    1. Re:Understanding Randomness by Christopher+Thomas · · Score: 2

      Lets face it: current computers and humans are both as bad as each other at randomness. The fact that computers have to "calculate" randomness is a bad sign in itself, and the humans that program these computers are almost utterly incapable of perceiving true randomness anyway.

      Unless, of course, they're mathematicians, in which case they have a host of very powerful techniques for getting quite good evaluations of randomness, and a wide selection of sophisticated algorithms for producing really good pseudo-random sequences.

      In summary, you are both overstating the problem and ignoring the vast body of experience built up for dealing with it.

      You can also buy true random number generator cards off the shelf if you *really* can't live with a software solution. But be warned, these are suceptible to external influences (biasing them) and tend to be quite slow compared to PRNG techniques (even good PRNGs).

    2. Re:Understanding Randomness by thomasj · · Score: 5, Interesting
      Lets face it: current computers and humans are both as bad as each other at randomness. The fact that computers have to "calculate" randomness is a bad sign in itself [...]
      The funny thing is, that is really easy to construct a randomness hardware device. A zener diode can generate a lot of white noise just below its saturation point, so a circuit like this will do the trick:
      12V
      |
      R1
      |
      +-Z-/
      |
      R2
      |
      +-C1-/
      |
      C2
      |
      +-R3-/
      |
      SchmidtTrigger-/
      |
      Out
      For some reasonal values of the resistors and capacitors this would give a constant flow of ones and zeros that comes right out of the blue air (funny enough literally speaking) with more entropy than we will ever need.

      Cost: less than one dollar.

      --
      :-) = I am happy
      :^) = I am happy with my big nose
      C:\> = I am happy with my OS
    3. Re:Understanding Randomness by Nosher · · Score: 2, Insightful

      Absolutely. I'm sure there are other, numerous, ways of utilising the properties of "hardware" to generate something far more random than a programming algorithm could ever achieve. And this is the paradox - why, when it is so straightforward (and cheap) to get true randomness from the unstable, analogue properties of simple electronic devices, do they not feature more commonly as a basic mobo component (whither the random number generator DIMM module?), in the way that, for example, there's *always* a system clock (or at least timer) available. Instead, more effort has been invested in trying to emulate randomness with increasingly complex software-based algorithms that can never be really random precisely because they are programs.

      --
      It's too late for me to die young
    4. Re:Understanding Randomness by ryanvm · · Score: 2

      I'm waiting for the day when the national lottery comes up 1,2,3,4,5 with a bonus ball of 6.

      Well, since the odds are only 1 in a million (literally) that it will ever happen, I wouldn't hold my breath.

    5. Re:Understanding Randomness by Graff · · Score: 3, Informative

      The main problem is that this may not be as random as you may think. Many of these "random" fluctuations are actually fairly non-random, relating to electromagnetic fields around the circuit. So what may seem random one moment can become very non-random the next as the conditions around the circuit change. That being said, these kind of circuits could possibly serve as seeds to a random number generator. However, I'm unsure if it would be better to have a regular, dependable seed device such as a clock, or to have a semi-random, unreliable device such as the circuit you have proposed.

    6. Re:Understanding Randomness by AJWM · · Score: 2

      Well, there are sources for this stuff on many mobos. The randomness is confined to the last couple of bits, so you'd have to take several of these together to get anything useful.

      The sources I'm referring to are the CPU and ambient temperature sensors and the fan RPM sensors. Now, once a system has been running for a while these numbers will tend to stabilize around a specific value for a given system and configuration (your fan speed and CPU temp shouldn't be fluctuating wildly!), but the last couple of bits ought to fluctuate some. (Depending on specific hardware and the driver that reads it.)

      --
      -- Alastair
    7. Re:Understanding Randomness by AJWM · · Score: 2

      Since these interrupts are generated by events external to the computer (mouse movement, network events, etc.) the distribution is truly random.

      Actually there was some discussion on the kernel mailing list recently about this. On, say, a rackmounted server you don't have mouse and keyboard interrupts, the only source of entropy is the timing of network events -- which in theory can be controlled by an outside entity (some other machine on the network). This leads to a theoretical non-randomness of /dev/random if some attacker is carefully controlling the timing of network packets.

      There was a patch offered for this but the side effects (taking much longer to generate an entropy pool) versus a practical assessment of the risk, were deemed not worth it.

      --
      -- Alastair
    8. Re:Understanding Randomness by swimmar132 · · Score: 2, Funny

      Actually, getting true randomness isn't necessary. All you need is unpredictability and unrepeatability.

    9. Re:Understanding Randomness by psych031337 · · Score: 2

      ...while the odds for any other combination being picked are just the same...

      The german lottery works with 6 picks from 49 possible, and the odds for ANY combination pulled from this are 1 to 13 billion IIRC

      --
      +++ath0
    10. Re:Understanding Randomness by Lars+T. · · Score: 2

      There was a close result in German Lotto 2, 3, 4, 5, 6, 26 (plus 2 extra numbers specific to German Lotto). Note how little they gave you for "5 Richtige" ("5 right") compared to other drawings.

      --

      Lars T.

      To the guy who modded me down from perfect to terrible Karma - Apple haters still suck

    11. Re:Understanding Randomness by Christopher+Thomas · · Score: 2

      An interesting qestion is: is there such a thing as true randomness? How would you define it?

      Read up on "entropy" for an introduction.

      A sequence is random if, no matter what you do, you can't predict it with more than the randomly-expected accuracy.

      Most people consider throwing a dice and reading the number on the top a random value. Is it? In theory, if you could measure the mass, stability, material etc. of the dice, the force which threw it, the properties of the table [...]

      Some processes are truly random. Various quantum effects (as far as we can tell). Things like thermal noise in circuits (which is what most electronic random-noise generators amplify). You correctly point out that it's hard to cancel all non-random inputs to a system that measures a truly random variable, but you can get very close (and have a value that approaches truly random probabilities within known tolerances).

      In practice, even (good) pseudo-random sequence generators are close enough for most practical purposes.

  11. Lessons in RNG by Anonymous Coward · · Score: 2, Insightful

    Posting anonymously because I'm not a whore.

    Given that the server is slashdotted, here are a few facts about pseudo-random number generators:

    Linear Congruential Generators are infamous for certain weaknesses, most notably that n-tuples fall "mainly on the planes": they lie on hyperplanes in higher dimensional space, depending on the additive and multiplicative parameters chosen.

    This doesn't mean that they are any worse for cryptography purposes, because even if you choose parameters that aren't as bad, once the generator parameters are determined and a seed is found, the sequence is deterministic.

    But, all is not lost. Modern generators often use shuffling techniques, where you keep track of a few dozen numbers at a time, and then pick one number to determine which of the pool to select, and a second number to replace that selected number. Even a poor LCG when accompanied by such a shuffling technique can perform well. Well, not a really poor one--IIRC randu had problems that shuffling would not fix. I believe the gnu lrand48 and friends use this shuffling technique, as well as CMUCL. I suppose this can be even better if you populate the initial pool of numbers from outside the pseudo-random sequence, so that the potential attacker has almost no shot at figuring out what you seeds are, but to scientists who aren't worried about cryptographic purposes, that is counter-productive. I believe that there are some generators that have been proven 'non-invertible'--you can not go backwards in the sequence except by performing brute force search. Whether or not TCP geeks use these is beyond my knowledge.

    But, all is still not safe. You have to be careful about how you change your random number into a usable number. Often people use the high-order bits (e.g., they multiply by some number and then round off). This can be a mistake (of course depending on what your generator really is, and what your purposes are).

    1. Re:Lessons in RNG by tlk+nnr · · Score: 2


      Given that the server is slashdotted, here are a few facts about pseudo-random number generators:


      Interesting, but offtopic.

      The TCP standard forbids to use random numbers as the initial sequence number. If you use random numbers, you cannot guarantee that the sequence number for one (dest_ip,dest_port,source_ip,source_port) tupel are monotonically increasing.
      That monotonic increase, which should be faster than the network transfer rate, is needed to reduce the probability of data corruption from stale packets.

      The solution are one way hash functions, as described in RFC 1948
  12. Re:Interesting... by jonr · · Score: 2

    Is this a subtle joke? Maybe the graphs are not available because of the /. effect? DUH!
    At least I am seeing it very clearly.
    And the moderators are on crack again.

  13. Mirror in case of further slashdotting by vidnet · · Score: 2, Informative
    I got through fairly easily, but just in case it gets worse, Here's a mirror.

    It's just a 133mhz netbsd box on a home adsl line though, but I figured the more the merrier.

    1. Re:Mirror in case of further slashdotting by Koyaanisqatsi · · Score: 2, Funny

      It's just a 133mhz netbsd box (...)

      Gosh, what all those years of slashdot have done to me? I actually read "It's just a leemhz netbsd box" once or twice before turning off my automatic l337 translator.

      I need to get out more ...

  14. NextStep? by norwoodites · · Score: 2

    Why test NextStep? Because he still uses it? It will not and has not been upgraded in about 5 years unless you count Mac OS X as the upgrade (which it is).

    1. Re:NextStep? by squaretorus · · Score: 2

      It is always worth testing some bizarro platforms if only to show how much / little progress has been made since they were more common.

      One of the problems I have with the standard 3D card benchmarks is that they progress too quickly. My VoodooBanshee scored pretty well when it was bought, and I still use it in my 3rd machine, but I have no way of seeing how well it performs against the current crop because the benchmark tools are annual releases, and the scoring changes so much.

      It would be good if these had a popular old system from 1, 2 and 3 years ago to run the same tests on. It would probably result in more sales from us 'dont really know/care' guys because we'd suddenly know that we are only 22% as good as a new card costing just £150.

  15. Any hw based ISN generators? by ch-chuck · · Score: 4, Interesting

    't be cool to have a board with a bit of radioactive alpha source and a counter to make genuine random numbers. Like this, or, ha, here's one (3rd from the top) that proposes using disk drive air turbulance to generate random numbers!

    --
    try { do() || do_not(); } catch (JediException err) { yoda(err); }
  16. Re:Interesting... by IPFreely · · Score: 2
    They did show the graph for Win2000 SP2 and WinXP, along with the quote:

    One year later, we find that both Windows 2000 SP2 and Windows XP still use essentially the same ISN generator

    One might presume from this that the available graph is suitable for all of them.

    I Doubt MS had anything to do with the content of the report. The authors simply saved space by showing one graph for all of them.

    --
    There is nothing so silly as other peoples traditions, and nothing so sacred as our own.
  17. Re:Linux?? by raynet · · Score: 4, Informative

    If you read the article is says:

    3. New evidence In this section, we review a number of operating systems that were either identified as not satisfactory in the original publication, or were not covered by our research at the time. Several systems, such as Linux, use the same, satisfactory ISN generator as the one used a year ago, and because of that, are not covered here in any more detail.
    --
    - Raynet --> .
  18. "clearly it is a bunny rabbit" by Anonymous Coward · · Score: 2, Funny

    Not being well versed in statistics and math in general, I was struck by the resemblance of some of these pictures to images that i've seen of far off galaxy's and star clusters. Could it be that we live in a very high resolution of a randomness graph from some other universe???

    1. Re:"clearly it is a bunny rabbit" by mrogers · · Score: 2

      If so, let's hope they don't upgrade their PRNG or we'll all be blown apart into our constituent atoms!

  19. Wrong stack for OpenVMS by glenmark · · Score: 2
    "...OpenVMS and IRIX aren't."

    You are overlooking the fact that most OpenVMS installations use third party TCP/IP stacks, generally Multinet or TCPware from Process Software (the CMU stack being largely defunct now), which do not suffer from this defect. This is largely because the initial implementation of DEC's TCP/IP stack, UCX, was buggy as hell and lacked many features, although it is finally starting to catch up.

    Not that it matters much anyway. This predictable ISN weakness only threatens systems configured to trust others based solely upon their IP address (a bad idea). The only ways to crack a properly configured OpenVMS system currently involve (1)physical access to the console, (2) "social hacking" (tricking someone into telling you their password), or (3) packet sniffing for protocols which pass unencrypted passwords such as POP3 and telnet (easily solved by disabling such nonsecure protocols); three vulnerabilities which pose a threat to any OS, no matter how well designed. Nice having an OS which cannot be compromised via buffer overflow exploits (OpenVMS discards data from buffer overflows and raises an exception, always. Overflowing data cannot be executed).

    --
    *** Quantum Mechanics: The Dreams of Which Stuff is Made ***
  20. Re:What about home router sequence numbers? by mkettler · · Score: 3, Informative

    Agreed, such devices tend to have poor ISNs, but then again, they are for home use, and the ports they serve only respond on the INSIDE. Outbound traffic passes thru with more-or-less the same ISN it started with.

    Unless you don't trust people on your home lan, it's not much of an issue. Yes, it should be done right, but the only people that can exploit this are those within your network. If they are in your home, they can do much worse than hijack your session as you configure the router.

    As for outbound traffic, if you connect to an outside website from an inside PC, it uses the ISN that the PC generated and doesn't change it or adds some simple fixed constant. It still retains all of the entropy of the original PC's ISN. Nobody from the outside should be able to connect to the configuration server in the "DSL router" device. Hence, nobody from the outside really sees the poor entropy of the DSLRouter's ISNs.

    Only higher-end firewall products, ie: the cisco PIX, attempt to mangle the ISN generation as they translate hosts. Most of the simple products do not, and certianly none of the $100 DSL routers do.

    Also good ISN generation is actualy important to more "commercial" grade routers, since these devices are sometimes deployed and administered remotely, generate tunnels, etc. Thus these routers/firewalls sometimes have exposed ports, or exposed client traffic on a public network as they are being reconfigured.

    Of course, many are only configured localy, or over a local LAN, which makes the risk a lot lower, but also users on corprate lans are generaly less trusted than those in your own home.

    --
    -Matt
  21. Re:What about home router sequence numbers? by A+Commentor · · Score: 2

    But since alot of home users are buying Wireless Routers. They face a similar attack from the wireless interface as from the public internet...

    --

    Looking for any old 8-bit Heathkit/Zenith software/hardware - http://heathkit.garlanger.com

  22. Re:It's Microware by jweatherley · · Score: 2

    Unless Apple decided to start adding a version number to the version number

    You mean like MacOS X 10? ;)

    --

    --
    Reverse outsourcing: it's the future
  23. Such flags exist by yerricde · · Score: 2

    I propose a new flag in the standard TCP/IP packet. We shall call this the Slashdot Flag.

    There is already a flag in HTTP/1.1 (which operates on top of TCP) that allows Slashdot attacks to be detected. It's called the Referer: header. If the referer is slashdot.org then either refuse the visitor (bugzilla does this) or present a static page with low-resolution graphics.

    --
    Will I retire or break 10K?
  24. MOD PARENT UP by anonymous+loser · · Score: 2

    Thank you, I was going to say the same thing...the whole point of the paper is to demonstrate that hijacking a connection is entirely feasible on certain systems. Why else would you need to predict ISNs?

  25. IRIX INSECURE by drinkypoo · · Score: 2
    Film at eleven.

    The fact that they even have to mention that IRIX is insecure just shows how out of touch geekdom as a whole has become. Why even test IRIX for security holes? It's light years beyond swiss cheese.

    --
    "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
  26. Read the link... Linux did well the first time. by Andy+Dodd · · Score: 2

    Only those OSes which scored badly the first time around were retested.

    That said, the last test was for 2.2 - It would be useful to test 2.4 just for comparison. It sounded like 2.2 had a few *MINOR* flaws (Mainly a reduced number of bits of randomness, probably easily changed by changing the type of a variable or two) that despite being flaws, were insignificant. Something like a .03% probability of a successful attack. Satisfactory but not 0.

    Has 2.4 achieved a 0? (Or at least .0000001%?)

    Or what if the kernel developers accidentally screwed something up and 2.4 is worse than 2.2? (HIGHLY unlikely but still possible...)

    --
    retrorocket.o not found, launch anyway?
  27. RFC 1948 by XNormal · · Score: 3, Interesting

    A TCP implementation that generates initial sequence numbers using a trivial time dependency may be secure against sequence number guessing attacks if it implements RFC 1948.

    The idea is to add a bias to the sequence numbers that depends on the source address. A client will be able to predict his own sequence numbers but not the sequence numbers of others. The bias is calculated using a cryptographic hash of the connection ID and a secret value.

    A TCP implementation that uses RFC 1948 may still get a very poor rating for initial sequence number predictability from tools like nmap.

    Does anyone know any TCP stack that actually implements it?

    --
    Stop worrying about the risks of nuclear power and start worrying about the risks of not using nuclear power.
  28. Re:I find it interesting by fanatic · · Score: 2

    ... Linux is apparently beneath their contempt. Do they know something we don't know?

    From section 3 of the linked article:

    "Several systems, such as Linux, use the same, satisfactory ISN generator as the one used a year ago, and because of that, are
    not covered here in any more detail.
    "

    --
    "that's not encryption - it's a new perl script that I'm working on..." - from some Matrix parody
  29. Re:Which OS9? by Lars+T. · · Score: 2

    Apart from the version number thing, it still was better than that (that being OS 9) - and Windows 9x and NT up to service pack 3.

    --

    Lars T.

    To the guy who modded me down from perfect to terrible Karma - Apple haters still suck

  30. For great security... by po8 · · Score: 2

    It's a great way of seeing how secure a TCP stack really is.

    Yeah, right.

    Try the following: plot 500 points with point i having x coordinate Fib(i + 37) % 97 and y coordinate Fib(i + 97) % 97 (where Fib(i) is the i-th Fibonacci number). They look random, but in fact are totally predictable!

    Now imagine that someone got this right, and uses a crypto-secure PRNG to generate their TCP ISNs, seeding it with known-good random data. It would be nice to believe that this defeats all known TCP attacks! In fact, of course, their stack may be completely open to all kinds of attacks not involving ISN spoofing.

    The graphics are amusing, but not particularly informative except in the negative case. There is no substitute for real security. Testing can only prove a system insecure. ISN attacks are not the biggest worry in most TCP applications.

  31. When rulers go bad by Tablizer · · Score: 2

    Here is a case of "graphing randomness":

    http://www.cs.wisc.edu/~kovar/hall.html

  32. Re:Buffer overflows on VMS by glenmark · · Score: 2
    OpenVMS can not identify data which came Buffer overflows, and therefore, OpenVMS can also be exploited via buffer overflows - this can be prooved by writing just a few lines of C code.

    I would love to see such code, as this does not jive with what I've observed in my own socket coding. When a buffer overflow occurs on a VMS socket_read() call (at least under Multinet), the overflowing data doesn't seem to even get written to memory, let alone passed to DCL (unlike the situation in Unix and Windows where overflowing data gets passed to the shell).

    --
    *** Quantum Mechanics: The Dreams of Which Stuff is Made ***
  33. Re:I find it interesting by Shanep · · Score: 2

    satisfactory ISN generator

    If Linux having an attack feasibility of 0.05% is satisfactory, compared with OpenBSD's 0.00% for example.

    --
    War crimes, torture, lies, illegal spying... Would someone give Bush a blowjob, already, so he can be impeached?
  34. Re:I find it interesting by Shanep · · Score: 2

    That's less than 0.05%, to be accurate.

    Correct.

    and at the time of the last test, OpenBSD's attach feasibility was 5%, an order of magnitude worse.

    No, the original article states that the release of OpenBSD tested at the time (2.8), had an attack feasibility of 3.05%. It also states that OpenBSD -current had an attack feasibility of 0.00%.

    The level of bandwidth and time required to pull off a sub-0.05% feasability attack is so ridiculous that it it is completely impractical in the real world.

    But increasing bandwidth and processor speed will eventually make brute force guessing of 32-bit ISNs feasible for the average attacker.

    Linux is only 24bits wide. Thats a 128 times smaller area to guess than OpenBSD's and 3GHz P4's, broadband WAN's and Gigabit+ LAN's are upon us.

    Why the hell not fix it?

    --
    War crimes, torture, lies, illegal spying... Would someone give Bush a blowjob, already, so he can be impeached?
  35. Weak ISNs, nmap's Idlescan by Istealmymusic · · Score: 2
    nmap 3.0.0 supports a new feature called idlescan, which from the nmap-hackers posts I've gathered, idlescan scans ports indirectly without even touching the target machine. A "zombie" machine with weak sequence numbers is used to proxy the scan. Interesting stuff. Those with nmap can try it out:
    nmap -sI zombiehost victimhost
    --
    "The lesson to be learned is not to take the comments on slashdot too literally." --Vinnie Falco, BearShare
  36. Re:What about home router sequence numbers? by mkettler · · Score: 2

    >Simple free products like OpenBSD with pf/nat do.

    In the context I meant it, I'd certianly not call OpenBSD a "simple product". By simple I meant "designed with minimal work".

    OpenBSD has got a lot of well thought out and well placed security design. In that respect, I'd call it one of the higher end, carefuly engineered products.. even if it is free :)

    --
    -Matt