Empfehlungen für die Erstellung freigegebene Linux-AMIs
Befolgen Sie folgende Richtlinien, um die Angriffsfläche zu verkleinern und die Zuverlässigkeit der erstellen AMIs zu erhöhen.
Wichtig
Die Liste der Sicherheitsrichtlinien kann sehr umfassend sein. Seien Sie beim Erstellen gemeinsamer AMIs vorsichtig und überlegen Sie sorgfältig, an welcher Stelle empfindliche Daten offengelegt werden könnten.
Inhalt
Wenn Sie AMIs für AWS Marketplace erstellen, finden Sie im Verkäuferhandbuch für AWS Marketplace unter Bewährte Methoden für die Erstellung von AMIs Leitfäden, Richtlinien und Best Practices.
Deaktivieren von passwortbasierten Fernanmeldungen für den Stammbenutzer
Die Verwendung fester Root-Passwörter für öffentliche AMIs ist ein Sicherheitsrisiko, das schnell bekannt werden kann. Wenn die Benutzer bei der ersten Anmeldung zum Ändern des Passworts aufgefordert werden, bietet sich hierbei eine potenzielle Möglichkeit des Missbrauchs.
Um das Problem zu beheben, deaktivieren Sie die Passwort-basierte Remoteanmeldung für den Root-Benutzer.
Deaktivieren von passwortbasierten Fernanmeldungen für den Stammbenutzer
-
Öffnen Sie die Datei
/etc/ssh/sshd_configin einem Textbearbeitungsprogramm und suchen Sie nach folgender Zeile:#PermitRootLogin yes -
Ändern Sie die Zeile folgendermaßen:
PermitRootLogin without-passwordDer Speicherort dieser Konfigurationsdatei weicht von Ihrer Verteilung ggf. ab. Das ist auch der Fall, wenn Sie nicht OpenSSH verwenden. Ist dies der Fall, schlagen Sie in der entsprechenden Dokumentation nach.
Deaktivieren des lokalen Root-Zugriffs
Wenn Sie gemeinsame AMIs verwenden, hat sich das Deaktivieren direkter Root-Anmeldung als bewährte Methode etabliert. Melden Sie sich hierfür in der ausgeführten Instance an und geben Sie den folgenden Befehl aus:
[ec2-user ~]$sudo passwd -l root
Anmerkung
Der Befehl beeinträchtigt nicht die Verwendung von sudo.
Entfernen von SSH-Host-Schlüsselpaaren
Wenn Sie ein von einem öffentlichen AMI abgeleitetes AMI teilen möchten, entfernen Sie die bestehenden SSH-Host-Schlüsselpaare in /etc/ssh. Hierdurch erstellt die SSH-Funktion neue eindeutige SSH-Schlüsselpaare, wenn eine Instance mit dem AMI gestartet wird. Dies verbessert die Sicherheit und verringert die Wahrscheinlichkeit von „Man-In-the-Middle (MITM)“-Angriffen.
Entfernen Sie die folgenden Schlüsseldateien aus Ihrem System.
-
ssh_host_dsa_key
-
ssh_host_dsa_key.pub
-
ssh_host_key
-
ssh_host_key.pub
-
ssh_host_rsa_key
-
ssh_host_rsa_key.pub
-
ssh_host_ecdsa_key
-
ssh_host_ecdsa_key.pub
-
ssh_host_ed25519_key
-
ssh_host_ed25519_key.pub
Sie können all diese Dateien mit folgendem Befehl sicher entfernen.
[ec2-user ~]$sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
Warnung
Hilfsprogramme zum sicheren Entfernen wie shred entfernen möglicherweise nicht alle Kopien einer Datei vom Speichermedium. Journaling-Dateisysteme (u. a. Amazon Linux default ext4), Snapshots, Sicherungen, RAID und temporäres Caching erstellen möglicherweise versteckte Kopien von Dateien. Weitere Informationen finden Sie in der shred-Dokumentation
Wichtig
Wenn Sie die bestehenden SSH-Host-Schlüsselpaare nicht aus dem öffentlichen AMI entfernen, benachrichtigt unser routinemäßiger Prüfprozess Sie und alle Kunden, die Instances des AMI ausführen, über potenzielle Sicherheitsrisiken. Nach einer kurzen Übergangsfrist wird das AMI als privat markiert.
Installieren von Anmeldeinformationen für öffentliche Schlüssel
Wenn Sie das AMI so konfigurieren, dass keine Passwortanmeldung möglich ist, müssen Sie eine anderen Anmeldemethode für die Benutzer bereitstellen.
Amazon EC2 ermöglicht den Benutzern die Angabe eines öffentlich-privaten Schlüsselpaar-Namens beim Starten einer Instance. Wenn dem RunInstances-API-Aufruf (oder mittels Befehlszeilen-API-Tools) ein gültiger Schlüsselpaarname bereitgestellt wird, wird der öffentliche Schlüssel (der Teil des Schlüsselpaars, den Amazon EC2 nach einem CreateKeyPair- oder ImportKeyPair-Aufruf auf dem Server speichert) der Instance mittels HTTP-Abfrage gegen die Instance-Metadaten verfügbar gemacht.
Wenn Sie sich via SSH anmelden möchten, muss das AMI den Schlüsselwert beim Starten abrufen und /root/.ssh/authorized_keys (oder der entsprechenden Datei für das entsprechende Benutzerkonto im AMI) anhängen. Benutzer können Instances des AMI mit einem Schlüsselpaar starten und sich ohne Root-Passwort anmelden.
Viele Verteilungen, u. a. Amazon Linux und Ubuntu, verwenden das cloud-init-Paket zum Einfügen von Anmeldeinformationen für öffentliche Schlüssel für einen konfigurierten Benutzer. Wenn die Verteilung cloud-init nicht unterstützt, fügen Sie dem System-Startup-Skript (z. B. /etc/rc.local) den folgenden Code hinzu, um den öffentlichen Schlüssel abzurufen, den Sie beim Start für den Root-Benutzer angegeben haben.
Anmerkung
Im folgenden Beispiel ist die IP-Adresse http://169.254.169.254/ eine lokale (link-local) Adresse und nur von der Instance aus gültig.
Dies kann auf jeden Benutzer angewendet werden. Sie müssen es nicht auf den root-Benutzer beschränken.
Anmerkung
Beim erneuten Bündeln einer Instance basierend auf dem AMI wird der Schlüssel eingebunden, mit dem es gestartet wurde. Damit der Schlüssel nicht eingebunden wird, löschen (oder entfernen) Sie die authorized_keys-Datei oder schließen Sie diese Datei vom erneuten Bündeln aus.
SSHD-DNS-Prüfungen deaktivieren (optional)
Durch das Deaktivieren von sshd-DNS-Prüfungen wird die sshd-Sicherheit beeinträchtigt. Wenn bei der DNS-Auflösung allerdings ein Fehler auftritt, funktioniert die SSH-Anmeldung weiterhin. Wenn Sie die sshd-Prüfungen nicht deaktivieren, wird die Anmeldung durch Fehler bei der DNS-Auflösung verhindert.
Deaktivieren von sshd-DNS-Prüfungen
-
Öffnen Sie die Datei
/etc/ssh/sshd_configin einem Textbearbeitungsprogramm und suchen Sie nach folgender Zeile:#UseDNS yes -
Ändern Sie die Zeile folgendermaßen:
UseDNS no
Anmerkung
Der Speicherort dieser Konfigurationsdatei kann von Ihrer Verteilung abweichen. Das ist auch der Fall, wenn Sie nicht OpenSSH verwenden. Ist dies der Fall, schlagen Sie in der entsprechenden Dokumentation nach.
Sensible Daten entfernen
Wir empfehlen, keine empfindlichen Daten oder empfindliche Software auf AMIs zu speichern, die Sie teilen. Benutzer, die ein gemeinsames AMI starten, könnten es erneut bündeln und als ihr eigenes registrieren. Gehen Sie folgendermaßen vor, um keine Sicherheitsrisiken zu übersehen:
-
Wir empfehlen, die
--exclude-Option fürdirectoryec2-bundle-volzu verwenden, um die Verzeichnisse und Unterverzeichnisse zu überspringen, die geheime Informationen enthalten. Schließen Sie beim Bündeln des Images vor allem alle öffentlichen/privaten SSH-Schlüsselpaare von Benutzern und SSH-authorized_keys-Dateien aus. Die öffentlichen Amazon-AMIs speichern diese für den Stamm-Benutzer in/root/.sshund für normale Benutzer in/home/. Weitere Informationen finden Sie unter ec2-bundle-vol.user_name/.ssh/ -
Löschen Sie vor dem Bündeln immer den Shell-Verlauf. Wenn Sie versuchen, mehr als einen Bundle-Upload im selben AMI durchzuführen, enthält der Shell-Verlauf Ihren Zugriffsschlüssel. Das folgende Beispiel muss der letzte ausgeführte Befehl vor dem Bündeln in einer Instance sein.
[ec2-user ~]$shred -u ~/.*historyWarnung
Die in der Warnung oben beschriebenen Einschränkungen von shred gelten auch hier.
Hinweis: Bash schreibt den Verlauf der aktuellen Sitzung beim Beenden auf den Datenträger. Wenn Sie sich nach dem Löschen von
~/.bash_historyvon der Instance ab- und anschließend wieder anmelden, werden Sie feststellen, dass die~/.bash_history-Datei neu erstellt wurde und alle Befehle enthält, die während der vorherigen Sitzung ausgeführt wurden.Neben Bash schreiben auch andere Programme Verlaufsdaten auf den Datenträger. Seien Sie vorsichtig und entfernen Sie unnötige DOT-Dateien und -Verzeichnisse.
-
Zum Bündeln einer ausgeführten Instance sind Ihr privater Schlüssel und das X.509-Zertifikat erforderlich. Legen Sie diese Daten und anderen Anmeldeinformationen an einem Speicherort ab, der nicht gebündelt wird (z. B. den Instance-Speicher).