Contesto
Sto cercando di saperne di più sulla sicurezza web esaminando in che modo le varie app native di iOS funzionano sotto il cofano. Ho utilizzato Burp Suite come strumento MITM per individuare il traffico di rete inviato e ricevuto dalle app, e su iPhone ho installato SSL Kill Switch 2 per bypassare qualsiasi blocco di certificato. È molto interessante e sorprendente vedere come tutto funzioni sotto il cofano, per un principiante come me.
Non ho avuto alcun problema con la maggior parte delle app, incluse alcune applicazioni che dovrebbero avere un'elevata sicurezza, come diverse app di mobile banking - non appena l'SSL viene rimosso, tutto è visibile in testo normale. È interessante notare che alcuni giochi per dispositivi mobili mi stanno dando problemi.
Challenge
Il traffico intercettato sembra essere un file JSON crittografato. Ad esempio,
{
"F4q6i9xe":{"aV6cLn3v":"542668","Hhgi79M1":"ynB7X5P9"},
"a3vSYuq2: {"Kn51uR4Y":
"f3SQ5sySeaoDupGhGmCD9MKt0V4naBjXXR+jDEjqU1gmL32FgS8v1/6vy61RFO/rwmXwFYZHfTRgV2XujI6U7fESlcSZjMjdeiULExVg0uFmnSgiYA5040hBtuxfFqn+lP1ZCsvnua2IQHoYZDBagkr8I9VZVxQbzivc7rv5d17qscgnD2Jd4BBImn+ohuTpxPEC2H2sLBpAldLe/5EAbXUIkF8griS73lvjyWhmHubZguNUa9EzOCH8o0UPwo5BLB8Fz7xok1GE85/wwSzrlyapQw76/U/RJBF+/0YQ75BACuE4/SfIknim9XZk2EspKrCOu/Gi2K+7pHS+jytfXHR6zTjmeMyV2o967MUVXag="}
}
Cosa ho fatto
Se ho capito bene, ora sono nel regno della decifrazione. Usando alcuni approcci analitici che ho trovato su Google, ecco alcuni dei miei risultati (alcuni possono sembrare molto ovvi e banali per gli esperti):
-
Tutte le richieste inviate dall'app sono in questo preciso formato / struttura. I nomi delle chiavi crittografati sono sempre gli stessi, solo i valori differiscono.
-
Il valore della chiave
aV6cLn3v
sembra corrispondere a una sorta di timestamp, in quanto è in costante aumento. -
I precedenti sospettavano che il valore corrispondente alla chiave
Hhgi79M1
fosse qualche bit di controllo basato sul timestamp, ma non lo è. Eseguire la stessa azione nel gioco porterà allo stesso valore, nonostante i diversi timestamp. Tuttavia, diverse azioni produrranno valori diversi. -
Il valore per la chiave
Kn51uR4Y
è dove si trova il payload effettivo. Credo che sia un JSON al di sotto della crittografia, ma non ne sono sicuro. -
I segni
/
nel payload sembrano essere separatori per segmenti di dati. Il secondo segmento/6vy61RFO/
sembra essere il bit di controllo basato sul timestamp. Perché eseguire due azioni identiche nei risultati di gioco in due JSON quasi identici, ad eccezione del timestamp e di questa particolare sezione nel payload. -
La crittografia del payload ha qualcosa a che fare con Base64 o AES, a causa della firma trailing = ('s), e le lunghezze dei diversi payloads sono sempre multipli di 4. Non sono sicuro che quest'ultimo significhi qualcosa .
-
La chiave di crittografia utilizzata sembra essere costante. Non cambia da sessioni diverse e su dispositivi diversi.
Domanda
Ho ragione nella mia analisi fino ad ora? Dove dovrei andare da qui? Con la mia conoscenza quasi nulla in questi campi, non sono sicuro di quale sia il prossimo passo da compiere. Penso che potrei aver bisogno di decompilare l'app e guardare nei binari per cercare di vedere se riesco a trovare la chiave / funzione di decrittografia che giace intorno. Ma non sono sicuro.
Sono consapevole che ci sarà un sacco di apprendimento in anticipo, ma non mi dispiace perché mi sto divertendo moltissimo e apprezzerei molto l'aiuto, anche se è solo una breve lista di argomenti e URL Dovrei esaminare.
Aggiornamento 2015/11/23
Ho scaricato i binari decifrati della app e ho eseguito un comando stringhe su di essi, quindi ho creato uno script Python per selezionare con successo la chiave di crittografia. Grazie a tutti quelli che hanno aiutato!