I am looking for a more detailed or technical explanation than the one provided by MS. Code in data space is no longer “executable”. The description of why it was to begin with was something like “programmers are lazy and don’t like to move code to executable address space”
In most medium level languages this would be handled by the compiler so can someone give an example of the reference there?
My other question is that I know the Linux kernel team once discussed he possibility of moving to a non-executable stack, but decided that will helping that it would not be enough to prevent buffer overflows.
I know in writing a buffer overflow it already requires that you overflow an exact number of bytes before placing your code, why is that if code runs in “data” space and what is changed with the non-executable stack?
“but decided that will helping that it would not be enough”
I didn’t understand what you were trying to say here. Would you please reword that so that I or someone more knowledgable might be able to answer your question?
As far as using a non-executable stack it is a good idea regardless of the fact that it alone will not completely stop security issues (and shame on them if they really thought otherwise, though I doubt that they are that stupid).
Security is a process, not a product, and the best security includes many layers of protection, becuase while any one might be compromised, the likelyhood of them all being comromised is unlikely in well implemented systems.
I am looking for a more detailed or technical explanation than the one provided by MS. Code in data space is no longer “executable”. The description of why it was to begin with was something like “programmers are lazy and don’t like to move code to executable address space”
In most medium level languages this would be handled by the compiler so can someone give an example of the reference there?
My other question is that I know the Linux kernel team once discussed he possibility of moving to a non-executable stack, but decided that will helping that it would not be enough to prevent buffer overflows.
I know in writing a buffer overflow it already requires that you overflow an exact number of bytes before placing your code, why is that if code runs in “data” space and what is changed with the non-executable stack?
“but decided that will helping that it would not be enough”
I didn’t understand what you were trying to say here. Would you please reword that so that I or someone more knowledgable might be able to answer your question?
As far as using a non-executable stack it is a good idea regardless of the fact that it alone will not completely stop security issues (and shame on them if they really thought otherwise, though I doubt that they are that stupid).
Security is a process, not a product, and the best security includes many layers of protection, becuase while any one might be compromised, the likelyhood of them all being comromised is unlikely in well implemented systems.
http://www.ussg.iu.edu/hypermail/linux/kernel/9704.1/0328.html
his post is a patch to remove stack execution from the Linux kernel.
This link is threaded if its easier to read.
http://www.ussg.iu.edu/hypermail/linux/kernel/9704.1/index.html#328
Educational read, but the short version is that the idea was shot down.
Thanks you for the links.