So installieren und verwenden Sie OTPW für SSH-Kennwörter zur einmaligen Verwendung unter Ubuntu 14.04

Einführung

SSH ist mit einer Reihe von Sicherheitsfunktionen ausgestattet, die sicherstellen, dass Ihre Verbindungen sicher sind und Sie sich problemlos bei einem Remote-Host authentifizieren können. Insbesondere mit SSH-Schlüsseln können Sie eine sichere Verbindung herstellen, ohne Ihr Kennwort oder Ihre Passphrase über das Internet zu übertragen.

Es gibt jedoch Situationen, in denen die Verwendung eines SSH-Schlüssels nicht sinnvoll oder möglicherweise unsicher ist. Angenommen, Sie versuchen, SSH von einem öffentlichen Computer aus oder von einem Computer aus zu verwenden, für den Sie eine Fehlerbehebung durchführen möchten. Das Public-Key-System geht davon aus, dass der Computer, von dem aus Sie eine Verbindung herstellen, zumindest einigermaßen vertrauenswürdig ist. Dies ist nicht immer der Fall.

Wenn Sie in diesem Szenario ein Schlüsselpaar verwenden, wird der Schlüssel, auch wenn er kennwortgeschützt ist, entschlüsselt und im Arbeitsspeicher des lokalen Computers abgelegt, um zumindest eine Authentifizierung durchzuführen. Dies bedeutet, dass es anfällig ist, wenn Sie dem lokalen Computer nicht vertrauen.

Ein System mit der Bezeichnung * Einmalkennwortauthentifizierung * oder OTPW wurde erstellt, um unter diesen Umständen zu funktionieren. Einmalpasswörter sind ein System, das in andere Autorisierungsmechanismen wie Zwei-Faktor-Authentifizierung und Single-Sign-On-Lösungen integriert wurde.

In diesem Handbuch richten wir OTPW auf einer Ubuntu 14.04 VPS-Instanz ein. Auf diese Weise können wir uns mit einem Zweikomponenten-Passwort anmelden, das nur einmal verwendet werden darf.

Basiskonzept

Die Funktionsweise von OTPW besteht darin, sich in das PAM-Authentifizierungssystem einzuhängen.

Nachdem Sie Ihr System so konfiguriert haben, dass Anmeldungen mit OTPW zulässig sind, können Sie einen Satz von Kennwort-Chunks generieren, indem Sie ein Präfixkennwort eingeben. Sie können diese dann entweder ausdrucken, auf einem Gerät aufbewahren, auf das Sie Zugriff haben und dem Sie vertrauen (wie auf Ihrem Telefon verschlüsselt), oder in einem anderen Format, auf das Sie ohne mit dem Computer zugreifen können, dem Sie nicht vertrauen.

Wenn Sie nun zur Eingabe eines Passworts aufgefordert werden, erhalten Sie eine Referenznummer. Sie geben das von Ihnen erstellte Präfixkennwort ein, gefolgt von dem Kennwortteil, der der angegebenen Referenznummer zugeordnet ist.

Dieses Passwort funktioniert nur einmal. Wenn sich jemand auf Ihrem Computer mit dem Schlüssel anmeldet oder sehen kann, dass Sie das Kennwort eingeben, spielt dies keine Rolle, da es nach dem Anmelden nicht mehr gültig ist.

Installieren Sie die Komponenten

Um dieses System zu konfigurieren, müssen Sie zuerst die erforderlichen Komponenten installieren.

Da die Authentifizierung vollständig serverseitig erfolgt und sich das Client-Ende nicht von einer normalen Passwortabfrage unterscheidet, werden nur einige Pakete auf unserem Server installiert.

Wir aktualisieren unseren Paket-Cache und installieren diese aus dem Repository:

sudo apt-get update
sudo apt-get install otpw-bin libpam-otpw

Wie Sie sehen, ist der Mechanismus in zwei Teile unterteilt. Die erste Komponente dient zum Generieren und Verwalten der Einmalpasswörter. Das zweite ist das Plugin, das mit PAM zur Authentifizierung anhand dieser Kennwortdateien verwendet wird.

Bearbeiten von PAM zur Nutzung von OTPW

Bevor wir mit unseren tatsächlichen Passwörtern etwas anfangen können, müssen wir OTPW als Option für PAM hinzufügen.

Wir möchten dies auf eine Art und Weise erreichen, die reguläre Passwortanmeldungen einschränkt, da wir davon ausgehen, dass Sie bereits https://www.digitalocean.com/community/articles/how-to-set-up-ssh-keys—​2 [ SSH-Schlüssel einrichten] für die Authentifizierung auf Computern, denen Sie vertrauen. Unsere Konfiguration verwendet die SSH-Schlüssel, wenn sie verfügbar sind, andernfalls greift sie auf den OTPW-Mechanismus zurück.

Zu diesem Zweck ändern wir nur die Datei, die für die SSH-Anmeldung erforderlich ist. Dies beeinträchtigt weder unsere lokalen Anmeldungen noch unsere Anmeldungen über die DigitalOcean-Webkonsole.

Öffnen Sie die SSH PAM-Konfigurationsdatei:

sudo nano /etc/pam.d/sshd

Oben in der Datei befindet sich eine Direktive zum Importieren der Datei + common-auth +. Diese Datei ermöglicht die regelmäßige Kennwortauthentifizierung ohne Verwendung des OTPW-Systems, das wir für unsere SSH-Sitzungen nicht benötigen. Lassen Sie uns das kommentieren:

#@include common-auth

Nachfolgend fügen wir einige Zeilen hinzu, mit denen wir das OTPW-System zur Verarbeitung von Kennwortanforderungen verwenden können:

auth    required    pam_otpw.so
session optional    pam_otpw.so

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Konfigurieren Sie SSHD

Nachdem wir das PAM-Modul des SSH-Dämons für die Verwendung von OTPW konfiguriert haben, können wir den Dämon selbst mit den entsprechenden Werten konfigurieren.

Öffnen Sie die Datei mit Root-Rechten, um die Datei auszuchecken:

sudo nano /etc/ssh/sshd_config

Wir suchen nach ein paar separaten Werten. Wir müssen überprüfen, ob jeder dieser Parameter auf den folgenden Wert eingestellt ist. Wenn Sie keinen der Parameter finden können, fügen Sie diese hinzu und stellen Sie sie ein. Stellen Sie jedoch sicher, dass Parameter nicht mehrmals hinzugefügt werden, da dies zu einem Fehlschlagen des Dämons führen kann.

UsePrivilegeSeparation yes
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes

Wenn Sie diese Parameter festgelegt haben, möchten Sie unseren SSH-Daemon neu starten, damit unsere Änderungen wirksam werden:

sudo service ssh restart

Erstellen von OTPW-Passwortdateien

Nachdem unser System für die Verwendung von OTPW für SSH-Benutzer konfiguriert wurde, die keinen öffentlichen Schlüssel haben, können wir die beiden Kennwortdateien erstellen, die für das Funktionieren dieses Systems erforderlich sind.

Eine Datei, die in + ~ / .otpw + gespeichert wird, enthält einen Hash-Wert der Passwortsegmente, einen pro Zeile. Die zweite Datei, die wir erstellen, sind die für Menschen lesbaren Einmalpasswortsegmente, die wir auf ein sicheres Gerät kopieren, ausdrucken oder auf andere Weise an einem sicheren, tragbaren Ort aufbewahren sollten.

Alles, was wir tun müssen, um diese Liste zu generieren, ist den Befehl + otpw-gen + aufzurufen. Dies würde normalerweise den für Menschen lesbaren Text als Standardausgabe ausgeben, aber wir können ihn zur Sicherheit in eine Datei umleiten:

cd ~
otpw-gen > nothingtosee.txt

Dadurch wird ein zufälliger Startwert generiert und nach einem Kennwortpräfix gefragt. Sie sollten dieselben Regeln für gesunden Menschenverstand verwenden, die Sie für jedes normale Kennwort verwenden würden. Stellen Sie sicher, dass Sie sich das Passwort merken.

Danach erhalten Sie eine "+ ~ / .otpw +" - Datei, die die Hashwerte der Passwortsuffixe enthält, eine pro Zeile:

OTPW1
280 3 12 8
253tFMngG2PNYhn
132Kua%SZ+esb6t
237yH7D2FMbQsyW
125rrXfBRwnF+A%
106gJxhJE4jkknj
04135:5:knWIB4:
232/d4kI:n57IcD
244RASe8ka63b8Z
057GmqfFe=pXQqu
. . .

Sie haben auch Ihre nicht-gekürzten Suffixe mit ihrer Referenznummer in eine Datei unter "+ ~ / nothingtosee.txt +" weitergeleitet.

OTPW list generated 2014-04-03 18:06 on sshd

000 /rGF h5Hq  056 /zi5 %yTJ  112 J7BT HdM=  168 fdBm X%Tn  224 69bi =9mE
001 GoOG jxYQ  057 E=o3 kuEF  113 zwit p27J  169 nHK9 CXRx  225 IihF =o8g
002 Xm=E PuXc  058 Ok27 ZJ++  114 On=5 pNYH  170 ZRDa mB5e  226 yYsb CAfn
003 deL+ iHs7  059 /WGS :J4M  115 ZZd/ 8zyU  171 acDd dESV  227 ddjg ipcR
004 KhDn NdfS  060 =tEz ACye  116 FkQ9 8kSu  172 iRSR nZWT  228 9hHd veZ9
005 rGFG K5=7  061 MvUW LRxc  117 2YwY axJJ  173 kEV5 T/Vz  229 wx%n Le6P
006 GWi2 fHjf  062 qOR: WN2x  118 FvD4 oNjT  174 99OT 8KPy  230 /I=Y hicP
007 XPom pEYp  063 8Xvm vZGa  119 UNjF :Kys  175 b95i SU3R  231 keLn aDcK
008 fJI% 3Qs2  064 3I7Q I2xc  120 5Tm9 REQK  176 AVg: 4ijE  232 :aIF op6V
009 P/Sn dSxA  065 A+J6 =4zo  121 LAyj 3m2+  177 TMuN 9rJZ  233 SWvB %+cL
. . .

Die linke Spalte ist die Referenznummer, gefolgt von 8 Zeichen für das Suffix. Das Leerzeichen zwischen den ersten und letzten 4 Zeichen im Suffix dient der Lesbarkeit und kann optional entfernt werden, wenn Sie das Suffix eingeben.

Standardmäßig erzeugt der Generator genügend Suffixe, um auf ein Standardpapier zu passen, das sich hervorragend zum Drucken eignet und eine Möglichkeit zum Übertragen der Ausgabe bietet.

Sie müssen dieses Verfahren für jeden Benutzer ausführen, für den Sie den Einmalkennwortzugriff konfigurieren möchten.

Probieren Sie es aus

Auf einem Computer, der nicht mit Ihrem SSH-Schlüssel konfiguriert ist (Sie können Ihren Schlüssel auch vorübergehend aus Ihrem Verzeichnis "+ ~ / .ssh +" verschieben), können Sie das neue Einmalkennwortsystem testen.

Melden Sie sich bei dem Benutzer an, den Sie wie gewohnt mit OTPW konfiguriert haben:

'' '' '

Password 253:

Wie Sie sehen, wurde uns das von OTPW gewünschte Suffix gegeben.

Geben Sie zunächst Ihr Präfixkennwort ein, direkt gefolgt vom Suffix in derselben Zeile, ohne ein Leerzeichen zwischen Ihrem Präfixkennwort und dem Suffix. Sie können den in der Suffixdatei angezeigten Speicherplatz beibehalten, wenn Sie dies wünschen.

Nehmen wir also an, mein Präfix-Passwort lautet "crazyburr! To" und die Suffix-Datei enthält eine Spalte, die wie folgt aussieht:

249 N4HY RsbH
250 +vAz fawn
251 O4/R ZrhM
252 c6kP jgUT

254 aYzA :F64
255 3ezp ZpIq
256 ggIi TD2v

In diesem Fall könnten wir entweder "crazyburr! ToI = aA OKSz" oder "crazyburr! ToI = aAOKSz" eingeben.

Sie sollten sich dann problemlos einloggen können. Wenn Sie Ihre + ~ / .otpw + - Datei überprüfen, werden Sie feststellen, dass eine der durchgestrichenen Zeilen durch Bindestriche ersetzt wurde:

. . .
091icM5kSPVOdcU
274Uf3q/=kTYcu8
229fHfmIsCj7mjQ
---------------
115EzDO6=jM/sOT
143iWCdteSk3kg7
265S+QTGcg+MAZO
174UgXchxsI2g:G
. . .

Dies bedeutet, dass das Suffix verwendet wurde und nicht mehr gültig ist.

Wenn zwei Personen gleichzeitig versuchen, sich in das Konto einzuloggen, fordert OTPW stattdessen Ihr Präfixkennwort an, gefolgt von drei Suffixen. Jedes der drei angeforderten Suffixe ist unterschiedlich, sodass jemand, der Keylogging ausführt und versucht, Sie zu schlagen, um die Eingabetaste zu drücken, nicht in der Lage ist, dies erfolgreich abzuschließen.

Die Eingabeaufforderung sieht folgendermaßen aus:

Password 161/208/252:

In diesem Fall wird eine "+ ~ / .otpw.lock +" - Datei erstellt. Nach einer erfolgreichen Anmeldung sollte es entfernt werden, aber es gibt einen Fehler, der dazu führt, dass dies in einigen Situationen nicht funktioniert. In diesem Fall entfernen Sie die Sperre einfach manuell:

rm ~/.otpw.lock

Beim nächsten Mal werden Sie erneut aufgefordert, nur ein Kennwort einzugeben.

Vorbehalte und Bugs

Ich habe oben erwähnt, wie manchmal die Sperrdatei nicht automatisch gelöscht wird, nachdem Sie sich erfolgreich angemeldet haben. Dies ist insbesondere dann der Fall, wenn ein Benutzer die Verbindung durch Eingabe von STRG-C abbricht, bevor die Eingabeaufforderung beendet wird.

Ein weiterer Fehler, der relativ wichtig ist, ist das Melden der Anzahl der verbleibenden gültigen OTPW-Einträge. Dies wird normalerweise von der Sitzungszeile in der PAM-Konfiguration erledigt, funktioniert jedoch derzeit nicht ordnungsgemäß.

Um dies zu umgehen, hat Wolfgang Kroener ein sehr einfaches Bash-Skript geschrieben, das diese Funktionalität in this Debian-Mailinglisten-Thread implementiert. Wir können dies auf verschiedene Arten implementieren, aber am einfachsten ist es, es den Benutzern, die OTPW implementieren, am Ende von + ~ / .bashrc + hinzuzufügen:

nano ~/.bashrc

Fügen Sie nach unten Folgendes ein:

if [ "$SSH_TTY" -a -f $HOME/.otpw ]; then
 PW_LINES=$(wc -l <$HOME/.otpw)
 PW_USED=$(grep -- ---- $HOME/.otpw | wc -l)
 echo "OTPW $PW_USED/`echo $PW_LINES-2 | bc` used"
fi

Sie können dies auch an einem zentraleren Ort hinzufügen. Auf diese Weise wird es je nachdem ausgegeben, ob die Datei "+ ~ / .otpw +" für jeden Benutzer vorhanden ist.

Wenn Sie sich jetzt anmelden, erhalten Sie Statistiken zu Ihren derzeit verbleibenden Passwörtern:

OTPW 6/280 used

OTPW empfiehlt, dass Sie Ihre Passwortliste neu erstellen, wenn Sie weniger als 50% Ihrer verfügbaren Passwörter erhalten. Sie können dies tun, indem Sie den Befehl generation erneut ausführen:

otpw-gen > anotherfile.txt

Dadurch werden Ihre vorherigen Kennwortsuffixe überschrieben und können nach diesem Vorgang nicht mehr verwendet werden.

Fazit

Das Einrichten von OTPW bietet Ihnen die Möglichkeit, sich von einem unsicheren Standort aus bei Ihrem Server anzumelden. Es weist zwar einige der Nachteile normaler Kennwortanmeldungen auf, bietet jedoch einen Mittelweg zwischen schlüsselbasierten Anmeldungen, die niemals auf einen unsicheren Computer übertragen werden sollten, und regelmäßigen Kennwortanmeldungen, die viele Fehler und Schwachstellen aufweisen.