SlideShare a Scribd company logo
1 of 24
Download to read offline
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ
ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ
ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΩΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ
ΣΥΣΤΗΜΑΤΩΝ
Project για το μάθημα “Ασφάλεια Κινητών και Ασύρματων Δικτύων
Επικοινωνιών”
MOBILE BOTNET
Λοΐσιος Ιωάννης 321/2007067
Παπαθανασίου Αθανάσιος 321/2008106
ΠΕΡΙΕΧΟΜΕΝΑ
Εισαγωγή ....................................................................................
Mobile Botnet .............................................................................
Βασική Δομή ..............................................................................
Master .........................................................................................
Proxy ...........................................................................................
Bot ..............................................................................................
Εργαλεία που χρησημοποιήθηκαν .............................................
Βασικές εξελίξεις .......................................................................
Επίλογος .....................................................................................
ΕΙΣΑΓΩΓΗ
Σαν ομάδα επιλέξαμε εξ αρχής διαφορετικό θέμα main project από τα
διαθέσιμα. Ο σκοπός όμως ήταν από την αρχή αυτός αφού είχαμε
καταλήξει σε αυτή την εφαρμογή πριν καν ξεκινήσουμε τα μαθήματα με τον
κ. Καμπουράκη. Ο λόγος είναι το ερευνητικό ενδιαφέρον που
παρουσιάζουν τέτοιου είδους malware καθώς και η επιθυμία μας να
εξερευνήσουμε τον κόσμο του android όχι από την κλασική οπτική των
games και applications αλλά από τη σκοπιά της ασφάλειας και των
ευπαθιών του.
Ταυτόχρονα η υλοποίηση αυτού του project ήταν μία μεγάλη
πρόκληση και για εμάς, αφού ήταν ουσιαστικά η πρώτη μας επαφή με το
περιβάλλον του android και με τον προγραμματισμό συνολικά σε αυτό το
επίπεδο.
Υπήρχαν διάφορες αντικειμενικές δυσκολίες στην εκπόνηση του
project οι οποίες θα γίνουν αντιληπτές και στη συνέχεια του
documentation. Κομβικής σημασίας όμως ήταν οι υποχρεώσεις και με τα
υπόλοιπα μαθήματα της σχολής (λόγω του ότι είμαστε επί πτυχίω φοιτητές)
καθώς και ο υλικοτεχνικός εξοπλισμός (μία συσκευή Android με μέτρια
προς κακή απόδοση).
Χωρίς να θέλουμε να μας δώσουμε “ελαφρυντικά” οι παραπάνω και
μόνο δυσκολίες ήταν αρκετές ώστε ορισμένες στιγμές να αναθεωρούμε την
επιλογή μας για το μάθημα και το project. Παρόλα αυτά, λόγω και της
επικείμενης βοήθειας – διευκόλυνσης από τον κ. Καμπουράκη και τους
ερευνητές του, δεν τα παρατήσαμε και υλοποιήσαμε το project μέχρι το
στάδιο που είχαμε εξ' αρχής σχεδιάσει, με πλήρης λειτουργικότητα.
Στη συνέχεια του documentation παρουσιάζουμε αναλυτικά τα
βήματα υλοποίησης, ιεραρχικά και ανά κομμάτι του malware. Στον κώδικα
έχουμε γράψει αρκετά επεξηγηματικά σχόλια ώστε να είναι ευανάγνωστος.
MOBILE BONET
Το Mobile Botnet είναι ένα είδος botnet το οποίο στοχεύει κινητές
συσκευές με σκοπό να διαχειριστεί κάποιες λειτουργίες του, ή και το ίδιο το
κινητό. Οι τρόποι με τους οποίους μπορεί να διοχετευθεί στις συσκευές
ποικίλουν. Μπορεί να είναι backend μίας εφαρμογής να εγκαθίσταται στο
κινητό μαζί της και μετά να τρέχει ανεξάρτητα από αυτήν (και μετά την
πιθανή διαγραφή της λοιπόν). Μπορεί να μολύνει τη συσκευή μέσω ενός
mail, ή text-message (Περισσότερα εδώ).
Το mobile botnet που υλοποιήσαμε ακολουθεί τα βασικά
χαρακτηριστικά λειτουργίας που αναφέραμε ώστε να δουλεύει σαν
malware. Τρέχει σαν service στο κινητό του χρήστη, είναι transparent που
σημαίνει ότι ενεργοποιείται κατά το άνοιγμα της εφαρμογής και λόγω του
eλεύθερου που δίνει η google με το android (μπορεί να χαρακτηριστεί ως
κενό; είναι σκόπιμο;) δεν ζητάει δικαιώματα χρήστη παρά μόνο κατά το
screenshot.
Περιοριστήκαμε σε rooted android συσκευή SONY xperia sola για τη
διευκόλυνση της υλοποίησης, αν και όπως προαναφέραμε δεν χρειάζεται
να είναι “σπασμένο” το κινητό ώστε να λειτουργήσει το malware.
ΒΑΣΙΚΗ ΔΟΜΗ
Ο βασικός σχεδιασμός του main project ακολούθησε τον παρακάτω
σχεδιασμό, αφενός ώστε να εξυπηρετηθούν οι εκάστοτε ανάγκες του
mobile botnet (ασφάλεια, διασύνδεση κλπ) και αφετέρου ώστε να γίνει και
ο κατάλληλος καταμερισμός εργασίας μεταξύ μας.
(Σχεδιαστικό περιβάλλον για network : dia – ubuntu)
Το παραπάνω σχέδιο περιέχει :
Τον master
Υλοποιεί το control των bots, δηλαδή ακούει στα bots και τα ενεργοποιεί
μέσω ενός GUI ελέγχου για τις βασικές τους λειτουργίες.
Τον proxy
Υλοποιεί το τη μεταγωγή πακέτων από και προς τον master και τα bots,
υλοποιεί τα βασικά threads για τη διαχείριση της κίνησης δικτύου.
Τα bots
Tα τερματικά χρήστη, δηλαδή τα κινητά τηλέφωνα στα οποία έχει
εγκατασταθεί το malware. Τρέχει τις βασικές κλάσεις – λειτουργίες του bot,
όπως καταγραφή κλήσης, screenshot κτλ.
Όλο το δίκτυο στήνεται πάνω σε SSL επικοινωνία, με δικής μας κατασκευής
κλειδιά και CA.
Η επικοινωνία proxy – bots προφανώς και απαιτεί ενεργοποίηση δεδομένων
από τον χρήστη – bot.
Στη συνέχεια αναλύουμε τα επιμέρους αυτά σημεία.
MASTER
PROXY
BOT
Η εφαρμογή του bot υλοποιήθηκε σε Java με χρήση του Eclipse IDE +
Android plugin και δοκιμάστηκε στο Sony Xperia Sola. Σκοπός της
εφαρμογής είναι η απομακρυσμένη κλήση λειτουργειών του κινητού
(screenshot, microphone recording, call recording) χωρίς αυτό να γίνει
αντιληπτό από το χρήστη.
Το πρώτο βήμα ήταν η δημιουργία ενός Service (RatService.java) αφού
θέλουμε η εφαρμογή να τρέχει στο background με ένα βασικό UI το οποίο
ήταν μια λευκή οθόνη.
Η Main Activity (MainActivity.java) περιέχει μόνο την έναρξη του Service
και τρέχει μόνο την πρώτη φορά.
Μετά αναλαμβάνει ένας Broadcast Receiver (autostart.java) που τρέχει το
Service κάθε φορά που ανοίγει το κινητό.
Το Service στην έναρξη τρέχει τη μέθοδο onStartCommand() σε αυτή ελέγχει
αν υπάρχει το directory .hidden και αν δεν υπάρχει το δημιούργει.
Το .hidden directory είναι ένας κρυφός φάκελος (η “.” στην αρχή του
ονόματος ενός Unix file ή directory δηλώνει ότι είναι κρυφό) στην κάρτα SD.
Επιλέχτηκε αυτή η τοποθεσία διότι η εφαρμογή μπορεί εύκολα να έχει
πρόσβαση. Αφού δημιουργηθεί το directory η onStartCommand μέθοδος
καλεί ένα καινούριο Broadcast Receiver και τρέχει το Service με την επιλογή
START_STICKY που δηλώνει στο σύστημα πως αν το Service για τον
οποιοδήποτε λόγο σταματήσει, θα πρέπει να ξανακινήσει αμέσως. Με αυτό
τον τρόπο έχουμε καλύψει όλα τα σενάρια έναρξης της εφαρμογής και
διακοπής της εφαρμογής.
Ο Broadcast Receiver που ξεκινάει η μέθοδος onStartCommand()
παρακολουθεί αν το κινητό είναι συνδεδεμένο στο Internet (Από τη στιγμή
που η εφαρμογή ελέγχεται απομακρυσμένα δεν χρειάζεται να τρέχουν
λειτουργείες τις αν το κινητό δεν είναι συνδεδεμένο). Με το που συνδεθεί
τρέχει τη μέθοδο connect().
Η μέθοδος connect() καλεί τον Connection Manager
(ConnectionManager.java) που είναι υπεύθυνος για τη δημιουργία SSL
σύνδεσης με τον proxy. Μετά την εγκαθίδρυση ασφαλής σύνδεσης σε ένα
καινούριο thread τρέχει μία επανάληψη που στην ουσία περιμένει τις
εντολές του Master και καλεί τις κατάλληλες μεθόδους.
To ScreenShot είναι περίεργη υπόθεση στο Android,
ενώ υπάρχουν Built in εντολές στο Android API που
επιτρέπουν τη λήψη screenshot, έχουν δικαίωμα να το
κάνουν μόνο στο γραφικό περιβάλλον της
εφαρμογής. Εμάς δεν μας ενδιαφέρει κάτι τέτοιο αφού
η εφαρμογή δεν έχει περιβάλλον και θέλουμε η λήψη
να γίνεται σε οποιαδήποτε κατάσταση και να είναι το
τηλέφωνο. Για την απόκτηση δικαιωμάτων λήψης
screenshot εκτός περιβάλλοντος εφαρμογής με τη
χρήση του API χρειάζεται η εφαρμογή να είναι
υπογεγραμμένη από τη google.
Το πρόβλημα το λύσαμε χρησιμοποιώντας εντολές
συστήματος. Το κάθε screenshot όπως και όλα τα
αρχεία που παράγει η εφαρμογή περιέχει στο όνομα
του ένα μοναδικό, ως προς τη συσκευή, ID και
timestamp, με αυτόν τον τρόπο αποκλείει την
πιθανότητα να λάβει ο Master δύο αρχεία με το ίδιο
ακριβώς όνομα
(π.χ.screenshot_352264054375437_1410861266.png)
Η μέθοδος startVoiceRecord αρχοκοποιέι αντικείμενο της κλάσης
RecordVoice (RecordVoice.java), με παράμετρο τη τοποθεσία
αποθήκευσης των αρχείων (.hidden) και το μοναδικό id, και καλεί τη μέθοδο
startRecording().
Η startRecording() χρησιμοποιεί την κλάση MediaRecorder από το Android
API και το παραμετροποιεί ορίζοντας την πηγή του ήχου, σε αυτήν την
περίπτωση το μικρόφωνο, τη μορφή συμπίεσης σε mpeg-4, τη τοποθεσία
αποθήκευσης του αρχείου από την παράμετρο του costractor, και τον
encoder ως ACC. Το όνομα του αρχείου, παρόμοια με το screenshot
περιέχει το μοναδικό ID και timestamp. Τέλος ξεκινάει την ηχογράφηση.
(π.χ.voicerecord_352264054375437_1404965524.mp4)
Η μέθοδος stopVoiceRecord() αντίστοιχα
καλεί τη μέθοδο stopRecording() της
RecordVoice που σταματάει την
ηχογράφηση.
Η μέθοδος startCallRecord() καλεί ένα Broadcast Receiver που
παρακολουθεί την κατάσταση των κλήσεων και τον αρχικοποιεί με την
τοποθεσία αποθήκευσης. Αυτός υλοποιείτε στην κλάση CallRecorder
(CallRecorder.java)
Στη μέθοδο onReceive() του Broadcast Receiver δημιουρφήτε και ξεκινάει
ένας phone state Listener που παρακολουθεί την κατάσταση της κλήσης.
Όταν η κατάσταση είναι OFFHOOK (γίνεται κλήση) ξεκινάει την ηχογράφηση
όπως στο voice record με μόνη διάφορα την πηγή της ηχογράφησης που
αυτή τη φορά είναι το VOICE_CALL, δηλαδή το uplink και downlink της
κλήσης. Όταν η κατάσταση είναι IDLE σταματάει τον recorder. Με αυτόν τον
τρόπο επιτυγχάνεται η ηχογράφηση της κλήσης και μόνο.
Αντίστοιχα η μέθοδος stopCallRecord σταματάει τον Broadcast Receiver
και μαζί του την ηχογράφηση των κλήσεων. Εδώ θα ήθελα να σημειωθεί η
ευκολία της ηχογράφησης του περιβάλλοντος και των κλήσεων. Τα Android
δικαιώματα που χρειάζονται είναι αυτά της πρόσβασης του χώρου
αποθήκευσης , της ηχογράφησης και της κατάστασης του τηλεφώνου.
Δικαιώματα που είναι κοινά σε πάρα πολλές εφαρμογές πολλές εφαρμογές
του Android Market και ο χρήστης, ακόμα και αν τα κοιτάξει, θα τα δεχτεί ως
φυσιολογικά. Αυτό από μόνο του δημιουργεί κενό ασφαλείας αφού δίνει τη
δυνατότητα στον οποιοδήποτε να κάνει ηχογράφηση χωρίς τη γνώση του
χρήστη του περιβάλλοντος και των κλήσεων.
Η αποστολή των αρχείων γίνεται μαζικά. Όταν ο Master ζητήσει τα αρχεία,
καλείται η μέθοδος sendAllData() της κλάσης SendFiles (SendFiles.java).
H μέθοδος sendAllData() καλεί τη μέθοδο listFiles() διαβάζει αναδρομικά τα
περιεχόμενα του .hidden
directory και αποθηκεύει σε
μία λίστα τα απόλυτα
μονοπάτια (absolute path)
των αρχείων. Αν η listFiles()
επιστρέψει κενή λίστα
σημαίνει πως δεν υπάρχουν
αρχεία για αποστολή και
στέλνει “0” στο Master ,
αλλιώς στέλνει τον αριθμό
των αρχείων (μέγεθος της
λίστας).
Έπειτα καλεί για κάθε αρχείο τη sendFile() που στέλνει το αρχείο, αφού
πρώτα το περάσει από την encodeFile(), σε μορφή BASE64 στο Master και
το διαγράφει από τη μνήμη του κινητού.
Το manifest περιγράφει στο λειτουργικό ότι χρειάζεται να ξέρει για την
εφαρμογή.
Τα δικαιώματα που απαιτεί η συγκεκριμένη εφαρμογή είναι
INTERNET : για πρόσβαση στο internet
ACCESS_NETWORK_STATE : για τον έλεγχο διαθεσιμότητας του δικτύου
RECORD_AUDIO : άδεια ηχογράφησης
READ_PHONE_STATE : παρακολούθηση της κατάστασης του τηλεφώνου
WRITE_EXTERNAL_STORAGE : δικαίωμα εγγραφής δεδομένων στην κάρτα SD
RECEIVE_BOOT_COMPLETED : στέλνει μήνυμα όταν ανοίξει η συσκευή
Ενημερώνει το λειτουργικό πιά κλάση θα τρέξει μόλις τελειώσει το Boot
και πώς η εφαρμογή, ακόμα και αν είναι στο foreground είναι διάφανη
και τέλος πως το Service είναι δικό
του proccess, που χρειάζεται για τη
χρήση internet.
SSL
Ξεκινήσαμε με τη δημιουργία self-signed CA με τη χρήση του εργαλείου
openssl, και στη συνέχεια δημιουργήσαμε certificates για κάθε ένα από τα
τρία μέρη του συστήματος και τα υπογράψαμε με τη CA. Για την ευκολότερη
χρήση τους τα πακετάραμε το καθένα ξεχωριστά με τo κλειδί του και τη CA
σε αρχεία PKCS12 και τη CA σε ένα αρχείο JKS για τον Proxy του keytool της
Java διότι εξαιτίας ενός bug στις βιβλιοθήκες της Java δεν το ξεχώριζε στα
PKCS και σε BKS πακέτο (Bouncy Castle format Java Keystore) για το bot
αφού δεν αναγνωρίζει τα JKS πακέτα.
Η δημιουργία της SSL σύνδεσης από εκεί και πέρα είναι κοινή για τον Master
και το Bot που συνδέονται σαν clients στον proxy. Δημιουργείται ένα
TrustStore με τα πακέτα JKS και BKS αντίστοιχα, ένα KeyStore με τα PKCS και
το SSL socket με αυτά τα πιστοποιητικά. Αντίστοιχα στον Proxy δημιουργείται
SSL Server Socket.
Στο Android η τα πακέτα των πιστποιητικών
μπορούν να ανοιχτούν μόνο μεσα από το φάκελο
raw με την εντολή
load(aplicationContext.getResources() .openRawResource(R.raw.rootca
).
Αυτή η διαδικασία δεν αναγνωρίζει τα JKS πακέτα, και PKCS διαβάζονται
λάθος όταν περιέχουν μόνο τη CA από bug της JAVA.
Εργαλεία που χρησημοποιήθηκαν
Τα εργαλεία που χρησιμοποιήσαμε είναι : Eclipse με Android sdk για τη
δημιουργία του bot, NetBeans για τη δημιουργία του master και proxy.
Χρησημοποιήσαμε Arch Linux PC για την ανάπτυξη του android και
Windows PC για τον Proxy και τον Master.
Στην αρχή της ανάπτυξης της εφαρμογής παρουσιάστηκαν αρκετά
προβλήματα λειτουργίας στο Windows PC τα οποία και είχαν επισημανθεί
και στον κ. Καμπουράκη. Το κύριο πρόβλημα ήταν η επικοινωνία με το Git
και το ανέβασμα του κώδικα από τον Παπαθανασίου Θανάση. Το
πρόβλημα λύθηκε.
Επίσης το ένα κινητό του εξοπλισμού μας δεν βοήθησε ώστε να
τεστάρουμε το malware σε περισσότερες από μία συσκευές. Είχαμε να
αντιμετωπίσουμε διάφορα προβλήματα κυρίως λόγω καθυστέρησης
επεξεργασίας πράγμα που σημαίνει ότι το botnet δουλεύει καλύτερα σε
κινητά με καλύτερα τεχνικά χαρακτηριστικά από του έχοντος.
Επίλογος
Με επιτυχία ολοκληρώθηκαν τα βήματα – λειτουργίες που
περιγράψαμε παραπάνω και όπως αποτυπώνονται στα screenshots αλλά
και η live παρουσίαση της εφαρμογής στο γραφείο της εξέτασης, ο τελικός
σκοπός επιτεύχθηκε με μία πλήρως λειτουργική εφαρμογή που όμως
“παίρνει” αρκετή βελτίωση. Μπορούν να προστεθούν και άλλες λειτουργίες
για τα bot όπως κάμερα, remote άνοιγμα και κλείσιμο εφαρμογών καθώς
και streaming λειτουργία της. Η έλλειψη χρόνου και το έτος φοίτησης ήταν
καθοριστικοί παράγοντες που μας καθυστέρησαν από την περεταίρω
ενασχόληση.

More Related Content

Viewers also liked (8)

Bantotal Ctarget: una Solución Life Banking
Bantotal Ctarget: una Solución Life Banking      Bantotal Ctarget: una Solución Life Banking
Bantotal Ctarget: una Solución Life Banking
 
Apresentação Comunicação FACISC TAC - Campos Novos 03.02.11
Apresentação Comunicação FACISC TAC - Campos Novos 03.02.11Apresentação Comunicação FACISC TAC - Campos Novos 03.02.11
Apresentação Comunicação FACISC TAC - Campos Novos 03.02.11
 
Shakespeare
ShakespeareShakespeare
Shakespeare
 
Credit Crisis in US from 2007-2008
Credit Crisis in US from 2007-2008Credit Crisis in US from 2007-2008
Credit Crisis in US from 2007-2008
 
Webinar-Compensating the Workforce of Tomorrow
Webinar-Compensating the Workforce of TomorrowWebinar-Compensating the Workforce of Tomorrow
Webinar-Compensating the Workforce of Tomorrow
 
ERROMA
ERROMAERROMA
ERROMA
 
Vivências em Biodanza
Vivências em BiodanzaVivências em Biodanza
Vivências em Biodanza
 
The evolution of kin selection
The evolution of kin selectionThe evolution of kin selection
The evolution of kin selection
 

Similar to projectRATdoc

Design and implementation of an Automation Mechanism for the configuration of...
Design and implementation of an Automation Mechanism for the configuration of...Design and implementation of an Automation Mechanism for the configuration of...
Design and implementation of an Automation Mechanism for the configuration of...
ISSEL
 
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...
ISSEL
 
Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...
Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...
Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...
ISSEL
 
Μαϊτης Αντώνιος
Μαϊτης ΑντώνιοςΜαϊτης Αντώνιος
Μαϊτης Αντώνιος
Antonis Maitis
 
Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή διαδικασίας αρχικής προσφοράς ...
Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή  διαδικασίας αρχικής προσφοράς ...Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή  διαδικασίας αρχικής προσφοράς ...
Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή διαδικασίας αρχικής προσφοράς ...
ISSEL
 
Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...
Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...
Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...
ISSEL
 

Similar to projectRATdoc (20)

Design and implementation of an Automation Mechanism for the configuration of...
Design and implementation of an Automation Mechanism for the configuration of...Design and implementation of an Automation Mechanism for the configuration of...
Design and implementation of an Automation Mechanism for the configuration of...
 
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης της παραμετροποίησης ρομποτι...
 
App inventor2
App inventor2App inventor2
App inventor2
 
εισαγωγη στην δημιουργια προγραμματων για φορητες συσκευες (iOS και Android)
εισαγωγη στην δημιουργια προγραμματων για φορητες συσκευες (iOS και Android)εισαγωγη στην δημιουργια προγραμματων για φορητες συσκευες (iOS και Android)
εισαγωγη στην δημιουργια προγραμματων για φορητες συσκευες (iOS και Android)
 
Pialoglou_Alexandros_Dip_2015
Pialoglou_Alexandros_Dip_2015Pialoglou_Alexandros_Dip_2015
Pialoglou_Alexandros_Dip_2015
 
AppDevelopment1-Presentation.pdf
AppDevelopment1-Presentation.pdfAppDevelopment1-Presentation.pdf
AppDevelopment1-Presentation.pdf
 
Ασφάλεια Android - Βασικές αρχές, αδυναμίες και λύσεις
Ασφάλεια Android - Βασικές αρχές, αδυναμίες και λύσειςΑσφάλεια Android - Βασικές αρχές, αδυναμίες και λύσεις
Ασφάλεια Android - Βασικές αρχές, αδυναμίες και λύσεις
 
Embedded Systems Report
Embedded Systems ReportEmbedded Systems Report
Embedded Systems Report
 
G meteo. τεχνολογια
G meteo. τεχνολογια G meteo. τεχνολογια
G meteo. τεχνολογια
 
Trik studio-01
Trik studio-01Trik studio-01
Trik studio-01
 
ArduinoBots - 5ο Φεστιβάλ Ψηφιακής Δημιουργίας
ArduinoBots - 5ο Φεστιβάλ Ψηφιακής ΔημιουργίαςArduinoBots - 5ο Φεστιβάλ Ψηφιακής Δημιουργίας
ArduinoBots - 5ο Φεστιβάλ Ψηφιακής Δημιουργίας
 
Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...
Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...
Σχεδιασμός και υλοποίηση πλήρους και αυτοματοποιημένου εργαλείου ελέγχων ασφά...
 
εε ομαδας4
εε ομαδας4εε ομαδας4
εε ομαδας4
 
Μαϊτης Αντώνιος
Μαϊτης ΑντώνιοςΜαϊτης Αντώνιος
Μαϊτης Αντώνιος
 
PhaST_flyer_01
PhaST_flyer_01PhaST_flyer_01
PhaST_flyer_01
 
Γονικός έλεγχος
Γονικός έλεγχοςΓονικός έλεγχος
Γονικός έλεγχος
 
Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή διαδικασίας αρχικής προσφοράς ...
Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή  διαδικασίας αρχικής προσφοράς ...Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή  διαδικασίας αρχικής προσφοράς ...
Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή διαδικασίας αρχικής προσφοράς ...
 
Παρουσίαση του Πακέτου Shiny
Παρουσίαση του Πακέτου ShinyΠαρουσίαση του Πακέτου Shiny
Παρουσίαση του Πακέτου Shiny
 
Παρουσίαση micro:bit & MakeCode
Παρουσίαση micro:bit & MakeCodeΠαρουσίαση micro:bit & MakeCode
Παρουσίαση micro:bit & MakeCode
 
Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...
Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...
Μοντελοστρεφής ανάπτυξη λογισμικού για IoT συσκευές πραγματικού χρόνου και χα...
 

projectRATdoc

  • 1. ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΩΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Project για το μάθημα “Ασφάλεια Κινητών και Ασύρματων Δικτύων Επικοινωνιών” MOBILE BOTNET Λοΐσιος Ιωάννης 321/2007067 Παπαθανασίου Αθανάσιος 321/2008106
  • 2. ΠΕΡΙΕΧΟΜΕΝΑ Εισαγωγή .................................................................................... Mobile Botnet ............................................................................. Βασική Δομή .............................................................................. Master ......................................................................................... Proxy ........................................................................................... Bot .............................................................................................. Εργαλεία που χρησημοποιήθηκαν ............................................. Βασικές εξελίξεις ....................................................................... Επίλογος .....................................................................................
  • 3. ΕΙΣΑΓΩΓΗ Σαν ομάδα επιλέξαμε εξ αρχής διαφορετικό θέμα main project από τα διαθέσιμα. Ο σκοπός όμως ήταν από την αρχή αυτός αφού είχαμε καταλήξει σε αυτή την εφαρμογή πριν καν ξεκινήσουμε τα μαθήματα με τον κ. Καμπουράκη. Ο λόγος είναι το ερευνητικό ενδιαφέρον που παρουσιάζουν τέτοιου είδους malware καθώς και η επιθυμία μας να εξερευνήσουμε τον κόσμο του android όχι από την κλασική οπτική των games και applications αλλά από τη σκοπιά της ασφάλειας και των ευπαθιών του. Ταυτόχρονα η υλοποίηση αυτού του project ήταν μία μεγάλη πρόκληση και για εμάς, αφού ήταν ουσιαστικά η πρώτη μας επαφή με το περιβάλλον του android και με τον προγραμματισμό συνολικά σε αυτό το επίπεδο. Υπήρχαν διάφορες αντικειμενικές δυσκολίες στην εκπόνηση του project οι οποίες θα γίνουν αντιληπτές και στη συνέχεια του documentation. Κομβικής σημασίας όμως ήταν οι υποχρεώσεις και με τα υπόλοιπα μαθήματα της σχολής (λόγω του ότι είμαστε επί πτυχίω φοιτητές) καθώς και ο υλικοτεχνικός εξοπλισμός (μία συσκευή Android με μέτρια προς κακή απόδοση). Χωρίς να θέλουμε να μας δώσουμε “ελαφρυντικά” οι παραπάνω και μόνο δυσκολίες ήταν αρκετές ώστε ορισμένες στιγμές να αναθεωρούμε την επιλογή μας για το μάθημα και το project. Παρόλα αυτά, λόγω και της επικείμενης βοήθειας – διευκόλυνσης από τον κ. Καμπουράκη και τους ερευνητές του, δεν τα παρατήσαμε και υλοποιήσαμε το project μέχρι το στάδιο που είχαμε εξ' αρχής σχεδιάσει, με πλήρης λειτουργικότητα. Στη συνέχεια του documentation παρουσιάζουμε αναλυτικά τα βήματα υλοποίησης, ιεραρχικά και ανά κομμάτι του malware. Στον κώδικα έχουμε γράψει αρκετά επεξηγηματικά σχόλια ώστε να είναι ευανάγνωστος.
  • 4. MOBILE BONET Το Mobile Botnet είναι ένα είδος botnet το οποίο στοχεύει κινητές συσκευές με σκοπό να διαχειριστεί κάποιες λειτουργίες του, ή και το ίδιο το κινητό. Οι τρόποι με τους οποίους μπορεί να διοχετευθεί στις συσκευές ποικίλουν. Μπορεί να είναι backend μίας εφαρμογής να εγκαθίσταται στο κινητό μαζί της και μετά να τρέχει ανεξάρτητα από αυτήν (και μετά την πιθανή διαγραφή της λοιπόν). Μπορεί να μολύνει τη συσκευή μέσω ενός mail, ή text-message (Περισσότερα εδώ). Το mobile botnet που υλοποιήσαμε ακολουθεί τα βασικά χαρακτηριστικά λειτουργίας που αναφέραμε ώστε να δουλεύει σαν malware. Τρέχει σαν service στο κινητό του χρήστη, είναι transparent που σημαίνει ότι ενεργοποιείται κατά το άνοιγμα της εφαρμογής και λόγω του eλεύθερου που δίνει η google με το android (μπορεί να χαρακτηριστεί ως κενό; είναι σκόπιμο;) δεν ζητάει δικαιώματα χρήστη παρά μόνο κατά το screenshot. Περιοριστήκαμε σε rooted android συσκευή SONY xperia sola για τη διευκόλυνση της υλοποίησης, αν και όπως προαναφέραμε δεν χρειάζεται να είναι “σπασμένο” το κινητό ώστε να λειτουργήσει το malware.
  • 5. ΒΑΣΙΚΗ ΔΟΜΗ Ο βασικός σχεδιασμός του main project ακολούθησε τον παρακάτω σχεδιασμό, αφενός ώστε να εξυπηρετηθούν οι εκάστοτε ανάγκες του mobile botnet (ασφάλεια, διασύνδεση κλπ) και αφετέρου ώστε να γίνει και ο κατάλληλος καταμερισμός εργασίας μεταξύ μας. (Σχεδιαστικό περιβάλλον για network : dia – ubuntu) Το παραπάνω σχέδιο περιέχει : Τον master Υλοποιεί το control των bots, δηλαδή ακούει στα bots και τα ενεργοποιεί μέσω ενός GUI ελέγχου για τις βασικές τους λειτουργίες.
  • 6. Τον proxy Υλοποιεί το τη μεταγωγή πακέτων από και προς τον master και τα bots, υλοποιεί τα βασικά threads για τη διαχείριση της κίνησης δικτύου. Τα bots Tα τερματικά χρήστη, δηλαδή τα κινητά τηλέφωνα στα οποία έχει εγκατασταθεί το malware. Τρέχει τις βασικές κλάσεις – λειτουργίες του bot, όπως καταγραφή κλήσης, screenshot κτλ. Όλο το δίκτυο στήνεται πάνω σε SSL επικοινωνία, με δικής μας κατασκευής κλειδιά και CA. Η επικοινωνία proxy – bots προφανώς και απαιτεί ενεργοποίηση δεδομένων από τον χρήστη – bot. Στη συνέχεια αναλύουμε τα επιμέρους αυτά σημεία.
  • 8.
  • 10. BOT Η εφαρμογή του bot υλοποιήθηκε σε Java με χρήση του Eclipse IDE + Android plugin και δοκιμάστηκε στο Sony Xperia Sola. Σκοπός της εφαρμογής είναι η απομακρυσμένη κλήση λειτουργειών του κινητού (screenshot, microphone recording, call recording) χωρίς αυτό να γίνει αντιληπτό από το χρήστη. Το πρώτο βήμα ήταν η δημιουργία ενός Service (RatService.java) αφού θέλουμε η εφαρμογή να τρέχει στο background με ένα βασικό UI το οποίο ήταν μια λευκή οθόνη. Η Main Activity (MainActivity.java) περιέχει μόνο την έναρξη του Service και τρέχει μόνο την πρώτη φορά.
  • 11. Μετά αναλαμβάνει ένας Broadcast Receiver (autostart.java) που τρέχει το Service κάθε φορά που ανοίγει το κινητό. Το Service στην έναρξη τρέχει τη μέθοδο onStartCommand() σε αυτή ελέγχει αν υπάρχει το directory .hidden και αν δεν υπάρχει το δημιούργει. Το .hidden directory είναι ένας κρυφός φάκελος (η “.” στην αρχή του ονόματος ενός Unix file ή directory δηλώνει ότι είναι κρυφό) στην κάρτα SD. Επιλέχτηκε αυτή η τοποθεσία διότι η εφαρμογή μπορεί εύκολα να έχει πρόσβαση. Αφού δημιουργηθεί το directory η onStartCommand μέθοδος καλεί ένα καινούριο Broadcast Receiver και τρέχει το Service με την επιλογή START_STICKY που δηλώνει στο σύστημα πως αν το Service για τον
  • 12. οποιοδήποτε λόγο σταματήσει, θα πρέπει να ξανακινήσει αμέσως. Με αυτό τον τρόπο έχουμε καλύψει όλα τα σενάρια έναρξης της εφαρμογής και διακοπής της εφαρμογής. Ο Broadcast Receiver που ξεκινάει η μέθοδος onStartCommand() παρακολουθεί αν το κινητό είναι συνδεδεμένο στο Internet (Από τη στιγμή που η εφαρμογή ελέγχεται απομακρυσμένα δεν χρειάζεται να τρέχουν λειτουργείες τις αν το κινητό δεν είναι συνδεδεμένο). Με το που συνδεθεί τρέχει τη μέθοδο connect().
  • 13. Η μέθοδος connect() καλεί τον Connection Manager (ConnectionManager.java) που είναι υπεύθυνος για τη δημιουργία SSL σύνδεσης με τον proxy. Μετά την εγκαθίδρυση ασφαλής σύνδεσης σε ένα καινούριο thread τρέχει μία επανάληψη που στην ουσία περιμένει τις
  • 14. εντολές του Master και καλεί τις κατάλληλες μεθόδους. To ScreenShot είναι περίεργη υπόθεση στο Android, ενώ υπάρχουν Built in εντολές στο Android API που επιτρέπουν τη λήψη screenshot, έχουν δικαίωμα να το κάνουν μόνο στο γραφικό περιβάλλον της εφαρμογής. Εμάς δεν μας ενδιαφέρει κάτι τέτοιο αφού η εφαρμογή δεν έχει περιβάλλον και θέλουμε η λήψη να γίνεται σε οποιαδήποτε κατάσταση και να είναι το τηλέφωνο. Για την απόκτηση δικαιωμάτων λήψης screenshot εκτός περιβάλλοντος εφαρμογής με τη χρήση του API χρειάζεται η εφαρμογή να είναι υπογεγραμμένη από τη google. Το πρόβλημα το λύσαμε χρησιμοποιώντας εντολές συστήματος. Το κάθε screenshot όπως και όλα τα αρχεία που παράγει η εφαρμογή περιέχει στο όνομα του ένα μοναδικό, ως προς τη συσκευή, ID και timestamp, με αυτόν τον τρόπο αποκλείει την πιθανότητα να λάβει ο Master δύο αρχεία με το ίδιο
  • 15. ακριβώς όνομα (π.χ.screenshot_352264054375437_1410861266.png) Η μέθοδος startVoiceRecord αρχοκοποιέι αντικείμενο της κλάσης RecordVoice (RecordVoice.java), με παράμετρο τη τοποθεσία αποθήκευσης των αρχείων (.hidden) και το μοναδικό id, και καλεί τη μέθοδο startRecording(). Η startRecording() χρησιμοποιεί την κλάση MediaRecorder από το Android API και το παραμετροποιεί ορίζοντας την πηγή του ήχου, σε αυτήν την περίπτωση το μικρόφωνο, τη μορφή συμπίεσης σε mpeg-4, τη τοποθεσία αποθήκευσης του αρχείου από την παράμετρο του costractor, και τον encoder ως ACC. Το όνομα του αρχείου, παρόμοια με το screenshot περιέχει το μοναδικό ID και timestamp. Τέλος ξεκινάει την ηχογράφηση. (π.χ.voicerecord_352264054375437_1404965524.mp4)
  • 16. Η μέθοδος stopVoiceRecord() αντίστοιχα καλεί τη μέθοδο stopRecording() της RecordVoice που σταματάει την ηχογράφηση. Η μέθοδος startCallRecord() καλεί ένα Broadcast Receiver που παρακολουθεί την κατάσταση των κλήσεων και τον αρχικοποιεί με την τοποθεσία αποθήκευσης. Αυτός υλοποιείτε στην κλάση CallRecorder (CallRecorder.java) Στη μέθοδο onReceive() του Broadcast Receiver δημιουρφήτε και ξεκινάει ένας phone state Listener που παρακολουθεί την κατάσταση της κλήσης. Όταν η κατάσταση είναι OFFHOOK (γίνεται κλήση) ξεκινάει την ηχογράφηση όπως στο voice record με μόνη διάφορα την πηγή της ηχογράφησης που
  • 17. αυτή τη φορά είναι το VOICE_CALL, δηλαδή το uplink και downlink της κλήσης. Όταν η κατάσταση είναι IDLE σταματάει τον recorder. Με αυτόν τον τρόπο επιτυγχάνεται η ηχογράφηση της κλήσης και μόνο. Αντίστοιχα η μέθοδος stopCallRecord σταματάει τον Broadcast Receiver και μαζί του την ηχογράφηση των κλήσεων. Εδώ θα ήθελα να σημειωθεί η ευκολία της ηχογράφησης του περιβάλλοντος και των κλήσεων. Τα Android δικαιώματα που χρειάζονται είναι αυτά της πρόσβασης του χώρου αποθήκευσης , της ηχογράφησης και της κατάστασης του τηλεφώνου. Δικαιώματα που είναι κοινά σε πάρα πολλές εφαρμογές πολλές εφαρμογές του Android Market και ο χρήστης, ακόμα και αν τα κοιτάξει, θα τα δεχτεί ως φυσιολογικά. Αυτό από μόνο του δημιουργεί κενό ασφαλείας αφού δίνει τη δυνατότητα στον οποιοδήποτε να κάνει ηχογράφηση χωρίς τη γνώση του
  • 18. χρήστη του περιβάλλοντος και των κλήσεων. Η αποστολή των αρχείων γίνεται μαζικά. Όταν ο Master ζητήσει τα αρχεία, καλείται η μέθοδος sendAllData() της κλάσης SendFiles (SendFiles.java). H μέθοδος sendAllData() καλεί τη μέθοδο listFiles() διαβάζει αναδρομικά τα περιεχόμενα του .hidden directory και αποθηκεύει σε μία λίστα τα απόλυτα μονοπάτια (absolute path) των αρχείων. Αν η listFiles() επιστρέψει κενή λίστα σημαίνει πως δεν υπάρχουν αρχεία για αποστολή και στέλνει “0” στο Master , αλλιώς στέλνει τον αριθμό των αρχείων (μέγεθος της
  • 19. λίστας). Έπειτα καλεί για κάθε αρχείο τη sendFile() που στέλνει το αρχείο, αφού πρώτα το περάσει από την encodeFile(), σε μορφή BASE64 στο Master και το διαγράφει από τη μνήμη του κινητού.
  • 20. Το manifest περιγράφει στο λειτουργικό ότι χρειάζεται να ξέρει για την εφαρμογή. Τα δικαιώματα που απαιτεί η συγκεκριμένη εφαρμογή είναι INTERNET : για πρόσβαση στο internet ACCESS_NETWORK_STATE : για τον έλεγχο διαθεσιμότητας του δικτύου RECORD_AUDIO : άδεια ηχογράφησης READ_PHONE_STATE : παρακολούθηση της κατάστασης του τηλεφώνου WRITE_EXTERNAL_STORAGE : δικαίωμα εγγραφής δεδομένων στην κάρτα SD RECEIVE_BOOT_COMPLETED : στέλνει μήνυμα όταν ανοίξει η συσκευή Ενημερώνει το λειτουργικό πιά κλάση θα τρέξει μόλις τελειώσει το Boot και πώς η εφαρμογή, ακόμα και αν είναι στο foreground είναι διάφανη και τέλος πως το Service είναι δικό του proccess, που χρειάζεται για τη χρήση internet.
  • 21. SSL Ξεκινήσαμε με τη δημιουργία self-signed CA με τη χρήση του εργαλείου openssl, και στη συνέχεια δημιουργήσαμε certificates για κάθε ένα από τα τρία μέρη του συστήματος και τα υπογράψαμε με τη CA. Για την ευκολότερη χρήση τους τα πακετάραμε το καθένα ξεχωριστά με τo κλειδί του και τη CA σε αρχεία PKCS12 και τη CA σε ένα αρχείο JKS για τον Proxy του keytool της Java διότι εξαιτίας ενός bug στις βιβλιοθήκες της Java δεν το ξεχώριζε στα PKCS και σε BKS πακέτο (Bouncy Castle format Java Keystore) για το bot αφού δεν αναγνωρίζει τα JKS πακέτα.
  • 22. Η δημιουργία της SSL σύνδεσης από εκεί και πέρα είναι κοινή για τον Master και το Bot που συνδέονται σαν clients στον proxy. Δημιουργείται ένα TrustStore με τα πακέτα JKS και BKS αντίστοιχα, ένα KeyStore με τα PKCS και το SSL socket με αυτά τα πιστοποιητικά. Αντίστοιχα στον Proxy δημιουργείται SSL Server Socket.
  • 23. Στο Android η τα πακέτα των πιστποιητικών μπορούν να ανοιχτούν μόνο μεσα από το φάκελο raw με την εντολή load(aplicationContext.getResources() .openRawResource(R.raw.rootca ). Αυτή η διαδικασία δεν αναγνωρίζει τα JKS πακέτα, και PKCS διαβάζονται λάθος όταν περιέχουν μόνο τη CA από bug της JAVA.
  • 24. Εργαλεία που χρησημοποιήθηκαν Τα εργαλεία που χρησιμοποιήσαμε είναι : Eclipse με Android sdk για τη δημιουργία του bot, NetBeans για τη δημιουργία του master και proxy. Χρησημοποιήσαμε Arch Linux PC για την ανάπτυξη του android και Windows PC για τον Proxy και τον Master. Στην αρχή της ανάπτυξης της εφαρμογής παρουσιάστηκαν αρκετά προβλήματα λειτουργίας στο Windows PC τα οποία και είχαν επισημανθεί και στον κ. Καμπουράκη. Το κύριο πρόβλημα ήταν η επικοινωνία με το Git και το ανέβασμα του κώδικα από τον Παπαθανασίου Θανάση. Το πρόβλημα λύθηκε. Επίσης το ένα κινητό του εξοπλισμού μας δεν βοήθησε ώστε να τεστάρουμε το malware σε περισσότερες από μία συσκευές. Είχαμε να αντιμετωπίσουμε διάφορα προβλήματα κυρίως λόγω καθυστέρησης επεξεργασίας πράγμα που σημαίνει ότι το botnet δουλεύει καλύτερα σε κινητά με καλύτερα τεχνικά χαρακτηριστικά από του έχοντος. Επίλογος Με επιτυχία ολοκληρώθηκαν τα βήματα – λειτουργίες που περιγράψαμε παραπάνω και όπως αποτυπώνονται στα screenshots αλλά και η live παρουσίαση της εφαρμογής στο γραφείο της εξέτασης, ο τελικός σκοπός επιτεύχθηκε με μία πλήρως λειτουργική εφαρμογή που όμως “παίρνει” αρκετή βελτίωση. Μπορούν να προστεθούν και άλλες λειτουργίες για τα bot όπως κάμερα, remote άνοιγμα και κλείσιμο εφαρμογών καθώς και streaming λειτουργία της. Η έλλειψη χρόνου και το έτος φοίτησης ήταν καθοριστικοί παράγοντες που μας καθυστέρησαν από την περεταίρω ενασχόληση.