image

Veilige SSH toegang zonder passphrase met MinorFs

maandag 14 juli 2008, 11:27 door Redactie, 5 reacties

SSH wordt veel gebruikt voor remote toegang tot systemen. SSH biedt naast de mogelijkheid om in te loggen met een password, ook de mogelijkheid om in plaats hiervan een public/private keypair te gebruiken en in te loggen met de secret key. Een probleem met secret keys is echter dat je ze echt secret moet houden. Bugs in software zorgen er echter voor dat je als gebruiker de software die je zelf draait niet altijd kan vertrouwen. Omdat die software draait met al je rechten heeft die software ook al jouw rechten inclusief het recht om jouw 'secret' key te lezen. Om deze reden kiezen veel mensen er voor om een passprase op hun secret key te zetten. Als we uit zouden gaan van het 'principle of least authority' (POLA), dan zou bijvoorbeeld een webbrowser helemaal geen rechten moeten krijgen om de private key die SSH gebruikt te benaderen, en zou er dus geen passphrase op de private key nodig zijn. Het MinorFs biedt voorzieningen om dit mogelijk te maken. Het basis idee achter het MinorFs is dat MinorFs 'prive' opslag voorzieningen biedt aan pseudo persistente processen.

De hier volgende beschrijving laat zien hoe MinorFs gebruikt kan worden om SSH zo te gebruiken zodat inloggen met een secret key zonder passphrase mogelijk en verantwoord wordt.

Voordat we kunnen beginnen met het veilig gebruiken van MinorFs moeten we eerst een beheer password zetten voor het MinorFs beheertool '2rulethemall'. Het 2rulethemall programma heeft horere privileges binnen MinorFs dan alle andere programma's. Het heeft namelijk rechten tot alle MinorFs data van de gebruiker. Na validatie van een meegegeven password zal 2rulethemall zijn hoge privilege afstaan aan de gebruiker. De eerste keer dat 2rulethemall gestart wordt zal deze echter geen password kennen, en zal deze om een nieuw password vragen. Voor we van start gaan moeten we dus eerst dat password zetten.

~> 2rulethemall
2rulethemall NO PASSWORD SET !!!

New password:thisisabadpassword

De eerste stap die we nu moeten nemen is dat we als het waren ssh aan MinorFs moeten voorstellen. We starten ons SSH proces en laten het process toegang zoeken tot MinorFs. MinorFs ziet dan dat er een nieuw 'pseudo persistent process' is, en zal een privé directory aanmaken voor dit process. Als we SSH starten zal SSH om een password vragen. We kunnen SSH op dit punt met CTRL-C gewoon afsluiten.
~> ssh rob@bogus.polacanthus.net -i /mnt/minorfs/priv/home/id_rsa
Warning: Identity file /mnt/minorfs/priv/home/id_rsa not accessible: No such file or directory.
Password:
Nu zijn we op het punt aangekomen dat we met het hoge privilege aan de slag moeten. We kunnen nu het best onze history uitzetten om te voorkomen dat er paden met hoge privileges in de history file terecht komen.

Nu dat we privé storage hebben voor ons SSH proces gaan we 2rulethemall gebruiken om ons zelf toegang te verschaffen tot de prive directory van SSH.

~> 2rulethemall
2rulethemall password:thisisabadpassword
2rulethemall path=/mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e
~> grep ssh /mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/*/*.xml
/mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/
a3a0e537fb2b05e06cf653aa1514eca492792ee8/meta.xml:
/usr/bin/ssh
We hebben een directory gevonden, /mnt/minorf/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/
a3a0e537fb2b05e06cf653aa1514eca492792ee8/
Dit is een path een directory boven de directory die we nodig hebben, namelijk de directory voor al onze instanties van ssh die paralel draaien. We zijn echter geïnteresseerd in de 1e instantie. Omdat we met 'least autority' willen werken gaan we nu het sterke pad van alleen onze SSH privé directory aan MinorFs vragen met het attr linux tool:
~> attr -g cap /mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/
a3a0e537fb2b05e06cf653aa1514eca492792ee8/inst1
Attribute "cap" had a 57 byte value for /mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/
a3a0e537fb2b05e06cf653aa1514eca492792ee8/inst1:
/mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd
Het nu gevonden path is de privé directory van de 1e draaiende (op de zelfde manier gestarte) instantie van SSH. We gaan nu gebruikmakend van dit path een nieuw keypair maken voor SSH. Let op, we voeren dus GEEN passphrase in, want die hebben we niet meer nodig!
~> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rob/.ssh/id_rsa):/mnt/minorfs/cap/
586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa.
Your public key has been saved in /mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa.pub.
~> cp /mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa.pub ~
We zijn nu klaar met het gebruik van hoge privileges en kunnen de history dus weer gewoon aan zetten vanaf hier.

Nu hebben we een nieuwe secret key in de prive dir van onze SSH staan, en de public key in onze homedir. We kunnen de public key nu op de reguliere manier naar de server kopiëren:

~> scp id_rsa.pub rob@bogus.polacanthus.net:
Password:
id_rsa.pub 100% 395 0.4KB/s 00:00

~> ssh rob@bogus.polacanthus.net
rob@bogus:~% cp id_rsa.pub .ssh/authorized_keys
rob@bogus:~% cp id_rsa.pub .ssh/authorized_keys2
rob@bogus:~% logout
~>

Ok, klaar, nu kunnen we SSH gebruiken zonder passphase op onze key, en op een veilige manier.
~> ssh rob@bogus.polacanthus.net -i /mnt/minorfs/priv/home/id_rsa
rob@bogus:~%
Je kunt met ls controleren dat /mnt/minorfs/priv/home/id_rsa niet toegankelijk, nee zelfs niet zichtbaar is voor een willekeurig ander proces. Alleen de eerste instantie van SSH kan hem benaderen, en zelfs alleen als deze op exact de zelfde manier en natuurlijk door de zelfde gebruiker wordt gestart.

Door Rob Meijer

Reacties (5)
14-07-2008, 12:00 door spatieman
ik hou het maar op handmatig inloggen..
14-07-2008, 12:00 door justin
Het is een stap voorwaarts, maar het geeft nog steeds geen
zekerheid aangezien de key zich op je systeem bevind en op
bepaalde momenten gewoon leesbaar is. Met behulp van een
rootkit of een simpel stuk malware kun je prima de key te
pakken krijgen. Een hacker die op je systeem zit zal het ook
niet al te moeilijk vinden, al was het alleen al door het
kernel geheugen te inspecteren (verre van ondoenlijk). Als
je wat meer veiligheid zoekt moet je toch echt aan de
crypto-tokens. Dan kunnen ze in het ergste geval je key
gebruiken op het moment dat jij die gebruikt, maar in ieder
geval niet kopieren. En het OpenSC project maakt dit prima
bruikbaar (http://www.opensc-project.org/).
14-07-2008, 12:50 door justin
Door spatieman
ik hou het maar op handmatig inloggen..

Gelukkig is dat niet nagenoeg triviaal te sniffen en
hergebruiken...
15-07-2008, 17:25 door Zarco.nl
[beetje offtopic]
Is MinorFS een project van OpenBSD?
Ik zie dat jullie
[url=http://en.wikipedia.org/wiki/Puffy_(mascot)]Puffy[/url]
nl. gebruiken.
Nergens kom ik MinorFS in relatie met OpenBSD tegen...
[/beetje offtopic]
15-07-2008, 17:48 door SirDice
Door zarco.nl
[beetje offtopic]
Is MinorFS een project van OpenBSD?
Ik zie dat jullie
[url=http://en.wikipedia.org/wiki/Puffy_(mascot)]Puffy[/url]
nl. gebruiken.
Nergens kom ik MinorFS in relatie met OpenBSD tegen...
[/beetje offtopic]
OpenSSH ;)
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.