Чтобы избежать повторных взломов сайта, важно понять, как он был взломан. В этой статье мы рассмотрим некоторые уязвимости системы безопасности, которые могут привести к взлому сайта.
Взлом паролей
Злоумышленники могут перебирать различные пароли, пока не угадают правильный. Для взлома через подбор пароля используются различные методы, например перебор распространенных паролей или случайных комбинаций букв и цифр. Чтобы предотвратить это, создайте надежный пароль, который трудно угадать. Изучите советы по созданию надежных паролей в Справочном центре Google.
Что нужно помнить при выборе пароля? Во-первых, старайтесь не использовать одинаковые пароли в разных сервисах. Если злоумышленники взломают ваш пароль, они могут попытаться использовать его с вашим именем пользователя в любом другом сервисе.
Во-вторых, по возможности пользуйтесь двухфакторной аутентификацией (пример ее реализации в Google). Такой подход позволяет использовать второй уровень учетных данных для входа. Как правило, они создаются динамически и отправляются в SMS или другим способом. Благодаря этому злоумышленник не сможет получить доступ к вашему аккаунту, взломав пароль. Некоторые поставщики систем управления контентом предлагают рекомендации по настройке двухфакторной аутентификации (см. документацию для Joomla!, WordPress и Drupal).
Отсутствие обновлений системы безопасности
Устаревшие версии программного обеспечения могут иметь уязвимости, которые позволяют злоумышленникам взломать весь сайт. Хакеры постоянно ищут такое ПО. Игнорирование уязвимостей на сайте повышает вероятность его взлома.
Примечание. Для устранения уязвимостей необходимо периодически обновлять программное обеспечение сайта. По возможности настройте автоматическое обновление и подпишитесь на рассылку с новостями об изменениях в системе безопасности используемого вами ПО.
Вот некоторые примеры программного обеспечения, которое следует обновлять:
- ПО веб-сервера (если вы используете собственные серверы);
- система управления контентом (например, обновления систем безопасности для WordPress, Drupal и Joomla!);
- все плагины и дополнения, которые вы используете на сайте.
Небезопасные темы и плагины
Плагины и темы расширяют функциональные возможности системы управления контентом. Однако устаревшие или неисправленные темы и плагины являются основным источником уязвимостей на сайтах, поэтому их нужно обновлять вовремя. Удалите темы и плагины, которые не поддерживаются разработчиками.
Будьте осторожны с бесплатными плагинами и темами из ненадежных источников. Хакеры часто добавляют вредоносный код в бесплатные версии платных плагинов или тем. При удалении плагина не просто отключите его, а обязательно удалите все файлы с сервера.
Социальная инженерия
Социальная инженерия использует человеческий фактор для обхода сложной инфраструктуры безопасности. Хакеры, использующие этот метод, обманывают пользователей, чтобы получить конфиденциальную информацию, например пароли. Распространенный вид социальной инженерии – фишинг. Организаторы фишинга используют рассылки электронных писем под видом известных организаций, чтобы получить конфиденциальную информацию.
Примечание. Согласно исследованию Google по социальной инженерии, эффективность наиболее успешных фишинговых кампаний достигает 45%!
Никогда не сообщайте конфиденциальную информацию (пароли, номера кредитных карт, банковскую информацию и даже дату своего рождения), если не знаете точно, кто ее запрашивает. Если управление вашим сайтом осуществляют несколько человек, проинструктируйте их о мерах безопасности. Также в нашем Справочном центре вы можете узнать, как защититься от фишинга.
Недоработки в правилах безопасности
Если вы являетесь системным администратором или создали собственный сайт, помните, что недоработки в правилах безопасности позволяют злоумышленникам взломать его. Вот примеры ситуаций, когда сайт под угрозой:
- Пользователи могут создавать ненадежные пароли.
- Административный доступ предоставляется пользователям, которым он не требуется.
- Нет поддержки протокола HTTPS и можно выполнять вход с помощью HTTP.
- Для загрузки ресурсов не требуется авторизация пользователя или проверка типа файла.
Вот несколько советов, которые помогут защитить ваш сайт:
- Обеспечьте высокий уровень безопасности, отключив ненужные службы.
- Проверьте средства управления доступом и права пользователей.
- Используйте шифрование для страниц, на которых пользователи указывают конфиденциальную информацию, например страниц входа в систему.
- Регулярно проверяйте журналы сайта на предмет подозрительных действий.
Утечка данных
Утечки данных возможны, когда загруженные конфиденциальные данные становятся общедоступными из-за ошибок в конфигурации. Например, система обработки ошибок или обмена сообщениями в веб-приложении может привести к утечке информации в результате необработанного сообщения об ошибке. Используя метод, известный как доркинг, злоумышленники могут найти эти данные с помощью поисковой системы.
Убедитесь, что ваш сайт не раскрывает конфиденциальную информацию неавторизованным пользователям. Для этого проводите периодические проверки и с помощью правил безопасности предоставляйте доступ к конфиденциальным данным только доверенным лицам. Если вы обнаружили на своем сайте конфиденциальную информацию, которую необходимо срочно удалить из результатов поиска Google, используйте инструмент удаления URL.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Для начала определимся с тем, что данной статьей я ни в коем случае не призываю кого-либо взламывать чьи-либо интернет-ресурсы, используя описанные ниже методы.
Основная цель статьи — продемонстрировать пользователю важность темы защиты данных в Интернете на примере сайта, не защищенного должным образом. В качестве способа атаки на сайт будет использоваться, пожалуй, самый распространенный метод взлома сайта — SQL-инъекция.
Для начала определимся с тем, что все без исключения современные объемные, сложные сайты строятся на основе базы данных. Работа с данными, хранящимися в базе данных вашего сайта, осуществляется посредством структурного языка запросов SQL.
SQL-инъекция — техника внедрения в исходный SQL-запрос определенного кода (не нарушающего структуры самого запроса) с целью получения доступа к данным, содержащимся в БД.
Таким образом при определенных условиях, связанных, как правило, с отсутствием в коде и запросах сайта функций, направленных на защиту данных, взломщик может посредством SQL-инъекции прочитать содержимое любых таблиц, а также удалить, изменить или добавить данные, получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере. Не будем долго останавливать на теории и перейдем к действиям.
Итак, для начала познакомимся с таким понятием, как передача данных методом GET. Не замечали ли вы, путешествуя по страничкам бесконечного Интернета, что ссылки, по которым вы путешествуете, зачастую имеют вид типа:
www.хххххх.ru/index.php?что-то = чему-то&еще_что-то = еще_чему-то,
где на месте моих условных «что-то» и «чему-то» стоят всевозможные значения.
Так вот, знайте, что url, выглядящие подобным образом, содержат в себе определенную информацию, а именно: за знаком вопроса следует сначала переменная (ее имя), а затем = ее значение. Знак & отделяет переменные друг от друга.
А делается это все лишь для того, чтобы страница, к которой вы обращаетесь, могла изменяться в зависимости от этих переменных, то есть их значения передаются тем самым методом GET в код страниц сайта, там эти значения обрабатываются, а на основе полученных результатов и получается наша веб-страница.
Но только вдумайтесь! Ведь никто не может вам запретить взять и вручную подправить этот url, сделать его таким, как нужно вам, нажать после этого клавишу enter и отправить данные этого url-а на обработку серверу БД! Именно здесь и возникает возможность внедрения SQL-инъекции.
Итак, начнем. Мы имеем сайт, который на основании параметра id, переданного методом GET, вынимает определенные данные из БД и формирует на их основе нашу страницу. Вот код этого SQL-запроса, который обрабатывает наши данные из url-а:
$result3 = mysql_query (‘SELECT * FROM raspisanie WHERE cat=$id’).
Если перевести на русский язык, запрос выполняет выборку всех данных из базы данных raspisanie, где поле cat=$id. По сути все, что в запросе идет за нашей переменной $id, которую мы передаем из url-а, нам уже не важно, и позже я поясню почему. Теперь разберемся с самим url-ом. Пусть изначально он выглядит так:
www.хххххх.ru/index.php?id=3.
То есть мы передаем этим url-запросом параметр и страница формируется на основе этого параметра, значит он помещается в наш SQL-запрос и получается, что из базы данных извлекаются все данные из таблицы raspisanie, где поле cat=$id=3. А теперь перейдем к самому интересному. Допустим, мы знаем, что в базе данных атакуемого сайта в таблице users хранятся логин и пароль от администраторской зоны сайта — в полях login и password соответственно. И тогда, просто изменив наш url следующим образом:
www.хххххх.ru/index.php?id =3+union+select+1,2,login, password, 5,6,7 +from+user/*
— страница поместит всю эту большую переменную в наш запрос, который станет выглядеть как
$result3 = mysql_query (‘SELECT * FROM raspisanie WHERE cat=3 union select 1,2,login, password, 5,6,7 from user/*’).
И, обработав такой новый запрос, который никак не нарушает структуру таблиц БД, сервер сам вернет нам, помимо обычной информации, соответствующей значению еще и логин с паролем от сайта!
Чтобы было совсем понятно, я переведу наш новый «волшебный запрос»:
«Выбрать все данные из таблицы raspisaniе, где поле cat=3, а также сделать другой запрос: вывести, помимо полученных данных, значения логина и пароля из таблицы users».
Числа 1, 2 и т. д. являются произвольными и используются для сохранения структуры запроса, и число таких значений определяется подбором — до тех пор, пока число таких значений не станет равным числу значений, которые выводятся из базы данных по умолчанию.
Имена таблицы users и значения полей для логина и пароля также определяются подбором, ведь согласитесь, везде они имеют примерно одинаковые названия. И, наконец, символы в конце нашего url-а «/*» служат для отбрасывания хвоста начального запроса в случае его присутствия, чтобы он не нарушил структуру запроса внедренного.
Итак, мы наглядно, на примере успешного внедрения SQL-инъекции, ознакомились с одним из возможных способов взлома сайта.
Не пренебрегайте вопросами защиты информации своего сайта и спите спокойно!