КАК С УКРА­ДЕН­НОГО НОУТБУКА ПОПАСТЬ В СЕТЬ КОМПАНИИ

Что можно сделать с украденным ноутбуком? Можете ли вы получить доступ к нашей внутренней сети? Именно на этот вопрос недавно хотел получить ответ один из клиентов. Предупреждение о спойлерах: Да, да, и еще раз да, вы можете. В этой статье мы расскажем вам о том, как мы взяли «украденный» корпоративный ноутбук и связали несколько эксплойтов вместе, чтобы проникнуть в корпоративную сеть клиента.

Вводные данные

Мы получили ноутбук Lenovo, предварительно настроенный со стандартным стеком безопасности для данной организации. Ранее мы не получили никакой информации об этом ноутбуке, ни учетных данных для тестирования, ни деталей конфигурации, ничего, это был 100% тест «черного ящика».

Решение

Как только ноутбук был доставлен, мы открыли транспортировочную коробку и приступили к работе. После того, как мы провели разведку ноутбука (настройки BIOS, загрузчик операционной системы, детали аппаратного обеспечения и т. д. ) мы отметили, что соблюдается множество лучших практик, которые сводят на нет многие распространенные атаки. Например:
pcileech/DMA атаки были заблокированы, поскольку была включена настройка VT-d BIOS Intel

Все настройки BIOS были заблокированы паролем

Порядок загрузки BIOS был заблокирован, чтобы предотвратить загрузку с USB или CD

Secureboot был полностью включен и предотвращал установление любых неофициальных операционных систем

Обход аутентификации Kon-boot не сработал из-за полного шифрования диска
LAN turtle и другие Responder атаки через USB ethernet адаптеры не дали никакого результата

SSD был полностью зашифрован (FDE) с помощью BitLocker от Microsoft и защищен с помощью модуля Trusted Platform Module (TPM)

SSD был полностью зашифрован (FDE) с помощью BitLocker от Microsoft и защищен с помощью модуля Trusted Platform Module (TPM)

Поскольку ничто другое не работало, последний пункт, TPM, защищенный BitLocker, должен был стать нашим путем, чтобы попасть внутрь ноутбука. При проведении разведки мы увидели, что ноутбук загружается прямо на экран входа в Windows 10. В сочетании с шифрованием BitLocker это означает, что ключ для расшифровки диска извлекается только из TPM, не требуется вводить PIN-код или пароль пользователя, что является стандартным для BitLocker. Microsoft recommends рекомендует повысить уровень безопасности, если:

Злоумышленник с навыками и длительным физическим доступом к устройству

Целенаправленная атака с большим запасом времени; злоумышленник вскроет корпус, будет паять и использовать сложное оборудование или программное обеспечение

Смягчение последствий

Предварительная аутентификация перед загрузкой установлена на TPM с защитным PIN-кодом (со сложным буквенно-цифровым PIN-кодом [enhanced pin] для защиты TPM от взлома).
Как мы вам покажем, это не совсем так. Предварительно подготовленный злоумышленник может выполнить всю цепочку атак менее чем за 30 минут, не прибегая к пайке, используя простое и относительно дешевое оборудование и общедоступные инструменты. Процесс, который ведет его путем «Evil-Maid».

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

Исследование конкретного чипа TPM показало, что он взаимодействует с процессором по протоколу последовательного периферийного интерфейса (SPI):

Это подтвердилось, когда мы обнаружили TPM, упомянутый в схеме ноутбука:

SPI — это коммуникационный протокол для встраиваемых систем, который чрезвычайно распространен практически среди всего оборудования. Ввиду своей простоты, для SPI не существует возможности шифрования. Любое шифрование должно выполняться самими устройствами. На момент написания этой статьи BitLocker не использовал никаких функций шифрованной связи стандарта TPM 2.0, что означает, что любые данные, поступающие из TPM, передаются в открытом виде, включая ключ дешифрования для Windows. Если мы сможем получить этот ключ, мы сможем расшифровать диск, получить доступ к конфигурации VPN-клиента и, возможно, получить доступ к внутренней сети.
Обойти TPM таким образом — это все равно что игнорировать Форт Нокс и сосредоточиться на не очень бронированном автомобиле, выезжающем из него.
Для того чтобы прослушать данные, передаваемые по SPI, мы должны прикрепить провода или щупы к контактам (обозначенным выше как MOSI, MISO, CS и CLK) на TPM. Обычно это просто, но в данном случае возникает практическая проблема. Этот TPM выполнен в корпусе VQFN32, который сам по себе очень мал. На самом деле ширина «штырьков» составляет всего 0,25 мм, а расстояние между ними — 0,5 мм. И эти «штырьки» на самом деле не штырьки, они плоские по отношению к стенке чипа поэтому физически к ним невозможно прикрепить какой-либо зажим. Можно припаять «летучие провода» к паяным площадкам, но это очень хлопотно и, скорее все, такое соединение будет физически неустойчивым. В качестве альтернативы распространенной тактикой является поиск последовательных резисторов для припаивания, но они были такими же маленькими и еще более хрупкими. Это было нелегко. Но прежде чем приступить к работе, мы решили, что может быть и другой способ. Во многих случаях микросхемы SPI используют одну и ту же «шину» с другими микросхемами SPI. Это техника, которую используют разработчики аппаратного обеспечения для упрощения соединений, для экономии средств и облегчения поиска и устранения неисправностей и программирования. Мы начали искать по всей плате любую другую микросхему, которая может находиться на той же шине, что и TPM. Возможно, их «штырьки» были бы крупнее и удобнее в использовании. После некоторых проб и изучения схем выяснилось, что TPM разделяет шину SPI с единственным другим чипом, чипом CMOS, который определенно имеет больше выводов «штырьков». На самом деле, микросхема CMOS имела самый большой размер выводов, который можно найти на стандартных материнских платах, это был SOP-8 (он же SOIC-8).
Это было прекрасно. Мы подключили наш логический анализатор Saleae logic analyzer t к контактам в соответствии с техническим описанием CMOS’s datasheet:
Предварительно оснащенный злоумышленник, как мы уже упоминали в начале, вместо отдельных зондов будет использовать клипсу SOIC-8 clip. Клипса сделает подключение к чипу до безобразия простым и сэкономит пару минут во время реальной атаки.Теперь, когда щупы были подключены, мы загрузили ноутбук и записали каждый байт SPI, перемещающийся по дорожкам. Где-то среди миллионов фрагментов данных был отправлен ключ расшифровки BitLocker, проблема заключалась в том, чтобы найти его. Мы использовали bitlocker-spi-toolkit Анри Нурми, чтобы попытаться извлечь ключ автоматически, но он не работал во время нашего захвата. Ниже приведен скриншот его анализатора высокого уровня (HLA) в действии. Вы можете увидеть, что некоторые транзакции обрабатываются правильно, а некоторые — нет. В нашем захвате было что-то другое, чего HLA не мог учесть.
После нескольких дней поиска и устранения неисправностей, сравнения захватов и вырывания волос на голове мы, наконец, поняли, что это была комбинация различных битовых масок для пакетов команд доверенного платформенного модуля, а также другое регулярное выражение для поиска ключа. Мы сделали запрос на исправление (pull request for the fix ) , и теперь bitlocker-spi-toolkit может анализировать и эти типы запросов. Как только мы это сделали, о чудо, ключ выскочил.
Отлично, теперь, когда у нас есть ключ расшифровки, давайте расшифруем SSD и посмотрим, что у нас есть. Мы вытащили SSD, установили его в адаптер и подключили к сети. Мы сделали образ диска, который использовали в дальнейшем. Интересно, что во всем процессе цепочки атак дольше всего длится простое копирование 256 ГБ файлов. После того как мы получили изображение локально, мы можем использовать набор инструментов Dislocker для расшифровки диска:
$ echo daa0ccb7312 | xxd -r -p > ~/vmk $ mkdir ~/ssd ~/mounted $ sudo losetup -P /dev/loop6 /mnt/hgfs/ExternalSSD/ssd-dd.img $ sudo fdisk -l /dev/loop6 Disk /dev/loop6: 238.47 GiB, 256060514304 bytes, 500118192 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: BD45F9A-F26D-41C9-8F1F-0F1EE74233 Device Start End Sectors Size Type /dev/loop6p1 2048 1026047 1024000 500M Windows recovery environment /dev/loop6p2 1026048 2050047 1024000 500M EFI System /dev/loop6p3 2050048 2312191 262144 128M Microsoft reserved /dev/loop6p4 2312192 500117503 497805312 237.4G Microsoft basic data <- bitlocker drive $ sudo dislocker-fuse -K ~/vmk /dev/loop6p4 -- ~/ssd $ sudo ntfs-3g ~/ssd/dislocker-file ~/mounted $ ls -al ~/mounted total 19156929 drwxrwxrwx 1 root root 8192 May 5 19:00 . drwxrwxrwt 17 root root 4096 Jun 15 09:43 .. drwxrwxrwx 1 root root 0 May 6 14:29 '$Recycle.Bin' drwxrwxrwx 1 root root 0 May 4 10:55 '$WinREAgent' -rwxrwxrwx 1 root root 413738 Dec 7 2019 bootmgr -rwxrwxrwx 1 root root 1 Dec 7 2019 BOOTNXT lrwxrwxrwx 2 root root 15 May 4 11:18 'Documents and Settings' -> ~/mounted/Users
Теперь, когда у нас есть доступ к содержимому в режиме офлайн, мы приступили к стандартному процессу кражи данных. Извлечение хэшей паролей, открытых или закодированных учетных данных, открытых конфиденциальных файлов и т. д. К сожалению, ничего полезного не было найдено, и мы не получили никаких автономных учетных данных, что не удивительно, поскольку это был не ноутбук сотрудника с многолетними файлами, а специально созданный для этого теста ноутбук. Однако мы обнаружили используемый VPN-клиент: компании Palo Alto’s Global Protect (GP). GP имеет интересную «функцию» под названием Pre-logon tunnel: Pre-logon это метод подключения, который устанавливает VPN-соединение до того, как пользователь войдет в систему. Целью предварительного входа является аутентификация конечной точки (не пользователя) и возможность запуска сценариев домена или других задач, как только конечная точка включится. Это звучит как действительно хорошая функция для IT-отдела для управления конечными точками. Это также похоже на отличный способ получить доступ к VPN, не зная ничьих учетных данных. Теоретически, если мы сможем загрузить защищенную версию ноутбука, например, используя бэкдор the sticky keys backdoor, с липкими ключами, мы сможем получить доступ к VPN-соединению, не требуя никаких учетных данных. На практике существует множество способов добиться как это можно сделать но мы решили пойти по пути виртуализации в интересах скорости. Поскольку у нас есть доступ ко всей файловой системе, мы могли делать что угодно, включая переписывание файлов драйверов для вредоносных программ на уровне ядра, проксирование привилегированных DLL и просто добавление учетных записей. В интересах экономии времени и эффективности для этого сценария идеально подходят липкие ключи, процесс изготовления которых очень прост:
Copy C:\Windows\System32\Utilman.exe to Utilman.exe.bak Copy C:\Windows\System32\cmd.exe to Utilman.exe Hit Windows + U at the login screen
Теперь, когда у нас есть доступ к черному ходу, нам нужно просто загрузить диск. Чтобы загрузить расшифрованный образ Windows в качестве виртуальной машины (Virtual Machine), нам сначала нужно создать пользовательский файл VMDK. Этот файл должен задать параметры и сопоставить начальные сектора расшифрованного раздела BitLocker и зашифрованного образа с соответствующими разделами виртуальной машины. Полученный VMDK:
# Disk DescriptorFile version=1 CID=19362586 parentCID=ffffffff createType="partitionedDevice" # Extent description RW 63 FLAT "ssd-dd.img" 0 RW 1985 FLAT "ssd-dd.img" 2048 RW 1024000 ZERO RW 1024000 FLAT "ssd-dd.img" 1026048 RW 262144 FLAT "ssd-dd.img" 2050048 # This is the 4th partition where the encrypted bitlocker drive was RW 497805312 FLAT "dislocker2-file" 0 RW 655 ZERO RW 33 FLAT "ssd-dd.img" 63 ddb.virtualHWVersion = "4" ddb.adapterType="ide" ddb.geometry.cylinders="16383" ddb.geometry.heads="16" ddb.geometry.sectors="63" ddb.uuid.image="43e1e-5c24-46cc-bcec-daad3d500" ddb.uuid.parent="00000000-0000-0000-0000-000000000000" ddb.uuid.modification="8d285-ad86-4227-86d4-ec168b6b3" ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000" ddb.geometry.biosCylinders="1024" ddb.geometry.biosHeads="255" ddb.geometry.biosSectors="63"
Теперь, имея этот VMDK и образ Windows с липкими ключами, мы создали виртуальную машину, загрузили ее и нажали WIndows + U на экране входа в систему.
GlobalProtect Status: Подключен
Это именно то, что нам было нужно. Для того чтобы это работало, аутентификация в VPN происходит через сертификат, прикрепленный к учетной записи компьютера. Поскольку каждая учетная запись компьютера имеет очень базовые привилегии в Active Directory, мы можем выполнять основные команды SMB в домене. Мы запросили у контроллера домена различные типы информации о домене, такие как пользователи, группы, системы и т. д. Мы также можем просмотреть содержимое файлов на внутренних SMB-доступах:
Мы также можем использовать доступ к этой компьютерной учетной записи в качестве платформы для запуска внутренних атак и их последующей эскалации. Чтобы доказать, что у нас был доступ на запись на сервер, который мы не должны были иметь, мы выбрали внутренний файловый сервер сверху. Доказательство концепции заключалось в записи файла на этот сервер и считывании его обратно, чтобы доказать что у нас есть доступ на чтение/запись.
 Ресурс «Scanner» является отличным выбором для злоумышленника в качестве кладезя для опробования различных техник, например, LNK-атак, троянских PDF-файлов и т. д. На этом этапе мы получили доступ к внутренней сети, базовые привилегии в Active Directory и доступ к внутренним файловым ресурсам — этого более чем достаточно, чтобы начать компрометацию конфиденциальных корпоративных данных.
 
Вкратце, мы взяли заблокированный FDE ноутбук, подсмотрели ключ расшифровки BitLocker, выходящий из TPM, сделали бэкдоринг виртуализированного образа и использовали функцию автоматического подключения к VPN для атаки на внутреннюю корпоративную сеть. Это один из способов как можно получить доступ с украденного ноутбука к внутренним корпоративным данным.

Титры

Особая благодарность исследователям, которые поделились своими знаниями ранее и помогли сделать эту атаку более реалистичной, практичной и быстрой: Henri Nurmi — https://labs.f-secure.com/blog/sniff-there-leaks-m… Denis Andzakovic — https://pulsesecurity.co.nz/articles/TPM-sniffing Был осуществлен перевод статьи. Оригинал — https://dolosgroup.io/blog/2021/7/9/from-stolen-laptop-to-inside-the-company-network
Общаясь с потенциальными пользователями часто слышишь ссылки на то, что современные системы шифрования дисков, входящие в состав операционных систем,настолько круты, что при их использовании пользователь достаточно защищен, и больше ему ни о чем заботиться не нужно. Ссылаются на опыт американских правоохранителей, которые пытались брутфорсить диски, защищенные битлокером с помощью имеющихся у них суперкомпьютеров, и ничего не вышло, а значит - беспокоиться не о чем. Это заблуждение, т.к. любую крепость не обязательно брать измором или штурмом, ее можно обойти. Достаточно получить компьютер и пользователя, способного ввести пароль под угрозой, или за деньги. Или, поступив, как авторы статьи. Да, это сложно, требует специальных знаний, но - возможно. Поэтому не стоит пренебрегать дополнительными средствами защиты, такими как система Брик, затрудняющими получение несанкционированного доступа к важным данным Вашей компании, даже если у злоумышленников есть пользователь, готовый поделиться своим паролем.
Андрей Першунькин
разработчик ПО Брик DIS.works