Quali sono le soluzioni sicure per proteggere credenziali importanti nel codice sorgente [duplicato]

2

Sto facendo un po 'di lavoro Java per un'azienda che ha del codice che desidera proteggere in un'applicazione che sta dando ai suoi clienti.

Ad esempio, cosa succede se si dispone di informazioni come le informazioni di accesso FTP o DB nel codice sorgente dell'applicazione lato client? Il login sarebbe visibile a chiunque abbia visualizzato il codice, quindi l'accesso al tuo server è proprio lì fuori, il che significa che anche il tuo codice sul server sarebbe vulnerabile. Se le informazioni di accesso devono essere protette inviando le informazioni utilizzando HTTPConnection / HTTPClient al server da elaborare durante l'utilizzo di Crittografia in transito e l'invio delle credenziali di accesso per verificare che la richiesta provenga da una fonte legittima.

Tuttavia, ciò non sarebbe altrettanto rischioso nel caso in cui il server fosse compromesso / violato e la sorgente Java fosse spalancata? (Apparentemente Execelsior può fare la protezione del server con le applicazioni Tomcat quindi c'è anche quella).

Stavo anche esaminando vari programmi Java-to-Exe come Excelsior Jet, ma ho anche eseguito programmi che simulano Exe e apparentemente hanno una protezione come JWrapper.

Ho letto in questa domanda

Che gli exe emulati non siano protetti e contengano ancora file Jar, quindi presumo che la migliore scommessa siano programmi simili a Execelsior Jet e un programma come JWrapper non andrebbe bene allora?

Ci vorrebbe più tempo per qualcuno per decompilare il codice Nativo piuttosto che provare a hackerare un server (se sapessero anche cosa cercare, o che stiamo anche cercando di nascondere qualcosa). La mia migliore scommessa sarebbe fare server + Excelsior, ma il prezzo sale anche se voglio ottenere la versione Enterprise invece di Professional.

Sono curioso di quale approccio le persone raccomanderebbero per metodi di protezione sicuri. Grazie.

EDIT: questa domanda non è un duplicato, perché l'altra domanda riguarda la protezione del codice dell'applicazione Web da "Host Web".

Mi sto chiedendo quale sarebbe il miglior metodo per proteggere il mio codice sorgente. Indipendentemente dal desktop o dal server. L'altra domanda avrebbe senso se stavo guardando una soluzione server, ma non fornisce una soluzione al mio bisogno.

Grazie.

EDIT2: Sembra che il consenso sia che "se qualcuno vuole rompere, lo farà ..." ma non c'è un punto per proteggerlo per impedire a chiunque di limitarsi a guardare il codice? Ci sono programmatori che non sono esperti nel reverse engineering, ma possono ancora capire il codice se è leggibile.

    
posta XaolingBao 05.10.2016 - 23:21
fonte

5 risposte

2

Ci sono 2 ovvi problemi con le credenziali memorizzate nel codice sorgente:

  1. Il codice sorgente può essere facilmente decodificato e le credenziali estratte.
  2. Se le credenziali sono trapelate, dovresti cambiare la password sul server, cambiare la password nel codice, ricostruire e ridistribuire

Quindi un'opzione per aggirare entrambi questi problemi non è avere le credenziali nel codice sorgente. Un file di configurazione adeguatamente protetto può essere tutto ciò che serve, leggere le credenziali quando necessario, usarle e quindi cancellare la memoria dopo l'uso.

    
risposta data 06.10.2016 - 14:40
fonte
1

This also brings up the point that what if you have information such as FTP or DB login information in the client side application?

In questo caso sembra che tu voglia nascondere le credenziali nel tuo codice Java che sono molto probabilmente delle costanti String. Se questo è il caso questa domanda di StackOverflow può essere utile .

    
risposta data 06.10.2016 - 03:59
fonte
1

Quello che vuoi (e ho detto ciò che vuoi , che non è necessariamente ciò che hai bisogno come evidenziato da altre risposte e commenti) è chiamato offuscamento del codice .

L'offuscamento del codice è un insieme di tecniche che, dato un codice sorgente come input, producono un codice sorgente funzionalmente equivalente ma molto difficile da leggere / capire sull'output.

Tuttavia, tieni presente le conseguenze, non solo a monte, ma anche in futuro, poiché il tuo software diventerà molto più difficile da mantenere.

Ad esempio, Java si affida molto alle tracce dello stack per diagnosticare i problemi, in genere tale traccia dello stack fornisce informazioni chiare su dove si è verificato l'errore. Con un codice correttamente offuscato, la traccia dello stack non avrà più significato:

  • I clienti non avranno alcun mezzo per risolvere anche problemi di base, aumentando così le chiamate ai tuoi servizi di supporto.
  • Il tuo supporto avrà meno elementi da indagare dal cliente (in base alla mia esperienza, almeno che funge da cliente per tale azienda, sembra che non abbiano un mezzo facile per offuscare la propria traccia dello stack).

Nel campo del software aziendale, questo è usato raramente poiché il costo di solito va oltre i benefici (ma alcuni lo usano davvero) e una società davvero disposta a decodificare il software lo farà molto probabilmente comunque.

Questo potrebbe essere più frequente in alcuni domini specifici, come i giochi online (MMORPG per esempio) che si rivolgono a un pubblico sostanzialmente più ampio e dove i rischi associati al reverse engineering possono essere più alto Questo però non conta come una protezione affidabile, solo una misura tra le altre ideate per rallentare gli aggressori e scoraggiare i cracker occasionali (con gli stessi svantaggi per quanto riguarda i problemi di supporto e la scarsa relazione con i clienti).

    
risposta data 06.10.2016 - 14:29
fonte
0

Pensiamo a quale codice è per un secondo. Il codice è un elenco di istruzioni per un dispositivo (un processore) per fare qualcosa. I processori sono progettati dall'uomo, quindi è logico che un essere umano sia in grado di capire il codice progettato per esso ed essere in grado di replicare la sua funzionalità con un tempo e uno sforzo sufficienti.

Quello che stai cercando è essenzialmente impossibile - forse sarà con la crittografia quantistica dove semplicemente cercare a informazioni lo cambierà, ma nel frattempo non lo è.

Forse le soluzioni che descrivi saranno sufficienti per proteggere il tuo codice. Se stai solo cercando di impedire ai bambini di usare il tuo software questo farà il trucco, ma quegli stessi bambini probabilmente non avranno mai i soldi per comprare il tuo software comunque, quindi non è che stai perdendo molto. D'altra parte, immagina se da bambino ti trovassi di fronte a due società: una ti dà apertamente il codice e una che fa del suo meglio per impedirti di usarla - una volta adulto con soldi, se dovessi fare affari con una delle due loro, quale sceglieresti? Personalmente sceglierei il primo, perché mi aiutavano ancora mentre non avevo soldi per pagarli. Stai sostanzialmente risparmiando denaro a breve termine senza pensare a lungo termine.

Questo è simile alla pirateria. Alcune persone verseranno una quantità illimitata di denaro nel tentativo di prevenirlo, ma anche in quel caso alla fine verranno violate e tutti i soldi andranno sprecati.

Suggerisco un approccio diverso, invece di cercare di prevenire il furto / la pirateria che non sarai mai in grado di raggiungere completamente, prova invece a fare appello ai tuoi clienti paganti. Ne vale la pena per essere un cliente pagante. Forse è difficile da credere, ma ci sono persone che sono disposte a pagare per un buon software. Concentrati su di loro: hanno una richiesta di funzionalità o cercano supporto tecnico? Investi i tuoi soldi lì.

Se vuoi ancora provare a proteggere il tuo codice, c'è un modo per farlo. Inseritelo su un computer ospitato a casa e tenetelo d'occhio 24/24. O ancora meglio, non scrivere nemmeno codice (cosa succederebbe se la tua macchina di sviluppo fosse già compromessa?) E fare tutto ciò che fa la tua preziosa app, ma direttamente nella tua testa . Questo dovrebbe essere abbastanza sicuro e non devi fidarti di un fornitore di hosting o di dipendenti.

Spero che questo spieghi abbastanza bene perché hai per fidarti di qualcuno, come un fornitore di infrastrutture. Fortunatamente, non tutti sono un truffatore, e la maggior parte delle aziende di infrastrutture là fuori accoglieranno felicemente la tua applicazione, guadagnando bene da ciò che già fanno meglio senza tradire la tua fiducia e rubare la tua applicazione.

    
risposta data 06.10.2016 - 02:52
fonte
0

Vorrei raccomandare l'offuscamento, quindi rendere la password simile al codice offuscato, quindi lasciare un po 'di password honeypot.

    
risposta data 07.10.2016 - 04:50
fonte

Leggi altre domande sui tag