Come posso verificare che le chiamate di rete alla mia API provengano solo dal mio programma C #?

2

Ho creato un'applicazione desktop sul framework .Net.

Se offusisco il codice, anche se qualcuno esegue il reverse-engineering del codice e prova a chiamare la mia API utilizzando la fonte modificata, posso sapere se le chiamate API non provengono dal codice sorgente originale?

Se costruisco la mia applicazione utilizzando la firma del codice, aiuta?

    
posta Nitish Kr 22.02.2018 - 10:04
fonte

2 risposte

5

Ogni volta che viene visualizzata questa domanda, indico le persone a Chat Wars di David Auerbach: Microsoft vs. AOL . La storia mostra l'estensione che alcune persone molto intelligenti hanno fatto per provare a fare ciò che stai cercando di fare, e gli spettacolari fallimenti uno dopo l'altro.

L'articolo potrebbe essere stato scritto per uno stack di tempo e tecnologia diverso, ma i fatti di base non sono cambiati e non cambieranno mai, indipendentemente dal tipo di tecnologia che stai utilizzando per sviluppare la tua applicazione. Dato un avversario sufficientemente determinato, è fondamentalmente impossibile verificare che una richiesta di rete provenga solo dal tuo cliente autorizzato.

    
risposta data 22.02.2018 - 23:12
fonte
3

Indipendentemente dal fatto che sarai in grado di identificare le chiamate da una forma modificata o decentrata del tuo codice dipende dalla tua capacità di riconoscere se le chiamate potrebbero essere state fatte dal codice originale.

Ad esempio, se il tuo codice è in grado di emettere un valore per un parametro solo da un numero impostato di valori possibili, è probabile che qualsiasi chiamata con un valore sconosciuto sia stata creata da un altro codice diverso dal tuo.

Non esiste altrimenti alcun modo per sapere che cosa ha chiamato la tua API, specialmente se la chiamata è valida. Ad esempio, se stai ospitando un servizio web http pubblicamente pubblicitario, posso emettere i comandi di arricciatura per inviare richieste GET ad esso, e non sarebbe possibile dire che ho usato curl invece del tuo binario (e anche se il tuo binario fa qualcosa di intelligente come aggiungere le intestazioni, posso sempre annusarle e imitarle in seguito).

Per una libreria, non esiste un modo efficace per impedire a un altro binario di collegarsi ad esso e iniziare a utilizzare la sua API.

L'offuscamento rallenta solo il reverse-engineer. Se l'inversione del tuo binario è sufficientemente valida, qualcuno è destinato a superare la tua offuscazione prima o poi: il codice non è tutto, possono anche scaricare la memoria durante l'esecuzione e vedere cosa c'è dentro, ad es. urls, valori variabili, ecc. Può tuttavia deviare gli hacker più dilettanti che potrebbero aver voluto semplicemente aggirarlo. Si noti inoltre che non si tratta di un mezzo per proteggere informazioni importanti come chiavi o credenziali di API incorporate, come dimostrato recentemente e in modo spettacolare da la violazione di Retina-X , il che significa che un inversore può acquisire e imitare qualsiasi meccanismo da implementare per autenticare il binario originale contro la tua API.

La firma del codice non è un modo per proteggere il tuo codice dal reverse engineering. È un modo per garantire crittograficamente che l'integrità di un file binario non sia stata compromessa prima di acquisirla, cioè che il file binario è esattamente lo stesso di quello che è stato compilato dagli autori originali. Significa tuttavia che nessuno dovrebbe essere in grado di distribuire un binario modificato e farlo passare per una versione legittima che avresti distribuito da solo.

    
risposta data 22.02.2018 - 10:37
fonte

Leggi altre domande sui tag