lunedì 27 agosto 2018

COS'È L'INIEZIONE DI CODICE IN WINDOWS?

Che cos'è l'iniezione di codice su Windows?

Il Code injection (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 a fin di bene o per male, ma in entrambi i casi può causare problemi.

L'iniezione di codice viene anche chiamata DLL injection 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.

Per quale codice viene utilizzata l'iniezione

L'iniezione di codice viene utilizzata su Windows per eseguire ogni tipo di funzionalità. Mentre i programmi legittimi lo usano normalmente, è purtroppo anche usato dai malware. Per esempio:
  • I programmi antivirus spesso iniettano codice nei browser web. Possono usarlo per monitorare il traffico di rete e bloccare il contenuto Web pericoloso, per esempio.
  • I programmi dannosi potrebbero aggiungere codice al 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 (ma non è un virus, lo uso anch'io), sui temi del desktop, inietta il codice per modificare il modo in cui vengono disegnate le finestre.
  • Stardsock's Fences (anche questo non male) inietta il codice per cambiare il modo in cui funziona il desktop di Windows.
  • AutoHotkey, ti consente di creare script e assegnare tasti di scelta rapida a tutto il sistema, inietta del codice in Windows 10 per fare 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 (scorretto) sugli altri giocatori.

Il code injection è dannoso?


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é offre questo tipo di flessibilità agli sviluppatori.

Certamente, con tutto quel potere arriva qualche pericolo. L'iniezione di codice può causare problemi e bug nelle applicazioni. Google afferma che gli utenti Windows che hanno inserito 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 o quantomeno "controllarlo meglio". Microsoft evidenzia che il code injection potrebbe essere utilizzato da applicazioni malevole per manomettere le impostazioni del browser, il che è uno dei motivi per cui è già stato bloccato in Edge.

Microsoft fornisce anche istruzioni per verificare se DLL di terze parti vengono caricate in Microsoft Outlook, in quanto causano così tanti arresti anomali di Outlook.

Come un dipendente Microsoft aveva scrittoin un articolo del blog degli sviluppatori già nel 2004:

"L'iniezione di DLL non è mai sicura. Stiamo parlando di iniettare codice in un processo che non è mai stato progettato, costruito o testato dall'autore del processo stesso e che ha cooptato o creato un thread per eseguire quel codice. Si corre il rischio di creare problemi di sincronizzazione o risorse che prima non c'erano o che aumentano i problemi che già c'erano."

In parole più semplici, l'iniezione di codice è una specie di trucco sporco. In un mondo ideale, ci sarebbe un modo più sicuro per realizzare ciò che potenzialmente potrebbe causare instabilità al sistema. Tuttavia, l'iniezione di codice oggi è una parte normale della piattaforma applicativa Windows. Sta lavorando costantemente in background sul tuo PC Windows. Potresti chiamarlo un male necessario.

Come controllare le DLL iniettate

Puoi verificare 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. Fai clic su View> Lower Pane View > DLLs o premi Ctrl+D.

Process Explorer in Italiano

Selezionare un processo nel pannello superiore e cerca nei file in basso per vedere le DLL che sono state caricate. La colonna "Companu Name" fornisce un modo utile per filtrare questo elenco.

Ad esempio, è normale vedere qui una serie di DLL create da "Microsoft Corporation", poiché fanno parte di Windows. È anche normale vedere 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 filter library" in Chrome.

Selezionare un processo nel pannello process explorer

Non c'è molto che si possa fare se si trova un'iniezione di codice nel proprio 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 vedere se ci sono programmi che iniettano codice nel browser e disinstallarli per impedirne la manomissione dei processi di Chrome.

Come funziona la code injection?


L'iniezione di codice non modifica l'applicazione sul disco. Al contrario, 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 il code injection. Un processo può collegarsi a un altro 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 in questo modo non impedisce ai processi sul tuo computer di interferire tra loro.

Per ulteriori informazioni tecniche, consulta questo post sul blog che spiega come gli sviluppatori possono iniettare DLL (in iglese) e quest'altro sui diversi tipi di codice di iniezione su Windows (anche questo in inglese).

In alcuni casi, qualcuno potrebbe cambiare il codice su disco, ad esempio sostituendo un file DLL fornito con un gioco per PC con uno modificato per abilitare una frode o una 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.

I commenti verranno pubblicati dopo un controllo da parte dei moderatori. Grazie.