Domanda

Ho un'applicazione che registra eccezione tracce Strack e volevo quelli pila tracce per includere i nomi dei file e numeri di linea quando schierato in produzione. Ho capito come distribuire i simboli di debug w / il montaggio, ma nel processo di ricerca il problema mi sono imbattuto attraversato questa domanda , il che implica che non è una buona idea includere file PDB in un ambiente di produzione. Un commento alla risposta accettata dice "... le informazioni di debug può dare via i dati sensibili ed essere un vettore di attacco. A seconda di ciò che la vostra applicazione è".

Quindi, che tipo di dati sensibili potrebbero essere esposti? Come possono i simboli di debug essere utilizzati per compromettere un'applicazione? Sono curioso di sapere i dettagli tecnici, ma quello che sto veramente cercando è un modo pratico per valutare il rischio di includere i simboli di debug per qualsiasi applicazione e ambiente di produzione. O, per dirla in altro modo:? Qual è la cosa peggiore che potrebbe accadere

Modifica domanda di follow-up / chiarimento

Quindi, sulla base delle risposte di tutti finora, sembra che questa domanda può essere semplificato un po 'per le applicazioni .NET. Questo bit dal John Robbins blog legata in la risposta di Michael Maddox tipo di balzò fuori di me:

  

Un .NET PPB contiene solo due pezzi di   le informazioni, i nomi dei file di origine e   le linee e la variabile locale   nomi. Tutte le altre informazioni sono   già nei metadati .NET quindi non   c'è bisogno di duplicare lo stesso   informazioni in un file PDB.

Per me, questo ribadisce ciò che altri hanno detto di riflettore, con l'implicazione è che il vero problema è l'accesso alle chiese. Una volta che è stata determinata, l'unica decisione da prendere riguardo al PDB è se non vi preoccupate per esporre i nomi dei file, numeri di linea, ei nomi delle variabili locali (supponendo che non si sta mostrando pila risalire agli utenti finali per cominciare). Oppure ho semplificato al questo troppo?

È stato utile?

Soluzione

Questa è un'altra questione da guardare:

Are ci sono dei problemi di sicurezza che lasciano i file di debug PDB sui server dal vivo?

E più informazioni file PDB:

PDB File: Ciò che ogni sviluppatore deve sapere

In generale, ho sempre includere i file PDB nelle mie installazioni, i guadagni sono troppo grande per essere ignorato.

Se si espone mai una traccia dello stack per gli utenti (e in genere non si dovrebbe), non c'è davvero alcun rischio per la sicurezza aggiuntiva di distribuzione di file PDB.

Quando un utente visibile traccia dello stack si verifica, l'utente può vedere la traccia stack completo incluso il nome del file e numeri di riga del file. Questo potrebbe dare loro qualche idea di come la vostra applicazione è progettato che potenzialmente li aiuterà se l'hacking.

Una minaccia per la sicurezza più grande è qualcosa di simile a Riflettore e quando usato sulle DLL saranno consentono loro di visualizzare il codice sorgente, con o senza file PDB.

Altri suggerimenti

Se si sta distribuendo ad un environement di produzione all'interno della propria organizzazione, quindi non è un problema di sicurezza.

Se vendi il software ad altri soggetti, quindi PDB file può dare a qualcuno interessato a reverse engineering una gamba -. Che può o non può essere un problema per voi

Tuttavia (per essere chiari), non si desidera che le tracce di stack visualizzati al cliente - se le .pdbs sono disponibili. Ma se sei solo la registrazione delle tracce e la presentazione di una pagina di errore 'abbastanza' al cliente, non è un problema.

Per avere i simboli di debug, un attaccante in grado di determinare le variabili globali, offset funzione, ecc, di interesse.

In modo da poter vedere il vostro sistema ha una funzione come:

AddAdminUser(string name, string password);

E conosce il suo offset. Se il programma è compromessa, avrebbe potuto chiamare questa funzione per dare se stesso privilegi di amministratore.

O qualcosa di simile:

typedef enum {Basic, NTLM} AuthenticationMode;
AuthenticationMode g_authenticationMode;

E sa cosa si morse per capovolgere per passare la vostra applicazione in una modalità insicuro.

In alternativa, questo potrebbe prendere un po 'di tempo reverse engineering di capire. Non una quantità insormontabile di tempo, però.

Ma. . . Tutto questo implica l'attaccante è già in una posizione in cui può compromettere il vostro programma. Se questo è il caso, è già perso.

Se avete una buona ragione business per distribuire simboli PDB, andare avanti. Distribuzione di PDB di non farvi insicuro. Se non si dispone di un buon motivo per distribuire, non si dovrebbe fare questo in quanto renderà attacchi leggermente più facile.

È inoltre possibile creare file PDB pubblici - queste strip alcuni pezzi di informazioni, ma dare abbastanza simboli per generare una traccia dello stack e fare il debug di base. I dettagli sono qui . Microsoft distribuisce PDB pubbliche sul suo server simbolo per tutti da usare.

EDIT: La maggior parte di quello che ho detto vale per le preoccupazioni intorno distribuzione PDB di codice nativo - Penso che un sacco di queste preoccupazioni le persone portano oltre a .NET così, anche se i metadati di assemblaggio trasmette un po 'di questo già <. / p>

Qualcuno può "restituire" il codice sorgente completo della vostra applicazione. Se è Open Source non c'è bisogno di preoccuparsi. Se ha qualche IP (algoritmi, la protezione, licenze), non è probabilmente una buona idea.

E 'vero che strumenti come riflettore può ricostruire parti del codice, anche senza file PDB, ma offuscamenti può aiutare (o meglio, solo un po').

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top