{"id":4683,"date":"2014-09-02T00:39:39","date_gmt":"2014-09-01T22:39:39","guid":{"rendered":"http:\/\/security-planet.de\/?p=4683"},"modified":"2014-09-02T00:39:39","modified_gmt":"2014-09-01T22:39:39","slug":"ssh-client-konfiguration-unter-macos","status":"publish","type":"post","link":"https:\/\/cyber-fi.net\/index.php\/2014\/09\/02\/ssh-client-konfiguration-unter-macos\/","title":{"rendered":"SSH-Client-Konfiguration unter MacOS"},"content":{"rendered":"<p>Beim <a href=\"http:\/\/security-planet.de\/2014\/09\/01\/konfiguration-von-ssh-auf-cisco-asa-und-ios\/\" title=\"Konfiguration von SSH auf Cisco ASA und IOS\">letzten Beitrag zur SSH-Konfiguration<\/a> unter Cisco IOS und Cisco ASA fiel mir noch ein, dass man \u00fcber sinnvolle Anpassungen der Client-Konfiguration auch mal schreiben sollte. Zumindest unter MacOS (und mindestens auch unter Debian und \u00e4lterem Ubuntu Linux) wird standardm\u00e4\u00dfig nicht immer die optimale Kryptographie verwendet.<br \/>\nDie SSH-Parameter k\u00f6nnen an zwei Stellen konfiguriert werden:<\/p>\n<ul>\n<li>systemweit unter \/etc\/ssh_config<\/li>\n<li>per User unter ~\/.ssh\/config<\/li>\n<\/ul>\n<p>In der systemweiten SSH-Config befinden sich z.B. die folgenden drei Zeilen, die weite Teile der verwendeten Kryptographie bestimmen (genauer gesagt zeigen sie die Defaults):<\/p>\n<pre class><code>#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour\n#KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1\n#MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96<\/code><\/pre>\n<p>Was kann\/sollte man \u00e4ndern:<br \/>\n<b><br \/>\nCiphers<\/b><br \/>\nWer keine legacy Systeme zu pflegen hat, der k\u00f6nnte alle nicht-AES ciphers entfernen. Aber Ger\u00e4te wie 2950 Switche sind halt auch noch ab und an anzutreffen. Daher muss man in so einem Fall 3des-cbc auch konfiguriert haben. Die Cipher-Zeile k\u00f6nnte dann folgenderma\u00dfen aussehen:<\/p>\n<pre class><code>Ciphers aes256-ctr,aes128-ctr,aes256-cbc,aes128-cbc,3des-cbc<\/code><\/pre>\n<p>Laut Manpage (und basierend auf der sowohl unter Mavericks und Yosemite verwendeten OpenSSH-Version 6.2p2) sollten auch die moderneren GCM-Typen unterst\u00fctzt sein. Wenn die konfiguriert sind, meldet der SSH-Client aber \u201eBad SSH2 cipher spec\u201c.<br \/>\nBeim Zugriff auf Cisco Router und Switche kommen typischerweise die <a href=\"http:\/\/de.wikipedia.org\/wiki\/Cipher_Block_Chaining_Mode\" target=\"_blank\" rel=\"noopener noreferrer\">CBC-Versionen<\/a> zum Einsatz, da <a href=\"http:\/\/de.wikipedia.org\/wiki\/Counter_Mode\" target=\"_blank\" rel=\"noopener noreferrer\">CTR<\/a> erst ab IOS 15.4 unterst\u00fctzt ist.<\/p>\n<p><b>KexAlgorithms<\/b><br \/>\nHier wird der Key-Exchange gesteuert. Meine Konfig-Zeile auf dem Mac ist die folgende:<\/p>\n<pre class><code>KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1<\/code><\/pre>\n<p>Die ElipticCurve Algorithmen habe ich entfernt, da diese im Verdacht stehen Backdoors zu beinhalten. Die vermutlich vertrauensw\u00fcrdige <a href=\"http:\/\/cr.yp.to\/ecdh.html\" target=\"_blank\" rel=\"noopener noreferrer\">curve25519 von D.J. Bernstein<\/a> ist erst in OpenSSH 6.6p1 enthalten. Diese werde ich bei Verf\u00fcgbarkeit mit aufnehmen. Als letztes in der Zeile ist weiterhin ein Group1-Exchange (768 Bit), der f\u00fcr Legacy-Ger\u00e4te ben\u00f6tigt wird.<\/p>\n<p><b>MACs<\/b><br \/>\nAm meisten st\u00f6rt mich, dass eine MD5-Methode die h\u00f6chste Priorit\u00e4t hat, gefolgt von einer SHA1-Methode. Da sollte die Reihenfolge angepasst werden:<\/p>\n<pre class><code>MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,hmac-sha1<\/code><\/pre>\n<p>Interessant sind die etm-MACs. Dazu ein kleiner Ausflug in Message Authentication Codes. Die Protokolle SSL, IPsec und SSH verwenden standardm\u00e4\u00dfig verschiedene Methoden um die Daten zu verschl\u00fcsseln und die Integrit\u00e4t zu sichern:<\/p>\n<ul>\n<li>SSL: mac-then encrypt. Dabei wird erst der MAC gebildet, dann werden Daten und MAC verschl\u00fcsselt.<\/li>\n<li>IPsec: encrypt-then-mac. Dabei werden die Daten erst verschl\u00fcsselt und dann dar\u00fcber der MAC gebildet.<\/li>\n<li>SSH: encyrpt-and-mac. Die Daten werden verschl\u00fcsselt, die MAC wird aber \u00fcber die Klartextdaten gebildet.<\/li>\n<\/ul>\n<p>Es hat sich herausgestellt, dass von diesen drei Optionen die von IPsec verwendete Methode die sicherste ist. Diese encrypt-then-mac (etm) Verfahren k\u00f6nnen auch bei SSH verwendet werden.<\/p>\n<p><strong>Update:<\/strong> In RFC 7366 wird eine TLS-Erweiterung definiert, die auch die Verwendung von &#8220;encrypt then mac&#8221; benutzt.<\/p>\n<p class=\"wrapped\">Was hat sich jetzt beim Zugriff auf ein IOS-Ger\u00e4t ge\u00e4ndert? Ohne diese Anpassungen sieht die SSH-Session so aus (auf einem Cisco 3560 mit IOS 15.0(2)SE5):<\/p>\n<pre class><code>c3560#sh ssh\nConnection Version Mode Encryption &nbsp;Hmac\t State\t &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Username\n1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.0 &nbsp; &nbsp; IN &nbsp; aes128-cbc &nbsp;hmac-md5 &nbsp; &nbsp; Session started &nbsp; ki\n1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.0 &nbsp; &nbsp; OUT &nbsp;aes128-cbc &nbsp;hmac-md5 &nbsp; &nbsp; Session started &nbsp; ki<\/code><\/pre>\n<p>Es wird aes-128-cbc mit einem MD5-HMAC verwendet. Nach den \u00c4nderungen ist die Krypto etwas besser (im Rahmen der M\u00f6glichkeiten des IOS):<\/p>\n<pre class><code>c3560#sh ssh\nConnection Version Mode Encryption &nbsp;Hmac\t State\t &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Username\n0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.0 &nbsp; &nbsp; IN &nbsp; aes256-cbc &nbsp;hmac-sha1 &nbsp; &nbsp;Session started &nbsp; ki\n0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.0 &nbsp; &nbsp; OUT &nbsp;aes256-cbc &nbsp;hmac-sha1 &nbsp; &nbsp;Session started &nbsp; ki<\/code><\/pre>\n<p>Hier noch einmal die resultierende <code>~\/.ssh\/config<\/code>:<\/p>\n<pre class><code>Ciphers aes256-ctr,aes128-ctr,aes256-cbc,aes128-cbc,3des-cbc\nKexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,hmac-sha1<\/code><\/pre>\n<p><strong>Update:<\/strong><br \/>\nNach einigem Nachdenken kam ich zu dem Ergebnis, dass mir die Aufnahme der Legacy-Verfahren in die Config-Datei irgendwie nicht gef\u00e4llt. Daher habe ich diese wieder rausgeschmissen und gebe bei der Verbindung zu \u00e4lteren Ger\u00e4ten die ben\u00f6tigte Crypto direkt an. Hier ein Beispiel f\u00fcr den Zugriff auf einen 2950:<\/p>\n<pre class><code>ssh -l ki 10.10.10.200 -o Ciphers=\"3des-cbc\" -o KexAlgorithms=\"diffie-hellman-group1-sha1\"<\/code><\/pre>\n<p>Und hier die angepasste <code>~\/.ssh\/config<\/code>:<\/p>\n<pre class><code>Ciphers aes256-ctr,aes128-ctr,aes256-cbc,aes128-cbc\nKexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,hmac-sha1<\/code><\/pre>\n<p>Weitergehende Verbesserungsvorschl\u00e4ge werden gerne angenommen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beim letzten Beitrag zur SSH-Konfiguration unter Cisco IOS und Cisco ASA fiel mir noch ein, dass man \u00fcber sinnvolle Anpassungen der Client-Konfiguration auch mal schreiben sollte. Zumindest unter MacOS (und mindestens auch unter Debian und \u00e4lterem Ubuntu Linux) wird standardm\u00e4\u00dfig nicht immer die optimale Kryptographie verwendet. Die SSH-Parameter k\u00f6nnen an zwei Stellen konfiguriert werden: systemweit <\/p>\n<div class=\"read-more-text\"><a href=\"https:\/\/cyber-fi.net\/index.php\/2014\/09\/02\/ssh-client-konfiguration-unter-macos\/\" class=\"read-more\">continue reading<\/a><\/div>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"twitterCardType":"","cardImageID":0,"cardImage":"","cardTitle":"","cardDesc":"","cardImageAlt":"","cardPlayer":"","cardPlayerWidth":0,"cardPlayerHeight":0,"cardPlayerStream":"","cardPlayerCodec":"","footnotes":""},"categories":[7,15],"tags":[146,573],"class_list":["post-4683","post","type-post","status-publish","format-standard","hentry","category-cisco-security","category-security","tag-cisco-ios","tag-ssh"],"_links":{"self":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/4683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/comments?post=4683"}],"version-history":[{"count":0,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/4683\/revisions"}],"wp:attachment":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/media?parent=4683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/categories?post=4683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/tags?post=4683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}