Tổng quan về cơ chế bảo mật của macOS
Trước hết, hãy bắt đầu bằng cách phác thảo bộ cơ chế bảo mật trong macOS với mô tả ngắn gọn về từng cơ chế như sau:
1. Keychain: Trình quản lý mật khẩu mặc định.
2. System Integrity Protection (SIP): Đảm bảo tính toàn vẹn của thông tin trong các thư mục và tiến trình dễ bị tấn công.
3. Transparency, Consent and Control (TCC): Kiểm soát truy cập ứng dụng.
4. File Quarantine: Bảo vệ chống lại việc khởi chạy các tệp tin đáng ngờ được tải xuống từ Internet.
5. Gatekeeper: Đảm bảo chỉ những ứng dụng đáng tin cậy mới được phép chạy.
6. Xprotect: Bảo vệ chống phần mềm độc hại dựa trên chữ ký trong macOS.
7. XProtect Remediator: Công cụ tự động phản hồi các mối đe dọa được XProtect phát hiện.
Keychain
Được giới thiệu vào năm 1999, trình quản lý mật khẩu cho macOS vẫn là một thành phần quan trọng trong nền tảng bảo mật của Apple. Keychain cung cấp khả năng lưu trữ tập trung và an toàn cho tất cả các loại thông tin secret: Từ chứng thư số và khóa mã hóa, đến mật khẩu và thông tin đăng nhập. Tất cả tài khoản người dùng và mật khẩu được lưu trữ trong Keychain theo mặc định. Quyền truy cập dữ liệu được bảo vệ bằng mật khẩu chính (master).
Các tệp Keychain nằm trong các thư mục ~/Library/Keychains/, /Library/Keychains/và /Network/Library/Keychains/. Ngoài mật khẩu chính, mỗi tệp có thể được bảo vệ bằng khóa bí mật. Theo mặc định, chỉ chủ sở hữu của bản sao Keychain tương ứng và quản trị viên mới có quyền truy cập vào các tệp này. Ngoài ra, các tệp được mã hóa bằng thuật toán AES-256-GCM đáng tin cậy. Điều này đảm bảo mức độ bảo vệ cao, ngay cả khi có truy cập vật lý vào hệ thống.
Tuy nhiên, các cuộc tấn công vào trình quản lý mật khẩu macOS vẫn có thể xảy ra. Có những tiện ích chuyên dụng, chẳng hạn như Chainbreaker, được thiết kế để trích xuất dữ liệu từ các tệp Keychain. Với quyền truy cập vào chính tệp và mật khẩu của nó, Chainbreaker cho phép kẻ tấn công thực hiện phân tích cục bộ và giải mã toàn bộ dữ liệu mà không cần phải kết nối với thiết bị của nạn nhân. Hơn nữa, các công cụ macOS gốc như ứng dụng Keychain Access GUI hoặc dòng lệnh /usr/bin/security có thể bị sử dụng cho mục đích xấu nếu hệ thống đã bị xâm nhập.
Vì vậy, mặc dù kiến trúc Keychain cung cấp khả năng bảo vệ mạnh mẽ, việc kiểm soát truy cập cục bộ, bảo vệ mật khẩu chính và giảm thiểu rủi ro rò rỉ dữ liệu ra bên ngoài hệ thống vẫn rất quan trọng. Dưới đây là một ví dụ về lệnh Chainbreaker: “python -m chainbreaker -pa test_keychain.keychain -o output”.
Như đã đề cập ở trên, tiện ích bảo mật có thể được sử dụng để quản lý dòng lệnh, cụ thể là các lệnh sau:
- security list-keychains: Hiển thị tất cả các tệp Keychain có sẵn.
Hình 1. Tệp Keychain có sẵn cho người dùng
- security dump-keychain -a -d: Dump tất cả các tệp Keychain.
Hình 2. Tệp tin Keychain
- security dump-keychain ~/Library/Keychains/login.keychain-db: Dump một tệp Keychain cụ thể (tệp người dùng được hiển thị làm ví dụ).
Để phát hiện các cuộc tấn công như thế này, yêu cầu cần phải cấu hình ghi log các sự kiện khởi động tiến trình. Phương pháp tốt nhất để thực hiện là sử dụng công cụ ghi log macOS tích hợp sẵn, ví dụ ESF. Trong số các sự kiện cần thiết để phát hiện hoạt động được mô tả, có những sự kiện chứa các lệnh “security dump-keychain” và “security list-keychains”, vì hoạt động này không diễn ra thường xuyên đối với người dùng macOS thông thường. Dưới đây là ví dụ về việc kích hoạt EDR trên sự kiện dump Keychain, cũng như ví dụ về tập luật phát hiện.
Hình 3. Ví dụ về một sự kiện từ Kaspersky EDR
Hình 4. Tập luật phát hiện
SIP
SIP là một trong những cơ chế bảo mật quan trọng nhất của macOS, được thiết kế để ngăn chặn sự can thiệp trái phép vào các tệp và tiến trình hệ thống quan trọng, ngay cả bởi người dùng có quyền quản trị. Được giới thiệu lần đầu tiên trên OS X 10.11 El Capitan, SIP đánh dấu một bước tiến đáng kể trong việc tăng cường bảo mật bằng cách hạn chế khả năng sửa đổi các thành phần hệ thống, bảo vệ chống lại các tác động độc hại tiềm ẩn.
Cơ chế này bảo vệ các tệp và thư mục bằng cách gán các thuộc tính đặc biệt để chặn việc sửa đổi nội dung đối với tất cả mọi người, ngoại trừ các tiến trình hệ thống đáng tin cậy, vốn không thể truy cập được bởi người dùng và phần mềm của bên thứ ba. Đặc biệt, điều này giúp ngăn chặn việc chèn các thành phần độc hại vào các tệp này. Các thư mục sau được bảo vệ theo SIP theo mặc định: /System; /sbin; /bin; /usr(ngoại trừ /usr/local); /Applications (các ứng dụng được cài đặt sẵn); /Library/Application Support/com.apple.TCC.
Danh sách đầy đủ các thư mục được bảo vệ nằm trong tệp cấu hình /System/Library/Sandbox/rootless.conf. Đây chủ yếu là các tệp hệ thống và ứng dụng được cài đặt sẵn, nhưng SIP cho phép thêm các đường dẫn bổ sung.
SIP cung cấp mức độ bảo vệ cao cho các thành phần hệ thống, nhưng nếu có quyền truy cập vật lý vào hệ thống hoặc quyền quản trị viên bị xâm phạm, SIP có thể bị vô hiệu hóa, nhưng chỉ bằng cách khởi động lại hệ thống ở Recovery Mode và sau đó chạy lệnh “csrutil disable” trong thiết bị đầu cuối. Để kiểm tra trạng thái hiện tại của SIP, có thể sử dụng lệnh “csrutil status”.
Hình 5. Output của lệnh csrutil status
Để phát hiện hoạt động này, bạn cần giám sát lệnh csrutil status. Kẻ tấn công thường kiểm tra trạng thái SIP để tìm các tùy chọn khả dụng. Vì chúng triển khai csrutil disable ở Recovery Mode, trước khi tải bất kỳ giải pháp giám sát nào, lệnh này không được ghi lại và do đó việc theo dõi việc thực thi lệnh là vô nghĩa. Thay vào đó, bạn có thể thiết lập giám sát trạng thái SIP và nếu trạng thái thay đổi, hãy gửi cảnh báo bảo mật.
Hình 6. Một ví dụ khác về sự kiện thu thập được từ Kaspersky EDR
Hình 7. Tập luật phát hiện
TCC
Hệ điều hành macOS bao gồm framework TCC, đảm bảo tính minh bạch của các ứng dụng bằng cách yêu cầu sự đồng ý rõ ràng của người dùng để truy cập dữ liệu nhạy cảm và các chức năng hệ thống. TCC được cấu trúc trên cơ sở dữ liệu SQLite (TCC.db), nằm trong cả thư mục dùng chung (/Library/Application Support/com.apple.TCC/TCC.db) và thư mục người dùng riêng lẻ (/Users/
Hình 8. Nội dung của một bảng trong cơ sở dữ liệu TCC
Tính toàn vẹn của các cơ sở dữ liệu này và khả năng bảo vệ chống lại truy cập trái phép được triển khai bằng SIP, khiến việc sửa đổi trực tiếp chúng trở nên bất khả thi. Để can thiệp vào các cơ sở dữ liệu này, kẻ tấn công phải vô hiệu hóa SIP hoặc truy cập vào một quy trình hệ thống đáng tin cậy. Điều này làm cho TCC có khả năng chống nhiễu và thao túng cao.
TCC hoạt động như sau: Bất cứ khi nào một ứng dụng truy cập một chức năng nhạy cảm (camera, micrô, định vị địa lý,...) lần đầu tiên, một cửa sổ tương tác sẽ xuất hiện yêu cầu người dùng xác nhận. Điều này cho phép người dùng kiểm soát việc mở rộng quyền.
Hình 9. Cửa sổ cấp quyền truy cập TCC
Một phương thức tiềm năng để bypass qua cơ chế này là TCC Clickjacking, một kỹ thuật đẩy một cửa sổ đã thay đổi giao diện lên trên cửa sổ yêu cầu quyền, che giấu bản chất thực sự của yêu cầu. Người dùng không hề hay biết nhấp vào nút và cấp quyền cho phần mềm độc hại. Mặc dù kỹ thuật này không khai thác bản thân TCC, nhưng nó cho phép kẻ tấn công truy cập vào các chức năng hệ thống nhạy cảm, bất kể mức độ bảo vệ.
Hình 10. Ví dụ về cửa sổ chồng lên nhau
Kẻ tấn công thường mong muốn có được quyền Full Disk Access hoặc Accessibility, vì chúng có thể cấp quyền truy cập gần như không giới hạn vào hệ thống. Do đó, việc theo dõi các thay đổi TCC.db và quản lý các đặc quyền nhạy cảm vẫn là những nhiệm vụ quan trọng để đảm bảo bảo mật macOS toàn diện.
File Quarantine
File Quarantine là một tính năng bảo mật tích hợp sẵn trên macOS, được giới thiệu lần đầu tiên trong OS X 10.5 Tiger. Tính năng này cải thiện bảo mật hệ thống khi xử lý các tệp được tải xuống từ nguồn bên ngoài. Cơ chế này tương tự như tính năng Mark-of-the-Web trên Windows, giúp cảnh báo người dùng về các mối nguy hiểm tiềm ẩn trước khi chạy tệp đã tải xuống.
Các tệp được tải xuống thông qua trình duyệt hoặc ứng dụng khác hoạt động với File Quarantine được gán một thuộc tính đặc biệt (com.apple.quarantine). Khi chạy một tệp như vậy lần đầu tiên, nếu tệp có chữ ký hợp lệ và không gây nghi ngờ cho Gatekeeper, người dùng sẽ được nhắc xác nhận hành động. Điều này giúp ngăn chặn việc vô tình chạy phần mềm độc hại.
Hình 11. Ví dụ về các thuộc tính tệp bao gồm File Quarantine
Để biết thông tin chi tiết về thuộc tính com.apple.quarantine, sử dụng lệnh “xattr -p com.apple.quarantine
- 0083: Đánh dấu cho các hành động tiếp theo của Gatekeeper.
- 689cb865: Timestamp ở định dạng thập lục phân (Mac Absolute Time).
- Safari: Trình duyệt được sử dụng để tải xuống tệp.
- 66EA7FA5-1F9E-4779-A5B5-9CCA2A4A98F5: UUID được đính kèm vào tệp. Điều này cần thiết để lưu trữ bản ghi của tệp vào cơ sở dữ liệu.
Hình 12. Thông tin chi tiết về thuộc tính com.apple.quarantine
Thông tin trả về bởi lệnh này được lưu trữ trong cơ sở dữ liệu tại ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2, nơi thông tin có thể được kiểm tra.
Hình 13. Dữ liệu trong cơ sở dữ liệu com.apple.LaunchServices.QuarantineEventsV2
Để tránh bị cách ly tệp, kẻ tấn công sử dụng nhiều kỹ thuật khác nhau để bypass File Quarantine. Ví dụ, các tệp được tải xuống qua curl, wget hoặc các công cụ cấp thấp khác không được tích hợp với File Quarantine sẽ không được gắn cờ với thuộc tính quarantine.
Hình 14. Bypass lệnh cách ly bằng cách sử dụng curl
Bạn cũng có thể xóa thuộc tính theo cách thủ công bằng lệnh “xattr -d com.apple.quarantine
Hình 15. Xóa thuộc tính quarantine
Nếu thuộc tính quarantine được xóa thành công, sẽ không có cảnh báo nào được hiển thị khi tệp được chạy, điều này rất hữu ích trong các cuộc tấn công kỹ nghệ xã hội hoặc trong trường hợp kẻ tấn công muốn thực thi phần mềm độc hại mà người dùng không hề hay biết.
Hình 16. Chạy tệp mà không cần kiểm tra File Quarantine
Để phát hiện hoạt động này, bạn cần giám sát việc thực thi lệnh “xattr” kết hợp với “-d” và “com.apple.quarantine”, ngụ ý việc xóa thuộc tính quarantine. Trong một sự cố liên quan đến việc xâm nhập macOS, nguồn gốc của tệp cũng cần được điều tra: Nếu tệp được tải lên máy chủ mà không bị quarantine đánh dấu, đây là một yếu tố rủi ro bổ sung. Dưới đây là một ví dụ về việc kích hoạt EDR khi có sự kiện xóa thuộc tính quarantine, cũng như ví dụ về tập luật phát hiện các sự kiện như vậy.
Hình 17. Ví dụ về sự kiện từ Kaspersky EDR
Hình 18. Tập luật phát hiện
Gatekeeper
Gatekeeper là một phần quan trọng của hệ thống bảo mật macOS, được thiết kế để bảo vệ người dùng khỏi việc chạy các ứng dụng tiềm ẩn nguy hiểm. Được giới thiệu lần đầu tiên trong OS X Leopard (2012), Gatekeeper kiểm tra chữ ký số của các ứng dụng, nếu thuộc tính quarantine (com.apple.quarantine) hiện diện, sẽ hạn chế việc khởi chạy các chương trình chưa được người dùng ký và chấp thuận, do đó giảm nguy cơ thực thi mã độc hại.
Tiện ích spctl được sử dụng để quản lý Gatekeeper. Dưới đây là ví dụ về cách gọi spctl để kiểm tra tính hợp lệ của chữ ký và liệu chữ ký đó đã được Apple xác minh hay chưa: “Spctl -a -t exec -vvvv
Hình 19. Kiểm tra tệp không đáng tin cậy bằng spctl
Hình 20. Kiểm tra tệp tin đáng tin cậy bằng spctl
Gatekeeper yêu cầu ứng dụng phải: Hoặc được ký bằng chứng chỉ nhà phát triển Apple hợp lệ; Hoặc được Apple chứng nhận sau khi xác minh mã nguồn.
Nếu ứng dụng không đáp ứng các yêu cầu này, Gatekeeper theo mặc định sẽ chặn các nỗ lực chạy ứng dụng. Có thể bỏ chặn, nhưng điều này yêu cầu người dùng phải điều hướng qua các cài đặt. Vì vậy, để thực hiện một cuộc tấn công thành công, tác nhân đe dọa không chỉ phải thuyết phục nạn nhân đánh dấu ứng dụng là đáng tin cậy mà còn phải giải thích cho họ cách thực hiện việc này. Quy trình phức tạp để chạy phần mềm trông có vẻ đáng ngờ. Tuy nhiên, nếu khởi chạy được thực hiện từ menu ngữ cảnh (nhấp chuột phải -> Open), người dùng sẽ thấy một cửa sổ bật lên cho phép họ bỏ qua việc chặn, chỉ bằng một cú nhấp chuột bằng cách xác nhận ý định sử dụng ứng dụng. Đặc điểm kỳ lạ này được sử dụng trong các cuộc tấn công kỹ nghệ xã hội: Phần mềm độc hại có thể đi kèm với các hướng dẫn nhắc người dùng chạy tệp từ menu ngữ cảnh.
Hình 21. Ví dụ về Chropex Adware sử dụng kỹ thuật này
Hãy cùng xem xét phương pháp chạy chương trình từ menu ngữ cảnh, thay vì nhấp đúp. Nếu nhấp đúp vào biểu tượng của chương trình có thuộc tính quarantine, chúng ta sẽ thấy cửa sổ dưới đây:
Hình 22. Chạy chương trình có thuộc tính quarantine bằng cách nhấp đúp
Nếu chạy chương trình từ menu ngữ cảnh (nhấp chuột phải -> Open) sẽ hiển thị thông tin sau:
Hình 23. Chạy chương trình có thuộc tính quarantine từ menu ngữ cảnh
Kẻ tấn công có quyền truy cập cục bộ và quyền quản trị viên có thể vô hiệu hóa Gatekeeper bằng lệnh spctl –master disable hoặc --global-disable.
Để phát hiện hoạt động này, bạn cần giám sát việc thực thi lệnh spctl bằng các tham số –master disable hoặc --global-disable, để vô hiệu hóa Gatekeeper. Dưới đây là ví dụ về EDR kích hoạt khi có sự kiện vô hiệu hóa Gatekeeper, cũng như ví dụ về tập luật phát hiện.
Hình 24. Ví dụ về sự kiện Kaspersky EDR
Hình 25. Tập luật phát hiện
Kết luận
Cơ chế bảo vệ tích hợp sẵn trên macOS có khả năng phục hồi cao và cung cấp khả năng bảo mật tuyệt vời. Tuy nhiên, giống như bất kỳ hệ điều hành nào đã phát triển, kẻ tấn công vẫn tiếp tục thích nghi và tìm cách vượt qua ngay cả những rào cản bảo vệ đáng tin cậy nhất.
Trong một số trường hợp, khi các cơ chế bảo mật tiêu chuẩn bị bypass, việc triển khai các biện pháp bảo mật bổ sung và ngăn chặn cuộc tấn công có thể gặp khó khăn. Do đó, để được bảo vệ toàn diện khỏi các mối đe dọa mạng, người dùng sử dụng các giải pháp tiên tiến từ các nhà cung cấp bên thứ ba. Ngoài ra, để bảo vệ chống lại việc bypass các biện pháp bảo mật tiêu chuẩn, bạn đọc có thể sử dụng các tập luật Sigma mà bài viết đã cung cấp.