Ist es als "normaler" Bürger, der in Westeuropa lebt, wirklich notwendig, den Tausch auf meinem Computer zu löschen oder zu verschlüsseln?
Es ist ein persönliches Urteil, das davon abhängt, wie sehr Sie die Privatsphäre Ihrer Daten schätzen und wie sehr Sie Ihre Daten vor der Offenlegung schützen möchten, wenn sie in die Hände eines Angreifers fallen. Angenommen, Sie haben einen Laptop und eines Tages wird er gestohlen. Wie wahrscheinlich ist es, dass ein Dieb versucht, Passwörter, Verschlüsselungsschlüssel oder andere private Daten zu extrahieren, und interessiert es Sie? Viele Leute kümmern sich nicht darum, aber einige tun es. Zugegeben, die meisten Diebe würden den Laptop einfach verkaufen, um sofort einen finanziellen Gewinn zu erzielen, aber es gibt Fälle, in denen ein Angreifer motiviert sein könnte, weiter zu versuchen, auf die Daten selbst zuzugreifen.
Und bevor jemand mit "Ja" antwortet, kann ich ein Beispiel dafür geben, wie ich meinen eigenen Swap testen und auslaufen lassen kann, damit ich tatsächlich sehen kann, welche Art von Daten trotz meines verschlüsselten Zuhauses ungeschützt sind?
Der Speicher eines Prozesses kann möglicherweise in den Auslagerungsbereich ausgelagert werden. Ein Speicherverlust kann gefährlich sein - das offensichtliche Beispiel ist Heartbleed - siehe Wie ich Heartbleed verwendet habe, um den privaten Kryptoschlüssel einer Site zu stehlen . Der Speicher, der von Heartbleed verfügbar gemacht wird, gehört nur zu einem einzelnen Prozess, während der Speicher, der möglicherweise von Ihrem Swap Space verfügbar gemacht wird, zu jedem Prozess gehört. Stellen Sie sich einen Prozess vor, bei dem ein privater Schlüssel oder eine Kennwortliste (z. B. ein Webbrowser) ausgetauscht wird. Diese Elemente werden im Klartext im Auslagerungsbereich angezeigt. Das Extrahieren ist eine Frage des Durchsuchens des Speichers nach bestimmten Datenmustern - es können Klartext-ASCII-Daten sein, die durch sichtbar sindstrings
, oder es könnte komplizierter sein, wie in Heartbleed (wo der Test ist, dass einige aufeinanderfolgende Bytes ein Teiler des öffentlichen Kryptoschlüssels sind). Wenn Sie eine verschlüsselte / Home-Partition haben, ist es naheliegend, nach einem Datenblock zu suchen, der den Verschlüsselungsschlüssel bildet, der die Daten des Benutzers entsperrt.
Ein Arbeitsbeispiel:
tun bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'
, um einen Bash-Prozess mit einigen geheimen Daten auf seinem Stapel zu erstellen
tun sysctl vm.swappiness=100
, um die Swappiness zu erhöhen (nicht notwendig, kann aber das Beispiel erleichtern)
Führen Sie aus top -c
, drücken Sie f, aktivieren Sie die SWAP-Spalte, drücken Sie q, um zur oberen Prozessansicht zurückzukehren, und scrollen Sie nach unten, bis Sie den bash -c
Prozess sehen
Speichern Sie in einem anderen Terminal das Programm von Chimnay Kanchi unter Linux: Wie wird der Systemspeicher belastet? zu usemem.c
, kompilieren Sie es gcc -o usemem usemem.c
und führen Sie es usemem &
wiederholt in einem Terminal aus. Dies verbraucht jeweils 512 MB Speicherblöcke. (Es spielt keine Rolle, was dazu führt, dass der Speicher ausgelagert wird. Dies kann eine normale Systemnutzung, ein Run-Away-Prozess oder ein absichtlicher Angriff sein. Das Endergebnis ist dasselbe.)
oben beobachten, auf den bash -c
Austausch warten (SWAP-Spaltenwert> 0)
Führen Sie nun aus, strings /dev/sdaX | grep SECRET
wo X Ihre Swap-Parititon ist
Herzlichen Glückwunsch - Sie haben gerade "geheime" Daten aus der Swap-Partition extrahiert. Sie sehen mehrere Kopien des SECRET-Textes, gefolgt vom "Passwort", den Kopien, die die vollständige Befehlszeile enthalten, die aus dem übergeordneten Bash-Prozess, dem Top-Prozess und dem 'Bash-c'-Prozess durchgesickert ist. Die Zeilen, die nicht die vollständige Befehlszeile enthalten, sind aus dem 'bash -c'-Prozess durchgesickert.
unsigned char secret[] = "SECRET=XXXX";
Fügen Sie die Zeile zu usemem.c hinzu (direkt unter der unsigned long mem;
Zeile) , um zu beweisen, dass Geheimnisse aus dem Prozessspeicher und nicht nur aus der Befehlszeile austreten . Neukompilieren und usemem &
wiederholt ausführen strings /dev/sdaX | grep SECRET
. Dieses Mal wird das Geheimnis von 'XXXX' durchgesickert sein.