Domanda:
In che modo un utente malintenzionato ottiene l'accesso alle password con hash?
JimmyJames
2016-08-23 19:30:08 UTC
view on stackexchange narkive permalink

Il modo in cui codifichiamo le password e la forza della password è importante perché se qualcuno ha accesso alle password con hash, è possibile provare tantissime password in un lasso di tempo sorprendentemente breve e decifrare qualsiasi cosa sia debole.

La domanda che mi pongo è come è possibile che l'attaccante abbia accesso alle password con hash in primo luogo. Se hanno accesso al file / etc / shadow, ad esempio, non è già game over? È semplicemente una cattiva impostazione delle autorizzazioni? Backup? Altri errori? È che una volta che un sistema viene compromesso, la password da lì viene utilizzata per tentare di entrare in altri sistemi?

Immagino che alla fine la mia domanda si riduca all'implicazione che ricevo dalla lettura di questo argomento che è inevitabile che l'attaccante avrà accesso agli hash. Come accade in pratica?

Noterai anche che molto spesso non sono le password del sistema operativo (`/ etc / shadow`) che vengono trapelate, ma le password per un'app / servizio basato sul Web.Questi sono normalmente archiviati in un database e quindi vulnerabili alle violazioni del database.
Alcuni protocolli (ad esempio NTLM, WPA2-PSK) inviano hash delle password sulla rete
@paj28 riguardo a NTLM, questa è la stessa cosa che consente [pass-the-hash] (https://dfir-blog.com/2015/11/08/protecting-windows-networks-defeating-pass-the-hash /) giusto?
* Non * è inevitabile, ma non importa.Una buona progettazione della sicurezza * presuppone * che ogni altra difesa sia caduta e mira a trovare modi per salvare ancora la risorsa protetta.Allora perché desideriamo che gli algoritmi di hashing siano resistenti agli attacchi?Perché * per ipotesi *, quell'algoritmo è l'ultimo uomo in piedi nella difesa della risorsa protetta.
Una cosa importante da ricordare che anche se molti dei problemi che rivelano gli hash delle password potrebbero significare "game over" per il server che è stato violato, non è necessariamente quello il valore.Il server che è stato violato potrebbe essere quasi inutile per l'hacker, ma se quegli hash possono essere violati (o se erano testo in chiaro, ecc.), Il riutilizzo della password significa che l'hacker potrebbe avere accesso ad account di posta elettronica, conti bancari, ecc.
@EricLippert Il tuo punto è stato preso, ma voglio solo chiarire che non sto mettendo in dubbio la necessità di avere un hash forte.Sto solo cercando di capire meglio i meccanismi di tali attacchi poiché la maggior parte della letteratura sull'argomento sembra iniziare con gli hash in mano.Le risposte sono utili mentre cerco di spiegare perché le password sono problematiche.
Di solito non lo fanno.* Se in qualche modo lo fanno *, la forza dell'hashing può ancora salvarti.
@JimmyJames - È sicuramente correlato, sebbene ci siano due problemi separati: 1) Gli hash trasmessi sulla rete sono vulnerabili allo sniffing e alla focalizzazione bruta 2) gli hash catturati sui sistemi live possono essere utilizzati direttamente, senza bisogno di forzare la password
Per fare un confronto, penso che il sistema di accesso MySQL (senza ssl) sia vulnerabile a 1, ma non a 2.
L'accesso a / etc / shadow potrebbe non essere terminato.Potresti essere in grado di sfruttare una vulnerabilità di divulgazione di file in un server Web in esecuzione come root (cosa che non dovrebbe, ma comunque).Come procedereste se poteste leggere qualsiasi file, ma non di più?A meno che l'amministratore non abbia commesso più errori, l'unica scommessa è quella di decifrare la password in / etc / shadow e sperare che SSH con autenticazione della password o simili sia persino disponibile al pubblico.Ecco perché è importante scegliere una password sicura, limitare la quantità di servizi offerti dal tuo host e disabilitare l'autenticazione basata su password.
Se l'accesso in lettura a `/ etc / shadow` significava" game over ", non ci sarebbe motivo di memorizzare in esso solo le password con hash in primo luogo.
@HagenvonEitzen: E anche se, se avessi in qualche modo i permessi come utente sql, proverei prima (nel caso le mie intuizioni stiano causando danni) `SELECT * FROM pw;` e simili.ma questo non mi dà affatto accesso a "/ etc / shadow".
Cinque risposte:
Anders
2016-08-23 19:40:25 UTC
view on stackexchange narkive permalink

Esistono diversi modi:

  • SQL injection
  • Backup trapelati
  • Dipendenti scontenti che li perdono
  • Qualsiasi tipo di violazione del server che consente l'esecuzione del codice.

Come puoi vedere, ci sono molti, molti modi in cui ciò potrebbe accadere - come phihag menziona nei commenti, altro più della metà della OWASP top 10 potrebbe portare a hash trapelati, quindi non possono essere facilmente tabulati in un post.

Ciò non significa che sia inevitabile che gli hacker ottengano il hash, ma dovresti comunque utilizzare un buon algoritmo di hashing per proteggere te stesso e i tuoi utenti per ogni evenienza. Poiché un backup potrebbe essere perso o il tuo server potrebbe essere violato senza che tu te ne accorga, avere password con hash corretto dovrebbe essere l'unica cosa che ti consente di dormire la notte. Questa strategia è nota come "difesa in profondità" o semplicemente "pianifica il peggio".

Non intendo suggerire che non sia importante, a volte sembra che ci sia questo atteggiamento fatalistico intorno a questo.Trovo molte informazioni sul cracking delle password ma non molto su come prevenire la fuoriuscita degli hash.
@JimmyJames Il motivo per cui non trovi alcuna informazione specifica su come prevenire la perdita di password è che praticamente * ogni * vulnerabilità lato server lo consente.Tra le [OWASP Top 10 vulnerability classes] (https://www.owasp.org/index.php/Top_10_2013-Top_10), le classi 1, 2, 4, 5, 6 e 9 potrebbero perdere hash delle password.In altre parole, più della * metà di ** tutti gli ** sforzi di sicurezza * contrastano la divulgazione dell'hash delle password in un modo o nell'altro.
I commenti non sono per discussioni estese;questa conversazione è stata [spostata in chat] (http://chat.stackexchange.com/rooms/44500/discussion-on-answer-by-anders-how-does-an-attacker-get-access-to-hashed-passwor).
Mark Buffalo
2016-08-23 19:39:37 UTC
view on stackexchange narkive permalink

Esistono molti metodi. Eccone alcuni a cui riesco a pensare in cima alla mia testa. Ora potrei sbagliarmi un po 'con la sintassi perché non mi sono preso la briga di provarla in questo momento, ma in generale, queste sono cose che faresti per ottenere quei dati.

Nota che , con i seguenti exploit, non fornisco necessariamente esempi che rubano hash (ad eccezione di SQLi), ma esempi di come possono funzionare gli exploit. L'autore dell'attacco utilizzerebbe gli exploit seguenti per compromettere ulteriormente un sistema.

  1. SQL injection

    Esempio:
    a OPPURE 1 = 1 '; exec sp_msforeachtable "SELECT * FROM?"; -

    Puoi anche utilizzare sp_msforeachdb , in questo modo:

    a ' ; exec sp_msforeachdb 'USE?; exec sp_msforeachTable "SELECT * FROM!", "!"'; -

    Il - è lì per commentare parti di l'istruzione SQL che potrebbe interferire con la tua iniezione. Questi sono solo esempi molto semplici. Dipende davvero dal formato della query.

  2. OS Injection . ; cat / etc / passwd; rm -rf / *
  3. Iniezione LDAP . * , (cn = *) (| (password = *))
  4. Riferimento a oggetti diretti non sicuri che portano a Local / Vulnerabilità dell'inclusione di file remoti .

    / etc / passwd% 00 (nota: le password, ovviamente, non vengono memorizzate qui; trovare nomi utente validi quando le persone riutilizzano le password è la chiave qui, o usare i nomi utente per aiutare nell'escalation dei privilegi)

    % 00 è un "terminatore nullo" usato per evitare che succeda qualcosa, quindi non cerchi di includere qualcosa che non esistono, ad esempio: /etc/passwd.txt . Potrebbe anche essere \ 000 , \ x00 , \ z , \ u0000 , \ 0 o \ 00 a seconda della lingua che stai utilizzando.

  5. Attacco di uno sviluppatore / utente con accesso ai database.
  6. Sfruttare il server del database o il server web con altri mezzi.
Quindi, in poche parole, una o più vulnerabilità vengono utilizzate per ottenere l'accesso indirettamente.OK sembra ovvio ora che lo metti così.
Abbastanza.Tutti sono comunque relativamente facili da sfruttare.
I sistemi moderni non avranno password in / etc / passwd, sono in / etc / shadow.
@MikeP Hai ragione.Questo è solo un esempio.
perché il cracking di una password dovrebbe essere una delle principali preoccupazioni?Se hanno accesso al database, sicuramente non hanno bisogno di una password per accedere ad altre informazioni preziose: potrebbero semplicemente visualizzarle e probabilmente sarebbero in testo normale
Non sono sicuro di seguirti.La password non verrà memorizzata come testo normale se è eseguita correttamente, anche se tutto il resto è sbagliato.È una delle principali preoccupazioni perché le persone riutilizzano le password e potrebbe consentire loro di accedere ad altri siti Web utilizzando la stessa combinazione nome utente / password.
@binnyb, ottenere l'indirizzo e-mail e la password di un utente non compromette solo l'unico sistema.A causa del riutilizzo della password, può compromettere molti sistemi.Per maggiori informazioni: http://krebsonsecurity.com/2013/06/the-value-of-a-hacked-email-account/
@MikeP Avrei dovuto chiarire: `/ etc / passwd` ti permette di trovare nomi utente, che possono essere usati per accedere o aumentare i privilegi.È una piccola parte del processo, ma fondamentale.Quando gli utenti riutilizzano le password su più sistemi, potrebbe essere necessario trovare un nome utente valido se si dispone di password valide.LFI / RFI può essere utilizzato anche per ottenere l'esecuzione del codice, che potrebbe fornire credenziali DB, credenziali AWS, ecc.
MikeP
2016-08-23 22:29:10 UTC
view on stackexchange narkive permalink

Un'aggiunta a Mark Buffalo:
7. Attacco Man-in-the-Middle. Guardare il traffico non crittografato può spesso rivelare un hash della password. In uno scenario pass-the-hash, i sistemi si fideranno dell'hash e della password e consentiranno a un utente malintenzionato di copiare semplicemente l'hash senza decifrarlo.

Quale connessione stai intercettando qui?
OP chiede solo i casi in cui l'aggressore ottiene l'accesso a molti hash.
@Bergi Anche questa risposta è rilevante.
@Bergi, OP non indica "lotti".Tuttavia, se qualcuno ha accesso a un modo per attaccare MitM, può ottenerne "molti".
Sì, se puoi ascoltare il traffico non crittografato tra il database e il server delle applicazioni che potrebbe rivelare alcuni hash, è quello che volevo che chiarissi.Ma penso che uno scenario pass-the-hash in cui puoi controllare gli hash essendo un mitm non è rilevante per la domanda.
Cort Ammon
2016-08-24 02:45:42 UTC
view on stackexchange narkive permalink

L'unico computer veramente sicuro è quello isolato da Internet, spento, scollegato, sepolto in un bunker a 100 piedi sotto terra, con guardie armate all'unico ingresso. Anche in questo caso, lo controllavo di tanto in tanto.

L'hash delle password fa parte di ciò che è noto come "sicurezza in profondità". Hai ragione sul fatto che, in un mondo ideale, non commetteresti errori che darebbero agli aggressori l'accesso a quei dati, quindi in teoria non avrebbe importanza se fossero password o hash in chiaro. In un mondo reale, le intrusioni si verificano ed è notevolmente difficile prevedere come e dove si verificheranno. L'idea alla base della sicurezza in profondità è di fare in modo che, in teoria, anche se un utente malintenzionato compromette il tuo sistema in qualche modo, ti sei adoperato per mitigare il danno.

Nel mondo reale, c'è una necessità naturale di accedere agli hash su base regolare. Ogni volta che un utente effettua il login, è necessaria la possibilità di accedervi. Di conseguenza, sono quasi sempre accessibili a qualunque applicazione stia effettuando l'autenticazione. Se qualcuno compromette la tua applicazione, potrebbe essere in grado di leggere dati che non avrebbe dovuto essere in grado di leggere.

I modi in cui si verificano questi attacchi sono infiniti. Puoi avere attacchi SQL injection se non sei riuscito a disinfettare i tuoi input. Potresti avere un buffer overrun, dando all'aggressore la possibilità di eseguire il proprio codice. Potresti avere un errore di autorizzazione, rendendo accidentalmente un file leggibile dalle persone quando non dovresti. L'aggressore potrebbe mettere le mani su uno dei tuoi nastri di backup a causa di una cattiva gestione da parte del tuo servizio di backup!

Tutti questi attacchi danno a un utente malintenzionato un punto d'appoggio sul tuo computer, ma non sempre si traducono in un'interruzione completa. Potresti aver effettuato il chroot del tuo server SQL, in modo che il processo del server SQL non possa letteralmente vedere l'intero resto del computer. Tuttavia, in tali situazioni, le informazioni di accesso necessarie agli utenti devono essere alla portata del server SQL o non hanno alcun valore. Pertanto, le informazioni di accesso vengono tipicamente compromesse prima che si verifichino altre compromissioni più nefaste.

Hashing delle password, diminuisce il loro valore. Un hash non è utile ai fini del login. Devono avere la password con hash a quel valore. Possono o non possono essere in grado di permettersi il costo di rompere l'hash. Nel migliore dei mondi, non hai mai dovuto preoccuparti di questo in primo luogo, ma se ti iscrivi all'approccio security in profondità, ti assicuri che anche un'intrusione riuscita non comprometta tutti i tuoi dati.

Salerai anche l'hash, in modo che 2 stesse password non finiscano con lo stesso hash.In questo modo gli hacker non possono semplicemente creare un enorme database di hash per i passord.
"Lo controllavo ogni tanto" - e questa è probabilmente la tua rovina.Qualunque sia la procedura che metti in atto per farti entrare e controllarla, c'è la tua opportunità di rovinare qualcosa e consentire a un aggressore di entrare.
@SteveJessop Vero, il modo migliore per proteggere un computer è sempre stato quello di eseguirlo attraverso un cippatore e poi dare fuoco ai resti =)
@CortAmmon Anche se non sono in disaccordo con il punto che la tua paranoia è importante per proteggere i sistemi, penso che questa linea di ragionamento sia spesso usata impropriamente come scusa per non provarci.Percepisco un'illusione popolare secondo cui irrompere in un sistema è come entrare in una cassaforte.Avendo tempo, impegno e attrezzature sufficienti, puoi entrare. La realtà è che la maggior parte delle vulnerabilità sono integrate nei sistemi a causa della pigrizia e dell'ignoranza.Quando le persone falliscono scrivendo codice vulnerabile o non utilizzando buone pratiche, spesso si sente parlare di "impossibilità" di proteggere i sistemi.
@JimmyJames In realtà ho visto anche l'effetto opposto.Ho visto persone che credono che, poiché hanno fatto tutto il possibile per proteggere un sistema, e credono che un sistema possa effettivamente essere sicuro, questi due presupposti insieme "dimostrano" che il loro sistema è sicuro.Quindi diventano pigri e non usano la sicurezza in profondità.Solo quando ammetti che il tuo sistema è insicuro, la sicurezza in profondità ha senso.Ho anche visto una marcia inesorabile verso l'usabilità "perfettamente sicura" contro le rocce.Trovo che entrambi questi casi siano problematici quanto quello che hai sollevato.
@CortAmmon Buoni punti.Se potessi coniare una frase attorno a questo, la farei qualcosa del tipo "presumi di avere vulnerabilità e ti sforzi continuamente di eliminarle tutte".
@JimmyJames Mi piace quel fraseggio.Mi ricorda la famosa frase "I piani sono inutili, ma la pianificazione è indispensabile".
Un computer non alimentato può avere una buona riservatezza, ma integrità e disponibilità potrebbero mancare un po '...
rackandboneman
2016-08-24 14:53:13 UTC
view on stackexchange narkive permalink

Alcune installazioni di rete un * x / linux della vecchia scuola useranno ancora il servizio NIS / YP per l'autenticazione gestita centralmente. NIS pubblica efficacemente le password con hash sulla rete per ogni workstation contro cui autenticare gli utenti.

E, nei tempi antichi, le password salate erano conservate in `/ etc / password` leggibili da tutti.
Che è ancora un'opzione disponibile al momento dell'installazione con alcune moderne distribuzioni Linux.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...