suaphancung.com

TrustZone là gì và Samsung Knox sử dụng nó như thế nào?

Knox là nền tảng bảo mật cấp quốc phòng của Samsung được tích hợp trong các thiết bị di động mới nhất của họ.
Để giữ an toàn cho các thiết bị, Knox sử dụng kiến ​​trúc bộ xử lý được gọi là ARM TrustZone.
Trong TrustZone, có hai thế giới, Thế giới bình thường và Thế giới an toàn.
Hầu như tất cả các phần mềm điện thoại thông minh như chúng ta biết ngày nay vẫn chạy trong Thế giới bình thường.
Thế giới bảo mật được dành riêng cho các tính toán có độ nhạy cao và được Knox sử dụng rộng rãi để bảo vệ dữ liệu bí mật của doanh nghiệp.

TrustZone bao gồm ba thành phần cốt lõi: (TrustZone consists of three core components)
TIMA KeyStore Chứng thực (TIMA KeyStore)
bảo vệ hạt nhân thời gian thực (Real-time Kernel Protection
Attestation)

1 Likes

Tìm hiểu sâu về TrustZone của Samsung phần 1

  • Phần 1 : Tổng quan chi tiết về các thành phần TrustZone của Samsung
  • Phần 2 : Phát triển công cụ cho nghiên cứu kỹ thuật đảo ngược và lỗ hổng
  • Phần 3 : Khai thác lỗ hổng để đạt được mã thực thi trong EL3 trên thiết bị Samsung

Giới thiệu

Với việc sử dụng rộng rãi các thiết bị di động và các hệ thống nhúng, mối quan tâm bảo mật là ưu tiên mà các nhà cung cấp cần giải quyết. Kiến trúc truyền thống của một thiết bị chạy một hệ điều hành thôi là chưa đủ. Trong mô hình này, một lỗ hổng duy nhất trong kernel có thể dẫn đến sự thỏa hiệp của toàn bộ hệ thống. Để đối phó với những vấn đề này, các nhà cung cấp đã hình thành các công nghệ và phương tiện mới để tăng cường bảo mật cho các thiết bị của họ. Trong số các công nghệ này là Môi trường thực thi đáng tin cậy , hoặc TEE.

Môi trường thực thi tin cậy là vùng an toàn trong CPU. Nó thực thi đồng thời với hệ điều hành chính, trong một môi trường bị cô lập. Nó đảm bảo rằng dữ liệu và mã thực thi bên trong TEE duy trì tính toàn vẹn và bảo mật của chúng. Hệ thống tin cậy song song này được hình thành để bảo mật hơn môi trường thông thường, được gọi là Môi trường thực thi phong phú , hoặc REE, bằng cách sử dụng cả các thành phần phần cứng và phần mềm để bảo vệ mã và dữ liệu giống nhau.

Loạt bài viết này tập trung vào TEE do Samsung triển khai bằng ARM TrustZone , đáng chú ý nhất là trong các thiết bị Galaxy cũ của họ (S6 đến S9). Sau khi giới thiệu các khái niệm khác nhau vốn có của công nghệ TrustZone trong phần đầu tiên, bài viết này sẽ đưa ra lời giải thích về các thành phần và hoạt động bên trong của TrustZone của Samsung. Một bài viết sau đây sẽ được dành riêng để trình bày các công cụ khác nhau được phát triển để giảm bớt các quy trình kỹ thuật và khai thác ngược. Cuối cùng, bài viết thứ ba sẽ trình bày các lỗ hổng khác nhau ảnh hưởng đến các thành phần bảo mật trong TrustZone và trình bày cách chúng có thể được khai thác để thực thi mã trong EL3, đặc quyền cao nhất trong kiến ​​trúc ARM.

Công nghệ ARM TrustZone

Trạng thái hiện tại của bảo mật nhúng

Kiến trúc truyền thống của việc tách một hệ điều hành thành vùng người dùng và không gian kernel đã thấy nhiều cải tiến về bảo mật trong suốt những năm qua. Tuy nhiên, nó dường như không đủ. Các nhà phát triển đã cố gắng tạo bề mặt tấn công trên kernel càng ít càng tốt, tăng cường xác minh trên tất cả dữ liệu do người dùng kiểm soát, tuy nhiên lỗ hổng vẫn có thể được tìm thấy và việc khai thác của họ có thể làm tổn hại toàn bộ hệ thống. Từ những quan sát này, các nhà nghiên cứu và nhà phát triển đã tự hỏi làm thế nào một hệ thống có thể được bảo vệ tốt hơn, ngay cả khi hạt nhân bị hỏng khi khởi động hoặc khi chạy.

Để giải quyết vấn đề hỏng nhân khi khởi động, một giải pháp khả thi sẽ là cơ chế Khởi động an toàn để ngăn chặn mã trái phép thực thi trong quá trình tải khởi động (ví dụ: giai đoạn bộ tải khởi động, hệ điều hành, v.v.). Khởi động an toàn sử dụng các giai đoạn khác nhau để khởi động một hệ thống và mỗi trong số chúng có trách nhiệm tải, thực thi và xác minh chữ ký mã hóa của giai đoạn tiếp theo. Tuy nhiên, sử dụng quy trình này đòi hỏi giai đoạn đầu tiên phải được tin tưởng hoàn toàn. Thông thường, các nhà cung cấp viết bộ hướng dẫn đầu tiên này trực tiếp vào silicon của Hệ thống trên Chip (SoC), khiến nó gần như không thể sửa đổi. Giai đoạn bất biến và đáng tin cậy đầu tiên này được gọi là Bootrom .

Thời gian chạy lỗi có thể được giảm thiểu bằng cách sử dụng một trình ảo hóa có thể theo dõi nhiều hệ điều hành đang chạy đồng thời, như trong hình dưới đây. Hypervisor có thể phát hiện sự thỏa hiệp và đảm bảo sự bảo vệ của các hệ thống chạy dưới sự giám sát của chúng.

Tuy nhiên, hypanneror và các hệ điều hành khách đều có chung bộ nhớ vật lý. Sự tách biệt giữa các môi trường này chỉ được thực hiện thông qua các cơ chế phần mềm. Theo mô hình này, các vấn đề bảo mật như thoát máy ảo, tham nhũng hypanneror, v.v. không thể ngăn chặn được. Nếu tính đến những hạn chế này, một cải tiến có thể có của hệ thống sẽ là cách ly tất cả các thành phần ở mức phần cứng và do đó được tạo ra Môi trường thực thi tin cậy hoặc TEE. Các môi trường an toàn và đáng tin cậy này sử dụng các cơ chế cách ly phần cứng trên toàn hệ thống để phân tách tài nguyên của CPU và các thiết bị ngoại vi khác. TrustZone, một TEE do ARM triển khai, sẽ được giải thích chi tiết trong các phần sau. Trong khi đó, một cái nhìn tổng quan về sự phát triển của các biện pháp bảo vệ trên toàn hệ thống có thể được tìm thấy trong hình dưới đây.

TEEs hiện có

Một số loại TEE có thể được tìm thấy trên thị trường, nhưng chúng có thể được chia thành hai loại được đưa ra dưới đây.

  • các TEE được sử dụng trên các nền tảng máy tính để bàn, như Intel SGX. Vì máy tính để bàn không phải là chủ đề chính của bài viết này, những triển khai này sẽ không được chi tiết.
  • các TEE được sử dụng trên các nền tảng di động, như TrustZone, SEP , Titan M và các nền tảng khác.

Danh mục cuối cùng có thể được chia nhỏ trong một số lựa chọn thực hiện:

Triển khai bộ xử lý ảo, chẳng hạn như ARM TrustZone, nơi tài nguyên CPU và phần cứng được chia sẻ giữa trạng thái Bảo mật và Không bảo mật

Triển khai bộ xử lý On-Soc, như Apple SEP, trong đó hai CPU, một Bảo mật và một Không bảo mật, chia sẻ tài nguyên phần cứng

Triển khai Bộ đồng xử lý bên ngoài, như Google Titan M, nằm bên ngoài SoC và không thể truy cập tài nguyên phần cứng trong SoC

Loạt bài đăng trên blog này sẽ chỉ tập trung vào công nghệ ARM TrustZone.

Kiến trúc phần mềm ARM TrustZone

Phần này giới thiệu công nghệ ARM TrustZone và chi tiết các thành phần khác nhau và các triển khai có thể có của nó. Bài viết này không nhằm mục đích cung cấp một bài thuyết trình đầy đủ về ARM TrustZone. Trong phần còn lại của bài đăng trên blog này, các chi tiết được cung cấp sẽ chủ yếu liên quan đến hương vị ARMv8.

TrustZone là sự cách ly phần cứng trên toàn hệ thống đạt được bằng cách tách CPU thành Thế giới bình thườngThế giới bảo mật . Các bình thường thế giới chứa và thi hành các hệ điều hành chính, còn gọi là hệ điều hành giàu (ví dụ như Android, GNU / Linux, vv), mà người sử dụng chủ yếu tương tác với và thực hiện tất cả các nhiệm vụ không nhạy cảm. Hệ điều hành này không tin tưởng vào thiết kế, do đó tất cả dữ liệu được truyền từ Thế giới bình thường cần được kiểm tra kỹ lưỡng trước khi sử dụng. Song song tồn tại Thế giới bảo mật , chạy mã đáng tin cậy và lưu trữ / xử lý dữ liệu nhạy cảm.

Trong các phần sau, Thế giới bình thườngThế giới an toàn sẽ được viết tắt lần lượt là NAd và SWd.

Để CPU biết được nó chạy ở trạng thái an toàn hay không bảo mật, kiến ​​trúc ARM sử dụng bit quan trọng nhất của Thanh ghi cấu hình bảo mật hoặc SCR, được đưa ra trong hình dưới đây.

Sự tách biệt có hiệu quả, hệ thống hiện cần một phương tiện liên lạc an toàn giữa hai thế giới. Để đáp ứng yêu cầu này, ARM đã giới thiệu Chế độ màn hình , chịu trách nhiệm chuyển đổi giữa SWd và NWd. Nó chạy trong trạng thái an toàn ở mức thực thi ARM cao nhất.

Có nhiều cách khác nhau để vào Chế độ màn hình . Từ NWd, nó có thể được nhập bằng cách sử dụng Lệnh theo dõi an toàn hoặc SMC , thông qua một ngắt hoặc bằng cách đưa ra một ngoại lệ Abort bên ngoài , như thể hiện trong hình tiếp theo. Các cơ chế tương tự có thể được sử dụng từ SWd ngoài việc ghi trực tiếp vào Thanh ghi trạng thái chương trình hiện tại hoặc CPSR , chỉ có thể được thực hiện bởi các quy trình đặc quyền trong SWd.

Để có được mức độ chi tiết tốt hơn trong quản lý quyền, ARM sử dụng các Cấp độ ngoại lệ khác nhau đi từ EL0 đến EL3 (EL0 là đặc quyền ít nhất và EL3 nhiều nhất). Tổng quan về việc sử dụng các mức ngoại lệ này được đưa ra trong hình dưới đây.

ARM cung cấp tất cả các công cụ cần thiết cho các nhà cung cấp để họ xây dựng triển khai TrustZone của riêng họ. Có một vài hạn chế và việc triển khai SWd có thể bao gồm từ một thư viện đơn giản hoạt động như một API, như trong Nintendo Switch, đến một hệ điều hành chính thức, như các hệ thống do Samsung và Qualcomm triển khai, thông qua các giải pháp trung gian mà chúng tôi có chưa bao giờ gặp phải:

Phần sau đây tập trung vào việc triển khai TrustZone của Samsung, các thành phần khác nhau và hoạt động bên trong của chúng.

Kỹ thuật đảo ngược TrustZone của Samsung

Tổng quan về triển khai của Samsung

Samsung là một trong những OEM lớn và, do đó, cố gắng cập nhật các công nghệ hiện tại và cung cấp càng nhiều tính năng càng tốt cho khách hàng của họ. Hiện tại họ đã sử dụng TrustZone trong các thiết bị của mình được vài năm, bắt đầu với Galaxy S3. Trên các thiết bị Galaxy dựa trên Exynos, họ đã bắt đầu bằng cách sử dụng triển khai do Qualcomm cung cấp trước khi chuyển sang thiết bị của riêng họ (bắt đầu từ các mẫu S6 cho Galaxy).

Nói chung, TrustZone được sử dụng để truy cập các tính năng được hỗ trợ bởi phần cứng và để thực hiện các hoạt động nhạy cảm theo cách được giám sát (ví dụ: công cụ mã hóa, lưu trữ thông tin đăng nhập, v.v.). Samsung sử dụng rất nhiều TrustZone cho Samsung Knox , một hộp công cụ bảo mật toàn hệ thống do Samsung phát triển. Trong số các thành phần khác nhau cấu thành Knox, API lưu trữ an toànKiến trúc đo lường toàn vẹn dựa trên TrustZone hay gọi tắt là TIMA, là hai ví dụ dựa vào TrustZone để thực hiện các hoạt động của chúng. Knox cũng đóng vai trò là nền tảng để cung cấp các dịch vụ khác nhau như Samsung Pay, Samsung Pass, v.v.

Việc triển khai hiện tại, được thảo luận chi tiết hơn trong các phần Tin cậy của Kinonic và ARM Firmware đáng tin cậy (ATF) và Màn hình của Samsung , sử dụng một phiên bản sửa đổi của Arm Trusted Firmware , cho Secure Monitor và một hệ điều hành đáng tin cậy có tên Kinibi , được phát triển bởi Trustonic.

Samsung sử dụng dự án ATF để triển khai Màn hình an toàn của họ và sửa đổi một số phần của nó để làm cho nó phù hợp với nhu cầu của họ. Họ đã thêm các dịch vụ thời gian chạy riêng được sử dụng để cung cấp các trình xử lý SMC tùy chỉnh mà không cần phải chạm vào các dịch vụ hiện tại. Ví dụ: một trong những trình xử lý SMC được thêm vào chịu trách nhiệm đăng ký địa chỉ cơ sở vectơ của Kinibi cho các SMC được xử lý bởi Hệ điều hành đáng tin cậy.

Như đã giải thích trước đó, Kinibi, mà loạt bài viết này tập trung vào, có sẵn trên các thiết bị cũ hơn (ví dụ từ S6 đến S9 cho các mẫu Galaxy). Tuy nhiên, trong các mẫu gần đây hơn như Galaxy S10, Samsung đã từ bỏ Kinibi cho hệ điều hành đáng tin cậy của riêng họ có tên TEEGRIS. Tại thời điểm viết và theo như chúng tôi biết, hiện tại có rất ít tài nguyên có sẵn về chủ đề này ngoài một bài đăng trên blog của Alexander Tarasikov TEEGRIS.

Các phần sau đây cung cấp thêm chi tiết về việc triển khai TrustZone dựa trên Kinibi và các thành phần khác nhau mà nó được tạo ra.

Ứng dụng đáng tin cậy

Ứng dụng đáng tin cậy , hoặc ủy thác, là đối tác SWd với các ứng dụng người dùng thông thường được tìm thấy trong NWd. Vì các chức năng hệ điều hành đáng tin cậy bị hạn chế, đặc biệt là trong trường hợp vi nhân, các ứng dụng đáng tin cậy có thể được sử dụng để mở rộng chúng. Nó cũng cung cấp một phương tiện để hạ thấp các đặc quyền cần thiết bởi một quy trình để thực hiện một nhiệm vụ nhất định.

Trustlets được phát triển bởi các nhà cung cấp phần mềm đáng tin cậy, những người cần quyền truy cập vào các khả năng của TrustZone để tăng cường bảo mật cho các ứng dụng NWd của họ. Ví dụ: các ứng dụng phát trực tuyến có thể cần sử dụng DRM để bảo vệ nội dung số và DRM này có thể được triển khai trong một ứng dụng đáng tin cậy, giống như Widevine, do đó giữ các khóa giải mã khỏi NWd.

Định dạng MCLF

Các ủy thác được sử dụng trong Trustzone của Samsung là các tệp thực thi sử dụng định dạng tệp độc quyền có tên là Mobicore Loadable Format , hoặc MCLF. Định dạng này khá đơn giản, rất hữu ích để mô phỏng các ủy thác vì nó sẽ được thảo luận trong phần dành riêng cho nghiên cứu lỗ hổng.

Tiêu đề MCLF chứa nhiều thông tin về Trustlet, bao gồm, nhưng không giới hạn ở:

  • loại của nó;
  • UUID của nó;
  • điểm vào của nó;
  • các địa chỉ và kích cỡ của các phân khúc của nó.

Mỗi Trustlet bao gồm ba phân khúc:

  • các văn bản phân đoạn có chứa mã của trustlet;
  • các dữ liệu có chứa dữ liệu khởi tạo của nó;
  • các bss phân đoạn có chứa dữ liệu uninitialised của nó.

Sau dữ liệu phân đoạn và tiêu đề MCLF, tệp nhị phân chứa khóa công khai được nhúng và một đốm chữ ký. Khi một Trustlet đang được tải vào TEE, hàm băm của khóa chung được so sánh với hàm băm nhúng trong tệp nhị phân TZOS, sau đó chữ ký của Trustlet được xác minh. Cơ chế này ngăn các nhà phát triển trái phép chạy mã của riêng họ trong TrustZone, chỉ những nhà cung cấp đáng tin cậy mới có thể nhận được các ủy thác của họ để được ký bởi OEM.

Lưu ý: để giảm bớt quá trình đảo ngược của các ứng dụng đáng tin cậy, trình tải IDA Pro cho các tệp nhị phân MCLF được viết bởi Gassan Idriss có thể được sử dụng IDA_LOADER . Một trình tải cũng được phát triển cho GHIDRA và sẽ được giới thiệu trong bài đăng trên blog thứ hai.

Giao tiếp với một Trustlet

Giao tiếp giữa NWd và SWd được thực hiện bằng cách sử dụng bộ đệm Phần mềm (SWI) và Bộ nhớ chia sẻ thế giới (WSM). SWI cho phép chuyển việc thực thi giữa hai thế giới, trong khi bộ đệm WSM cho phép truyền dữ liệu. Theo thuật ngữ của Trustonic, các bộ đệm được chia sẻ này được gọi là TCI khi liên lạc với một ủy thác và DCI khi giao tiếp với trình điều khiển an toàn, một loại ứng dụng đáng tin cậy đặc biệt với các đặc quyền cao hơn được nêu chi tiết trong phần Trình điều khiển an toàn .

Thư viện chia sẻ của McLib

Một số chức năng có thể được chia sẻ giữa các ủy thác và không cần phải được phát triển lại bởi mọi nhà cung cấp. Để kết thúc này, Trustonic cung cấp một tương đương với libc được gọi là McLib (chắc chắn cho Thư viện MobiCore ). Nó được sử dụng bởi các ủy thác và trình điều khiển an toàn như nhau, nhưng các quyền được kiểm tra để ngăn chặn các ủy thác truy cập các chức năng đặc quyền. Nó thực hiện các chức năng như tlApiMalloc , tlApiRandomGenerateData , v.v. Các chức năng này thường được gọi là tlApi cho Trustlets và drApi cho trình điều khiển an toàn.

Thư viện này không được tải động bởi các ủy thác. Địa chỉ của trình xử lý của McLib được ghi vào chúng khi tải và sau đó được sử dụng như một chức năng thông thường như được hiển thị trong đoạn mã được đưa ra dưới đây. Số tlApi được truyền vào R0 và các đối số trong phần còn lại của các thanh ghi mục đích chung hoặc trên ngăn xếp, tùy thuộc vào số lượng đối số.

; tlApiLibEntry là các địa chỉ của các McLib handler tlApiWaitNotification MOV . W R1 , # 0x1000 LDR . W R2 , [ R1 , # ( tlApiLibEntry - 0x1000 )] MOV R1 , R0 MOVS R0 , # 6 BX R2

Vòng đời của Trustlet

Các ứng dụng đáng tin cậy có không gian địa chỉ riêng và luôn được tải tại địa chỉ ảo 0x1000 . Một khi họ đang chạy, họ thường theo cùng một luồng thực hiện. Họ bắt đầu bằng cách khởi tạo các thành phần khác nhau, chẳng hạn như ngăn xếp, và sau đó kiểm tra kích thước của bộ đệm TCI được gửi từ NWd. Sau đó, Trustlet đợi các lệnh trong bộ đệm TCI bằng cách sử dụng chức năng McLib tlApiWaitNotification , xử lý các lệnh này cho phù hợp và gửi lại kết quả cho NWd bằng tlApiNotify . Luồng thực hiện này được minh họa trong hình dưới đây.

Từ quan điểm của kẻ tấn công, bề mặt tấn công của toàn bộ ủy thác thường lên tới một trong những người xử lý lệnh. Các trình xử lý này chủ yếu xử lý dữ liệu do người dùng cung cấp và phải kiểm tra kỹ lưỡng rằng mọi đối số được truyền từ NWd đều tôn trọng định dạng mong đợi. Nếu kẻ tấn công có được mã thực thi trong một ủy thác, chúng sẽ không thể làm được gì nhiều. Tuy nhiên, họ sẽ có thể tấn công các quy trình đặc quyền cao hơn, chẳng hạn như chính Kinibi hoặc trình điều khiển an toàn, cả hai đều được thảo luận trong các phần sau.

Trình điều khiển an toàn

Trình điều khiển bảo mật là một hương vị đặc biệt của các ứng dụng đáng tin cậy thực thi trong vùng người dùng Secure World, nhưng với các đặc quyền cao hơn tương đối với các ủy thác. Các đặc quyền bổ sung này giúp giảm khả năng truy cập vào các SVC bổ sung (Cuộc gọi giám sát), chẳng hạn như khả năng ánh xạ phạm vi bộ nhớ vật lý cụ thể, sử dụng các luồng hoặc có thể tạo ra SMC, như chi tiết bên dưới.

Các ủy thác và trình điều khiển an toàn có thể giao tiếp bằng IPC và bằng cách sắp xếp các tham số được gửi. Trình điều khiển an toàn phục vụ như giao diện cho các ủy thác để truy cập các thiết bị ngoại vi một cách có kiểm soát. Để truy cập các thiết bị ngoại vi, trình điều khiển an toàn cần có khả năng ánh xạ bộ nhớ vật lý của chúng, điều này có thể thực hiện được bằng cách sử dụng các chức năng drApiMapPhys , drApiUnmap , drApiVirt2Phys , v.v.

Một tính năng đặc biệt khác là trình điều khiển là các ứng dụng đa luồng. Các chủ đề phổ biến gặp phải là:

  • một chủ đề chính hoạt động như một xử lý ngoại lệ;
  • một luồng DCI xử lý các tin nhắn NWd;
  • một tin nhắn hệ thống / ủy thác xử lý luồng IPC;
  • một xử lý luồng ISR bị gián đoạn.

Chủ đề chính

Chủ đề này thường bắt đầu bằng cách khởi tạo tài nguyên phần cứng. Nó cũng chịu trách nhiệm bắt đầu tất cả các chủ đề khác được mô tả trong phần này. Nếu một trong các luồng đang chạy tăng một ngoại lệ, luồng chính sẽ xử lý nó và khởi động lại luồng nếu cần.

Chủ đề DCI

Có thể liên lạc với một trình điều khiển an toàn trực tiếp từ NWd. Hệ thống được sử dụng tương tự như hệ thống được ủy thác triển khai và dựa trên vùng bộ nhớ chia sẻ thế giới gọi là bộ đệm DCI. Các lệnh và đối số được gửi trực tiếp từ NWd trong bộ đệm này và một hệ thống thông báo tương tự dựa trên drApiIpcSigWait và drApiNotify được sử dụng. Các lỗ hổng trong trình xử lý này có thể được khai thác để có quyền truy cập trực tiếp vào trình điều khiển an toàn từ NWd mà không cần thông qua một ủy thác.

Chủ đề IPC

Khi thiết kế ngược một trình điều khiển an toàn, trình xử lý IPC thường là trình điều khiển thú vị. Nó có thể được xác định bằng lệnh gọi drApiIpcCallToIPCH , hàm drApi đang chờ tin nhắn IPC. Các đối số được truyền vào một bộ đệm duy nhất để tôn trọng định dạng dữ liệu theo yêu cầu của IPC. Khi nhận được IPC từ một ủy thác, bộ nhớ của ủy thác cần được ánh xạ vào không gian địa chỉ của trình điều khiển an toàn, sử dụng hàm drApiMapClientAndParams , để có thể truy cập được. Hơn nữa, nếu con trỏ được gửi dưới dạng đối số, chúng cần được kiểm tra và dịch sang không gian địa chỉ của trình điều khiển để ngăn chặn truy cập ngoài băng. Hoạt động này có thể được thực hiện bằng cách gọi drApiAddrTranslateAndCheck .

Chủ đề ISR

Chuỗi này chỉ đơn giản là gắn vào một ngắt bằng cách sử dụng drApiIntrAttach và chờ cho một ngắt xảy ra bằng cách gọi drApiWaitForIntr . Việc tách ra khỏi một ngắt được thực hiện bằng cách gọi drApiIntrDetach .

Hệ điều hành đáng tin cậy của Trustonic Kinibi

Kinibi là một hạt nhân siêu nhỏ 32 bit được Trustonic phát triển và được triển khai trong TrustZone của Samsung với tư cách là hệ điều hành đáng tin cậy của nó. Mặc dù các thiết bị Samsung Galaxy dựa trên kiến ​​trúc 64 bit, Kinibi vẫn có thể chạy nhờ chế độ tương thích ARMv8 AArch32. Phần này mô tả chi tiết kiến ​​trúc của Kinibi trên các thiết bị từ Samsung Galaxy S6 đến Galaxy S9. Nền tảng của nghiên cứu này dựa trên bài nói chuyện của Ekoparty và một loạt các bài đăng trên blog, có tên Unbox Your Phone và được phát hành bởi Daniel Komaromy UNBOX, trình bày các phần của nội bộ Kinibi.

Vì Kinibi là một hạt nhân siêu nhỏ, nó bao gồm nhiều thành phần. Các thành phần này được tham chiếu trong một bảng gọi là tiêu đề hình ảnh và được tìm thấy trong tệp nhị phân của Kinibi, như trong hình dưới đây.

Bảng này có thể được tìm thấy trong tệp nhị phân bằng cách tìm kiếm điểm đánh dấu “t-base” hoặc “tee”. Phần tử đầu tiên của bảng này đại diện cho chính TEE-OS trong khi các phần tử khác là các thành phần bên trong TEE-OS. Các phần tử được lưu trữ trong bảng này có thể được biểu diễn bằng cấu trúc được cho trong đoạn trích bên dưới.

phần tử cấu trúc { tên char [ 8 ]; int bù ; kích thước int ; char đệm [ 0x10 ]; }

Mô tả ngắn gọn về các thành phần này được đưa ra trong danh sách dưới đây.

  • mtk: Micro T-base Kernel, kernel thực tế, như tên gọi của nó, chịu trách nhiệm thực hiện các hoạt động đặc quyền;
  • img-hdr: bảng mô tả các yếu tố của Kinibi;
  • mclib: thư viện chia sẻ thực hiện các chức năng được sử dụng thường xuyên, tương tự như libc;
  • rtm: các Run-Time quản lý ;
  • drcrypt: các driver Crypto ;
  • tlproxy: các tập tin an toàn hệ thống thư viện cho trustlets;
  • sth2: các Secure File hệ thống cho các lái xe an toàn;
  • (Samsung S9) rpmb: thành phần này hiện chưa rõ.

Toàn bộ kiến ​​trúc được minh họa trong hình tiếp theo.

Quản lý thời gian

Một trong những thành phần quan trọng và quan trọng nhất là Run-Time Manager , hay viết tắt là RTM. RTM là một quy trình không gian người dùng SWd đặc biệt tương đương với quy trình init trên Linux. RTM luôn là quy trình đầu tiên được Kinibi bắt đầu và sau đó được giao nhiệm vụ quản lý tất cả các quy trình khác. RTM cũng chịu trách nhiệm cho một số hoạt động, chẳng hạn như:

  • bắt đầu quá trình;
  • thông báo cho các ủy thác của dữ liệu đến từ NWd;
  • xử lý thông tin liên lạc giữa quá trình;
  • thực hiện Giao thức điều khiển Mobicore .

Trong số những thứ khác, RTM chịu trách nhiệm cho tất cả các cơ chế giao tiếp của Kinibi. Các cơ chế này được mô tả trong phần sau.

Truyền thông nội bộ và bên ngoài của Kinibi

Vì Kinibi là một hạt nhân siêu nhỏ, IPC là một yêu cầu cơ bản trong thiết kế của nó. Nó cho phép tất cả các thành phần được mô tả trong phần trước tương tác với nhau và trao đổi thông tin. Kinibi cũng cần liên lạc với NWd. Để đáp ứng cả hai nhu cầu này, Trustonic đã triển khai hai kênh liên lạc trong RTM, được giải thích bên dưới, sử dụng các cơ chế khác nhau được cung cấp bởi kiến ​​trúc ARM.

Kênh liên lạc với NWd được gọi là Giao diện truyền thông Mobicore , hoặc MCI, và dựa trên một giao thức tùy chỉnh được gọi là Giao thức điều khiển Mobicore , hoặc MCP. Nó được xây dựng trên sáu fastcalls SMC được liệt kê dưới đây.

  • Fastcalls có thể được gửi trực tiếp đến màn hình để chuyển trạng thái bộ xử lý:
    • MC_SMC_N_YIELD
    • MC_SMC_N_SIQ
  • Fastcalls SMC có thể được gửi đến RTM:
    • MC_FC_INIT được sử dụng để định cấu hình hàng đợi gửi và nhận thông báo;
    • MC_FC_INFO được sử dụng để nhận thông tin khác nhau về hệ thống, chẳng hạn như thông tin phiên bản của Kinibi;
    • MC_FC_SWAP_CPU được sử dụng để di chuyển Kinibi đến lõi CPU cụ thể;
    • MC_FC_MEM_TRACE được sử dụng để bật theo dõi SWd qua bộ nhớ.

MCI dựa vào bộ đệm được chia sẻ được gọi là Hàng thông báo . Các SMC chỉ được sử dụng để thiết lập các bộ đệm này và để thông báo cho người giám sát an toàn về chúng. Thông báo sau đó được chuyển đến Kinibi, sau đó chuyển nó sang RTM. Các lệnh MCP từ NWd được thêm vào các hàng đợi này và sau đó được RTM nhận và giải thích để hành động trên các thành phần bảo mật đang chạy trong TrustZone. Nó cho phép RTM biết liệu nó có cần tải, tạm dừng hoặc tiếp tục một ủy thác, bản đồ hoặc bỏ sơ đồ bộ nhớ chia sẻ bổ sung, v.v.

Kênh truyền thông nội bộ không có tên cụ thể và cung cấp phương tiện cho IPC. Kênh này dựa trên SVC 0x11 .

Phần mềm tin cậy ARM và Màn hình của Samsung

Như đã giải thích trước đó, việc triển khai được Samsung sử dụng cho màn hình của họ dựa trên Phần mềm tin cậy ARM . Nó có thể được tìm thấy trong Samsung Bootloader , hay SBOOT, một bộ tải khởi động độc quyền được Samsung phát triển cho các thiết bị dựa trên Exynos. ATF khá phức tạp, tuy nhiên một phân tích được thực hiện bởi Fernand Lone Sang có sẵn trên blog của Quarkslab SBOOT . Độc giả quan tâm được khuyến khích đọc bài viết của mình, vì nó cung cấp chi tiết thú vị về nội bộ của màn hình. Nó cũng giải thích cách Kinibi có thể được định vị và trích xuất từ ​​nhị phân SBOOT.

Đối với các thiết bị chạy ở trạng thái bộ xử lý AArch64, ATF xác định 5 giai đoạn liên tiếp cho bộ tải khởi động:

  • Giai đoạn 1 (BL1) : AP ROM đáng tin cậy;
  • Giai đoạn 2 (BL2) : Phần mềm khởi động đáng tin cậy;
  • Giai đoạn 3-1 (BL31) : Phần mềm thời gian chạy EL3;
  • Giai đoạn 3-2 (BL32) : Tải trọng an toàn-EL1 (tùy chọn);
  • Giai đoạn 3-3 (BL33) : Phần sụn không đáng tin cậy.

Một số triển khai có thể nhúng cả BL1 và BL2 vào bootrom hoặc có thể không cần đến chúng. ATF xử lý trường hợp sử dụng này bằng cách cho phép một bảng đặt lại trực tiếp thành BL31.

Các thành phần SBOOT được liệt kê dưới đây và một hình minh họa cũng có sẵn trong hình tiếp theo.

  • BL1: khởi động Exynos;
  • BL31: phần mềm thời gian chạy EL3 dựa trên Phần mềm tin cậy Arm mã nguồn mở (ATF);
  • BL33: Hệ điều hành môi trường thực thi tin cậy (TEE-OS), phần sụn chạy trong Thế giới bảo mật;
  • BL33: bộ tải khởi động dựa trên U-boot cho bộ tải khởi động Android NWd.

Sau khi bài viết của Fernand được phát hành, việc triển khai màn hình đã được thay thế, bắt đầu từ Samsung Galaxy S8, bằng một phần entropy cao, cho thấy nó đã được mã hóa. Không rõ liệu đó có phải là ý định của Samsung ở nơi đầu tiên hay chỉ đơn giản là một phản ứng sau thực tế để ngăn chặn nghiên cứu sâu hơn về chủ đề này. Để có thể đọc mã của màn hình, việc khai thác EL3 là cần thiết hoặc ít nhất là một thói quen có khả năng đọc bộ nhớ vật lý tùy ý.

Trong phần Kinibi đáng tin cậy của hệ điều hành Trustonic, một lời giải thích ngắn gọn đã được Samsung đưa ra về việc triển khai Dịch vụ thời gian chạy của riêng họ , được đăng ký sử dụng cấu trúc được đưa ra trong đoạn trích sau.

typedef struct rt_svc_desc { uint8_t start_oen ; uint8_t end_oen ; uint8_t CALL_TYPE ; const char * tên ; rt_svc_init_t init ; rt_svc_handle_t xử lý ; } rt_svc_desc_t ;

Các cấu trúc này cung cấp một trình xử lý cho các SMC tùy chỉnh. Một SMC được tham chiếu bởi một OEN, viết tắt của Sở hữu số thực thể . Cấu trúc xác định một phạm vi số OEN sẽ được xử lý bởi trình xử lý cụ thể này. Nó sẽ được sử dụng sau này, trong phần dành riêng cho việc khai thác trong EL3 trong một bài viết sắp tới, trong đó một trình xử lý SMC sẽ được sửa đổi để đạt được việc thực thi mã.

Phần kết luận

Trong phần đầu tiên này, chúng tôi đã giải thích các thành phần khác nhau của TrustZone của Samsung dựa trên Kinibi. Mặc dù chủ yếu là lý thuyết, bài viết này xây dựng nền tảng cho các phần tiếp theo của loạt bài này.

Trong bài viết sau, chúng tôi sẽ trình bày các công cụ được phát triển trong nghiên cứu này và cách chúng được sử dụng để thiết kế đảo ngược và khai thác các thành phần TrustZone dễ dàng hơn.