And strangely enough the answer to both questions has the same roots.
As software gets more complex, its increasingly difficult to keep it safe, and the whole .Net framework is anothe level of complexity.
Add to that a natural antipathy among hackers against Microsoft, and you know that it will be increasingly difficult to secure .Net apps. The collective commmunity of hackers is larger than the number of programmers at Microsoft, and will for various motives, hack into it given enough time.
Thats not to say that you can't prevent most hackers from getting in through dilligence in patching known holes, and careful actitivity monitoring. But most is not all.
You also don't want to try to get back at hackers, unless you can take them to court. Think of them as a community - if you spank one, another will try to spank you, and you will end up with a war that you won't win. Better to spend your energy making your network less tempting, so that the hacker may look for easier prey.
I know this is frustrating. But you need to take a pragmatic approach, unless you are prepared to spend more time and energy than the hackers.
James