Что такое оценка уязвимости? (часть i)

Смысловое содержание

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


Уязвимость — это ёмкое слово, включающее следующие значения:

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

Уязвимость — это свойство абсолютно любого организма во Вселенной. Именно оно позволяет обновляться природе, смывать с лица земли поколения и давать возможность появлению новых видов. Такое свойство наблюдается во всех современных сферах жизни человека.

Как обнаружить и устранить уязвимости сайтов?

Источниками угрозы могут являться некачественный код сайта или сервера, CMS с открытым кодом, для которых злоумышленникам проще найти уязвимость и написать эксплойт

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

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

Общество

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

Чтобы убрать с пути миллионы дружных людей, нехорошие правители начинают искать слабое место в шумной толпе

Порой одно неосторожное слово может спровоцировать кровопролитие или, наоборот, остановить нападение врага. Это действие и описывается словом «уязвимость»

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

Как защитить сайт от SQL-инъекции

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

1. Используйте белые списки

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

$keys = «»;

$values = «»;

$first = 1;

foreach($_POST as $key => $array) {

$allowedKey = array_search($key,$allowed);

if($allowedKey) {

       if($first == 0) {

              $keys .= «,»;

              $values .= «,»;

       }

       $keys .= $allowedKey;

       $values .= «‘».$value.»‘»;

$first = 0;


}

}

Теперь в переменные $key и $values попадут только те значения, которые входят в белый список $allowed.

2. Не пользуйтесь методом GET в формах

Передавать переменные этим способом очень опасно, потому что они оказываются на виду у пользователей. Если информация важная, то лучше используйте POST. Из ссылки злоумышленник может узнать не только имена переменных, но и какие значения должны быть в них — так он сможет выбрать оптимальную переменную для ввода инъекции.

Не советуем использовать переменные прямиком из супермассива — лучше поместить их в другую переменную, предварительно проверив данные.

3. Обрабатывайте переменные

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

Используйте функции trim (убирает лишние пробелы), htmlspecialchars (заменяет треугольные скобки и другие спецсимволы), addslashes (экранирует кавычки и специальные символы) и другие.

В приведенной форме регистрации, например, злоумышленник мог бы использовать кавычки и запятые, чтобы добавить новый ключ и новое значение. То есть, введя в поле что-то вроде «pass’, ’something», он бы добавил какую-нибудь еще информацию, которая не проходит белый список.

Также вы можете проверять типы переменных — число, строка, файл и так далее.

4. Проверяйте, откуда пришли данные

Недостаточно просто обработать данные — нужно узнать, откуда они пришли. Отследить источник можно несколькими способами:

  • проверять его в $_SERVER;
  • создать скрытое поле в форме;
  • указать имя формы;
  • указать имя кнопки отправки и так далее.

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

5. Используйте PDO

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

$db = new PDO(‘mysql:host=localhost;dbname=test’, $user, $pass);

$stmt = $db->prepare(«SELECT * FROM articles WHERE id=’:id'»);

$stmt->bindParam(‘:id’, $id);

$stmt->execute();

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

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

Часто проверками пренебрегают самоучки, которые изучают темы «по верхушкам», — они могут решить задачу, но редко задумываются о том, чтобы устранить уязвимости. Поэтому мы предлагаем курс с системным обучением — вы научитесь создавать эффективные и надежные системы, которым не будут страшны инъекции и утечки данных.

Курс «PHP-разработчик»

Обширная программа для изучения PHP, состоящая из4 курсов. Поможет с нуля овладеть популярным языком программирования, устроиться в IT-компанию вашей мечты или стать независимым разработчиком.

  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы

Что делать, если вирусы обнаружены?

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

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

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

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


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

— Закажите услугу фрилансера на бирже Kwork, Weblancer или любой другой. Обычно опытные вебмастера с легкостью решают подобные вопросы, ведь по сути работа сводится к редактированию кусков кода. Но не всегда все так просто, поэтому вам может понадобиться услуга более опытного специалиста.

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

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

Хочу также поделиться с вами немножко шуточным способом удаления вирусов, которые я иногда применяю для своих веб-сайтов на WordPress, вернее, применял ранее. Иногда борьба с вирусами требует не только времени, но и нервов. Представьте себе, на протяжении нескольких дней вы не можете понять, что к чему, копаетесь в коде, и, вроде бы, решение близко, но оно все никак не находится. Ситуация подобна к решению популярнейшего вопроса, почему Windows тормозит.

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

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

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

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

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

Жду ваших вопросов, мнений и комментариев.

Пока!

WordPress

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

Перед первым использованием WPScan необходимо обновить его базу данных.

wpscan --update 

После этого начинаем сканирование. Сам по себе WPScan без ключей выдаст общую информацию о сайте, лишь поверхностно просканировав цель.

wpscan --url http://example.com

WPScan

После строчки начинаются те самые моменты, на которые стоит обратить внимание:

  • версия WP;
  • открытые директории;
  • подозрения на уязвимости;
  • ссылки на ресурсы, где об этих уязвимостях можно почитать.

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

Конфигурация WordPress

Продолжаем копать и все тем же софтом пробуем сбрутить логин и пароль к админке:

wpscan --url http:// --passwords pass.txt --usernames user.txt

Брутфорсится очень быстро благодаря многопоточности. Если админ использовал стандартные учетные записи и установил несложные пароли, то результат не заставит себя долго ждать.

Найденные учетные данные

Как видишь, учетные данные к админке и базе данных мы достали без особого труда. Для рядового взломщика это было бы больше чем предостаточно, но мы еще не все проверили. На очереди — плагины для WP и другие популярные точки входа.

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

wpscan --url http:// --enumerate ap --plugins-detection aggressive

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

Как видишь, агрессивный метод дал свои результаты: обнаружен антиспам-плагин Akismet версии 3.1.1.

Плагин Akismet v3.1.1


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

Обнаружение уязвимостей

На данный момент многие вирусописатели фокусируют свои усилия именно на обнаружении неизвестных уязвимостей в программном обеспечении.[источник не указан 429 дней] Это обусловлено высокой эффективностью использования уязвимостей, что, в свою очередь, связано с двумя фактами — высоким распространением уязвимого ПО (именно такое программное обеспечение, как правило, атакуют) и некоторым временным промежутком между обнаружением уязвимости компанией-разработчиком программного обеспечения и выпуском соответствующего обновления для исправления ошибки.

Для обнаружения уязвимостей вирусописатели используют различные техники, например:

  • Дизассемблирование программного кода и последующий поиск ошибок непосредственно в коде программного обеспечения;
  • Реверс-инжиниринг и последующий поиск ошибок в алгоритмах работы программного обеспечения;
  • Fuzz-тестирование — своего рода стресс-тест для программного обеспечения, суть которого заключается в обработке программным обеспечением большого объёма информации, содержащей заведомо неверные параметры.

Для кого опасна CVE-2020-0796?

SMB — сетевой протокол для удалённого доступа к файлам, принтерам и прочим сетевым ресурсам. Он используется для реализации «Сети Microsoft Windows» и «Совместного использования файлов и принтеров». Если в вашей компании эти функции используются — это повод побеспокоиться.

Поскольку Microsoft Server Message Block 3.1.1 — сравнительно свежий протокол, он используется только в новых операционных системах:

  • Windows 10 Version 1903 for 32-bit Systems
  • Windows 10 Version 1903 for ARM64-based Systems
  • Windows 10 Version 1903 for x64-based Systems
  • Windows 10 Version 1909 for 32-bit Systems
  • Windows 10 Version 1909 for ARM64-based Systems
  • Windows 10 Version 1909 for x64-based Systems
  • Windows Server, version 1903 (Server Core installation)
  • Windows Server, version 1909 (Server Core installation)

То есть Windows 7, 8, 8.1 и более старые уязвимость не затрагивает. Однако поскольку большинство современных компьютеров работает под управлением Windows 10 с автоматической установкой обновлений, то, вероятно, уязвимости подвержено очень много компьютеров по всему миру – как домашних, так и корпоративных.

Когда дело касается компьютера и приложений

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

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

Уязвимость системы возникает в результате ряда случаев:

  • нарушение правил хранения и ввода паролей;
  • ненадежные коды программных продуктов;
  • отказ от установки официальных программных приложений и антивирусов;
  • несвоевременная проверка системы на шпионское ПО, вирусы, скрипты.

Хакеры используют ботов для взлома сайтов

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

Вордпресс — очень популярная платформа, в данный момент на Вордпрессе работает около 80 млн. сайтов. Учитывая производительность хакботов, вероятность найти какую-то уязвимость довольно высока. Согласно статистике, в середине 2018 года каждую секунду боты атаковали около 1.000 Вордпресс сайтов, и одна из таких атак заканчивалась взломом.

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

Как найти нужные данные

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

Если вы увидели, что кто-то пытался получить доступ к файлам, которые обычный посетитель не должен посещать, но хакер может, тогда обратите внимание на этот IP. Хакер может попытаться получить доступ к файлам .htaccess, wp-config.php, install.php и другим подобным

Пример ошибки в Логе ошибок:

AH01630: client denied by server configuration: /путь/к/вашему/сайту/.htaccess

В этом примере сервер отказал пользователю в доступе к файлу .htaccess, потому что у него не было разрешения на просмотр этого файла. Если вы не узнаете этот IP адрес, и это не ваш адрес, то это определенно попытка взлома.

Если вы не знаете свой IP адрес, узнайте его здесь, или спросите в поисковике «мой IP адрес».

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

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

В этом примере вы видите, что пользователь обратился к странице ~/wp-login.php в первой строке, и запрос был успешным.

После того, как загрузились все нужные файлы, пользователь был успешно авторизован и направлен на страницу Консоли в строке 5. Следующим действием администратор прошел в редактор плагинов в строке 9.

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

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

Большое количество неудачных попыток войти на сайт перед последней удачной попыткой будут иметь один из 400-х ответов сервера:

  • 400 Bad Request — Ошибка синтаксиса или неверный запрос.
  • 401 Unauthorized — Эта ошибка появляется, когда требуется авторизация для просмотра страницы, но она не была дана, или она недействительна.
  • 403 Forbidden — аналогично с ошибкой 401, этот ответ означает, что пользователь не имеет прав для просмотра этой страницы. То есть, технически доступ разрешен, но сервер запретил доступ этому пользователю.
  • 429 Too Many Requests — Слишком много запросов за определенный период времени. Обычно пользователи не видят такой ответ, такая ошибка может указывать на активность какого-то бота.

Это не весь список ошибок, которые вы можете увидеть, но смысл в том, что описание событий может дать подсказку, что произошло с сайтом.

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


С этим читают