Тема. Веб-безопасность и защита сети.

Если мы хотим защищаться, нам сначала нужно знать, что защищать. Управление активами часто полагается на сетевое отображение, чтобы определить, какие системы подключены к сети. Сегодня веб-браузеры используются не только для просмотра веб-сайтов, но и
для запуска других приложений, таких как Microsoft 365, Google Документы, интерфейс удаленного доступа SSL и т. д. Для поддержки дополнительных функций и контента на браузеры устанавливаются подключаемые модули. Однако некоторые из этих модулей могут
представлять угрозу для безопасности. Браузеры могут стать целью вредоносных атак и нуждаются в защите.
Для доступа ко многим веб-сайтам и сервисам требуется пройти аутентификацию. В последнее время на смену традиционной аутентификации по
имени пользователя и паролю приходит многофакторная аутентификация. Многофакторная аутентификация подразумевает одновременное использование нескольких механизмов аутентификации пользователя, таких как пароль, смарт-карта и биометрические
данные. К примеру, двухфакторная аутентификация требует от пользователя подтвердить владение определенным объектом, например смарт-картой, и знание определенной информации, например пароля или PIN-кода. Трехфакторная аутентификация сочетает все три
фактора: знание, владение и свойство, которое выражается каким-либо биометрическим компонентом, например отпечатком пальца или сетчаткой глаза.
Методы аутентификации

В последнее время появилось большое количество приложений для многофакторной аутентификации. Например, для доступа к сервису может требоваться как пароль, так и зарегистрированный номер телефона или адрес электронной почты. При попытке
доступа приложение для аутентификации отправляет одноразовый пароль на зарегистрированный номер телефона или почтовый адрес. Для аутентификации пользователь должен ввести имя учетной записи, пароль и одноразовый код.
После прохождения аутентификации
система может присвоить программный токен приложению или устройству, которое было использовано для аутентификации. Программный токен дает пользователю возможность осуществлять действия в системе, не проходя повторную аутентификацию.
Если система токена не обладает достаточным уровнем защиты, сторонние лица могут перехватить его и совершать действия от лица пользователя. Это называется атакой повторного воспроизведения. Для защиты от атак повторного воспроизведения токены должны
иметь ограниченный срок действия либо быть одноразовыми.
Уязвимости и методы защиты
1. Режим приватного просмотра InPrivate. Веб-браузеры сохраняют информацию о посещаемых вами сайтах, о ваших поисковых запросах и другие идентифицируемые данные, включая имена пользователя, пароли и т. д. Данная функция удобна на персональном
компьютере, однако она может представлять опасность, если вы пользуетесь общедоступным компьютером, например в библиотеке, бизнес-центре отеля или в интернет-кафе. Сохраненная браузером информация может попасть в руки третьих лиц и быть использована
для кражи ваших учетных данных, денег или смены паролей в важных учетных записях. В целях безопасности при использовании общедоступного компьютера всегда следует принимать следующие меры.
2. Nmap - Средство отображения сети. Nmap долгое время рассматривался как стандартный сканер портов как для сетевых инженеров, так и для специалистов по безопасности. Мы можем использовать его для обнаружения ресурсов для атаки или защиты. Одним из способов идентифицировать хосты, которые активны в сети, является отправка ping, т.е. эхо-запроса ICMP, на все IP-адреса в сети. Это часто называют проверкой Ping.
Такой подход не очень хорош для обнаружения ресурсов. Вполне вероятно, что системы в сети будут игнорировать входящие запросы, возможно, из-за того, что брандмауэр блокирует их, или из-за брандмауэра на базе хоста. Брандмауэр на базе хоста - это просто
брандмауэр, который реализован в системе, а не в сети. Лучший подход предполагает отправку различных типов пакетов в систему, чтобы попытаться запросить какой-либо ответ, чтобы определить, активна система или нет. Например, Nmap отправит в систему
следующие пакеты, чтобы попытаться вызвать ответ:
- Эхо-запрос ICMP
- Пакет TCP SYN на порт 443
- Пакет подтверждения TCP на порт 80
- Запрос временной метки ICMP
Основываясь на спецификациях TCP, то есть правилах обмена данными, система всегда должна выполнять трехстороннее подтверждение связи, прежде чем начать обмен данными. Nmap, похоже, намеренно нарушает правила с пакетами, указанными выше. Можете ли вы определить,
какой пакет ведет себя не так, как ожидали бы системы?
Отправка пакета TCP ACK на порт 80 не соответствует правилам стандарта TCP. Nmap делает это специально для того, чтобы попытаться заставить целевую систему отправить ответ. Чтобы отправлять
пакеты, которые не соответствуют правилам, Nmap должен запускаться с наивысшим уровнем привилегий, например, root или локального администратора. Благодаря этому большинство сканеров портов будут более точными.
Отключение сетевого отображения
можно выполнить с помощью Nmap с флагом -Pn. Теперь Nmap сочтет, что все IP / системы подключены, и перейдет непосредственно к сканированию портов. Попробуйте это дома прямо сейчас, если хотите. Осторожно, если вы работаете в корпоративной среде,
всегда получайте разрешение перед запуском сканеров, поскольку вы не хотите нарушать какие-либо правила своего рабочего пространства. Чтобы попробовать Nmap сейчас, выполните следующие простые действия:
- Перейдите к загрузке Nmap по адресу https://nmap.org. Убедитесь, что вы загрузили версию, соответствующую вашей операционной системе
- Установите Nmap и запустите инструмент из терминала командной строки
- Найдите свой локальный IP-адрес и подсеть
- Запустите Nmap, чтобы просканировать его и посмотреть, какие типы систем он может обнаружить: nmap -vv IP/маска сети
Мы добавляем флаг two -v, чтобы сообщить Nmap, что мы хотим подробный вывод, что делает сканирование более увлекательным для просмотра во время его завершения.

3. Сканирование портов. Сканирование портов выполняется, чтобы попытаться определить, к каким службам мы можем подключиться. Каждая служба прослушивания предоставляет поверхность атаки, которой потенциально могут воспользоваться злоумышленники.
Поэтому важно узнать, какие порты открыты. Злоумышленники заинтересованы в том, чтобы знать, какие приложения прослушивают сеть. Эти приложения представляют возможности для злоумышленников. Могут существовать уязвимости, позволяющие им успешно атаковать
организацию.
Сканирование портов работает путем отправки пакетов приложению и поиска любых ответов. Чтобы определить, доступна служба или нет, в большинстве случаев злоумышленник должен отправить определенный ввод, который заставит приложение ответить.
Большинство приложений, размещенных в UDP, не будут отвечать, если клиенты не отправят именно те данные, которые необходимы для взаимодействия.
Протокол TCP прост в сканировании, поскольку стандарт TCP предписывает, что системы должны отвечать SYN/ACK при получении SYN. Мы можем отправить SYN-пакет на все 65536 портов и записать все возвращающиеся SYN/Ack и завершить открытие портов на основе
ответа SYN/ACK. Когда ответ не получен, мы можем предположить, что порт закрыт или отфильтрован, например, брандмауэром.
С помощью SYN/ACK на порту 445 мы определили, что порт открыт.
С помощью UDP сложнее определить, включен порт или нет. Для UDP-портов сканер не может полагаться на SYN/ACK. Фактически, сканер почти всегда должен полагаться на то, что служба прослушивания вызовет какой-либо ответ. Поскольку потенциально открыто так много портов, а различные службы отвечают только на данные правильного типа, сканирование всех портов за разумное время отнимает много времени. Рассмотрим следующий диалог, в котором Eve пытается выяснить, открыт ли порт UPD:
Всегда нужно использовать правильный протокол и убедиться, что пакеты достигают места назначения, например, без потери пакетов. В противном случае Eve может не обнаружить, что порт открыт. Из-за этого сканирование UDP может занять очень много времени, если мы хотим просканировать все порты.
Полезные типы и опции сканирования Nmap
В этом разделе мы сосредоточимся на том, как использовать Nmap в полной мере.
- Nmap можно приказать сканировать наиболее распространенные порты с аргументом --top-ports.
- Сканер может попытаться определить версии приложения, прослушивающего порт. Это называется служебным сканированием и может быть включено с флагом -sV.
- Nmap имеет множество встроенных скриптов, предназначенных для таргетинга на конкретную службу и взаимодействия с ней. Скрипты могут выполнять всевозможные действия, например извлекать информацию из службы или пытаться ее использовать. Мы можем включить сканер скриптов с флагом -sC. Это позволяет проводить только безопасные проверки, как таковые, без отказа в обслуживании или попыток эксплуатации.
- Обнаружение операционной системы может быть выполнено с помощью сканера, что позволяет ему попытаться определить, какая операционная система запущена. Он использует множество различных параметров, чтобы попытаться измерить и оценить вероятность того, что это операционная система. Это можно включить с помощью аргумента -O.
- Агрессивный режим Nmap включает сразу несколько флагов. Сканер выполнит определение версии и операционной системы, включит script scanner и просканирует 1000 наиболее распространенных портов. Его можно включить с помощью опции -A.
Сканирование может выполняться с разной скоростью. Системы IDS с меньшей вероятностью обнаружат более низкие скорости, в то время как быстрое сканирование может перегружать систему. Nmap поддерживает следующие параметры:
- T0 - Paranoid. Этот вариант предназначен для злоумышленников, которые не хотят, чтобы их обнаружили. Системы IDS могут сопоставлять несколько запросов в течение определенного промежутка времени. Параноидальный вариант попытается обойти это, отправляя очень мало пакетов в секунду.
- T1 - Скрытный. Быстрее, но предназначен для обхода систем идентификации.
- T2 - Вежливый. Медленное сканирование делает все возможное, чтобы не привести к сбою системы.
- T3 - Нормальный. Это просто значение по умолчанию.
- T4 - Агрессивный. Быстрое сканирование, которое быстро выдает результаты. Большинство систем могут справиться с этим.
- T5 - Безумный. Полная мощность и производительность.
Nmap имеет встроенный GUI ("Графический интерфейс пользователя") Zenmap наряду с другими инструментами. Графический интерфейс может быть полезен для визуализации сетей и просмотра открытых портов на разных хостах. Графический интерфейс выглядит следующим образом:

4. Сетевые атаки. Сервисы могут содержать встроенные ошибки, позволяющие злоумышленникам использовать их. Эти атаки обычно включают использование специальных инструкций операционной системе через уязвимую службу для получения контроля над процессом, управляющим сетевой службой. Один из способов получить общее представление о поверхности атаки, а также наметить уязвимости, которые легко использовать, - это выполнить сканирование всех ресурсов в целевой среде, а затем сделать их скриншот.
Для этого используются такие инструменты, как EyeWitness (https://github.com/FortyNorthSecurity/EyeWitness). Инструмент позволяет нам быстро получить обзор того, какие ресурсы представлены в сети, а затем предоставляет скриншоты каждой службы. Имея скриншоты, мы можем легко просмотреть и быстро оценить, на какие системы нам следует обратить более пристальное внимание. Эксплуатация сервиса означает злоупотребление сервисом способами, для которых это не предназначалось. Часто такая эксплуатационная активность означает, что злоумышленники способны запускать свой собственный код, это называется RCE ("Удаленное выполнение кода").
1. Переполнение буфера
Использование сетевых служб иногда связано со злоупотреблением функциями управления памятью приложения. Управление памятью? Да, приложениям необходимо перемещать данные в памяти компьютера, чтобы приложение работало. Когда языки программирования предоставляют разработчику контроль над памятью, могут возникнуть такие проблемы, как переполнение буфера.
Языки программирования C и C++ позволяют разработчикам в значительной степени контролировать управление памятью. Это идеально подходит для приложений, которые требуют от разработчиков программировать очень близко к аппаратному обеспечению, но при этом подвержены уязвимостям. Языки программирования, такие как Java, JavaScript, C#, Ruby, Python и другие, не позволяют разработчикам легко допускать подобные ошибки, что снижает вероятность переполнения буфера в приложениях, написанных на этих языках. Переполнение буфера происходит, когда необработанные входные данные помещаются в переменные. Эти переменные представлены в операционной системе через структуру памяти, называемую стеком. Затем злоумышленник может перезаписать часть стека, называемую указателем возврата. Примечание: Структура стековой памяти - это просто место, где программа хранит переменные и информацию, необходимую ей для запуска. Стек будет расположен в оперативной памяти компьютера ("Оперативная память с произвольным доступом"). Возвращаемый указатель определяет, где центральный процессор ("Central Processing Unit") должен выполнить код следующим образом. Центральный процессор просто управляет тем, какие инструкции система должна выполнять в любой данный момент. Возвращаемый указатель - это просто адрес в памяти, где должно произойти выполнение. Процессору всегда должно быть указано, где выполнять код, и это то, что позволяет ему делать указатель возврата. Когда злоумышленник может управлять указателем возврата, это означает, что злоумышленник может контролировать, какие инструкции должен выполнять процессор! Для примера рассмотрим следующий пример кода на C (не волнуйтесь, вам не обязательно быть разработчиком на C, но сделайте все возможное, чтобы попытаться понять, что делает это простое приложение):
#include <string.h>
void storeName (char *input) {
char name[12];
strcpy(name, input);
}
int main (int argc, char **argv) {
storeName(argv[1]);
return 0;
}
Во многих языках программирования, включая C, приложение запускается внутри функции, называемой main. Это указано в приведенном выше коде, где написано int main (int argc, char **argv) {. Внутри фигурных скобок { и } программа просто запускает функцию с именем StoreName(argv[1]);. Это просто примет все, что пользователь ввел в программу, и передаст это функции StoreName.
Приложение содержит 11 строк кода, но сосредоточьте свое внимание на строке, которая гласит strcpy(name, input);. Это функция, которая пытается скопировать текст из input в переменную с именем name. Имя может содержать максимум 12 символов, как указано в строке с надписью char name[12];. Есть ли в коде какое-либо место, которое запрещает, чтобы указанное имя было длиннее 12 символов? Переменная name предоставляется пользователем, который использует приложение, и передается непосредственно в функцию StoreName.
В этом приложении нет очистки, что позволяет убедиться, что длина входных данных соответствует ожиданиям приложения. Любой, кто запускает программу, может легко ввести значение, превышающее максимальное значение, которое может содержать переменная name. Переменная name содержит 12 символов, но что происходит, когда процессору приказывают записать более 12 символов? Он просто выполнит то, что ему было сказано, перезаписав столько памяти, сколько ему нужно!
При попытке записи значения, превышающего ожидаемое, центральный процессор все равно попытается записать это значение в память. Это фактически приводит к перезаписи центральным процессором других объектов в памяти, например указателя возврата, позволяющего злоумышленникам управлять центральным процессором. Опять же, если злоумышленник может перезаписать возвращаемый указатель и управлять им, он контролирует, какой код должен выполнять центральный процессор.
Графический пример показывает, как Алиса вводит свое имя в приложение, которое мы использовали в примере выше:

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

Ввод Eve заставил центральный процессор записать гораздо больше данных, чем ожидало приложение, и это привело к перезаписи возвращаемого указателя. Когда центральный процессор пытается выполнить следующую инструкцию, ему теперь предлагается выполнить код в местоположении AAAAAAA...
Если бы Ева взяла под свой контроль этот сервер, вместо того, чтобы писать A's, ей вместо этого пришлось бы предоставить код, понятный центральному процессору, в память. Далее она бы присвоила возвращаемому указателю значение, которое указывает центральному процессору выполнить собственный код центрального процессора Eve.
2. Сканер уязвимостей. Сканер уязвимостей автоматически ищет распространенные уязвимости в программном обеспечении и конфигурациях по всей сети. Он не предназначен для поиска новых классов уязвимостей, а вместо этого использует список предопределенных плагинов (или модулей) для сканирования служб на наличие проблем и уязвимостей. Это не обязательно поиск уязвимостей нулевого дня! Уязвимость нулевого дня - это совершенно новая уязвимость, которая ранее была неизвестна поставщику программного обеспечения и защитникам; для уязвимости нулевого дня в настоящее время не существует известных исправлений для этой проблемы. Сканеры имеют функции отображения сети и сканирования портов, включая способы изучения и поиска уязвимостей в различных приложениях, с которыми они сталкиваются. Сканер уязвимостей часто поддерживает конфигурацию с учетными данными, что позволяет ему входить в системы и оценивать уязвимости, а не находить их с точки зрения, не прошедшей проверку подлинности.
3. Выполнение кода. Когда злоумышленники обнаружили уязвимость, которую они могут использовать, им необходимо решить, какую полезную нагрузку они хотят запустить. Полезная нагрузка - это код, который злоумышленник хочет получить с помощью эксплойта (exploit).
Существует множество различных полезных нагрузок, которые злоумышленник может решить использовать, вот несколько примеров:
- Заставьте жертву зарегистрироваться на сервере C2 ("Command and Control"), принимающем команды от злоумышленников
- Создайте новую учетную запись пользователя с бэкдором в системе, чтобы злоумышленник мог использовать ее позже
- Откройте GUI ("Графический интерфейс пользователя") с жертвой, чтобы злоумышленник мог удаленно управлять им
- Получите терминал командной строки, оболочку, через которую злоумышленник может отправлять команды
Полезной нагрузкой, распространенной злоумышленниками, является bind-shell. Это заставляет жертву прослушивать порт, и когда злоумышленник подключается, он получает оболочку.
Брандмауэры помогают предотвратить подключение злоумышленников к жертвам. Брандмауэр будет эффективно блокировать входящие подключения к жертве до тех пор, пока порт не будет разрешен. Только одно приложение может прослушивать порт, поэтому злоумышленники не смогут прослушивать порты, которые уже используются, если они не отключат эту службу. Чтобы обойти эту защитную меру, злоумышленники вместо этого попытаются заставить жертву подключиться к атакующему, заставляя жертву предоставлять доступ к полезной нагрузке. К сожалению, многие брандмауэры не настроены на отказ в исходящем трафике, что делает эту атаку очень выгодной для злоумышленников.
В этом примере мы видим, как злоумышленник использует обратную оболочку, чтобы заставить жертву подключиться к злоумышленнику.
4. Мониторинг сети. Злоумышленникам в большинстве случаев требуется сеть для удаленного управления целью. Когда злоумышленники способны удаленно управлять целью, это делается через канал командования и контроля, часто называемый C&C или C2. Обнаружение компрометации часто можно выполнить, найдя канал C2. C2 может принимать любую форму, например:
- Использование HTTPS для связи с серверами злоумышленников. Это делает C2 похожим на просмотр сети
- Использование социальных сетей для автоматической публикации и чтения сообщений
- Такие системы, как Google Docs, для добавления и редактирования команд жертвам
![]()
Контекст применения может быть описан следующим сценарием: атака поступает из Интернета, но она пытается использовать уязвимость Linux для службы Windows. Обычно это расценивается как шум и может быть безопасно проигнорировано; за исключением случаев, когда IP-адрес, выполняющий атаку, является IP-адресом вашей собственной сети или провайдера. Контекст, который мы можем применить, может дать ценную информацию для дальнейшего изучения атаки. В конце концов, мы не хотим, чтобы системы, которым мы доверяем, запускали какие-либо атаки!
5. Одноранговый трафик. Большинство сетей настроены по принципу "клиент-сервер". Клиенты обращаются к серверам за информацией, и когда клиентам необходимо взаимодействовать друг с другом, они обычно делают это через сервер.
Однако злоумышленник, скорее всего, захочет использовать одноранговую связь, то есть связь от клиента к клиенту, чтобы извлечь выгоду из таких малозначащих результатов, как повторное использование учетных данных или эксплуатация слабых или уязвимых клиентов.
Например, порт 445, используемый SMB, является хорошим индикатором для обнаружения компрометации. В большинстве сред клиенты не должны общаться друг с другом через SMB, однако во время компрометации, вероятно, злоумышленник попытается использовать SMB для дальнейшей компрометации систем.
6. Идентификатор ИЛИ ("Небезопасная
прямая ссылка на объект "). Уязвимости возникают, когда разработчики не внедрили требования авторизации для доступа к ресурсам.
Даже просто изменив идентификатор, например параметр document Rest, она может получить доступ к документам Алисы. Это происходит, когда веб-приложение не применяет авторизацию между объектами, позволяя злоумышленникам перечислять значения и тестировать доступ к другим точкам данных. Например, у нас может быть следующий псевдокод, не показывающий никаких признаков авторизации:
$id = getInputFromUser();
$doc = getDocument($id);
return $doc;
Приведенный выше код запрашивает ввод от пользователя, и не выполняет проверку или очистку, затем выполняет поиск непосредственно с помощью функции getDocument и возвращает соответствующий документ. Лучшей реализацией была бы проверка привилегий:
$id = getInputFromUser();
$user = findUsername();
$doc = "";
if (hasAccessToDocument($user, $id)) {
$doc = getDocument($id);
} else {
$doc = "Not authorized for this document";
}
return $doc;
Подобные уязвимости легко обнаружить, поскольку вы можете просто изменить простой номер и посмотреть, получите ли вы доступ к чужим данным. Проверка авторизации пользователя сначала предотвращает эту уязвимость.
7. Избегание "магических чисел". Приложение должно избегать использования последовательностей чисел при обращении к данным. В примере документы имели идентификаторы от 1000 до 1002. Иногда эти числа называют "магическими числами", поскольку они непосредственно указывают на ресурс на сервере, например, через базу данных, и все значения могут быть легко перечислены. Например, злоумышленник может проверить все идентификаторы документов от 0 до 10000 и записать любые результаты, которые предоставляют доступ к данным.
Хотя авторизация должна быть реализована надлежащим образом, также полезно использовать GUID ("Глобальный уникальный идентификатор") или UUID ("Универсальный уникальный идентификатор") при обращении к данным. Эти идентификаторы спроектированы так, чтобы быть глобально уникальными, и их невозможно перечислить из-за встроенной энтропии генерации чисел.
Вот как может выглядеть GUID:
3377d5a6-236e-4d68-be9c-e91b22afd216
8. SQL-инъекция. Многие веб-приложения подключены к базе данных. База данных содержит всю информацию, которую веб-приложение желает хранить и использовать. SQL-инъекция - это метод, который позволяет злоумышленникам манипулировать SQL ("языком структурированных запросов
"), используемым разработчиком веб-приложения. Обычно это происходит из-за недостаточной очистки данных. SQL регулярно используется разработчиками для доступа к ресурсам базы данных.
В запросе, который Эвен делает на рисунке выше, мы видим, что она вводит значение: 1000' ИЛИ '1'='1. Это приводит к тому, что результирующий SQL-запрос возвращает все строки таблицы, поскольку база данных оценивает оператор как всегда true. Подумайте об этом: база данных получает запрос, где значение может быть либо 1000, ЛИБО 1 равно 1; она будет возвращать значение каждый раз! Существует множество различных функций SQL и операций, которые мы можем использовать для манипулирования синтаксисом, и этот пример - лишь один из очень многих.
Ниже приведен пример псевдокода, который содержит уязвимость SQL-инъекции.
$username = getUserName();
$pw = getPassword();
$user = mysql_query("SELECT * FROM userTable WHERE username = $username AND password = $pw");
if ($user) {
$loggedIn = True;
} else {
$loggedIn = False;
}
Переменная password настроена так, чтобы содержать символы SQL, в результате чего результирующая строка SQL возвращает строку, даже если пароль нам неизвестен. Результирующий SQL-запрос будет:
$pw = getPassword();
$parameterizedQuery = prepare_query("SELECT * FROM userTable where username = ? and password = ?");
$parameterizedQuery.setString(1, $username)
$parameterizedQuery.setString(2, $password)
$user = parameterizedQuery.execute();
if ($user) {
$loggedIn = True;
} else {
$loggedIn = False;
}
Вот графический пример даже отправки ссылки на Alice, которая содержит XSS-атаку:
Код, стоящий за этим, может быть чем-то простым, как этот пример псевдокода:
echo "Greeting $nickname, nice to meet you!";
- Кража файлов cookie, которые могут использоваться для аутентификации
- Повреждение веб-сайта, представление контента, который веб-сервер не намеревался предоставлять
- Фишинг пользователей, оставляющих учетные данные в поддельных формах входа в систему
- Позвольте веб-серверу возвращать заголовки CSP ("Политика безопасности содержимого"), которые строго определяют, откуда и как выполняется JavaScript
- Безопасно кодируйте выходные данные, которые веб-сервер возвращает пользователям, эффективно превращая символы HTML в закодированные безопасные символы
10. Wi-FI. Открытая сеть Wi-Fi - это сеть без пароля. Связь между точкой доступа и клиентами не шифруется, и каждый должен полагаться на свои собственные источники шифрования для защиты своего трафика. Сети такого типа очень удобны и доступны для пользователей, но требуют компромиссов в области безопасности. Злоумышленник в сетях такого типа может легко увидеть, что делают все остальные, просто прослушивая пакеты. Такие пакеты могут содержать конфиденциальные сведения или просто подробную информацию о том, что пользователи делают в сети.
Многие атаки Wi-Fi основаны на сетевых картах с двумя основными функциями, а именно:
- Режим мониторинга: Позволяет сетевой карте пересылать пакеты, предназначенные для всех MAC-адресов операционной системы, а не только для своего собственного.
- Внедрение пакетов: Сетевая карта поддерживает создание пакетов с MAC-адресом источника, отличным от ее собственного.
Поскольку сигналы Wi-Fi достигают всех, кто находится поблизости, это позволяет злоумышленникам легко использовать антенну для "перехвата" сообщений любого передающего. Перехватывать просто означает прослушивать пакеты, которые может видеть сетевой интерфейс. WI-Fi иногда позволяет пользователям получать доступ к внутренним приложениям, увеличивая потенциал атак. Кроме того, устройства Wi-Fi имеют интерфейсы управления и встроенное ПО, которые могут содержать уязвимости, иногда не всегда исправляемые так своевременно, как другие активы предприятия.
- Включение скрытого SSID не считается оптимальной практикой, поскольку имя сети отображается при каждом подключении клиента. Кроме того, клиентам теперь необходимо запрашивать и передавать информацию о сети, к которой они хотят присоединиться, везде, где они путешествуют. Затем злоумышленник может перехватывать трафик Wi-Fi клиентов и потенциально узнавать больше информации о том, кем являются клиенты и где они ранее подключались к сетям.
- Некоторые точки доступа поддерживают управление доступом на основе MAC-адресов. Злоумышленник может прослушивать и наблюдать за другими системами, которые уже взаимодействуют по сети. Затем запишите их MAC-адреса и измените собственный MAC-адрес злоумышленника на тот, который уже разрешен. Это эффективно обходит требование фильтрации MAC-адресов.
- Защита PSK обычно реализуется с помощью протокола, называемого WPA ("Защищенный доступ Wi-Fi"). Также могут использоваться более старые протоколы аутентификации, например WEP ("Wired Equivalent Privacy"). WPA также не полностью защищен от злоумышленников, но обеспечивает гораздо большую защиту, чем WEP. Чтобы проникнуть в сеть с поддержкой WPA, злоумышленник должен попытаться взломать пароль с помощью программы для взлома паролей. Если злоумышленник может наблюдать (обнюхивать) любого, кто проходит аутентификацию в сети, у него достаточно возможностей для взлома паролей. Такие инструменты, как aircrack-ng ("https://www.aircrack-ng.org/"), поддерживают взлом паролей Wi-Fi.
- Злоумышленники могут легко запускать широковещательные сети, выдавая себя за другие сети. Часто клиенты автоматически подключаются к сетям в зоне действия, если они представляются с соответствующим SSID. Это позволяет злоумышленникам подключать клиентов к сети злоумышленников, позволяя им перехватывать и изменять трафик по желанию злоумышленника.
11. Тестирование на проникновение и социальная инженерия.
Тестирование на проникновение может проводиться во многих областях, например
Тестирование на проникновение без знания, с частичным знанием и с полным знанием. В зависимости от задания организация может принять решение предоставить информацию команде, проводящей тестирование на проникновение. Проникновение без знания, иногда называемое "черным ящиком", подразумевает, что злоумышленнику заранее ничего не известно. Частичное знание, иногда называемое тестом "серого ящика", означает, что злоумышленникам предоставляются некоторые знания, а при тестировании на проникновение с полным знанием, иногда называемом "белым ящиком", у тестировщиков на проникновение есть все, что им нужно, из исходного кода, сетевых диаграмм, журналов и многого другого. Чем больше информации организация может предоставить группе тестирования на проникновение, тем большую ценность она может предоставить.
Сценарий кражи ноутбука. Отличный сценарий тестирования на проникновение заключается в доказательстве последствий кражи или утери ноутбука. Системы имеют привилегии и учетные данные, которые злоумышленники могут использовать для проникновения в целевую организацию. Система может быть защищена паролем, но существует множество методов, которые могут позволить злоумышленникам обойти эту защиту. Например:
Системный жесткий диск может быть зашифрован не полностью, что позволяет злоумышленнику подключить жесткий диск к своей собственной системе для извлечения данных и учетных данных. Эти учетные данные, в свою очередь, могут быть взломаны и повторно использованы на страницах входа во многие организации.
Пользователь, возможно, заблокировал систему, но пользователь все еще входит в систему. У этого пользователя есть приложения и процессы, запущенные в фоновом режиме, даже если он заблокирован. Злоумышленники могут попытаться добавить вредоносную сетевую карту в систему, например, через USB. Эта сетевая карта пытается стать предпочтительным способом доступа системы к Интернету. Если система использует эту сетевую карту, злоумышленники теперь могут видеть сетевой трафик и пытаться найти конфиденциальные данные, даже изменить данные.
Как только злоумышленники получают доступ к системе, они могут начать совершать набеги на нее в поисках информации, которая может быть использована для дальнейшего достижения целей злоумышленников.
Социальная инженерия. Система настолько сильна, насколько силен ее самый слабый участник, и часто это человек. Социальная инженерия предполагает нацеливание атак на пользователей с целью заставить их совершать действия, которые они не намеревались совершать. Этот вид техники очень популярен, и многие из крупнейших взломов в мире были связаны с использованием методов социальной инженерии.
Социальная инженерия часто пытается злоупотребить определенными аспектами, чтобы заставить жертв подчиняться действиям, например:
У большинства людей есть желание быть вежливыми, особенно с незнакомцами
- Профессионалы хотят казаться хорошо информированными и умными
- Если вас хвалят, вы часто будете больше говорить и разглашать больше
- Большинство людей не стали бы лгать ради лжи
- Большинство людей доброжелательно реагируют на людей, которые, по-видимому, беспокоятся о них
Когда кто-то становится жертвой хорошей атаки социальной инженерии, они часто вообще не осознают, что подверглись нападению.
Сценарий социальной инженерии: Быть полезным
Люди обычно хотят быть полезными друг другу. Нам нравится делать приятные вещи! Рассмотрим сценарий, в котором Ева вбегает в приемную большого корпоративного офиса с бумагами, пропитанными кофе. Секретарша в приемной отчетливо видит, что Ева в отчаянии, и недоумевает, что происходит. Ева объясняет, что через 5 минут у нее собеседование при приеме на работу и ей действительно нужно распечатать свои документы для собеседования.
Ева заранее подготовила вредоносную флешку с документами, предназначенными для компрометации компьютеров, к которым она подключена. Она протягивает администратору вредоносную флешку и с улыбкой спрашивает, может ли администратор распечатать документы для нее. Возможно, именно это требуется злоумышленникам для заражения системы во внутренней сети, что позволяет им скомпрометировать (развернуть) больше систем.
Сценарий социальной инженерии: Использование страха
Люди часто боятся потерпеть неудачу или не выполнить приказ. Злоумышленники часто используют страх, чтобы попытаться принудить жертв делать то, что нужно злоумышленникам. Они могут, например, попытаться притвориться директором компании, запрашивающим информацию. Возможно, обновление в социальных сетях показало, что директор в отпуске, и это может быть использовано для инсценировки нападения. Жертва, вероятно, не хочет оспаривать директора, а поскольку директор в отпуске, проверить информацию может быть сложнее.
Сценарий социальной инженерии: Игра на взаимности
Взаимность - это когда вы делаете что-то взамен, например, в ответ на то, что кто-то проявляет к вам доброту.
Если мы представим, что кто-то придерживает для вас дверь, чтобы впустить вас в здание вашего офиса. Из-за этого вы, вероятно, захотите придержать следующую дверь, чтобы человек ответил взаимностью. Эта дверь может находиться за системой контроля доступа, требующей от сотрудников предъявления своих бейджей, но для того, чтобы предложить такую же доброту в ответ, дверь остается открытой. Это называется тайлгейтингом.
Сценарий социальной инженерии: Использование любопытства
Люди любопытны по своей природе. Что бы вы сделали, если бы нашли флешку, лежащую на земле за пределами офисного здания? Подключите ее к сети? Что, если бы на флешке был документ с названием "Информация о зарплате - текущие обновления"?
Злоумышленник может намеренно разбросать множество вредоносных USB-накопителей по месту проживания сотрудников, надеясь, что кто-нибудь подключит их. Документы могут содержать вредоносные макросы или эксплойты или просто обманом заставить пользователей выполнять определенные действия, которые заставляют их компрометировать себя.
Фишинг (Phishing). Фишинг - это метод, обычно применяемый по электронной почте. Злоумышленники будут пытаться принудить сотрудников выдать конфиденциальные данные, такие как их учетные данные, или заставить их установить вредоносные приложения, дающие злоумышленникам контроль над системой.
Фишинг - распространенный метод взлома для злоумышленников, который также могут попытаться использовать тестировщики на проникновение. Важно никогда не недооценивать человеческий фактор в кибербезопасности. Пока в этом участвуют люди, фишинг всегда будет возможным способом для злоумышленников получить доступ к системам. Фишинг не следует использовать для доказательства того, что люди совершают ошибки, но попробуйте доказать последствия этих ошибок. Его также можно использовать для проверки эффективности антиспам-фильтров и осведомленности пользователей.
Выуживание (Vishing). Выуживание информации означает использование телефонных звонков, чтобы попытаться заставить ничего не подозревающих сотрудников выполнять действия за злоумышленников. Если сотрудник считает, что он разговаривает по телефону с кем-то, кого он знает, предпочтительно с кем-то, обладающим полномочиями, сотрудника можно обманом заставить совершить нежелательные действия.
Вот пример, когда Ева звонит Алисе:
Ева: Здравствуйте, это звонит мисс Ева. Генеральный директор Маргарет велела мне позвонить вам лично; она сказала, что вы сможете помочь.
Алиса: Хорошо... Что я могу для вас сделать?
Ева: Маргарет сейчас в пути, но срочно просит сбросить ее пароль, чтобы мы могли продолжить деловую встречу, которая состоится в тот момент, когда она приземлится.
Ева: Мы срочно просим сбросить пароль ее электронной почты, чтобы она могла провести встречу.
Ева: Вы можете продолжить, чтобы сбросить ее пароль на Margaret h 123?
Алиса: Я не уверена...
Ева: Пожалуйста, Маргарет просила вас лично выполнить эту просьбу. Это должно быть сделано сейчас, я не хочу думать о последствиях, если нет...
Алиса: Ок. Пароль сброшен