Guest User

Untitled

a guest
Sep 14th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.68 KB | None | 0 0
  1. u23 - Funksicherheit
  2. ====================
  3. * momentaner Stand
  4.  
  5. * moegliche Attacken
  6. * Node IDs
  7.  
  8. * Sicherheitsmassnahmen
  9. * Pruefsummen und Signaturen
  10. * Verschluesselung
  11.  
  12. * Challenges
  13.  
  14. u23 - Funksicherheit - momentaner Stand
  15. =======================================
  16. * Die Arduinos nehmen Daten von allen moeglichen Quellen an
  17. * Nur die ID der Gegenstelle muss stimmen
  18.  
  19. * Die Daten werden nicht auf Korrektheit geprueft
  20. * Es koennte z.B. angezeigt werden, dass gerade 1337 Grad sind
  21. * ... oder dass -300 Grad sind
  22.  
  23. * Die Sensoren senden fuer alle lesbare Daten
  24.  
  25. u23 - Funksicherheit - moegliche Attacken
  26. =========================================
  27. * Einstreuen falscher Daten
  28. * subtil falsche Daten, also nur leicht veraenderte
  29. Temperatur- und Lichtwerte
  30. * komplett unsinnige Temperaturen unter -273.13 Grad Celsius
  31. oder ueber 600 Grad Celsius
  32.  
  33. * Abhoeren von fremden Daten
  34. * Hier nicht so dramatisch, es geht ja nur um Temperatur-
  35. und Lichtwerte
  36. * ... aber fuer andere Nachrichten, zum Beispiel Zutritts-
  37. codes fuer Tueren, wesentlich schlimmer
  38.  
  39. u23 - Funksicherheit - moegliche Attacken
  40. =========================================
  41. * beide Attacken basieren darauf
  42. * dass nur eine ID ueber den Kanal, auf dem gesendet und
  43. empfangen wird entscheidet, und...
  44. * ... dass die Daten nicht verschluesselt werden
  45.  
  46. * zusaetzlich haengt der zweite Teil der ersten Attacke davon
  47. ab, ob und wie die empfangenen Daten ueberprueft werden
  48.  
  49. u23 - Funksicherheit - Node IDs
  50. ====================================================
  51.  
  52. const uint64_t master_id = 0xF0F0F0F0D2;_
  53.  
  54. Wir haben beim letzten Mal Node IDs verteilt, die sich nur im
  55. letzten Byte unterscheiden.
  56.  
  57. Das ermoeglicht uns relativ einfach durch reines Ausprobieren
  58. an gueltige IDs zu kommen.
  59.  
  60. u23 - Funksicherheit - Node IDs
  61. ====================================================
  62. uint64_t id = 0xF0F0F0F000LL;_
  63. for (; id < 0xF0F0F0F100LL; id++) {
  64. unsigned long l = millis(), t = 0;
  65. radio.stopListening();
  66. radio.openReadingPipe(1, id);
  67. radio.startListening();
  68. while (!radio.available() && t == 0)
  69. if (millis() - l > 200)
  70. t = 1;
  71. if (t == 1)
  72. continue; /* auf diesem Kanal wurde nichts empfangen */
  73. else {
  74. Serial.print("ID gefunden: 0x");
  75. Serial.print(id, HEX);
  76. Serial.println();
  77. }
  78. }
  79.  
  80. u23 - Funksicherheit - Node IDs
  81. ====================================================
  82. * Die IDs, die so aufgespuert wurden, sind Kanaele, auf denen
  83. Daten von Sensoren zu Basisstationen uebertragen werden...
  84.  
  85. * ... und nichts hindert uns daran, einfach einen Kanal fuer
  86. eine eigene Sendung zu "kapern" :)
  87.  
  88. * Da wir gegen das Abhoeren eines Kanals an sich nicht viel
  89. tun koennen, muessen wir das Ausnutzen der ID so schwer wie
  90. moeglich machen
  91.  
  92. u23 - Funksicherheit - Sicherheitsmassnahmen
  93. ============================================
  94. Sicherheitsmassnahmen haengen von den Zielen, die verfolgt
  95. werden, ab:
  96.  
  97. * Schutz vor Fehlinformationen
  98. * Plausibilitaetspruefungen
  99. * Pruefsummen und Signaturen
  100.  
  101. * Abhoersicherheit
  102. * Verschluesselung
  103.  
  104. TODO: kanalwechsel
  105.  
  106. u23 - Funksicherheit - Schutz vor Fehlinformationen
  107. ===================================================
  108. Es gibt mehrere Arten von Fehlinformationen
  109.  
  110. * Auffaellige Fehlinformationen
  111. * Temperaturen unter dem absoluten Nullpunkt
  112. * oder Temperaturen bei denen die Leiterplatte schon laengst
  113. verbrannt waere
  114.  
  115. * ... und subtile
  116. * zum Beispiel Temperaturen unter 0 Grad melden,
  117. obwohl die Temperatur 5 oder 6 Grad ist
  118.  
  119. Ausserdem koennen Fehlinformationen nicht nur Absichtlich
  120. sondern auch durch Fehler an der Hardware oder Probleme bei der
  121. Signaluebertragung erzeugt werden.
  122.  
  123. u23 - Funksicherheit - Plausibilitaetspruefungen
  124. ================================================
  125. * Grosse Spruenge in der Temperatur sind sehr unwahrscheinlich
  126. * einfach den vorherigen Wert speichern und mit der neuen
  127. Temperatur vergleichen, wenn der Unterschied zu gross ist,
  128. verwerfen
  129. * funktioniert leider nicht bei Licht
  130.  
  131. * Ansonsten koennen auch statische Ueberpruefungen verwendet
  132. werden:
  133. * Temperaturen koennen nicht unter -273,13 Grad Celsius sein
  134. * bei ungefaehr 300 Grad faengt das Loetzinn auf den
  135. Leiterplatten an zu schmelzen
  136.  
  137. * Bei Tageslichtsensoren:
  138. * grosse Helligkeit mitten in der Nacht ist verdaechtig
  139. * ... die Ueberpruefung erfordert allerdings, dass wir die
  140. aktuelle Uhrzeit kennen
  141.  
  142. u23 - Funksicherheit - Pruefsummen
  143. ==================================
  144. * Durch Pruefsummen koennen manche Aenderungen erkannt werden.
  145.  
  146. * Die Summen werden einfach ans Ende der gesendeten Daten
  147. angehaengt und beim Empfang ueberprueft.
  148.  
  149. * Beispiele fuer Pruefsummen:
  150. * Die Summe der Werte in einem Datensatz, also:
  151.  
  152. summe = floor(licht + temperatur)
  153.  
  154. * Eine XOR-Verknuepfung der Daten
  155.  
  156. u23 - Funksicherheit - Pruefsummen - XOR
  157. ========================================
  158. * XOR bedeutet "Exklusiv Oder" oder "Entweder ... oder ..."
  159. * Die Wahrheitstabelle dafuer ist
  160.  
  161. a │ b │ a ^ b
  162. ───┼───┼───────
  163. 0 │ 0 │ 0
  164. 0 │ 1 │ 1
  165. 1 │ 0 │ 1
  166. 1 │ 1 │ 0
  167.  
  168. * Und so kann damit in C eine Pruefsumme gebildet werden:
  169.  
  170. char sum = 0x00;
  171. char *msg = &nachricht;
  172. for (int i = 0; i < sizeof(struct u23_nachricht); i++) {
  173. sum ^= msg[i];
  174. }
  175.  
  176. u23 - Funksicherheit - Signaturen
  177. =================================
  178. * Signaturen werden verwendet, um Daten zu "unterschreiben"
  179.  
  180. * Dafuer werden zwei Dinge benoetigt:
  181. * eine Pruefsumme der Daten die signiert werden sollen
  182. * ein geheimer Schluessel
  183.  
  184. * Um die Sicherheit der Signatur zu erhoehen, koennen mehrere
  185. feste Schluessel im Wechsel verwendet werden
  186.  
  187. * ... oder die Schluessel werden mit einem Pseudo-RNG erzeugt:
  188.  
  189. int seed = 0xDEADBEEF;
  190. unsigned char key[16];
  191.  
  192. randomSeed(seed);
  193. for (int x = 0; x < sizeof(key); x++)
  194. key[x] = (unsigned char) random(0, 256);
  195.  
  196. u23 - Funksicherheit - Signaturen - Ablauf
  197. ==========================================
  198. 1) Pruefsumme der Daten bilden
  199.  
  200. 2) Pruefsumme mit dem geheimen Schluessel verschluesseln, zum
  201. Beispiel durch XOR
  202.  
  203. 3) Senden der Daten mit der verschluesselten Signatur statt
  204. der Pruefsumme
  205.  
  206. 4) Empfang der Daten, Entschluesseln der Pruefsumme, Pruefen
  207. ob die entschluesselte Pruefsumme zu den Daten passt
  208.  
  209. 5) Wenn ja, sind die Daten von der richtigen Gegenstelle
  210. gesendet worden und korrekt
  211.  
  212. 6) Wenn nicht, dann sind die Daten entweder von einer falschen
  213. Gegenstelle gesendet worden oder beim Transfer gestoert
  214. worden
  215.  
  216. u23 - Funksicherheit - Abhoersicherheit
  217. =======================================
  218.  
  219. u23 - Funksicherheit - Verschluesselung
  220. =======================================
  221. * Wie Pruefsumme + XOR, allerdings ausgedehnt auf die ganze nachricht
  222. * mehrere keys
  223. * PRNG
  224. * (evtl public + private key?)
Add Comment
Please, Sign In to add comment