SQL Injection: una guida per gli utenti di WordPress

Pubblicato: 2021-05-26

Se prendi sul serio la sicurezza del tuo sito web, allora è il momento di conoscere i pericoli delle iniezioni SQL e come puoi combatterli.

Il termine SQL injection (chiamato anche SQLi) si riferisce a un tipo di tecnica di attacco informatico che è un modo comune per gli hacker di compromettere siti Web di ogni tipo, compresi i siti che eseguono WordPress come sistema di gestione dei contenuti.

In questa guida, spiegheremo in dettaglio che aspetto ha un attacco SQL injection e i passaggi esatti che devi compiere per evitarlo. Diamo un'occhiata. Imparerai tutto su come funzionano questi attacchi, perché sono così importanti da difendersi ed esempi reali di queste vulnerabilità. Immergiamoci!

In questa guida

    Introduzione: comprensione di SQL

    S tructured Q uery L anguage, o “SQL” (pronunciato come la parola “sequel”) è un database relazionale Management System. Inventato nel 1974, è stato il primo modo semplice per archiviare e recuperare molti tipi di dati sui sistemi informatici.

    Da allora, la popolarità del linguaggio è salita alle stelle ed è ancora utilizzata in molti sistemi di gestione dei contenuti (CMS) come WordPress oggi. Poco dopo che il linguaggio è diventato popolare nella comunità di ricerca scientifica, è sorto il problema dell'ormai famigerata SQL injection.

    In sistemi come WordPress, molte operazioni utilizzano query SQL per recuperare e archiviare dati. Queste query SQL sono scritte dagli sviluppatori e non sono progettate per essere malleabili.

    Sfortunatamente, sin dall'inizio di SQL, gli attacchi di SQL injection sono stati un problema persistente per i sistemi che utilizzano questo tipo di database, come il database di WordPress. L'utilizzo di un plug-in di sicurezza WordPress di qualità può certamente aiutare a mitigare il rischio di subire un attacco o una violazione devastante. Tuttavia, come direbbe GI Joe, "sapere è metà della battaglia" quando si tratta di qualsiasi forma di attacco informatico.

    Che cos'è un'iniezione SQL (SQLi)?

    In poche parole, un'iniezione SQL (SQLi) è un attacco che consente a un hacker di sfruttare una query SQL vulnerabile per eseguire la propria query. Le SQL injection si verificano quando un utente malintenzionato è in grado di eseguire il proprio SQL su un server.

    Noterai che le SQL injection vengono spesso chiamate "SQLI" o "SQLi" nelle pubblicazioni tecniche. Ricorda, questi attacchi possono verificarsi su qualsiasi sistema che utilizza SQL o un derivato di SQL per gestire i dati. Le iniezioni SQL di WordPress in particolare sono così ben studiate e documentate a causa dell'enorme volume di siti che girano sulla piattaforma WordPress.

    Diamo un'occhiata all'esborso più tecnico in cui consistono questi attacchi.

    Definizione di SQL injection

    Per definizione, l'intento di un'iniezione SQL è sempre dannoso e in genere mira a raggiungere uno o più di questi tre obiettivi:

    1. Recupero dati non autorizzato : in SQL, il comando SELECT viene utilizzato per acquisire i dati. Se un utente malintenzionato riesce a manipolare con successo una query basata su SELECT, sarà in grado di "scaricare" il contenuto di un database. Questo è il motivo per cui è fondamentale crittografare tutti i database con informazioni che non dovrebbero essere rese pubbliche.
    2. Modifica dei dati : in altri casi, l'obiettivo di una SQL injection di WordPress potrebbe essere quello di modificare le voci nei database. Questo è comunemente per assegnare un account particolare o un insieme di autorizzazioni di account che normalmente non avrebbero.
    3. Denial of Service (DoS) – Un attacco DoS si verifica quando un utente malintenzionato rende più difficile per gli utenti legittimi l'accesso al tuo sito o ai tuoi servizi. Un comando comune in SQL per eliminare i dati è semplicemente DELETE. Gli aggressori spesso eliminano in massa i contenuti dei database per rendere i siti di destinazione irraggiungibili o inutilizzabili.

    Suggerimento rapido: esegui regolarmente il backup del tuo sito web!

    Molti sviluppatori esperti conservano copie off-server di tutto il codice SQL che hanno scritto per i loro siti WordPress. Sotto forma di file .sql, questi possono essere utilizzati insieme a un plug-in di backup di WordPress per garantire che anche se un utente malintenzionato può ostacolare la tua sicurezza, puoi recuperare in pochissimo tempo. Un plug-in di backup di WordPress come BackupBuddy esegue il backup dell'intero database di WordPress e di qualsiasi altro file nella tua installazione di WordPress.

    SQL Injection

    Spiegazione dei tipi di attacco SQL injection

    Ora che abbiamo esplorato alcuni dei danni che gli attacchi basati su SQL possono causare, è tempo di esplorare il lato più tecnico delle iniezioni. Ci sono alcuni importanti sottoinsiemi di tipi di iniezione che dovresti conoscere.

    Iniezione SQL classica (SQLi)

    Il tipo più comune di iniezione, la versione classica, è quando l'attaccante conosce in anticipo il codice SQL. Questo è anche il tipo di iniezione più utilizzato su WordPress; poiché WordPress è open source, il pubblico in generale ha accesso a tutti i suoi componenti, comprese le query SQL.

    Passeremo agli esempi reali un po' più avanti, ma con questa forma di iniezione, gli aggressori spesso manipolano le query per "cancellare" la prima parte di una. Possono quindi inserire una query personalizzata che il server eseguirà come se fosse stata scritta dallo sviluppatore originale.

    Iniezione SQL cieca (SQLi)

    A differenza della versione classica, le blind SQL injection si verificano quando l'attaccante non ha accesso al codice SQL e deve semplicemente fare un'ipotesi plausibile. Inoltre, questo tipo richiede molta più abilità rispetto al tradizionale SQLi, poiché i risultati di un attacco riuscito non vengono visualizzati all'attaccante.

    Detto questo, sono disponibili molti programmi che aiutano gli utenti malintenzionati ad acquisire automaticamente i loro risultati bit per bit.

    Iniezione SLQ composta (SQLi)

    Questa forma di attacco si verifica quando un attacco separato viene combinato con SQLi per ottenere il risultato desiderato. Il più sofisticato dei tre sottogruppi, l'attaccante deve eseguire un exploit che gli permetta di eseguire SQLi che non funzionerebbe da solo. Gli exploit che più comunemente accompagnano SQLi in questo genere di attacco sono violazioni dell'autenticazione, attacchi DDoS (Distributed Denial of Service), dirottamento DNS e attacchi di scripting tra siti.

    Perché i siti Web WordPress sono vulnerabili alle iniezioni SQL?

    WordPress è vulnerabile a determinate iniezioni SQL poiché è così ampiamente utilizzato (ora alimenta il 40% di tutti i siti Web!) ed è in circolazione da un po' (dal 2003). WordPress è basato su PHP, un linguaggio di programmazione lato server progettato per integrarsi facilmente con MySQL.

    WordPress utilizza database SQL per archiviare praticamente tutto, dai commenti ai post, agli account, alle informazioni sull'e-commerce. La stragrande maggioranza dei tentativi di SQL injection di WordPress avviene su moduli che inviano dati a uno script PHP contenente la query SQL che l'attaccante desidera sfruttare.

    Questo non è un difetto di progettazione, ma piuttosto un effetto collaterale del modo in cui WordPress è stato progettato. Ricorda, praticamente tutto ciò che è iniziato prima e fino all'"era del punto com" non è stato progettato pensando alla sicurezza. In effetti, la rivista web Phrack , ormai fuori produzione, è stata la prima fonte pubblica a discutere SQLi nel numero di dicembre 1998.

    Sebbene gli exploit iniziali di SQLi non funzionino quasi mai su un CMS moderno come WordPress, gli aggressori sono diventati furbi nel corso degli anni. Daremo un'occhiata a un semplice esempio di come potrebbe apparire SQLi su un sito Web completamente non protetto. Quindi, ti mostreremo come esaminare gli exploit esistenti per varie versioni di WordPress.

    Avvertenze importanti relative alle SQL injection

    In quasi tutti i paesi e gli stati sviluppati, anche il tentativo di sfruttare un sito WordPress di cui non si è proprietari è illegale. Le sanzioni possono essere piuttosto severe e in alcuni casi portare anche alla reclusione! Anche se sei libero di provare i nostri esempi sul tuo hardware , non tentare mai di farlo senza un'esplicita autorizzazione su altri siti.

    Prima di continuare, c'è un'altra nota importante che vogliamo chiarire per aiutarti a rimanere in linea con il tuo viaggio congiunto di WordPress e sicurezza informatica!

    Mantenere la tua versione di WordPress aggiornata è una delle migliori difese contro gli exploit SQLi. Anche se ciò significa interrompere temporaneamente alcuni plug-in, ne vale la pena per la sicurezza del tuo sito.

    Esempio di iniezione SQL

    Ora che abbiamo tolto di mezzo questi disclaimer, diamo un'occhiata agli esempi SQLi. Per capirli, avrai bisogno di conoscere un po' di gergo SQL. SQL utilizza comandi come SELECT per acquisire dati, DROP TABLE per distruggere completamente una tabella all'interno di un database, DELETE per rimuovere righe da una tabella e altro ancora. Inoltre, il carattere '*' significa "tutto" in SQL.

    La query più elementare in SQL è: SELECT * FROM TABLE_NAME. Questo dice essenzialmente di stampare tutti i dati da una tabella denominata "TABLE_NAME". Quando invii dati in un modulo di accesso, questo viene eseguito tramite uno script PHP che abbina le tue credenziali a una tabella di utenti. Nel nostro esempio, supponiamo di essere molto scarsi nella sicurezza informatica e di avere una tabella di testo in chiaro completamente non crittografata con colonne chiamate USER e PASS.

    Preparazione della domanda

    Nel nostro database molto mal protetto, la nostra tabella con nomi utente e password si chiama BADLY_DONE_TABLE. La query per autenticare un utente che effettua l'accesso è semplicemente: SELECT * FROM BADLY_DONE_TABLE WHERE USER = '[nome utente dal modulo]' AND PASS = '[password dal modulo]'.

    Come puoi vedere, stiamo dicendo di prendere la "lista" di utenti, che dovrebbe essere solo uno, se il nome utente e la password inseriti nel modulo corrispondono. SQL consente inoltre di utilizzare la parola chiave OR in istruzioni condizionali, come l'AND che vedi nella nostra query.

    Ora è il momento di creare il nostro exploit.

    Sfruttare la nostra query SQL non protetta

    La nostra query è impostata per restituire l'utente se il nostro nome utente e password corrispondono. Tenendo presente che una singola virgoletta finirà una stringa, possiamo digitare "Blahblahblah" come nome utente e quindi ' OR '1'='1.

    Stiamo sfruttando il fatto che la nostra query è formata dinamicamente e l'input non viene "ripulito" prima di essere eseguito. In sostanza, stiamo dicendo che se il numero '1' è uguale al numero '1' (sorprendentemente, lo fa!), Quindi scarica tutto dalla tabella, indipendentemente dal fatto che le credenziali che abbiamo inserito siano corrette.

    Nel 1998 avrebbe funzionato. Ora, in genere ci vuole molta più abilità sia in SQL che in SQLi per creare exploit funzionanti per WordPress.

    Iniezioni SQL e siti Web WordPress

    Il nostro esempio precedente non funzionerebbe sui moderni siti WordPress a meno che un amministratore del sito non abbia fatto di tutto per disabilitare tutte le misure di sicurezza. Tuttavia, utilizzando gli stessi principi, gli hacker continuano a creare e vendere exploit SQLi ad altri utenti malintenzionati.

    Poiché WordPress è open source e ha una vasta comunità di sviluppo alle spalle, molti ricercatori sulla sicurezza trovano spesso questi exploit prima che lo faccia un hacker. Quindi li segnalano al team di WordPress e l'exploit viene corretto. In alcuni sfortunati casi, un hacker individua prima l'exploit, rendendolo "in the wild", costringendo il team di WordPress a fare una soluzione rapida il prima possibile e rilasciarlo come aggiornamento.

    Se sei interessato a vedere gli exploit di injection attuali e precedenti per WordPress, puoi controllare un database CVE. Contiene un indice delle minacce alla sicurezza con il nome del prodotto, le versioni interessate e una descrizione generale del funzionamento dell'exploit. Praticamente tutti gli exploit che troverai in elenchi come questi sono già corretti, ma sono ottimi da usare come materiale didattico.

    Prevenzione dell'iniezione SQL

    Dopo aver letto questo, probabilmente ti starai chiedendo come assicurarti che il tuo sito WordPress non diventi la prossima vittima di un attacco SQLi. La buona notizia è che non è necessario essere un professionista della sicurezza per proteggersi dagli attacchi SQLi!

    • Fai molta attenzione a qualsiasi file PHP che scrivi o ottieni da altri siti e installi (in particolare, plug-in di WordPress). Tutto ciò che serve è uno script PHP di scarsa qualità che non disinfetta l'input dell'utente per rovinare il tuo sito WordPress.
    • Utilizza un noto plug-in di monitoraggio della sicurezza come iThemes Security Pro per avvisarti nel caso in cui qualcuno stia tentando di commettere questo attacco contro il tuo sito in modo da poterlo bloccare in anticipo.
    • Ancora più importante, dovresti sempre mantenere il tuo sito WordPress aggiornato all'ultima versione. Molti proprietari di siti trattengono l'aggiornamento per un motivo o per l'altro, e questo è il motivo della stragrande maggioranza delle violazioni dei dati.
    • Mantieni aggiornati i plugin e i temi di WordPress. Non possiamo dirlo abbastanza. I temi e i plugin vulnerabili sono la ragione principale per cui i siti WordPress vengono violati.
    Ricevi il rapporto settimanale sulle vulnerabilità di WordPress direttamente nella tua casella di posta.
    Iscriviti ora

    5 passaggi per prevenire le iniezioni SQL di WordPress

    1. Scarica e installa il plug-in iThemes Security Pro

    Per iniziare a proteggere e proteggere il tuo sito, scarica e installa il plug-in iThemes Security Pro.

    Ottieni iThemes Security Pro ora

    2. Attiva la gestione delle versioni per mantenere aggiornati WordPress Core, plugin e temi

    In poche parole: ti esponi al rischio di un attacco se utilizzi versioni obsolete di WordPress, plugin e temi sul tuo sito web. Gli aggiornamenti della versione spesso includono patch per problemi di sicurezza nel codice, incluse le iniezioni SQL e le vulnerabilità dell'esecuzione di codice remoto (RCE), quindi è importante eseguire sempre l'ultima versione di tutto il software installato sul tuo sito Web WordPress.

    Gli aggiornamenti verranno visualizzati nella dashboard di WordPress non appena saranno disponibili. Fai pratica per eseguire un backup e quindi eseguire tutti gli aggiornamenti disponibili ogni volta che accedi al tuo sito WordPress. Sebbene il compito di eseguire gli aggiornamenti possa sembrare scomodo o faticoso, è un'importante best practice per la sicurezza di WordPress.

    aggiornamenti del plugin per wordpress

    È difficile tenere traccia di ogni vulnerabilità di WordPress divulgata: teniamo traccia e le condividiamo nelle nostre raccolte di vulnerabilità di WordPress e confrontiamo tale elenco con le versioni di plugin e temi che hai installato sul tuo sito web. Tuttavia, questo non impedisce agli hacker di WordPress di prendere di mira plugin e temi con vulnerabilità note. Avere software con vulnerabilità note installato sul tuo sito offre agli hacker i progetti di cui hanno bisogno per prendere il controllo del tuo sito web.

    Ottieni il rapporto settimanale sulle vulnerabilità di WordPress
    Iscriviti ora

    La funzione Gestione versione nel plug-in iThemes Security Pro ti consente di aggiornare automaticamente WordPress, plug-in e temi. Oltre a ciò, Gestione versioni ha anche opzioni per rafforzare il tuo sito Web quando esegui software obsoleto e scansiona vecchi siti Web.

    Per iniziare a utilizzare Gestione versioni, abilita il modulo nella pagina principale delle impostazioni di sicurezza.

    Ora fai clic sul pulsante Configura impostazioni per dare un'occhiata più da vicino alle impostazioni, tutte progettate per proteggere il tuo sito.

    • Aggiornamenti WordPress : installa automaticamente l'ultima versione di WordPress.
    • Aggiornamenti plug-in : installa automaticamente gli ultimi aggiornamenti plug-in. L'abilitazione di questa impostazione disabiliterà la funzione dei plugin di aggiornamento automatico di WordPress per evitare conflitti.
    • Aggiornamenti del tema : installa automaticamente gli ultimi aggiornamenti del tema. L'abilitazione di questa impostazione disabiliterà la funzione di aggiornamento automatico del tema di WordPress per evitare conflitti.
    • Rafforza il sito durante l'esecuzione di software obsoleto : aggiungi automaticamente protezioni extra al sito quando un aggiornamento disponibile non è stato installato per un mese.
    • Scansione di vecchi siti WordPress : esegui una scansione giornaliera dell'account di hosting per i vecchi siti WordPress che potrebbero consentire a un utente malintenzionato di compromettere il server. Un singolo sito WordPress obsoleto con una vulnerabilità potrebbe consentire agli aggressori di compromettere tutti gli altri siti sullo stesso account di hosting.
    • Aggiornamento automatico se corregge la vulnerabilità : questa opzione funziona in tandem con iThemes Security Pro Site Scan per controllare il tuo sito Web per le vulnerabilità note di WordPress, plugin e temi e applicare una patch quando è disponibile.

    3. Scansiona il tuo sito per plugin e temi vulnerabili

    L'iThemes Security Pro Site Scanner è un altro modo per proteggere e proteggere il tuo sito Web WordPress dalla causa numero uno di tutti gli hack del software: plug-in obsoleti e temi con vulnerabilità note. Site Scanner verifica la presenza di vulnerabilità note sul tuo sito e applica automaticamente una patch, se disponibile.

    I 3 tipi di vulnerabilità di WordPress verificate

    1. Vulnerabilità di WordPress
    2. Vulnerabilità dei plugin
    3. Vulnerabilità del tema

    Per abilitare la scansione del sito su nuove installazioni, vai alle impostazioni di iThemes Security Pro e fai clic sul pulsante Abilita nel modulo delle impostazioni della scansione del sito .

    Per attivare una scansione manuale del sito, fare clic sul pulsante Scansiona ora sul widget Scansione sito situato nella barra laterale destra delle impostazioni di sicurezza.

    I risultati della scansione del sito verranno visualizzati nel widget.

    Se la scansione del sito rileva una vulnerabilità, fare clic sul collegamento della vulnerabilità per visualizzare la pagina dei dettagli.

    Nella pagina della vulnerabilità di Site Scan, vedrai se è disponibile una correzione per la vulnerabilità. Se è disponibile una patch, puoi fare clic sul pulsante Aggiorna plug-in per applicare la correzione sul tuo sito web.

    Potrebbe esserci un ritardo tra la disponibilità di una patch e l'aggiornamento del database delle vulnerabilità della sicurezza di iThemes per riflettere la correzione. In questo caso, puoi disattivare la notifica per non ricevere più avvisi relativi alla vulnerabilità.

    Importante: non dovresti disattivare l'audio di una notifica di vulnerabilità finché non hai confermato che la tua versione corrente include una correzione di sicurezza o la vulnerabilità non interessa il tuo sito.

    4. Attiva il rilevamento delle modifiche ai file

    La chiave per individuare rapidamente una violazione della sicurezza è monitorare le modifiche ai file sul tuo sito web. La funzione di rilevamento delle modifiche ai file in iThemes Security Pro eseguirà la scansione dei file del tuo sito Web e ti avviserà quando si verificano modifiche sul tuo sito Web.

    Esistono diversi motivi legittimi per cui vedresti una nuova attività di modifica dei file nei tuoi registri, ma se le modifiche apportate erano impreviste, dovresti prenderti il ​​tempo necessario per assicurarti che le modifiche non siano dannose. Ad esempio, se vedi una modifica apportata a un plug-in nella stessa data e ora in cui hai aggiornato il plug-in, non ci sarebbe motivo di indagare

    Per iniziare a monitorare le modifiche ai file, abilitare Rilevamento modifiche file nella pagina principale delle impostazioni di sicurezza.

    Una volta abilitato il rilevamento delle modifiche ai file, iThemes Security Pro inizierà la scansione di tutti i file del tuo sito Web in blocchi . La scansione dei file in blocchi aiuterà a ridurre le risorse necessarie per monitorare le modifiche ai file.

    La scansione iniziale della modifica dei file creerà un indice dei file del tuo sito Web e dei relativi hash dei file. Un hash di file è una versione abbreviata e non leggibile del contenuto del file.

    Al termine della scansione iniziale, iThemes Security Pro continuerà a scansionare il file in blocchi. Se l'hash di un file cambia in una delle scansioni successive, significa che il contenuto del file è cambiato.

    Puoi anche eseguire una modifica manuale dei file facendo clic sul pulsante Scansiona file ora nelle impostazioni Rilevamento modifica file

    Le modifiche ai file si verificano continuamente e ricevere un avviso e-mail per ogni modifica diventerebbe rapidamente opprimente. E prima che tu te ne accorga, diventa un ragazzo che ha pianto la situazione del lupo e inizi a ignorare del tutto gli avvisi di modifica del file.

    La buona notizia è che iThemes Security Pro identifica in modo intelligente le modifiche legittime per ridurre le notifiche e come disattivare le notifiche per i file che dovrebbero essere aggiornati frequentemente. Puoi gestire tutte le notifiche di iThemes Security dal Centro notifiche all'interno del plug-in iThemes Security. Dal pannello di amministrazione di WordPress, vai su Sicurezza > Impostazioni e individua il modulo Centro notifiche .

    5. Attiva l'autenticazione a due fattori per gli utenti che apportano modifiche al sito web

    L'autenticazione a due fattori è un processo di verifica dell'identità di una persona che richiede due metodi di verifica separati. Google ha condiviso sul suo blog che l'utilizzo dell'autenticazione a due fattori può bloccare il 100% degli attacchi bot automatizzati. Non sono cattive probabilità!

    Il plug-in iThemes Security ti consente di attivare l'autenticazione a due fattori per il tuo sito WordPress in modo che gli utenti debbano inserire un codice secondario per accedere.

    I tre metodi di autenticazione a due fattori forniti da iThemes Security Pro includono:

    1. App mobile: il metodo dell'app mobile è il metodo più sicuro di autenticazione a due fattori fornito da iThemes Security Pro. Questo metodo richiede l'utilizzo di un'app mobile gratuita a due fattori come Authy o Google Authenticator.
    2. E -mail: il metodo e-mail di due fattori invierà codici sensibili al tempo all'indirizzo e-mail dell'utente.
    3. Codici di backup : una serie di codici monouso che possono essere utilizzati per accedere in caso di perdita del metodo a due fattori principale.

    Per iniziare a utilizzare l'autenticazione a due fattori sul tuo sito web, abilita la funzione nella pagina principale delle impostazioni di iThemes Security Pro.

    Segui i passaggi qui per continuare a configurare l'autenticazione a due fattori per il tuo sito WordPress. Se hai seguito i nostri consigli e hai abilitato i requisiti di forza per gli utenti privilegiati, la prossima cosa che vedrai è il punto in cui inserire il token a due fattori.

    autenticazione a due fattori

    Conclusioni: verso un Web più sicuro, insieme

    Non preoccuparti se ti senti un po' sopraffatto quando scopri tutte le potenziali minacce alla sicurezza che stanno cercando il tuo sito WordPress. La verità è che le minacce sono tante, ma le soluzioni possono essere semplici.

    Speriamo che questa guida ti abbia aiutato a comprendere il rischio di attacchi SQL injection sul tuo sito WordPress. Implementando alcune best practice per la sicurezza di WordPress, insieme ai 5 passaggi precedenti, avrai una migliore linea di difesa.

    Ottieni il contenuto bonus: una guida alla sicurezza di WordPress
    Clicca qui
    SQL Injection