
Das macht mir etwas Sorgen: Ich benutzeverdammtum einen CentOS 6-Server auf Änderungen an Dateien und Verzeichnissen zu überwachen. Ich möchte Änderungen an Binärdateien, PHP-Skripten, die auf den Server geschmuggelt werden, Konfigurationsdateien, die sich ändern, usw. erkennen. Dies läuft täglich und ich bekomme eine E-Mail mit erkannten Änderungen. Normalerweise enthält es nur Protokolldateien und Änderungen, nachdem ich meinen Webcode aktualisiert oder neue Software installiert habe. Heute habe ich anscheinend den Jackpot geknackt, aber ich bin mir nicht sicher.
Ich habe eine E-Mail erhalten, in der die MD5-Prüfsumme von Hunderten von Dateien geändert wurde, nicht jedoch deren Zeitstempel oder Größe. Dies umfasst ausführbare Dateien wie , /bin/gawk
aber auch Bibliotheken wie /lib/libasound.so.2.0.0
. Dies alles geschah zwischen 4:00 Uhr am 1. Januar und 4:00 Uhr am 2. Januar (afick läuft um 4:00 Uhr).
Als Test habe ich /bin/gawk aus dem Backup wiederhergestellt und eine manuelle MD5-Prüfsumme ausgeführt; tatsächlich hat sich die Datei geändert. Aber ein Unterschied zwischen den beiden Binärdateien ist nicht ganz eindeutig:
--- old.gawk.hex 2017-01-02 15:56:06.000000000 +0100
+++ new.gawk.hex 2017-01-02 15:56:14.000000000 +0100
@@ -881,12 +881,12 @@
00003700 a6 03 00 00 00 00 00 00 d1 04 00 00 12 00 0d 00 |................|
00003710 f0 6d 42 00 00 00 00 00 2a 10 00 00 00 00 00 00 |.mB.....*.......|
00003720 01 00 00 00 b0 6b 5a 56 65 fd 1b 6d 00 00 00 00 |.....kZVe..m....|
-00003730 00 00 00 00 44 00 00 00 b0 6b 5a 56 b2 04 c4 e2 |....D....kZV....|
+00003730 00 00 00 00 44 00 00 00 56 e5 5d 58 82 a0 c7 cf |....D...V.]X....|
00003740 00 00 00 00 00 00 00 00 62 00 00 00 b0 6b 5a 56 |........b....kZV|
00003750 58 97 65 11 00 00 00 00 00 00 00 00 97 10 00 00 |X.e.............|
00003760 b0 6b 5a 56 30 fb 60 86 00 00 00 00 00 00 00 00 |.kZV0.`.........|
00003770 b0 2f 40 83 34 00 00 00 01 00 00 00 00 00 00 00 |./@.4...........|
-00003780 e0 08 65 00 00 00 00 00 e0 1f c8 83 34 00 00 00 |..e.........4...|
+00003780 e0 08 65 00 00 00 00 00 e0 1f 88 0a 35 00 00 00 |..e.........5...|
00003790 01 00 00 00 00 00 00 00 08 09 65 00 00 00 00 00 |..........e.....|
000037a0 50 2d 15 83 34 00 00 00 01 00 00 00 00 00 00 00 |P-..4...........|
000037b0 d0 ff ff ff ff ff ff ff 58 2d 15 83 34 00 00 00 |........X-..4...|
@@ -19806,13 +19806,13 @@
*
000501e0 28 00 65 00 00 00 00 00 1e 59 40 00 00 00 00 00 |(.e......Y@.....|
000501f0 00 00 00 00 00 00 00 00 00 b1 e8 82 34 00 00 00 |............4...|
-00050200 10 cd ec 82 34 00 00 00 50 32 a2 83 34 00 00 00 |....4...P2..4...|
-00050210 80 79 e6 82 34 00 00 00 e0 2f a2 83 34 00 00 00 |.y..4..../..4...|
+00050200 10 cd ec 82 34 00 00 00 50 32 62 0a 35 00 00 00 |....4...P2b.5...|
+00050210 80 79 e6 82 34 00 00 00 e0 2f 62 0a 35 00 00 00 |.y..4..../b.5...|
00050220 20 87 e7 82 34 00 00 00 20 bc e8 82 34 00 00 00 | ...4... ...4...|
00050230 20 9f e7 82 34 00 00 00 b0 05 e8 82 34 00 00 00 | ...4.......4...|
00050240 d0 af e9 82 34 00 00 00 20 5e ed 82 34 00 00 00 |....4... ^..4...|
00050250 40 7e ee 82 34 00 00 00 40 71 ec 82 34 00 00 00 |@[email protected]...|
-00050260 10 9d e9 82 34 00 00 00 30 6f a1 83 34 00 00 00 |....4...0o..4...|
+00050260 10 9d e9 82 34 00 00 00 30 6f 61 0a 35 00 00 00 |....4...0oa.5...|
00050270 f0 d7 ec 82 34 00 00 00 60 19 e3 82 34 00 00 00 |....4...`...4...|
00050280 e0 b1 e9 82 34 00 00 00 10 85 ee 82 34 00 00 00 |....4.......4...|
00050290 30 84 ec 82 34 00 00 00 40 20 e6 82 34 00 00 00 |0...4...@ ..4...|
(etc)
Natürlich dachte ich zuerst an Hacking, aber als ich den Unterschied sah, wurde ich skeptisch. Es scheint, als hätte sich kein echter Code geändert. Ich bin kein Experte für ELF-Binärdateien, aber ich glaube, das sind nur Verschiebungs-Offsettabellen für gemeinsam genutzte Bibliotheken.
Was glauben Sie also, ist wirklich passiert? Abgesehen vom Hacken fällt mir nur eine „Sicherheitsmaßnahme“ ein, bei der die Offsets gemeinsam genutzter Bibliotheken zufällig festgelegt werden und die verknüpften Binärdateien ebenfalls aktualisiert werden müssen. Aber warum jetzt? Das letzte Mal, dass ich Software installiert habe, war am 23. Dezember und in der Zwischenzeit ist nichts Ungewöhnliches passiert. Der einzige Cronjob, der damit zusammenhängen könnte, ist /etc/cron.daily/prelink, aber wenn ja, warum jetzt?
Antwort1
Der Unterschied in den binären Prüfsummen, den Sie beschrieben haben, ist wahrscheinlich auf das Prelinking zurückzuführen. RHEL-basierte Linux-Distributionen wie CentOS und Fedora haben Prelinking standardmäßig aktiviert. Hier sehen Sie, wie ein 2009LWN.net-Artikelerklärt das Konzept hinter Prelink:
Linux-Programme bestehen normalerweise aus einer binären ausführbaren Datei, die auf mehrere gemeinsam genutzte Bibliotheken verweist. Diese Bibliotheken werden einmal in den Speicher geladen und von mehreren ausführbaren Dateien gemeinsam genutzt. Damit dies möglich ist, muss der dynamische Linker (z. B. ld.so) die Binärdatei im Speicher so ändern, dass alle Adressen der Bibliotheksobjekte auf die richtige Stelle im Speicher verweisen. Bei Anwendungen mit vielen gemeinsam genutzten Bibliotheken – beispielsweise GUI-Programmen – kann dieser Vorgang einige Zeit in Anspruch nehmen.
Die Idee hinter dem Prelinking ist ziemlich einfach: Reduzieren Sie die Zeit, die der dynamische Linker für diese Adressverschiebungen benötigt, indem Sie sie im Voraus durchführen und die Ergebnisse speichern. Das Prelink-Programm verarbeitet ELF-Binärdateien und gemeinsam genutzte Bibliotheken auf die gleiche Weise wie ld.so und fügt dann den Dateien spezielle ELF-Abschnitte hinzu, die die Verschiebungen beschreiben. Wenn ld.so eine vorverlinkte Binärdatei oder Bibliothek lädt, überprüft es diese Abschnitte und kann seine Arbeit viel schneller erledigen, wenn die Bibliotheken am erwarteten Speicherort geladen werden und sich die Bibliothek nicht geändert hat.
Wenn Bibliotheken jedoch immer an denselben Speicherort geladen werden, können Angreifer versuchen, diese Orte mit Schadcode anzugreifen. Aus diesem Grund werden Redhat-Distributionen prelink
regelmäßig mit dieser -R
Option ausgeführt (um eine zufällige Anordnung des Adressraumlayouts zu erreichen). Eine Folge der Änderung von Speicherorten ist, dass sich die Prüfsumme von ausführbaren Binärdateien ändert. Wenn Sie also einen Dateiintegritätsprüfer wie AIDE verwenden, werden Sie über eine „geänderte“ Binärdatei benachrichtigt, obwohl die einzige Änderung, die aufgetreten ist, ASLR über ist prelink -R
.