sshd rootkit на FreeBSD 7.3

Недавно, на один из старых серверов (там крутилась FreeBSD 7.3) пришла абуза от хостера, что на сервере замечен rootkit. Была информация, что при любом логине (а как позже оказалось, вообще при любой попытке, даже неудачной) на сервер он отправляет login/pass/ip на сервер злоумышленника в виде хитрого DNS запроса.

Недавно сообщалось, что такой руткит был найден на серверах с linux (там была протроянена либа libkeyutils.so). Гугление показало, что такого руткита для FreeBSD и в помине нет (а может плохо гуглил).

UPD: а вот похоже и оно

Пришлось разбираться, что к чему. Создал тестовый аккаунт, запустил tcpdump:

# tcpdump -i em0 -vtn port 53

и стал логиниться. Проблема заключалась в том, что данный сервер был одним из NS для парочки сайтов и поэтому на консоль сыпалось куча запросов. После нескольких попыток логина на сервер, мне удалось засечь искомый запрос:

IP (tos 0x0, ttl 64, id 38628, offset 0, flags [none], proto UDP (17), length 78) XX.XX.XX.XX.8162 > 72.156.139.154.53: 4619+ A? 714bf9e7255aefe071.YY.YY.YY.YY. (50)
IP (tos 0x0, ttl 64, id 38629, offset 0, flags [none], proto UDP (17), length 82) XX.XX.XX.XX.8163 > 72.156.139.154.53: 4619+ A? 6214fef6765aaae7605dfe.YY.YY.YY.YY. (54)

где XX.XX.XX.XX — IP моего сервера, YY.YY.YY.YY — IP, откуда я логинился.

Как пишут в сети, адрес 72.156.139.154 жёстко зашит в трояне. Хотя у вас, он может быть другим

Далее начиналось самое интересное: поиск руткита. Проходы сканеров rkhunter/chkrootkit не дали результата.

Пришлось исследовать сам бинарник sshd.

# ls -la /usr/sbin/sshd
-rwxr-xr-x 1 root wheel 449176 Jun 16 2010 /usr/sbin/sshd

С датой всё нормально, хотя её просто поменять через touch, поэтому идём дальше. Ради интереса, посмотрел, какие либы использует:

# ldd /usr/sbin/sshd
/usr/sbin/sshd:
libpam.so.4 => /usr/lib/libpam.so.4 (0x800698000)
libcrypto.so.5 => /lib/libcrypto.so.5 (0x8007a0000)
libutil.so.7 => /lib/libutil.so.7 (0x800a2b000)
libz.so.4 => /lib/libz.so.4 (0x800b3a000)
libcrypt.so.4 => /lib/libcrypt.so.4 (0x800c4e000)
libgssapi.so.9 => /usr/lib/libgssapi.so.9 (0x800d67000)
libkrb5.so.9 => /usr/lib/libkrb5.so.9 (0x800e6e000)
libasn1.so.9 => /usr/lib/libasn1.so.9 (0x800fb1000)
libroken.so.9 => /usr/lib/libroken.so.9 (0x8010db000)
libcom_err.so.4 => /usr/lib/libcom_err.so.4 (0x8011e9000)
libc.so.7 => /lib/libc.so.7 (0x8012eb000)

А где-же либа libssh? Глянул на других серверах:

ldd /usr/sbin/sshd
/usr/sbin/sshd:
libssh.so.4 => /usr/lib/libssh.so.4 (0x800669000)
libutil.so.7 => /lib/libutil.so.7 (0x8007a9000)
libz.so.4 => /lib/libz.so.4 (0x8008b8000)
libwrap.so.5 => /usr/lib/libwrap.so.5 (0x8009cc000)
libpam.so.4 => /usr/lib/libpam.so.4 (0x800ad5000)
libbsm.so.2 => /usr/lib/libbsm.so.2 (0x800bdd000)
libgssapi.so.9 => /usr/lib/libgssapi.so.9 (0x800cf3000)
libgssapi_krb5.so.9 => /usr/lib/libgssapi_krb5.so.9 (0x800dfa000)
libcrypto.so.5 => /lib/libcrypto.so.5 (0x800f09000)
libcrypt.so.4 => /lib/libcrypt.so.4 (0x801194000)
libc.so.7 => /lib/libc.so.7 (0x8012ad000)
libkrb5.so.9 => /usr/lib/libkrb5.so.9 (0x8014d1000)
libasn1.so.9 => /usr/lib/libasn1.so.9 (0x801614000)
libcom_err.so.4 => /usr/lib/libcom_err.so.4 (0x80173e000)
libmd.so.4 => /lib/libmd.so.4 (0x801840000)
libroken.so.9 => /usr/lib/libroken.so.9 (0x80194c000)

Вот оно! Протрояненный sshd. Сравнил размеры:

-r-xr-xr-x 1 root wheel 237712 Jan 9 15:45 /usr/sbin/sshd

и протрояненный:

-rwxr-xr-x 1 root wheel 449176 Jun 16 2010 /usr/sbin/sshd

У руткита размер в 2 раза больше и либ он использует тоже в раза меньше.

Далее, дело оставалось за малым: подменить нужный sshd. Для этого, качаю FreeBSD 7.3, ставлю на виртуалку и пробую подменить бинарник простым cp. Но не тут-то было. Пошла ругань:

text file busy

Выход был быстро найден: запускаю новый sshd_new на порту 8844, подключаюсь к нему, убиваю все соединения троянского sshd, копирую троянский (для исследований), подменяю sshd, запускаю нормально.

После этого отправка запросов на 53 порт исчезла.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *