Pillole di #MalwareAnalysis: le KnownDll
- Antonio Capobianco
- Visite: 3811
Il registro #KnownDll viene utilizzato da à#Windows per velocizzare il caricamento delle DLL più comuni ma anche come meccanismo di protezione.
Queste DLL si trovano nel registro HKLM\System\CurrentControlSet\Control\Session Manager\KnownDlls e vengono carica dal sistema operativo al suo avvio.
Quando un esegubile necessita di utilizzare una DLL contenuta in quel registro se la ritrova già caricata in memoria e non ha bisogno di utilizzare il loader per caricarla.
"Ok, serve per velocizzare ma perchè è un meccanismo di sicurezza?" direte voi.
Ebbene, Windows quando deve caricare una DLL, ha un suo ordine sequenziale di directory all'interno delle quali ricercarle e la prima directory nella quale ricerca la dll da caricare è quella dal quale viene lanciato il programma che la richiede.
La directory C:\Windows\System32 è seconda in quell'ordine.
Questo comporta che se un malintenzionato carica una Dll malevola nella directory dal quale viene lanciato il programma, e quella DLL si trova in C:\Windows\System32 il loader caricherà la prima e non quella legittima.
Per ovviare a questo, viene creata KnownDll: se una Dll si trova al suo interno sarà sempre già caricata in memoria e quel pericolo verrà scampato.
Naturalmente se un attore modifica le KnownDll nel registro ... buonanotte ai suonatori ;-)
Queste DLL si trovano nel registro HKLM\System\CurrentControlSet\Control\Session Manager\KnownDlls e vengono carica dal sistema operativo al suo avvio.
Quando un esegubile necessita di utilizzare una DLL contenuta in quel registro se la ritrova già caricata in memoria e non ha bisogno di utilizzare il loader per caricarla.
"Ok, serve per velocizzare ma perchè è un meccanismo di sicurezza?" direte voi.
Ebbene, Windows quando deve caricare una DLL, ha un suo ordine sequenziale di directory all'interno delle quali ricercarle e la prima directory nella quale ricerca la dll da caricare è quella dal quale viene lanciato il programma che la richiede.
La directory C:\Windows\System32 è seconda in quell'ordine.
Questo comporta che se un malintenzionato carica una Dll malevola nella directory dal quale viene lanciato il programma, e quella DLL si trova in C:\Windows\System32 il loader caricherà la prima e non quella legittima.
Per ovviare a questo, viene creata KnownDll: se una Dll si trova al suo interno sarà sempre già caricata in memoria e quel pericolo verrà scampato.
Naturalmente se un attore modifica le KnownDll nel registro ... buonanotte ai suonatori ;-)