We want to clarify some parts of your post which are technical incorrect with two examples. It is not our intention to get into any prolonged discussion but we do want to defend our work especially when it is being misinterpreted and misrepresented.
1) Are the page permissions of the address RX (read-execute)?
This is not true. The following is the actual ExploitShield code where the comparison takes place:
VirtualQuery ((LPVOID)dwMemory, &mbi, sizeof(MEMORY_BASIC_INFORMATION));
if(mbi.AllocationProtect == PAGE_READWRITE)
In your case while reversing the ExploitShield.dll library you probably found this:
http://www.zerovulnerabilitylabs.com/do ... shield.pngThe comparison is done against the value 0×4 (CMP DWORD PTR SS:[EBP-18], 4) and that’s why your conclusion is totally incorrect because this value belongs to PAGE_READWRITE (
http://msdn.microsoft.com/en-us/library ... 86(v=vs.85).aspx).
It is possible that you have mistaken it with 0×40 which does equal to the PAGE_EXECUTE_READWRITE value mentioned in your article, but that has nothing to with our analysis and even less to do with our detection logic.
As you well know there are exploits that do not use ROP and which affect mainly XP machines where unfortunately the attacked program does not have DEP activated. Under these circumstances for the programs we protect, evaluating if the page which has called certain function comes from a PAGE_READWRITE memory area is a completely valid behavioral detection.
2) Is the address located within the bounds of a loaded module?
This logic as explained in your post is also incorrect since that is not the objective of ExploitShield. Rather we look for which loaded module the call comes from. With this explanation you can now probably get a good idea of the logic used in the ExploitShield analysis and the behavior of certain payloads.
“If either of these two tests fail, ExploitShield reports that it has discovered an exploit!”
Now I understand this comment. Initially we didn’t understand it because in addition to the checks mentioned above there are more things being considered in the equation. But I understand how based on a misunderstanding of how ExploitShield really works you arrived at this wrong conclusion.
– David Sanchez Lavado