{"id":44,"date":"2011-02-13T18:43:46","date_gmt":"2011-02-13T17:43:46","guid":{"rendered":"http:\/\/blog.thomasius.net\/?p=44"},"modified":"2011-02-13T18:43:46","modified_gmt":"2011-02-13T17:43:46","slug":"linux-usb-abgehort","status":"publish","type":"post","link":"https:\/\/blog.embedded-system-design.de\/index.php\/2011\/02\/13\/linux-usb-abgehort\/","title":{"rendered":"Linux: USB abgeh\u00f6rt"},"content":{"rendered":"<p>Der Universal Serial Bus (kurz USB) ist &#8211; wie sein Name schon verr\u00e4t &#8211; universell, um vielf\u00e4ltige Ger\u00e4te an einen Host anschlie\u00dfen zu k\u00f6nnen. Die paketorientierte Kommunikation l\u00e4uft dabei nach einem Master\/Slave-Prinzip ab. Bei der Entwicklung von USB-Ger\u00e4tetreibern f\u00fcr das Host-System ist es sehr hilfreich, den USB-Bus beobachten zu k\u00f6nnen. Linux bring hierf\u00fcr die wichtigen Boardmittel bereits mit.<\/p>\n<h2>Effektives Boardmittel: usbmon<\/h2>\n<p>Mit dem Modul &#8222;usbmon&#8220; ist der Linuxkern bestens ausgestattet, um den Datenverkehr auf dem USB-Bus mitzulesen. Die Ausgaben des Moduls k\u00f6nnen recht einfach von der Kommandozeile gesammelt werden. Hierzu m\u00fcssen lediglich das debugfs gemountet und das Modul usbmon geladen werden:<\/p>\n<pre># mount -t debugfs none_debugs \/sys\/kernel\/debug\n# modprobe usbmon<\/pre>\n<p>Nun kann gepr\u00fcft werden, ob die Debug-Sockets  f\u00fcr die USB-Busse existieren:<\/p>\n<pre># ls \/sys\/kernel\/debug\/usb\/usbmon\n0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u<\/pre>\n<p>In dem Verzeichnis befinden sich f\u00fcr jeden Bus Systemdateien, \u00fcber welche der Datenverkehr beobachtet werden kann.<br \/>\nDabei existieren zwei Ausgabeformate, das lt-Format und das lu-Format. Das lu-Format enth\u00e4lt gegen\u00fcber dem lt-Format zus\u00e4tzliche Informationsfelder, z.B. f\u00fcr ISO Frame-Deskriptoren und Intervalle. Das konkrete Datenformat ist in der <a href=\"http:\/\/www.kernel.org\/doc\/Documentation\/usb\/usbmon.txt\">usbmon-Dokumentation im Linuxkernel<\/a> zu finden.<br \/>\n\u00dcber den Socket 0u k\u00f6nnen alle Busse zugleich \u00fcberwacht werden. Durch Umleitung der Standardausgabe in eine Datei lassen sich die Daten aufzeichnen.<\/p>\n<pre>cat \/sys\/kernel\/debug\/usb\/usbmon\/0u &gt; capture.mon<\/pre>\n<p>Zum Vorfiltern der Daten l\u00e4\u00dft sich herausfinden, auf welchem Bus das zu untersuchende Ger\u00e4t angeschlossen ist:<\/p>\n<pre># cat \/proc\/bus\/usb\/devices<\/pre>\n<h2>Visualisierung mit dem Virtual USB Analyzer<\/h2>\n<p>Die aufgezeichneten Pakete k\u00f6nnen mit dem Open Source <a title=\"Virtual USB Analyzer\" href=\"http:\/\/vusb-analyzer.sourceforge.net\/\" target=\"_blank\">Virtual USB Analyzer<\/a> untersucht werden. Seine St\u00e4rke ist die grafische Darstellung der Zeitlinie. Wichtig ist es hierbei, dass die aufgezeichneten Dateien im lu-Format vorliegen und mit der Endung .mon versehen sind, da sie sonst nicht im <em>usbmon<\/em>-Format erkannt werden. Mit der Endung .mon.gz d\u00fcrfen sie auch gzip-komprimiert sein.<\/p>\n<div id=\"attachment_65\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/blog.thomasius.net\/wp-content\/uploads\/2011\/02\/Bildschirmfoto-VUSB.png\"><img aria-describedby=\"caption-attachment-65\" loading=\"lazy\" class=\"size-medium wp-image-65\" src=\"http:\/\/blog.thomasius.net\/wp-content\/uploads\/2011\/02\/Bildschirmfoto-VUSB-300x168.png\" alt=\"Virtual USB Analyzer (Screenshot)\" width=\"300\" height=\"168\" \/><\/a><p id=\"caption-attachment-65\" class=\"wp-caption-text\">Virtual USB Analyzer (Screenshot)<\/p><\/div>\n<h2>USB-Sniffen mit Wireshark<\/h2>\n<p>Der popul\u00e4re Protokoll-Sniffer <a href=\"http:\/\/www.wireshark.org\/\">Wireshark<\/a> beherrscht dank der libpcap neben vielf\u00e4ltigen Netzwerkprotokollen ebenfalls das Mitlesen und Interpretieren des Datenverkehrs auf dem USB-Bus \u00fcber die usbmon-Schnittstelle. Die Analyse der Pakete wird durch die GUI sehr vereinfacht.<\/p>\n<div id=\"attachment_66\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/blog.thomasius.net\/wp-content\/uploads\/2011\/02\/Bildschirmfoto-Wireshark-e1297641302127.png\"><img aria-describedby=\"caption-attachment-66\" loading=\"lazy\" class=\"size-medium wp-image-66\" src=\"http:\/\/blog.thomasius.net\/wp-content\/uploads\/2011\/02\/Bildschirmfoto-Wireshark-e1297641302127-300x211.png\" alt=\"Wireshark (Screenshot)\" width=\"300\" height=\"211\" \/><\/a><p id=\"caption-attachment-66\" class=\"wp-caption-text\">Wireshark (Screenshot)<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Der Universal Serial Bus (kurz USB) ist &#8211; wie sein Name schon verr\u00e4t &#8211; universell, um vielf\u00e4ltige Ger\u00e4te an einen Host anschlie\u00dfen zu k\u00f6nnen. Die paketorientierte Kommunikation l\u00e4uft dabei nach einem Master\/Slave-Prinzip ab. Bei der Entwicklung von USB-Ger\u00e4tetreibern f\u00fcr das Host-System ist es sehr hilfreich, den USB-Bus beobachten zu k\u00f6nnen. Linux bring hierf\u00fcr die wichtigen &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/blog.embedded-system-design.de\/index.php\/2011\/02\/13\/linux-usb-abgehort\/\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,5,8],"tags":[36,56],"_links":{"self":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/44"}],"collection":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":0,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}