Elaborazione dei pagamenti in Android

2

Supponiamo che la mia azienda sia un reclamo PCI DSS. Voglio fornire una visualizzazione personalizzata (nella libreria SDK per Android) per l'elaborazione dei pagamenti ai commercianti che vendono prodotti tramite la loro applicazione mobile Android.

L'obiettivo principale è effettuare il pagamento senza dare accesso al commerciante sui dettagli di pagamento: numero di carta o CVV.

La mia vista avrà input per il numero della carta, la data di scadenza e CVV, ma l'SDK per i pagamenti mobili dovrebbe rendere i dati della carta illeggibili per l'APP commerciante. Tutto questo è spiegato qui .

Se creo una vista personalizzata per questa attività nella libreria SDK, come posso assicurarmi che un commerciante disonesto non possa scartare la mia libreria, riscriverla e prendere le mie chiamate di pagamento al servizio web e registrare i dati di sicurezza nel suo banca dati.

Come posso assicurarmi che le chiamate al mio servizio web di pagamento siano realmente effettuate dalla mia visualizzazione personalizzata?

    
posta mariami 25.10.2017 - 09:52
fonte

2 risposte

4

Questo dipende molto dall'avversario che stai proponendo.

Se con "unwrapping" intendi smontare e applicare patch, quindi ti sei procurato un modello di minaccia contro cui non puoi difenderci ed ecco perché:

Se pensi che possano disassemblare e applicare patch al tuo codice, in pratica possono fare tutto ciò che vogliono, dopotutto è la loro applicazione e quindi usano il loro codice che sembra solo tuo.

Inoltre, qualsiasi segreto che potresti utilizzare per verificare una richiesta proviene da un'istanza SDK valida (ad esempio la firma delle richieste) può essere decodificato da un avversario di questo tipo.

Tutto sommato, è l'applicazione commercianti e possono eseguire qualsiasi codice che preferiscono ed è il dispositivo dei consumatori su cui non si ha il controllo su cui è in esecuzione.

Questo - tra l'altro - è il motivo per cui le app di pagamento provengono dal fornitore del sistema operativo o da un'applicazione separata collegata all'app dei fornitori (ad esempio Apple Pay, google wallet, PayPal).

Inoltre, solo per essere chiari: i dispositivi rooted potrebbero essere usati per scaricare tutti i dati in memoria, quindi non c'è completa sicurezza.

Degno di nota: qualsiasi comunicazione con il back-end dovrebbe essere protetta da TLS, incluso il blocco dei certificati all'interno dell'applicazione per contrastare eventuali attacchi MITM.

I dettagli di implementazione sono fuori tema qui e non li copro - potresti avere più fortuna con quello su SO.

    
risposta data 25.10.2017 - 10:36
fonte
2

If I create a custom view for this task in the SDK library, how can I make sure, that a dishonest merchant won't unwrap my library, rewrite it and catch my payment calls to web service and log security data in his database.

Devi capire una regola molto semplice che Raph Koster mise molto succintamente

Never trust the client. Never put anything on the client. The client is in the hands of the enemy. Never ever ever forget this.

Mentre Raph parla di giochi online, si applica ancora a quasi tutto il resto. Soprattutto questa parte che hai citato

The main goal is to make payment without giving access to merchant on payment details: card number or CVV.

Non puoi impedirlo. Se sviluppo un'app con il tuo SDK, posso raccogliere e archiviare i dati che mi piacciono. Leggendo tra le righe, sembra che tu stia vendendo il tuo PCI-DSS nel tuo SDK, ma i tuoi clienti svilupperanno l'app. Capire, le persone possono (e di routine) riconfeziona le app Android sempre . È banale da fare.

In altre parole, il tuo modello di business non funzionerà. Il cliente, per definizione, dovrà prima raccogliere i dati e poi trasmetterli a te. Se decidono di archiviare tali dati (in potenziale violazione di PCI-DSS) non è possibile fermarli e si verificherebbero problemi nel caso in cui tali client venissero violati e rubati.

    
risposta data 25.10.2017 - 14:39
fonte

Leggi altre domande sui tag