В случае обнаружения бэкдора Linux можно считать, что активы сервера повреждены и потеряны. Поскольку доля серверов Linux действительно относительно велика, риск стать целью и быть взломанным также возрастет.
Бэкдор BC00C10454FEB0D5C832C53648EACB0C
Поскольку файл бэкдора невелик, нет средств антианализа, таких как обфускация и выравнивание потока управления или добавление виртуальной оболочки, поэтому это относительно просто. И он модифицирован на основе бэкдора prism.После того, как бэкдор разобран инструментом, структура и логика относительно ясны. Я хотел задокументировать это как можно подробнее, чтобы добавить немного опыта с угрозами безопасности Linux.
Сначала откройте файл «/var/run/sshd.lock» в двоичном режиме и запросите, заблокирован ли он, подобно функции мьютекса, измените семафор SIGCHLD, чтобы установить завершение дочернего процесса, измените текущий каталог и затем декодируйте имя процесса.
Поскольку бэкдор не удаляет символ, можно обнаружить, что функция декодирования используется для декодирования имени процесса, поэтому я узнаю алгоритм кодирования ROT13, используемый бэкдором.Эта информация была запрошена и найдена, что она должна быть распространенный алгоритм в криптографии.
ROT13 (поворот на 13 позиций, иногда с дефисом в середине, называемый ROT-13) — это шифр простой замены, а кодирование ROT — это шифр простой замены в порядке расположения символов. Такие кодировки обратимы и саморасшифровываются.
ROT5: закодируйте только число и замените текущий номер на 5-й номер после текущего номера. Пример: 1——>6. ROT13: кодировать только буквы и заменить текущую букву 13-й буквой после текущей, например: A—>N. ROT18: Это выброс, это комбинация ROT5 и ROT13, например: 1a -> 6n. ROT47: кодировать числа, буквы и общие символы, заменять их в соответствии с их значениями ASCII и заменять текущий символ 47-м символом, соответствующим значению ASCII текущего символа вперед или назад, например: 0—>_, z - К.
Результат дизассемблирования функции декодирования бэкдора имеет некоторые очевидные характеристики по модулю 26, и есть целочисленные вычисления 64 и 96.
Сравнение исходного кода алгоритма, реализованного Python, показало, что он действительно похож
алгоритм rot13 | сочный лимон
https://seamiloak.github.io/2021/01/16/rot13%E7%AE%97%E6%B3%95/
Затем измените имя процесса.Если вы знаете больше об угрозах, связанных с Linux, вы обнаружите, что многие бэкдоры в Linux имеют такое поведение, а затем используйте fork для создания дочерних процессов для выполнения следующих операций.
sed -i '/z0gg.me/d' /etc/hosts
Удалите строку, содержащую z0gg.me, в содержимом файла hosts.
если grep -q '^[n]ameserver 8.8.8.8' /etc/resolv.conf; then echo yes > /dev/null; else echo 'nameserver 8.8.8.8' >> /etc/resolv.conf; fi > / Dev/ноль
Запишите адрес DNS-сервера 8.8.8.8 в файл resolv.conf.
Наконец, родительский процесс входит в функцию, которая создает rebound-шелл, и снова использует алгоритм ROT13 для расшифровки C2 с обратным подключением (z0gg.me), но есть три адреса, последние два из которых используются в качестве альтернативных адресов.
Альтернативный адрес: x63.in следующим образом.
Альтернативный адрес: x47.in следующим образом.
После того, как DNS запрашивает реальные IP-активы C2, он напрямую использует http-запрос для чтения только 32-байтового содержимого, возвращаемого сервером, и вычисляет для него хеш-значение md5, а затем сравнивает вычисленное хеш-значение md5 с локально внедренным. Сравнивается значение хеша md5 ef4a85e8fcba5b1dc95adaa256c5b482, и если оно пройдено одинаковое, то может быть выполнен ребаунд-шелл, если отличается, то back-connection C2 выполняться не будет.
Исходный код бэкдора prism выглядит следующим образом, и есть определенные сходства. Адрес: https://github.com/andreafabrizi/prism/blob/master/prism.c.
Когда компьютер-жертва и сервер пройдут интерактивную проверку, будет выполнена следующая команда: echo -e \"[\x1B[32m+\x1B[0m]`/bin/hostname`\n[\x1B[32m+\x1B[ 0m ]`/usr/bin/id`\n[\x1B[32m+\x1B[0m]`uname -r`\".
Интерпретировать echo -e \"[\x1B[32m+\x1B[0m]`/bin/hostname`\n[\x1B[32m+\x1B[0m]`/usr/bin/id`\n[\x1B[32m+\] Команда x1B[0m]`uname -r`\" выглядит следующим образом:
Приведенные выше странные строки — это управляющие коды для стандартного ввода, например:
экспорт const reset = "\x1b[0m"
экспорт const зеленый = "\x1b[32m"
Адрес источника ссылки: https://gist.github.com/abritinthebay/d80eb99b2726c83feb0d97eab95206c4
Обратные кавычки в команде используются для выполнения определенной команды, поэтому демонстрация выглядит следующим образом:
Прямой эффект выполнения Ubuntu20.04 выглядит следующим образом:
Прямой эффект выполнения CentOS7 выглядит следующим образом: