Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to secure dll functions from being used outside of my application?

I want to restrict other application from using dll functions that I have written.

Eg. If i hav database.dll containg two functions.

public void InsertInToDatabse();
public void ClearDatabase();

Now If my application has called InsertInToDatabse() and is doing some other work,till this time if some other application calls ClearDatabase() by referencing database.dll , The databse would be cler out.So how can I restrict calls to these functions form third party application ?

like image 572
NIlesh Lanke Avatar asked Jan 25 '12 08:01

NIlesh Lanke


People also ask

How do I protect a DLL file?

The way to prevent your DLL from being reverse engineered is to never ever put it on any system. Print the code out, wipe the disk entirely and shred the printouts then burn them and scatter the ashes in different locations. Just by using a DLL you're preventing casual access.

What is DLL security?

DLLs are executed in the memory of the calling process, with the same access permissions. This means that there is no protection for the calling EXE if the DLL contains any anomalies. Malicious attackers may exploit this fact by using methods such as DLL Hijacking or DLL Proxying to execute their malicious code.

What is DLL preloading?

If an attacker gains control of one of the directories, they can force the application to load a malicious copy of the DLL instead of the DLL that it was expecting. These attacks are known as “DLL preloading attacks” and are common to all operating systems that support dynamically loading shared DLL libraries.


2 Answers

if your dll is a class library the actual configuration file will be the one of the client application (web.config or app.exe.config) and in there only authorized applications will have proper connection string with username, password, db server and db name.

Now, even if unauthorized apps would be prevented to call you dll's methods in the way you are looking for, in case those bad apps have direct access to the database by knowing the connection string, they can still mess around.

this would to say that in fact as long as the configuration is outside your dll you shouldn't worry because only authorized apps will be accessing the proper database.

if this approach still does not satisfy you, then you should be using security check like CAS which allows you to specify which class or assembly can be calling a certain method so even if your dll is referenced by another application it won't work. Beware that in .NET 4 (you tagged it in the question) the whole security layer has been changed and works differently from older .NET Framework versions, check this article for more details: http://msdn.microsoft.com/en-us/library/dd233103.aspx

like image 171
Davide Piras Avatar answered Oct 11 '22 12:10

Davide Piras


You cannot stop people from calling your functions, but you are free to implement your functions to protect against such circumstances.

For instance, you could put a lock around database accesses so that the call blocks until the previous call has finished, or you could have a flag that causes the Clear() call to return immediately with an error code or exception.

EDIT: I may have misunderstood the question. If you NEVER want third party code to call your functions then use internal (and/or InternalsVisibleTo) as Marcus suggests.

like image 45
GazTheDestroyer Avatar answered Oct 11 '22 12:10

GazTheDestroyer