ЯК ІЗ ВКРАДЕНОГО НОУТБУКА ПОТРАПИТИ В МЕРЕЖУ КОМПАНІЇ

Що можна зробити із вкраденим ноутбуком? Чи можете ви отримати доступ до нашої внутрішньої мережі? Саме на це питання недавно хотів отримати відповідь одинз із клієнтів. Попередження про спойлер: так, так і ще раз так, ви можете. В даній статті ми розповімо вам про те, як ми взяли “викрадений” корпоративний ноутбук та зв’язали кілька експлойтів разом, аби проникнути в корпоративну мережу клієнта.

Вхідні дані

Ми отримали ноутбук 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. Це техніка6 яку використовують розробники апаратного забезпечення для спрощення з’єднань, для економії коштів та полегшення пошуку і усунення поломок та програмування. Ми почали шукати по всій платі будь-яку іншу мікросхему, котра може знаходитися на тій же шині, що і 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-з’єднання до того, як користувач увійшов в систему. Метою попереднього входу є аутентифікація кінцевої точки (не користувача) та можливість запуска сценаріїв домену чи інших задач, як тільки кінцева точка вмикається. Це звучить як дійсно хороша функція для ІТ-відділу для керування кінцевими точками. Це також схоже на чудовий спосіб отримати доступ до 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
Спілкуючись із потенційними користувачами часто чуєш посилання на те, що сучасні системи шифрування дисків, які входять в склад операційних систем, настільки круті, що при їх використанні користувач достатньо захищений, ба більше, йому не потрібно ні про що турбуватися. посилаються на досвід американських правоохоронних органів, котрі намагалися брутфорсити диски, захищені бітлокером за допомогою суперкомп'ютерів, та нічого не вийшло, а отже — турбуватися нема про що. Це не так, оскільки будь-яку фортецю не обов'язково брати змором або штурмом, її можна обійти. Достатньо отримати комп'ютер та користувача, який здатний ввести пароль під загрозою або за гроші. Або, вчинивши як автори статті. Так6 це складно, вимагає спеціальних знань, але — можливо. Тому не варто нехтувати додатковими заходами захисту, такими як система Брік, як ускладнюють отримання несанкціонованого доступа до важливих даних вашої компанії, навіть якщо у зловмисників є користувач, готовий поділитися своїм паролем.
Андрей Першунькин
розробник ПЗ Брік DIS.works