Che cos'è il codice di iniezione su Windows?
L'iniezione di codice è comune su Windows. Le applicazioni "iniettano" parti del proprio codice in un altro processo in esecuzione per modificarne il comportamento. Questa tecnica può essere usata per il bene o per il male, ma in entrambi i casi può causare problemi.
L'iniezione di codice viene anche chiamata iniezione DLL perché il codice iniettato è spesso sotto forma di file DLL (libreria a collegamento dinamico). Tuttavia, le applicazioni potrebbero anche iniettare altri tipi di codice che non sono DLL in un processo.
Che codice di iniezione è usato per
L'iniezione di codice viene utilizzata per eseguire tutti i tipi di trucchi e funzionalità su Windows. Mentre i programmi legittimi lo usano, è anche usato dal malware. Per esempio:
- I programmi antivirus spesso iniettano codice nei browser web. Possono utilizzarlo per monitorare il traffico di rete e bloccare il contenuto Web pericoloso, ad esempio.
- Programmi dannosi potrebbero aggiungere codice al tuo browser web per monitorare meglio la tua navigazione, rubare informazioni protette come password e numeri di carte di credito e modificare le impostazioni del browser.
- Stardock's WindowBlinds, che temi il tuo desktop, inietta il codice per modificare il modo in cui vengono disegnate le finestre.
- Stardsock's Fences inietta il codice per cambiare il modo in cui funziona il desktop di Windows.
- AutoHotkey, che ti consente di creare script e assegnare tasti di scelta rapida a tutto il sistema, inietta il codice per ottenere ciò.
- I driver grafici come NVIDIA iniettano DLL per eseguire una serie di attività relative alla grafica.
- Alcuni programmi iniettano DLL per aggiungere opzioni di menu aggiuntive a un'applicazione.
- Gli strumenti di gioco del PC spesso inseriscono il codice nei giochi per modificare il loro comportamento e ottenere un vantaggio ingiusto sugli altri giocatori.
Code Injection Bad?
Questa tecnica viene utilizzata costantemente da un'ampia varietà di applicazioni su Windows. È l'unico vero modo per realizzare una varietà di compiti. Rispetto ad una moderna piattaforma mobile come iOS di Apple o Android di Google, il desktop di Windows è così potente perché se offri questo tipo di flessibilità agli sviluppatori.
Naturalmente, con tutto questo potere arriva qualche pericolo. L'iniezione di codice può causare problemi e bug nelle applicazioni. Google afferma che gli utenti Windows che hanno introdotto codice nel loro browser Chrome hanno il 15% in più di probabilità di subire arresti anomali di Chrome, motivo per cui Google sta lavorando per bloccarlo. Microsoft nota che l'iniezione di codice potrebbe essere utilizzata da applicazioni malevoli per manomettere le impostazioni del browser, il che è uno dei motivi per cui è già stato bloccato in Edge.
Microsoft fornisce anche istruzioni per controllare se DLL di terze parti vengono caricate in Microsoft Outlook, in quanto causano così tanti arresti anomali di Outlook.
Come un dipendente Microsoft ha inserito in un blog degli sviluppatori dal 2004:
L'iniezione di DLL non è mai sicura. Stai parlando di spruzzare codice in un processo che non è mai stato progettato, costruito o testato dall'autore del processo e che ha cooptato o creato un thread per eseguire quel codice. Corri il rischio di creare problemi di temporizzazione, sincronizzazione o risorse che prima non c'erano o aggravanti i problemi che c'erano.
In altre parole, l'iniezione di codice è una specie di trucco sporco. In un mondo ideale, ci sarebbe un modo più sicuro per realizzare ciò che non causasse una potenziale instabilità. Tuttavia, l'iniezione di codice è solo una parte normale della piattaforma applicativa Windows oggi. Sta accadendo costantemente in background sul tuo PC Windows. Potresti chiamarlo un male necessario.
Come controllare le DLL iniettate
Puoi controllare l'iniezione di codice sul tuo sistema con la potente applicazione Process Explorer di Microsoft. È fondamentalmente una versione avanzata del Task Manager pieno di funzionalità aggiuntive.
Scarica ed esegui Process Explorer se desideri farlo. Fare clic su Visualizza> Vista riquadro inferiore> DLL o premere Ctrl + D.
Selezionare un processo nel pannello superiore e cercare nel file in basso per vedere le DLL che sono state caricate. La colonna "Nome azienda" fornisce un modo utile per filtrare questo elenco.
Ad esempio, è normale vedere qui una varietà di DLL create da "Microsoft Corporation", poiché fanno parte di Windows. È anche normale vedere le DLL create dalla stessa società del processo in questione- "Google Inc." nel caso di Chrome nello screenshot qui sotto.
Possiamo anche individuare alcune DLL create da "AVAST Software" qui. Questo indica che il software antimalware Avast sul nostro sistema sta iniettando un codice come "Avast Script Blocking library library" in Chrome.
Non c'è molto che puoi fare se trovi codice di iniezione nel tuo sistema, oltre a disinstallare il codice di iniezione del programma per evitare che causi problemi. Ad esempio, se Chrome si arresta in modo anomalo con regolarità, potresti voler vedere se ci sono programmi che iniettano il codice in Chrome e disinstallarli per impedirne la manomissione dei processi di Chrome.
Come funziona l'iniezione di codice?
L'iniezione di codice non modifica l'applicazione sottostante sul disco. Invece, attende che l'applicazione venga eseguita e inietta codice aggiuntivo in quel processo in esecuzione per cambiare il modo in cui funziona.
Windows include una varietà di API (Application Programming Interface) che possono essere utilizzate per l'iniezione di codice. Un processo può collegarsi a un processo di destinazione, allocare memoria, scrivere una DLL o altro codice in quella memoria e quindi istruire il processo di destinazione per eseguire il codice. Windows non impedisce ai processi sul tuo computer di interferire tra loro in questo modo.
Per ulteriori informazioni tecniche, consulta questo post sul blog che spiega come gli sviluppatori possono iniettare DLL e questo aspetto di altri tipi di codice di iniezione su Windows.
In alcuni casi, qualcuno potrebbe modificare il codice sottostante su disco, ad esempio sostituendo un file DLL fornito con un gioco per PC con uno modificato per abilitare la frode o la pirateria. Questo tecnicamente non è "iniezione di codice". Il codice non viene iniettato in un processo in esecuzione, ma il programma viene invece ingannato nel caricare una DLL diversa con lo stesso nome.
Credito immagine: Lukatme / Shutterstock.com.