Slashdot Mirror


Is the x86 Architecture Less Secure?

An anonymous reader asks: "Paul Murphy at CIO Today reports that a specific Windows buffer overflow vulnerability ' depends on the rigid stack-order execution and limited page protection inherent in the x86 architecture. If Windows ran on Risc, that vulnerability would still exist, but it would be a non-issue because the exploit opportunity would be more theoretical than practical.' And implies that other Windows vulnerabilities are actually facilitated by having an x86 chip." How does the x86 processor compare with other architectures when it comes to processor based vulnerabilities? How well have newer additions, like the Execute Disable Bit, helped in practical situations?

315 comments

  1. thats because by Anonymous Coward · · Score: 3, Funny

    all x86 processors have an evil bit

    1. Re:thats because by Anonymous Coward · · Score: 0

      all powerpc processors have the expensive bit set :)

  2. PR as Journalism (not) by rossifer · · Score: 5, Interesting

    Paul Murphy, I'd like you to meet Paul Graham. What we have here is an Apple press release being printed up as a trade journal article.

    Good for Apple's PR firm. I guess.

    Not that I have anything against Macs or PowerPC hardware, I just don't like disengenuous authors (or their articles).

    Regards,
    Ross

    1. Re:PR as Journalism (not) by figleaf · · Score: 3, Interesting
    2. Re:PR as Journalism (not) by Anonymous Coward · · Score: 1, Funny

      Murphy and Graham? That's a match made in heaven if ever there was one. Imagine the articles; "SCO own LISP copyrights, offer licenses to those suffering from speech impediments".

    3. Re:PR as Journalism (not) by ErikTheRed · · Score: 5, Interesting

      Something about news articles in general (as I learned from one of my clients, a PR agency) - many "reporters" create "stories" by basically doing some light editing (if that) on a press release. If you want to get your product or service in a newspaper, magazine, etc., the best thing to do is to have a pre-written piece that the "reporter" can slap their name on. It's a reasonable bet, for instance, that any positive story in your local paper about some local business was written either by that business or their PR agency. That doesn't necessarily mean it contains untrue information, but it certainly colors whatever facts are included.

      This is the actual main reason for many people's complaints that news sources lean too far left or right or whatever - much of the "news" is generated by PR firms, advocacy groups, political parties, etc., given a very thin coat of paint, and slapped on the page. Some actual work is done on the editorial page, and in the reviews (although there have been some "reviews" done along these lines for things like restaurants - caveat emptor), but by and large you should take most newspaper and magazine stories with an appropriate grain of salt (unless you have a particularly high level of confidence in a specific writer or publication).

      --

      Help save the critically endangered Blue Iguana
    4. Re:PR as Journalism (not) by Anonymous+Luddite · · Score: 1

      >> is generated by PR firms, advocacy groups, political parties, etc., given a very thin coat of paint, and slapped on the page

      Writers are people. People are lazy. Small wonder PR firms are smart enough to exploit it...

    5. Re:PR as Journalism (not) by KillShill · · Score: 1

      did i hear someone say shill?

      please don't use the doublespeak word "PR" , it does a huge disservice to the readers and the language as a whole.

      --
      Science : Proprietary , Knowledge : Open Source
    6. Re:PR as Journalism (not) by Anonymous Coward · · Score: 0

      This could also be Trusted Hardware PR as well, planting the seed of doubt.

    7. Re:PR as Journalism (not) by Breakfast+Pants · · Score: 1

      Paul Graham, I'd like you to meet Paul Graham. Sorry it was too tempting not to point out that article. Check out that second link, it is "an Apple press release being printed up as a[n]" essay blog entry. Please don't take me too seriously, but I hope people don't take your post too seriously either.

      --

      --

      WHO ATE MY BREAKFAST PANTS?
    8. Re:PR as Journalism (not) by rossifer · · Score: 1

      Actually, I think the two examples of Mac advocacy are pretty dramatically different. It's clear that Paul Graham's blog entry is his opinion. It seems equally clear that the trade journal article is Apple's PR company's opinion.

      The difference is critically important to the ethics of both articles.

      Regards,
      Ross

    9. Re:PR as Journalism (not) by Anonymous Coward · · Score: 0

      What we have here is an Apple press release being printed up as a trade journal article.

      I doubt it. No Apple has ever shipped with a CPU with something equivalent to an "Execute Disable Bit". Sure they have RISC, but would they be throwing stones when thier glass house is nowhere near a big and strong as some SPARC, AMD or Intel based machines?

      Hell SPARC has had no-execute for YEARS and YEARS. If someone wants to talk about security at a CPU versus CPU level, they ought to be thinking about active mechanisms which are designed specifically with security in mind, instead of some obscure accidental benefit from an overall architecture versus another. RISC versus CISC? Seems lame to me, considering the issues which make a real difference in the area of low level CPU support.

    10. Re:PR as Journalism (not) by erntheburn · · Score: 1

      The truth is the best argument.

    11. Re:PR as Journalism (not) by Anonymous Coward · · Score: 0

      I don't know Paul Graham all that well, but do a little bit.

      He may be many things, but I'm pretty sure he's not a shill. I'm pretty sure he believes what he writes and also that anyone who doesn't agree with him is utterly wrong and mildly brain damaged :)

      Plus he's loaded, doesn't really need Apple's money. I know that doesn't stop a lot of people, but from what I know of him, I'd say money isn't a big motivator to him.

    12. Re:PR as Journalism (not) by rossifer · · Score: 1

      He may be many things, but I'm pretty sure he's not a shill.

      Correct. Please follow the links.

      I'm using Paul Graham's essay about shills to point out why Paul Murphy is a shill.

      Clear?

      Regards,
      Ross

    13. Re:PR as Journalism (not) by Anonymous Coward · · Score: 0

      Hey, this is slashdot, do you really expect me to RTFA? :)

  3. Happy Paul Murphy Day by Anonymous Coward · · Score: 5, Funny

    What, is there only one tech writer in the world? (See article two or three down on SCO)

    1. Re:Happy Paul Murphy Day by Anonymous Coward · · Score: 0

      maybe /. like him so much because he is just writing up PR from Apple and others? That way he confirms what many here wants to hear.

    2. Re:Happy Paul Murphy Day by jack_csk · · Score: 0

      What?

      I thought he was a new Microsoft employee, defending for Microsoft and SCO (Caldera).

    3. Re:Happy Paul Murphy Day by Anonymous Coward · · Score: 0

      a MS employee that concludes Mac is a better platform? that would be some conspiracy theory :)

  4. RISCy by FidelCatsro · · Score: 5, Insightful

    If windows Ran on a RISC arch then it would be just as insecure .
    The fact is not that this issue is an insecurity in X86 but the fact that windows uses it .If you know of a flaw in your architecutre then why are you programing
    to that flaw .

    --
    The only things certain in war are Propaganda and Death. You can never be sure which is which though
    1. Re:RISCy by Anonymous Coward · · Score: 0

      Meow Cats claws moderators...This is the issue People . If MS knows the Risk(pun) then whey the hell do they still use this feature.
      It may be a bit more secure on risk(another pun) . Hardly though as they still take as little intrest in the security.

    2. Re:RISCy by Anonymous Coward · · Score: 0

      Because it's cheaper, standardized, and has backwards-compatibility.

    3. Re:RISCy by Anonymous Coward · · Score: 0

      ? they are programing to a flaw because the flaw has backwards-compatiblity and is cheaper ? . I think you misunderstood me , im not insulting CISC or x86 but insulting MS relying on this feature

      FidelCatsro

    4. Re:RISCy by nocomment · · Score: 5, Insightful

      Bingo. Well said. OpenBSD runs on x86, does it have this flaw?

      --
      /* oops I accidentally made a comment, sorry */
      /* http://allyourbasearebelongto.us */
    5. Re:RISCy by ArbitraryConstant · · Score: 2, Interesting

      Exactly.

      The security advantage of MacOS X is a lack of braindead design decisions, it has nothing to do with PowerPC.

      --
      I rarely criticize things I don't care about.
    6. Re:RISCy by Anonymous Coward · · Score: 1, Insightful

      Yep , that and the BSD core ;) hehe .
      Linux/ free,darwin ,open,net:BSD don't have these problems .
      if you choose a specific architecuture such as x86 then you don't dont program to its weakness you go for its strengths like the BSDs and linux do .

      Fcat!

    7. Re:RISCy by Michalson · · Score: 5, Insightful

      Microsoft isn't the one relying on it, they just are supporting it to a degree because they understand the marketing importance of having backwards compatiblity for all the stuff people use (from a Joe user/Bob Company perspective, what's the point of "upgrading" to the latest version if suddenly your software/hardware stops working). Microsoft actually has got a lot of flak for making things tighter; a big one being the 9X->NT path that made a lot of API calls do a better job of checking parameters, resulting in sloppy programs being broken. More recently the SP2 update broke programs that mess with memory like a virus/exploit. So make up your mind - are they bad for maintaining backward compatiblity that is less secure/less stable, or are they bad for tightening things up and thus breaking a few badly written 3rd party programs people rely on.

    8. Re:RISCy by SpinJaunt · · Score: 2, Informative
      ...are they bad for maintaining backward compatiblity that is less secure/less stable, or are they bad for tightening things up and thus breaking a few badly written 3rd party programs people rely on...
      you obviously haven't seen the list: http://support.microsoft.com/default.aspx?kbid=884 130&product=windowsxpsp2/ more info: http://support.microsoft.com/default.aspx?kbid=842 242/ Enjoy..
      --
      /. is good for you.
    9. Re:RISCy by Anonymous Coward · · Score: 0

      love that sig

    10. Re:RISCy by Anonymous Coward · · Score: 0

      If they got it right the first time then nothing would have broken and the "sloppy" programs wouldn't have been allowed to be that way.

      You have to get pretty sloppy/creative when it comes to most of Windows APIs.

    11. Re:RISCy by Anonymous Coward · · Score: 0

      Did you read the list?
      Firewalls, games, anti-virus, browser plugins and "boot screen changers" (lol) are bound to break when you have to make A LOT of changes to things.
      The only popular software I saw on the list outside if the above mentioned "integrated" stuff, is Photoshop, and it says on the list that it only fails on x64.
      Considering everything added with SP2, I'd say that's pretty good.

    12. Re:RISCy by NutscrapeSucks · · Score: 3, Interesting

      To be fair, OpenBSD doesn't really care much about performance, and is willing to take a big speed hit for security. They have implemented workarounds for the architecture that have been deemed unacceptable elsewhere (Linux). All of this is pretty recent -- a few years ago, they had all the same fundemental problems as everyone else.

      --
      Whenever I hear the word 'Innovation', I reach for my pistol.
    13. Re:RISCy by Waffle+Iron · · Score: 1, Troll
      So make up your mind - are they bad for maintaining backward compatiblity that is less secure/less stable, or are they bad for tightening things up and thus breaking a few badly written 3rd party programs people rely on.

      They're bad for cutting corners in the first place and getting to the top by creating a platform where "badly written" programs were the norm.

      They're not stupid. They knew full well what the security requirements would be in a fully connected world. However, they also knew that their average customer had no clue what the issues were going to be, and they took advantage of that lock them in with file formats, user training and app compatibility barriers before most of their customers knew what was ultimately in store.

      If they had taken the time to properly secure their products *before* they introduced them to the server and Internet marketplace, they wouldn't have this dilemma today. That was a calculated risk they took in their forced march to eliminate any competition. Now they hava a multi-year slip in their next OS schedule largely because they had to backport security into their previous release. It serves them right.

    14. Re:RISCy by fitten · · Score: 1

      Except there really isn't such thing as RISC any more. Go look up the number of ops that a PowerPC supports, for example, and compare that to the number a Pentium 4 supports (include both Altivec and SSE2). You might be surprised at what you find (Spoiler: PowerPC has more opcodes than Pentium 4 x86). This might have changed since the adoption of x86-64, though, I haven't counted since that addition.

      Load/store vs. memory/memory is the best comparison terms.

  5. Is this the Astrodome? by winkydink · · Score: 5, Insightful

    2 articles in under 4 hours submitted by an "anonymous reader" that point to Paul Murphy at CIO Today. Hmmmm... Astroturf anybody?

    --

    "I'd rather be a lightning rod than a seismometer." -Ken Kesey

    1. Re:Is this the Astrodome? by FidelCatsro · · Score: 1

      ... Hes a busy boy aparently . Perhaps a coincidence .. or sponsership..
      This issue itself is intresting though . Though i am fairly sure it was discussed a couple of years back when AMD introduced the non executable area in the Athlon and opteron chips

      --
      The only things certain in war are Propaganda and Death. You can never be sure which is which though
    2. Re:Is this the Astrodome? by stevesliva · · Score: 2, Funny
      Draw dubious conclusions from circumstantial evidence that question the anti-wintel open source orthodoxy, get cited on Slashdot!

      Right this instant, I'm working on my "Windows better for pirating media files" opinion piece. It's a surefire winner.

      --
      Who do you get to be an expert to tell you something's not obvious? The least insightful person you can find? -J Roberts
    3. Re:Is this the Astrodome? by Anonymous Coward · · Score: 0

      Be sure to write it under the pseudonym Paul Murphy.

    4. Re:Is this the Astrodome? by dascandy · · Score: 1

      How long would it take to think up a lie that somebody might be fooled by?

      If Mr. Murphy had written everything in esparanto, he wouldn't have lied. Yet, he doesn't use esparanto, so he is lying.

      (note, the second sentence is an equivalent sentence more-obvious-for-the-less-x86-savvy among us)

  6. I gotta call bullshit on this one... by HotNeedleOfInquiry · · Score: 5, Informative

    Blame the machine or blame the programmer? You can write x86 code without buffer overflows, period. That you can be more sloppy on other architectures and not get overflows seems silly. Like "everyone should drive Volvos cause they are safer."

    Lots of things can be laid at the feet of x86 architecture, but not that it seduces programmers into writing code with buffer overflows.

    --
    "Eve of Destruction", it's not just for old hippies anymore...
    1. Re:I gotta call bullshit on this one... by Anonymous Coward · · Score: 2, Insightful

      Blame the machine or blame the programmer?

      How about blaming both?

      A machine can make it more difficult for extremely common types of attack to be successful. If it doesn't, then it shares some of the blame.

      A programmer can avoid troublesome functions and coding styles, can test with bad data more thoroughly, and can use automated tools to catch these problems before they are a security issue. If they don't, then they share some of the blame.

      A programming language can mitigate these issues by providing standard library functions that aren't vulnerable to being misused in this way, bounds-check, provide higher-level libraries, etc. If it doesn't, then it shares some of the blame.

      A manager can reduce risk by giving the programmers the resources to do their jobs properly, mandating safer languages, instituting code reviews, pushing back schedules instead of skipping QA, etc. If they don't, they share some of the blame.

      Security is only as strong as the weakest link, and nobody in the chain is ever perfect.

    2. Re:I gotta call bullshit on this one... by Anonymous Coward · · Score: 0

      You think that driving the safest car on the market is silly? You're crazy if you don't know everyone should drive Volvos.

    3. Re:I gotta call bullshit on this one... by Anonymous Coward · · Score: 1, Interesting

      I think his point was that driving the safest car may not be recognized as the most important criteria while buying a car...

      and in reality it was just symbolic, because anyway volvos theese days are just as plastic as any car

    4. Re:I gotta call bullshit on this one... by AaronD12 · · Score: 3, Insightful
      You are correct that you can write x86 code without buffer overflows. I've always thought that dynamically-assigned buffers were trouble since I first learned them.

      What the author of this article is saying is that PowerPC-based computers would only have a 1-in-6 chance of being able to execute code arbitrarily spilled over actual code via buffer overflow.

      Moreover the way that data and code "segments" (I'm using the x86 word here) just don't work the same way on PowerPCs. This essentially prevents arbitrary code from being executed on this particular RISC processor.

      This is not a Mac-specific thing. Any computer (RS6000, AS/400, IBM xSeries, etc.) with a PowerPC family processor will have this benefit.

      Windows might still be insecure, but it would be less insecure running on a PowerPC RISC processor.

      -Aaron-

    5. Re:I gotta call bullshit on this one... by SirSlud · · Score: 1

      Its not Volvo. Stop using that name. Its Ford.

      --
      "Old man yells at systemd"
    6. Re:I gotta call bullshit on this one... by Anonymous Coward · · Score: 2, Interesting
      This is complex. Simply adding NX to x86 doesn't mean much, the platform still has to know when heap is code and when it's heap and when it switches from one to the other and it's not easy to retro fit in, x86 platforms would be different, probably not substantially but still different and there'd be no legacy, had NX been there a long time ago.


      As for bugs, I agree with you but I also know how easy and how common it is. We need to use multiple tools, just saying hire better coders or something to that effect is a cop-out. We need to use programming technologies that are better suited for the problems and less prone to these kinds of defects, we needs platforms that take security seriously and provide different mechanisms for enforcing policy and then ultimately hardware that allows those platforms to be created and operate correctly. Sure, we can take plain old x86 and write bug free code and make it more "secure," unfortunately, that's just not practical or affordable.


      I'd rather have my buggy code produce a segfault and cause a process to be restarted than expose sensitive data or allow an attacker to execute arbitrary code on my machines. I'd really like it to be completely bugfree but that's just not very realistic, in the mean time I'd rather deal with a DoS than a full root compromise..

    7. Re:I gotta call bullshit on this one... by noidentity · · Score: 1

      Windows might still be insecure, but it would be less insecure running on a PowerPC RISC processor.

      It's even more secure with the power cord removed from the wall.

    8. Re:I gotta call bullshit on this one... by abborren · · Score: 1

      Security is stronger than the weakest link. If all those links would together cover 100% of all attacks it is stronger than the individual links. Which can not be said about chains. I hate comparisons to chains and links.

      --
      ><////>
    9. Re:I gotta call bullshit on this one... by Anonymous Coward · · Score: 0

      If all those links would together cover 100% of all attacks

      Impossible. Kidnap the CTO's daughter to get him to divulge the passwords.

      You simply cannot prevent 100% of all attacks. You can prevent most reasonable ones. You can mitigate the effects of most of them. You can reduce the risk of almost all of them. But there will always be a vector of attack, so there will always be a weakest link.

    10. Re:I gotta call bullshit on this one... by abborren · · Score: 1
      To make a simplified, imaginary example: If mechanism A makes sure there are no buffer overflows on static sized arrays and mechanism B assures no overflows on dynamically sized arrays, then both type of overflows are covered.

      If the analogy of the weakest link would hold, no overflows at all would be prevented.

      --
      ><////>
    11. Re:I gotta call bullshit on this one... by Anonymous Coward · · Score: 0

      YHBT YL HAND

    12. Re:I gotta call bullshit on this one... by Anonymous Coward · · Score: 0

      Your logic only holds if those two types of buffer overflow are the only possible security holes. This is not the case.

      To use your example, if you successfully prevented both types of buffer overflow, what stops you kidnapping the CTO's daughter? This would be a weaker link than your prevented buffer overflows, so the difficulty of kidnapping her would be the theoretical maximum strength of your security (assuming no other attack vectors exist).

    13. Re:I gotta call bullshit on this one... by m4dd00d · · Score: 1

      BS. About array resizing? You'd have to update the array bounds check dynamically because you'd only be able to check it once in the compiler.

      --

      MGE Viper Case/DFI LanParty UT NF4/3 x WD Raptor 64GB
      AMD Athlon 64 FX-55/ATI Radeon X800 Pro/1GB XMS 3200
    14. Re:I gotta call bullshit on this one... by Chmarr · · Score: 1

      So... are you saying... an analogy is as strong as its weakest link?? :)

  7. I've been running Windows on PPC... by Reverend528 · · Score: 0

    And it's so secure that even I can't get admin privileges...

  8. How Long? by blueadept1 · · Score: 0, Interesting

    x86 has been around how long? 15+ years? And they just begin discussing this now?

    1. Re:How Long? by Anonymous Coward · · Score: 1, Informative

      Well, yes, in the sense that 25 is more than 15.

      The 8086 (and its lesser brother the 8088)came out in 1980, IIRC.

    2. Re:How Long? by Anonymous Coward · · Score: 1, Informative

      My 8086 processor is stamped 1978.

  9. Yeah, ok. by Anonymous Coward · · Score: 0

    Or, "Is Mac OS X on PPC less secure?" - It would be the same, worthless article if it were provided by Paul Thurott, on the opposite side of the fence.

    This is just another guy that just got done giving Steve Jobs a blowjob. Let's move on.

    1. Re:Yeah, ok. by Keamos · · Score: 1

      Welcome to Slashdot.

  10. Funny... by scovetta · · Score: 5, Insightful

    If Windows ran on Risc, that vulnerability would still exist, but it would be a non-issue because the exploit opportunity would be more theoretical than practical.

    Funny how exploits that are "just theoretical" don't stay that way forever...

    --
    Wer mit Ungeheuern kämpft, mag zusehn, dass er nicht dabei zum Ungeheuer wird. --Nietzsche
    1. Re:Funny... by Slak · · Score: 1

      Yeah, coz OpenBSD on x86 is soooooo insecure....

      -Slak

    2. Re:Funny... by capilot · · Score: 1

      Ten years ago a CERT advisory came out with my name on it due to a buffer overflow exploit in code I'd written for Solaris/Sparc (in my defense, I'd copied-and-pasted the offending section from someone else's code).

      I've often speculated that buffer-overlow exploits would not be such a problem if stacks grew in the other direction, but suggesting that it's somehow unique to x86 is ludicrous.

    3. Re:Funny... by pipingguy · · Score: 1


      I remember the days when these exploits were much more sinister in nature.

      For example, while completing a paper drawing of a refinery unit, sometimes my 0.3mm plastic lead pencil (while drawing on mylar) would just disappear, leaving me with nothing to do. Other times, I'd arrive in the morning to find that someone had replaced my original drawing with 17 or 23 (can't be sure, really) copies of it. Then I had to figure out which one was the REAL original. Drawing on a copy is pointless, because the REAL original was elswhere and someone would sneak in a modified "original" the next day and the boss would claim that I didn't do anything the previous day.

      Other times, I'd send some blueprints to the field only to find out later that they had been mysteriously translated into Polynesian for no apparent reason, and 3 Polynesian engineers had to be hired, trained and taught the safety rules for the construction site.

      I could continue, but somehow I think I'm going to get replies that are promoting more software as the solution. It must be nice in that fantasy world.

    4. Re:Funny... by Anonymous Coward · · Score: 0

      I've often speculated that buffer-overlow exploits would not be such a problem if stacks grew in the other direction

      Sure they would.

      If stacks grew in the same direction as buffers are written (from lower to higher memory addresses), then: (1) function 1 allocates a buffer and passes that buffer as an arg to function 2; (2) function 2 writes TO that buffer from some user-supplied argument and that buffer overflows -- overwriting the $ra of function 2 -- so that function 2 returns to an arbitrary location.

      Slightly different preconditions but not less likely preconditions nor a less effective attack.

    5. Re:Funny... by kasperd · · Score: 3, Interesting

      Funny how exploits that are "just theoretical" don't stay that way forever...

      I always liked this phrack article about how to exploit an appearently unexploitable bug. After reading this, I would be very cautious about clasifying a bug as unexploitable.

      --

      Do you care about the security of your wireless mouse?
  11. Stack by Sloppy · · Score: 4, Interesting
    The x86 has always been known to be inferior. But the most blatant problem isn't lack of execution permission bits by page, or anything subtle. The biggest problem is something so huge and obvious, that people have stopped being able to see it, because they're completely immersed in it.

    On x86, the stack grows backwards. Backwards! A stack overflow ought to overwrite unallocated space, not earlier stack frames and return addresses. It's totally insane.

    But I guess when you live with insanity year after year, you get used it.

    --
    As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
    1. Re:Stack by Anonymous Coward · · Score: 0

      why would up equal non-allocated?

      Overflowing memory is bad, period.

    2. Re:Stack by Anonymous Coward · · Score: 0

      Actually, on the x86 the stack can grow upwards or backwards. On Win32, the stack is set to grow upwards so that an exception is generated on stack overflows

    3. Re:Stack by mce · · Score: 1

      Yes overflowing is always bad, but overflowing down opens up a lot more opportunities for the kiddies.

    4. Re:Stack by enosys · · Score: 1

      Having the heap grow forwards and the stack grow backwards made sense back before multitasking and virtual memory. It's just one of the many archaic things in the x86 architecture.

    5. Re:Stack by kernel_dan · · Score: 2, Insightful

      The stack goes backwards and the heap goes upwards. They grow in opposite directions to minimize wasted space. You would prefer heap overflows to overwrite the stack frames and return addresses?

      Careful programming when dealing with memory in a language without builtin bounds checking is the solution to this problem.

      --

      Illegal? Samir, This is America.
    6. Re:Stack by Sloppy · · Score: 2, Insightful
      why would up equal non-allocated?
      Well, some direction needs to be unallocated.
      Overflowing memory is bad, period.
      Hey, I can't say "bugs are ok." It's just a question of how catastrophic you want the bugs to be. Maybe having them always be a distaster (because return address gets overwritten) has some advantages, in that it makes bugs less subtle so the developer will more likely find them. But according to history, that seems to have not worked out, given that even non-programmers now know what "buffer overflow" means.
      --
      As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
    7. Re:Stack by CajunArson · · Score: 5, Interesting

      Bzzztt.... wrong, Thankyou for playing. As I learned firsthand when coding buffer overflows in a security class, it is a simple, easy, and wrong assumption to think that the stack growing down is the main reason you can do buffer overflows. The main reason is that you are allowed to write where you're not supposed to, not matter what direction the stack grows. Hint: Remember what a stack is exactly... a buffer overflow can just as easily write up into another function's space and execute the overflow from there.
      It actually turns out that a bunch of the random relocation and offset tricks while helpful, can still be defeated, so simply growing the stack in a different direction is not a real solution.

      --
      AntiFA: An abbreviation for Anti First Amendment.
    8. Re:Stack by Anonymous Coward · · Score: 0
      • When multiple threads are running in the same address space, you lose that assurance anyway.
      • The VM handles the stack anyway, and stack space is limited. Usually to a few megabytes.
      • The PowerPC stack grows downwards as well.
      • The only architechture I know of that doesn't is HPPA, and that hasn't saved it from buffer overflow attacks.
    9. Re:Stack by Anonymous Coward · · Score: 0

      Backwards? PPC stacks grow toward lower addresses, so running off the end of the buffer will still overwrite return addresses, etc, no?

    10. Re:Stack by temojen · · Score: 1
      It's totally insane.

      It's not totally insane. The stack and data areas both grow into unallocated space. In a system without paging (such as the 8080, which the 386+ is ultimately decended from), this is the easiest to allocate. It only becomes a problem on stack overflow or memory exhaustion. It's also the way most architectures work. (at least the 8080, 8086, 80286, 80386+, 2502, 6800+, 68000+, VAX, etc, which is to say every architecture I've ever programmed in assembley). I have a PPC assembley book at home which I'll check after work, but I don't remember anything about the stack growing up.

    11. Re:Stack by kvigor · · Score: 1

      The stack grows downward on the vast majority of architectures, including PowerPC, ARM, SPARC, and MIPS. The only architectures I've come across where stacks grow up are PA-RISC and i960.

      So if you cponsider this is a sign of CPU inferiority, well, I hope you're an HPUX fanboy.

    12. Re:Stack by pclminion · · Score: 5, Insightful
      A stack overflow ought to overwrite unallocated space, not earlier stack frames and return addresses. It's totally insane.

      Not really. You assume that all buffer overflows overflow in the "upward" direction. It's just as easy, in C, to code a loop that progresses backward through memory. I've had many reasons and occassions to do it. Simply making the stack grow upward instead of downward won't solve the underlying basic issue, which is that without proper bounds checking, the program can overwrite memory it's not supposed to.

      Besides, it's incredibly convenient for the stack to grow downward. Program code and data starts at the bottom of virtual memory, and the stack starts at the top. You just map in new page frames as necessary. If the stack grew the other direction, it would either have to be limited in size, or you'd have to shift it in memory if it grew too large. Shifting it is practically impossible, since you'd have to find all program pointers into the stack and update them all to reflect the new stack. Gad, I don't even want to think about it.

    13. Re:Stack by Anonymous Coward · · Score: 0

      How exactly do you intend to overwrite the return address on the stack such that the IP will point to your new code?

      With an upward growing stack, the return address is below you. Anything above the stack is unallocated pages, or possibly the heap ..

      Sure, you could corrupt the heap but you're still not going to get the IP to point to your malicous code.

    14. Re:Stack by Anonymous Coward · · Score: 0
      ppc's dont have a stack.

      so i guess, at least for the purposes of this discussion, that's the ultimate secure platform.

    15. Re:Stack by Lemming+Mark · · Score: 1

      How can you affect the behaviour of functions above you on the stack which won't have been called yet?

      Growing in a different direction is still not a total solution (the ideal solution being not to have overflowable buffers).

    16. Re:Stack by ebyrob · · Score: 1

      Here's a novel question: Why even put the stack and heap in the same virtual page on modern operating systems?

      I mean, there were a lot of design decisions that made sense back in the day, but I'm always wondering if a fresh ground-up processor design might not have some advantages...

    17. Re:Stack by tqft · · Score: 1

      Pardon my ignorance showing

      "(the ideal solution being not to have overflowable buffers)."
      That would help.

      But why I ask is the OS allowing one process to overwrite memory of another. Even for the same program why doesn't label x1..xN as for function x and y1...yN for function y and if x says more please - write it at x(N+1) that is not in y's allocation? What logic says it is OK to overwrite another allocation with something already being used? Is it just that the stack is limited? As another posted said is it a hangover from days of tightly limited system resources and no swap?

      --
      The Singularity is closer than you think
      Quant
    18. Re:Stack by laqueue · · Score: 1

      Well, three points. 1. I don't see why "heap at the bottom, stack at the top" is an irrevocable architectural design. 2. Limiting stack size is actually a fairly common practice. 3. Buffer overflows are usually system I/O calls (which can't "underflow" unless you're doing some bizarre arithmetic on the starting address) or memory copies (which are pointless to write backwards unless you're worried about self-overwrites).

      --
      --- Et chacun son plaisir, et chacun son but.
    19. Re:Stack by SirSlud · · Score: 1

      i think everyone agrees about this but its the same thing that keeps the steering wheel as a standard control mechism for the car

      why change something so level when so far it works

      note, I'm not saying that it shouldn't be changed, but refactoring code is one of the most ignored aspects of software and hardware development simply because you gotta include backwards compatibility

      --
      "Old man yells at systemd"
    20. Re:Stack by njyoder · · Score: 0

      Because you know which functions will be executed after the overflow, so you can set up the parameters in a way to manipulate the soon-to-be-called functions. It's not as if buffer overflows are written without knowing anything about how the program works. On the contrary, they know exactly what code will get executed after the overflow and what effect it will have.

    21. Re:Stack by leshert · · Score: 4, Informative

      But why I ask is the OS allowing one process to overwrite memory of another.

      It doesn't--that's not what an overflow attack is.

      An overflow attack causes a process to overwrite its _own_ memory, with instructions carefully chosen by the attacker. The attacker's code is executed by the attacked process itself.

      Think of it like the old Bart Simpson gag of calling up Moe's and asking for "Mr. Butz, first name Seymour". If you can get Moe (the process under attack) to repeat what you say (the attack payload), he's as good as yours.

    22. Re:Stack by njyoder · · Score: 0

      There is such a thing as an exploitable heap overflow. That's how a lot of exploits get around stack protection mechanisms, they will overwrite part of the heap instead or they will overwrite part of the stack for parameters for a certain function they know will be called next.

    23. Re:Stack by mbessey · · Score: 1

      The PPC architecture doesn't have a stack pointer register, or any dedicated "push" or "pop" instructions. The stack growth direction is an OS feature, not a processor feature.

      -Mark

    24. Re:Stack by Lemming+Mark · · Score: 2, Informative

      > But why I ask is the OS allowing one process to
      > overwrite memory of another.

      It's not allowing a process to directly overwrite another process's memory. Buffer overflows basically "trick" a program into overwriting bits of its own memory that the author didn't expect.

      > Is it just that the stack is limited?

      It's something that you have to code carefully to avoid, since C lacks various checks that avoid the programmer having to worry about this. Lots of languages do have these checks but they're less popular.

      Stacks on x86 grow downwards (i.e. to lower memory addresses). Each time you call a function, the top of the stack gets *lower* in virtual memory.

      Suppose we have a function "foo":

      void foo()
      {
      char[12] filename; ...does...stuff...here...
      return;
      }

      It allocates a 12 character array *on the stack*. If we can trick foo() into writing more than 12 characters into the "filename" array, then it'll continue to write the data into higher and higher addresses *overwriting earlier data on the stack*.

      The process is overwriting its own memory so there's nothing the OS can do to protect against it. The trouble is that if the data foo() read is not only too large but contains some malicious code, the application may be tricked into running that code when the function exits. If the application was running as root (or if the code was part of the kernel) then that malicious code now has control of your system :-(

      > As another posted said is it a hangover from
      > days of tightly limited system resources
      > and no swap?

      Not really, it's something that just happens. Writing code which allows buffers to be overflowed in this way is sloppy - the coder got it wrong.

    25. Re:Stack by Anonymous Coward · · Score: 0

      That's a great point, but you really negate it by being a dick with that "Bzzzt...wrong" crap. You're not a game show host. Get over yourself.

      Makeing an adhomin attack is utterly childish and useless. It adds nothing to the discusion. You're not as important as you think you are. Get over yourself.

    26. Re:Stack by skingers6894 · · Score: 1

      I wish I had some MOD points. Someone give this post some mod points.

      This stuff happens too often here.

    27. Re:Stack by node+3 · · Score: 1

      Except that it's still harder (not impossible) to exploit buffer overflows this way, which is the point.

      So it seems like for each buffer overflow, you have to create a unique exploit for it.

      At least, that's what I got from this story. I could be completely wrong.

    28. Re:Stack by Backspin · · Score: 1

      How exactly do you intend to overwrite the return address on the stack such that the IP will point to your new code?

      You don't necessarily have to. Here's a situation to consider: a function returns the address to another function, and for whatever reason, has a buffer on the stack, and a temporary variable for the to-be-returned function location located just above that. Overflow the buffer at just the right time, and you'll make the code jump to where you want at a later time. All without ever touching the return value.

      --
      I'm making a .sig Beowulf cluster. I add another node each time I post.
    29. Re:Stack by Anonymous Coward · · Score: 0
      Makeing an adhomin attack is utterly childish and useless. It adds nothing to the discusion. You're not as important as you think you are. Get over yourself.

      That's not an ad hominem attack. Go look it up.

    30. Re:Stack by ebuck · · Score: 3, Insightful

      Up and down mean nothing in a computer, that is, they mean just as much as the stack growing left to right, or right to left. Or even upper-right corner to lower-left corner, diagonally.

      0x00000000 isn't the math number 0, nor is 0xFFFFFFFF unless you assign that meaning to it. A perfect example is in floating point numbers, which mean something totally different that the same sized integer, which is totally different that the same sized memory address.

      As others have already said. It's not the direction, it's the ability to do something that you shouldn't be able to do.

    31. Re:Stack by Anonymous Coward · · Score: 1, Informative
      How exactly do you intend to overwrite the return address on the stack such that the IP will point to your new code?
      void exploity(const char *untrustedData)
      {
      char buffer[256];
      strcpy(buffer, untrustedData);
      }
      Assuming strcpy requires a function call, this can be exploited regardless of the direction that the stack grows. The return address from exploity is on one side of the buffer and strcpy on the other. Either address could be altered to point into the buffer.
    32. Re:Stack by ScuzzyTerminator · · Score: 1

      Better would be a separate stack for return addresses and frame pointers. Still not unbreakable though. For example, function pointers could be overwritten.

    33. Re:Stack by Anonymous Coward · · Score: 0

      Makeing an adhomin attack is utterly childish and useless. It adds nothing to the discusion

      Much like your reply.

    34. Re:Stack by m50d · · Score: 1

      By overwriting them with your code, obviously. It's a little harder since you have to know there is a function a certain distance above you that will be called after where you are, but far from impossible.

      --
      I am trolling
    35. Re:Stack by tricorn · · Score: 1

      Good example. The person complaining about the x86 growing the stack downward obviously doesn't know that many other architectures do the exact same thing, e.g. PDP-11, 68K, Alpha, PPC. One way to avoid return location overwriting is to have a separate instruction and data stack. Use the instruction stack for return, saved registers, stack links (including data stack), etc. Use the data stack for all programmer-visible local variables. Slightly less efficient, you need two registers for stack pointers, or have to keep reloading the data stack pointer off of the instruction stack. However, you could locate them in the same memory segment (data stack grows upwards, instruction stack grows downwards as usual, extend the memory segment in both directions when you get a fault).

      Or don't write stupid code. It really isn't that hard.

    36. Re:Stack by Anonymous Coward · · Score: 0

      That's the best analogy for a buffer overflow I've ever seen.

    37. Re:Stack by Lemming+Mark · · Score: 1

      But you can't overwrite stack that isn't being used yet - as soon as it is used your buffer overflow will be overwritten. Buffer overflows != overwriting the code of other functions. Overflowing a buffer depends on being able to overwrite the stack linkage data and (usually) injecting code into the stack. The best explanation I can find for how you'd attack an upwards-growing stack is that of another poster who pointed out that code that iterates over ever-decreasing memory addresses might be tricked into overwriting earlier stack frames. I guess that's the issue, although I'd imagine it was rather more rare than the reverse case.

    38. Re:Stack by Anonymous Coward · · Score: 0

      Yes, but we humans use them, decide paradigms, and are debating right now. Your comment adds nothing. Everyone else knows what up and down mean within the context of this thread.

    39. Re:Stack by m50d · · Score: 1

      If the function itself is on the stack you can overwrite it - the function isn't going to be deleted before it's overwritten. If not, you can still get a conventional buffer overflow any time you have a multithreaded program, by overwriting the return address for the higher thread from the lower one. Or get a program to write before the start of an array through integer overflow. I'm sure there are other ways to exploit it.

      --
      I am trolling
    40. Re:Stack by Lemming+Mark · · Score: 1

      But the function code isn't on the stack, it's in the code segment. Stack frames store local variables, arguments and stack metadata information - no code.

    41. Re:Stack by Anonymous Coward · · Score: 0
      0x00000000 isn't the math number 0, nor is 0xFFFFFFFF unless you assign that meaning to it.

      Don't be retarded.

      The meaning of the stack pointer is provided by the behaviour of the push and pop instructions that add and remove things from the stack. It's not up to interpretation or artistic impressions.

      For example, from the documentation:
      PUSH - Push Word onto Stack
      Usage: PUSH src
      PUSH immed (80188+ only)
      Modifies Flags: None

      Decrements SP by the size of the operand (two or four, byte values are sign extended) and transfers one word from source to the stack top (SS:SP).
      The meaning of the stack pointer moving "down" through memory seems pretty damn clear to me. And from the standpoint of logical memory organisation, it also makes a lot of sense to have it start at the top and work down towards the code because you're not wasting any memory.

      Now, as for the security of this arrangement - don't allow your own stupid code to corrupt your stack when processing data that isn't known to be secure! It's that simple!

      As others have already said. It's not the direction, it's the ability to do something that you shouldn't be able to do.

      Agreed. And (besides whining about interpreting numbers), the reason for your post was?
    42. Re:Stack by Backspin · · Score: 1

      That's true, but such an exploit is more difficult in that it must be specifically crafted for the function being overflowed.

      Unless you're shooting in the dark, buffer overflow attacks start with the knowledge that something can definitely be overflowed into. If I'm using a buffer in an unsafe way, what's the difference whether the data that you can overflow into is the return address or the address of a function that will be used later? Not much. Granted, in order for an overflow to work in the way I described, the program can't set this address after the overflow, which can make such an exploit more difficult. Still, either way, you have a way to make my program go to a point in the code that you've designated. Conventional buffer overflow attacks need to know how far to overflow in order to work, right? Same as in my example.

      In my opinion upward stack allocation would prevent most buffer overflow attacks.

      Most is not all. I do agree, however, that it would prevent certain kinds of overflow attacks. The best thing (and this should be old hat by now) is to use safe programming practice: always check external data, and check internal data unless you're absolutely sure it's good. Even then, you may want to check it anyway.

      --
      I'm making a .sig Beowulf cluster. I add another node each time I post.
    43. Re:Stack by m50d · · Score: 1

      If it's code that's been built dynamically it could be there. I agree that it's not very likely though, but that still leaves the other methods

      --
      I am trolling
    44. Re:Stack by Kymermosst · · Score: 1
      The stack grows downward on the vast majority of architectures, including PowerPC, ARM, SPARC, and MIPS. The only architectures I've come across where stacks grow up are PA-RISC and i960.

      I can't speak from personal experience for any of these other than MIPS, but when programming in MIPS assembly, the stack grows downward by convention only, since the stack is manually manipulated. If you wanted to go against convention, you could grow it upward, too.

      Examples storing and retrieving a 32-bit word return address to the stack: (32-bit MIPS)
      #"Conventional"... stack grows downward.
      sub $sp,$sp,4
      sw $ra,0($sp)
      # other code here
      lw $ra,0($sp)
      add $sp,$sp,4
      jr $ra

      #"Unconventional".. stack grows upward.
      add $sp,$sp,4
      sw $ra,0($sp)
      # other code here
      lw $ra,0($sp)
      sub $sp,$sp,4
      jr $ra
      I've heard that's how it works for PPC, too. I'd also guess that the SPARC's stack is also manually manipulated, seeing as the architecture was developed at the same time as MIPS.

      --
      "Alcohol, Tobacco, Firearms, and Explosives" should be a convenience store, not a government agency.
    45. Re:Stack by ebyrob · · Score: 1

      Well... Even if all you do is introduce an element of randomness, things get a lock trickier to exploit. It's really easy to overwrite the return address and execute your malicious code if you know its right off the end of data you have access to. It's a lot tougher if the address you have to overwrite is moved around every compile, or better yet based on program execution up to the point where you're trying to exploit.

      I'm not saying the gain is necessarily worth all that effort, but it's certainly an interesting area to pursue.

    46. Re:Stack by farnz · · Score: 1

      ARM stacks don't grow in any direction; by convention, R13 is the stack pointer register, and you either handle it manually (using LDR and STR to pop and push, and one of ADD, SUB or RSB to manipulate it), or you use one of the variants of LDM and STM (load multiple and store multiple). I can't remember what the low-level equivalents are, but from a high-level assembler perspective, you get LDMFD/STMFD (Full, Descending), LDMED/STMED (Empty, Descending), LDMFA/STMFA (Full, Ascending), and LDMEA/STMEA (Full, Ascending). Gives you the same flexibility as hand-coding a series of STR or LDR instructions (*SP can be the next empty slot, or the last item pushed, and you can do SP++ or SP-- after each store or load).

  12. Maybe I'm missing something here... by HotNeedleOfInquiry · · Score: 2

    But doesn't pretty much everyone use a compiler. And doesn't the compiler pretty much insulate you from such issues? What am I missing?

    --
    "Eve of Destruction", it's not just for old hippies anymore...
    1. Re:Maybe I'm missing something here... by aklix · · Score: 1

      Remember now, microsoft writes the most popular windows compiler...

    2. Re:Maybe I'm missing something here... by Locke2005 · · Score: 2, Insightful

      The issue is whether the stack grows downwards (from higher memory address to lower) or upwards (from lower memory addresses to higher). If the stack grows downwards, then overrunning an array allocated on the stack (due to missing bounds check, which is bad programming) can overwrite a return address on the stack. Then the function can return to an arbitrary address. If the stack grew upwards, this would not be possible. No, the compiler cannot insulate you from basic CPU design. On the other hand, not bounds checking array accesses should always be considered a "bug".

      --
      I've abandoned my search for truth; now I'm just looking for some useful delusions.
    3. Re:Maybe I'm missing something here... by (void*) · · Score: 1

      It does not matter if the stack grows downwards or upwards. In any case, if the address of the return value is predictable, it is possible to overwrite it.

    4. Re:Maybe I'm missing something here... by Locke2005 · · Score: 1

      With a negative array index, yes. But most buffer overrun exploits are due to string copies (eg. strcat or strcpy) not bothering to check for buffer length. In which case, the return value you are overwriting must be ABOVE the string buffer in memory.

      --
      I've abandoned my search for truth; now I'm just looking for some useful delusions.
    5. Re:Maybe I'm missing something here... by prockcore · · Score: 1

      If the stack grew upwards, this would not be possible.

      Riiight..

      char a[5];
      int b=-5;
      printf("%x %x\n",&a,&a[b]);

      It doesn't matter what direction a stack grows, you can access the entire stack.

    6. Re:Maybe I'm missing something here... by (void*) · · Score: 1

      There can be many ways to cause buffer overrun, not just in strings. The solution you propose addresses only strcpy or strcat, and only on the PC, with a specific memory layout design.

    7. Re:Maybe I'm missing something here... by HornWumpus · · Score: 1
      On the other hand, not bounds checking array accesses should always be considered a "bug".

      In a word NO.

      The discision to bounds check arrays is not subject to single answer solutions.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    8. Re:Maybe I'm missing something here... by Anonymous Coward · · Score: 1, Interesting

      Yes, it is possible to use a buffer overflow to replace the return address even when the stack grows up. Here is an example:

      void blah(char *s1, char *s2) {
      strcpy(s1,s2);
      }

      void foo() {
      char s[10];

      blah(s,"abcdefghijklmnopqrstuvwxyz");
      }

      If the stack grows up, blah will wipe out it's own return address.

    9. Re:Maybe I'm missing something here... by Anonymous Coward · · Score: 0

      Sorry, but you're missing the entire fucking point. No one cares about idiot programmers writing stupid code like that -- they're afraid of third parties being able to feed malicious input which causes the same effect as your idiotic snippet.

      Get a clue.

  13. The Real Issue: Control by Anonymous Coward · · Score: 0

    All in my opinion:

    From recent news it smells like what will eventually happen is the internet and new architectures will all be redesigned to benefit one closed source OS. Do you think /\/\$ will go down without a fight? Nope, it'll be kicking and screaming one war at a time, IMO. This is the beginning of the "let's change everything to lock them all in" war which will be waged along side the war of patents. Just like the spoiled simpleton who declares "If I can't have it, no one will!" before going batshit crazy.

    So the wars will begin over BIOS, new and old architectures, patents, etc. The question is: Will /\/\$ leap to the top again? Or will FOSS prevail? Remember Amiga? OS/2? Corel Linux? Etc? I'm sure one warlord will try and lock everyone into some new architecture because they will likely lose if they remain x86 only. I've seen this coming for several years and knew it was only a matter of time.

  14. RISC isn't the solution by ikewillis · · Score: 5, Informative
    I administrate dozens of Solaris/SPARC systems over the years. While implementing a buffer overflow on this architecture may be less trivial, I can't tell you how many buffer overrun patches I've installed over the years in various patch clusters.

    The real disadvantage of x86 over a RISC architecture like SPARC is that it doesn't have page protections (not to be confused with real mode segmentation which essentially disables the protected mode i386 MMU) where pages containing data and code are marked differently, so data pages are non-executable. sparcv9 implements a non-executable user stack per default, whereas it's a configurable option for sparcv8 binaries.

    This has all changed with x86-64/AMD64/EM64T/x64/WHATEVER, which has brought a noexec bit to memory pages and allows hardware buffer overflow protection similar to SPARC. This still isn't a silver bullet for buffer overflows, but it's certainly better than nothing.

    1. Re:RISC isn't the solution by ArbitraryConstant · · Score: 2, Informative

      Interestingly, PowerPC lacks a per-page execute disable as well. It has nothing to do with whether an architechture is RISC or not.

      --
      I rarely criticize things I don't care about.
    2. Re:RISC isn't the solution by kvigor · · Score: 1

      The MMUs on various PowerPCs vary; I know that there definitely is an executable bit in the page mapping table for the 40x family.

    3. Re:RISC isn't the solution by truesaer · · Score: 1
      The interesting thing here is that you're totally welcome to use segmentation in protected mode, its just that no one does. The paging mechanisms almost, but not quite, duplicate the protection offered by enforcing segmentation.

      Right now modern operating systems simply set the segmentation registers to have a base of 0 and a limit of the end of memory, thus creating one big segment. You could have segments as well as paging, but that would be a pain in the ass. Of course we now see the problem with failing to use the segmentation registers, but the addition of the NX bit pretty much solves that. Now if we can just get people to recompile to USE the NX bit.

    4. Re:RISC isn't the solution by Anonymous Coward · · Score: 0

      If MS used SPARC or a similar architecture, you wouldn't have buffer overrun patches to apply because Microsoft would just say the vulnerability was theoretical and they don't want to bother with a fix.

  15. Well... by autocracy · · Score: 3, Funny
    F00FC7C8

    Still here? Dammit...

    --
    SIG: HUP
    1. Re:Well... by WilliamSChips · · Score: 1

      I'm on AMD, which was immune to F00F, you insensitive clod!

      --
      Please, for the good of Humanity, vote Obama.
    2. Re:Well... by sharkey · · Score: 1
      Perhaps you need my IP address: 127.0.0.1

      Try it NOW, Mr. Tough Guy!

      --

      --
      "Outlook not so good." That magic 8-ball knows everything! I'll ask about Exchange Server next.
  16. big deal.. by pixas · · Score: 2, Funny

    ..so what if I have 0.999997 viruses in my CPU?

    1. Re:big deal.. by Lehk228 · · Score: 1

      jokes too old, i bet almost half of slashdot won't get it

      --
      Snowden and Manning are heroes.
    2. Re:big deal.. by lachlan76 · · Score: 1

      I'm 15 and I still got it...

      I must be such a freak.

  17. 1993 called - they want their flamewar back by nosferatu-man · · Score: 5, Funny

    Thanks, Slashdot -- I actually read that boatload of ignorant gibberish, and now I'm measurably dumber than I was before I clicked the link. Keep this up and I too will be making specious arguments about "RISC" and "CISC".

    --
    To spur "enterprise Linux," Big Bang, the distributed two-phase commit.
    1. Re:1993 called - they want their flamewar back by Anonymous Coward · · Score: 0

      A troll responding to a troll(Paul Murphy). Nice.

    2. Re:1993 called - they want their flamewar back by HotNeedleOfInquiry · · Score: 2, Insightful

      I admire a troll that's not afraid to tell a troll that he's trolled a troll.

      --
      "Eve of Destruction", it's not just for old hippies anymore...
  18. News Flash! x86 sucks! Film at 11! by GeekDork · · Score: 1

    Now really, we all know that x86 sucks noodle for various reasons (A20 anyone?), so why does it draw attention when somebody says it out loud? It wasn't so much designed, rather cobbled together with cludge upon cludge to retain backwards compatibility. It's all known!

    Granted, if it kills x86 once and for all before yet another actually useable arch like Alpha is eradicated, it's not bad.

    --

    Fight hunger. Filet a politician and send him to a 3rd world country of your choice.

    1. Re:News Flash! x86 sucks! Film at 11! by Anonymous Coward · · Score: 1, Informative

      Actually, most of the ia32 nastyness is there for backwards compatibility.

      A20, real mode, virtual 86 mode, system management mode, real mode BIOS interface, partition table format, boot block limitations, etc. can be eliminated flat out if desired. Intel even sells some embedded ia32 processors that have no real mode support, they start in protected mode.

      No, the real problem is the lack of end-of-life phasing out of junk that isn't needed anymore. Most of this stuff simply isn't needed today, and can be emulated if needed.

  19. Not the fault of the OS at all! by carcosa30 · · Score: 4, Funny

    SO! We now know the truth: Microsoft is blameless for the shoddy security of their products. It's all the fault of the x86 architecture.

    After all, how could Microsoft be expected to learn the intricacies of their primary platform and write code that does what it's supposed to?

    We have been lied to.

    --
    Intolerance for ambiguity is the mark of the authoritarian personality.
  20. This guy doesn't know what he's talking about. by ArbitraryConstant · · Score: 4, Insightful

    For starters, Windows does run on RISC.

    The stack behaviour of PowerPC is just as predictable as x86, and it's just as easy to perform a buffer overflow attack on vulnerable code.

    PowerPC doesn't offer more per-page protection than x86, and it offers less than x86-64, as x86-64 can disable execution on a per-page basis.

    It's possible to do things on both architechtures like add a random offset to the stack or load libraries at random locations. This makes attacks much more difficult, and OSes like OpenBSD do them on both architechtures. OSes like Linux or MacOS don't do them on any architechtures. Stack protections like propolice are a compile-time option and can be used on any OS on any architechture.

    The mainstream architechtures of today do very little to distinguish themselves from each other security wise. One of the the few features that is different from one architechture to another, per-page execute protection, is not available on PowerPC.

    This guy doesn't know what he's talking about.

    --
    I rarely criticize things I don't care about.
    1. Re:This guy doesn't know what he's talking about. by Hockney+Twang · · Score: 1

      OSes like Linux or MacOS don't do them on any architechtures. Stack protections like propolice are a compile-time option...

      And no Linux distribution allows you to make use of your own compiler flags?

    2. Re:This guy doesn't know what he's talking about. by ArbitraryConstant · · Score: 1

      "And no Linux distribution allows you to make use of your own compiler flags?"

      Of course you can set your own compile flags. That would be why I said "Stack protections like propolice are a compile-time option and can be used on any OS on any architechture.". You clipped that part of my sentence in your quote.

      The other features I mentioned require OS support, as they involve small but significant changes to the internals of the OS.

      --
      I rarely criticize things I don't care about.
    3. Re:This guy doesn't know what he's talking about. by Ann+Elk · · Score: 2, Interesting
      OSes like Linux or MacOS don't do them on any architechtures.

      Linux does support limited stack and library randomization. However, there are questions as to the effectiveness of these techniques.

    4. Re:This guy doesn't know what he's talking about. by Hockney+Twang · · Score: 1

      I think I missed the point, I thought you were elevating BSDs as superior for being the only OS flavors with available stack protections. Which seems to hold true against Windows and MacOS, as the software is distributed binary only, and can't be recompiled to user specification. I digress, I reread your post, and instead of seeing "BSD owns you, l0s3rs" I see, "x86 has available protection as evidenced by BSD." That was the point, right?

    5. Re:This guy doesn't know what he's talking about. by Anonymous Coward · · Score: 0

      PPC970FX offers per-page flagging as no-execute as well.

    6. Re:This guy doesn't know what he's talking about. by bani · · Score: 1

      it is better than nothing... eg 0.1 is better than 0.0

    7. Re:This guy doesn't know what he's talking about. by EventHorizon · · Score: 2, Interesting

      This guy doesn't know what he's talking about.

      Probably. Dunno since I stopped RTFAs a while ago.

      However, the IBM PowerPC 970FX aka Apple G5 processors have had NX for a while. Partial Linux support already exists. Check it out.

      http://lwn.net/Articles/126862/

      I like the 970FX (apart from its tiny cache). Shame Apple has a monopoly on the desktop systems, and you have to buy their OS to run Linux on one.

    8. Re:This guy doesn't know what he's talking about. by lamont116 · · Score: 2, Informative

      This got +5? Mods don't know what they are reading about.

      PowerPC does not store the return address on the stack; it shows up in the link register (LR), and is generally copied to a GPR when your function calls another function (because the call will overwrite the LR). That GPR may or may not wind up on the stack, depending on the number of GPRs needed by the callee. The architecture does not require that it ever be placed on the stack, which is totally defined by the ABI and not by the hardware anyway. There is absolutely no reason why PowerPC-based operating systems could not define a separate stack for data and return addresses, if the OS designers chose to do so.

    9. Re:This guy doesn't know what he's talking about. by pammon · · Score: 5, Insightful

      > The stack behaviour of PowerPC is just as
      > predictable as x86, and it's just as easy to
      > perform a buffer overflow attack on vulnerable
      > code.

      No it's not.

      For example, here's a function vulnerable to a classic buffer overflow:

      void security_hole(char* s) {
      char buff[128], *ptr = buff;
      while (*s++ = *buff++);
      }

      It's more difficult to turn this buffer overflow into arbitrary code execution on PowerPC because the link register isn't spilled to the stack (so you have to overwrite some function's return address higher up in the call chain) which takes more work and requires a larger payload, larger instruction sizes means you need a still larger payload, larger instruction sizes mean it's trickier to build an instruction stream with no zero bytes, and in any case you may have to flush the instruction cache to force it to see your changes - no easy task.

      Leaf functions, functions that take advantage of tail-call optimizations, and functions that move the link register into a GPR rather than the stack don't let you overwrite the return address at all, which is never the case on x86.

  21. virtulization by minus_273 · · Score: 1

    for starters, the x86 architecture can't be virtualized which is a real big setback.

    --
    The war with islam is a war on the beast
    The war on terror is a war for peace
    1. Re:virtulization by Anonymous Coward · · Score: 2, Insightful

      Except by VMware and Virtual PC. Oh wait, I guess it can be virtualized!

    2. Re:virtulization by minus_273 · · Score: 1

      right, if you actually know the tech you know that a handful of instructions CANT be virtualized. Don't take my word for it, read the paper :
      Analysis of the Intel Pentium's Ability to Support a Secure Virtual Machine Monitor

      PS I dont blame you, but cant believe you got modded Insightful. It reflects on the sad state of slashdot today

      --
      The war with islam is a war on the beast
      The war on terror is a war for peace
    3. Re:virtulization by Anonymous Coward · · Score: 0

      So how does VMWare and VirtualPC manage to virtualize those instructions?

      Oh thats right, you can slander Slashdot while being a stupid baffoon at the same time..

    4. Re:virtulization by Anonymous Coward · · Score: 0

      Basically what you're claiming is that not all Universal Turing machines are equivalent, but you're just too ignorant to realize this. To support your claim you offer into evidence an article that specifically refers writing classes of virtual machine that specifically do not virtualize x86 instructions in various degrees, and have restrictions on the implementation of privileged instruction virtualization where applicable.

      So either you haven't read that article, or you have and you don't actually understand it. In either case, it definitely doesn't support your position any.

    5. Re:virtulization by minus_273 · · Score: 1

      from the paper, which you claim to have read :
      "Several Intel instructions break hardware virtualization Requirement 3B. The rule states that instructions are sensitive if they read or change sensitive registers and/or memory locations such as a clock register and interrupt registers."

      and
      even better

      "Since the Intel Pentium architecture is not truly virtualizable, current VMMs for the hardware base [36] must use a bit of ``trickery" to realize a VMM. Each method must detect sensitive but unprivileged instructions before they are executed by a VM."

      i think that speaks for itself.

      --
      The war with islam is a war on the beast
      The war on terror is a war for peace
    6. Re:virtulization by minus_273 · · Score: 1

      out of curiosity, do you even know how Goldberg defined virtual machines? and why do you post as an AC (emphasis on the C ) if you think you are right

      --
      The war with islam is a war on the beast
      The war on terror is a war for peace
    7. Re:virtulization by RuneB · · Score: 1

      If VMWare could virtualize the processor perfectly, then you wouldn't have to tell it what OS you're going to run, right?

      --
      dtach - A tiny program that emulates the detach feat
  22. but i does run on risc by Anonymous Coward · · Score: 0

    nt4 and some early versions of windows 2000 run on alpha ,mips i think that there was a sparc version to but that one did not last for long.

  23. PageRanking Submissions. by Anonymous Coward · · Score: 0

    "Thanks, Slashdot -- I actually read that boatload of ignorant gibberish, and now I'm measurably dumber than I was before I clicked the link. Keep this up and I too will be making specious arguments about "RISC" and "CISC"."

    Bet it got a low PageRanking(TM).

  24. Linux, OS/2, BSD, etc. by Anonymous Coward · · Score: 0

    So according to this article, Linux, OS/2, BSD, Solaris for x86, etc. are all just as insecure as Windows on x86? What about when WindowsNT ran on MIPS or RISC or Alpha? Was that not insecure?

  25. I doubt x86 inherently flawed by rice_burners_suck · · Score: 4, Informative
    In all, I don't think the processor is really responsible for most of these problems. I think it is the design and implementation of software. Things simply must be done correctly, or computers will go haywire no matter what kind of processor they have.

    Linux, BSD, and other *nix systems are reasonably well protected through the design of the system and the widespread use of common server programs, which are checked and re-checked for these problems by a variety of people and organizations. Also, GCC provides ProPolice, which can help lock things down a bit more. I think this particular problem mostly applies to systems running Windows.

    Microsoft's business problem in this regard is that they have no control over the applications running in Windows, and they provide a default Windows install that is quite open and vulnerable. Locking down the ports and getting rid of the most dain-bramaged policies in Windows is only one part of the solution. Vulnerabilities in application programs can still be used to break into these systems, and Microsoft will ultimately be blamed.

    Perhaps the best thing Microsoft can do is integrate something like ProPolice into the C and C++ libraries used to compile programs for Windows. This would make a big difference in protecting the stack of running programs that are not designed with security as a priority.

    If x86 really is less secure by nature, it probably wouldn't hurt if they'd put their virtualization engine (similar in function to VMware but not even half as good) right into the core OS. Under such a design, only the Windows kernel would run directly on the processor; the rest of the operating system and all of the application programs would run with the same x86 instruction set, but through the virtualization engine. There, checks could be made to prevent the most common vulnerabilities of the x86 processor from being utilized.

    1. Re:I doubt x86 inherently flawed by Anonymous Coward · · Score: 0

      The virtualization layer knows about x86 instructions, not about higher level software constructs.

      How's the virtualization layer supposed to know which "rep stos" instruction is your program legitimately initializing a large array on the stack and which one results from a worm exploiting a buffer overflow in your web server?

      There's absolutely no way a virtualization system can prevent attacks without having a deep understanding of the operating system and/or application you're running. That's not how (general purpose) virtualization systems work.

    2. Re:I doubt x86 inherently flawed by NoMercy · · Score: 1

      There's only really one big flaw, it's ancient, and it's kept that way for backwards compatability.

      Oneday we'll look at x86 like VHS to the DVD, or like magnetic tape cassettes to the mp3 player.

    3. Re:I doubt x86 inherently flawed by Anonymous Coward · · Score: 2, Informative

      No, the processor isn't responsible, but the processor eases the facilitation.

      Buffer overruns are caused purely by sloppy coding in languages which let you. They exist on all CPUs, but they are easier to exploit on x86 due to the orientation of the stack (placing the return address of a function at the end of the stack) and lack of memory security options (until x86-64 introduced the NX bit all memory is executable.)

      Buffer overruns are incredibly common problems and plague all development. Debian has announced 33 buffer overrun vulnerabilities in their distribution so far for 2005. All it takes is one. The architecture is only relevant insofar as to the amount of damage that can be performed once the binary has been exploited, and would be just as contained on a properly administrated Windows computer as on a properly administrated Linux computer.

      Microsoft has been working on this issue fairly diligently. For the past three years their C++ compilers have included buffer overrun protection by placing code in the prologue of the function to save the return address in a "cookie" and then validate the return address in the epilogue with that "cookie" to ensure that it has not changed. This will catch the more common errors which account for easily 90% of all buffer overruns. All code produced by Microsoft since has been compiled with this option. Microsoft has issued several code libraries which provide bounds checking for buffers to aid the developer in avoiding these problems. Microsoft has added DEP to Windows XP SP2 and Windows 2003 SP1 which are a software attempt, in kernel mode, to catch buffer overruns. And finally, Microsoft has added support for the NX bit in the x86-64, which is the only way for the CPU to enforce that data pages be non-executable. Unfortunately this last method is the only method through which this problem can be fully mitigated.

    4. Re:I doubt x86 inherently flawed by NutscrapeSucks · · Score: 1

      -- Linux, BSD, and other *nix systems are reasonably well protected through the design of the system ...

      Linux/BSD/Solaris's record in this department is barely better than Windows. Sure, modern distros don't have the horrific design choices that Microsoft has made, but, still, exploitable holes in internet demons keep coming and coming and coming and show no sigh of stopping. No disrespect, but the state of Linux is hardly a security standard to shoot for.

      --Perhaps the best thing Microsoft can do is integrate something like ProPolice into the C and C++ libraries

      Believe they've done this with the latest compilers, whether that would work in production is another question.

      --If x86 really is less secure by nature, it probably wouldn't hurt if they'd put their virtualization engine

      Good news is that x86 hardware will be fully virtualizable by next year, so this is a likely prediction.

      --
      Whenever I hear the word 'Innovation', I reach for my pistol.
    5. Re:I doubt x86 inherently flawed by tialaramex · · Score: 1

      Ah, but although distributors like Red Hat continue to describe holes as "exploitable" - because they subscribe to the theory that if it's possible someone out there will do it - the actual attack surface has been hardened considerably. This means working POCs are now much harder to write, which means we can reasonably assume actual compromises are also rarer.

      [ If you believe that POCs are commonly the source of real exploit code, which is plausible, this follows directly. Otherwise it follows from the assumption that Black hats are fundamentally using the same methods as White or Grey hats ]

      Let's start from a classic buffer overrun on the stack. Once upon a time you could expect that most such overruns, especially ones larger than a single machine word, were going to be remote compromises, and most of those would escalate to full root before you could say "setuid binary".

      These days you can't execute inserted code (due to W^X policies implemented in various ways) and you can't reliably guess a return address because they're randomised with wrong guesses leading to a crash (if you can cause the service to be restarted, perhaps dozens of times, before you are discovered a guessing strategy might work).

      Now, supposing that you either get lucky or have found a much rarer bug which lets you control the flawed software without executing inserted code. You now have a limited security context. If the daemon you've attacked wasn't supposed to create users, or overwrite the OS kernel or whatever, then you probably can't do it either. Most daemons aren't supposed to fork a shell, so their context is forbidden from doing so. This alone makes a lot of previously "easy" attacks very tricky.

      This layered approach to security isn't an excuse for bugs in software, but an acceptance that such bugs will happen and we should mitigate their effects (e.g. script kiddie attack leads to crashed web server, not a root kit)

      If the thousands or millions of compromised Windows PCs now running botnets and spammer tools had been hardened years ago many of them would have just become unusable through crashing (which might make the owner take it to be "repaired") rather than being havens for 12 year old IRC losers and Nigerian scammers.

    6. Re:I doubt x86 inherently flawed by bluGill · · Score: 1

      A virtualization layer cannot do everything. However it can do a lot. Valgrind catches a lot of bugs in code because it is a virtualization layer.

      Most importantly the layer can easily know where the stack return address is and prevent you from changing that. It also knows where the stack is, and what memory you have allocated, so it can prevent you from writing to anything else. It can also prevent you from running code in that area unless the memory was written with a function called dlopen (or other such), and it also can know in advance where dlopen is implemented so you can't write your own. (and why would you write your own when the system provides one, unless you wanted your code exploitable)

      It is a matter of tradeoffs. Run your code in valgrind and you get 1/20th original speed. Run in a power powerful system and you go slower yet.

  26. NX bit by BinaryJono · · Score: 2, Interesting

    while the NX bit can help prevent the execution of malicious code on the stack after a buffer overflow, it doesn't solve the security problem posed by overflows. return-into-libc attacks can easily be executed and will become much more prevelant as NX-enabled PCs filter into the mainstream. address space randomization can help make rilc attacks harder on 64-bit architectures but is pretty useless on 32-bit archs.

  27. Re:Aieeee by Laura_DilDio · · Score: 2

    Paul, let me explain how to be an industry analyst... 1) NEVER NEVER NEVER refer to anything that puts Microsoft in a bad light. After all, they pay the bills. 2) NEVER NEVER NEVER mention pinko-commie-bastard linux without mentioning how the TCO is lower on Windows, reliability is a myth, and security is virtually non-existent. 3) Lastly, land a gig working for a real tech think-tank, like the Yankee Group (TM). CIO Today? Who reads that rag anyway? You get more press from these slashdot lusers than you do from a bunch of clueless pointy-haired bosses. Love, Laura Groom of the Stool to Lord Bill

  28. ms supporter by cg0def · · Score: 0, Flamebait

    Soooo, how much money did that guy get paid to find MS another excuse not to fix their buggy OS?

  29. Administrate isn't a word by lheal · · Score: 1

    Informative post, but it's "Administer".

    But besides that, whether a buffer overflows or not is not a hardware issue, it's a program bug. If a programmer is so unclever as to allocate a buffer using a temp array on the stack and not bounds-check his code, well, unemployment should result.

    Yeah, someone did piss in my Wheaties this morning.

    --
    Raise your children as if you were teaching them to raise your grandchildren, because you are.
    1. Re:Administrate isn't a word by mikael · · Score: 1

      Don't forget NUL terminating a string:


      void process_string( char *pstr )
      {
      char tempbuf[1024];

      strncpy( tempbuf, pstr, 1023 ); // Avoid overflow

      buffer[strlen(buffer)-1] = '\0';
      }

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
    2. Re:Administrate isn't a word by mikael · · Score: 1

      That should be:


      void process_string( char *pstr )
      {
      char tempbuf[1024];

      strncpy( tempbuf, pstr, 1023 ); // Avoid overflow

      tempbuf[strlen(tempbuf)-1] = '\0';
      }

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
    3. Re:Administrate isn't a word by Anonymous+Luddite · · Score: 1

      >> '\0';

      I don't think the problem is forgetting to terminate a char array so much as counting on the other guy to provide a pointer to a properly terminated array of the correct size.

      Always gotta check your arguments for termination within the correct bounds...

    4. Re:Administrate isn't a word by kvigor · · Score: 1
      That would also be wrong. strncpy does *not* null-terminate the buffer if it would overflow, so strlen(tempbuf) is not defined in that case. You want something like:
      {
      char tempbuf[1024];

      strncpy(tempbuf, pstr, sizeof(tempbuf) - 1);
      tempbuf[sizeof(tempbuf) - 1] = 0;
      }
    5. Re:Administrate isn't a word by Anonymous Coward · · Score: 0

      Wha?!? Nice: right after the comment "avoid overflow", there's a line of code which potentially writes a zero somewhere beyond the end of tempbuf.

      The function strlen() counts characters until it finds a '\0'--so, BY DEFINITION there is ALREADY a null character at tempbuf[strlen(tempbuf)-1]! (Assuming strlen() returns instead of causing a SIGSEGV.)

      Replace strlen() with sizeof().

    6. Re:Administrate isn't a word by tricorn · · Score: 2, Interesting

      Sometimes you have to do that, but I prefer instead to make sure that all uses of that buffer don't assume it is zero-terminated unless I can guarantee that it is.

    7. Re:Administrate isn't a word by mikael · · Score: 1

      That's not the problem - what if the string begins with '\0' ie. zero length?

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
  30. Not so... by dhowells · · Score: 4, Insightful

    Althought the insecurity of code that is only 'theoretically' exploitable ought to be fixed (we all prefer bug free code, right?) many theoretical exploits will never be practically exploited for technical reasons.

    There is a distinction here which needs to be made between code which is exploitable but for which no public exploit code or method has been released -- in which cases it 'wont stay that way for ever' -- and code wherein the calculation of an arbitrary or runtime offset (e.g for a buffer overflow) is impossible and guesswork is impractically unlikely. Theoretical insecurities of the latter type are very likely to 'stay that way for ever'

    --
    use Blunt::Instrument;
  31. Yellow wheaties. by Anonymous Coward · · Score: 1, Funny

    "Yeah, someone did piss in my Wheaties this morning."

    That was me. Sorry.

    1. Re:Yellow wheaties. by lheal · · Score: 1

      >That was me. Sorry.

      No problem. Thanks for owning up to it.

      --
      Raise your children as if you were teaching them to raise your grandchildren, because you are.
  32. ms supporter? by Blitzenn · · Score: 3, Insightful

    Did you happen to actually read the article? The guy ends by blatantly stating that there is no sane reason to choose a PC over a mac. How can you possibly see this guy as an MS supporter,.. unless of course you didn't really read the article.

    1. Re:ms supporter? by Anonymous Coward · · Score: 0

      im no wizzard but, heres my bit or what i got from it.
      There are some valid pionts through the whole spool....

      1. MS cant|wont, write good code, there more into slap happy seat of the pants, shit! and expect the user to pay heavely$$$, and clain no responsability for said software. and tell you nothing HUH!
      (didnt need to read this to get it, have been enduring the said os for years)

      2. all platforms/hardware are susceptable to buffer overflows when compiled. buffer overflows are a throback of the wonderful C compiler.
      compilers are wonderfull for getting things ass about, i have a sparc machine that has, when using a vnc desktop all the letters|chr's are mirror, makes it hard to read.

      3. code writen in assembly can also be suseptable to buffer attacks but the finger could then be pointed at the programer|coder. as it would be his|her fault.

      Summery,
      although still blaming and flaming said MS, i dont think that the hardware is totaly to blame
      x86 has its problems and has come along way most notibly speed.
      there are definatly issues with the way that the compiler looks at different hardware, or the way that the programer|os sets up the hardware?

  33. More theoretical than practical by ebyrob · · Score: 1

    Whare have we heard that before?

    1. Re:More theoretical than practical by Anonymous Coward · · Score: 0

      There is a working mirror of the old L0pht website here.

  34. Secure programming is the answer by Anonymous Coward · · Score: 0

    This will always be a problem until programmers read a good book on secure programming or take a secure programming class to learn how to write code without heap and buffer overflow vulnerabilities.

  35. Real Solution -- Signetics Write Only Memory! by farrellj · · Score: 1

    Think about it...if a virus could never read it's code out of memory, you would never suffer from it...worms would die, and all malware would stop working! It would be great!

    Better yet, you can use the Signetics chips in both PCs *AND* Macs!

    ttyl
    Farrell

    --
    CAN-CON 2019 - Ottawa's only book oriented Science Fiction Convention! October 18-20, Sheraton Hotel, Ottawa, Canada h
    1. Re:Real Solution -- Signetics Write Only Memory! by InvalidError · · Score: 1

      Then we will need write-only HDDs for our write-only swap space.

    2. Re:Real Solution -- Signetics Write Only Memory! by BillX · · Score: 1

      And something to generate the 6.3VAC filament voltage :-)

      --
      Caveat Emptor is not a business model.
  36. Windows doesn't take advantage of the hardware by wiredbuddy · · Score: 2, Interesting

    I just read this article recently in Embedded Systems Programming magazine. http://www.embedded.com//showArticle.jhtml?article ID=55301875 After a detailed explanation of the hardware protection features built into the x86 (since the 80386), the author makes the following statement towards the end of the article: "Too bad Microsoft doesn't use this feature. Windows has been plagued by buffer-overflow bugs that could easily be prevented by the processor's segmentation features. Alas, even though these features have been built into every x86 chip for more than 15 years, Microsoft has never used them. Instead, Windows creates a "flat" memory system with no segmentation, no tasking, no bounds checking, and no privilege protection, and then struggles to duplicate all those features in software. The result has been famously ineffective."

    1. Re:Windows doesn't take advantage of the hardware by Ann+Elk · · Score: 1
      "Too bad Microsoft doesn't use this feature. Windows has been plagued by buffer-overflow bugs that could easily be prevented by the processor's segmentation features. Alas, even though these features have been built into every x86 chip for more than 15 years, Microsoft has never used them. Instead, Windows creates a "flat" memory system with no segmentation, no tasking, no bounds checking, and no privilege protection, and then struggles to duplicate all those features in software. The result has been famously ineffective."

      Neither Linux nor the BSD variants use the x86 segmentation hardware, yet they are not "famously ineffective".

    2. Re:Windows doesn't take advantage of the hardware by Anonymous Coward · · Score: 0

      So what OS uses it at all?

    3. Re:Windows doesn't take advantage of the hardware by Anonymous Coward · · Score: 0

      Quite possibly the most secure kernel ever built and absolutely not vulnerable to buffer overflow attacks. Uses all the x86 security features, segmentation, multiple privilege levels and enforces MAC secrecy and integrity policies:

      http://www.radium.ncsc.mil/tpep/epl/entries/CSC-EP L-94-008.html

    4. Re:Windows doesn't take advantage of the hardware by mbessey · · Score: 1

      "So what OS uses it at all?"

      A bunch of niche OSs that you've never heard of, including Flex/OS, CPM/386, Coherent, and probably a few others. A fair number of embedded systems use at least the segmented memory model to some advantage, either in a custom OS, or within the application itself.

      -Mark

    5. Re:Windows doesn't take advantage of the hardware by wiredbuddy · · Score: 1

      Is that true? After I initially read that article some months ago, I went searching to find out if Linux did use it. I couldn't find a definitive yes or no but got the impression that it did. If it doesn't, why not? Is it because it CAN be done reliably in software? And even it it can, why NOT let the hardware do it for you?

    6. Re:Windows doesn't take advantage of the hardware by rsbroad · · Score: 1

      I have always wondered why Windows does not take advantage of descriptors.
      In the Intel processor, a Stack only, non-executable, descriptor type was provided.
      I am guessing that descriptors require overhead that slow down Windows.
      As far as I know, Windows does not use descriptors (well just one) to this day.
      Probably a decision made in 386 days, haunting Msft ever since.

      Of course, buffer overflows are software problems anyway.
      The basic issue with buffer overflow is not checking the buffer limits in code, as data is being received. This non-checking is built into the "c" libraries. For speed.
      I also always wondedered why Microsoft doesn't just upgrade the libraries and fix all potential buffer overuns in one fell swoop of a recompile.

    7. Re:Windows doesn't take advantage of the hardware by calidoscope · · Score: 1
      So what OS uses it at all?

      OS/2 v1.x made good use of the segment registers on the 80286. Heard stories that the MS programmers preferred using OS/2 for writing Windoze code - memory access violations (e.g. going beyond the requested memory segment) would result in an immediate halt to execution with a pointer to where the un-allowed memory access occurred.

      In making OS/2 2.0 portable to other architectures, IBM and MS went to a flat memory model which ruled out using the segment registers as Intel intended.

      --
      A Shadeless room is a brighter room.
    8. Re:Windows doesn't take advantage of the hardware by Ann+Elk · · Score: 1

      Linux and BSD do not use x86 segmentation because the feature is not portable to other CPU architectures.

    9. Re:Windows doesn't take advantage of the hardware by Anonymous Coward · · Score: 0

      You can't fix the libraries without changing the api. There are now 'safe' versions of most library functions, but they can't be used by existing code unless you change that code. And many of the library functions are based on unix library functions. Especially those using pointers to zero terminated strings and pointers to buffers which must be 'big enough to contain the result' - E.g. printf.

    10. Re:Windows doesn't take advantage of the hardware by Anonymous Coward · · Score: 0

      sprintf, not printf!

  37. Bad analogy by sesaetaen · · Score: 1

    Driving a safe car provides you an extra chance of making it in a crash.

    Writing poor code is more like not utilizing the workings of your vehicle (braking only with the parking brake?), hence driving it insecurely because of sloppiness.

    1. Re:Bad analogy by tritonic · · Score: 1

      Makes sense to me.The car's the processor architecture, and the driving's the coding. Anyway, you forget, this is slashdot - car analogies get mod points.

    2. Re:Bad analogy by leshert · · Score: 2, Funny

      Anyway, you forget, this is slashdot - car analogies get mod points.

      Yes, but only cdr analogies get +1, Funny.

    3. Re:Bad analogy by Anonymous Coward · · Score: 0

      Yes. Driving a safe car means you might make it. It dosen't imply that all cars that didn't do well in crash tests will suddenly catapult themselves at semi-trucks... And that's what the article says.

  38. Architecture *is* at the root cause by nurb432 · · Score: 1

    However, all other non Harvard architectures will suffer the same fate, as they all have the same flaw. RISC isnt a magic trick to fix all evils.

    Its simple: dont mix code and data.

    --
    ---- Booth was a patriot ----
    1. Re:Architecture *is* at the root cause by The+FooMiester · · Score: 1

      OMG, what a concept! Unfortunatly, that's so 1985. Wasn't that when MS started embedding code in .doc files?

      --
      The previous has been a secret message to my comrades.
  39. he's got some valid points by noamsml · · Score: 0

    while my knee-jerk reaction was "well, paul has already demonstrated how trustworthy he is (see SCO article)", he actually has some valid points. mainly, pointing out that the average joe sixpack compares 6 year old iMacs running OS9 to modern PCs running WinXP and Linux.

    1. Re:he's got some valid points by TeknoHog · · Score: 1
      the average joe sixpack compares 6 year old iMacs running OS9 to modern PCs running WinXP and Linux.

      I understand why this might be the case with WinXP, but not with a properly configured Linux. In fact my old Linux x86 machines have gotten somewhat faster over time, because of the developments in software. From the article, emphasis mine:

      Macs run more functional software and have a much longer useful life. As a result, the Macs that PC users see most often -- in schools or at grandma's house -- tend to be significantly older and slower than the PCs people compare them to because Wintel product churn means that a three-year-old PC is a museum piece, while a six-year-old iMac running OS 9 is likely still to be in use.

      To me this seems like a software issue, and it has little to do with any inherent flaws in the x86 architecture. Besides, the 'joe sixpack' experience of different computers that people use every day, is usually comparing Mac to Windows, not Linux.

      --
      Escher was the first MC and Giger invented the HR department.
  40. Old New Thing by geo.georgi · · Score: 2, Informative
  41. Alternative. by Anonymous Coward · · Score: 1, Informative
    On some architectures (IA-64, for example) the return address stack and the value stack are completely disjoint areas, making a buffer overflow much less likely to allow remote code execution (at least the most common form of buffer overflow).

    If you are a bit curious why most C compilers don't do this as well. It is possible on x86 to use the stack pointer only for return addresses and then some other register to point to a "value stack" in some other disjoint area of memory. Not only would this make it easier on debuggers (crawling backwards from the current stack frame) but also lessen the impact of a typical return address remote code execution style buffer overflow.

    However there is a down side to this, on x86 there are so few registers that to have two stack pointers is going to make code way more ineffeicient (many more spills to and from the stack). At least x86-64 doesn't have this problem, so there is one side of the "suckitude" of x86 right there (but hey, the string instructions are nifty data movers, I wish other CPU's had them at x86 speed).

    So there are some architectural issues in x86 that are inherently bad when it comes to security. Then there are features that are inherently good but hard to use (segment registers, descriptor tables, and the "onion ring" enforced HW security).

    The issue with stacks growing upwards (and heaps growing downwards) is pretty true. Having a stack growing downwards is a bit less secure because buffers tend to grow upwards in memory. Accessing past the end of an array is a much more common bug than accessing too low. Although its amazing how simple data validation failures can result in some interesting addresses being generated.

    Disclaimer: I am a low-level snobb who writes code in assembly and C that has to have microsecond-accurate performance on old Motorola 68k's, so telling me to use java or some other interpreted high level language where the runtime footprint is larger than the amount of RAM I have to work with ain't gonna cut it. It may work for business apps but not embedded systems!

    1. Re:Alternative. by Anonymous Coward · · Score: 0

      On some architectures (IA-64, for example) the return address stack and the value stack are completely disjoint areas, making a buffer overflow much less likely to allow remote code execution (at least the most common form of buffer overflow).

      If you are a bit curious why most C compilers don't do this as well. It is possible on x86 to use the stack pointer only for return addresses and then some other register to point to a "value stack" in some other disjoint area of memory. Not only would this make it easier on debuggers (crawling backwards from the current stack frame) but also lessen the impact of a typical return address remote code execution style buffer overflow.

      However there is a down side to this, on x86 there are so few registers that to have two stack pointers is going to make code way more ineffeicient (many more spills to and from the stack).


      However, most compilers use EBP for the "value stack" and ESP for the "return stack". It would not be difficult to change the stack frame enter sequence:
      push ebp
      mov ebp,esp
      sub esp,something
      to this:
      push ebp
      sub ebp,something
      and change the stack frame leave sequence from:
      mov esp,ebp
      pop ebp
      to this:
      pop ebp
      In these cases, EBP would point to a seperate, disjoint stack. The ESP stack would still be used for read-only parameters.

      Stack tracing would be easy provided nothing else was pushed onto the ESP stack (registers can be saved in the EBP stack), however you would not be able to distinguish parameters from local variables. This can be solved by modifying the caller to do this:
      push ebp
      sub ebp,sizeofparameters
      mov [ebp+nn],param_n
      ...
      call foobar
      pop ebp
      Full stack traces can now be done, as there will be two saved EBPs on the "return stack", one pointing to parameters and one to local variables.

      Actually, can anyone here comment on why this would not work (or why it hasn't been implemented)? Most compilers for a variety of 3rd-generation languages already use the EBP register to access local variables.
    2. Re:Alternative. by Anonymous Coward · · Score: 1, Interesting

      The problem with that approach is that most compilers don't really create a stack frame off EBP anymore (think -fomit-frame-pointer in GCC). That makes EBP available for use as a general purpose register.

      Thats not to say that your approach won't work at all. Simply that it will rob some x86 code of some of its performance. Its a question of trading security for performance/memory footprint. I guess I forgot to mention in my original post that having a disjoin stack area will still consume some memory in terms of page tables and virtual address space. But with paging enabled both stacks can grow on demand.

      I would be happy to see this implemented but ABI's are hard to change.

  42. Well, YEAH. by Matey-O · · Score: 1

    A longitme friend has a Sun 360 that's permanently on the net. a 25 Mhz MIPS processor isn't exactly as desireable target to skript kiddez, nor does it have the ability to saturate a network link...and you'd need 40 times as many to create your vast Zombie Horde.

    Christ, creating a SSH key takes a good 30 seconds.

    --
    "Draco dormiens nunquam titillandus."
    1. Re:Well, YEAH. by drinkypoo · · Score: 1
      A 360 is an IBM. A 3/60 would be a Sun, I guess. Sun3 machines have either 68020 or 68030 (rare) processors. Searching on "Sun 360" doesn't turn anything up, but a 3/60 is a 20MHz 68020. 68xxx processors are somewhat RISCy, but they are not RISC.

      You may be able to upgrade a 3/60 to a 4/60 or something. I used to have a 3/260, and later upgraded it to a 4/260. AFAIK the machines take the same logic board. However, I'm pretty sure my 4/260 was not 25MHz. In fact a little research tells us that it ran a Weitek-made SPARC at 16.67MHz.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    2. Re:Well, YEAH. by Matey-O · · Score: 1

      THIS is what I get for going from memory. (proof my memory is bad.)

      --
      "Draco dormiens nunquam titillandus."
    3. Re:Well, YEAH. by LizardKing · · Score: 1

      68xxx processors are somewhat RISCy, but they are not RISC

      They weren't RISCy at all, in fact the Motorola 68k family was a very clean CISC design. I did my first real programming on a 68k machine - an Atari ST. Assembly language programming was actually quite fun for that system, so it came as a bit of a shock when I tried to learn assembly for the x86.

  43. This is actually a pretty good point, but... by mbessey · · Score: 2, Interesting

    Using a segmented address space, where the Stack and Code are kept in what are effectively different address spaces, would do much to mitigate the effect of buffer overruns. On the other hand, the NX bit on x86-64 accomplishes basically the same thing, without the overhead of having to use long pointers to access data on the stack.

    Neither of them are really all that robust though, since any time you can overwrite the return address on the stack, you can cause execution to veer off to somewhere else. Maybe you won't be able to insert shellcode into the program's address space, but if you can cause a function to "return" to something in the C standard library, like remove(), you can still cause havoc.

    A more secure solution would split the stack such that function arguments and return addresses are not stored in the same space. This would give you a somewhat Forth-like runtime model, where return addresses are stored on one stack, and data values on the other. In that case, a buffer overrun in one function would still allow you to overwrite the arguments to another function, which is sub-optimal.

    If you combine a split stack with growing the stack in the non-obvious direction, then you're probably as secure as you're going to get without eliminating the use of a stack altogether.

    -Mark

  44. Re: SIG (OT) by Anonymous Coward · · Score: 0

    Your signature is too long, it is being cut off mid-word.

  45. Sloppy Programming not architecture by Anonymous Coward · · Score: 0

    Buffer overflows are just down to sloppy programming. They have nothing to do with architecture. Sloppy compilers add to the problem. Program are rarely scrutinised at machine code level, programmers are forced into a culture of producing quantity, not quality.....

  46. Bollocks! by EmbeddedJanitor · · Score: 4, Informative
    On many/most RISC you can grow the stack in any direction. By convention, most ARM code runs a down-growing stack,

    The stack direction has nothing to do with security. You can still have stack protection running up or down stacks. Once you have a reasonable MMU, all further problems are due to software design.

    --
    Engineering is the art of compromise.
  47. One correction... by mbessey · · Score: 1

    "The PowerPC stack grows downwards as well"

    The PPC architecture doesn't have a stack pointer register, or any dedicated "push" or "pop" instructions. The stack growth direction is an OS feature, not a processor feature.

    -Mark

  48. except,,, by Anonymous Coward · · Score: 0

    there's something called good programming practices.

  49. OpenBSD does by ^BR · · Score: 1

    And Linux with PaX too.

  50. Virus Execution Coprocessor by skingers6894 · · Score: 2, Funny

    I think a future version of X86 should have virus execution assistance in hardware.

    Given that you just can't stop the things, why not offload the burden of running them from the processor?

    BIPs (Bots Infected per Second) could be the metric for performance.

  51. Too old? by autocracy · · Score: 0
    I'm 20... that's not cool!

    You're just not supposed to feel old at my age... somebody please come along and talk acoustic couplers... I know I've never used those. I have whislted to a modem before, though.

    --
    SIG: HUP
    1. Re:Too old? by Lehk228 · · Score: 1

      i'm 20 as well, and i feel old every day, hell the "kids today" don't even know what autoexec.bat is for or why you would need a floppy disk to install an operating system. many don't know what a zip drive is and most could't recognize a parralell cable if you smacked 'em in the face with it. Damn do i feel old. pretty soon they won't know what a serial or PS/2 port is and sure as hell won't know what a full sized DIN connector is for or what an AT motherboard/PSU is.

      --
      Snowden and Manning are heroes.
  52. stopping buffer overflows. A how to. by zymano · · Score: 1, Interesting

    You could use a language like Java ,Python or Ada.

    Or some good programming practices.

  53. PowerPC doesn't prevent buffer overflow exploits by Branka96 · · Score: 5, Interesting

    CAN-2004-1134 is a buffer overflow issue. The Mac is susceptible to buffer overflows.
    Take e.g. the iSync issue. Apple doesn't go into details, but if you do a Google search on "isync vulnerability" you will find:
    "The vulnerability is caused due to a boundary error in the handling of the "-v" and "-a" command line options. This can be exploited to cause a buffer overflow by supplying an overly long argument (over 4096 bytes). Successful exploitation allows execution of arbitrary code with the privileges of the mRouter application."
    A proof of concept exploit can be found at. It opens a root shell.
    When the PowerPC jumps to a subroutine, the return address is stored in the lr register. The first thing the prolog code in the subroutine does, is to put the address on the stack (freeing up the register for further function calls). So, a would-be hacker can overwrite the return address. For a description of how to take advantage of buffer overflows on the Mac, see "Smashing The Mac For Fun & Profit".

  54. Did someone piss on your dictionary as well? by glrotate · · Score: 1, Interesting

    "Administrate isn't a word"

    From the OED:

    administrate v.
    [f. L. administrat- ppl. stem of administra-re: see administer (cf. demonstrate, etc.).]
    1. A by-form of administer v. (a sacrament, oath, medicine).
    1651 Calderwood Hist. Kirk (1843) II. 38 That no maner of person, in time coming, administrat anie of the sacraments secreetlie.
    1733 G. Cheyne Eng. Malady (1735) Pref., When Lithotomy cannot be administrated.
    1855 Milman Lat. Chr. iii. v. (1864) II. 70 The delinquent clerk might be deprived for a time of his power of administrating sacred things.
    2. To manage or direct (affairs). Now usu. absol. or intr. Cf. administer v. 1.
    a1639 J. Spottiswood Hist. Ch. Scot. (1655) v. 241 A Lieutenant should be appointed..with full authority to administrate all affairs.
    1848 Tait's Mag. June 397/2 The people is sovereign, its representatives administrate.
    1934 G. B. Shaw On Rocks Pref. 150 What was formerly called 'real property' is replaced by ordinary personal property and common property administrated by the State.
    1965 New Statesman 17 Sept. 400/3 Bishops, prime ministers, official people loved it... One is simply administrating in a fantasy world.
    1981 Times 29 Apr. 9/6 The machinery of such aid is still primed by administrators eager to go out and administrate.
    3. To organize or manage the recording and application of information in (a list, register, etc.).
    1977 Wandsworth Boro' News 16 Sept. 19/4 (Advt.), Part-time..ledger clerk required to administrate sales ledger (mechanised).
    1982 Times 12 Oct. 12/6 A claims register, administrated by an International Sea Bed Authority, would have been a simple answer.

    1. Re:Did someone piss on your dictionary as well? by lheal · · Score: 1

      Well. You learn something new every day.

      --
      Raise your children as if you were teaching them to raise your grandchildren, because you are.
    2. Re:Did someone piss on your dictionary as well? by Anonymous Coward · · Score: 0

      I am surprised that someone would go to the trouble of saying something like "such is not a word", without looking into it first.

      For another source, The New Oxford American Dictionary says...

      administrate |?d?min??str?t| verb [ trans. ] less common term for administer (sense 1 ). ORIGIN mid 16th cent.: from Latin administrat- 'managed,' from the verb administrare (see administer ).

    3. Re:Did someone piss on your dictionary as well? by lheal · · Score: 1
      "such is not a word"


      It was especially silly of me to say that wasn't a word when I know that words can spring into existence at any time through literary invention, historical revival, transfer from another language, or simple common usage.


      My bad.

      --
      Raise your children as if you were teaching them to raise your grandchildren, because you are.
  55. It's the flat memory model, not the system. by tjstork · · Score: 1

    If we actually did the bad thing and used selectors rather than the flat memory model, it would compromise performance, but it would be a lot more secure. You could, for example, put code for each module in an application in its own segment and then use only special segments to facilitate communication between application and libraries.

    --
    This is my sig.
  56. Media Watch by xixax · · Score: 4, Informative
    Our public broadcaster has a show calledMedia Watch that routinely busts journalists for plagiarising press releases. Not to mention even more forward things like running advrtisements as news.

    Xix.

    --
    "Everything is adjustable, provided you have the right tools"
    1. Re:Media Watch by pipingguy · · Score: 1


      That's unAmerican, heathen.

    2. Re:Media Watch by Dorothy+86 · · Score: 1

      Is that kinda like Chaotic Evil? or would it be neutral good?

    3. Re:Media Watch by say · · Score: 1

      I've written tons of press releases for my NGO, and they are consequently written in a "finished interview third person view"-article style. Many of them got cut & pasted into real newspapers.

      It's lazy, but it doesn't mean they don't check the facts in it! IOW, I find it strange to "bust" anyone for it. If the press release is well enough written, balanced and has correct facts, why write it again with different words?

      --
      Roses are #FF0000, violets are #0000FF, all my base are belong to you
    4. Re:Media Watch by Nutria · · Score: 2, Insightful

      if the press release is well enough written, balanced and has correct facts

      What's the point of a balanced press release?

      If you're not pumping your "side", you're not doing a good job.

      --
      "I don't know, therefore Aliens" Wafflebox1
    5. Re:Media Watch by Anonymous Coward · · Score: 0
      That's unAmerican, heathen.

      You better believe it, American.

    6. Re:Media Watch by say · · Score: 1

      duh. well enough balanced for them to print it, obviously.

      --
      Roses are #FF0000, violets are #0000FF, all my base are belong to you
    7. Re:Media Watch by GaryPatterson · · Score: 1

      That's fair enough, so long as the press release is clearly marked as such, and not attributed to a writer or as an editorial.

      The problem is when company PR is released as news with the full weight and authority of the newspaper behind it. At most, it's advertising.

      I watch it a fair bit, and it seems to me that Media Watch doesn't mind newspapers printing press releases, so long as they're not masquerading as news. They try to uphold the journialistic code of conduct, which regards this sort of thing as a Bad Thing (although the review board seems to be staffed by a bunch of gutless wonders to frightened to ever actually find anyone in breach of their code even when they're caught red-handed).

  57. Re: Biased (not) by screenrc · · Score: 2, Insightful

    Nowday, what I see on the news are stories
    about Michael Jackson, Mrs. Stuart, and the Pope.
    This is what is passed as "news". Is the
    media biased towards the left or towards the
    right? When all they do is talk about
    the unimportant, the media is not biased at
    all! They are just silly.

  58. These "insecurities" not only limited to CPU type. by Anonymous Coward · · Score: 4, Interesting
    Every once in a while there is somebody who claims a certain CPU type, operating system, etc. is more secure simply by its basic structuring. The main point made here is that x86 is less secure because of its process memory layout. Lets take a look at a few known and popular high impact vulnerabilities and examine the reasons why they could be exploited:
    • The telnetd AYT heap overflow (2002) could be exploited on x86/*BSD systems specifically because of their memory layout and little-endianess, while MIPS and SPARC systems were saved by their big-endian, 64bit addresses. Yet, on x86/Linux it was not exploitable, because of a different memory layout within the heap.
    • The Solaris login heap overflow (2001) could be exploited on both x86 and SPARC. The reason were that addresses are created by the vulnerable code itself.
    • The SSH1 CRC32 overflow (2000), has been exploited on every known architecture, x86, SPARC, MIPS, etc. because the data used to overwrite memory with were created by the vulnerable code itself, hence endianess and order did not matter.
    Now, there are cases where RISC architecture makes exploitation more difficult to impossible. But there are around an equal amount of cases where x86 is saved. But the reason is not to be found within the architecture alone, but within differences in the whole chain from CPU to process memory layout to ABI and runtime environment. The following are especially important to determine if a vulnerability could be exploited on a given system:
    • CPU, word width and endianess
    • process address layout
    • stack frame handling and layout, how registers are saved (register windows?) order of registers/parameters/locals/alloca
    • heap handling (i.e. what malloc allocation system is used. For example, most *BSD systems use an out-of-chunk management to control the heap structure itself, while glibc uses an inband management, which is by nature more likely to allow exploitation)
    • compiler optimizations, eg. if small functions are inlined omitting stack frames, etc.
    • ...
    Speaking with more than eight years of exploit development experience, there is much more to consider than just the CPU type.
  59. this is a known issue by jbltgz · · Score: 2, Interesting

    it's a known issue that the intel x86 platform is vulnerable to stack-based buffer overflow exploits. the amd64 architecture is addressing this by providing hardware page protection which prevents code from being illegally executed off the stack. netbsd has enabled this feature by default in netbsd 2.0. i look at the x86 platform like training wheels and amd64 like a nice racing bike... ;-)

  60. Re: Biased (not) by Brandybuck · · Score: 1, Insightful

    Mr. Jackson and Mrs. Stuart are not that important in the grand scheme of things, but the Pope is. That's because he's the head of the largest and most influential denomination of the largest and most influential religion in the world. I would have to check a current almanac, but I suspect he's a leader to more people than any other leader in the world.

    Just because he doesn't have armies and navies, or platinum albums, or a line of towels at KMart, doesn't make him unimportant. He may not be important to you, but he's important to half a billion people or more. That's significant.

    If he's only a tenth as influential as his predecessor was, his election is more than newsworthy.

    --
    Don't blame me, I didn't vote for either of them!
  61. The problem is C, not the hardware by Animats · · Score: 4, Interesting
    It's certainly possible to build machines which prevent buffer overflows. Burroughs did that from 1958 to about 1990, quite successfully. Every array is in its own segment. Memory addresses aren't numbers; they're a sequence of descriptors, more like a pathname than a pointer. The last element of the pathname is the array subscript. A descriptor that goes off the end of an array generates a subscript-out-of-range exception.

    But it's tough to run C on that kind of architecture. C wants pointers to be addresses. The "array is a pointer" convention is a bad fit to a true segmented architecture. You can run Pascal just fine, but running C is tough. It can be done, but basically requires allocating all the variables in one big "array" at the hardware level, so you lose the protection. When C came in, the Burroughs machines (by then the Unisys A series) died off.

    So it's quite possible to fix this, but you have to dump C. This may happen as Java and C# get more traction.

    C++ doesn't help. It's part of the problem.

  62. Score one for the m68k fans! by Anonymous Coward · · Score: 0

    Unfortunately, it's far too late. :(

  63. virtual by Anonymous Coward · · Score: 0

    isn't that where virtualization can come in and help? Isn't this a nice way to guard against total catstrophe? If all it can do is hose one running application (or your stack of apps) and a barbeones kernel for that,you can poof it away easily (or store separately for analysis) once it becomes obvious to you or the machine this is occurring. Then when you respawn what you want, it's in a clean state, and you *don't do* what you did previously which you now know was a bad idea (i.e. : run this new to you sploit or chunk 0 bad code)

    I'm not a coder but this is my laymans understanding of this technique. Or am I understanding this incorrectly?

  64. depending on the flaw, by Joseph_Daniel_Zukige · · Score: 1

    the answer would be yes, no, or it used to be.

  65. Dissemination of this information is encouraged by 44BSD · · Score: 4, Informative

    http://cvs.openbsd.org/papers/auug04/

    Theo talks about how OpenBSD uses various available processor features to increase system attack resilience, w/minimal performance impact. The design choices made for architectures with differing degrees of per-page protection are presented. The concepts are not at all OpenBSD-specific, although the implementation discussed is, of course, OpenBSD.

  66. I have found the solution. by Anonymous Coward · · Score: 1, Insightful

    And the solution is FORTRAN.

    No seriously, flame all you want, but FORTRAN, even FORTRAN 77, is perfectly suited to development in a modern environment. I don't think you can prove otherwise.

  67. And wire services... by jfengel · · Score: 2, Informative

    You'll tend to see rewritten press releases in the business section. The front page of most newspapers originates in wire service articles: AP, Reuters, AFP, sometimes big national papers like the Washington Post or the New York Times.

    If you click through a news story from a news aggregator like Google News, you'll note that many of them have identical text, because they're literally repeating the AP wire service story, crediting the original AP writer and all.

    Actual reporters are used primarily for local news; very few newspapers have staff anywhere else. Most don't even have reporters in Washington, much less Paris/Jakarta/Darfur.

    The bias comes not so much from the writers as from the editorial choices of which press releases and wire reports they're running and what page they put them on.

    Either way, they rarely get the skeptical eye you'd really hope they get before receiving the imprimatur of being printed in the newspaper. Even a few phone calls would be nice.

  68. Related News by AmberBlackCat · · Score: 1

    It turns out, driving accidents are due to a problem inherent in all cars. And all cases of obesity and anorexia are due to a problem inherent in all food. Oh, and airplane crashes are due to a problem with the air.

  69. smurf attack by Anonymous Coward · · Score: 0

    Paul Murphy == Jeff Gannon ?

  70. Operating Systems and C by betasam · · Score: 2, Insightful

    It looks like most operating systems like relying on C. Wouldn't C# or Java require a VM and hence a little shakedown on the OS architecture? And wait, what would the VM be implemented with? There seems to be a strong case that a good hardware architecture can only be of help. The bad one, irrespective of what runs on top of it might always provide a source for trouble. Application developers have always tried to rely on a nice language + compiler + framework as they are evolving.

    --
    No Greater Friend, No Greater Enemy! (Lucius Cornelius Sulla)
  71. my linux box runs on x86 by nri · · Score: 1

    no viruses here though. Maybe I'm running the wrong x86 machine. I'll have a look on my windows x86 machine to see if it has any viruses..... .... ....
    Opps, found some. I wonder what the difference is between my Linux/x86 and Windows/x86 ? Whys has my windows one got viruses ?

    Anyone care to help me out here ?

    --
    if :w! doesn't work, try :!cvs commit -m""
    1. Re:my linux box runs on x86 by Anonymous Coward · · Score: 0

      Windows has viruses and trojans, Linux has buffer overflows.. Unless you run your Linux box in a cave away from the rest of the world, you're going to have to be vigilant on security updates.

    2. Re:my linux box runs on x86 by Anonymous Coward · · Score: 0

      Not too competent Linux users who think they are secure is the best zombies out there, let's get Linux to the masses ;->

    3. Re:my linux box runs on x86 by Anonymous Coward · · Score: 0

      Yeah, you have to be clued up to handle linux - the user is not susceptible to Stupid Virus Tricks.
      There's also less reward in writing a virus that can only compromise 6% of the computers out there.

      I have a windows box with no virus protection, and no viruses, maybe I have the wrong x86 machine too.

  72. advertisements as news by Anonymous Coward · · Score: 1, Interesting

    The government does that over here.

  73. I just bought a G5 iMac. by crovira · · Score: 1

    and the Mac OS X 10.4.0 didn't cost me anything.

    Actually the hardware was sweet and the OS it came with was OS X 10.3.9 and it had an upgrade DVD which I am also using to upgrade my TiBook and an old iMac (or two or three.)

    Jobs gets his pound of flesh from the sale of hardware. If I really needed Linux (I use it on a server [and I also have a W2k box]) I would get it and think nothing about it. It didn't cost me anything.

    Apple doesn't have a monopoly on anything, not even intelligent design.

    I'm sure you can buy a 970FX from somebody else. Apple isn't the only system builder IBM sells to. :-)

    --
    MSBPodcast.com The opinions expressed here are my own. If you don't like 'em... Think up your own stuff.
  74. No Buzz word languages by krischik · · Score: 2, Interesting

    True, C# and Java would need a VM. However there are traditional (non VM) languages which have build in buffer protection. Fortran was mentioned by another poster - I would add Ada to the list.

    Unlike common believe they are suitable for low level system programming. They are also not old and outdated - both Ada and Fortran have current (not older then 10 years) ISO standards and will get a new ISO standarts soon.

    The only problem is that the names are not common buzz words.

    Martin

    1. Re:No Buzz word languages by SuiteSisterMary · · Score: 1

      What's to prevent you from building a VM in hardware? Or, more accurately, building hardware that has typical VM capabilities, like sandboxing and privilege separation?

      Answer: Nothing. This is how it's done for things that actually need to be secure. Your register holding a Top Secret bit simply cannot be accessed by a Secret process. Done.

      --
      Vintage computer games and RPG books available. Email me if you're interested.
  75. Re: Biased (not) by Martin+Blank · · Score: 2, Informative

    The Catholic Church counts some 1.1 billion members, give or take, so about the size of China, or perhaps a little less. Islam is the second-largest religion with about 850 million adherents, though this does not include sects such as Sunni and Shi'ite, which the Catholic Church basically is.

    --
    You can never go home again... but I guess you can shop there.
  76. Fox News Watch by scottgfx · · Score: 1

    There is also a "Media Watch" type program called "Fox News Watch" on, what else, Fox News. It airs Saturday at 6:30pm EST. It's the only appointment viewing I have all week. It's insightful and entertaining, and manages to do both at the same time. They have even (gasp) questioned Fox News motives on occasion.

    The panel is two on the right and two on the left. The moderator attempts to stay in the center. I'm serious, it's a very well done show, and the moderator Eric Burns is a great host. It's probably the best show on Fox News.

    --
    It's mandatory to wash your hands before returning to the land of Dairy Queen.
  77. 20??? by Wabbit+Wabbit · · Score: 1

    You're TWENTY???

    Heck, son, I have socks older than you. I have a COMPUTER older than you, still sitting in my closet. And I still have 5 1/4" floppy disks for it.

    Wait, I'll go dust off my copy of Hellfire Warrior by Epyx. Best game ever written (think Diablo ||, but instead of a 3D landscape you had empty rooms with numbers, and you had to look up the number in a book, and that's where you got a description of where you were).

    Feel better?

    --
    Nothing is inexplicable; only unexplained -Tom Baker, Doctor Who
    1. Re:20??? by Anonymous Coward · · Score: 0

      I know I feel better now... here I was feeling old for remembering when my 386DX/33 was top of the line.

    2. Re:20??? by tokabola · · Score: 1

      First computer I used was a TRaSh 80, mod 1. By the time I was a jr. in HS they got an Apple IIe. Not that anyone had the faintest idea how to do anything other than Oregon Trail on either.

      First computer I owned was a C-64. I still have it, and two drives. I bust it out for a little Ultima every now and then, and someday I'll end up using it for a controller for an immersion cooling system or something like that. I liked the way they were kind of "Open Source". The programmers guide had a listing of everything you need, even pinouts and how to directly access them from machine code. A true hacker's computer for it's time.

      Tommy
      --
      Open Source for Open Minds
  78. Strange nobody mentions this by haggar · · Score: 2, Interesting

    I would have said that the most obvious hardware-specific feature, that would protect against stack overflows, is Harvard architecture (vs. Von Neumann, present in almostall CPUs today).

    In Harvard architecture, data and program memory are separate and separately accessed. This has a speedup benefit, as you can access the data in the same cycle you access the program memory, but the other advantage is, a stack overflow will not corrupt your program. For an example, the Atmel AVR risc microcontroller family uses Harvard architecture.

    --
    Sigged!
    1. Re:Strange nobody mentions this by Anonymous Coward · · Score: 0

      The cache on x86 and PPC processors does use a Harvard architecture. It doesn't protect against buffer overflows. The stack is still subject to overflows regardless of how instructions are cached.

    2. Re:Strange nobody mentions this by Kymermosst · · Score: 1

      I would have said that the most obvious hardware-specific feature, that would protect against stack overflows, is Harvard architecture (vs. Von Neumann, present in almostall CPUs today).

      Nobody mentions it because there is a serious weakness in the Harvard architecture when it comes to modern computing: You can't implement just-in-time compiler for Java, for instance.

      Sometimes, there is good reason to execute "data".

      Harvard architecture is great for certain applications, however, including DSPs and of course the microcontrollers you mentioned.

      (Some people call the split instruction/data cache architecture in modern von Neumann CPUs "Harvard", but it's not the same. Once a cache flush happens, all bets are off.)

      It should be noted that any architecture that supports pointers to executable code (function pointers) that can stored in "data" memory are vulnerable to memory alteration/corruption exploits in poorly written programs. This would be just about any CPU where you could target an ANSI C compiler.

      --
      "Alcohol, Tobacco, Firearms, and Explosives" should be a convenience store, not a government agency.
    3. Re:Strange nobody mentions this by haggar · · Score: 1

      This would be just about any CPU where you could target an ANSI C compiler.
      Is there any CPU where you can't?

      A member of the "classic" (previous to the ATtiny and ATmega) AVR family of MCUs, the AT90S1200, has no RAM at all (and no interface to external RAM, which is common for MCUs), only a 3-level hardware stack. You would be surprised at how many things you can do without RAM - and surprisingly enough, Imagecraft managed to implement a C compiler for it?!

      Regardless, my question above is not rhetorical.

      --
      Sigged!
    4. Re:Strange nobody mentions this by Kymermosst · · Score: 1
      This would be just about any CPU where you could target an ANSI C compiler.

      Is there any CPU where you can't?

      A member of the "classic" (previous to the ATtiny and ATmega) AVR family of MCUs, the AT90S1200, has no RAM at all (and no interface to external RAM, which is common for MCUs), only a 3-level hardware stack. You would be surprised at how many things you can do without RAM - and surprisingly enough, Imagecraft managed to implement a C compiler for it?!

      Regardless, my question above is not rhetorical.


      I doubt there are many. I imagine all CPUs in use today have at least a mostly complete implementation of ANSI C that targets it.

      Which was pretty much my point. Any system with volatile memory and a C program that maintains a function pointer could *theoretically* be vulnerable to a memory alteration attack. Whether arbitrary code could be executed may or may not be possible. It wouldn't possible to get your own code executed on a true Harvard-architecture processor, but you might be able to change what code is running (maybe get a privelege escalation or access to a monitor or command prompt.) At the very least a crash could be forced.

      Depending on the exploit, one does not even need to force a crash or execute code, either. Overwriting other data may be the valuable part of an attack. (Think electronic voting.)
      --
      "Alcohol, Tobacco, Firearms, and Explosives" should be a convenience store, not a government agency.
  79. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  80. Re: Biased (not) by CountBrass · · Score: 0

    If you didn't include the only two sects of Islam then the count would be zero.... All muslims are one or the other.

    --
    Bad analogies are like waxing a monkey with a rainbow.
  81. Re: Biased (not) by BrokenHalo · · Score: 1
    All muslims are one or the other.

    No they're not.

  82. Trusted Computing by tines · · Score: 1

    That's why people will end up thinking that Trusted Computing is a Good Thing(TM) -- the whole x86 Architecture is flawed, that's why we have viri and stuff.

  83. huh by Anonymous Coward · · Score: 0

    why do you have to use a long pointer to access the stack when using a segmented memmory model? isnt that what a stack segment register (SS) is for? so in the 64k .tiny model both the code segment register and the stack segment register are equal and so stack addresses are "short" relative to the code, but just cause SS CS doesnt mean you need to use a long to access the stack.. or are you saying that because you need to use a segment override to do a mov ax,ss:[bx] (not sure if thats legal?) ?? but push ax will be the same in either case, wouldnt it?

    1. Re:huh by CTachyon · · Score: 1
      /* Slashcode ate my spaces */

      void do_something(char* p) {
      strcpy(p, "Hello, World!");
      }

      int main(void) {
      char buf[256];
      do_something(buf);
      printf("%s\n", buf);
      }

      Now, what segment will p use? DS. What segment should p use? SS. You could make the DS and SS segments overlap, but then you're right back to the current situation. If you don't switch back to the Dantean hell of NEAR/FAR pointers, you simply can't use separate stack/heap segments.

      You could split the return stack from the parameter/data stack, but that still permits overflowing the arguments and on-stack data from your ancestor functions in the call stack, which is just as lethal security-wise as a return address overwrite. If you can overwrite the calling function's int security_check_passed with a 1, it doesn't matter if you can return into a buffer or not.

      --
      Range Voting: preference intensity matters
    2. Re:huh by Billy+Donahue · · Score: 1

      You must admit there's a big difference between a hole that allows overwriting "security_check_passed=1" (rare at best) and having a hole allowing the attacker to make the CPU do ANYTHING he wants it to do on return from a broad class of badly written functions.

      --
      -- The Funk, The Whole Funk, And Nothing But The Funk
    3. Re:huh by CTachyon · · Score: 1

      It's a very different exploit design with a different set of vulnerable programs, yes, but it's still disturbingly common. Also, even with a separate return stack, you're still subject to overflows into saved registers, so you can still do writes to arbitrary locations in memory (unless saved registers also go on the return stack, of course).

      Actually, now that I think about it, leaving the old call stack the way it is but putting local variables on a new stack would help avoid overflows into both registers and parameters. You'd still have the "security_check_passed=1" problem, and any local buffer pointers could still be used for arbitrary memory writes.

      That would almost preserve the x86 ABI, except that whichever register (EBP most likely) were now used for local variables would now need new call semantics. You could fudge it a bit by saying that EBP is still undefined at function entry, but have the C library include an internal function that adjusts and returns the top of the local variable stack. The C compiler would insert (pseudocode) EBP = __lstack_adj(n) in the prolog after saving EBP, then call __lstack_adj(-n) in the epilog. That'd hurt performance a bit, but no more than what the compiler has to do to create PIC code anyway.

      Actually, it sounds implementable as a simple compiler option. My biggest complaint about split stack was that it broke the ABI for not much gain, but if it can preserve the ABI, I'm all for giving people the option. You could even implement a stack canary without blinking, since the canary code would be in __lstack_adj. Overwrites of variables local to the function would still be doable, of course, but every bit helps.

      --
      Range Voting: preference intensity matters
  84. 1895? by nurb432 · · Score: 1

    No, the harvard architecture dates to much earlier then that.

    --
    ---- Booth was a patriot ----
  85. Removing the x86 chip... by ultranova · · Score: 1

    And implies that other Windows vulnerabilities are actually facilitated by having an x86 chip.

    He's right, you know. Remove the x86 chip from your PC machine and it is very unlikely that the Windows installation in that machine will be compromised, except by someone with a physical access to the machine.

    --

    Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

  86. Windows, Mac, and Linux by Glock27 · · Score: 2, Interesting
    The author of the cited article is clueless on several fronts, but he does have a good basic point: if you're choosing between Windows, Mac and Linux for the "best" computing platform, Mac is looking awfully attractive these days.

    In another article on Slashdot today it's mentioned that Eric Raymond recommends Microsoft "open document formats" and "adhere to standards". Document formats aren't really an issue with Apple, but Apple is doing a very nice job of adhering to open standards these days. BSD Unix, Java, OpenGL, PDF, TCP/IP, X11...Apple is much more programmer friendly than it has ever been. The G5 machines are also very competitive on performance.

    If you need access to commercial applications, or would rather spend money instead of time to accomplish your computing tasks, Mac makes a lot of sense compared with Linux. Windows, for me, is a distant third due to the time lost dealing with security issues, and a general distaste for programming something that inelegant. Besides, I can target Windows using Java with very little pain.

    Just my $.02.

    --
    Galileo: "The Earth revolves around the Sun!"
    Score: -1 100% Flamebait
    1. Re:Windows, Mac, and Linux by Anonymous Coward · · Score: 0

      but he does have a good basic point: if you're choosing between Windows, Mac and Linux for the "best" computing platform, Mac is looking awfully attractive these days.

      Well, in this case "he" = Apple PR, so not surprising conclusion on his part.

      Apple have also recently been caught bribing journalists for positive reviews.

      If it was any other company, this sort of behaviour may even lead to critical comments on the company and it's ethics.

  87. Logic 101 by Shoten · · Score: 1

    I find it so distressing when things like this show up on Slashdot. "X bad thing is dependent on Y characteristic of Z, which A doesn't have, so therefore, I suggest that A is better." No overall comparison of the two, no accounting for potential vulnerabilities in "A" that might not exist in "Z", and no accounting for the fact that since "Z" is almost always far more prevalent in the world than "A", more effort has been expended looking for bad things.

    You would be using the exact same logic if you said, "There's a vulnerability in a model of Hamilton bank vaults relating to the way the 5-inch bolts secure the door. The little safes that are sold in Staples and Office Depot don't use these kinds of bolts...so they're better safes, right?"

    --

    For your security, this post has been encrypted with ROT-13, twice.
  88. execstack in Linux? by zimon · · Score: 1

    I've noticed, in FC3 many binaries distributed have their executable stack flag cleared. Doesn't this mean it is invulnerable to stack under/overflow attacks, in AMD Duron and Athlons? See execstack(8)

  89. Re: Biased (not) by mangu · · Score: 1
    Mr. Jackson and Mrs. Stuart are not that important in the grand scheme of things, but the Pope is. ... If he's only a tenth as influential as his predecessor was, his election is more than newsworthy.


    Define "influential", please. If you mean "having influence on someone's behavior", then certainly Michael Jackson is, or rather used to be, pretty much an influential person. Of course, by that criteria the Pope, too, influences the behavior of hundreds of millions of people, so, yes he is important.


    But important to the point of deserving nearly 100% of the world news media for more than two weeks? No, I don't think so. Who follows the Pope's recommendations anyhow?


    Take sexual behavior, for instance. Exactly how many people in the world are so faithful catholics that they believe abstinence is the only acceptable solution for sex-related problems? Among the billion or so people who are labelled as "catholics", how many engage in sex before marriage, how many use condoms or contraceptive pills?


    The pope is in the spotlight, and all the people who feel an emotional linkage to him certainly make him important, just like Michael Jackson or the queen of England are important in that sense. But I do believe there's something like overdoing it.

  90. Great Comment. by Anonymous Coward · · Score: 0

    I always wondered why the stack didn't grow outwards into unallocated space?

    What advantage does it give the chip to have the stack grow backwards?

    It seems dangerous and lacking in good design.

  91. Compare x86 to an Alpha system by randomErr · · Score: 1

    Ok, lets test this theory out: compare an NT x86 system to an NT Alpha system with the same patches. Can you exploit the same vulniablities?

    How about comparing Debian running on a RISC archtechuare to x86 running the same build?

    --
    You say things that offend me and I can deal with it. Can you?
  92. I call BS by mangu · · Score: 2, Insightful
    FORTRAN, even FORTRAN 77, is perfectly suited to development in a modern environment.


    Oh, yeah? Try getting data from an Oracle database in FORTRAN. They used to have something called, IIRC, pro*fortran, but no more. It took me about six months of interaction with people deeper and deeper in the Oracle organization to find out that that product is "deprecated" and no longer supported. Have you ever tried porting a FORTRAN program from VAX/VMS to whatever modern environment you use? Or from a PDP-11? So here is one reason why FORTRAN is dead: important software companies no longer support it.


    Another reason: try finding programmers who are experienced in it. Where I work they have a 20-year-old system entirely written in FORTRAN. In the last twelve months, three junior engineers have quit their jobs because an old dinosaur insists that they must keep doing everything in FORTRAN instead of calling the old functions from C programs. What's the point of having "FORTRAN" in your resume, if the job market for that skill is so restricted?


    But these are practical reasons, you wanted technical reasons, I guess. So try this: how do you do string manipulations? Functions that are one-liners in C become two pages long in FORTRAN. Or how about dynamic memory allocation?


    I have used FORTRAN a lot in the past. I have seen its long and slow agony. I have seen the countless different standards, the many people and organizations who have said, "sure, you can do that in FORTRAN, do it like this" and have come with a solution that's incompatible with everything else.


    Maybe FORTRAN could have evolved differently, if it wasn't so much a "commercial" software. All companies did incompatible improvements to FORTRAN so their marketing people could say "ours is the best FORTRAN in the market". Endless forking while C evolved in a standardized way. Today, to link a VAX FORTRAN library with an Oracle-accessing FORTRAN program originally written in AIX, for instance, is so hard that the easiest solution is to rewrite everything in C.


    But I know people like you who believe FORTRAN is still the solution. As I mentioned, they are running through junior engineers at a fast rate. Luckily, that's not my department, here we do everything in either C/C++ or PHP.

    1. Re:I call BS by krischik · · Score: 1

      Well, I am not a Fortran advocate but even I know that modern Fortran is not spelled all UPPER CASE.

      Which leads me to belive that your informations are not up to date - a Fortran advocate can tell you when the move from FORTRAN to Fortran was done but it must be more then 10 years ago.

      But what strikes me more: You as a C/C++ advocate should know that there is only one fully compiant C99 compiler available. Apart from that:

      Maybe C/C++ could have evolved differently, if it wasn't so much a "commercial" software. All companies did incompatible improvements to C/C++ so their marketing people could say "ours is the best C/C++ in the market".

      Only of corse they arn't - MS-C does not evern know about the keyword "restrict" which is an optimzing hint and the minimum implementation requironment is to ignore the keyword.

      Fully working implementation of C99's VA arrays - no where to see - appart from just one compiler (http://www.comeaucomputing.com./

      In Germany we have a saying: "Don't throw stones if you sit in glass house".

      Martin

  93. NX provides little protection by generationxyu · · Score: 2, Insightful
    Yes, it's true, NX will protect you from the simple char buf[512]; strcpy(buf, untrusted_data). But that doesn't mean it's secure. What if the return address the attacker supplies isn't on the stack? What if it's in a predictable malloc() buffer? Ok, set NX on malloc()s. What if it's in the code segment? You can't make that NX. What if it's in libc? Once again, can't make that NX. Lots of undesirable stuff can be done without executing stack code.

    Random offsets won't help much -- they'll help some, but what if you can write a LOT of data into that buffer? Give it a LARGE NOP sled.

    Detect when a process is doing a lot of NOPs in a row and kill it? Ok. Use "AIAIAIAIAIAIAIAI..." 'A' = 0x41 = inc %ecx, 'I' = 0x49 = dec %ecx. Together, they are an effective NOP. Hell, most of the time, "AAAAAAAAA..." is an effective NOP. Does an attacker really care what's in ECX?

    The problem is NOT the architecture, NOT the OS, and NOT the language. It's not a problem with libc, stdio, strcpy, or anything else. If you haven't figured this out by now, you might want to read about computer architecture -- computers do what you tell them to. I can write secure code in which I strcpy() from untrusted data into a static buffer on the stack, on an x86 running Windows with no NX. Hell, I'll even do it in real mode.

    I'm not a DJB fanboy, but he does have quite a few good points. Programmers are lazy. Write secure code.

    --
    I mod down pyramid schemes in sigs.
  94. This guy is so clueless it hurts by pointwood · · Score: 1

    It's the same guy that thinks SCO have a good case as reported here some days ago:
    http://yro.slashdot.org/yro/05/04/29/1950245.shtml ?tid=123&tid=136&tid=88&tid=155

    And since also on Groklaw:
    http://www.groklaw.net/article.php?story=200504291 84804444

  95. Re: Biased (not) by Anonymous Coward · · Score: 0

    The vast majority are. And there are NOT more than twice as many Muslims as Catholics in the world.

  96. Re: Biased (not) by DrSkwid · · Score: 1

    The Vatican has troops.

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
  97. Re: Biased (not) by Martin+Blank · · Score: 2, Informative

    Sunni and Shi'ite sects make up the significant majority of Muslims, but there are other sects. I know of the Druze, Alawi, and Ismali (Ismaeli?), but there are others, though even combined they are a very small percentage of the overall religion.

    --
    You can never go home again... but I guess you can shop there.
  98. It's not the hardware, it's the software by BillAtHRST · · Score: 1

    I fondly remember programming in C/C++ on x86 machines running OS/2, where attempting to write beyond the end of an allocated block of memory (incl. stack) caused an immediate interrupt. Great for debugging, and also much more secure against buffer overrun attacks. Why? Because in OS/2 each allocated block of memory was its own segment, with its own protection levels. Windows, unfortunately, just allocates one big segment from x86 hardware, so hardware-based memory protection is effectively disabled.

  99. Re: Biased (not) by Brandybuck · · Score: 1

    But important to the point of deserving nearly 100% of the world news media for more than two weeks?

    A gross exaggeration. Try to stay in the same reality as the rest of us.

    --
    Don't blame me, I didn't vote for either of them!
  100. Re: Biased (not) by BrokenHalo · · Score: 1
    The vast majority are. And there are NOT more than twice as many Muslims as Catholics in the world.

    From where I'm sitting, it would appear to me that Sufis account for quite a large proportion of Muslims. It's simply that they don't happen to greatly signify in the political hotspots where the US administration has taken pains to demonise Muslims.

    I'm not sure why you mention numbers of Catholics, since I never did.

  101. Hardware VM by krischik · · Score: 1

    Well true, nothing of corse. Prehaps a bit complex since VM instructions are ver high level.

    As for "sandboxing and privilege separation: if you think of the four privilege rings in the x386 architecture then it has allready been done. Only that most OS don't actualy use that feature of the x386 architecture. (i.E. only use ring 0 and 3).

    Other posters pointed that out allready: the available savety feratures of the x386 arn't actualy used.

    Martin

  102. Stop feeding his already over-stuffed ego by Anonymous Coward · · Score: 0

    If you look around Paul Murphy's website, I think it starts to become clear that this guy has some sort of grudge against microcomputers. He's enamored of Unix on the mainframe, and believes that any other platform/operating system is a mere plaything.

    He probably has a shrine devoted to Scott McNealy in his basement.

    There's no point in employing sound reasoning in an attempt to sway the opinion of a person like Paul Murphy. He's pathologically entrenched in his long-held beliefs. Pay no attention to his addlepated bullshit.

  103. PARENT IS TROLL OR VERY STUPID by Anonymous Coward · · Score: 0

    ...and whichever it is doesn't matter.