В куче самых разных осей есть три белые вороны - QNX, Solaris и NetBSD.Они все мало распространены в России и вокруг них создался ореол неприступности (в плане изучения) и неподъёмной сложности. Но это не так: изучать их любому человеку, хоть самую малость знакомому с *nix-ами, легко и просто. В этой статье мы поговорим о NetBSD.Изучать эту ось мы будем не с точки зрения админа или простого пользователя, а глазами хакера. NetBSD в студию!
Интра
Первое, что необходимо отметить - офигительная мультиплатформенность: PC, Opteron, SPARC, UltraSPARC, Alpha, Amiga, Atari, m68k, PowerPC...- всего в списке около 50 платформ. На главной паге NetBSD ты можешь заценить полный список. Кроме того,мало распространённая система не так привлекает внимание хакеров, поэтому эксплойтов для этой оси намного меньше, чем у того же линуха. Пока NetBSD не стала достоянием широких масс, ты успеешь построить свой суперсекьюрный сервер, который будет не по зубам ни одному взломщику, и выжать максимум возможностей из этой чудесной оси. Да и после, я думаю, NetBSD (как и OpenBSD) не утратит своей ценности. Несмотря на то, что главные представители семейства xBSD выросли в одних (Берклиевских) стенах, они пошли по разным путям: FreeBSD больше по linux-тропке, а Net- и OpenBSD так и остались в установленных разработчиками рамках. Этот жёсткий аудит дал свои плоды - безопасность в NetBSD на высоте. Ну всё, хватит теории. Давай устанавливать.
Установка
Установить NetBSD можно по FTP, NFS, с локальной диры, с размонтированной ФС, с флопика или с CD/DVD. Рассмотрим установку с CD/DVD.
Самый подробный мануал по установке находится в файле INSTALL. Процесс инсталляции, в общем, стандартен. Выберешь язык, временную зону, раскладку клавиатуры, комплектацию устанавливаемых дистрибутивов, установишь пароль root`а, разобьёшь диск на разделы и т. д. Кстати, о разделах.
В отличие от фряхи, где все разделы обозначаются acd0, ad0, ad0s1. . . , в NetBSD названия разделов, как правило, имеют вид wd0a, sd0a . . . Wd0a обозначает a-раздел IDE диска, sd0a - a-раздел SCSI диска. Fdisk и disklabel привычные. Если ты собираешься устанавливать NetBSD в качестве хакерского desktop, то не стоит разбивать диск на /, /usr, /var, /tmp, /home и др. Такое дробление больше подходит серверам и для рабочей станции избыточно. В качестве оболочки можно выбрать csh, ksh или sh. Bash`ик надо устанавливать дополнительно. Инсталляция завершена. Небольшая Эрих Мария Ремарка для тех, кто знаком с *nix-системами, но никогда не работал с xBSD. Во время и после установки системы ты будешь добавлять и удалять аккаунты пользователей. Вся инфа о юзере сохранится в /etc/passwd, а шифрованные пароли не запишутся в /etc/shadow. Почему? Всё просто - в xBSD файла /etc/shadow нет! Вместо него используется файл /etc/master. passwd, в котором и хранятся криптованные пароли.
Конфигурирование и перекомпиляция ядра
Конфигурирование и перекомпиляция ядра - один из важнейших аспектов работы с любыми open-source системами. Всё потому, что ядро - основа любой unix-системы. Грамотная перекомпиляция имеет много преимуществ: уменьшение занимаемого ядром пространства на диске (так как из ядра выключаются все ненужные на твоей машине драйверы), увеличение производительности системы путём оптимизации ядра под конкретную архитектуру (зачем тебе нужна поддержка Mac и SPARC, если у тебя PC?) и многое другое. К тому же некоторые сетевые проги (фаерволы, например), могут требовать каких-то экзотических опций сети, ядра и системы, которых не установить без перекомпиляции ядра. Вместе с тем бытует мнение о непомерной сложности этого предприятия, поэтому новичкам категорически не советуют заниматься перекомпиляцией ядра. Типичная страшилка для малышей. Если ты умеешь читать текст на экране и в наличии есть толковый мануал, отконфигурить ядрышко - раз плюнуть! Этим мы сейчас и займёмся.
Прежде всего ты должен установить сорцы ядра. Их можно найти на дистрибутивном диске или скачать с ближайшего CVS`а. В большинстве случаев сорцы ядра находятся в каталоге /source/sets. Имя архива - syssrc. tgz. Компиляцию ядра можно выполнять двумя способами: вручную и с помощью скрипта build.sh. В данной статье я рассмотрю оба варианта. Конфигурационный файл ядра лежит в /usr/src/sys/arch/твоя архитектура/conf. Там открывай GENERIC. Разберём архитектуру i386.
Сначала нужно создать резервную копию конфига ядра:
Код: Выделить всё
$ cp GENERIC MYFIRSTKERNEL
Код: Выделить всё
$ vi MYFIRSTKERNEL
Выключи поддержку ненужных устройств, архитектур и т. д. Есть один интересный полуавтоматический вариант конфигурирования. Установи через pkgsrc perlовый сценарий adjustkernel. Стоп, а ты знаешь, как устанавливать софт в xBSD-пакеты и/или сорцы? Если нет, то отвлечёмся на секунду от ядра и расскажем об установке софта.
Установка программ из сорцов осуществляется стандартными командами make, make install. Затем для удаления временных файлов набей make clean, make clean-depends. Последняя команда нужна в том случае, если устанавливались зависимые пакеты. Также можно набрать make clean CLEANDEPENDS=1. Эта команда идентична make depends. Для установки прекомпилированных бинарников нужен пакет pkgtools. Команды управления пакетами напоминают аналогичные соляровые:
- pkg_add-добавляет пакет
pkg_delete-удаляет уже установленный
pkg_info-показывает информацию о пакете
pkg_create-создает новый пакет для коллекции пакетов (что необходимо для создания новых скомпилированных пакетов. Эта команда автоматически вызывается системой сборки и ее не нужно запускать вручную)
pkg_admin-создает переменные административные функции в системе пакетов
Код: Выделить всё
$ adjustkernel GENERIC > MYFIRSTKERNEL
Код: Выделить всё
$ config MYFIRSTKERNEL
Код: Выделить всё
$ cd ../compile/MYFIRSTKERNEL
$ make depend
$ make
Код: Выделить всё
# mv /netbsd /netbsd.old
# mv netbsd /
Код: Выделить всё
# shutdown -r now
Для автоматического компилирования ядра делай следующее:
Код: Выделить всё
$ cd /usr/src
$ ./build.sh -u kernel=MYFISRKERNEL
Код: Выделить всё
> boot netbsd.old -s
Код: Выделить всё
# fsck /
# mount /
# mv netbsd.old netbsd
# reboot
Шифрование данных
Шифрование данных - это, безусловно, одна из сильных сторон NetBSD. И тебе, как профессиональному хакеру, думаю, будет очень интересно и важно разобраться в этом. Ведь если к тебе вдруг неожиданно нагрянут парни из отдела "К" (тьфу-тьфу-тьфу, не дай бог), выйдет очень неприятно, если на твоем винте plain-текстом будут лежать все твои списки паролей от взломанных серваков, заказы и прочие хакерские атрибуты. Ну а что бы этого не произошло, читай дальнейшее вдумчиво и не забывай применять всё сказанное на деле. Начнём.
Основа шифрования в NetBSD-некое псевдо-устройство cgd (и, соответственно, одноимённый драйвер). Устройство cgd ведёт себя в системе точно так же, как и обычное дисковое устройство. Непосредственные шифрацию/дешифрацию диска выполняет драйвер cgd, а управление криптованным диском осуществляется утилиткой cgdconfig. Разбиение его на разделы-программой disklabel. Монтирование - mount, создание свап раздела - swapctl, а организация файловой системы - newfs. А теперь разберём cgd по косточкам.
Прежде всего нужно включить поддержку cgd в ядро. В конфиге ядра для этого должна присутствовать следующая строка:
Код: Выделить всё
pseudo-device cgd 4 # cryptographic disk driver
Поддерживаются следующие алгоритмы шифрования: aes-cbc, blowfish-cbc, 3des-cbc. Сам процесс криптования проходит так (способ, немного знакомый тем, кто хоть раз криптовал вирусы или shell-код): шифрованный диск состоит из блоков шифротекста. К каждому блоку применяется XOR с предыдущим зашифрованным блоком перед кодированием. Так работают все три алгоритма. Дальше нужно разобрать методы верификации. Их также три: none, disklabel и ffs. None - отсутствие проверки. Наиболее опасный метод. Если введён неправильный ключ, то все данные на криптованном диске будут разрушены. Disklabel - проверка соответствия раздела и ключа. Ffs - провека соответствия файловой системы и ключа.
Процесс создания cgd диска довольно сложен, поэтому его лучше рассмотреть по шагам. Буду предполагать, что ты хочешь шифрануть всю свою рабочую систему. Корень шифровать не надо - системе надо загрузить ядро, сценарий rc.d и т. д. Так что криптуй всё, кроме него. Затем создавай резервную копию всего, что только можно (тебе придётся стирать все данные и пересоздавать разделы) и приступай. Бэкап лучше делать, загрузившись в однопользовательском режиме. В этом же режиме монтируй корень на чтение/запись. Все остальные фс-отмонтируй и удали (я предупреждала - сделай бэкап!). Затем disklabel`ом на свободном месте сделай один раздел с типом ccd (это не опечатка!). Сохраняйся. Набивай:
Код: Выделить всё
# cgdconfig -s cgd0 /dev/твоё устройство aes-cbc 128 < /dev/urandom
# dd if=/dev/zero of=/dev/rcgd0d (редко-/dev/rcgd0c) bs=32k
# cgdconfig -u cgd0
Для управления cgd-устройствами проге cgdconfig нужны конфиги, и мы должны сами их сейчас создать. Командуй:
Код: Выделить всё
# cgdconfig -g -V disklabel -o /etc/cgd/твоё устройство aes-cbc 256
Код: Выделить всё
# cgdconfig -V re-enter cgd0 /dev/твоё устройство
Код: Выделить всё
# newfs /dev/имя твоего cgd раздела
Код: Выделить всё
cgd0 /dev/твоё устройство
Код: Выделить всё
cgd=YES
В заключение хочу рассказать об одной интересной фишке для параноиков: шифрование файла подкачки. Для этого используется random-key cgd. С применением данной технологии при каждой загрузке системы будет генерироваться новый, случайный ключ. Нужно конвертнуть существующий cgd раздел в cgd1:
Код: Выделить всё
# cgdconfig -g -o /etc/cgd/существующий раздел -V none -k randomkey blowfish-cbc
Сеть
Ты хакер? А какой же хакер без сети? Значит, её нужно настроить. Открываем файлик /etc/rc. conf и пишем:
Код: Выделить всё
hostname =“имя твоего хоста“
defaultrouter =“айпишник маршрутизатора“
ifconfig_имя_сетевого_интерфейса =“твой айпишник и/или маска подсети“
Код: Выделить всё
netmask айпишник
Код: Выделить всё
sshd=YES
Код: Выделить всё
netmask айпишник
О технологии IPSec я уже рассказывала в статье "Solaris для всех и каждого". Состав IPSec по прежнему такой - же:IPsec = AH + ESP + IPcomp + IKE. Напомню про IPcomp (IP payload compression). Все пакеты, шифрованные ESP, имеют не лучшую степень сжатия. Перед использованием ESP пакеты можно пожать, а можно скомпрессировать без использования ESP. За более подробной информацией можешь обратиться к RFC 1825 и 2401. Теперь об управлении правилами IPSec в NetBSD.
По умолчанию ядро NetBSD не поддерживает IPSec, поэтому его надо перекомпилить, раскомментировав соответствующие строки в конфиге:
Код: Выделить всё
options IPSEC
options IPSEC_ESP
Правил, которые можно настроить, очень много, поэтому я для примера рассмотрю всего одно: host-to-host encryption.
Правила удобнее всего реализовывать в виде скриптиков и мы сейчас попробуем написать такой. В данном примере мы воспользуемся вручную сгенерированными ключами, которые создаются утилиткой setkey. Начнём с основ. Правила могуть быть реализованы двумя способами: per-packet и per-socket. Per-packet конфигурируется в ядрышке (как и сам пакетный фильтр) и его удобнее всего использовать на маршрутизаторах, а для работы с per-socket нужно использовать setsockopt. Мы в примере будем использовать per-packet. Итак, корябаем:
Код: Выделить всё
#! /bin/sh
#
setkey -c <<EOF
add 20.1.1.1 30.1.1.1 esp 8432 -E 3des-cbc "секретный ключ";
add 30.1.1.1 20.1.1.1 esp 1195 -E 3des-cbc секретный ключ;
spdadd 20.1.1.1 30.1.1.1 any -P out ipsec esp/transport//use;
EOF
Код: Выделить всё
spdadd 30.1.1.1 20.1.1.1 any -P in ipsec esp/transport//require;
Код: Выделить всё
spdadd 30.1.1.1 20.1.1.1 any -P out ipsec esp/transport//use;
Синтаксис правил IPSec более подробно описывается в мане ipsec_set_policy. Вот и всё на первый раз об IPSec.
Заключение
Вот ты и разобрался с осью, которая считается одной из самых сложных. Теперь ты, я думаю, понял, что такое мнение - не более чем очередная страшилка для новичков. Но если ты всё таки боишься сразу ставить эту ось - что ж, попробуй NetBSD Live, на котором ты сможешь наработать базовые навыки по работе в этой чудесной оси. Да не облысеют твои пятки!