Руткиты. Вирусы. Трояны. Бэкдоры. Мудаки и все..все..все…

11Эта статья посвящена тем самым неприятным вещам, с которыми сталкивался практически любой пользователь, любой операционной системы, это руткиты (Rootkit), вирусы (Virus), трояны (Trojan), бэкдоры (Backdoor), експлоиты (Exploit) и прочие “приятные” штучки. Я вам сейчас не буду копировать пол Wikipedia’и сюда, захотите, сами прочтете, тем самым обременив свой мозг долей более-менее полезной информации. Еще один острый вопрос, который, как тень, сопровождает любые посты с подобной темой. А есть ли вирусы под Linux? Нет! А почему нет!? И так далее по списку. Однозначный ответ на данный вопрос вы не получите, сколько не старайтесь. Однако есть обобщение, вирусов нет и быть не может, так как само понятие “вирус” т.е. самовоспроизведение в Linux работать не будет. Трояны, руткиты и бэкдоры, вот тут уже всё сложнее, эти твари есть, так в данном случае система не суть важна, важно то, на сколько опытен пользователь системы. Но опять таки, условия жизни в Linux, для них сравнимы с условием жизни человека на марсе. Продолжение философии, а так же некоторые полезные советы под катом.

Философия

Я проработал с системой Linux уже более трех лет, проблем не испытывал ни разу. Однако последнее время, умные злоумышленники активно эксплуатируют “дыры и недостатки” сторонних и закрытых приложений, которые работают на Linux, но не имеют к нему и к GNU в целом никакого отношения. Например сейчас излюбленным средством травли, стал Flash и PDF от проприетарного и жадного Adobe, именно в PDF файле у себя на лэптопе я обнаружил чужеродный эксплоит, который в прочем не работал, но факт остается фактом, из-за поганого Adobe моя система подвержена риску.

Однако основным типом угрозы для системы, до сих пор, остается пользователь который на ней работает. Так как к примеру я могу написать “вирус” “rm -rf /*” завернуть его в Perl скрипт и вывесить где нибудь на форуме с просьбой помочь разобраться в коде, который я пишу для свой докторской. Думаю бывалые читатели уже вспомнили, такое случалось, и много людей на этом погорели, так как запускали данный скрипт, даже с правами рута на важных серверах у себя на работе.

В целом, в Linux есть еще одно огромное преимущество, он прозрачен, и если вы умеете мониторить систему и выявлять малейшие отклонения от нормы, то даже при вторжении (заметьте вторжение, т.е. человек, не программа) в систему, вы сможете своевременно это заметить. Ну а если вы еще более продвинутый пользователь, то ваша система защищена такими штуками как правильно расставленные права на запись\чтение\исполнения для папок в системе, важные папки вынесены на отдельные партиции с совершенно другой файловой системой и правами, у вас настроены квоты и ограничения памяти для каждого процесса (вспомним SELinux). Понятно, что слово квота очень обширное и позволяет закрыться так (имея при этом достаточные знания), что даже человек, который скажем взломает ваш SSH не сможет и два шага ступить. А если у вас настроены оповещения, скажем по почте, о том, что кто то залогинился по SSH, будь то вы или другой пользователь, ты вы будете своевременно оповещены и примите меры.

Руткиты, бэкдоры, експлоиты

Руткиты это опасно. И лишний раз провериться никому не помешает, в этом вам поможет утилита Rootkit Hunter. Это консольная утилита, которая обладает большими способностями и способна обезопасить вас от зловредного и хитрого кода. Она ищет такие вещи как руткиты, бэкдоры и експлоты.

Что она делает?
– Проверку MD5 хэша для фалов (не внесены ли в них изменения)
– Проверяет стандартные файлы на наличие в них стороннего кода
– Подозрительные права для бинарных пакетов
– Ищет подозрительный код в LKM и KLD модулях

Установить ее можно просто:

sudo apt-get install rkhunter
sudo apt-get install rkhunter

Сразу после установки необходимо обновить:

sudo rkhunter --update
sudo rkhunter --update

Теперь, непосредственно перед запуском, необходимо заполнить файл БД для программы:

sudo rkhunter --propupd --pkgmgr dpkg
sudo rkhunter --propupd --pkgmgr dpkg

Начать сканирование:

sudo rkhunter --check --pkgmgr dpkg
sudo rkhunter --check --pkgmgr dpkg

Это всё в общих чертах. Для более подробной информации смотри:

rkhunter
rkhunter

Есть еще утилита, это chkrootkit, ее вы тоже сможете найти в репозитариях.
Будьте осторожны при использовании утилиты, так как иногда она принимает действительное за желаемое, т.е. ошибается.
Зачастую это:

dev/.static/, /dev/.udev & /dev/.udevdb/
/etc/.pwd.lock
/etc/.java/
/dev/.initramfs, /dev/.initramfs-tools

И напоследок. Сама утилита rkhunter конечно же не совершенна и так же может быть подвергнута атаке руткитом и притом успешно. По этому самым идеальным вариантом, является запуск утилиты с флешки!

Вирусы

Тут в Linux существуют целая панацея, это Clam AntiVirus. Это свободный и открытый антивирус, который знаком почти всем пользователям мира Linux. Из преимуществ программы стоит отметить:

– быстрый и многопоточный демон с поддержкой сканирования
– интерфейс sendmail (отправка уведомлений по почте)
– продвинутый updater с поддержкой зашифрованных обновлений и обновлений с цифровой подписью
– сканер C библиотек
– базы обновляются несколько раз в день
– копошиться в архивах Zip, RAR, Tar, Gzip, Bzip2, OLE2, Cabinet, CHM, BinHex, SIS
– копошиться в почте и базах данных (как у Firefox хранятся coocie)
– копошиться в файлах MS Office, MacOffice, HTML, RTF и PDF

т.е. проверяет всё!

Установка:

sudo aptitude install clamav clamav-daemon clamav-freshclam
sudo aptitude install clamav clamav-daemon clamav-freshclam

Для графического интерфейса:

wget http://puzzle.dl.sourceforge.net/sourceforge/clamtk/clamtk_3.05-1_all.deb
wget http://puzzle.dl.sourceforge.net/sourceforge/clamtk/clamtk_3.05-1_all.deb

Ставим загруженный файл:

sudo dpkg -i clamtk_3.05-1_all.deb
sudo dpkg -i clamtk_3.05-1_all.deb

Исправляем зависимости:

sudo apt-get -f install
sudo apt-get -f install

Приложения > Стандартные > Virus Scanner
Распинаться о прелестях графического интерфейса я не стану, он русский и интуитивно понятный.

1

К слову, демон обновления всегда запущен в вашей системе, так что вам не придется тревожиться о своевременном обновлении:

ps -ef | grep clam
clamav    1312     1  0 19:44 ?        00:00:00 /usr/bin/freshclam -d--quiet
ps -ef | grep clam
clamav    1312     1  0 19:44 ?        00:00:00 /usr/bin/freshclam -d -с --quiet

Стоит заметить, что Clam AntiVirus чаще всего используют для проверки Windows разделов, а так же для выявление вредоносного кода в php страницах, web-python и прочего. Как и Rootkit Hunter, Clam AntiVirus можно использовать с флешки.

Для справки и более полноценного использования:

man /usr/bin/freshclam
man clamscan
man clambc
man /usr/bin/freshclam
man clamscan
man clambc

Еще антивирусы для Linux:

Symantec AntiVirus for Linux
Clam AntiVirus
Kaspersky Anti-Virus for Linux Workstation
Panda Antivirus for Linux
Vexira Antivirus for Linux
Avast

Сетевая безопасность

В заботе о сетевой безопасности вам поможет уже встроенный к вам в систему файрволл iptables. Но так как он крайне сложен в использовании и обладает огромным количеством опций. Обывателю будет достаточно его GUI оболчки firestarter.

Ставиться просто:

sudo aptitude install firestarter
sudo aptitude install firestarter

Система > Администрирование > Firestarter

2

С помощью него вы сможете посмотреть активные сетевые соединения и то, какая именно программа выходит в сеть. А далее покопавшись в настройках настроить его под себя. В окошке Events вы всегда сможете увидеть подробную информацию о том, что именно было заблокировано, это может оказаться полезным в том случае, если например Firestarter закрыл ваш торрент или порты для обновления системы.

На закуску

Я знаю, что в принципе, каждая из описанных мною сегодня программ, достойна отдельного поста, или нескольких (iptables?). Но я постарался в общем дать вам представление о том, какие угрозы существуют в мире Linux и как их избежать, а так же дал вам список антивирусных программ для Linux, но это чисто поржать :-))

То, что за безопасностью нужно следить, подтверждает факт определения у меня в системе нерабочего эксплоита в PDF файле. Это к слову об антивирусе. Ну и вот вам листинг моего лога /var/log/auth.log:

Jun 14 20:54:21 alexlinux sshd[18806]: Invalid user nagios from 119.188.7.164
Jun 14 20:54:21 alexlinux sshd[18806]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 20:54:21 alexlinux sshd[18806]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=119.188.7.164 
Jun 14 20:54:22 alexlinux sshd[18806]: Failed password for invalid user nagios from 119.188.7.164 port 63797 ssh2
Jun 14 08:07:10 alexlinux sshd[17779]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125  user=root
Jun 14 08:07:12 alexlinux sshd[17779]: Failed password for root from 60.191.93.125 port 35626 ssh2
Jun 14 08:08:03 alexlinux sshd[17784]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125  user=root
Jun 14 08:08:04 alexlinux sshd[17784]: Failed password for root from 60.191.93.125 port 47919 ssh2
Jun 14 08:08:56 alexlinux sshd[17786]: Invalid user fax from 60.191.93.125
Jun 14 08:08:56 alexlinux sshd[17786]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:08:56 alexlinux sshd[17786]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:08:57 alexlinux sshd[17786]: Failed password for invalid user fax from 60.191.93.125 port 57779 ssh2
Jun 14 08:09:37 alexlinux sshd[17788]: Invalid user ls from 60.191.93.125
Jun 14 08:09:37 alexlinux sshd[17788]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:09:37 alexlinux sshd[17788]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:09:39 alexlinux sshd[17788]: Failed password for invalid user ls from 60.191.93.125 port 39201 ssh2
Jun 14 08:10:51 alexlinux sshd[17790]: Invalid user a from 60.191.93.125
Jun 14 08:10:51 alexlinux sshd[17790]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:10:51 alexlinux sshd[17790]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:10:53 alexlinux sshd[17790]: Failed password for invalid user a from 60.191.93.125 port 56922 ssh2
Jun 14 08:11:42 alexlinux sshd[17793]: Invalid user raimundo from 60.191.93.125
Jun 14 08:11:42 alexlinux sshd[17793]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:11:42 alexlinux sshd[17793]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:11:44 alexlinux sshd[17793]: Failed password for invalid user raimundo from 60.191.93.125 port 34634 ssh2
Jun 14 08:13:05 alexlinux sshd[17797]: Invalid user raimundo from 60.191.93.125
Jun 14 08:13:05 alexlinux sshd[17797]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:13:05 alexlinux sshd[17797]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:13:07 alexlinux sshd[17797]: Failed password for invalid user raimundo from 60.191.93.125 port 52050 ssh2
Jun 14 08:16:21 alexlinux sshd[17802]: Invalid user raimundo from 60.191.93.125
Jun 14 08:16:21 alexlinux sshd[17802]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:16:21 alexlinux sshd[17802]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:16:23 alexlinux sshd[17802]: Failed password for invalid user raimundo from 60.191.93.125 port 35818 ssh2
Jun 14 20:54:21 alexlinux sshd[18806]: Invalid user nagios from 119.188.7.164
Jun 14 20:54:21 alexlinux sshd[18806]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 20:54:21 alexlinux sshd[18806]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=119.188.7.164 
Jun 14 20:54:22 alexlinux sshd[18806]: Failed password for invalid user nagios from 119.188.7.164 port 63797 ssh2
Jun 14 08:07:10 alexlinux sshd[17779]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125  user=root
Jun 14 08:07:12 alexlinux sshd[17779]: Failed password for root from 60.191.93.125 port 35626 ssh2
Jun 14 08:08:03 alexlinux sshd[17784]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125  user=root
Jun 14 08:08:04 alexlinux sshd[17784]: Failed password for root from 60.191.93.125 port 47919 ssh2
Jun 14 08:08:56 alexlinux sshd[17786]: Invalid user fax from 60.191.93.125
Jun 14 08:08:56 alexlinux sshd[17786]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:08:56 alexlinux sshd[17786]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:08:57 alexlinux sshd[17786]: Failed password for invalid user fax from 60.191.93.125 port 57779 ssh2
Jun 14 08:09:37 alexlinux sshd[17788]: Invalid user ls from 60.191.93.125
Jun 14 08:09:37 alexlinux sshd[17788]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:09:37 alexlinux sshd[17788]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:09:39 alexlinux sshd[17788]: Failed password for invalid user ls from 60.191.93.125 port 39201 ssh2
Jun 14 08:10:51 alexlinux sshd[17790]: Invalid user a from 60.191.93.125
Jun 14 08:10:51 alexlinux sshd[17790]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:10:51 alexlinux sshd[17790]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:10:53 alexlinux sshd[17790]: Failed password for invalid user a from 60.191.93.125 port 56922 ssh2
Jun 14 08:11:42 alexlinux sshd[17793]: Invalid user raimundo from 60.191.93.125
Jun 14 08:11:42 alexlinux sshd[17793]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:11:42 alexlinux sshd[17793]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:11:44 alexlinux sshd[17793]: Failed password for invalid user raimundo from 60.191.93.125 port 34634 ssh2
Jun 14 08:13:05 alexlinux sshd[17797]: Invalid user raimundo from 60.191.93.125
Jun 14 08:13:05 alexlinux sshd[17797]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:13:05 alexlinux sshd[17797]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:13:07 alexlinux sshd[17797]: Failed password for invalid user raimundo from 60.191.93.125 port 52050 ssh2
Jun 14 08:16:21 alexlinux sshd[17802]: Invalid user raimundo from 60.191.93.125
Jun 14 08:16:21 alexlinux sshd[17802]: pam_unix(sshd:auth): check pass; user unknown
Jun 14 08:16:21 alexlinux sshd[17802]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.191.93.125 
Jun 14 08:16:23 alexlinux sshd[17802]: Failed password for invalid user raimundo from 60.191.93.125 port 35818 ssh2

Конечно, большинство из них тупые китайские боты, которые долбяться куда не попадя используя стандартные логины, типа: root, user, admin, oracle, apache и т.п. Но есть и люди, так как я живу в Израиле, я заметил, что имеется тенденция атак на SSH из Ирана с реально существующих IP адресов, от реально существующих арабских мудаков, которые сканируют все подряд израильские IP.

3

По этому!
Всегда следите за вашими SSH, Samba, NFS, FTP, Telnet, Web серверами, особенно если ваш IP смотрит в мир, как у меня. Сидите за брандмауэром, меняйте стандартные порты и логины, ставьте длинные пароли и конечно же, никогда не запускайте у себя в системе скрипты, которые вам не понятны.

С уважением.