Ho un po 'di sicurezza incorporato in un programma lato client che scarica una DLL dal web e chiamato una funzione all'interno di quella DLL. La DLL ha il nome sicuro e la funzione nella DLL utilizza Assembly.GetCallingAssembly()
per determinare l'assembly chiamante in modo che sia possibile ottenere in modo accurato un percorso per il programma che lo ha chiamato. Da lì eseguiamo un controllo hash dell'assemblaggio e verifichiamo che sia corretto.Modo per determinare l'assembly vero e proprio
Abbiamo persone che si sono attaccate in modalità di trust completa e sono in grado di falsificare la chiamata GetCallingAssembly
in modo che punti all'eseguibile reale, mentre eseguono una versione modificata di esso. C'è qualcos'altro oltre allo GetCallingAssembly
che posso usare per ottenere il vero chiamante? Alcuni callstack o qualcosa che può fornire il vero eseguibile dal GetCallingAssembly
sembra essere facilmente falsificato.
provare il metodo 'GetEntryAssembly' invece – hazzik
Attenzione, se si consente il pieno affidamento, possono anche correggere GetEntryAssembly. Se si consente il pieno affidamento, possono anche correggere la DLL scaricata e disabilitare il controllo hash. –