Системные библиотеки — это то, на чём держится всё в Linux. Замените один .so-файл на модифицированную версию, и вы получите скрытый бэкдор, который не увидит ни один антивирус. Программа выглядит как обычная часть системы, её цифровая подпись может быть валидной, а поведение — неотличимым от нормы. Разбираться с этим приходится инженерам безопасности и администраторам, которые получили инцидент или подозрение на компрометацию. В этой статье — практические способы обнаружить такую подмену от простых проверок до глубокого анализа.
- Почему вообще кто-то подменяет .so-файлы
- Первые шаги: признаки, что с системой что-то не так
- Проверка контрольных сумм: быстро, но не всегда полезно
- Проверка цифровых подписей и бинарных файлов
- Мониторинг в реальном времени: а что сейчас загружено?
- Сравнение загруженного в память и на диске
- Инструменты для автоматизированного поиска
- Как отличить подмену от штатного обновления
- Частые ошибки при выявлении подмен
- Как лучше поступить: зависимость от вашего случая
- Что в итоге
Почему вообще кто-то подменяет .so-файлы
Атакующему не нужно ломать вашу систему через уязвимость, когда можно тихо заменить одну библиотеку, при загрузке которой его код выполняется с правами того процесса, который её подключил. Замена libssl.so позволяет перехватывать трафик. Троян в libc.so даёт контроль почти над всеми процессами. Некоторые зловредные программы просто добавляют свои вызовы внутрь штатных функций, чтобы оставлять бэкдоры или воровать данные, активность которых не проявляется.
Первые шаги: признаки, что с системой что-то не так
Перед тем как лезть в библиотеки, стоит проверить, есть ли вообще подозрения. Нужный вам способ — проверка контрольных сумм, мониторинг файловой системы, анализ сетевой активности. Начните с простого:
-
Процесс, который вы не запускали, потребляет необычно много CPU или памяти и держится постоянно.
-
Сетевые соединения с неизвестными удалёнными адресами, особенно если они появляются через равные промежутки времени.
-
Изменение размера или даты модификации системного файла, которое произошло не после обновления.
-
error сегментации в стабильном приложении, которое раньше работало без сбоев.
Если вы отвечаете на эти признаки в своей системе, стоит проверять действительно ли библиотеки, с которыми работают процессы, не были заменены.
Проверка контрольных сумм: быстро, но не всегда полезно
Первое, что приходит в голову: сверить файл с эталонным. В пакетных менеджерах Debian/Ubuntu и Red Hat/CentOS встроены утилиты, которые умеют проверять целостность установленных пакетов.
Для Debian/Ubuntu:
dpkg --verify debsums -e
Для основанных на RPM:
rpm -Va
Команда rpm -Va проверяет все файлы, зафиксированные в базе RPM, сравнивая их размеры, права, контрольные суммы и другие атрибуты. Если библиотека была заменена, вы увидите изменения в выводе.
Но у этого метода есть серьёзный ограничение: он опирается на базу пакетного менеджера. Если зловред проник в систему и модифицировал саму эту базу (а это вполне реально при получении root-прав), проверка ничего не покажет. Кроме того, на скомпрометированном сервере вы не можете доверять ничему, что вам говорит система.
Что делать в этом случае:
-
Скачайте эталонный
.rpmили.debпакет с официального источника на чистую машину. -
Извлеките из него библиотеку:
rpm2cpio package.rpm | cpio -idmv ./path/to/lib.soилиdpkg-deb --extract package.deb ./extract_dir. -
Сравните контрольные суммы эталона и файла на сервере:
sha256sumобоих файлов.
Если суммы различаются — у вас проблема. Но имейте в виду: подмена могла быть сделана и с учетом того, что атакующий знал о таких проверках. Серьёзный зловред может подменять файл только при чтении определёнными способами, оставляя на диске оригинал. Поэтому одних контрольных сумм недостаточно.
Проверка цифровых подписей и бинарных файлов
На современных дистрибутивах многие библиотеки подписаны разработчиками. Проверить подпись можно через gpg для самих пакетов, а для ELF-бинарей используется встроенная проверка через pesign (в системах с UEFI Secure Boot) или вручную через readelf.
Более практичный подход — извлечь информацию из самого файла:
readelf -d /path/to/library.so file /path/to/library.so strings /path/to/library.so | grep -i "backdoor\|hook\|inject"
Команда readelf -d покажет динамические секции — если там есть необычные записи, сомнительные зависимости или изменения в адресах это сигнал. file быстро определит, действительно ли перед вами корректный ELF-файл ожидаемой архитектуры, а если это скрипт или просто текст — значит, что-то пошло не так. Через strings можно найти подозрительные строки и URL, которых в штатной библиотеке быть не должно.
Мониторинг в реальном времени: а что сейчас загружено?
Серьёзный инструмент обнаружения подмены — мониторинг того, какие библиотеки реально загружены в процессы прямо сейчас. Даже если файл на диске выглядит правильно, зловред может быть загружен динамически из скрытого места.
lsof и ltrace — ваши друзья:
lsof -p PID | grep "\.so" ltrace -p PID -e "*dlopen*" strace -p PID -e trace=open,openat
lsof покажет все открытые файлы процесса, включая загруженные .so. Посмотрите, нет ли библиотек из нестандартных путей (всё, что не в /lib, /usr/lib и подобных — подозрительно). ltrace перехватывает вызовы динамических библиотек в реальном времени, а strace с фильтром на open и openat покажет все попытки открыть файл.
Ещё один полезный приём: проверьте, что видит сам процесс в /proc/[pid]/maps:
cat /proc/$(pgrep suspected_process)/maps | grep "\.so"
Это покажет все загруженные в память библиотеки с их полными путями. Если путь ведёт во временную директорию или к файлу с нелогичным именем — бейте тревогу.
Сравнение загруженного в память и на диске
Один из самых надёжных методов — сравнить, что файл на диске идентичен тому, что загружен в оперативной памяти. Для этого есть инструмент memfd_create и анализ /proc/[pid]/mem, но на практике проще использовать готовые решения.
Volatility Framework для анализа дампов памяти позволяет извлечь загруженные модули и сравнить их с дисковыми версиями. Это уже уровень форензики, но если у вас есть подозрение на серьёзную компрометацию, такой анализ может выявить расхождения, которые не видны штатными средствами.
Инструменты для автоматизированного поиска
В таблице основные инструменты, которые реально используются на практике:
| Инструмент | Что делает | Когда использовать |
|---|---|---|
| Tripwire / AIDE | Создаёт базу контрольных сумм и при следующем запуске сравнивает файлы с эталонами. | Для регулярного мониторинга серверов. База должна храниться вне системы. |
| OSSEC (HIDS) | Аналогично AIDE, но с активным реагированием, логированием и возможностью работы в реальном времени. | Когда нужна активная реакция на изменения, не только обнаружение. |
| chkrootkit | Проверяет известные сигнатуры руткитов, в том числе подмены системных библиотек. | Быстрая первичная проверка. Не спасёт от неизвестных атак. |
| rkhunter | Сканирует систему на руткиты, проверяет замены библиотек, скрытые файлы и нестандартные настройки ядра. | Регулярный аудит после установки известных уязвимостей или маловероятных событий. |
| BlueCat Linux Audit | Аудит безопасности Linux-систем, включая проверку библиотек. | При выполнении нормативных требований и комплексных проверках. |
Как отличить подмену от штатного обновления
Сложность в том, что библиотеку могли обновить легитимно, и ваша проверка покажет расхождение с эталоном. Не нужно сразу бить в колокола. Разберитесь:
-
Проверьте историю пакетного менеджера:
grep "install\|upgrade" /var/log/dpkg.logдля Debian,rpm -qa --last | head -20для Red Hat. Если библиотека обновлялась — расхождение ожидаемо. -
Сравните версий файла с соседними серверами аналогичной конфигурации, если они есть.
-
Проверьте размер и дату изменения: штатное обновление обычно меняет файлы согласовано, в определённый день. Подмена часто имеет дату, выпадающую из общего паттерна.
Частые ошибки при выявлении подмен
Не надейтесь только на контрольные суммы — их легко обойти. Если вы ищете реальное решение, используйте многоуровневый подход.
Не проверяйте файлы из скомпрометированной системы utilities вроде
ls,md5sum,dpkgмогли быть заменены. Загружайтесь с live-USB и монтируйте диск для анализа.
Не забывайте про дампы памяти — саботаж мог произойти до перезагрузки, но в памяти ещё остались следы. // Формулировка нечёткая, переделаем совет.
Частые заблуждения:
- «Если rpm -Va ничего не показывает, значит, подмены нет» — нет. Зловред мог подменять вызовы на уровне загрузчика или работать только в памяти.
- «Мы проверяем контрольные суммы раз в суток, этого достаточно» — если зловред активен, он может откатить ваши изменения в ту же секунду.
- «Библиотека без изменений, потому что дата не вызывает подозрений» — серьёзные зловреды подменяют временные метки, чтобы скрыть следы.
Как лучше поступить: зависимость от вашего случая
Если вы админ и получили сообщение об изменении системного файла:
-
Не паникуйте. Запустите
rpm -Vaилиdebsumsи зафиксируйте, что изменилось. -
Сверьте с историей обновлений. Нет ли там легитимной причины?
-
Если расхождение подтверждается и не объясняется — выключите сетевой доступ для этого сервера и загрузитесь с live-носителя для анализа.
-
Скачайте эталонный пакет и сравните
sha256sumключевых библиотек.
Если вы реагируете на уже подтверждённую компрометацию:
-
Делайте дампы памяти и диска в текущем состоянии для последующего расследования.
-
Начинайте анализ с загрузочного live-окружения, доверяя только внешним носителям.
-
Проверьте все
.so-файлы, которые были загружены из нестандартных мест. -
Онлайн-базы вроде VirusTotal могут помочь идентифицировать известные зловредные файлы, но не дадут 100% гарантии.
Если вы поддерживаете парк из сотен серверов:
-
Автоматизируйте инвентаризацию библиотек с помощью систем вроде Ansible + скриптов, собирающих хэши всех
.so. -
Настройте OSSEC или Wazuh на контроль целостности с реакцией на изменения.
-
База хэшей должна храниться в защищённом хранилище и обновляться только через контролируемый канал.
Что в итоге
Выявить подмену .so-файла — это не одна волшебная команда, а последовательность шагов: от простой проверки контрольных сумм до анализа дампов памяти. На чистом сервере начните с rpm -Va или debsums. Если подозрение серьёзное — загрузитесь с live-USB и сравнивайте с эталонами извне. Для постоянной защиты используйте AIDE, OSSEC или аналоги, но помните, что их базу тоже нужно беречь от модификации.
Главное правило: не доверяйте системе, которую подозреваете. Любые инструменты, запущенные на ней, могут показывать подчищенные результаты. Только анализ вне среды даёт объективную картину.
