Как взламывают сайты и как их от этого защитить

Если вы хотите, чтобы ваш сайт не взломали, не создавайте его. Рассказываем, почему взломать можно что угодно, и даём советы по защите.

Если вы следите за IT-новостями, то регулярно слышите, что обнаруживаются утечки данных клиентов крупных компаний, находятся критические уязвимости в популярных приложениях, а серверы подвергаются атакам.

Безопасность — большая проблема в современном мире. Как жаль, что все эти крупные компании пишут такой плохой код. То ли дело я — мне взлом не страшен. Или страшен?

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

Евгений Кучерявый

Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.


Алгоритм взлома

Главное — помнить, что не существует систем, которые невозможно взломать. Примите это как аксиому. Вопрос лишь в том, сколько времени уйдёт на то, чтобы вас взломать. Наша задача — сделать так, чтобы хакеры тратили на обход защиты так много времени, чтобы им было попросту невыгодно на вас нападать.

Примерный алгоритм взлома следующий:

  1. попробовать обойтись без взлома;
  2. использовать известные способы взлома;
  3. задействовать грубую силу;
  4. создать свой инструмент;
  5. подойти к задаче с другой стороны и начать сначала.

Давайте вместе пройдём путь хакера и посмотрим, как он всё это делает.

ВАЖНО!

Мы никого не взламываем и вам не советуем. Вся информация в статье предоставлена для того, чтобы вы научились защищать свои сайты и приложения.


Цель взлома

Представим, что хакер планирует доступ к аккаунту одного конкретного пользователя на конкретном сайте.

Шаг первый: социальная инженерия

Лучший взлом — тот, которого не было. А чтобы получить доступ без взлома, нужно, чтобы пользователь сам предоставил вам все данные. Для этого используется социальная инженерия. И вот самые известные способы.

Письма от администрации

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

Содержание может быть следующим:

«Здравствуйте, %юзернейм%! Мы получили информацию, что ваш аккаунт подвергся попытке взлома. Мы успели вовремя ликвидировать угрозу, но нам требуется доступ к вашему личному кабинету для проведения дальнейшего расследования.
Для этого вы должны предоставить логин и пароль от своего аккаунта.
Надеемся на ваше понимание и сотрудничество.
С уважением, 
Василий Пупкин,
руководитель отдела безопасности Название-Сайта.РУ»

Когда получаешь такое письмо, в первую очередь начинаешь переживать, что случилось что-то ужасное. И только когда эмоции улягутся, здравый смысл может затрубить о том, что это, скорее всего, мошенники.

Очарование

Вам вдруг пишет человек, который хочет знать о вас всё: откуда вы, чем увлекаетесь, любите ли животных, какая девичья фамилия вашей матери и так далее. Обычно этот человек выглядит как девушка или парень мечты — разве можно не доверять такой очаровашке?

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

Фишинг

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

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

Полезно!


На эту тему прочитайте «Как определить фишинговый сайт»


Методы защиты

Чтобы защитить пользователей от взлома методами социальной инженерии, нужно постоянно информировать их о следующих вещах:

  • Администрация никогда не запрашивает данные для входа на сайт.
  • Никому нельзя сообщать одноразовые пароли или ответы на секретные вопросы.
  • Нельзя переходить с вашего сайта на другие и авторизовываться на них. Особенно если ссылку они увидели в комментариях или получили личным сообщением.

Если же в аккаунт пользователя кто-то заходит с другого устройства, отправьте письмо с инструкцией, что нужно делать, если это авторизовался не сам пользователь.

Шаг второй: взлом с помощью известных уязвимостей

Если не удалось выведать пароль у пользователя, то нужно идти дальше и пробовать уязвимости, которым подвержены практически все сайты. Самая известная из них — SQL-инъекция.

SQL устроен так, что за один раз можно отправлять несколько запросов, которые разделяются точкой с запятой.

Например, у вас на сайте есть форма входа, в которую нужно ввести логин и пароль. Чаще всего запрос, который отправляется для проверки пользователей, выглядит так:

"SELECT * FROM users WHERE login = ' " . $login . "' AND password = ' " . $password . " ';"

Зная это, хакер может ввести в поле с паролем какую-нибудь команду-инъекцию. Например, такую:

qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login

Тогда общий запрос будет выглядеть так:

"SELECT * FROM users WHERE login = ' " . $login . "' AND password = 'qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login ';"

Здесь уже два запроса: первый пытается найти пользователя с указанными данными, а второй меняет пароль пользователя с логином user_login на 12345. Если инъекция сработает, хакер сможет просто войти, воспользовавшись новым паролем.

Методы защиты

Способов много. Например, можно запретить вводить кавычки, точки с запятой или ключевые слова из SQL. Но самый надёжный способ — передавать данные отдельно от запроса.

Тогда СУБД будет воспринимать инъекцию не как часть запроса, а только как введённый пароль. Подробнее о защите от SQL-инъекций можно почитать здесь.

Шаг третий: грубая сила

Если пока ничего не сработало, хакер может пробовать брутфорс — перебор паролей. Он запустит специальный скрипт, который попытается авторизоваться в вашем аккаунте с помощью случайных паролей.

Обычно сначала в ход идут самые распространённые варианты:

  • qwerty;
  • 12345;
  • 0000;
  • password;
  • dartvader и прочие.

Методы защиты

Лучшая защита в этом случае — ограничить количество попыток авторизации. О том, как это реализовать, можете почитать в этой статье.

Шаг четвёртый: разработка своих методов взлома

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

В отдельной группе риска — те, кто пользуется CMS (движки для создания сайтов): взломщик может узнать, на чём работает ваш сайт, установить такой же движок себе и поискать уязвимости изнутри.

Методы защиты

Нужно всегда использовать последние версии движков, в которых уже устранили старые лазейки, а новые ещё никто не нашёл.

Шаг пятый: смена подхода

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

Если на сайте есть возможность загрузить аватарку, то взломщик может попытаться передать через неё на сервер какой-нибудь скрипт. Например, файловый менеджер — так он сможет просматривать все файлы, которые есть на сайте. В том числе и те, в которых хранятся данные для подключения к базе данных.

Методы защиты

Стоит добавить на сайт несколько проверок для всех форм загрузки файлов. Например, для изображений можно добавить такие:

$imageFileType = strtolower(pathinfo(basename($file["name"]), PATHINFO_EXTENSION));

$check = getimagesize($file["tmp_name"]); //Пытаемся получить размеры изображения: если пользователь попробует загрузить какой-нибудь скрипт с расширением изображения, то будет возвращено false

if($check !== false)
{
    if($imageFileType == "jpg" || $imageFileType == "png"
    || $imageFileType == "jpeg" || $imageFileType == "gif") //Проверка расширения
    {
   	 //Файл можно загружать
    }
}

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

Либо же он попытается подключиться к FTP и подменить серверные скрипты. А если он узнает логин и пароль для входа в phpmyadmin, то получит доступ ко всей базе данных.

Защититься от утечки можно шифрованием. Например, пароли лучше хешировать с помощью SHA-2, а важные персональные данные — кодировать шифром Виженера или чем посерьёзнее. Главное, чтобы у вас не украли ключи для дешифровки.

Заключение

Кибербезопасность — это невидимая война, в которой взломщики и специалисты по защите придумывают всё новые и новые способы укрепления баррикад и их обхода.

Но если вы не работаете в компании мирового уровня, то вряд ли кто-то захочет тратить своё время на взлом вашего сайта. Особенно если вы защитите его от основных способов взлома.

Научиться создавать стабильные и защищённые сайты можно на курсе
«PHP-разработчик с нуля до PRO». Вы узнаете о современных подходах к написанию кода и поиску ошибок, что позволит минимизировать количество уязвимостей ваших проектов.

Курс

Профессия
PHP-разработчик c нуля до PRO


Вы научитесь работать с XML, JSON, REST, SOAP, освоите проектирование программной архитектуры, научитесь оптимизировать разработанную систему и обеспечивать безопасность кода — и после обучения сможете претендовать на звание middle PHP-разработчика. После обучения — гарантированное трудоустройство.

Хочешь получать крутые статьи по программированию?
Подпишись на рассылку Skillbox