Почему так происходит, что одни компании постоянно взламывают, а у других с этим нет никаких проблем? Давайте разберемся, по каким принципам действуют хакеры и как можно от них обезопаситься.
Запомните главный факт – систем, которые было бы невозможно взломать, не существует. Дело только в том, как много времени это займет. Поэтому вам нужно сделать защиту такой, чтобы ее обход был слишком долгим, а это будет значить, что нападать на ваш сайт попросту невыгодно.
Типичный алгоритм взлома выглядит так:
Чтобы было понятнее, давайте вместе детально разберем каждый шаг взломщика и посмотрим, каким образом он действует на всех этапах.
Допустим, хакеру нужно получить доступ к сайту с аккаунта любого пользователя.
Шаг №1: социальная инженерия
Наилучший взлом – не случившийся. Но как без взлома заполучить доступ к сайту? Конечно же, нужно склонить пользователя к тому, чтобы он сам дал вам свои данные для входа. Этот способ называется социальной инженерией, и вот какие существуют ее разновидности:
Сообщения от администрации
Пишем пользователю письмо от имени якобы официального представителя сайта. Примерное содержание:
Получив такое сообщение, человек сразу начинает паниковать. Но если отбросить эмоции и прислушаться к здравому смыслу, сразу становится виден почерк мошенников.
Ненавязчивое общение
Ни с того ни с сего вам начинает писать какой-то человек, желающий познакомиться. Завязывается дружеское общение, в ходе которого он расспрашивает вас обо всяких мелочах: откуда вы родом, какое у вас хобби, каких животных любите, какая у вашей матери девичья фамилия… Догадались, к чему все идет? Конечно же, к тому, чтобы узнать кодовое слово, с помощью которого можно будет получить доступ к вашему профилю.
Фишинг
Вам приходит письмо с просьбой перейти по ссылке и, например, проголосовать или посмотреть что-то интересное. Вы открываете ее и видите форму для авторизации. Заполняете ее своими данными, но дальше не происходит ровным счетом ничего. Вы в недоумении закрываете сайт, но хакер уже успел получить все, что ему было нужно.
Сайт, который вы посетили, был подставным: он скорее всего будет выполнен в том же дизайне, как настоящий, но на самом деле это муляж, который нужен для сбора ваших данных.
Единственный способ – это информирование пользователей. Регулярно напоминайте им, что:
Если в пользовательский аккаунт пытаются зайти с другого устройства, вам нужно убедиться, что попытку авторизации делает именно пользователь, а не посторонний человек: для этого вы должны отправить ему письмо с соответствующей инструкцией.
Предположим, узнать у пользователя его данные не получилось. Тогда нужно приступать к следующей стратегии – через уязвимости. Почти все сайты подвержены той или иной из них. Наиболее известная сейчас – SQL-инъекция.
Как устроен SQL? В данном случае нас интересует такая его особенность: за 1 раз можно сделать отправку нескольких запросов, разделив их символом “;”.
Пример: сайт содержит стандартную форму для входа с полями “login ” и “password”. В большинстве случаев запрос будет примерно таким:
"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 ';"
Как видите, теперь мы имеем два запроса: один по указанным данным выполняет поиск пользователя, а другой изменяет его пароль на 12345. Сработанная инъекция даст хакеру возможность войти в аккаунт с новым паролем.
Есть много способов. Один из вариантов – запретить ввод кавычек, символа “;” или ключевых слов языка SQL. Но надежнее всего будет отделить передачу данных от запроса. Так СУБД расценит команду-инъекцию не как элемент запроса, а как часть введенных данных.
Предыдущие 2 шага не сработали, а значит, хакер прибегнет к брутфорсу – подбору пароля. Для этого он воспользуется скриптом, который будет с помощью случайных комбинаций пытаться пройти авторизацию.
Первым делом обычно пробуют самые популярные варианты:
Ограничьте число попыток авторизации.
Когда описанные выше методы не помогают, хакеру нужно заняться изучением исходного кода, чтобы понять, через какие уязвимости можно подобраться к вашему сайту. Особенно рискуют те, кто использует CMS (систему управления содержимым или, другими словами, движок для разработки сайта), потому что взломщик всегда может установить этот движок себе и это позволит ему заняться поиском уязвимостей изнутри.
Стремитесь всегда пользоваться последними версиями: старые лазейки в них устранены, а новые пока никто не обнаружил.
Когда и точечный взлом не дал результат, хакеру приходится идти обходным путем. Некоторые пытаются добраться до хостинга сайта с помощью того же алгоритма, о котором мы говорили раньше. Но можно попробовать действовать совершенно иначе. Например, если на сайте можно установить аватар (т.е. загрузить изображение), взломщик через эту картинку попробует передать на сервер определенный скрипт – хотя бы файловый менеджер. В итоге хакер получит доступ к загруженным файлам (и к тем, в которых содержится информация для подключения к БД).
Добавьте на сайт пару-тройку поверок для каждой HTML-формы, через которую загружаются файлы. Вот пример для изображений:
$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, а ценные персональные данные можно кодировать с помощью шифра Виженера, либо инструментом посерьезнее. Самое главное, хорошо спрятать ключ для расшифровки.
Кибербезопасность можно представить как невидимую войну между специалистами служб безопасности и хакерами, в которой первые стремятся укрепить баррикады, а вторые найти способы их обойти.
Так что если вы работаете в достаточно крупной компании, которая потенциально может привлечь взломщиков, вам нужно посвятить много времени и усилий тому, чтобы защитить ее сайт от главных методов взлома.