книги хакеры / журнал хакер / 124_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|
|
|
|
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
w Click |
|
BUY |
|
m |
|
|
|
|
|
>> |
|
w Click |
|
BUY |
|
m |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
w |
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
SYN/ACKw |
|
|
to |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FreeBSD |
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Jail |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ШАГ1. СОЗДАНИЕJAIL-ОКРУЖЕНИЯ |
ализованы через привязку к IP-псевдонимам |
192.168.0.1\"" >> /etc/rc.conf |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
Переходим в каталог /usr/src и выполняем сле- |
сетевых интерфейсов, поэтому, во-первых, мы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
дующую последовательность команд: |
должны назначить алиас интерфейсу, смотря- |
Ничего страшного, если в твоем распоряжении |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
щему «наружу», а во-вторых, сделать так, что- |
нет второго глобально |
маршрутизируемого |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
# JAIL=/usr/jail/base |
бы сервисы корневой системы слушали порты |
IP-адреса, — подойдет любой адрес из част- |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
# mkdir -p $JAIL |
только на своем IP и «пропускали мимо ушей» |
ного диапазона (10.0.0.0/8, |
172.16.0.0/12, |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
# make world DESTDIR=$JAIL |
трафик, предназначенный сервису в jail. |
|
192.168.0.0/16), трафик на который мы завер- |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
# make distribution DESTDIR=$JAIL |
IP-псевдонимыдлясетевыхинтерфейсовназна- |
нем с помощью брандмауэра. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
# mount -t devfs devfs $JAIL/dev |
чаются с помощью команды: |
|
|
Теперьонастройкесервисовкорневойсистемы. |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Если ты все-таки решил привязать jail ко второ- |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
После их исполнения каталог /usr/jail/base |
# |
ifconfig |
ed0 |
inet |
alias |
му внешнему IP-адресу, создав как бы иллюзию |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
будет содержать чистое базовое окружение |
192.168.0.1/16 |
|
|
|
второгосерверавсети,тебепридетсянастроить |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
FreeBSD, включая виртуальную файловую сис- |
|
|
|
|
|
все сервисы корневой системы на прослушива- |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
òåìó /dev. |
Чтобы команда исполнялась во время загрузки, |
ние только первого IP-адреса. |
Иначе можно |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
добавляем ее в /etc/rc.conf: |
|
|
поймать конфликты между приложениями, |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
ШАГ2. НАСТРОЙКАКОРНЕВОЙСИСТЕМЫ |
|
|
|
|
|
слушающими один порт (например, ssh внутри |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
Идем дальше. Jail-окружения во FreeBSD ре- |
# |
echo "ifconfig_ed0_alias0=\"inet |
тюрьмы и в корневой системе). В большинстве |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
XÀÊÅÐ 04 /124/ 09 |
|
|
|
|
|
|
|
111 |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
i |
|
|
|
|
F |
|
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
|
o |
|
|
P |
D |
|
|
|
|
|
|
|
|
o |
||
|
|
|
|
NOW! |
r |
|
|
|
|
|
|
NOW! |
r |
||||||||||||
|
|
|
|
|
BUY |
|
|
>> |
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
SYN/ACKw |
|
|
to |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
m |
|||||
w Click |
|
|
|
|
|
|
o |
|
w Click |
|
|
|
|
|
|
o |
|||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
|
e |
|
|
|
|
|
p |
df |
|
|
|
|
e |
|
||||
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
Man jail: отличное руководство по управлению jail- |
Сервисы, помещенные в jail, могут общаться с корневой |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
окружениями |
системой через loopback-интерфейс |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
запустить готовый виртуальный jail-сервер. Для этого добавляем в /etc/ |
швейцарская тюрьма с удобствами, ему больше подойдет русская |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
rc.conf следующие строки: |
зона. Для иллюстрации того, как все это проделать в реальных усло- |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
виях, рассмотрим процесс помещения nginx, работающего в режиме |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
# vi /etc/rc.conf |
reverse-proxy, внутрь jail. Представим, что у нас есть apache, работаю- |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
jail_enable="YES" |
щий в корневой системе и слушающий порт 8080. Задача: поместить |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
// Список jail-окружений |
перед ним nginx, слушающий 80-й порт и перенаправляющий запро- |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
jail_list="base»" |
сы к apache. Чтобы обезопасить apache, мы решаем поместить nginx в |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
// Стандартные опции jail |
jail. Как это сделать? Для начала создадим для нашей тюрьмы каталог |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
jail_base_rootdir="/usr/jail/base" |
и установим туда nginx (здесь и далее приведены команды для bash): |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
jail_base_hostname="base.jail" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jail_base_ip="192.168.0.1" |
# JAIL=/usr/jail/nginx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jail_base_interface="de0" |
# mkdir -p $JAIL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Команды запуска и остановки |
# cd /usr/ports/www/nginx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jail_base_exec_start="/bin/sh /etc/rc" |
# make PREFIX=$JAIL install clean |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jail_base_exec_stop="/bin/sh /etc/rc.shutdown" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Какие ФС монтировать? |
Выясним, какие библиотеки нужны nginx для работы: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jail_base_devfs_enable="YES" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jail_base_fdescfs_enable="NO" |
# ldd $JAIL/sbin/nginx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jail_base_procfs_enable="NO" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
И скопируем их в каталог /usr/jail/nginx/lib: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
и запускаем: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
# mkdir -p $JAIL/lib |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# /etc/rc.d/jail start base |
# LIBS='ldd $JAIL/sbin/nginx|grep -v ':$'|cut -f 3 -d " "' |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
# for LIB in $LIBS; do cp $LIB $JAIL/lib; done |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Список запущенных jail-окружений всегда доступен по команде /usr/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
sbin/jls. Процессы, заключенные в тюрьму, отображаются в выводах ps и |
Кроме того, необходимо скопировать и настроить линковщик ld-elf.so.1, |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
top. Их отличительная черта — флаг ‘J’. |
без него не запустится ни один исполняемый файл: |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
КАКЭТОДЕЛАЮТДЖЕДАИ |
# mkdir -p $JAIL/libexec |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
Выше был описан «официальный» способ создания jail-окружений, под- |
# cp /libexec/ld-elf.so.1 $JAIL/libexec |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
ходящий почти для всех случаев. Его достоинства в универсальности и |
# mkdir -p $JAIL/var/run |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
относительной простоте развертывания виртуального сервера. С дру- |
# ldconfig -s -f $JAIL/var/run/ld-elf.so.hints $JAIL/lib |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
гой стороны, для единичного сервиса, помещенного в тюрьму, полное |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
окружение исполнения — явное излишество, съедающее свободное |
Заведем пользователя и группу www: |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
пространство и несущее угрозу безопасности. Взломщик, проникший |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
в тюрьму, получит в распоряжение цельную операционную систему с |
# echo 'www:*:80:80::0:0:World Wide Web Owner:/ |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
командным интерпретатором, компилятором, ssh-сервером и массой |
nonexistent:/usr/sbin/nologin' > $JAIL/etc/passwd |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
других подсобных утилит. Стоит ли говорить, чем грозит такая свобода |
# cp $JAIL/etc/{passwd,master.passwd} |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
выбора? |
# pwd_mkdb -d $JAIL/etc $JAIL/etc/master.passwd |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
Главное правило, которым следует руководствоваться при создании |
# echo 'www:*:80:' > $JAIL/etc/group |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
разного рода песочниц, тюрем и виртуальных серверов — «чем про- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
ще, тем лучше». По возможности из окружения следует убрать все, |
Создадим каталоги, необходимые для нормальной работы сервиса: |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
что не влияет на работу сервиса, включая библиотеки, конфигура- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
ционные файлы и, в особенности, различные подсобные утилиты и |
# mkdir -p $JAIL/var/{log,tmp/nginx} |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
консольные команды вроде ls, cd и sh. Отдельному сервису не нужна |
# chown 80:80 $JAIL/var/tmp/nginx |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
XÀÊÅÐ 04 /124/ 09 |
|
|
113 |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|