Проблема защиты не ограничивается только защитой сценария. Можно написать самую безопасную программу, но при этом установить на сервер ОС
с настройками по умолчанию. Всем известно, что настройки по умолчанию далеки от идеала, и благодаря этому сервер может быть взломан даже без использования Web-сценариев. Безопасным должен быть не только каждый участок кода, но и каждая программа, установленная на сервере, сама ОС и все используемое оборудование (в основном, это касается сетевых устройств).
Программист должен всегда работать в сотрудничестве с администраторами и специалистами по безопасности. Например, программист может решить, что для его удобства необходимо сделать определенную папку открытой для чтения и записи всем пользователям. В этой папке сценарии будут сохранять некоторые данные. Но если эта папка используется администратором для хранения важных данных или конфигурационных файлов, то сервер
окажется под угрозой.
Защищать надо и сетевое оборудование. Если вы следите за бюллетенями по безопасности, то должны были встречаться с описаниями взломов, при которых хакер смог получить доступ к маршрутизатору и просмотреть все пакеты пользователей. Для конфиденциальных данных мы можем использовать шифрование и передавать данные по протоколу SSL, но его никто и никогда не использует при создании форумов или чатов. Если хакер смог перехватить пакет, в котором пользователь передает на форум данные об авторизации, то хакер сможет их прочитать и захватить учетную запись
пользователя.
Итак, защищать необходимо не только сценарии, но и ОС, сервер базы данных, сетевое оборудование. Каждая составляющая требует отдельном книги по безопасности, но некоторые особенности защиты мы рассмотрим
в этой статье.
Даже если вы являетесь разработчиком и не связаны с администрированием сервера своей компании или просто сайта, я настоятельно рекомендую вам познакомиться с безопасностью ОС, которая используется на вашем сервере. Для Linux-систем я рекомендую прочитать книгу «Linux глазами хакера».
Давайте рассмотрим пример защиты MySQL и Apache в операционной системе Linux. Мы опустим защиту самой ОС, потому что это отдельная и очень большая тема. Итак, защита начинается с установки и предварительного конфигурирования. В случае с MySQL необходимо выполнить следующие действия:
1. Сервер базы данных устанавливается с настройками по умолчанию, при которых администраторский доступ разрешен пользователю root с пустым паролем. Это небезопасно. Необходимо, как минимум, установить сложный пароль, а лучше переименовать учетную запись root. Если вы работали с ОС Linux, то должны знать, что в этой системе администратором тоже является root. Имена администратора в ОС и в базе данных никак не связаны.
2. Необходимо заблокировать анонимный доступ к базе данных. Подключения должны производиться только для авторизованных пользователей.
3. Необходимо удалить все базы данных, созданные для тестирования и отладки. По умолчанию в большинстве серверов баз данных (в том числе и в MySQL) устанавливается тестовая база данных. В работающей системе ее не должно быть.
Доступ по умолчанию, о котором мы уже сказали, есть практически во всех базах данных. В MS SQL Server это имя sa, которое может не иметь пароля, если администратор не установил его во время инсталляции, а в MySQL это пользователь root без пароля. Чтобы изменить пароль в MySQL, выполните команду:
/usr/bin/mysqladmin -uroot password newpass
Наилучшим вариантом будет перенести работу MySQL и Apache в окружение enroot. Как работает это окружение? В системе создается каталог (в Linux для этого существует команда chroot), который является для программы корневым. Выше этого каталога программа, работающая в окружении chroot, попасть не может. Во главе всего стоит корневой каталог /. В нем находятся каталоги /bin, /usr, /var, /home и т. д. В /home расположены каталоги пользователей системы. Мы создаем здесь новый каталог, для примера назовем его chroot, и он будет являться корнем для службы. В нем будут свои каталоги /bin, /usr и т. д., и служба будет работать с ними, а все, что выше /home/chroot, окажется недоступным. Просто служба будет считать, что /home/chroot — это и есть корень файловой системы.
Если хакер проникнет в систему через защищенную службу и захочет просмотреть каталог /etc, то он увидит каталог /home/chroot/etc, но никак не системный /etc. Чтобы взломщик ничего не заподозрил, в каталоге /home/chroot/etc можно расположить все необходимые файлы, но занести в них некорректную информацию. Взломщик, запросив файл /etc/passwd через уязвимую службу, получит доступ к /home/chroot/etc/passwd, потому что служба считает его системным.
Так, например, файл /home/chroot/etc/passwd может содержать неверные пароли. На работу системы в целом это не повлияет, потому что система будет брать пароли из файла /etc/passwd, а службе реальные пароли системы не нужны, поэтому в файл /home/chroot/etc/passwd можно записать что угодно.
Встроенная в систему Linux программа chroot, создающая виртуальные пространства на сервере, не очень удобна. Нужно выполнить слишком много операций. Именно поэтому администраторы больше любят программу Jail. Ее вы можете найти в Интернете по этому адресу. Скачайте архивный файл и поместите его в свой каталог. Для того чтобы разархивировать этот файл, нужно выполнить следующую команду
tar xzvf jail.tar.gz
Теперь в текущем каталоге появится подкаталог jail с исходным кодом программы. Да, именно так. Программа открыта и поставляется в исходных кодах. Теперь нужно перейти в каталог jail/src (cd jail/src) и отредактировать файл Makefile (например, редактором программы МС). В самом начале файла идет множество комментариев, и их мы опустим. После этого вы сможете увидеть следующие параметры:
ARCH= LINUX_
#ARCH= FREEBSD
#ARCH= IRIX
#ARCH= SOLARIS
DEBUG = 0
INSTALL_DIR = /tmp/jail
PERL = /usr/bin/perl
ROOTUSER = root
ROOTGROUP = root
Вначале задается тип ОС. По умолчанию указана Linux, а следующие тристрочки для FreeBSD, Irix и Solaris закомментированы. Оставим все как есть. Что нужно изменить, так это каталог для установки (параметр INSTALL_DIR). По умолчанию в последней версии используется каталог /tmp/jail. He знаю, зачем это сделано, ведь каталог предназначен для временных файлов, и он должен быть доступен для чтения абсолютно всем. Раньше каталогом по умолчанию был /usr/local, и именно его я советую здесь указать. Больше ничего менять не надо. Для выполнения следующих команд вам понадобятся права пользователя root, поэтому войдите в систему как администратор или получите нужные права, выполнив команду su root. Перед компиляцией и установкой убедитесь, что у файла preinstall.sh есть права на выполнение файлов. Если их нет, выполните следующую команду:
chmod 755 preinstall.sh
Все готово к установке. Находясь в каталоге jail/src, выполните команды:
make
make install
Если все прошло успешно, то в каталоге /usr/local/bin должны появиться программы: addjailsw, addjailuser, jail и mkjailenv. Для начала создадим каталог /home/chroot. Он станет корневым для программы, на которой мы будем испытывать систему. Для этого выполним команду:
mkdir /home/chroot
Теперь нужно подготовить окружение для нормальной работы будущей службы. Для этого выполняем команду:
/usr/local/bin/mkjailenv /home/chroot
Посмотрите, что произошло с каталогом /home/chroot. Здесь появились два каталога dev и etc. Как мы знаем, в каталоге dev должны быть файлы описания устройств. В данном случае программа не стала делать полную копию системного каталога /dev, а ограничилась созданием трех основных устройств: null, urandom и zero.
В каталоге etc можно также увидеть три файла: group, passwd и shadow. Это неполные копии системных файлов. Например, если взглянуть на файл passwd, он будет содержать только следующие строчки:
root:x:0:0:Flenov,Admin:/root:/bin/bash
bin:x:l:l:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
В частности, здесь нет пользователей, которые могли быть созданы в основном разделе ОС Linux. В файле shadow находятся теневые пароли. Проверьте права на этот файл, чтобы они не были шире, чем rw (или 600). Тут есть один недостаток в безопасности — в файле /home/chroot/etc/shadow находится реальный зашифрованный пароль из файла /etc/shadow. Лучше удалите его. Если злоумышленник узнает пароль к службе, то он сможет проникнуть на сервер через другую дверь, которая не защищена виртуальным каталогом.
Продолжаем настройку виртуального корневого каталога. Теперь нам нужно выполнить следующую команду:
/usr/local/bin/addjailsw /home/chroot
Во время выполнения этой команды по экрану побежит множество информационных строчек о выполняемых действиях. Действия заключаются в том, что в каталог /home/chroot копируются основные каталоги и программы. Например, в каталог /home/chroot/bin будут скопированы программы cat, cp, Is, rm и т. д., и служба будет использовать именно эти программы, а не те, что расположены в основном каталоге /bin. Команда копирует то, что считает нужным, но далеко не все программы потребуются будущей службе, которая будет работать в виртуальном корневом каталоге. Если какая-либо программа не нужна, то ее следует удалить, но лучше делать это после того, как вы убедитесь, что все работает.
Окружение готово, и необходимые программы присутствуют. Теперь можно установить службу в это окружение. Для этого выполняем команду:
/usr/local/bin/addjailsw /home/chroot -P httpd
В данном примере в новое окружение устанавливается программа httpd и все необходимые ей библиотеки. Программа jail сама определит, что необходимо.
Теперь в новое окружение можно добавлять пользователя. Это выполняется командой:
/usr/local/bin/addjailuser chroot home sh name
Здесь chroot — виртуальный корневой каталог, в нашем случае таковым является /home/chroot. Параметр home — это домашний каталог пользователя относительно виртуального каталога. Параметр sh — командный интерпретатор. Параметр name — имя пользователя, которое мы хотим добавить (это имя уже должно существовать в основном окружении ОС). Посмотрим, как можно добавить пользователя robert (он должен уже существовать в реальной системе) в виртуальную систему:
/usr/local/bin/addjailuser /home/chroot/home/robert /bin/bash robert
Если параметры указаны верно, то вы должны увидеть сообщение Done, иначе будет выведено сообщение об ошибке. Для запуска сервера httpd (в Linux это сервер Apache) в виртуальном окру-жении должен присутствовать пользователь apache. В реальном окружении он есть. Давайте посмотрим на его параметры и создадим такого же пользователя в виртуальном окружении:
/usr/local/bin/addjailuser /home/chroot/var/www /bin/false apache
Как теперь попасть в новое окружение? Выполните команду:
chroot /home/chroot
Вы окажетесь в новом окружении. Только учтите, что большинство команд здесь не работает. Так, например, мы не установили в виртуальное окружение программу МС, поэтому вы не сможете ею воспользоваться. Чтобы убедиться, что вы находитесь в виртуальном окружении, выполните
команду:
Is -al /etc
Вы увидите всего несколько файлов, и это лишь малая часть того, что доступно в реальном каталоге /etc. Можете просмотреть файл /etc/passwd; в нем
будут только пользователи виртуального окружения. Если злоумышленник взломает его, то он получит только эти данные и сможет уничтожить только содержимое каталога /home/chroot. Вся остальная файловая система останется целой и невредимой.
Для запуска httpd нужно выполнить в виртуальном окружении команду:
/usr/sbin/httpd. Таким образом, можно перевести в окружение chroot все необходимые Web-серверу программы, в том числе и MySQL. Если исходить из правила, что ошибки есть в любой программе, вы должны быть готовы к тому, что вашу систему когда-нибудь взломают. Даже если это произойдет, хакер не сможет получить доступ к вашей реальной файловой системе и не нарушит работу сервера, но он сможет нарушить работу Web.
Comments ( 0 )