Информационные технологииStfw.Ru 🔍

Защита от троянских программ и руткитов в FreeBSD

Dru Lavigne
🕛 11.08.2006, 11:50
unixtalk.ru
Более продвинутые пользователи наверняка улыбнутся, и самодовольно подумают - "Именно поэтому я выбрал Unix-систему".

Истина же в том, что подобные неприятности в системах, где есть Unix, несомненно меньше, но всё же они случаются. Чем больше пользователей Unix, тем больше будет эксплоитов и тем чаще они будут использованы против системы. К счастью у вас, как у пользователя FreeBSD, есть много полезных и доступных утилит, а также можно приобрести несколько хороших привычек. Далее разговор пойдёт об этих утилитах и привычках.

Начнём сначала

Первая привычка, о которой я говорила много раз, состоит в том, чтобы находиться за брандмауэром (firewall, иногда межсетевой экран или межсетевая защита). Не имеет значения, какая именно программа будет использована для защиты, для начала выберите то, что вам удобнее настроить. Если вас пугает изучение синтаксиса if или iw, то вложите деньги в недорогой аппаратный firewall, c предварительными настройками. Если вы уже настроили брандмауэр на вашей системе Windows, то вам стоит разместить вашу FreeBSD за ней, до тех пор, пока вы не будете готовы занятся конфигурацией защиты в Unix.

Почему такое большое внимание к firewall? Rootkits - это автоматизированные комплекты, которые просматривают узлы интернета на предмет наличия открытых портов. Как только руткит обнаруживает порт, на который можно напасть, он пробует войти в эту систему. Должным образом сконфигурированная домашняя межсетевая защита не будет показывать никаких открытых портов, так что руткит пройдёт мимо вас и примется искать новую жертву.

Но что, если вы не были за firewall? Как Вам узнать - содержит ли ваша система нежелательное программное обеспечение?

В большинстве случаев, без большой исследовательской работы очень трудно узнать об этом. Лучший совет - сделайте копии ваших файлов данных, переустановите их, и установите firewall, до повторного соединения с интернетом.

От переводчика: Имеется ввиду предварительное создание архива данных, до выхода в сеть.

Предположим, что вы за firewall. Вам нужно убедиться в этом, чтобы узнать действительно ли скрыты все ваши порты. Начнём с машин, находящихся за firewall, порты которых открыты. Применительно к каждой машине, независимо от операционной системы, запустим в командной строке команду:

$ netstat -an
Мы видим, что для каждой строки, начинающейся с tc или ud, записывается номер или название порта, которое можно найти в секции Локальный адрес. Если вы запускаете эту команду на FreeBSD, проигнорируйте некорректно выглядящие строки после 'Active UNIX domain sockets ' (Активные сокеты домена Unix ), поскольку они не имеют никакого отношения к номерам портов.

Система FreeBSD поставляется c командой sockstat, которая показывает открытые порты. Я предпочитаю её выводные данные таковым же в команде netstat.

От переводчика: Сокет - это идентификатор конкретной службы на конкретном узле сети. Сокет состоит из адреса узла и номера порта, используемого службой.

С тех пор как во FreeBSD по умолчанию появились как Iv4, так и IPv6, я не заинтересована только в сокетах домена Unix, поэтому обычно я запускаю эту команду так:

$ sockstat -46
Записывайте результаты выполнения команды sockstat или netstat для каждой машины в вашей домашней сети, и периодически повторяйте команду. Таким образом, вы будете знать, какие порты должны быть открыты и узнаете не появился ли внезапно дополнительный открытый порт в вашей системе. Вероятно, идеальным решением будет полностью закрыть порты, если вы не нуждаетесь в разных портах открытых в вашей домашней системе.

Инструкция, как закрывать порты на вашей FreeBSD лежит здесь - http://www.onlamp.com/ub/a/bsd/2002/08/08/FreeBSD_Basics.html.

Когда вы записали все открытые порты на ваших компьютерах, вам нужно посмотреть - не показывает ли ваш firewall какой-либо из них интернету. Лучше всего использовать для этих целей nma. Если вы никогда не пользовались nma, то пролистайте вот это: http://www.onlamp.com/ub/a/bsd/2001/04/18/FreeBSD_Basics.html

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

Полный просмотр всех TCP и UDP портов будет продолжаться очень долго.

Эта команда запустит такой просмотр:

$ nmap -v -P0 -sU - 1-65535 IP_ADDRESS
где IP_ADDRESS - адрес вашего сетевого устройства защиты. Снова проверьте правильность адреса, прежде чем нажмёте Enter и запустите просмотр. Если всё идёт хорошо, то просмотр не должен найти никаких открытых портов.

Контрольные суммы

Открытые порты - не единственная место проникновения нежелательного программного обеспечения. Всякий раз, когда вы загружаете программное обеспечение, вы уверены, что оно делает только то, что ему положено, и что файл, загружаемый вами с ftp - не заражённая трояном оригинальная версия.

К счастью, большинство ftp-серверов, которые обеспечивают программное обеспечение для Unix, защищают каждый загружаемый файл контрольной суммой MD5. Вы, наверное, помните из Терминологии криптографии (http://www.onlamp.com/ub/a/bsd/2002/10/31/FreeBSD_Basics.html), что MD5 используется, чтобы проверить целостность файла, гарантируя, что ни один из битов в файле не заменён. Если нападающий заменит оригинальный файл на сайте ftp на файл с трояном, то контрольная сумма MD5 зараженного файла не будет соответствовать оригинальной.

Как пример просмотрим сайт ftp://@ft.freebsd.org/ub/FreeBSD/ISO-IMAGES-i386/4.7

Вместе с пятью возможными .iso файлами, имеется файл с названием 'MD5 Checksum', в котором хранится контрольная сумма MD5 для каждого файла. Если я загружаю 4-7-mini.iso, я должна использовать команду m5, чтобы проверить контрольную сумму перед тем, как записать образ ISO на CD-диск:

$ md5 4.7-mini.iso
117076d76ef37267694d9820c763f9b2
Число, возвращаемое командой, должно быть идентично числу в файле MD5 Checksum на ft сайте.

Хорошо сделать привычкой всегда проверять контрольную сумму MD5 любого загружаемого из интернет файла, отклоняя файлы, в которых отсутствуют контрольные суммы. Если вы используете коллекцию портов FreeBSD, то команда make сделает это для вас автомагически. Это - наиболее простой и безопасный путь устанавливать программное обеспечение в вашу FreeBSD систему.

Если во время построения порта оно прерывается ошибкой, и причиной называется несовпадение контрольной суммы MD5, не пугайтесь и продолжайте строить. Просто вы попали в одну ситуацию из двух, и вам нужно кое что предпринять. Первая возможная причина - устарело ваше дерево портов. Если это так, то "накатите" свежую версию дерева портов через cvsu.

От переводчика: см. здесь (http://www.freebsd.org.ru/how-to/cvsu/cvsu.html).

Вторая возможная причина - файл на сервере ftp изменился, с тех пор как была вычислена контрольная сумма. Если это так, то найдите адрес электронной почты создателя порта, который сможет вам гарантировать, что файл не содержит троян. Например, если бы я строила порт doom, то могла бы выполнить следующую команду в каталоге /usr/orts/games/doom (обратите внимание на регистр букв):

$ more Makefile |gre MAINTAINER
MAINTAINER = jmz@FreeBSD.org
Если вы - создатель порта, помните, что нужно включить вывод uname -a, чтобы можно было узнать версию FreeBSD, которую вы использовали.

Утилиты проверки целостности файла

Контрольные суммы MD5 также можно использовать, чтобы гарантировать, что файлы в вашей системе не фальсифицированы. Одно из первых действий, предпринимаемых троянской программой - изменение одного из ваших бинарников, так чтобы вы не заметили, как в вашей системе появилось кое-что ненужное. Например ваш файл команды ps мог быть заменен другим файлом ps, который не покажет процессы, использованные трояном.

Команда ls может быть изменена, чтобs скрыть каталоги, созданные трояном. К счастью, есть несколько утилит проверки целостности файла, которые автоматизируют процесс создания базы данных контрольных сумм важных файлов на вашей FreeBSD системе.

Наиболее простая и известная из этих утилит - tripwire.

Tripwire доступен как свободная версия с открытыми исходниками и как коммерческая версия, работающая 30 дней без её покупки.

В завершение этой статьи я построю из порта открытую версию tripwire на системе FreeBSD. Сначала начнем строить порт:

$ cd /usr/ports/security/tripwire
$ make install clean
Это будет длиться в течение нескольких минут, так что можете сходить за алкоголем (прим. пер. - интересно только за каким:)) и ждите до прекращения установки, после чего на экране появится примерно вот это:

Installer program for:
Tripwire(R) 2.3 Open Source for LINUX
Coyright (C) 1998-2000 Tripwire (R) Security Systems, Inc.
Triwire (R) is a registered trademark of the Purdue Research Foundation and is licensed
exclusively to Triwire (R) Security Systems, Inc.
LICENSE AGREEMENT for Triwire(R) 2.3 Open Source for LINUX
Please read the following license agreement.
You must accept the agreement to continue installing Triwire.
Press ENTER to view the License Agreement.
После этого, вам будет представлено много информации по лицензии GNU GPL.

Используйте пробел чтоб пролистать информацию, пока не доберётесь до этой строки:

Please tye "accet" to indicate your accetance of this
license agreement. [do not accet] accet
Удостоверьтесь что правильно набрали слово accept, иначе инсталляция прервётся. Если вы неосторожно нажмёте Enter, то установка прервётся.

В этом случае просто повторите make install clean и будьте внимательны, чтобы в следующий раз набрать accept правильно. Строительство продолжиться с этого места.

Using configuration file install.cfg Checking for programs secified in install configuration file. /usr/sbin/sendmail exists. Continuing installation. /usr/bin/vi exists. Continuing installation. -Verifying existence of binaries...
./bin/i386-unknown-freebsd_r/siggen found
./bin/i386-unknown-freebsd_r/tripwire found
./bin/i386-unknown-freebsd_r/twprint found
./bin/i386-unknown-freebsd_r/twadmin found
This program will coy Triwire files to the following directories:
TWBIN: /usr/local/sbin
TWMAN: /usr/local/man
TWPOLICY: /usr/local/etc/triwire
TWREPORT: /var/db/triwire/reort
TWDB: /var/db/triwire
TWSITEKEYDIR: /usr/local/etc/triwire
TWLOCALKEYDIR: /usr/local/etc/triwire
CLOBBER is false.
Continue with installation? [y/n] y
-Затем установщик создаст несколько каталогов и скопирует в него файлы. Обратите внимание, что некоторые документы созданы для вас в /usr/locals/share/doc/tripwire. Также он создаст manpages в 5 и 8 секциях руководства. Далее будет запрос о создании фразы для входа (от пер.: типа пароля). Если вы читали серию о шифровании, то помните, что эти фразы используется всегда, когда генерируются ключи. Запомните эту фразу для входа или вы не сможете обратиться к базе данных tripwire.

У вас они будут запрошены несколько раз, поскольку tripwire создаёт и записывает файл конфигурации, файл политик, и базу данных.

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

От переводчика: Далее автор говорит о том что, подробности про работу с базой данных tripwire, использование руткитов и прочее по каждому пункту следует искать в других её cтатьях на http://www.onlamp.com (http://www.onlamp.com/)

Unix   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉