{"id":2651,"date":"2020-11-25T07:00:00","date_gmt":"2020-11-25T06:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=2651"},"modified":"2020-11-24T15:34:39","modified_gmt":"2020-11-24T14:34:39","slug":"ssh-forwardagent-ja-oder-nein","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/ssh-forwardagent-ja-oder-nein\/","title":{"rendered":"SSH ForwardAgent ja oder nein?"},"content":{"rendered":"\n<p>In diesem Artikel m\u00f6chte ich diskutieren, ob die Nutzung der SSH-Client-Option <code>ForwardAgent<\/code> sicher und sinnvoll ist. Wie so h\u00e4ufig bei Themen der IT-Sicherheit geht es auch hier um die Abw\u00e4gung zwischen Sicherheit und Bequemlichkeit.<\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.ubuntuusers.de\/SSH\/#Der-SSH-Agent\" target=\"_blank\">Der SSH-Agent<\/a> nimmt den privaten SSH-Schl\u00fcssel auf und stellt diesen f\u00fcr SSH-Verbindungen bereit, so dass nicht bei jeder neuen SSH-Verbindung die Passphrase eingegeben werden muss.<\/p>\n\n\n\n<p>Dabei wird ein UNIX-Socket erstellt und in der Variablen <code>SSH_AUTH_SOCK<\/code> gespeichert. Der folgende Code zeigt dies beispielhaft:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ echo $SSH_AUTH_SOCK\n\/run\/user\/1000\/keyring\/ssh<\/code><\/pre>\n\n\n\n<p>In der ssh_config(5) findet sich die Option <code>ForwardAgent<\/code>, mit deren Hilfe der SSH-Agent auf einen entfernten Rechner weitergeleitet werden kann. Ist diese Funktionalit\u00e4t aktiv, kann man sich mit dem im SSH-Agenten gespeicherten privaten SSH-Schl\u00fcssel zu einem entfernten Rechner verbinden und von dort aus unter Nutzung des gleichen Schl\u00fcssels Verbindungen zu weiteren Rechnern aufbauen.<\/p>\n\n\n\n<p>In den meisten Linux-Distributionen ist diese Option standardm\u00e4\u00dfig deaktiviert, da sie ein potenzielles Sicherheitsrisiko darstellt. Gelingt es einem Benutzer, die Dateiberechtigungen auf dem entfernten Rechner zu umgehen, kann er den lokalen Agenten benutzen, um Operationen durchzuf\u00fchren, die nur mit dem im SSH-Agenten gespeicherten SSH-Schl\u00fcssel m\u00f6glich sind. Ich m\u00f6chte dies im Folgenden an einem Beispiel veranschaulichen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die Umgebung<\/h2>\n\n\n\n<p>F\u00fcr den Versuch kommen die drei Linux-Rechner host-a, host-b und host-c zum Einsatz. Auf allen drei Hosts existiert der User <em>foo<\/em>, welcher mittels <code>sudo<\/code> zum <em>root<\/em> werden kann. Dar\u00fcber hinaus existiert auf host-b User <em>bar<\/em>, welcher ebenfalls mittels <code>sudo<\/code> zum <em>root<\/em> werden darf.<\/p>\n\n\n\n<p>Gezeigt wird, wie <em>bar<\/em> durch Wechsel in den Kontext des Users <em>root<\/em> die Dateiberechtigungen f\u00fcr den Unix-Socket des SSH-Agenten von <em>foo<\/em> umgehen kann, um mit dessen Informationen eine SSH-Verbindung zu host-c herzustellen, was ihm sonst nicht gestattet ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Der Versuchsablauf<\/h2>\n\n\n\n<p>In diesem Abschnitt wird der Ablauf wiedergegeben, der dazu f\u00fchrt, dass <em>bar<\/em> Zugriff als <em>foo<\/em> auf host-c bekommt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">host-a<\/h3>\n\n\n\n<p>Auf host-a existiert ein Unix-Socket f\u00fcr den SSH-Agenten. Der User <em>foo<\/em> nutzt diesen, um eine Verbindung zu host-b aufzubauen. Dabei wird die Option <code>ForwardAgent<\/code> aktiviert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>foo@host-a:~$ echo $SSH_AUTH_SOCK\n\/run\/user\/1000\/keyring\/ssh\nfoo@host-a:~$ ssh -o ForwardAgent=yes  host-b\n&#91;...]\nfoo@host-b:~$<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">host-b<\/h3>\n\n\n\n<p>Wir sind jetzt via SSH als User <em>foo<\/em> auf dem host-b eingeloggt. Da wir die Weiterleitung des SSH-Agenten aktiviert haben, existiert jetzt auch hier ein entsprechender Unix-Socket. Die Dateiberechtigungen sind so gesetzt, dass nur <em>foo<\/em> darauf zugreifen darf. Der folgende Codeblock veranschaulicht dies.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>foo@host-b:~$ echo $SSH_AUTH_SOCK\n\/tmp\/ssh-fxwQXNlZrS\/agent.32579\nfoo@host-b:~$ ls -ld \/tmp\/ssh-fxwQXNlZrS\ndrwx------ 2 foo foo 4096 Nov 24 14:47 \/tmp\/ssh-fxwQXNlZrS\nfoo@host-b:~$ ls -l \/tmp\/ssh-fxwQXNlZrS\/agent.32579\nsrwxr-xr-x 1 foo foo 0 Nov 24 14:47 \/tmp\/ssh-fxwQXNlZrS\/agent.32579<\/code><\/pre>\n\n\n\n<p>Neben <em>foo<\/em> ist auch User <em>bar<\/em> auf host-b eingeloggt. Die Variable <code>SSH_AUTH_SOCK<\/code> dieses Users ist leer und <em>bar<\/em> wird beim Versuch, sich mit host-c zu verbinden, zur Eingabe eines Passworts aufgefordert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bar@host-b:~$ echo $SSH_AUTH_SOCK\n\nbar@host-b:~$ ssh foo@host-c\nfoo@host-c's password:\n\nbar@host-b:~$ ls -l \/tmp\ndrwx------ 2 foo   foo   4096 Nov 24 14:56 ssh-fxwQXNlZrS\nbar@host-b:~$ ls -l \/tmp\/ssh-fxwQXNlZrS\nls: cannot open directory '\/tmp\/ssh-fxwQXNlZrS\/': Permission denied<\/code><\/pre>\n\n\n\n<p>Da <em>bar<\/em> das Kennwort von <em>foo<\/em> unbekannt ist, geht es auf diesem Weg nicht weiter. Jedoch kann <em>bar<\/em> erkennen, dass auf dem System ein Unix-Socket mit einem SSH-Agenten f\u00fcr <em>foo<\/em> existiert. Der nun folgende Codeblock zeigt, wie <em>bar<\/em> \u00fcber einen Umweg den SSH-Agenten von <em>foo<\/em> nutzt, um sich mit host-c zu verbinden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bar@host-b:~$ sudo -i\n&#91;sudo] password for bar:\nroot@host-b:~# ssh foo@host-c\nfoo@host-c's password:\n\nroot@host-b:~# SSH_AUTH_SOCK=\/tmp\/ssh-fxwQXNlZrS\/agent.32579\nroot@host-b:~# export SSH_AUTH_SOCK\nroot@host-b:~# ssh foo@host-c\n&#91;...]\nfoo@host-c:~$<\/code><\/pre>\n\n\n\n<p>Der User <em>bar<\/em> hat es geschafft, sich als <em>foo<\/em> an host-c zu authentifizieren. Das ist <a rel=\"noreferrer noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Fubar\" target=\"_blank\">foobar<\/a>!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Schlussfolgerung<\/h2>\n\n\n\n<p>Der hier durchgef\u00fchrte Versuch zeigt, dass die Option <code>ForwardAgent<\/code> ein Sicherheitsrisiko birgt, wenn es auf einem entfernten System Benutzer gibt, welche die Dateiberechtigungen, wie in diesem Artikel gezeigt, umgehen k\u00f6nnen.<\/p>\n\n\n\n<p>Ich empfinde es daher als gut und sinnvoll, dass diese Option standardm\u00e4\u00dfig deaktiviert ist.<\/p>\n\n\n\n<p>Kann man jedoch ausschlie\u00dfen, dass die Dateiberechtigungen umgangen werden, z. B. weil keine weiteren Nutzer auf dem entfernten Rechner existieren bzw. auf diesen zugreifen k\u00f6nnen, spricht in meinen Augen nichts dagegen, diese Option zu nutzen und sich den Alltag etwas komfortabler zu gestalten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel m\u00f6chte ich diskutieren, ob die Nutzung der SSH-Client-Option ForwardAgent sicher und sinnvoll ist. Wie so h\u00e4ufig bei Themen der IT-Sicherheit geht es auch hier um die Abw\u00e4gung zwischen Sicherheit und Bequemlichkeit. Der SSH-Agent nimmt den privaten SSH-Schl\u00fcssel auf und stellt diesen f\u00fcr SSH-Verbindungen bereit, so dass nicht bei jeder neuen SSH-Verbindung die<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ssh-forwardagent-ja-oder-nein\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[95],"tags":[604,430,305,603,602],"class_list":["post-2651","post","type-post","status-publish","format-standard","hentry","category-security-2","tag-forwardagent","tag-osbn","tag-planet","tag-ssh-add","tag-ssh-agent"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2651"}],"version-history":[{"count":5,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2651\/revisions"}],"predecessor-version":[{"id":2656,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2651\/revisions\/2656"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}