Giải mã mã hóa BitLocker bằng phương pháp đánh chặn TPM
-
Giới thiệu
Tác động của mã hóa BitLocker đối với các cuộc điều tra pháp y đã được nhắc tới kể từ khi được giới thiệu trong Windows Vista (Woodward, 2006). Gần đây hơn, Microsoft đã thiết lập việc sử dụng mã hóa BitLocker với tính năng bảo vệ Trusted Platform Module (TPM) làm tiêu chuẩn cho các máy tính chạy hệ điều hành Windows 11. TPM là bộ xử lý mã hóa chi phí thấp có thể tạo, quản lý và sử dụng khóa mật mã cũng như lưu trữ dữ liệu mật (Microsoft, 2022). Mục đích chính của nó trên các máy tính Windows gần đây là để đo lường tính toàn vẹn của quá trình khởi động (Tomlinson, 2017), cung cấp các phương thức xác thực (ví dụ: Windows Hello) và volume keys của BitLocker trong khi vẫn cho phép người dùng cuối trải nghiệm mã hóa liền mạch.
Một số thủ tục để giải mã volume BitLocker được bảo vệ bởi TPM đã được đề xuất. Phương pháp dò tìm TPM nhằm mục đích chặn các tín hiệu TPM rời rạc để trích xuất BitLocker Volume Master Key (VMK). Để dò tìm đường kết nối giữa TPM và bộ xử lý, cần có hệ thống dẫn vật lý đến bo mạch chủ máy tính. Trong quá trình khởi động máy tính, TPM sẽ đo lường và đánh giá quá trình khởi động. Nếu các phép đo lường được xác thực, VMK của ổ đĩa sẽ được TPM mở niêm phong (giải mã) và truyền đến Bộ xử lý trung tâm (CPU) thông qua giao thức bus Low Pin Count (LPC) hoặc Giao diện ngoại vi nối tiếp (SPI), theo thông số kỹ thuật của TPM. Một bộ phân tích logic có thể được sử dụng để dò tìm đường truyền bus và truy xuất VMK, từ đó được sử dụng để giải mã ổ đĩa. Bạn có thể tìm thấy mô tả chi tiết về phương pháp này trong (Nurmi, 2020; Andzakovic, 2019; Dewaele và Oberson, 2021).
Thủ tục Cold Boot đề cập đến hiệu ứng dữ liệu dư (data remanence effect) trên RAM động. Tóm lại, nó bao gồm việc thực hiện kết xuất RAM máy tính sau khi reset bằng phần cứng để trích xuất các khóa mã hóa volume, biết rằng các khóa đã được tải vào bộ nhớ trước đó (Halderman et al., 2009). Tuy nhiên, các máy tính hiện đại cung cấp các tính năng bảo mật thách thức việc áp dụng phương pháp đó. Nghiên cứu của Segerdahl và Saarinen (2018) đã chỉ ra một số kỹ thuật có thể thành công khi áp dụng trên các thiết bị hiện đại, ví dụ: ghi đè bit MOR (Yêu cầu ghi đè bộ nhớ) trong phần firmware và thực hiện giải mã dữ liệu trên các loại bộ nhớ mới hơn.
Một phương pháp khác được đề cập trong nghiên cứu của Han et al. (2018). Đó là một lỗ hổng trong sleep mode S3 đối với một số mẫu TPM 2.0 nhất định, lỗ hổng này có thể bị khai thác để tương tác với TPM và lấy VMK của BitLocker. Các tác giả đã cung cấp hai công cụ mã nguồn mở Linux để hỗ trợ phương pháp của họ: Napper và Bitleaker. Napper là một công cụ Linux được sử dụng để xác minh xem TPM của máy tính có dễ bị dính lỗ hổng sleep mode hay không và BitLeaker là công cụ trực tiếp khai thác BitLocker.
Các thủ tục Truy cập Bộ nhớ Trực tiếp (DMA) cũng đã được nhắc đến. Công nghệ DMA được tạo ra để đảm bảo hiệu suất tối ưu cho việc truyền dữ liệu giữa bộ nhớ hệ thống và thiết bị phần cứng I/O (Delaunay, 2018). Các thủ tục DMA nhằm mục đích khai thác các giao diện vật lý, chẳng hạn như Thunderbolt (Ruytenberg, 2020), Firewire và PCI Express bằng phần cứng tùy chỉnh để truy cập trực tiếp vào RAM, bỏ qua các cơ chế bảo vệ của hệ điều hành. PCILeech (Frisk, [n.d]) và MemprocFS (Frisk, [n.d]), được phát triển và duy trì bởi Ulf Frisk, đã trở thành bộ công cụ DMA chính để thu thập, vá lỗi và phân tích trực tiếp bộ nhớ. Microsoft đã giới thiệu một số tính năng bảo mật, chẳng hạn như bảo vệ Kernel DMA, sử dụng công nghệ IOMMU (Input-Output Memory Management Units) để ngăn chặn các phương pháp đó.
Gần đây, Latzo et al. (2021) đã trình bày một phương pháp trích xuất pháp y cấp thấp kết hợp công nghệ Direct Connect Interface (DCI) của Intel với các khả năng của PCILeech, có tên là DCI-Leech. Công nghệ Intel DCI cho phép gỡ lỗi máy tính có bộ xử lý Intel bằng cáp USB 3 A-to-A (Male-to-Male) rẻ tiền, với khả năng tạm dừng CPU, đọc thanh ghi và lấy dữ liệu bộ nhớ. Họ đã chỉ ra cách phá vỡ mã hóa CPU-bound và thực hiện phân loại pháp y kỹ thuật số bằng cách sử dụng Intel DCI. Goryachy et al. về cơ bản cũng đã nhắc đến việc sử dụng Intel DCI trước đây (Goryachy và Ermolov, 2016; Goryachy, M. và Ermolov, M., 2017a,b).
Bài viết này trình bày một phương pháp pháp y để lấy Volume Master Key (VMK) từ các ổ đĩa BitLocker được bảo vệ bằng TPM bằng cách sử dụng công nghệ Direct Connect Interface (DCI) của Intel và các kỹ thuật thiết kế đảo ngược. Chúng tôi chỉ cho bạn thấy cách bật Intel DCI trong UEFI firmware cũng như đảo ngược và phân tích ứng dụng Windows Boot Manager UEFI. Chúng tôi cũng sẽ trình bày cách gỡ lỗi máy tính đích bằng cáp USB 3 A—A để lấy VMK từ RAM, cho phép giải mã ổ đĩa được bảo vệ và nhờ vậy, có được quyền truy cập vào dữ liệu của nó. Do đó, các chuyên gia pháp y máy tính có thể truy cập và phân tích bằng chứng mà không cần biết mật khẩu người dùng Windows hoặc khóa khôi phục BitLocker.
Nội dung bài viết gồm:
Phần 2: Khái niệm cơ bản về mã hóa BitLocker, giới thiệu công nghệ Intel DCI và cách sửa đổi firmware
Phần 3: Phương pháp và các bước thực hiện
Phần 4: Kết quả
Phần 5: Kết luận
-
Khái niệm cơ bản
2.1. BitLocker và tính năng bảo vệ TPM
BitLocker là một giải pháp mã hóa full-volume được cung cấp bởi Microsoft. Sơ đồ cấu trúc hoạt động đơn giản hóa của nó được hiển thị trong Hình 1. Tóm lại, tất cả dữ liệu thô của tập đĩa được mã hóa bằng Full Volume Encryption Key (FVEK). FVEK được mã hóa bằng Volume Master Key (VMK) 256-bit, sau đó, được mã hóa bởi một hoặc nhiều trình bảo vệ có thể có (Microsoft, 2012). Từ góc độ pháp y, việc có được một trong các bộ bảo vệ chính (VMK hoặc FVEK) cho phép truy cập vào dữ liệu của ổ đĩa. Việc sử dụng VMK làm khóa trung gian cho phép thay đổi các trình bảo vệ bị xâm nhập mà không cần mã hóa lại dữ liệu ổ đĩa.
Khi TPM được sử dụng làm trình bảo vệ, VMK được mã hóa bằng Storage Root Key (SRK). Trên thực tế, SRK là một cặp khóa công khai/cá nhân RSA được lưu trữ trong bộ nhớ được bảo vệ cố định của TPM, do đó cung cấp khả năng bảo mật dựa trên phần cứng. Do đó, chỉ TPM mới có thể giải mã VMK bằng khóa cá nhân của nó với một thao tác được gọi là hủy niêm phong.
TPM ghi lại các phép đo của quá trình khởi động trong Platform Configuration Registers (PCR) bằng cách thực hiện các thao tác băm một chiều. Nếu nội dung PCR được xác thực, dựa trên chính sách PCR đã thiết lập, ổ đĩa VMK sẽ được mở khóa (giải mã) bởi TPM và được lưu trữ trong RAM. Hoạt động này được quản lý bởi ứng dụng Windows Boot Manager UEFI (Unified Extensible Firmware Interface), được tìm thấy trong phân vùng hệ thống EFI của ổ đĩa.
Theo Microsoft (2021), Windows Boot Manager (bootmgfw.efi) là một ứng dụng UEFI được sử dụng để thiết lập môi trường khởi động. Nó cũng xác minh xem có bất kỳ ổ đĩa BitLocker nào không và tìm kiếm trình bảo vệ nào được bật. Đối với các volume được TPM bảo vệ, ứng dụng Windows Boot Manager sẽ tìm nạp blob VMK được mã hóa từ volume metadata của BitLocker và chuyển tiếp nó tới TPM để hủy niêm phong. Nếu thao tác hủy niêm phong thành công, kết quả là clear VMK được trả về. Clear FVEK được lấy từ VMK và cuối cùng, volume được giải mã hoàn toàn bằng FVEK. Quá trình khởi động Windows sau đó diễn ra bình thường.
Như đã thấy trong Hình 1, mã PIN hoặc khóa khởi động cũng có thể được đặt cùng với bộ bảo vệ TPM. Trong trường hợp này, mã PIN người dùng hoặc khóa khởi động phải được cung cấp trước tiên để cho phép VMK được mở bằng TPM và nhờ vậy, được tải vào bộ nhớ. Những trường hợp liên quan đến các cơ chế xác thực trước khi khởi động như vậy nằm ngoài phạm vi của bài viết này.
Bạn có thể tìm thấy phân tích pháp y chi tiết về mã hóa ổ BitLocker trong Kornblum (2009).
2.2. Intel DCI
Công nghệ Direct Connect Interface (DCI) của Intel cung cấp khả năng thực hiện gỡ lỗi closed chassis JTAG (Joint Test Action Group) trên các máy tính có bộ xử lý Intel, bắt đầu từ bộ xử lý Intel Skylake thế hệ thứ 6 (Goryachy and Ermolov, 2016). Có thể thực hiện kết nối giữa máy chủ và máy tính đích bằng adapter Intel Silicon View Technology (SVT) hoặc qua cáp gỡ lỗi USB 3 A-to-A rẻ tiền (Latzo et al., 2021). Cáp gỡ lỗi USB 3 cũng có thể được làm thủ công từ cáp chéo A—A (Male—Male) thông thường bằng cách loại bỏ dòng VBus của nó
Công nghệ DCI cho phép kiểm soát hoàn toàn CPU, có thể dừng các luồng CPU, chèn các breakpoint, đọc hoặc ghi giá trị thanh ghi và truy cập dữ liệu bộ nhớ. Có thể gỡ lỗi bằng bộ công cụ Intel System Studio. Nó cung cấp rất nhiều tính năng trong đó có dòng lệnh giao diện Python với API OpenIPC (Application Programming Interface), bao gồm một số lệnh để hỗ trợ quá trình gỡ lỗi. Điều đáng chú ý là các thành phần của Intel System Studio đã được chuyển đổi sang một số bộ công cụ oneAPI của Intel, một số trong đó yêu cầu ký kết thỏa thuận không tiết lộ (NDA). Intel System Studio 2020 vẫn có sẵn dưới dạng phiên bản dùng thử miễn phí vào thời điểm bài viết này được viết và được áp dụng theo phương pháp đã được trình bày.
Intel DCI phải được kích hoạt trước khi có thể gỡ lỗi. Kích hoạt DCI yêu cầu thay đổi cài đặt cụ thể các biến UEFI trong chương trình cơ sở của máy tính đích. Phần giải thích chi tiết về quy trình này có trong (nstarke, 2020; Reed, T., 2019; Tanda, 2021), sẽ được đề cập trong phần 3. Một số công cụ được sử dụng để sửa đổi firmware sẽ được thảo luận ở phần tiếp theo.
2.3. Sửa đổi firmware UEFI
Một số tiện ích có sẵn có thể hỗ trợ quá trình sửa đổi firmware UEFI. Trước hết, để có được hình ảnh firmware, có thể sử dụng phương pháp tiếp cận phần mềm hoặc phần cứng. Một ví dụ về cách tiếp cận phần mềm là sử dụng CHIPSEC. CHIPSEC là một khung phân tích tính bảo mật của nền tảng PC, bao gồm phần cứng, firmware hệ thống và các thành phần nền tảng (Loucaides và Bulygin, 2014). CHIPSEC cung cấp chức năng kết xuất nội dung flash SPI, bao gồm firmware UEFI.
Mặt khác, khi sử dụng phương pháp tiếp cận phần cứng, thiết bị lập trình SPI được gắn vật lý vào bộ nhớ flash trên bo mạch chủ để đọc trực tiếp nội dung của nó. Một ví dụ về bộ lập trình như vậy là CH341A với chi phí thấp, được minh họa trong Hình 2.
Hình ảnh firmware UEFI thu được có thể được phân tích bằng UEFI- Tool. UEFITool (Schlej, Nikolaj, [n.d]) là một công cụ mã nguồn mở tuyệt vời để phân tích cú pháp, trực quan hóa và phân tích hình ảnh firmware UEFI theo cấu trúc dạng cây, đồng thời cung cấp khả năng tìm kiếm các mẫu văn bản hoặc hex và trích xuất các mô-đun riêng lẻ. Giao diện trực quan của UEFITool có thể được nhìn thấy trong Hình 3.
Hơn nữa, UEFITool còn làm nổi bật các mô-đun được hỗ trợ bởi Intel Boot Guard. Boot Guard là một công nghệ được Intel giới thiệu để cung cấp Root of Trust dựa trên phần cứng (Matrosov, 2017), xác minh chữ ký của các firmware sections. UEFITool hiển thị màu đỏ hoặc lục lam các vùng firmware có mã của chúng được kiểm tra trong quá trình khởi động và do đó, không thể sửa đổi được. Tuy nhiên, chuỗi tin cậy của Intel Boot Guard thường không bảo vệ các vùng NVRAM (non-volatile Random Access Memory) có chứa các biến UEFI.
Một tiện ích thực tế khác là ifrextract (IFR Extract, [n.d]), giúp trích xuất biểu mẫu trình bày bên trong từ các mô-đun UEFI. Nó có thể được sử dụng để định vị các cài đặt UEFI ẩn và các giá trị tùy chọn của chúng, cũng như tên biến tương ứng, GUID (mã định danh duy nhất trên toàn cầu) và khoảng trống nơi nó được lưu trữ trong NVRAM.
Tên biến UEFI, GUID và thông tin offset thu được từ ifrextract có thể được sử dụng để sửa đổi firmware. Cũng như hoạt động đọc, hoạt động ghi vào flash SPI có thể được thực hiện thông qua phương pháp tiếp cận phần mềm hoặc phần cứng. Một tiện ích phần mềm để sửa đổi các biến trong NVRAM là RU.efi (Wang, James, 2022), một ứng dụng UEFI cung cấp giao diện đồ họa thuận tiện (Hình 4). Tuy nhiên, có một vài số hệ thống mới hơn theo đuổi cơ chế chống ghi vì lý do bảo mật. Do đó, việc viết các sửa đổi firmware yêu cầu cách tiếp cận theo phần cứng, tức là sử dụng bộ lập trình flash SPI.
-
Phương pháp
Trong phần này, chúng tôi sẽ trình bày phương pháp được đề xuất, bao gồm các bước tuần tự sau:
- Lấy hình ảnh pháp y và xác minh tính năng bảo vệ TPM
- Kích hoạt Intel DCI
- Đảo ngược Windows Boot Manager
- Gỡ lỗi với Intel DCI và truy xuất VMK
- Giải mã ổ đĩa BitLocker
Mỗi bước được mô tả chi tiết trong các tiểu mục dưới đây.
3.1. Lấy hình ảnh pháp y và xác minh tính năng bảo vệ TPM
Một thủ tục pháp y đầu tiên bắt buộc là thu được hình ảnh của thiết bị lưu trữ máy tính đích bằng thiết bị thích hợp. E01 (Encase Image File Format) là định dạng hình ảnh pháp y thường được sử dụng.
Sau khi thu thập, hình ảnh được gắn ở chế độ chỉ đọc trên máy tính chủ. Điều này có thể được thực hiện bằng nhiều công cụ khác nhau. Trong máy chủ Windows, phần mềm phiên bản miễn phí Arsenal Image Mounter (Arsenal Recon, [n.d]) có thể được sử dụng cho mục đích này. Tiếp theo, thực thi manage-bde -status trong lệnh Prompt (với tư cách là Quản trị viên) cung cấp thông tin về trạng thái mã hóa BitLocker của các volume được gắn. Minh họa cho điều này, Hình 5 hiển thị một đầu ra xác nhận rằng một volume được mã hóa/khóa bằng BitLocker.
Để có thêm thông tin về các trình bảo vệ BitLocker, có thể thực thi lệnh manage-bde -protectors -get F: (F: là volume bị khóa). Như được hiển thị trong Hình 6, đầu ra cho thấy rằng Mô-đun Trusted Platform thực sự được sử dụng để bảo vệ volume. Cũng có thể nhận thấy rằng hồ sơ xác thực PCR (Platform Configuration Register) sử dụng PCR 7 và 11. Theo cài đặt chính sách BitLocker, khi Secure Boot được định cấu hình đúng trong máy tính, BitLocker sẽ liên kết với PCR 7 và PCR 11 như mặc định. Nếu Secure Boot bị tắt, BitLocker sẽ liên kết với các PCR 0, 2, 4 và 11 thay vào đó, các PCR này có các phép đo mã thực thi firmware và hình ảnh Windows Boot Manager được tải lên (Microsoft, 2022a).
Một trình bảo vệ khác – Numerical Password – liên quan đến Recovery Key/Password 48 chữ số, luôn được tạo khi BitLocker được bật trên ổ đĩa. Nó thường được sử dụng làm khóa dự phòng và có thể được lưu vào tài khoản Microsoft của người dùng.
3.2. Kích hoạt Intel DCI
Như đã thảo luận trước đây, việc kích hoạt Intel DCI yêu cầu sự thay đổi trong firmware. Để có thể làm việc này, chúng ta cần có được hình ảnh của firmware, sau đó phân tích cú pháp và định vị các khoảng trống của biến UEFI có liên quan cần được sửa đổi, và cuối cùng chúng ta có thể thực hiện sửa đổi firmware.
Trước tiên, có một lưu ý quan trọng đó là khi firmware bị thay đổi một cách không phù hợp có thể khiến BitLocker chuyển sang chế độ khôi phục bởi các phép đo khởi động khác nhau, yêu cầu Recovery Password để mở khóa ổ đĩa. Vì lý do này, các chuyên gia pháp y nên thận trọng và tránh những sửa đổi không chính xác trong quá trình thực hiện. Microsoft (2022b) đã liệt kê các hành động cụ thể có thể kích hoạt chế độ khôi phục BitLocker, bạn nên tuân thủ những khuyến nghị này. Ngoài ra, nên tránh một số phương pháp kích hoạt Intel DCI. Ví dụ: AMI BIOS Configuration Program (AMIBCP) cũng thường được sử dụng để sửa đổi cài đặt firmware. Tuy nhiên, nó liên quan đến việc thay đổi các giá trị mặc định của cài đặt và thực hiện thao tác đặt lại về mặc định. Hành động này có khả năng kích hoạt chế độ khôi phục BitLocker, vì vậy nó không nên được thực hiện cho mục đích của phương pháp này.
Cân nhắc điều đó, trước tiên chúng ta tiến hành bằng cách lấy ảnh firmware của máy tính. Như đã nói ở trên, có thể sử dụng phương pháp phần mềm hoặc phần cứng để thực hiện việc này. CHIPSEC có thể được sử dụng như một cách tiếp cận phần mềm. Nó có thể được thực thi từ ổ bootable USB với UEFI Shell, như được giải thích trong tài liệu CHIPSEC (2022). Lệnh sau có thể được thực thi trong UEFI Shell để kết xuất firmware vào một tệp:
python368 chipec_util.py spi dump rom.bin
Nếu Secure Boot được kích hoạt trong máy tính đích, để chạy UEFI Shell hoặc bất kỳ ứng dụng non-signed EFI nào, chúng ta có thể tạo một ổ bootable USB với hỗ trợ MOK (Machine Owner Key). Về bản chất, Trình quản lý MOK cung cấp khả năng pre-sign bootloader và lưu trữ khóa công khai của nó trong firmware máy tính, cho phép nó được thực thi khi bật Secure Boot. Super UEFIinSecureBoot Disk project (ValdikSS, [n.d]) được coi là một bootloader tối thiểu với sự hỗ trợ của Trình quản lý MOK.
Thay vào đó, nếu sử dụng phương pháp phần cứng, thiết bị lập trình SPI có thể được dùng để đọc trực tiếp từ chip bộ nhớ flash trên bo mạch chủ của máy tính đích.
Tiếp theo, chúng tôi sử dụng cả hai tiện ích UEFITool và ifrextract để phân tích hình ảnh firmware và xác định vị trí các biến UEFI và độ lệch tương ứng cần được thay đổi. Theo đề xuất của (Latzo et al., 2021; nstarke, 2020; Reed, T., 2019; Tanda, 2021), các cài đặt thường được sửa đổi để bật DCI gồm:
- Debug Interface: đặt thành 0x1 (Bật)
- Debug Interface Lock: đặt thành 0x0 (Tắt)
- Direct Connect Interface: đặt thành 0x1 (Bật)
- Kích hoạt DCI (HDCIEN): đặt thành 0x1 (Bật)
- Platform Debug Consent: đặt thành 0x1 (DCI OOB+[DbC])
- CPU Run Control CPU: đặt thành 0x1 (Bật)
- CPU Run Control Lock: đặt thành 0x0 (Tắt)
- TraceHub Enable Mode: đặt thành 0x2 (Host Debugger)
Tuy nhiên, chúng phụ thuộc vào từng hệ thống và không phải hệ thống nào cũng có những tùy chỉnh này. Chúng ta sẽ mở hình ảnh firmware trong UEFITool và thực hiện tìm kiếm văn bản cho các mục cài đặt đó, ví dụ: DCI and Debug Interface, nhằm mục đích tìm các mô-đun tham chiếu chúng. Mô-đun Setup DXE driver được tìm thấy có chứa các tham chiếu đến các cài đặt đó trong hầu hết các hình ảnh, nhưng nó có thể khác nhau trong các phiên bản firmware riêng biệt. Từ trong UEFITool, chúng ta có thể trích xuất nội dung phần hình ảnh PE32 của mô-đun đã xác định. Tiếp theo, chúng ta phân tích cú pháp bằng ifrextract, trích xuất thông tin biểu mẫu trình bày bên trong (IFR).
One Of: Direct Connect Interface, VarStorelnfo (VarOffset/ VarName) : OxEF, VarStore: 0x3 |
One Of Option: Disabled, Value (8 bit): 0x0 (default) One Of Option: Enabled, Value (8 bit): 0x1 |
Listing 1: Cài đặt Direct Connect Interface được tìm thấy trong trích xuất IFR.
Ví dụ, Listing 1 minh họa cài đặt Direct Connect Interface được tìm thấy trong một trích xuất dữ liệu IFR. Giá trị Varoffset là 0xEF và VarStore là 0x3. Chúng ta có thể tìm thấy biến UEFI chứa cài đặt này, tương ứng với giá trị VarStore ở đầu tài liệu IFR, như trong Listing 2.
VarStoreId:0x3 [B08F97FF-E6E8-4193-A997-5E9E9B0ADB32] Size: 0xlD5, Name: CpuSetup |
Listing 2: Tìm biến UEFI tương ứng với giá trị VarStore.
Do đó, có thể thấy rằng cài đặt Direct Connect Interface nằm ở khoảng trống 0xEF của biến CpuSetup. Chúng ta thực hiện phân tích tương tự này cho từng cài đặt sẽ được thay đổi.
Sau đó, chúng ta thực hiện sửa đổi firmware với RU.efi tương ứng. Như lúc trước, khởi động máy tính bằng RU.efi cũng yêu cầu tạo ổ bootable USB với hỗ trợ MOK (Machine Owner Key) nếu Secure Boot được bật trên máy tính.
Sau khi khởi động RU.efi, đối với mỗi cài đặt được sửa đổi, chúng ta điều hướng đến biến UEFI tương ứng và thay đổi giá trị ở khoảng trống cụ thể, lưu các giá trị mới. Như đã thảo luận trước đó, một số hệ thống đã kích hoạt cơ chế bảo vệ ghi vì lý do bảo mật. Trong những trường hợp này, để viết các sửa đổi firmware sẽ cần sử dụng phương pháp tiếp cận phần cứng, tức là dùng bộ lập trình flash SPI.
Cuối cùng, có thể xác minh xem Intel DCI đã được bật thành công trong máy tính đích hay chưa bằng cách kết nối nó với máy tính chủ có cài đặt Intel System Studio bằng cáp gỡ lỗi USB 3 A—A. Chúng ta sẽ chạy chương trình Intel System Debugger Target Indicator, nó sẽ chỉ ra liệu mục tiêu với Intel DCI có được phát hiện chính xác hay không (Hình 7).
Chúng ta cũng có thể sử dụng CHIPSEC để xác minh xem Intel DCI đã được bật hay chưa bằng cách chạy lệnh sau trong UEFI Shell:
python3 6 8 chipec_main.py -m common.debugenabled
3.3. Đảo ngược Windows Boot Manager
Quy trình sau đây bao gồm việc sử dụng và đảo ngược ứng dụng Windows Boot Manager được tìm thấy trong ổ đĩa bằng chứng. Mục tiêu của chúng ta là xác định vị trí vùng mã nơi thực hiện thao tác hủy niêm phong TPM, tức là VMK được giải mã.
Như đã đề cập trong phần 2.1, ứng dụng Windows Boot Manager UEFI (bootmgfw.efi) có thể được tìm thấy trong EFI System Partition (ESP). Nó nằm dưới đường dẫn \EFI\Microsoft\Boot\bootmgfw.efi.
Chúng ta lấy một bản sao của bootmgfw.efi từ ổ đĩa bằng chứng và tải nó vào một công cụ kỹ thuật đảo ngược. Ghidra (National Security Agency, [n.d]) là một công cụ kỹ thuật đảo ngược nguồn mở nổi tiếng có thể được sử dụng cho mục đích này. Tệp EFI được nhập và phân tách với cấu hình tiêu chuẩn. Trong Ghidra, chúng ta tải các tệp cơ sở dữ liệu Windows Symbols Program (PDB) từ public symbol server của Microsoft. Các tệp PDB có thông tin gỡ lỗi ký hiệu thu được trong suốt quá trình biên dịch và liên kết, hỗ trợ phân tích các tệp thực thi.
Sau khi tải các tệp PDB của Windows, chúng ta thực hiện tìm kiếm trong Symbol Table chức năng FvebUnsealCallback, như trong Hình 8. Như tên của nó, chức năng này đã được tìm thấy để trả về clear VMK nhờ kết quả của thao tác hủy niêm phong bởi TPM.
Chúng ta điều hướng đến chức năng FvebUnsealCallback đã được phân tách và cuộn xuống hướng dẫn RET (return) ở cuối. Sau khi phân tích tĩnh và động, ta nhận thấy rằng tại thời điểm này, thanh ghi RDI chứa tham chiếu đến địa chỉ bộ nhớ lưu trữ clear Volume Master Key. Do đó, hãy lưu ý địa chỉ hex của hướng dẫn cài đặt RET, như trong Hình 9 (0x1004 6b2a, đối với trường hợp này), địa chỉ này sẽ được sử dụng làm địa chỉ breakpoint trong quá trình gỡ lỗi với Intel DCI.
3.4. Gỡ lỗi với Intel DCI và truy xuất VMK
Máy tính chủ phải đang chạy IPCCLI client với giao diện dòng lệnh Python cho OpenIPC từ Intel System Studio để thực hiện quy trình gỡ lỗi.
Trước tiên, chúng ta kết nối máy tính chủ với máy tính đích ở trạng thái tắt nguồn bằng cáp gỡ lỗi USB 3 A—A. Máy tính đích được bật nguồn và ngay khi có thể, chúng ta sẽ đưa ra lệnh tạm dừng CPU:
ipc.halt()
Khi CPU ở trạng thái tạm dừng, chúng ta đặt một breakpoint cho địa chỉ thu được từ quy trình kỹ thuật đảo ngược đã được giải thích trước đó. Sử dụng cú pháp sau đây:
ipc.threads[0].brnew(“0x10046b2aL”, breakpoints=”breakpoint”)
Địa chỉ breakpoint được gắn vào bởi chữ L, cho biết rằng đó là một địa chỉ tuyến tính. Tiếp theo, dán nhãn cho breakpoint. Chúng ta giải phóng việc thực thi CPU bằng lệnh ipc.go(). Chỉ sau vài giây, breakpoint được hoàn thành và quá trình thực thi máy tính lại bị tạm dừng. Có thể xác minh xem con trỏ lệnh có tương ứng với địa chỉ breakpoint hay không bằng lệnh:
ipc.threads[0].arch_register(“RIP”)
Sau đó, chúng ta có được nội dung của thanh ghi RDI: ipc.threads[0].arch_register(“RDI”)
Như đã thảo luận, tại thời điểm này, thanh ghi RDI được tìm thấy có chứa địa chỉ bộ nhớ nơi lưu trữ clear VMK. Do đó, chúng ta kết xuất nội dung bộ nhớ tại địa chỉ thu được:
ipc.threads[0].memdump(“0 X 3b3ea0L”,44,1)
Lệnh này kết xuất 44 byte, với 32 byte cuối cùng tương ứng với VMK của volume.
In: ipc = ipccli.baseaccesso In: ipc.haltO |
In: ipc.threads[0].brnew(“0xl0046b2aL”, breakpointId=” breakpoint”) |
Out: Breakpoint Name: breakpoint – Id: 1 |
Address: 0x0000000010046b2aL – Data Size: 1 – DBReg: 0 – Enabled: True |
In: ipc.goO In: ipc.threads[0].arch_register(“RDI”) Out: [64b] 0x00000000003B3EA0 In: ipc.threads[0].memdump(“0x3b3ea0L”,44,1) 3b3eaOL: 2c 00 00 00 01 00 00 00 03 20 00 00 3d 93 38 al 3b3ebOL: 5b 43 id 63 dl 45 72 79 cd ba 7f 85 65 93 22 cd 3b3ecOL: aa 07 45 ef 6f bl 79 ba 00 b9 db 01 |
Listing 3: Trình tự các chỉ dẫn được thực thi trong giao diện Python của IPCCLI để truy xuất Volume Master Key.
Toàn bộ quá trình thực thi chuỗi lệnh và đầu ra tương ứng được hiển thị trong Listing 3.
Cuối cùng, VMK 32 byte (Hình 10) được ghi vào một tệp nhị phân.
3.5. Giải mã ổ đĩa BitLocker
Máy chủ Linux được sử dụng để giải mã và thu được hình ảnh clear volume. Chúng ta giải mã ổ đĩa BitLocker bằng DisLocker (Aorimn, [n.d]), một công cụ được thiết kế để đọc các phân vùng được mã hóa BitLocker trong hệ thống Linux. Hình ảnh E01 chứa ổ đĩa BitLocker được mã hóa đầu tiên được gắn vào bằng cách sử dụng lệnh ewfmount từ tệp libewf Linux:
ewfmount encrypt.E01./enc_img
Sử dụng Dislocker để thực hiện giải mã. Chúng ta sẽ chỉ định đường dẫn hình ảnh E01 được gắn, khoảng trống volume BitLocker được mã hóa và VMK dưới dạng tệp nhị phân:
dislocker -V ./enc_img/ewf01 –offset $off -K vmk.bin ./decrypted_vol
Một tệp có tên là dislocker-file được tạo tại điểm gắn đích, đây là một phân vùng NTFS được giải mã ảo. Cuối cùng, lệnh dd có thể được thực thi để lấy phân vùng NTFS được giải mã:
dd if=./decrypted_vol/dislocker-file of=./dec_ img.dd
-
Kết quả
Phương pháp này được trình bày lần đầu tiên được thử nghiệm trên máy tính xách tay Acer Aspire 5 A515- 51-56k6 với CPU Intel Kaby Lake i5- 7200U thế hệ thứ 7 và ổ cứng SSD 500 GiB, chạy Windows 11 Pro (bản cập nhật 21H2). Máy tính có Mô-đun Trusted Platform (TPM) phiên bản 2.0. Mã hóa BitLocker đã được kích hoạt trên Windows 11 bằng cách sử dụng TPM làm trình bảo vệ, với secure boot được kích hoạt và hồ xác thực nền tảng bằng cách sử dụng PCR 7 và 11. Chúng ta cũng sẽ bật xác thực Windows Hello bằng mật khẩu. Với cách này, ta dự định tái tạo một trường pháp y phù hợp trong đó chúng ta có một máy tính có volume được mã hóa BitLocker (có bảo vệ TPM) chạy Windows 11, trong đó cả mật khẩu người dùng Windows và BitLocker Recovery Key đều không được tiết lộ.
Phương pháp được trình bày chi tiết trong phần 3 đã được áp dụng hiệu quả cho máy tính được mô tả ở trên. Bộ nhớ flash SPI đã bị kết xuất bởi phần mềm với CHIPSEC. Nó đã được xác minh trong UEFITool rằng công nghệ Intel Boot Guard chưa được bật. Cài đặt firmware đã được sửa đổi với RU.efi, vì không có cơ chế bảo vệ ghi. Sau đó, chúng tôi đã đảo ngược ứng dụng Windows Boot Manager UEFI và trích xuất BitLocker Volume Master Key thành công bằng cách gỡ lỗi Intel DCI. Kết quả là, chúng tôi đã thực hiện giải mã và thu được một hình ảnh được giải mã đầy đủ.
Sau đó, chúng tôi đã cố gắng thực hiện quy trình được đề xuất trên máy tính xách tay Lenovo T480 20L6 với CPU Intel Kaby Lake R i5-8350U thế hệ thứ 8 chạy Windows 10 Pro (bản cập nhật 21H2). Mã hóa BitLocker cũng được kích hoạt trên ổ đĩa bằng cách sử dụng TPM làm trình bảo vệ, với tính năng secure boot bị vô hiệu hóa và hồ xác thực nền tảng bằng cách sử dụng PCR 0, 2, 4 và 11. Xác thực Windows Hello đã được đặt mật khẩu.
Chúng tôi đã sử dụng một trình lập trình flash SPI để đọc hình ảnh firmware và sửa đổi các cài đặt liên quan đến DCI được tìm thấy, vì không thể thực hiện các thay đổi firmware bằng phần mềm do tính năng chống ghi. Trong UEFITool, Intel Boot Guard được xác minh là đã được bật trên máy tính này. Dù vậy, các vùng NVRAM chứa các biến UEFI không được bảo vệ bởi chuỗi tin cậy của Intel Boot Guard. Tuy nhiên, các thay đổi đã thực hiện đối với firmware không có tác dụng kích hoạt tính năng Intel DCI. Do đó chúng tôi đã không thể áp dụng hiệu quả phương pháp trên máy tính này.
Trên cả hai bài kiểm tra, việc sửa đổi cài đặt firmware không kích hoạt chế độ khôi phục BitLocker.
-
Kết luận
Trong bài viết này, chúng tôi đã giới thiệu một phương pháp pháp y để trích xuất Volume Master Key (VMK) từ các ổ đĩa BitLocker được TPM bảo vệ bằng cách sử dụng công nghệ Intel DCI và các kỹ thuật thiết kế đảo ngược. Chúng tôi đã chỉ ra cách bật Intel DCI trong firmware, đảo ngược và phân tích ứng dụng Windows Boot Manager UEFI, và cuối cùng là cách gỡ lỗi máy tính đích bằng cáp gỡ lỗi USB 3 để lấy VMK từ RAM, cho phép giải mã volume được bảo vệ.
Phương pháp này đã được áp dụng thành công trên máy tính có bộ xử lý Intel thế hệ thứ 7 chứa volume được mã hóa BitLocker với tính năng bảo vệ TPM và Windows 11 Pro. Chúng tôi đã có thể giải mã hoàn toàn volume BitLocker bằng VMK thu được và có được quyền truy cập dữ liệu. Do đó, các chuyên gia pháp y máy tính có thể truy cập và phân tích pháp y bằng chứng mà không cần biết về mật khẩu người dùng Windows hoặc khóa khôi phục BitLocker.
Chúng tôi cũng đã trình bày một trường hợp không thành công trong đó việc sửa đổi cài đặt liên quan đến DCI trong firmware không ảnh hưởng đến việc kích hoạt Intel DCI. Do đó, chúng tôi nhận ra rằng sự thành công của phương pháp này chủ yếu phụ thuộc vào khả năng kích hoạt Intel DCI trong máy tính đích. Intel DCI là một công nghệ rất tốt. Vì lý do bảo mật, các máy tính gần đây cung cấp một số cơ chế bảo vệ ở cấp độ phần cứng và phần mềm để ngăn chặn các mối đe dọa liên quan đến firmware, có thể bao gồm việc vô hiệu hóa Intel DCI trong các việc sản xuất PC.
Liên quan đến kỹ thuật đảo ngược ứng dụng Windows Boot Manager UEFI, chúng tôi hiểu rằng các phiên bản mới của tệp nhị phân này có thể phát sinh, yêu cầu phân tích mới. Tuy nhiên, các ý tưởng được trình bày trong bài viết này vẫn có thể được sử dụng để định vị vùng mã nơi thực hiện thao tác hủy niêm phong TPM, nghĩa là VMK được giải mã.
Trong tương lai, chúng ta nên xem xét việc xác minh tính khả thi của việc kích hoạt Intel DCI trong nhiều loại máy tính, bao gồm các hệ thống có Intel Boot Guard và các công nghệ bảo mật cấp firmware khác. Việc áp dụng các phương pháp đã được trình bày trong bài cho các volume được bảo vệ bằng TPM với các hồ sơ xác thực PCR khác nhau cũng nền được xem xét.