All .NET assemblies in BCL and CLR (hereinafter only CLR will be used) will be firmly named and digitally signed . Digital certificates are provided to ensure that the assembly has not been modified or replaced. However, it does not seem that .NET ever verifies a digital signature (it can verify a strong name, as indicated by Hans).
It makes sense that checking the assembly load is erroneous because the modified CLR can fake responses. I believe that the only safe place from the point of view of .NET 1 for checking is the beginning of the framework program as part of the unmanaged code that loads the framework. The big drawback is the impact of performance.
I look at it from the point of view of the developer, in other words, how do I know if my application is not compromised by the existing CLR 2 or otherwise, otherwise an application trusted by the CLR?
So my question is: why does .NET not check the CLR? Is it due to the fact that the influence of productivity or is it greater?
<h / ">
1. I focus on .NET, you can talk to Windows and thereby break the idea, but if you already have Windows, you really don't need to own .NET.
2. An example of this is to enter the user's password into the application, it is stored in SecureString, but the BCL is compromised so that the attacker now receives this information. This allows them to capture information for something else. I understand that an attacker, if he can replace the CLR, can also put a key logger on the machine, but this (I hope) is detected using a decent security tool. There are also many other ways to attack this; the kernel is how I can find out if SecureString has been modified.
Robert MacLean Sep 12 '11 at 8:24 2011-09-12 08:24
source share