2

Это немного беспокоит меня: я использую afick для отслеживания изменений в файлах и каталогах на сервере CentOS 6. Я хочу обнаружить изменения в двоичных файлах, PHP-скриптах, которые переправляются на сервер контрабандой, файлах конфигурации, которые меняются, и т.д. Это выполняется ежедневно, и я получаю электронное письмо с обнаруженными изменениями. Обычно он содержит только файлы журнала и изменения после того, как я обновил свой веб-код или установил новое программное обеспечение. Сегодня я, кажется, выиграл джекпот, но я не уверен.

Я получил электронное письмо, в котором изменилась контрольная сумма MD5 сотен файлов, но не их отметка времени или размер. Это включает в себя исполняемые файлы, такие как /bin/gawk а также библиотеки как /lib/libasound.so.2.0.0 . Все это произошло между 4:00 1 января и 4:00 2 января (афина проходит в 4:00).

В качестве теста я восстановил /bin /gawk из резервной копии и запустил контрольную сумму md5 вручную; действительно файл изменился. Но разница между двумя двоичными файлами не совсем убедительна:

--- 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  |@~..4...@q..4...|
-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)

Конечно, моя первая мысль была о хакерстве, но когда я смотрю на различия, я удивляюсь. Никакой реальный код, кажется, не изменился; Я не эксперт по двоичным файлам ELF, но я думаю, что это только таблицы смещения для общих библиотек.

Так что вы думаете на самом деле произошло? Помимо взлома, единственная другая возможность, о которой я могу подумать, это мера «безопасности», в которой смещения совместно используемых библиотек рандомизируются, а также должны быть обновлены связанные двоичные файлы. Но почему сейчас? Последний раз, когда я устанавливал какое-то программное обеспечение, было 23 декабря, и между ними не было ничего странного. Единственный cronjob, который может быть связан, это /etc/cron.daily/prelink, но если так, то почему сейчас?

1 ответ1

1

Разница в описанных вами двоичных контрольных суммах, вероятно, связана с предварительной связью. В дистрибутивах Linux на основе RHEL, таких как CentOS и Fedora, предварительные ссылки включены по умолчанию. Вот как статья 2009 года на LWN.net объясняет концепцию предварительной ссылки:

Программы Linux обычно состоят из двоичного исполняемого файла, который ссылается на несколько общих библиотек. Эти библиотеки загружаются в память один раз и используются несколькими исполняемыми файлами. Чтобы это произошло, динамический компоновщик (т.е. ld.so) должен изменить двоичный файл в памяти так, чтобы любые адреса объектов библиотеки указывали на правильное место в памяти. Для приложений со многими общими библиотеками - например, программами с графическим интерфейсом - этот процесс может занять некоторое время.

Идея предварительной компоновки довольно проста: сократить количество времени, которое динамический компоновщик должен тратить на перемещение этих адресов, делая это заранее и сохраняя результаты. Программа prelink обрабатывает двоичные файлы ELF и разделяемые библиотеки практически так же, как это делает ld.so, а затем добавляет в файлы специальные разделы ELF, описывающие перемещения. Когда ld.so загружает предварительно связанный двоичный файл или библиотеку, он проверяет эти разделы и, если библиотеки загружаются в ожидаемом месте, а библиотека не изменилась, он может выполнять свою работу намного быстрее.

Однако, если библиотеки всегда загружается в том же месте памяти, злоумышленники могут попытаться предназначаться эти места с вредоносным кодом, поэтому запустить prelink RedHat дистрибутива регулярно с опцией -R (для достижения Address Space Layout Рандомизации). Одним из последствий изменения расположения памяти является то, что контрольная сумма двоичных исполняемых файлов будет изменяться. Поэтому, если вы используете средство проверки целостности файлов, такое как AIDE, вы будете предупреждены об "измененном" двоичном файле, когда на самом деле единственное изменение, которое произошло, - это ASLR через prelink -R .

Ссылки: https://en.wikipedia.org/wiki/Prelink#Linux

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .