Удивительные уязвимости и дыры в компьютерной безопасности, и где они обитают. Часть 1.
В последнее время я столкнулся с увеличившимся числом взломов и утечек данных, что послужило поводом для написания этой статьи. Эта печальная тенденция "дырявости систем" затрагивает как крупные IT компании, так и небольшие фирмы. За последний год мне пришлось столкнуться как с DDOS атаками, так и с прямыми взломами.
Интересно, что действия хакеров затронули не только наши проекты, но и проекты наших соперников. Благодаря нашей давней преданности вопросам безопасности (иногда даже до паранойи) и привычке внедрять в проекты надежность на случай различных чрезвычайных ситуаций, мы смогли сократить последствия для себя. Однако, как говорится, враг не дремлет!
Согласно отчету ГК InfoWatch, количество утечек данных в 2023 году увеличилось в 2.4 раза по сравнению с предыдущим годом. Утечки данных являются прямым результатом уязвимостей и недостатков в безопасности информационных систем. И это только начало года! Возможно, к концу 2023 года мы столкнемся с еще более пугающей статистикой.В связи с этим, я считаю важным еще раз подчеркнуть, что несмотря на обилие материала по данной теме как для новичков, так и для опытных специалистов, необходимо рассказать о основных принципах информационной безопасности и наиболее распространенных видах атак.
Что такое уязвимость? 📛
Давайте начнем с основ. Что такое уязвимость? Уязвимость представляет собой недостаток или ошибка в системе, который может быть использован злоумышленником для нарушения ее целостности и вызова неправильного функционирования. При наличии уязвимости злоумышленник может заставить систему вести себя не так, как задумано разработчиком. Например, обычный пользователь может получить административные привилегии, а посторонний посетитель может получить доступ к базе данных проекта. Иными словами, любая уязвимость представляет собой "дыру", через которую внешний пользователь может негативно повлиять на работу системы.
Возможные уязвимости могут присутствовать как в программном, так и в аппаратном обеспечении продуктов. В случае с аппаратными уязвимостями возникает серьезная проблема: когда уязвимое устройство уже находится в руках людей (иногда у десятков, сотен или даже тысяч людей), закрыть такую "дыру" становится крайне сложно, а иногда и вовсе невозможно.
Примером тому служит игровая приставка Nintendo Switch, которая имеет уязвимость в аппаратной части, что позволяет получить полный контроль над системой и установить любые неподписанные приложения, включая пиратские или вредоносные программы.

Даже крупная компания, такая как Nintendo, не смогла придумать более эффективное решение, чем выпустить новую версию устройства без уязвимости. Однако уже имеющиеся у пользователей старые устройства остаются подвержены этой проблеме и не могут быть исправлены удаленно. Это не первый случай, когда компания сталкивается с подобными проблемами - в прошлом консоль NES (Денди) была взломана путем короткого импульса на чипе защиты от копирования.
Это подчеркивает тот факт, что уязвимости встречаются в любой системе, включая крупные корпорации. В конце концов, все мы совершаем ошибки. Даже искусственный интеллект не является исключением, ведь его создают живые люди!
В мире компьютерной безопасности произошел забавный инцидент с устройствами Apple во времена iPhone 5s. Переход на 64-битные ЦПУ привел к появлению странного бага в операционной системе. Если установить дату на 1 января 1970 года, то телефон автоматически выключался и больше не включался. Для того чтобы вернуть устройство к жизни, необходимо было отключить аккумулятор и сбросить системные часы на плате.
Мало кто осведомлен о том, что помимо "безобидной" шутки для друга вроде "установи 1970 год и увидишь чудо", можно было осуществить удаленную атаку и "кирпичить" все устройства iOS, подключенные, например, к определенной Wi-Fi сети. Все дело в том, что при автоматической установке даты телефон получает эту дату с NTP серверов Apple. Таким образом, злоумышленник мог перенаправить запросы в своей сети на свой NTP сервер, который бы отдавал поддельную дату 1 января 1970 года. Последствия этого действия были бы катастрофическими.

Вот еще один аргумент против использования открытых Wi-Fi сетей - история, которая заставляет задуматься. Кстати, мы еще поговорим об этом позже. Следует отметить, что подобная уязвимость была обнаружена и в операционной системе Android, но там требовалось установить специальное изображение на обои.
Необходимо также упомянуть понятие уязвимости нулевого дня - это уязвимость, против которой пока не придумана защита. В самом названии заключается суть: у разработчиков нет времени на исправление ошибки, уязвимость доступна многим и на данный момент не существует средств защиты от нее.
Кстати, для предотвращения уязвимостей "нулевого дня" многие компании рекомендуют регулярно обновлять программное обеспечение. Помимо добавления новых функций и исправления ошибок, важно, что разработчики закрывают обнаруженные уязвимости в безопасности при каждом обновлении.
Что такое эксплойт и кибератака? ⚔️
Понимая суть уязвимости, важно упомянуть понятие эксплойта. Эксплойт представляет собой программу, фрагмент кода или последовательность действий, которые используют уязвимость в системе для проведения атак. Другими словами, эксплойт - это шаг за шагом инструкция или специальная программа, которая помогает использовать определенную уязвимость и в конечном итоге совершить незаконное действие.В последнее время мы все чаще сталкиваемся с угрозой под названием "кибератака". Этот термин обозначает внешнее воздействие на систему, осуществляемое злоумышленником с целью получения доступа к конфиденциальным данным, базе данных и другим ценным информационным ресурсам. Кибератака становится все более распространенной и опасной проблемой в современном мире.

В целом, можно сказать, что целенаправленные кибератаки - это довольно дорогое занятие (и защита от них тоже не дешева - например, проведение пентеста системы может обойтись в кругленькую сумму до 300 тыс. рублей и даже больше, не шутка). Если не деньгами, то как атакующая, так и пострадавшая компания обычно платят своим опытом и временем. Поэтому, конечно, проводить настоящие масштабные атаки (особенно если они профессиональные или нацелены на что-то более значимое, чем просто навредить сисадмину в университете - ах, были времена), вряд ли кто-то решится. Обычно, стандартная атака сводится к проверке SQL-инъекций или DDOS - об этом мы поговорим далее в этой статье и в последующих публикациях.
Иногда возникает ситуация, подобная той, что произошла с таинственным Джо. Он такой недосягаемый, потому что никому не нужен. Интересно, как иногда шутки судьбы могут играть злую шутку - продукт, созданный исключительно для развлечения и ограниченного круга пользователей, вдруг может стать популярным, и таких случаев немало. Однако, если система изначально не была разработана с учетом безопасности и с мыслью "кому мы нужны", то в дальнейшем это может привести к серьезным проблемам. Урок - даже в проектах, созданных для развлечения, необходимо обращать внимание на устранение уязвимостей. Даже самыми простыми способами.
Существует огромное количество различных уязвимостей в информационных системах и различные виды кибератак. Существует множество систем классификации, таких как классификация CVE. Все это может быть довольно запутанным. Поэтому я предлагаю рассмотреть наиболее известные и часто используемые уязвимости и кибератаки, которые их эксплуатируют.
Что такое DOS и DDOS Атаки 👨💻
Аббревиатура DOS означает denial of service, что в переводе означает "отказ в обслуживании". А DDOS - это распределенная атака типа "отказ в обслуживании" (атака DOS с использованием множества устройств одновременно). Суть таких атак заключается в перегрузке интернет-канала или превышении серверных мощностей на целевом проекте за счет массовых запросов с большого количества внешних устройств.
Этот вид атак известен даже тем, кто не очень хорошо разбирается в безопасности информационных технологий. В последнее время упоминания о таких атаках все чаще появляются в новостях и официальных заявлениях крупных и маленьких компаний. Почему так происходит? Потому что подобные атаки легко организовать, и при этом можно нанести значительный ущерб при небольших затратах.

Как известно, ресурсы аппаратного обеспечения любой системы ограничены, и это используют злоумышленники. Атакующие перегружают входящий канал большим количеством "мусорных" запросов, что мешает обычным пользователям эффективно взаимодействовать с системой.
Различие между DOS и DDOS явно видно по названию - распределенная атака, которая выполняется одновременно с большого количества различных устройств (да, да, DDOS'ить могут даже "умные" чайники с Wi-Fi). Тысячи, а то и сотни тысяч зараженных устройств будут нагружать ресурсы терабитным трафиком. Конечно, DOS атаку может провести и один человек с одного-пары устройств, но против крупной и хорошо защищенной системы это будет неэффективно.
DDOS как наиболее популярный способ кибератак 💢
По моему мнению, в настоящее время DDOS-атаки являются одним из основных видов атак. За последний год мы стали свидетелями сбоев в работе даже крупных банков РФ из-за таких злонамеренных технологий. Причина этого довольно проста - организация такой атаки относительно недорога по сравнению с другими видами атак, но в то же время она наносит серьезный удар по цели.
Подумайте об ущербе, который может принести даже небольшая задержка или сбой в работе крупного онлайн сервиса, будь то банк или интернет-магазин. Это может негативно сказаться на их репутации, доходах и других аспектах. А если к этому добавится распространение информации через "сарафанное радио", то ущерб может быть еще больше увеличен.
Если хостинг провайдер начинает взимать плату за серверный трафик, это может привести к финансовым потерям. Даже без уменьшения продаж. Еще одно серьезное последствие - если сайт будет недоступен в течение длительного времени (обычно сутки-двое), поисковые системы начнут снижать его рейтинг в поисковой выдаче. Простой более 4-5 дней может быть критическим для любого онлайн-проекта.

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

При обсуждении защиты от подобных атак, важно отметить, что DDOS-атаки можно разделить на два основных типа - низкоуровневые и высокоуровневые. Низкоуровневые атаки направлены на сетевую инфраструктуру, а именно на интернет-канал, в то время как высокоуровневые атаки целятся непосредственно на систему, чтобы перегрузить процессор, память и СУБД. В случае второго типа атак, ситуация немного проще - хорошо настроенная система и качественный код могут помочь отразить даже небольшие атаки. Это первый способ защиты. Настройка файрволла, фильтрация трафика, оптимизация веб-сервера (если он используется), оптимизированный код и СУБД - все это может помочь предотвратить большую часть нелегитимного трафика. В случае атак меньшего масштаба, эти меры могут сделать их практически незаметными.
Также, самым простым и эффективным способом защиты от DDOS-атак с точки зрения затраченного времени и усилий (но не стоимости) является постепенное увеличение мощности сервера. Например, если сервер способен обслуживать 100 пользователей одновременно, а атака приходит с 1000 устройств, то ресурсов будет недостаточно. Однако, если сервер способен обслуживать 10000 пользователей одновременно, то даже атака с 1000 устройств не сможет навредить ему. В общем, иметь запас по ресурсам сервера всегда полезно, но от DDOS-атак это не гарантия защиты - компания не может бесконечно увеличивать ресурсы, так как это неэффективно с экономической точки зрения. В то же время злоумышленник может использовать огромные ботнеты, которые могут нанести ущерб даже самому мощному серверу.
Если говорить о низком уровне, ситуация становится сложнее. Во-первых, хостинг-провайдеры часто не предоставляют полного контроля над нашим интернет-каналом (что вполне логично). Даже если наш сервер настроен правильно и программное обеспечение написано хорошо, нам все равно могут просто забить наш интернет-канал. Во-вторых, атаки могут быть направлены не на наш сервер напрямую, а на самого хостинг-провайдера (хоть и редко, но это возможно). Конечно, это будет его проблемой, но нам от этого не станет легче. В таких случаях может помочь распределение ресурсов. Например, размещение различных сервисов на разных серверах или балансировка нагрузки.
Когда у нас есть несколько физических серверов, желательно распределенных даже по разным дата-центрам. В таком случае, если один из них выходит из строя, остальные продолжат обслуживать клиентов без перебоев. Однако недостатком такого подхода являются высокие затраты и сложность. Даже один сервер может стоить значительную сумму, а содержание нескольких серверов - еще более дорогое удовольствие. Кроме того, необходимо обеспечить совместимость между всеми этими серверами, что представляет собой непростую задачу. Обычно такое распределение ресурсов используется крупными компаниями, способными позволить себе такие затраты. Например, у Яндекса есть серверы как в России, так и за рубежом.

По моему мнению, одним из наиболее эффективных способов защиты (дешевым и надежным) является использование различных сервисов защиты от DDOS и CDN. Среди самых популярных можно выделить CloudFlare и DDOS Guard из отечественных компаний (кстати, мы использовали последний в этом году неоднократно). Многие, наверняка, сталкивались с капчей перед загрузкой сайта, где просят подтвердить, что вы не робот. Это и есть то, о чем я говорю. Суть таких сервисов заключается в том, что весь трафик проходит через них, скрывая реальный IP сервера от злоумышленников. Таким образом, эти сервисы фильтруют весь трафик, облегчая нам эту задачу. Кроме того, они также предоставляют услуги CDN - распределенной сети серверов по всему миру, которая обеспечивает быструю загрузку контента для клиентов из отдаленных регионов. Однако, недостатком является то, что реальный IP сервера остается скрытым, что может быть проблемой. В случае компрометации IP адреса, злоумышленник сможет обойти все CDN и сервисы защиты, нападая прямо на сервер.
В заключение, стоит отметить, что сочетание различных методов защиты от подобных атак будет полезным. Однако в каждом конкретном случае выбор метода будет зависеть от множества факторов.
MITM Атаки 🤝
Ман-в-середине (MITM) - это сокращение от английского выражения Man in the middle, что в переводе означает "человек посередине". Суть такой атаки заключается в том, что злоумышленник встраивается между сервером и клиентом, перехватывая и даже возможно изменяя весь трафик, проходящий между ними.

В прошлом, до появления HTTPS и SSL, распространенной практикой было создание открытой Wi-Fi сети в кафе с целью перехвата трафика всех пользователей, подключающихся к ней. Это позволяло злоумышленникам краден пароли и другую конфиденциальную информацию. Хотя эти времена давно ушли, в основном из-за широкого использования HTTPS на веб-ресурсах, что делает прослушивание трафика сложным (хотя не невозможным). Я все же рекомендую избегать подключения к открытым Wi-Fi сетям без крайней необходимости.
Во-первых, помимо атаки типа man-in-the-middle в чужой сети можно совершить множество других вредоносных действий. Например, вспомним инцидент с багом 1970 года в IOS и возможность его эксплуатации через собственный NTP сервер. Во-вторых, в Российской Федерации все поставщики такого доступа обязаны как-то идентифицировать пользователей. Например, по номеру телефона или через государственные сервисы, или иным способом. И хотя с точки зрения закона понятно, зачем это необходимо, факт того, что помимо спецслужб информация о ваших посещенных сайтах, устройствах и т.д. может оказаться в руках владельца Wi-Fi сети, а затем и третьих лиц, вызывает серьезные опасения.
Кстати, для проведения mitm атаки не обязательно использовать открытую Wi-Fi точку. Достаточно наличия посредника между пользователем и конечным сервером. Например, это может быть VPN или прокси-сервер, которые сейчас очень популярны. Поэтому использование сомнительных и бесплатных VPN сервисов не самая лучшая идея. Даже провайдер, предоставляющий доступ в интернет, может выступать в роли посредника.
Интересный случай из моего опыта: до внедрения протокола https на сайте, многие пользователи жаловались на рекламные баннеры. Хотя мы уверены, что никаких рекламных материалов не размещали. В итоге выяснилось, что недобросовестные операторы связи добавляли рекламные баннеры в код сайта. Это отличный пример атаки типа mitm, который демонстрирует ее опасность. Кроме того, личные данные пользователей могут быть украдены, а злоумышленник может внедрить в ответ сервера вредоносный код, такой как JS майнер или перенаправление на фишинговый сайт.
HTTPS + TSL - защита от MITM-атак 💪
Один из наиболее простых и эффективных способов защиты от атак типа MITM для веб-ресурса - использование HTTPS и TSL. В данной статье не будут подробно рассматриваться принципы работы HTTPS и TSL, но их суть можно кратко объяснить. При использовании протокола HTTP все передаваемые данные (логины, пароли, cookie, данные карт) не защищены и могут быть прочитаны злоумышленником, который получит доступ к трафику. Однако при использовании HTTPS все данные шифруются и могут быть расшифрованы только клиентом и сервером. Даже если злоумышленник получит доступ к данным, он не сможет их прочитать или изменить.

Однако, существует такое понятие как downgrade атака, которая может помочь обойти защиту протокола https. Об этих атаках мы поговорим позже, а пока вкратце - для защиты можно использовать HSTS или полностью отключить протокол http и закрыть порт 80 на сервере. Оставив только протокол https, это действительно жесткий подход. В идеале, также рекомендуется отключить поддержку старых версий TLS на сервере и оставить только самую последнюю. Однако, не все устройства, которые используются в настоящее время, поддерживают это, поэтому выбор поддерживаемых версий TLS должен быть основан на понимании того, кто и с каких устройств будет подключаться.
Если HTTP не подходит по каким-то причинам или требуется более высокий уровень конфиденциальности, то можно использовать VPN для общения с сервером. Например, банки часто используют VPN для внутренних рабочих сред. Хотя VPN сервер может быть посредником, это не относится к доверенным корпоративным VPN сетям. VPN создан для создания приватного и безопасного туннеля поверх сети, где весь трафик обычно шифруется, что делает его невозможным для прослушивания.
Downgrade Атаки ⬇️
Атака снижения уровня - это также известно как атака с понижением версии протокола. Суть этой атаки заключается в том, что злоумышленник каким-либо образом (в зависимости от протокола и т. д.) заставляет клиента и сервер использовать более старую и уязвимую версию протокола вместо более новой и защищенной. Например, переход с TLS 1.3 на TLS 1.1. Это один из способов обойти HTTPS - просто заставить клиента и сервер использовать менее защищенную версию. Этот метод работает не только с TLS, но и с многими другими протоколами.

Каким образом происходит такая атака? Давайте рассмотрим это на примере HTTPS и TSL, однако это применимо и к другим протоколам. Просто процесс перехода от более новой версии к более старой может немного отличаться. В общем, суть заключается в том, что для обеспечения совместимости с устаревшим программным обеспечением и оборудованием приходится сохранять старые версии протоколов. И к сожалению, злоумышленники часто используют это в своих целях.
Например, на Windows XP возникают трудности с открытием современных веб-сайтов и приложений из-за несовместимости с современными версиями TLS и отсутствия обновленных корневых SSL сертификатов. Если необходимо поддерживать такую устаревшую операционную систему, то придется оставить включенным HTTP и старые версии TLS. Возможно, кажется странным поддерживать Windows XP или даже Windows 7 в 2023 году, но мой знакомый системный администратор работает в компании, где значительная часть компьютеров имеет такой возраст. Хотя большинство из них находятся в локальной сети, это все равно показывает, что не везде обновляют оборудование и программное обеспечение.
Когда речь идет о самой атаке, обычно она происходит следующим образом: в процессе установки безопасного соединения клиент и сервер обмениваются информацией о поддерживаемых протоколах (так называемое TSL-рукопожатие). Злоумышленник передает серверу ложную информацию о том, что клиент поддерживает только TLS 1.1. В ответ сервер, если поддержка этой версии включена, начинает использовать ее. Затем злоумышленник эксплуатирует уязвимости более старой версии протокола.
Для защиты от данного типа атак рекомендуется прекратить использование устаревших протоколов и отключить их. Необходимо отключить поддержку http и устаревших версий TLS на веб-сервере. Также возможно закрыть порт 80 на сервере (этот порт используется для https соединений, в то время как https использует порт 443), если он не используется. Однако следует помнить, что такой подход не подходит, если старые версии все еще необходимы по каким-либо причинам.
HTTPS также обладает дополнительным механизмом защиты от downgrade атак, который называется HSTS. Суть его заключается в том, что сервер отправляет специальный заголовок, и браузеры, которые его понимают, будут автоматически подключаться к серверу по HTTPS. Обычно этому заголовку также присваивается срок действия, например, один год.
Существует также HSTS preload list - это список веб-сайтов, которые заранее добавлены разработчиками браузеров в их исходный код. В него включаются сайты с максимальным сроком действия HSTS и флагом preload. Однако у этого подхода есть свои недостатки, которые в большей степени зависят от внимательности - после включения такого заголовка клиентам, даже посетившим сайт один раз, будет невозможно перейти на HTTP. Если же сайт уже попал в preload list, то, грубо говоря, пути назад не будет. Поэтому важно понимать одну вещь: включать HSTS стоит только в том случае, если он настроен правильно повсюду - на каждом поддомене, сервисе и самом HSTS. В противном случае, если, например, на одном из поддоменов HTTPS не включен или по какой-то причине не планируется, пользователи просто столкнутся с ошибкой соединения.
Позаботьтесь о своем благополучии! А что касается следующей группы уязвимостей, мы обсудим ее в следующем материале.

🔥 Нравится? Подпишись! Вместе мы одержим победу над восстанием роботов! 🔥

🚀 P.S. Для тех, кто хочет не просто изучать программирование, а начать свой путь мастера прямо сейчас, приглашаю на Boosty! Там представлен уникальный обучающий контент по программированию для всех уровней подготовки. Кроме того, вы сможете увидеть, как автор выглядит в реальной жизни. Нажмите здесь и отправляйтесь в путь!🚀
У меня также имеется Telegram-канал, где публикуются более простые и веселые посты. Ссылка на канал доступна ниже.П.С.3 Приглашаю делиться в комментариях своими личными впечатлениями о самых невероятных методах программирования. Рассказы из реальной жизни и уроки из мира IT приветствуются!
Необходимо провести переформулировку данного текста и сделать его уникальным.
Автором данной статьи является Андрей Сорокин, который является со-автором этого блога. Редакцию текста провел Виталий П.
Comments