Credential access что это
Перейти к содержимому

Credential access что это

  • автор:

Credential Access

The adversary is trying to steal account names and passwords.

Credential Access consists of techniques for stealing credentials like account names and passwords. Techniques used to get credentials include keylogging or credential dumping. Using legitimate credentials can give adversaries access to systems, make them harder to detect, and provide the opportunity to create more accounts to help achieve their goals. 1

Once known credentials have been obtained, an attacker can achieve authentication to perform unauthorized actions under the guise of a legitimate user. View the CAPEC-560 post for more details on the attacks available using Known Domain Credentials.

Techniques

Adversary-in-the-Middle (AiTM) 2

Adversaries may attempt to position themselves between two or more networked devices using an adversary-in-the-middle (AiTM) technique to support follow-on behaviors such as Network Sniffing or Transmitted Data Manipulation. By abusing features of common networking protocols that can determine the flow of network traffic (e.g. ARP, DNS, LLMNR, etc.), adversaries may force a device to communicate through an adversary controlled system so they can collect information or perform additional actions.

Specific procedures to conduct an AiTM attack can be seen the Darkcybe — CAPEC 94 post.

Как системы анализа трафика обнаруживают тактики хакеров по MITRE ATT&CK, часть 3

В предыдущих постах (первая и вторая части) мы рассмотрели техники пяти тактик MITRE ATT&CK:

  • первоначальный доступ (initial access);
  • выполнение (execution);
  • закрепление (persistence);
  • повышение привилегий (privilege escalation);
  • предотвращение обнаружения (defense evasion).

Получение учетных данных (credential access)

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

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

1. T1110: brute force

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

Что делает PT Network Attack Discovery (PT NAD): в автоматическом режиме обнаруживает признаки подбора паролей при аутентификации по протоколам LDAP, Kerberos, SMB, SSH, SMTP, POP3, POP3S, IMAP, IMAPS, FTP. Кроме того, выявляет попытки подбора учетных данных к популярным веб-сервисам, таким как phpMyAdmin, Joomla, WordPress, Drupal, Confluence, MySQL, Tomcat. Такие атаки порождают большое количество неуспешных попыток аутентификации, что видно в трафике.

2. T1003: credential dumping

Получение учетных данных (обычно хеша или открытого пароля) из операционных систем или ПО. Эту технику мы рассмотрим подробнее для демонстрации ее выявления в трафике.

Что делает PT NAD: пример обнаружения
PT NAD зафиксировал обращения к реестру контроллера домена с помощью хакерской утилиты secretsdump, основанной на модулях библиотеки Impacket. Основная задача утилиты — получение хешей паролей пользователей. С ее помощью злоумышленники аутентифицируются на контроллере домена через протокол SMB, подключаются к диспетчеру управления службами (Service Control Manager, SCM), далее по протоколу WINREG подключаются к удаленному реестру и копируют необходимые данные в локальный файл. После чего файл скачивают на свой сетевой узел через SMB.

Выявление запроса к ключу реестра LSA, в котором находятся хеши паролей доменных пользователей

В этой же сессии, где PT NAD зафиксировал обращение к реестру контроллера домена, передавались те самые файлы, в которые утилита secretsdump сохранила важную информацию из реестра контроллера домена. По названиям сработавших правил в интерфейсе PT NAD видно, что злоумышленники заполучили хеши паролей доменных пользователей из LSA и локальных — из SAM:

В карточке сессии отражаются файлы, которые злоумышленникам удалось скачать

3. T1212: exploitation for credential access

Техника получения атакующим доступа к учетным данным в результате эксплуатации уязвимостей в ПО.

Что делает PT NAD: видит в трафике эксплуатацию многих уязвимостей. Например, уязвимость MS14-068 может использоваться для подделки билетов Kerberos. Злоумышленник запрашивает билет специального вида (TGT, Ticket Granted Ticket), добавляет себя в привилегированную группу и модифицирует этот билет так, чтобы уязвимый контроллер домена признал его валидным. PT NAD выявляет запросы таких билетов.

4. T1208: kerberoasting

Метод извлечения служебных учетных записей из Active Directory от имени обычного пользователя. Любой пользователь домена может запросить билет Kerberos для доступа к сервису в Active Directory (Ticket Granting Service). TGS зашифрован хешем пароля учетной записи, от которой запущен целевой сервис. Злоумышленник, получив таким образом TGS, теперь может расшифровать его, подбирая пароль и не боясь блокировки, поскольку делает это офлайн. В случае успеха он получает пароль от связанной с сервисом учетной записи, которая зачастую бывает привилегированной.

Что делает PT NAD: фиксирует запросы на перечисление сервисов в Active Directory, которые могут стать целями для атаки. Данный этап необходим злоумышленникам, чтобы выбрать сервис для атаки, и предшествует запросу TGS-билета и подбору офлайн. Также PT NAD автоматически выявляет запросы TGS-билетов, зашифрованных алгоритмом RC4, — это один из признаков проведения атаки Kerberoasting.

Разведка (discovery)

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

1. T1087: account discovery

Попытка получить список учетных записей локальной системы или домена.

Что делает PT NAD: пример обнаружения
Атакующие попытались получить информацию от контроллера домена о доменных учетных записях по LDAP — облегченному протоколу доступа к каталогам. PT NAD обнаружил LDAP-запрос. Такой способ получения доменных учетных записей может относиться как к технике T1087 (account discovery), так и к T1069 (permission groups discovery).

Попытка разведки с целью получить информацию о доменных аккаунтах через протокол LDAP

2. T1482: domain trust discovery

Поиск информации о доверительных отношениях домена. Такие отношения злоумышленники используют для горизонтального перемещения в мультидоменных инфраструктурах.

Что делает PT NAD: список доверительных отношений между доменами можно получить с помощью RPC- и LDAP-запросов. PT NAD автоматически детектирует попытки перечисления отношений доверия между доменами с помощью протокола LDAP и RPC-вызова EnumTrustDom.

3. T1046: network service scanning

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

Что делает PT NAD: обнаруживает признаки работы инструментов сканирования портов и уязвимостей (например, утилиты Nmap), а также нестандартные запросы к известным портам.

4. T1135: network share discovery

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

Что делает PT NAD: выявляет запрос списка общих сетевых дисков и папок на удаленной машине.

5. T1201: password policy discovery

Техника, с помощью которой злоумышленник ищет информацию о парольной политике в инфраструктуре компании. Например, политикой может быть установлена минимальная длина пароля и количество разрешенных неудачных попыток аутентификации. Знание количества символов поможет атакующим составить список подходящих распространенных паролей, запустить подбор пароля по словарю или с помощью полного перебора (T1110: brute force).

Что делает PT NAD: автоматически обнаруживает запросы о парольной политике по протоколу SAMR.

6. T1069: permission groups discovery

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

Что делает PT NAD: автоматически выявляет попытки получения информации о доменных группах по протоколам LDAP и SAMR. Пример выявления этой техники представлен на скриншоте выше.

7. T1018: remote system discovery

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

Что делает PT NAD: видит запросы списков контроллеров домена, рабочих станций и серверов, SPN (Service Principle Name).

8. T1063: security software discovery

Техника, при которой злоумышленники пытаются получить информацию об установленных системах защиты, их конфигурации и сенсорах. Один из способов получения такого списка — через DCE/RPC-запросы.

Что делает PT NAD: видит DCE/RPC-запросы. Пользователь системы может найти все сессии с этими запросами и обнаружить попытки удаленного получения информации о средствах защиты.

9. T1033: system owner/user discovery

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

Что делает PT NAD: злоумышленники могут получить список активных сессий пользователей на удаленном узле с помощью запросов по протоколу SRVSVC. PT NAD автоматически обнаруживает такие запросы.

10. T1007: system service discovery

Поиск злоумышленниками информации о зарегистрированных службах.

Что делает PT NAD: такую информацию атакующие могут получить с помощью сетевых запросов DCE/RPC. PT NAD в автоматическом режиме выявляет обращения к Service Control Manager (SCM) по протоколу DCE/RPC, в том числе команды по получению списка служб на удаленном сетевом узле и статус их активности.

Вместо заключения

Напоминаем, что полный маппинг PT NAD на матрицу MITRE ATT&CK опубликован на Хабре.

В следующих материалах мы расскажем про остальные тактики и техники хакеров и о том, как их помогает выявлять NTA-система PT Network Attack Discovery. Оставайтесь с нами!

  • Антон Кутепов, специалист экспертного центра безопасности (PT Expert Security Center) Positive Technologies
  • Наталия Казанькова, продуктовый маркетолог Positive Technologies

В период дистанционной работы мы хотим оставаться рядом с коллегами, партнерами, заказчиками и просто друзьями. Поэтому мы стираем расстояния и запускаем наше онлайн-ТВ на YouTube. Канал «ИБшник на удаленке» выходит в эфир в 18:00 каждый понедельник, среду и пятницу.

Специалисты Positive Technologies и приглашенные эксперты обсуждают вопросы ИБ, будущее технологий и образование, здоровый образ жизни и многое другое. Подписывайтесь на наш канал на YouTube, чтобы не пропустить новые выпуски и посмотреть записи прошедших эфиров (1, 2, 3, 4, 5).

Fetch: запросы на другие сайты

Если мы сделаем запрос fetch на другой веб-сайт, он, вероятно, завершится неудачей.

Например, давайте попробуем запросить http://example.com :

Вызов fetch не удался, как и ожидалось.

Ключевым понятием здесь является источник (origin) – комбинация домен/порт/протокол.

Запросы на другой источник – отправленные на другой домен (или даже поддомен), или протокол, или порт – требуют специальных заголовков от удалённой стороны.

Эта политика называется «CORS»: Cross-Origin Resource Sharing («совместное использование ресурсов между разными источниками»).

Зачем нужен CORS? Экскурс в историю

CORS существует для защиты интернета от злых хакеров.

Серьёзно. Давайте сделаем краткое историческое отступление.

Многие годы скрипт с одного сайта не мог получить доступ к содержимому другого сайта.

Это простое, но могучее правило было основой интернет-безопасности. Например, хакерский скрипт с сайта hacker.com не мог получить доступ к почтовому ящику пользователя на сайте gmail.com . И люди чувствовали себя спокойно.

В то время в JavaScript не было методов для сетевых запросов. Это был «игрушечный» язык для украшения веб-страниц.

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

Использование форм

Одним из способов общения с другим сервером была отправка туда формы <form> . Люди отправляли её в <iframe> , чтобы оставаться на текущей странице, вот так:

Таким способом было возможно сделать GET/POST запрос к другому сайту даже без сетевых методов, так как формы можно отправлять куда угодно. Но так как запрещено получать доступ к содержимому <iframe> с другого сайта, прочитать ответ было невозможно.

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

Использование скриптов

Ещё один трюк заключался в использовании тега script . У него может быть любой src , с любым доменом, например <script src="http://another.com/…"> . Это даёт возможность загрузить и выполнить скрипт откуда угодно.

Если сайт, например another.com , хотел предоставить данные для такого доступа, он предоставлял так называемый «протокол JSONP» (JSON with Padding)".

Вот как он работал.

Например, нам на нашем сайте нужны данные с сайта http://another.com , скажем, погода:

Сначала, заранее, объявляем глобальную функцию для обработки данных, например gotWeather .

Затем создаём тег <script> с src="http://another.com/weather.json?callback=gotWeather" , при этом имя нашей функции – в URL-параметре callback .

Удалённый сервер с another.com должен в ответ сгенерировать скрипт, который вызывает gotWeather(. ) с данными, которые хочет передать.

Когда этот скрипт загрузится и выполнится, наша функция gotWeather получает данные.

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

Спустя некоторое время в браузерном JavaScript появились методы для сетевых запросов.

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

Простые запросы

Есть два вида запросов на другой источник:

  1. Простые.
  2. Все остальные.

Простые запросы будут попроще, поэтому давайте начнём с них.

Простой запрос – это запрос, удовлетворяющий следующим условиям:

    : GET, POST или HEAD – разрешены только:

    • Accept ,
    • Accept-Language ,
    • Content-Language ,
    • Content-Type со значением application/x-www-form-urlencoded , multipart/form-data или text/plain .

Любой другой запрос считается «непростым». Например, запрос с методом PUT или с HTTP-заголовком API-Key не соответствует условиям.

Принципиальное отличие между ними состоит в том, что «простой запрос» может быть сделан через <form> или <script> , без каких-то специальных методов.

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

В противоположность этому, запросы с нестандартными заголовками или, например, методом DELETE нельзя создать таким способом. Долгое время JavaScript не мог делать такие запросы. Поэтому старый сервер может предположить, что такие запросы поступают от привилегированного источника, «просто потому, что веб-страница неспособна их посылать».

Когда мы пытаемся сделать непростой запрос, браузер посылает специальный предварительный запрос («предзапрос», по англ. «preflight»), который спрашивает у сервера – согласен ли он принять такой непростой запрос или нет?

И, если сервер явно не даёт согласие в заголовках, непростой запрос не посылается.

Далее мы разберём конкретные детали.

CORS для простых запросов

При запросе на другой источник браузер всегда ставит «от себя» заголовок Origin .

Например, если мы запрашиваем https://anywhere.com/request со страницы https://javascript.info/page , заголовки будут такими:

Как вы можете видеть, заголовок Origin содержит именно источник (домен/протокол/порт), без пути.

Сервер может проверить Origin и, если он согласен принять такой запрос, добавить особый заголовок Access-Control-Allow-Origin к ответу. Этот заголовок должен содержать разрешённый источник (в нашем случае https://javascript.info ) или звёздочку * . Тогда ответ успешен, в противном случае возникает ошибка.

Здесь браузер играет роль доверенного посредника:

  1. Он гарантирует, что к запросу на другой источник добавляется правильный заголовок Origin .
  2. Он проверяет наличие разрешающего заголовка Access-Control-Allow-Origin в ответе и, если всё хорошо, то JavaScript получает доступ к ответу сервера, в противном случае – доступ запрещается с ошибкой.

Вот пример ответа сервера, который разрешает доступ:

Заголовки ответа

По умолчанию при запросе к другому источнику JavaScript может получить доступ только к так называемым «простым» заголовкам ответа:

  • Cache-Control
  • Content-Language
  • Content-Length
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

При доступе к любому другому заголовку ответа будет ошибка.

Чтобы разрешить JavaScript доступ к любому другому заголовку ответа, сервер должен указать заголовок Access-Control-Expose-Headers . Он содержит список, через запятую, заголовков, которые не являются простыми, но доступ к которым разрешён.

При таком заголовке Access-Control-Expose-Headers , скрипту разрешено получить заголовки Content-Encoding и API-Key ответа.

«Непростые» запросы

Мы можем использовать любой HTTP-метод: не только GET/POST , но и PATCH , DELETE и другие.

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

Поэтому, чтобы избежать недопониманий, браузер не делает «непростые» запросы (которые нельзя было сделать в прошлом) сразу. Перед этим он посылает предварительный запрос, спрашивая разрешения.

Предварительный запрос использует метод OPTIONS , у него нет тела, но есть три заголовка:

  • Origin содержит именно источник (домен/протокол/порт), без пути.
  • Access-Control-Request-Method содержит HTTP-метод «непростого» запроса.
  • Access-Control-Request-Headers предоставляет разделённый запятыми список его «непростых» HTTP-заголовков.

Если сервер согласен принимать такие запросы, то он должен ответить без тела, со статусом 200 и с заголовками:

  • Access-Control-Allow-Origin должен содержать разрешённый источник.
  • Access-Control-Allow-Methods должен содержать разрешённые методы.
  • Access-Control-Allow-Headers должен содержать список разрешённых заголовков.
  • Кроме того, заголовок Access-Control-Max-Age может указывать количество секунд, на которое нужно кешировать разрешения. Так что браузеру не придётся посылать предзапрос для последующих запросов, удовлетворяющих данным разрешениям.

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

Этот запрос не является простым по трём причинам (достаточно одной):

  • Метод PATCH
  • Content-Type не один из: application/x-www-form-urlencoded , multipart/form-data , text/plain .
  • Содержит «непростой» заголовок API-Key .

Шаг 1 (предзапрос)

Перед тем, как послать такой запрос, браузер самостоятельно генерирует и посылает предзапрос, который выглядит следующим образом:

  • Метод: OPTIONS .
  • Путь – точно такой же, как в основном запросе: /service.json .
  • Особые заголовки:
    • Origin – источник.
    • Access-Control-Request-Method – запрашиваемый метод.
    • Access-Control-Request-Headers – разделённый запятыми список «непростых» заголовков запроса.

    Шаг 2 (ответ сервера на предзапрос)

    Сервер должен ответить со статусом 200 и заголовками:

    • Access-Control-Allow-Methods: PATCH
    • Access-Control-Allow-Headers: Content-Type,API-Key .

    Это разрешит будущую коммуникацию, в противном случае возникает ошибка.

    Если сервер ожидает в будущем другие методы и заголовки, то он может в ответе перечислить их все сразу, разрешить заранее, например:

    Теперь, когда браузер видит, что PATCH есть в Access-Control-Allow-Methods , а Content-Type,API-Key – в списке Access-Control-Allow-Headers , он посылает наш основной запрос.

    Кроме того, ответ на предзапрос кешируется на время, указанное в заголовке Access-Control-Max-Age (86400 секунд, один день), так что последующие запросы не вызовут предзапрос. Они будут отосланы сразу при условии, что соответствуют закешированным разрешениям.

    Шаг 3 (основной запрос)

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

    Основной запрос имеет заголовок Origin (потому что он идёт на другой источник):

    Шаг 4 (основной ответ)

    Сервер не должен забывать о добавлении Access-Control-Allow-Origin к ответу на основной запрос. Успешный предзапрос не освобождает от этого:

    После этого JavaScript может прочитать ответ сервера.

    Предзапрос осуществляется «за кулисами», невидимо для JavaScript.

    JavaScript получает только ответ на основной запрос или ошибку, если со стороны сервера нет разрешения.

    Авторизационные данные

    Запрос на другой источник по умолчанию не содержит авторизационных данных (credentials), под которыми здесь понимаются куки и заголовки HTTP-аутентификации.

    Это нетипично для HTTP-запросов. Обычно запрос к http://site.com сопровождается всеми куки с этого домена. Но запросы на другой источник, сделанные методами JavaScript – исключение.

    Например, fetch(‘http://another.com’) не посылает никаких куки, даже тех (!), которые принадлежат домену another.com .

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

    Действительно ли сервер настолько доверяет скрипту? Тогда он должен явно разрешить такие запросы при помощи дополнительного заголовка.

    Чтобы включить отправку авторизационных данных в fetch , нам нужно добавить опцию credentials: "include" , вот так:

    Теперь fetch пошлёт куки с домена another.com вместе с нашим запросом на этот сайт.

    Если сервер согласен принять запрос с авторизационными данными, он должен добавить заголовок Access-Control-Allow-Credentials: true к ответу, в дополнение к Access-Control-Allow-Origin .

    Пожалуйста, обратите внимание: в Access-Control-Allow-Origin запрещено использовать звёздочку * для запросов с авторизационными данными. Там должен быть именно источник, как показано выше. Это дополнительная мера безопасности, чтобы гарантировать, что сервер действительно знает, кому он доверяет делать такие запросы.

    Итого

    С точки зрения браузера запросы к другому источнику бывают двух видов: «простые» и все остальные.

    Простые запросы должны удовлетворять следующим условиям:

    • Метод: GET, POST или HEAD.
    • Заголовки – мы можем установить только:
      • Accept
      • Accept-Language
      • Content-Language
      • Content-Type со значением application/x-www-form-urlencoded , multipart/form-data или text/plain .

      Основное их отличие заключается в том, что простые запросы с давних времён выполнялись с использованием тегов <form> или <script> , в то время как непростые долгое время были невозможны для браузеров.

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

      Для простых запросов:

      • → Браузер посылает заголовок Origin с источником.
      • ← Для запросов без авторизационных данных (не отправляются по умолчанию) сервер должен установить:
        • Access-Control-Allow-Origin в * или то же значение, что и Origin
        • Access-Control-Allow-Origin в то же значение, что и Origin
        • Access-Control-Allow-Credentials в true

        Дополнительно, чтобы разрешить JavaScript доступ к любым заголовкам ответа, кроме Cache-Control , Content-Language , Content-Type , Expires , Last-Modified или Pragma , сервер должен перечислить разрешённые в заголовке Access-Control-Expose-Headers .

        Для непростых запросов перед основным запросом отправляется предзапрос:

        • → Браузер посылает запрос OPTIONS на тот же адрес с заголовками:
          • Access-Control-Request-Method – содержит запрашиваемый метод,
          • Access-Control-Request-Headers – перечисляет непростые запрашиваемые заголовки.
          • Access-Control-Allow-Methods со списком разрешённых методов,
          • Access-Control-Allow-Headers со списком разрешённых заголовков,
          • Access-Control-Max-Age с количеством секунд для кеширования разрешений

          Задачи

          Почему нам нужен Origin?

          Как вы, вероятно, знаете, существует HTTP-заголовок Referer , который обычно содержит адрес страницы, инициировавшей сетевой запрос.

          Например, при запросе (fetch) http://google.com с http://javascript.info/some/url заголовки выглядят так:

          Как вы можете видеть, присутствуют и Referer , и Origin .

          1. Почему нужен Origin , если Referer содержит даже больше информации?
          2. Возможно ли отсутствие Referer или Origin , или это неправильно?

          Нам нужен Origin , потому что иногда Referer отсутствует. Например, когда мы запрашиваем через fetch HTTP-страницу с HTTPS (менее безопасный доступ с более безопасного), то Referer нет.

          Content Security Policy (политика безопасности содержимого) может запретить отправление Referer .

          Как мы увидим позже, у fetch есть опции, которые предотвращают отправку Referer и даже позволяют изменять его (в пределах того же сайта).

          Согласно спецификации, Referer является необязательным HTTP-заголовком.

          Именно потому что Referer ненадёжен, был изобретён Origin . Браузер гарантирует наличие правильного Origin при запросах на другой источник.

          Credential Access — Breaking down the MITRE ATT&CK framework

          This article discusses the 15 credential access techniques as outlined in the MITRE ATT&CK framework and provides examples of how attackers have used these techniques as well as preventative measures that can be put in place.

          Guest Expert

          Guest Expert

          GitGuardian hires external cybersecurity experts to share their unique experience and knowledge in security on the GitGuardian blog.

          More posts by Guest Expert.

          Guest Expert

          Credential Access - Breaking down the MITRE ATT&CK framework

          Table of contents
          Shimon Brathwaite

          Continuing with our series on initial access techniques, this blog post is going to be focusing on credential access. When we talk about credentials this means things like usernames, passwords, PINs, and any other piece of authentication material you would use to login to an account. When attackers use credential access as a means to get access to the company, they use different techniques such as keylogging to capture the credentials and then they can access the network via legitimate user accounts. It’s been proven to be a very effective and popular technique, according to Verizon over 80% of breaches caused by hacking involve brute force or the use of loss or stolen passwords. In addition to being extremely effective, this type of activity is much harder to find than other types of initial access techniques because it will look like a legitimate use of a user account. Detecting this activity will be very difficult so the focus needs to be on preventing the credentials from being taken. Here we’re going to go over some of the main technique’s hackers use to gain access to user credentials:

          Brute Force

          Defend brute force attack

          Defend brute force attack

          This is the simplest type of attack for getting user credentials. In a brute force attack, a hacker tries to guess a user’s password. This can be done directly on the target service or offline against previously acquired credential data such as a password hash. Since it involves randomly guessing at a password it’s not a very efficient attack and it can take a very long time. The best way to prevent brute force attacks is to use strong passwords that are at least 12-16 characters in length and use a variety of characters. This ensures that the password will be very difficult to guess even with specialized software or using a list of commonly used passwords. You should also configure account lockouts if someone enters an incorrect password more than 3 times and lastly proactively reset account passwords if they are leaked in a data breach. An example of a threat group that commonly used brute force attacks is a suspected Iranian threat group called OilRig that would carry out supply chain attacks.

          Credentials from password stores

          Password Stores

          Password stores

          Another technique for obtaining user passwords is for a hacker to check the usual locations where a password is stored on your computer. Most operating systems or applications save passwords in a particular location, so if a hacker gets access to the computer they can go to that location and get the stored passwords. To prevent this type of attack you want to focus on preventing the hacker from getting access to the machine in the first place by having good endpoint security. Additionally, you can change the passwords for a user’s login keychain (where the password is stored) so that it is different from the user’s login password. This way even if someone gets access to the machine, they won’t be able to access all of the stored passwords on the machine. An example of this technique being weaponized was a piece of malware called stealth falcon, which would gather passwords from multiple locations on the computer including Windows Credential Vault and Outlook.

          Exploitation for Credential Access

          Hackers can also gain access to user credentials by exploiting a software vulnerability. This usually means a hacker takes advantage of some programming error in a program or service to get remote code execution and extract the credentials that they need. The main defense for this is to ensure that all of your software is kept up to date with the latest version to limit the amount of software vulnerabilities available for exploitation. You may also want to develop a threat intelligence program so that you can be aware of new vulnerabilities and threats as they get discovered. Your last line of defense would be to invest in some endpoint exploit protection and isolate your applications. This way an attacker will be limited in their ability to move laterally if they get access to a usable password.

          Forced Authentication

          Another way hackers get credential material is to invoke or force a user to automatically provide authentication through a mechanism that can be intercepted. For example, if your organization uses SMB for single sign-on an attacker can try to intercept the authentication process and retrieve passwords or password hashes that they can use to login to other network resources. Some common way a hacker will set this up is through the use of a phishing attachment containing malware. The common defense for this type of attack is to filter network traffic, you should block traffic such as SMB and WebDAV from exiting your enterprise network by blocking the associated TCP ports. This way it will be harder for someone to intercept the traffic. A prime example of this is the malware dragonfly 2.0, which gathers hashed user credentials over SMB using spear-phishing attachments with external resource links and modifying.

          Forge Web Credentials

          Rather than trying to get legitimate login credentials, a hacker may look to forge web credentials such as session cookies or SAML tokens in order to authenticate and access protected resources. This is only possible if the credential data your application generates has a predictable pattern or is persistent across multiple sessions. Therefore, a good defense is to make sure that your software is configured to delete persistent credentials. Also, you can configure an active directory FS server to restrict permissions and access to only privileged workstations so that even if the credentials are forged it won’t work from the attacker’s computer.

          Input Capture

          Another option for getting user credentials is to use some type of input capture to record a user’s credentials when they are inputted. This is usually done through a keylogger, which is capable of recording keystrokes. However, it can be done through GUI input capture, web portal capture and capturing API calls that contain user credentials. The best mitigation is endpoint protection that can detect and quarantine potential malicious programs that may be recording input, however, this technique is difficult to detect because it usually takes advantage of system failures.

          Man in the Middle (MITM)

          In this type of attack, the attacker positions them between two or more networked devices and attempts to intercept traffic in order to gain credential information. The best defenses for this type of attack are to disable or remove legacy network protocols, encrypt sensitive information, and filter network traffic to prevent people from outside the environment from eavesdropping on conversations. A threat actor that commonly uses this technique is Kimsuky, a North Korean based group that typically focuses on think tanks and DPRK/nuclear-related targets.

          Modify Authentication Process

          Attackers also have the option of modifying the authentication mechanism of your organization directly to access user credentials or enable access to accounts of their choosing. This way they can access services or systems without going through valid accounts. The best defense against this is to restrict file and directory permissions to prevent people from being able to alter the authentication process. Additionally, you can use privileged account management, audit your local account permissions to look for any situation where an attacker could use one of these accounts to modify the authentication process.

          Network Sniffing

          This is when someone sits on the computer network and captures traffic while inspecting the data packets for any information of interest. Usually, this is done using a network interface that has been set to promiscuous mode, which allows it to passively access all data sent over the network. In this situation, they would be looking for any usernames or passwords being sent in cleartext. The best way to defend against this type of attack is to use encryption for sensitive information to ensure that it will be unreadable to anyone listening on the network. One of the most famous examples of this attack is the Emotet malware, which has been observed to hook network APIs to monitor network traffic.

          OS Credential Dumping

          This is the process of getting account login and password information from the operating system and software, usually in the form of a hash or cleartext password. Make sure your active directory permissions are secure to limit the number of cached plaintext credentials and consider disabling or restricting NTLM and Wdigest authentication. One threat actor that has been known to employ this technique to dump password hashes is leviathan.

          Steal Application Access Token

          Attackers can steal user application access tokens and use that to get credentials that will give access to systems or services. In order for this attack to work, it typically requires the user to grant access and this makes phishing one of the main attack vectors for delivering this attack. As a result, good mitigation for this is to train users not to authorize third-party applications that they don’t recognize. They should be taught to pay particular attention to the URL to be wary of URL redirects. Also, administrators can block end-user consent to Oauth applications and force administrative consent for all requests. You can also block end-user registration of applications by your users and this prevents people from being tricked altogether. You can find a step-by-step guide here.

          Steal or Forge Kerberos Tickets

          Steal or Forge Kerberos Tickets

          Steal or Forge Kerberos Tickets

          Here the attacker will either steal or create a fake Kerberos ticket and pass that to the authentication service in order to get access to network resources in what’s called a pass the ticket attack. To mitigate this, you should enable Kerberos encryption and rotate the KRBTGT password at least every 180 days or following a suspected data breach.

          Steal Web Session Cookies

          This is where an attacker steals a web application or service session cookie and uses them to gain access without the need for user credentials. This problem comes from the fact that some services use persistent cookies, which allow them to be reused by an attacker. To defend against this, you should configure your browsers or tasks to regularly delete persistent cookies and train users to identify phishing attempts where they are asked to enter credentials into a site with an incorrect domain. An appropriately named malware that is famous for this is called cookieminer, it’s a mac-based malware that targets information associated with cryptocurrency exchanges.

          Two-Factor Authentication Interception

          2FA or MFA is one of the best protection for user credentials, but it isn’t full proof. In this type of attack, an attacker tries to intercept the authentication mechanism and use it to authenticate as the user. The only way to defend against this is to teach users how to protect their authentication mechanisms such as their phone, smart card, hardware tokens etc. A threat group that has been known to use this technique is a Chinese-based threat group called chimera. They have been known to register alternate phone numbers for compromised users in order to intercept 2FA codes sent via SMS.

          Unsecured Credentials

          In this type of attack, an attacker will search compromised systems for insecurely stored user credentials. For example, if a user stores their passwords in a word file on their desktop, if an attacker compromises that machine they will have access to that password. Good defenses for this type of attack are to encrypt your sensitive information, use secure password managers and audit your environment for files containing passwords or other credentials.

          General Tips for preventing Credential Access

          Password Policy: The first tip that we can use across multiple techniques is having a good password policy. This means that you should mandate that passwords:

          — Be 12-16 characters long
          — Use lowercase, uppercase, numbers and special characters
          — Rotate passwords every 90 days or if they are leaked in a data breach

          2FA: Wherever you can enable 2FA to make sure that even if any of your user credentials are compromised there is another layer protecting their accounts.

          Encryption: Properly encrypting user credentials in transit and at rest can prevent attackers from being able to use them even if they are able to get access to them.

          Use least privilege on user accounts: In order to mitigate the damage caused by compromised user credentials, it’s important that you limit user account privileges. This way even if the account gets accessed by an attacker, they will be very limited in the information they can access and the actions they can perform.

          Conclusion

          Credential access is a set of techniques that attackers use to steal user credentials like account names and passwords. It’s dangerous because when an attacker can get access to a user account, they get access to all of the resources and privileges of that account. Also, it’s hard for the security controls of the organization to detect because it will just look like legitimate activity. The best way to prevent credential access is to have a strong password policy, enable 2FA and MFA, use encryption wherever possible and make sure that all of your accounts have the least amount of privilege and access needed to perform their business function. Another important aspect is that you want to monitor the web so that if any of your company’s passwords or password hashes are leaked you can reset them right away before someone gets a chance to use them against you. GitGuardian has a tool that can monitor GitHub for any accidental commits of company secrets and alert you right away. If you’re interested in this solution you can request a demo here.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *