Discussione sull’articolo "Sicurezza del codice MQL5: Protezione con password, generatori di chiavi, limiti di tempo, licenze remote e tecniche avanzate di crittografia delle chiavi di licenza EA" - pagina 3

 
allicient:

Potreste anche sostituire la porta di casa con dell'acciaio rinforzato, ma non servirà a impedire l'ingresso se lasciate la chiave sullo zerbino. La protezione che avete descritto va bene per scoraggiare il codificatore occasionale, ma non certo contro un attaccante motivato.

Il problema non è la crittografia, che è la parte più semplice, ma piuttosto il modo in cui si gestiscono le chiavi e il processo di decrittografia.

Nello scenario in cui un aggressore, nel linguaggio classico che chiameremo Mallory, desidera copiare e distribuire un EX5 di cui possiede la chiave, allora sicuramente può farlo

i. eseguire l'EX5 con la chiave;

ii. monitorare il processo in esecuzione, ad esempio collegando una DLL al processo, e scaricare il contenuto dell'EX5 subito dopo che è stato decriptato;

iii. riassemblare l'EX5 ora in chiaro (e potenzialmente disassemblare in sorgente, se ci si può preoccupare).

Se il primo punto di protezione implica la verifica della firma, allora tutto ciò che l'attaccante deve fare per distribuire i file è distribuire un diverso eseguibile MQL con le relative chiavi pubbliche sostituite. Se MQL5 utilizza un'API crittografica per verificare le certificazioni, allora questa può essere strappata dal binario. Questo continua all'infinito.

Tutto questo prima di iniziare a considerare l'incubo che sarà la gestione delle chiavi.

Sebbene questo tipo di analisi binaria sia al di fuori delle mie capacità in questo periodo, conosco diverse persone che potrebbero realizzarla senza problemi. Quindi non è la forza della crittografia che dovrebbe preoccuparvi, ma piuttosto il fatto che avete un modello di sicurezza non valido. Non è un problema particolare di per sé, poiché nessuno si aspetta che MetaTrader risolva questo problema - ci sono altre soluzioni molto utili a questo problema, in particolare il fatto che il proprietario del codice MQL5/EX5 lo esegua su un sever separato che controlla e concede in licenza l'accesso/segnali agli acquirenti.

Quindi, non riesco a capire perché le persone richiedano questa funzione quando è così difficile da implementare correttamente, almeno senza hardware a prova di manomissione.


Allicient ha sollevato molti punti validi. Per una vera protezione, raccomando quanto segue:

Per la protezione di base del codice sorgente, il riempimento del maggior numero possibile di funzioni in una dll dovrebbe essere sufficiente. Il codice minimo per l'interfacciamento tra MT5 e la programmazione va bene. Non mi fiderei del codice sorgente completo di ex4/ex5, a meno che non stiate regalando il vostro software. Ma questo articolo riguarda la protezione della vostra proprietà intellettuale per i prodotti a pagamento/commerciali o per i prodotti gratuiti in cui il codice sorgente non viene fornito.

Per quanto riguarda le licenze, la migliore protezione è avere versioni demo e live separate della combinazione ex4/dll. Il compromesso è che è un po' più fastidioso per lo sviluppatore e per il cliente, in quanto lo sviluppatore deve mantenere/compilare due versioni del proprio software, ma si riduce la possibilità che qualcuno ottenga l'accesso hackerato alla versione completa del software; può usare solo la versione demo. Molto dipende dall'obiettivo della demo. Se si vuole offrire al cliente tutte le funzionalità, allora

Inoltre, è possibile implementare licenze che richiedono l'esecuzione di un piccolo pezzo di codice essenziale in remoto prima che il software locale possa essere eseguito. CNS SaaS (Software as a Service) ha fatto proprio questo, ed è chiamato funzioni CCoHS (Call code on hosted server). È possibile inserire una porzione limitata di codice necessaria per il corretto funzionamento del vostro EA in un modo ospitato.In questo modo, anche se qualcuno scappa con l'EA o cracca in qualche modo la dll di licenza, la dll viene comunque resa inutile. C'è una latenza tra il server del codice ospitato e i server dell'EA e/o delle licenze, ma si può aggirare il problema. L'implementazione non è troppo difficile, ma l'utente deve trovare un modo per implementare CCoHS sui propri server. Quando si è piccoli, si può fare su un server economico o su un altro, e poi scalare quando la base di abbonati cresce.

Le funzioni ospitate, pur essendo le più costose di tutte le opzioni, offrono una protezione reale nel caso in cui qualcuno sia in grado di decompilare la dll, il che è molto improbabile. È molto probabile che "decifrino" la dll per far funzionare il software. Ma senza le funzioni ospitate necessarie, sarebbe comunque inutile. A meno che non mi sia sfuggito qualcosa.

 
MetaQuotes:

Articolo pubblicato Protezione dei programmi MQL5: password, chiavi, limiti di tempo, controllo remoto delle licenze:

Autore: investeo

3. Legame con il conto - Ho provato a legare il lavoro dell'Expert Advisor al conto. La protezione non funziona, dà il messaggio /il lavoro dell'Expert Advisor su questo conto non è consentito/ , ma l'EA continua a operare. Non ci sono errori durante la compilazione. Non capisco cosa ci sia di sbagliato.

 
Grazie per l'articolo
 
Come posso aggiungere queste linee di comando a un'ea sviluppata per metatrader 4?
Dove si dovrebbe posizionare questa linea di codice. ??
 

Salve, ho una domanda, vorrei vendere advisor sul mio sito ma non so come fare, c'è qualcuno che può aiutarmi?

Grazie in anticipo!

 

Ciao,


Grazie per l'articolo. Per favore, consigliatemi per la protezione della password, come fare in modo che quando si digita la password, l'input venga visualizzato come un asterisco ("*") o un punto ("-").

Non sono un buon programmatore.


Grazie

 
Peter Maxwell:

Mi spiace essere scortese, ma ciò che è stato presentato nell'articolo non è sicurezza, è oscurità. La protezione dalla copia è un problema estremamente difficile, da cui gli sforzi dell'industria musicale e cinematografica con i DRM e i loro ripetuti fallimenti.

Nella migliore delle ipotesi, le informazioni qui riportate faranno perdere tempo a qualcuno; nella peggiore, potreste aver dato al lettore un falso senso di sicurezza. Se poi decidono di "proteggere" un prodotto utilizzando i vostri consigli, potrebbero rimanere un po' sorpresi quando il consumatore elimina la protezione nel giro di poche ore e lo rivende a una frazione del prezzo.

Un'altra cosa seria: la codifica Base64 non è legata alla crittografia. La codifica Base64 è stata progettata per consentire la trasmissione sicura di dati a 8 bit utilizzando protocolli che considerano la codifica dei dati a 7 bit. È possibile invertire banalmente la codifica Base64, ed è stata progettata per questo scopo!

L'unica soluzione che vedo per distribuire in modo sicuro il software MQL5 è o tramite le disposizioni della procura limitata del broker, o installando un'istanza di MQL5 con i file .ex5 su un server da qualche parte e consentendo al cliente di accedere utilizzando un thin client (in modo che non possa scaricare il .ex5). E sì, ho lavorato nel campo della sicurezza delle informazioni per oltre 15 anni, quindi ho una discreta idea di ciò di cui sto parlando.

Ad essere onesti, sono piuttosto sorpreso che Metaquotes abbia pubblicato l'articolo.

Esatto. Esattamente in questo modo.
 

Salve buon pomeriggio di consultazione ho bisogno di aiuto per poter realizzare l'utilizzo di un EA per numero di conto in mt4 e che mi permetta di modificare e che possa funzionare solo i conti che sono all'interno della licenza e che possa abilitarlo e disabilitarlo da remoto in quanto ha utilizzato due mt4 uno master e uno slave allego la descrizione del codice e come posso fare meglio per farlo funzionare bene in quanto se inserisco un altro conto che è fuori dalla licenza funziona lo stesso.

<?xml version="1.0" encoding="UTF-8"?>

<licenza>

<programma>

</permesso> <programVersion>

<Tipo di licenza>Full</licenseType>

<Periodo di validità

<data fine>1/18/2080</data fine>

</validityPeriod>

<Proprietari>

<NomeProprietario>

<Conto>6789</Account>

<Conto>7994</Conto>

<Conto>22302</Account>

</ownerName>

<Proprietari>

<Firma xmlns="http://www.w3.org/2000/09/xmldsig#">

<Info firmato>

<CanonicalizationMethod Algoritmo="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

<FirmaMetodo Algoritmo="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<Riferimento URI="">

<Trasforme>

<Trasforma Algoritmo="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />

</Transforms>

<DigestMethod Algoritmo="http://www.w3.org/2000/09/xmldsig#sha1" />

<DigestValue>Cl8vF8+Uyyms3pEodjip5ol5J4s=</DigestValue>

</Riferimento>

</SignedInfo>

<FirmaValore p/NlTyHeUy5CVC01H/2WmvTcN8TqJhrInkhqtyzR6vqn/koJHqm6fiD6mepklpn4fud0em7vqOiyWcQ9KQ8jqoyoN9ExkJUEvepWBQT2HHcaoW2kpV17ch+CZvtFX74cHE23WrOi9/p3RoK/4G0rsgvdjvefdZRQRsM5k=</SignatureValue>

</Signature>

</license>

 

Ho un'idea. Supponiamo che ci sia un monitor web che guarda sempre attraverso il flusso web.

1. Il client EA chiama il server web per ottenere una chiave sha.pub che viene generata dal server in modo casuale.

2. EA invia alcuni dati che richiedono l'autorizzazione al server con la chiave pub, in modo che il monitor non possa sapere di che dati si tratta. Inoltre, i dati possono contenere una chiave casuale generata dal client. Il monitor non può decifrare i dati a causa della chiave sha.

3. Il server riceve i dati e invia le informazioni di autorizzazione criptate dalla chiave inviata dal client. Il monitor può decifrare queste informazioni perché può conoscere la chiave sha del pub, ma non conosce la chiave del client, quindi è ancora inutile.

In questo modo, il server può controllare il comportamento del client EA.

 

Salve, sarebbe possibile aggiornare questo articolo tenendo conto della nuova release di Python?

Non riesco a farlo funzionare. PS: Python è ancora nuovo per me.


Grazie,

Danny