Domanda:
Restituendo di proposito il codice di risposta HTTP sbagliato?
Miles Luders
2017-02-09 00:25:06 UTC
view on stackexchange narkive permalink

Sto scrivendo una semplice API REST e desidero limitare l'accesso solo al mio client mobile. In altre parole, sto cercando di impedire a un utente malintenzionato, ad es. utilizzando curl per effettuare una richiesta POST non autorizzata.

Ovviamente, questo è impossibile. Tuttavia, ci sono alcune contromisure che rendono difficile il successo di un hacker. In questo momento, sto crittografando tutte le richieste con una chiave privata, archiviata sul lato client (ovviamente, questo non è l'ideale, ma si spera che la difficoltà nel decodificare un'app iOS scoraggerà tutti tranne gli hacker più determinati).

Una semplice idea che ho avuto è stata quella di restituire il codice di risposta HTTP sbagliato per una richiesta non autorizzata. Invece di restituire un "401 Non autorizzato", perché non restituire, ad es. "305 Use Proxy", cioè volutamente confuso. Qualcuno ha mai pensato di farlo?

Si chiama "sicurezza per oscurità".Può rallentare qualcuno, ma questo è tutto.
Per quel che vale, ho letto da qualche parte in un documento ufficiale su HTTP (scusa, non ricordo la fonte), che è consentito restituire 404 invece di 401 in modo da non far trapelare informazioni sull'esistenza delle risorse a client non autorizzati.
I commenti non sono per discussioni estese;questa conversazione è stata [spostata nella chat] (http://chat.stackexchange.com/rooms/53456/discussion-on-question-by-mpl-returning-the-wrong-http-response-code-on-purpose).
Se non stai restituendo i codici di stato HTTP corretti, si potrebbe dire che in senso stretto, non stai parlando HTTP.Quindi, una volta che sei andato così lontano, potresti semplicemente implementare un tuo protocollo completamente diverso ...
@Pascal questo è l'approccio adottato da GitHub (almeno) quando si tenta di accedere a un repository privato quando non è autenticato o non autorizzato.
@Pascal Stai pensando di utilizzare 404 al posto di 403. [Lo standard HTTP] (https://tools.ietf.org/html/rfc7231#section-6.5.3) lo consente esplicitamente per evitare di rivelare l'esistenza di una risorsaa un utente a cui non è consentito accedervi.Puoi evitare che un 401 trapeli informazioni sull'esistenza se lo richiedi per * tutte * le posizioni che corrispondono allo schema di altre posizioni che richiedono l'autenticazione.(Spero che ripubblicare questo commento vada bene; penso che questa sia un'informazione importante.)
Undici risposte:
tim
2017-02-09 00:47:01 UTC
view on stackexchange narkive permalink

Qualcuno ha mai pensato di farlo?

Sì, in realtà si è parlato esattamente di questo al defcon 21 ( video, diapositive).

La loro conclusione è stata che lavorare con i codici di risposta come sicurezza offensiva a volte può comportare un grave rallentamento degli scanner automatici, degli scanner non funzionanti e un'enorme quantità di falsi positivi o falsi negativi (ovviamente farà poco o niente per le scansioni manuali).

Sebbene la sicurezza per oscurità non dovrebbe mai essere la tua unica difesa, può essere utile come difesa in profondità (un altro esempio: si consiglia di non trasmette i numeri di versione di tutti i componenti utilizzati).

D'altra parte, un'API REST dovrebbe essere il più pulita possibile e rispondere con codici HTTP intenzionalmente errati può creare confusione per sviluppatori e client legittimi (questo è un po 'meno un problema per i browser, dove gli utenti in realtà non vedono i codici). Per questo motivo non lo consiglierei nel tuo caso, ma è comunque un'idea interessante.

Sebbene riconosca la legittimità della `` sicurezza dall'oscurità '' come barriera all'ingresso (ovvero eliminando gli script kiddies), penso che sia così ampiamente abusato che è gravemente dannoso per la sicurezza dell'applicazione effettiva.Dei due campi correlati - crittografia e sicurezza delle informazioni - uno si basa sull '"oscurità", mentre l'altro no.Per inciso, quello che ** fa ** viene picchiato più facilmente la maggior parte del tempo.Inoltre, l'oscurità si applica a tutte le parti (compresi i pentesteri che paghi) e introduce ulteriore complessità, ergo vettori di attacco.
@K.Steff * "la crittografia si basa sull'oscurità" *?Volevi scrivere "steganografia"?
@K.Steff Ogni governo che utilizza algoritmi crittografici classificati utilizza la "sicurezza per oscurità" nella crittografia.
+1 per la menzione degli sviluppatori.Quando apporto una modifica a un sistema e improvvisamente ottengo un 404 dove in precedenza avevo un 200, improvvisamente ho un gioco di whack-a-mole che identifica dove è stata presa la decisione di inviare una risposta diversa.Tutto quello che posso dire a OP è che se decidi di farlo, per favore, per favore documentalo correttamente o il tuo nome sarà fangoso in futuro
Penso che questa sia una risposta molto pratica.Mi fa arrabbiare quando qualcuno mette giù la sicurezza per oscurità perché ha letto che era brutto su un blog o qualcosa del genere.Nel mondo reale, può sicuramente essere utile.Non può essere l'unico trucco nella tua borsa, tutto qui.
@ypercubeᵀᴹ Ora che ho letto il mio commento, sembra che io stia dicendo che, mentre volevo dire l'esatto opposto - in crittografia, il principio di Kerckhoffs è essenzialmente l'opposto ideologico di "Sicurezza per oscurità".
Xiong Chiamiov
2017-02-09 00:34:55 UTC
view on stackexchange narkive permalink

In realtà non rallenterà un utente malintenzionato in misura apprezzabile, ma causerà fastidio a tutti gli sviluppatori futuri che lavorano sulla tua piattaforma. Potrebbe anche far sì che alcune caratteristiche interessanti delle tue librerie di richieste HTTP non siano così belle, poiché funzionano sulla base di informazioni errate.

Questa è una forma molto debole di sicurezza attraverso l'oscurità. Quando si progetta un sistema come questo, si dovrebbe pensare di rallentare un aggressore di centinaia di anni, non di decine di minuti, altrimenti si perde comunque.

Duro, ma giusto.Mi piace :) .Mette in prospettiva la natura della debolezza.
Questa domanda riguarda uno scenario in cui la sicurezza per oscurità è l'unica possibilità.Il tuo primo paragrafo è buono, ma il secondo è irrilevante.
@Nacht in che modo il secondo è irrilevante?È molto rilevante.Sta dicendo che se hai intenzione di usare la sicurezza attraverso l'oscurità, è meglio che sia un'oscurità dannatamente buona.Sta dicendo che questa particolare difesa non rallenterà affatto i sofisticati
@Cruncher, no, la sicurezza attraverso l'oscurità non rallenterà mai nessuno per centinaia di anni.Sta dicendo che hai bisogno di una sicurezza "adeguata", cosa impossibile con l'attuale design dell'OP.
@Nacht "la sicurezza per oscurità è l'unica possibilità", ovvero "nessuna sicurezza è l'unica possibilità" (avviso iperbole).Se non puoi proteggere un sistema e ne hai bisogno, non implementarlo.Lo stesso vale per i modelli di business, come gli annunci.
"Quando si progetta un sistema come questo, si dovrebbe pensare di rallentare un aggressore di centinaia di anni, non di decine di minuti, altrimenti si perde comunque". Contro un attaccante appassionato, determinato, abile?Sì.Ma per sconfiggere programmi di attacco automatizzati o aggressori umani che cercano solo gli obiettivi più facili e vulnerabili da sfruttare?No. Probabilmente andranno avanti.E questo, a sua volta, a sua volta ti fornirà spesso una migliore visibilità per individuare più minacce intenzionali mentre devono affrontare la sconfitta delle migliori misure di sicurezza "reali" che puoi implementare.
Penso che questo dipenda VERAMENTE da forti supposizioni sull'attaccante.Certamente non rallenterà un utente malintenzionato esperto che prende di mira specificamente il sito, ma può contrastare i tentativi di scansione automatizzata o rallentare gli aggressori che potrebbero finire confusi dal codice di risposta.Quindi non * necessariamente * aggiunge sicurezza, ma può migliorare le cose.La domanda è se vale il tempo per implementare qualcosa che potrebbe rallentare un aggressore meno determinato.
@mostltinformed OP ha menzionato specificamente un utente malintenzionato che utilizza curl o un altro metodo per effettuare richieste (non autorizzate).L'aggressore ha già decodificato l'app iOS per ottenere una chiave necessaria per eseguire l'attacco tra le altre cose.Non sarà fermato da un piccolo inconveniente riguardante i codici di ritorno.
J.A.K.
2017-02-09 00:45:45 UTC
view on stackexchange narkive permalink

Invece di restituire un "401 Non autorizzato", perché non restituire, ad es. "305 Use Proxy", cioè intenzionalmente confuso.

Sì, confonderà un attaccante. Ma per uno addestrato, potrebbe non durare più di due secondi netti. E i codici di stato non sono poi così utili, principalmente solo quando si forzano i nomi dei file.

Supponiamo che io abbia una chiave valida e posso osservare che restituisci codici di 200 intervalli per la mia autenticazione. Se cambio un po 'nella mia chiave, e per ogni richiesta restituisci 305s, penserò immediatamente "Hmm. Sembra che lo sviluppatore possa aver sbagliato". Se restituisci codici casuali, saprò che è stato apposta e li ignoro.

la difficoltà nel decodificare un'app iOS si spera scoraggerà tutti tranne gli hacker più determinati

Sì, ma dal momento che ne basta uno per pubblicarlo, di nuovo lo sta solo rallentando ..

Molto tempo fa ho scritto un codice che lancia un attacco a chiunque provi questo genere di cose.Ho finito per imparare che non è la più saggia delle idee.Molto più sensato potrebbe essere una cattiva richiesta -> IP bandito per 100 ore a livello di firewall.
Dan Landberg
2017-02-09 00:33:59 UTC
view on stackexchange narkive permalink

Questa è sicurezza attraverso l'oscurità, vale a dire che non fornisce molta sicurezza. La soluzione che stai suggerendo rallenterà solo un utente malintenzionato, non gli impedirà di utilizzare il proprio client. In effetti, il tuo metodo di crittografia delle richieste, a seconda della tua implementazione, potrebbe effettivamente rendere la tua applicazione meno sicura aprendo attacchi ad altre parti del sistema crittografico. Il tuo impegno sarebbe meglio spendere cercando di proteggere le funzioni API stesse (ad es. Test di penna e proteggerle da attacchi come l'iniezione SQL), piuttosto che tentare di impedire l'accesso a client non autorizzati.

Sono confuso però.Tutti dicono che OP ha bisogno di vera sicurezza e NESSUNO ha ancora menzionato come farlo.Il problema è che non vogliono che venga chiamato il punto finale a meno che non sia stato guardato un annuncio.Come ci riescono?
Questa è una domanda completamente diversa da quella originale e anche ancora difficile.Avresti bisogno di un meccanismo lato server per determinare se l'utente ha davvero guardato l'annuncio.Forse invii un token firmato digitalmente che include il timestamp quando è stata ricevuta la richiesta per l'annuncio e la durata dell'annuncio.Quindi, quel token dovrebbe essere inviato nuovamente e convalidato quando l'utente desidera richiedere l'endpoint protetto.Cercherei soluzioni DRM.Lanciarlo da solo senza esperienza di crittografia sarebbe difficile da fare in modo sicuro.
Evi1M4chine
2017-02-09 15:58:04 UTC
view on stackexchange narkive permalink

Ma l'utente STA già utilizzando il tuo protocollo.

Il tuo problema è che l'interfaccia del tuo server di ciò che l'utente può fare non è sicura!
Tu decidi quali dati inviare il tuo server a chi!
(Ciao, cari giornali online. Sì, ti sto guardando!)

Progettalo , supponendo che l'utente sia il client. Non il tuo codice. Perché lo è. Non dovrebbe importare quale client viene utilizzato.
La tua app viene eseguita su una CPU che è sotto il controllo hardware dell'utente. Il tuo codice è solo un elenco di comandi / dati e l'utente e la sua CPU possono elaborarlo come preferiscono. Compreso non elaborarlo.
Decide cosa fa la sua CPU. Non confondere la sua grazia di accettare il codice della tua app così com'è con un diritto all'esecuzione cieca. Sei tu quello di cui si fida qui e quella fiducia è molto fugace.
Soprattutto con tattiche squallide come questa.

In ogni caso: dai all'utente la chiave di crittografia e tutto il resto e ti aspetti che per non usarlo da solo, perché lo metti da qualche parte nel tuo cestino di codice. … Proprio come DRM, quello è olio di serpente e non può mai funzionare.
Basta una persona per trovare dove metti la chiave. (Sarei io, ad esempio.) Tutti gli altri devono solo cercarlo su Google.

Ma sono sorpreso che tu pensi solo a crittografare il protocollo contro l'utente, invece che per la sua protezione dagli attacchi man-in-the-middle.
Supponendo che il motivo per cui questo viene solitamente fatto (Sì, sto parlando di nuovo con te "industria dei contenuti".): Se il tuo utente è il tuo nemico, forse dovresti cercare un modello di business basato sull'equità e su un vantaggio per tutti, invece di derubare l'utente e dover affrontare il contraccolpo.

PS: ignora tutte le risposte "sicurezza attraverso l'oscurità". Questo è un errore che si traduce in un comportamento corretto ma è ancora basato su presupposti non validi. Usarlo come argomento è, nella migliore delle ipotesi, amatoriale e poco competente.
In realtà, tutta la sicurezza passa attraverso l'oscurità. Alcuni sono solo più oscuri (= meglio mascherati). La vera ragione per cui questo è negativo, è perché ciò che chiamiamo sicurezza reale è un miliardo volte più oscuro, dandogli un'oscurità effettiva (statistica) affidabile, al contrario di molto semplice oscurità che è semplicemente troppo probabile perché qualcuno se ne venga fuori dal nulla.

Punto di vista interessante per quanto riguarda "tutta la sicurezza passa attraverso l'oscurità".Se qualcosa è impossibile da decifrare in una vita umana, non è sicuro?:)
L '* oscurità * della frase * sicurezza attraverso l'oscurità * si riferisce specificamente all'oscurità del design del sistema rispetto al materiale chiave.È un modo per fare riferimento al principio di Kerchov.
La tua affermazione che "sicurezza per oscurità" non è un concetto utile non è realmente valida.Immagino che il tuo punto sia che avere, ad esempio, una chiave segreta è solo sicurezza, mantenendo la chiave oscura.Tuttavia, se scopro la tua chiave segreta, puoi semplicemente sostituirla con una nuova chiave, tornare attivo e funzionare e cercare di stare più attento con la tua nuova chiave.Se scopro il tuo algoritmo segreto, allora devi costruire un sistema completamente nuovo, che è molto più lavoro.Inoltre, puoi dare limiti molto migliori su quanto tempo mi ci vorrà per capire la tua chiave, rispetto a quanto tempo mi ci vorrà per capire il tuo algoritmo.
@DavidRicherby Voglio votare a favore di questo commento 100 volte.Non è affatto utile raggruppare tutta la sicurezza nello stesso contenitore con gradi diversi.Abbiamo inventato la terminologia "sicurezza attraverso l'oscurità" per un * ottimo * motivo.
@DavidRicherby: Stai ripetendo il mio stesso punto come se fosse un contro-argomento.Il mio punto è che tutta la sicurezza differisce solo per la quantità di lavoro necessaria per rompere / riparare (aka oscurità), e * quindi * non esiste una divisione magica speciale con "sicurezza reale" "non basata sull'oscurità".
@Evi1M4chine No, non lo sono.Stai dicendo che tutta la sicurezza è, in definitiva, sicurezza mantenendo qualcosa di oscuro.Sto dicendo che non usiamo la frase "protezione dall'oscurità" per significare "protezione mantenendo qualcosa di oscuro".È come affermare che nessun sistema è sicuro perché qualsiasi cosa può essere hackerata da un avversario sufficientemente determinato, sufficientemente potente e, quindi, la parola "sicurezza" è inutile perché nulla è veramente sicuro.Non è questo il significato della parola "sicurezza", e il sottile di cui parli non è ciò che significa "sicurezza per oscurità".
@Cruncher: Un buon segno per quando le persone credono più forti in qualcosa perché ne capiscono meno, è quando usano argomenti emotivi come "per un * ottimo * motivo", ma non lo sostengono.Se non fosse una convinzione, avrebbero semplicemente affermato quella ragione invece di una fase logora.Una cosa purtroppo molto comune tra gli umani.Proprio come la riflessione sulle argomentazioni, l'interpretazione selettiva, gli argomenti di paglia, prendere tutto come personale e offensivo, ecc.
@Evi1M4chine "Per una ragione molto buona [ma non dichiarata]" non è un argomento emotivo.Ma è argomento per oscurità.;-)
@DavidRicherby: Mi stai dicendo cosa * ho * detto ??^^ Amico, sono d'accordo con te!(O meglio tu con me.) Cosa vuoi di più?Rilassare! E per favore non "interpretare" cose che non ho detto.Non ho detto che il termine "sicurezza" sia inutile. E sì, NON c'è sicurezza al 100%.Mai.** Sono solo livelli ** di oscurità.Puoi scegliere comodamente una definizione arbitraria di "sicuro", ma poi ti ritrovi in un mondo fantastico.
@Evi1M4chine No, non sono d'accordo con te.Hai detto che il concetto di sicurezza per oscurità è "un errore".Ho detto che non lo è.È un concetto estremamente utile.
P.S .: Questo è un altro esempio del perché il testo è un cattivo mezzo per la conversazione umana.Tutti i malintesi.
@DavidRicherby: E 1. perché stai argomentando contro questo, e 2. quando inizierai a sostenere argomenti per sostenerlo.:) / me odora di pesca a traina
@Evi1M4chine Per qualcuno che ha rimproverato argomenti "emotivi", sei sicuro di essere molto emotivo.La ragione "molto buona" era in realtà più un appello all'autorità più che altro.Niente di emotivo al riguardo.Inoltre non ti ho nemmeno risposto direttamente.Stavo solo rafforzando il punto di vista di David.Non siamo in un dibattito qui.Il fatto che il mio argomento fosse incompleto non significa che non sia valido o infondato.
Tom
2017-02-09 15:46:02 UTC
view on stackexchange narkive permalink

Come altri hanno già spiegato, la sicurezza per oscurità rallenta al massimo un aggressore.

Nel tuo caso specifico, direi che non avrà alcun effetto apprezzabile. Per arrivare a questo punto, il tuo aggressore ha già dovuto decodificare la tua App ed estrarre la chiave privata. Ciò significa che il tuo aggressore non è un idiota e sa cosa sta facendo. Un po 'di oscurità gli costerà meno tempo di quanto ci vuole per implementarlo.

Beh, tecnicamente questo è per cercare di NASCONDERE il fatto che hanno bisogno di ottenere la chiave privata dall'app.Cioè, questo accade prima. Tuttavia, chiunque sia in grado di ottenere la chiave dall'app, non sarà affatto ostacolato da questo
Qualsiasi utente malintenzionato non idiota osservare prima il traffico legittimo e vedrebbe immediatamente che le richieste sono crittografate.Sarebbe letteralmente la prima cosa che nota.
user2320464
2017-02-10 00:56:46 UTC
view on stackexchange narkive permalink

Come altri hanno già detto, stai proponendo di utilizzare Security by Obscurity. Sebbene questa tecnica abbia il suo scopo, considera quanto segue prima di scegliere di adottare questo approccio:

  • Fornire supporto tecnico per la tua API. L'utilizzo di codici di risposta HTTP ingannevoli rende difficile per chiunque altro oltre a te fornire supporto. Devono considerare se la situazione particolare sta effettivamente inviando il codice di risposta corretto o se ne sta inviando uno oscuro. Se decidi di rimanere l'unico contatto per eventuali richieste di supporto, questo non dovrebbe essere un problema.
  • Che cos'è un "utente dannoso"? Prestare attenzione quando si classifica una richiesta come dannosa perché può avere effetti negativi. Si supponga che venga determinato che un IP invia traffico dannoso e che vengano utilizzate contromisure. Supponiamo ora che lo stesso IP sia in realtà un proxy con centinaia o migliaia di utenti dietro di esso. Ora hai applicato la tua contromisura a tutti loro. Lo stesso principio può essere applicato per identificare attività dannose nelle intestazioni e / o nel corpo.
  • Il codice dell'applicazione è il più lento. La richiesta deve attraversare l'intero stack per arrivare finalmente alla logica di "sicurezza". Questa architettura non si adatta bene ed è lenta. Le richieste errate dovrebbero essere interrotte il prima possibile, che è la premessa per l'utilizzo di Web Application Firewall (WAF).
  • Estensione dell'accesso. Se la tua API dovesse diventare accessibile a più client di quelli per cui era stata originariamente progettata, quei nuovi client dovranno essere consapevoli del possibile utilizzo di codici di risposta HTTP ingannevoli.
  • Utenti malintenzionati persistenti. Come altri hanno già detto, questa tecnica è solo un acceleratore.

Approccio migliore

Concentra il tuo tempo sulla white list di tutte le richieste valide conosciute. È molto più semplice che cercare di identificare tutte le potenziali richieste errate. Tutto ciò che non appare nella lista bianca dovrebbe ricevere immediatamente un codice di risposta appropriato come HTTP 400 o HTTP 405 se stai filtrando i verbi HTTP (come esempi). Preferibilmente questo accade prima che la richiesta raggiunga il codice dell'applicazione.

Insieme alle richieste consentite dalla white list, assicurati che la tua applicazione sia protetta in base alle Linee guida OWASP. Otterrai risultati di gran lunga migliori trascorrendo il tuo tempo con OWASP, quindi proverai a determinare cos'è un utente malintenzionato e restituirai un oscuro codice di risposta HTTP.

rosuav
2017-02-10 14:28:14 UTC
view on stackexchange narkive permalink

Fondamentalmente, NON PUOI impedire a client non autorizzati di inviare richieste. La cosa più vicina possibile sarebbe eseguire una sorta di controllo crittografico nel client, ma come disse Sherlock Holmes, "ciò che si può inventare, un altro può scoprire". (Lo so per certo, perché ho violato la sicurezza lato client delle persone in diverse occasioni.)

Invece, crea la tua API in modo che chiunque possa usarla utilizzando client personalizzati. Rendilo amichevole. Cosa perdi con questo? Gli aggressori attaccheranno qualunque cosa tu faccia e se rendi la tua API facile da usare, qualcuno inventerà qualcosa a cui non hai mai pensato e renderà il tuo server ancora più grande di quanto avresti mai immaginato potesse essere. Cosa potrebbe essere fatto da un cliente che parla sia con la tua API che con qualcun altro? Quali miriadi di possibilità ci sono e ti farà davvero male permetterle?

netikras
2017-02-13 13:28:24 UTC
view on stackexchange narkive permalink

Non lo farei. Generalmente significa che stai creando il tuo standard, il che fa sì che:

  1. la tua API sia predittiva dopo aver creato una mappa delle tue risposte http al loro significato effettivo. La modifica delle risposte HTTP potrebbe funzionare su alcuni "hacker" che si arrenderebbero dopo pochi tentativi, ma non su altri, più determinati. Vuoi proteggere la tua API solo dal tipo precedente, cioè dai bambini di 11 anni? Non credo.

  2. un po 'di confusione per sviluppatori e probabilmente tester, specialmente quelli che sono abituati a operare secondo standard globali.

  3. Scegli un altro modo. Ce ne sono sicuramente alcuni. Ho lottato anch'io con lo stesso grattacapo per alcune settimane ultimamente e ho escogitato almeno 2 modi più o meno affidabili per ottenere le restrizioni desiderate [non posso pubblicarle qui].

  4. ol >

    Ci sono sicuramente modi migliori e MOLTO più efficaci per ottenere ciò che desideri. Prova a guardare la tua API da una prospettiva diversa ... Se tu fossi un hacker e la tua vita dipendesse dall'hacking di quell'API, cosa faresti per avere successo? Cosa dovrebbe accadere per essere frustrato nei tuoi tentativi di romperlo?

james
2017-02-13 05:07:28 UTC
view on stackexchange narkive permalink

Una buona ragione per non farlo, soprattutto per un'app mobile, è che è molto probabile che la tua app stia già parlando con il tuo server tramite più proxy, ad esempio nella compagnia telefonica, già. La maggior parte delle grandi aziende utilizza proxy sulla propria rete per cercare di proteggere i propri sistemi da contenuti dannosi e molte compagnie telefoniche riducono la qualità del video o delle immagini in transito. Ti renderà anche inutile l'utilizzo delle varie librerie di sistema per HTTP sulla tua piattaforma. Un approccio comunemente utilizzato consiste nel ricavare una chiave o un token da informazioni che è improbabile che l'utente desideri condividere, come l'hashing del nome, dell'indirizzo e dei dettagli della carta di credito. In questo modo, anche se la tua app è stata compromessa, le persone saranno diffidenti nel fornire le informazioni richieste a un programma casuale che hanno scaricato, limitando la capacità di condivisione di qualsiasi attacco provato.

Jon Hanna
2017-02-13 07:57:07 UTC
view on stackexchange narkive permalink

Generalmente non è una buona idea.

Ne ho fatto un uso molto mirato una volta con buoni risultati quando il sito web di un cliente veniva utilizzato da un circuito di riciclaggio di carte di credito rubate. C'erano alcune caratteristiche di identificazione condivise solo dalle transazioni fraudolente, quindi piuttosto che rifiutarle educatamente avrei fatto ritardare la risposta di un paio di minuti (a nessuno piace un sito web che impiega minuti per fare qualcosa) e poi restituire un 500 con il sito messaggio standard "scusa, non sei tu, sono io" per gli errori del server (registrava anche i dettagli da trasmettere alle forze dell'ordine). Abbiamo avuto tre tentativi di transazioni che hanno ottenuto questa risposta da opossum e poi non abbiamo più avuto notizie da loro.

Questo però era:

  1. In risposta a qualcosa che sapevamo fosse un attacco piuttosto che essere odioso per gli utenti che hanno un problema.
  2. Non una difesa contro un attacco alla sicurezza del protocollo stesso, ma a livello umano superiore.
  3. Spiegabile attraverso altre spiegazioni , cioè stavamo fingendo di avere un sito Web davvero schifoso in una situazione in cui ciò era plausibile (ci sono molti siti Web schifosi là fuori) e non eravamo un target specifico (i criminali sarebbero passati a qualcun altro).

Gli utenti che hanno un problema dovrebbero essere aiutati, non abusati. "Non posso farlo perché non sei autorizzato correttamente" si rifiuta di fare qualcosa in modo utile. "Non posso farlo perché devi usare un proxy" quando qualcuno non ha bisogno di usare un proxy è offensivo. Essere deliberatamente inutili è appropriato solo quando sai di essere stato attaccato e quindi non dovrebbe sembrare un messaggio ovviamente fasullo o non hai nascosto nulla (potenzialmente hai effettivamente rivelato qualcosa se non viene utilizzato lo stesso stato fasullo per ogni errore del client).

Detto questo, è appropriato adottare misure per fare in modo che gli stati non perdano informazioni. Per esempio. è accettabile (come descritto come tale negli standard) per / admin / fino a 404 sebbene sarebbe 200 in un altro caso (utente autorizzato, indirizzi IP client consentiti, ecc.) In alternativa se / members / my-profile sarà 200 per un utente autorizzato e 403 o 401 altrimenti, quindi se / members / fdsasafdasfwefaxc sarà 404 per un utente autorizzato, è una buona idea che sia 403 o 401 per l'utente non autorizzato. Non si tratta tanto di sicurezza dall'oscurità quanto di considerare quali URI si riferiscono alle risorse per essere uno dei bit di informazione che vengono protetti.



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...