· ~4 λεπτά ανάγνωσης
Μια εφαρμογή αισθητήρων κίνησης και άνεσης, με προστασία από replay
Ομαδικό project για ένα μάθημα ασφάλειας IoT: αναγνώριση στάσης σώματος και πτώσεων από επιταχυνσιόμετρο, μέτρηση θερμικής άνεσης, και ένα nonce απέναντι σε μηνύματα που ξαναστέλνονται.
Στόχος
Για το μάθημα Ασφαλείς Εφαρμογές για το Διαδίκτυο των Πραγμάτων του μεταπτυχιακού μου, ένας συμφοιτητής κι εγώ φτιάξαμε μια μικρή εφαρμογή αισθητήρων ως ομαδικό project δύο ατόμων. Ένας αισθητήρας στέλνει επιτάχυνση, θερμοκρασία και υγρασία, και η εφαρμογή μετατρέπει αυτούς τους αριθμούς σε δύο πράγματα που ενδιαφέρουν έναν άνθρωπο: τι κάνει αυτός που τον φοράει (κάθεται, περπατά, είναι ξαπλωμένος, πέφτει) και αν ο χώρος είναι άνετος. Επειδή είναι μάθημα ασφάλειας, τα μηνύματα έπρεπε επίσης να αντέχουν μια απλή επίθεση replay.
Τι δείχνει η εφαρμογή
| Προβολή | Από τι φτιάχνεται |
|---|---|
| Άνεση | Γραφήματα θερμοκρασίας και υγρασίας σε πραγματικό χρόνο, μαζί με γράφημα του heat index |
| Δραστηριότητα | Καθιστός, περπάτημα, ξαπλωμένος στο πλάι, μπρούμυτα, πτώση |
| Στατιστικά | Χρόνος σε κάθε δραστηριότητα, μέση θερμοκρασία, υγρασία και heat index, και ένα διάγραμμα πίτας των δραστηριοτήτων |
Άνεση: το heat index
Η θερμοκρασία μόνη της λέει λίγα για την άνεση· οι 30 °C σε ξηρό αέρα είναι πολύ διαφορετικοί από τους 30 °C με 80% υγρασία. Χρησιμοποιήσαμε το heat index, την τυπική παλινδρόμηση (Rothfusz) στη μορφή της σε Κελσίου, όπου T η θερμοκρασία σε °C και RH η σχετική υγρασία σε %:
HI = c1 + c2*T + c3*RH + c4*T*RH + c5*T^2 + c6*RH^2
+ c7*T^2*RH + c8*T*RH^2 + c9*T^2*RH^2
c1 = -8.78469475556 c2 = 1.61139411 c3 = 2.33854883889
c4 = -0.14611605 c5 = -0.012308094 c6 = -0.0164248277778
c7 = 0.002211732 c8 = 0.00072546 c9 = -0.000003582
Ο τίτλος του γραφήματος άνεσης λέει επίσης αν οι συνθήκες είναι άνετες, με απλά κατώφλια στη θερμοκρασία και την υγρασία.
Δραστηριότητα: διαβάζοντας το διάνυσμα της επιτάχυνσης
Σε ηρεμία, το επιταχυνσιόμετρο μετρά τη βαρύτητα, οπότε ο άξονας που παίρνει το μεγαλύτερο μέρος του διανύσματος δείχνει τον προσανατολισμό του αισθητήρα. Η κίνηση φαίνεται ως αλλαγές στο μέγεθος του διανύσματος. Οι κανόνες ήταν σκόπιμα απλοί:
| Δραστηριότητα | Κανόνας |
|---|---|
| Καθιστός | Η συνιστώσα y της επιτάχυνσης είναι μεγαλύτερη από τις x και z |
| Ξαπλωμένος στο πλάι | Η συνιστώσα x είναι η μεγαλύτερη |
| Μπρούμυτα | Η συνιστώσα z είναι η μεγαλύτερη |
| Περπάτημα | Το μέτρο του διανύσματος είναι πάνω από ένα κατώφλι |
| Πτώση | Μια μεγάλη, απότομη αλλαγή στην επιτάχυνση, ή μέτρο πάνω από ένα υψηλότερο κατώφλι |
Στο τέλος κάθε εκτέλεσης, η εφαρμογή τυπώνει πόσο κράτησε κάθε δραστηριότητα και τους μέσους όρους, και σχεδιάζει το διάγραμμα πίτας.
Προστασία από replay
Χωρίς προστασία, όποιος μπορεί να υποκλέψει ένα μήνυμα μπορεί να το ξαναστείλει αργότερα, και ο παραλήπτης δεν μπορεί να ξεχωρίσει το αντίγραφο από το πρωτότυπο. Μια ηχογραφημένη ένδειξη «όλα κανονικά» θα μπορούσε να ξανασταλεί για να κρύψει μια πραγματική πτώση. Η άμυνά μας ήταν να στέλνουμε με κάθε μήνυμα ένα nonce, μια τιμή που χρησιμοποιείται μόνο μία φορά.
Τι έμαθα
Κοιτώντας πίσω, θα άλλαζα τρία πράγματα.
- Ένα nonce σταματά το replay μόνο αν ο παραλήπτης το ελέγχει. Ο παραλήπτης πρέπει να θυμάται τα nonces που έχει δεχτεί (ή να απαιτεί έναν μετρητή που μόνο αυξάνεται) και να απορρίπτει τις επαναλήψεις. Το nonce πρέπει επίσης να καλύπτεται από έναν κωδικό αυθεντικοποίησης μηνύματος, π.χ. ένα HMAC πάνω στο nonce και το payload· αλλιώς ο επιτιθέμενος απλώς αλλάζει το nonce στο μήνυμα που υπέκλεψε. Στις διαφάνειές μας περιέγραψα επίσης το nonce ως κάτι που κάνει τα δεδομένα πιο δύσκολα στην κατανόηση. Αυτό είναι εμπιστευτικότητα, που θέλει κρυπτογράφηση· η προστασία από replay και η εμπιστευτικότητα είναι διαφορετικές ιδιότητες.
- Η παλινδρόμηση του heat index ισχύει μόνο σε ζέστη. Προσαρμόστηκε για περίπου 27 °C και πάνω, με υγρασία 40% ή περισσότερο. Κάτω από αυτά, η πιο απλή φόρμουλα (ή απλώς η θερμοκρασία) είναι η τίμια απάντηση.
- Οι κανόνες με κατώφλια θέλουν εξομάλυνση. Το περπάτημα και η πτώση κοιτούν και τα δύο το μέτρο, οπότε τα κατώφλιά τους ανταγωνίζονται, και ένα μόνο θορυβώδες δείγμα μπορεί να αλλάξει την ετικέτα. Ένα μικρό κινούμενο παράθυρο, ένα low-pass φίλτρο για την κατεύθυνση της βαρύτητας και ένας έλεγχος «ακόμα ξαπλωμένος μετά την πρόσκρουση» θα έκοβαν τις περισσότερες ψεύτικες πτώσεις.
Ομαδικό project μαθήματος για το MSc στην Κυβερνοασφάλεια & Επιστήμη Δεδομένων του Πανεπιστημίου Πειραιώς.
Θέλεις τα configs ή τον κώδικα από αυτό το lab, ή έχεις κάποια ερώτηση; Στείλε μου email στο kostaspapas1023@gmail.com