As I understand it if you have a cached answer which is past expiry, then you throw it out and ask for a refresh. Then if the refresh cannot be found, then you say the name cannot be resolved.
It seems to me that if you are past the expiry time you should ask for the real answer, but in the event that you cannot get one you should continue to hand back your stale answer indefinitely. That would mean that an attack like this on the root DNS system would essentially never work. Other machines would wind up asking where, for instance, .au and .com are but would continue to give back accurate answers indefinitely. It would also help in some local failures because my local caching DNS node would leave me able to access things that I normally used even though the server it gets things from cannot be reached. (I used to suffer through a lot of these because I was behind a firewall with only a poorly-administered DNS server available.)
The other question is this. Why is mail the only protocol that DNS has seen fit to make failover be implemented for in the DNS system? Personally I think it would be great to build the capacity into virtually everything. Makes redundancy easier to design in to things. Allows people to use DNS for naive balancing and also gives the caching benefit.
Cheers,
Ben