Autore Topic: Intercettare connessioni  (Letto 831 volte)

Offline lionell88

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Intercettare connessioni
« il: 21 Marzo 2014, 00:55:01 CET »
0
Salve a tutti ragazzi... Vorrei realizzare una specie di firewall. In pratica, vorrei capire come potrebbe essere possibile intercettare tutti i pacchetti TCP (ed eventualmente UDP) in entrata ed uscita e le applicazioni che richiedono connessione. Cosa dovrei andare a studiare per fare una cosa del genere? Supponiamo, ad esempio, di voler bloccare Whatsapp (ci sono già applicazioni che lo fanno; io ho solo scopi "didattici") da dove dovrei partire? Grazie mille a chi mi aiuterà.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Intercettare connessioni
« Risposta #1 il: 21 Marzo 2014, 07:54:13 CET »
0
Salve a tutti ragazzi... Vorrei realizzare una specie di firewall. In pratica, vorrei capire come potrebbe essere possibile intercettare tutti i pacchetti TCP (ed eventualmente UDP) in entrata ed uscita e le applicazioni che richiedono connessione. Cosa dovrei andare a studiare per fare una cosa del genere? Supponiamo, ad esempio, di voler bloccare Whatsapp (ci sono già applicazioni che lo fanno; io ho solo scopi "didattici") da dove dovrei partire? Grazie mille a chi mi aiuterà.

Poichè più che un'app è un servizio di sistema, direi che dovresti orientarti sul sorgente android.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Intercettare connessioni
« Risposta #2 il: 21 Marzo 2014, 11:35:15 CET »
0
Tralasciamo il fatto che il sistema operativo usato da Android Linux ha un controllo molto sofisticato dei pacchetti TCP/IP già incorporato (iptable), un firewall in user space sarebbe ridondante e molto inefficiente. Per poter accedere minimamente alla gestione del TCP/IP devi per forza essere root.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline lionell88

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:Intercettare connessioni
« Risposta #3 il: 21 Marzo 2014, 11:39:54 CET »
0
Io fino ad ora, per quanto riguarda Android, me la cavo solo con la programmazione in Java.
Per fare quello di cui sopra non so proprio da dove partire.
1) Dovrei programmare il servizio in C++ facendo chiamate di sistema?
2) Sto cercando materiale su come vedere pacchetti di rete su sistema Android ma non me ne sto uscendo per niente . Se ci sono consigli su cosa mi servirebbe o anche se esiste qualche buon libro, sarei molto grato!
Giusto per chiarire cosa vorrei imparare a fare, sul Play Store ci sono tantissime applicazioni come questa.
https://play.google.com/store/apps/details?id=com.rootuninstaller.firewall

Grazie ancora.

EDIT 1: So che devi essere root. Non voglio fare una cosa ridondante. E' "solo" per imparare. Poi non lo vedrei tanto ridondante, dato che strumenti del genere possono essere utili se per un momento volessi disabilitare la connessione per alcune applicazioni!

EDIT 2: Praticamente, grazie ad iptable, potrei configurare il firewall direttamente dall'emulatore terminale installato sul mio cell rootato! Ora, forse, non mi resta che capire come inglobare comandi del terminale in una mia app.
« Ultima modifica: 21 Marzo 2014, 12:30:11 CET da lionell88 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Intercettare connessioni
« Risposta #4 il: 21 Marzo 2014, 12:32:34 CET »
0
E' "solo" per imparare. Poi non lo vedrei tanto ridondante, dato che strumenti del genere possono essere utili se per un momento volessi disabilitare la connessione per alcune applicazioni!

Poichè non esiste una funzione "createFirewall()", se dovessi imbarcarmi in una impresa del genere, io partirei cercando di implementare un firewall su un Linux desktop. Poi, ammesso di riuscirci, penserei allo step di applicarlo ad Android.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline lionell88

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:Intercettare connessioni
« Risposta #5 il: 21 Marzo 2014, 13:47:21 CET »
0
Per il momento, sto procedendo con iptables via adb shell; ho provato alcune funzionalità. Adesso però non riesco a bloccare le connessioni che fanno riferimento ad un particolare processo con un certo pid. Su una guida di iptables ho trovato il flag --pid-owner ma, a quanto pare, su Android non esiste... come potrei ovviare?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Intercettare connessioni
« Risposta #6 il: 21 Marzo 2014, 18:35:26 CET »
0
Linux ha una interfaccia di programmazione di iptable attraverso ioctl, non solo attraverso il programma da linea di comando ufficiale. Bisogna conoscere molto bene il kernel di Linux e saper programmare in C.

Estensione pid-owner è presente nel modulo del kernel ipt_owner abilitato dal flag di compilazione IPT_OWNER_PID. Ogni produttore di dispositivi Android decide come compilare il kernel, non credo che venga abilitato, consuma RAM preziosa per mantenere in memoria tutte le informazioni necessarie. Se lo vuoi usare devi compilati un kernel custom e installarlo.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline lionell88

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:Intercettare connessioni
« Risposta #7 il: 21 Marzo 2014, 18:41:06 CET »
0
Mmm a questo punto non credo che applicazioni come quella sopra citata fanno in questo modo. Mah...

Post unito: [time]21 Marzo 2014, 18:47:37 CET[/time]
Guarda questa. Dice esplicitamente che fa uso di iptables... ha un'interfaccia che ti mostra tutti i processi che richiedono connessioni e ti consente di bloccarli uno per uno. Per fare ciò, è evidente che riesce a recuperare e ad utilizzare i pid. Richiede giustamente solo i permessi di root. Come pensi sia possibile?

Post unito: 21 Marzo 2014, 20:29:49 CET
Aggiornamenti:
Cercando materiale in rete, mi sono imbattuto in questo termine "binary iptable"... pare che i firewall che ci sono in giro ne facciano uso; tuttavia non riesco a capire cosa sarebbe!
« Ultima modifica: 21 Marzo 2014, 20:29:49 CET da lionell88, Reason: Merged DoublePost »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Intercettare connessioni
« Risposta #8 il: 21 Marzo 2014, 21:24:23 CET »
0
Sui sistemi operativi Unix, quindi anche Linux, i file eseguibili si chiamano anche binary.

Senza usare iptable puoi studiati la directory /proc per individuare dai pid dei processi i file aperti, ogni socket ha un inode. Devi conoscere molto bene i dati presenti in /proc/<pid>/fd/* e /proc/net/*.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline lionell88

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:Intercettare connessioni
« Risposta #9 il: 21 Marzo 2014, 21:36:46 CET »
0
Ok ora mi è più chiaro, grazie.
Ti linko un source https://code.google.com/p/droidwall/source/browse/trunk/src/com/googlecode/droidwall/Api.java?r=148 e, se ti va quando hai tempo, magari ti dai un'occhiata. Quello che ho capito è che, in base alla CPU presente, usa un determinato binary iptable. Penso che abbia ricompilato ad hoc un eseguibile che sostituisce iptables già presente nel kernel e poi fa uno script che lo usa.
Grazie ancora per le indicazioni.

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Intercettare connessioni
« Risposta #10 il: 22 Marzo 2014, 02:47:33 CET »
0
Iptable in questo caso è un eseguibile e non è presente nel kernel (non ha senso), nel kernel ci sono i moduli esterni o codice compilato internamente. Gli eseguibili o binary sono presenti in directory. Il codice del link precedente controlla la versione del ARM per poter utilizzare un binario ottimizzato per i nuovi dispositivi Android non compatibile con le vecchie versione del ARM.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG