Thiết bị thông minh (Smartphone, Tablet) đang dần thay thế máy tính truyền thống. Nó đáp ứng cho chúng ta các nhu cầu hàng ngày như làm việc, giải trí, quản lí các thiết bị điện tử, quản lí nhà thông minh..v..v. Cùng với đó, người dùng sử dụng các thiết bị thông minh khi thao tác với dữ liệu, đặc biệt là dữ liệu nhạy cảm như email, giao dịch ngân hàng,… ngày càng tăng. Nắm bắt xu thế này, tin tặc đang chuyển sự chú ý sang tấn công vào các thiết bị thông minh. Do đó, việc kiểm tra bảo mật cho ứng dụng trên các thiết bị thông minh là công việc hết sức quan trọng. Hiện nay trên thị trường thiết bị thông minh có hai nền tảng phổ biến là IOS và Android. IOS được khá nhiều người lựa chọn sử dụng vì sự mượt mà và ổn định trong các trải nghiệm của người sử dụng. Ngoài ra nó còn được các chuyên gia bảo mật đánh giá cao về mức độ an toàn . Bài viết Đánh giá an toàn thiết bị ios này nhằm tìm hiểu về an toàn trong nền tảng ios và thực hiện kiểm thử đánh giá an toàn nền tảng này. Do kiến thức còn hạn chế nên không thể tránh khỏi những sai sót trong quá trình tìm hiểu mong nhận được sự đóng góp ý kiến của thầy cô cùng các bạn để bài báo cáo được hoàn thiện.
KHÁI QUÁT AN TOÀN TRÊN THIẾT BỊ DI ĐỘNG
Giới thiệu về bảo mật di động
1.1 Các lĩnh vực chính trong bảo mật ứng dụng di động
Lưu trữ dữ liệu cục bộ
Bảo vệ dữ liệu nhạy cảm, như thông tin đăng nhập và thông tin cá nhân, là rất quan trọng cho an ninh di động Nếu ứng dụng không sử dụng đúng cách các API hệ điều hành như bộ nhớ cục bộ hoặc giao tiếp liên công (IPC), dữ liệu nhạy cảm có thể bị lộ cho các ứng dụng khác trên cùng thiết bị Ngoài ra, dữ liệu cũng có thể vô tình bị rò rỉ vào lưu trữ đám mây, sao lưu hoặc bộ nhớ cache của bàn phím Hơn nữa, thiết bị di động dễ bị mất hoặc đánh cắp hơn các loại thiết bị khác, làm tăng khả năng truy cập vật lý vào thiết bị và dễ dàng truy xuất dữ liệu.
Giao tiếp với đầu cuối đáng tin cậy
Thiết bị di động thường xuyên kết nối với nhiều mạng khác nhau, bao gồm cả mạng Wi-Fi công cộng, tạo ra rủi ro cho an ninh thông tin Điều này dẫn đến khả năng xảy ra nhiều cuộc tấn công mạng, từ đơn giản đến phức tạp Để bảo vệ tính bảo mật và toàn vẹn thông tin giữa ứng dụng di động và dịch vụ từ xa, việc thiết lập kênh mã hóa an toàn là rất quan trọng Ứng dụng di động cần sử dụng giao thức TLS với các cài đặt phù hợp để đảm bảo an toàn cho dữ liệu trao đổi.
Xác thực và ủy quyền
Trong kiến trúc ứng dụng di động, việc yêu cầu người dùng đăng nhập vào dịch vụ từ xa là rất quan trọng Mặc dù xác thực và ủy quyền chủ yếu diễn ra tại điểm cuối, nhưng ứng dụng di động cũng gặp phải nhiều thách thức Khác với ứng dụng web, ứng dụng di động thường lưu trữ mã thông báo phiên lâu dài, được mở khóa thông qua các tính năng xác thực như quét vân tay.
Việc cho phép đăng nhập nhanh chóng và cải thiện trải nghiệm người dùng là một lợi ích lớn, tuy nhiên, điều này cũng mang đến sự phức tạp và tiềm ẩn nguy cơ xảy ra lỗi.
Kiến trúc ứng dụng di động ngày càng tích hợp các khung ủy quyền như OAuth2 để ủy quyền xác thực cho dịch vụ riêng biệt hoặc thuê ngoài quá trình xác thực cho nhà cung cấp Việc sử dụng OAuth2 cho phép chuyển giao logic xác thực phía máy khách đến các ứng dụng khác trên cùng một thiết bị, chẳng hạn như trình duyệt hệ thống Những người kiểm tra bảo mật cần hiểu rõ các ưu điểm và nhược điểm của các kiến trúc khác nhau.
Tương tác với Nền tảng di động
Kiến trúc của hệ điều hành di động khác biệt so với máy tính để bàn truyền thống, đặc biệt ở việc triển khai các hệ thống cấp phép ứng dụng, cho phép điều chỉnh quyền truy cập vào các API cụ thể.
Các nền tảng Android và iOS cung cấp các phương tiện liên lạc quá trình (IPC) khác nhau, cho phép ứng dụng trao đổi tín hiệu và dữ liệu Tuy nhiên, mỗi nền tảng đều có những cạm bẫy riêng Chẳng hạn, việc lạm dụng API IPC có thể dẫn đến việc dữ liệu nhạy cảm hoặc chức năng bị tiết lộ cho các ứng dụng khác đang hoạt động trên thiết bị.
Giảm thiểu chèn mã độc
Các vấn đề về quản lý bộ nhớ và tiêm truyền thống ít xuất hiện trong ứng dụng di động do bề mặt tấn công nhỏ hơn Ứng dụng di động chủ yếu tương tác với dịch vụ phụ trợ và giao diện người dùng, vì vậy mặc dù có nhiều lỗ hổng tràn bộ đệm, chúng thường không tạo ra vectơ tấn công hữu ích Tương tự, các lỗ hổng như cross-site scripting (XSS) thường gặp trong ứng dụng web cũng ít thấy trên thiết bị di động, mặc dù lý thuyết cho rằng XSS có thể xảy ra trong một số trường hợp Tuy nhiên, các vấn đề XSS có thể khai thác vẫn rất hiếm.
Sự bảo vệ khỏi các vấn đề quản lý bộ nhớ và tiêm không có nghĩa là các nhà phát triển ứng dụng có thể viết mã kém chất lượng Việc tuân thủ các phương pháp bảo mật tốt nhất sẽ dẫn đến các bản phát hành được cải thiện, giúp củng cố khả năng chống lại sự giả mạo Các tính năng bảo mật miễn phí từ trình biên dịch và SDK di động góp phần tăng cường an ninh và giảm thiểu nguy cơ tấn công.
Chống giả mạo và chống đảo ngược
Nhiều chuyên gia bảo mật thường bỏ qua việc bảo vệ phía máy khách, mặc dù các biện pháp bảo vệ phần mềm đang được sử dụng phổ biến trong ứng dụng di động Do đó, những người kiểm tra bảo mật cần phát triển các phương pháp đối phó với những biện pháp này Chúng tôi tin rằng việc áp dụng bảo vệ phía khách hàng có thể mang lại lợi ích, miễn là nó được sử dụng với mục đích rõ ràng và không thay thế các biện pháp kiểm soát an ninh khác.
1.2 Hướng dẫn kiểm tra bảo mật di động
Hướng dẫn này có liên quan chặt chẽ với Tiêu chuẩn Xác minh Bảo mật Ứng dụng
Di động OWASP (MASVS) định nghĩa mô hình bảo mật ứng dụng cho thiết bị di động, liệt kê các yêu cầu bảo mật chung cho ứng dụng này MASVS hữu ích cho kiến trúc sư, nhà phát triển, người thử nghiệm, chuyên gia bảo mật và người tiêu dùng trong việc xác định và hiểu các yếu tố của một ứng dụng di động an toàn Tài liệu này lập bản đồ cho một bộ yêu cầu bảo mật cơ bản, có thể được sử dụng riêng lẻ hoặc kết hợp tùy thuộc vào ngữ cảnh để đạt được các mục tiêu khác nhau.
Hình 1-1: Mô hình bảo mật ứng dụng dành cho thiết bị di động
Các yêu cầu MASVS có thể được áp dụng trong giai đoạn thiết kế và kiến trúc của ứng dụng, trong khi danh sách kiểm tra và hướng dẫn kiểm tra là nền tảng cho việc thực hiện kiểm tra bảo mật thủ công hoặc tự động Trong chương về thử nghiệm bảo mật ứng dụng di động, chúng tôi sẽ hướng dẫn cách sử dụng danh sách kiểm tra và MSTG cho việc thử nghiệm thâm nhập ứng dụng di động.
Duyệt hướng dẫn kiểm tra bảo mật di động
MSTG chứa các mô tả về tất cả các yêu cầu quy định trong MASVS MSTG chứa các phần chính sau:
Hướng dẫn thử nghiệm chung cung cấp các phương pháp bảo mật ứng dụng cho thiết bị di động và kỹ thuật phân tích lỗ hổng, nhằm nâng cao an ninh cho ứng dụng di động.
Hướng dẫn kiểm tra bảo mật di động trên nền tảng Android bao gồm các vấn đề cơ bản về bảo mật, các trường hợp kiểm tra bảo mật, cũng như các kỹ thuật phòng chống đảo ngược và giả mạo.
Hướng dẫn kiểm tra iOS bao gồm việc đánh giá bảo mật di động cho nền tảng iOS, cung cấp cái nhìn tổng quan về hệ điều hành này, thực hiện kiểm tra bảo mật, áp dụng các kỹ thuật đảo ngược và biện pháp chống đảo ngược để bảo vệ an toàn thông tin.
Phân loại và phương pháp đánh giá an toàn ứng dụng
Thuật ngữ "ứng dụng dành cho thiết bị di động" chỉ các chương trình máy tính độc lập, được phát triển để hoạt động trên thiết bị di động Những ứng dụng này có thể chạy trực tiếp trên nền tảng mà chúng được thiết kế hoặc thông qua trình duyệt trên thiết bị thông minh, thậm chí kết hợp cả hai phương thức Ứng dụng gốc là một phần quan trọng trong lĩnh vực này.
Hệ điều hành di động như Android và iOS cung cấp Bộ phát triển phần mềm (SDK) cho việc phát triển ứng dụng Ứng dụng gốc mang lại hiệu suất tối ưu và độ tin cậy cao, đồng thời tuân thủ các nguyên tắc thiết kế của từng nền tảng.
Nhược điểm lớn nhất của ứng dụng gốc là chúng chỉ hoạt động trên một nền tảng cụ thể Để phát triển ứng dụng cho cả Android và iOS, bạn phải duy trì hai cơ sở mã riêng biệt hoặc sử dụng các công cụ phát triển phức tạp để chuyển đổi một cơ sở mã thành hai nền tảng khác nhau.
Ứng dụng web di động, hay còn gọi là ứng dụng web, là các trang web được thiết kế để giống như ứng dụng gốc Chúng hoạt động trên trình duyệt của thiết bị và thường được phát triển bằng HTML5, tương tự như các trang web hiện đại.
Các ứng dụng web hoạt động trong môi trường trình duyệt, có giới hạn tích hợp với các thành phần thiết bị và thường không đạt hiệu suất như ứng dụng gốc Chúng thường nhắm đến nhiều nền tảng, dẫn đến giao diện người dùng không tuân theo các nguyên tắc thiết kế cụ thể Tuy nhiên, lợi thế lớn nhất của ứng dụng web là giảm chi phí phát triển và bảo trì nhờ vào việc sử dụng một cơ sở mã duy nhất, cùng khả năng cập nhật dễ dàng mà không cần qua cửa hàng ứng dụng Trong khi đó, ứng dụng lai kết hợp ưu điểm của cả ứng dụng web và ứng dụng gốc, hoạt động như ứng dụng gốc nhưng phần lớn quy trình dựa trên công nghệ web, với một phần chạy trong trình duyệt nhúng Do đó, ứng dụng lai vừa thừa hưởng những lợi ích của ứng dụng gốc và web, vừa gặp phải một số hạn chế nhất định.
Lớp trừu tượng web-to-native cung cấp khả năng truy cập vào các tính năng của thiết bị cho các ứng dụng lai, điều này không thể thực hiện được với ứng dụng web thuần túy Tùy thuộc vào khung phát triển, một cơ sở mã có thể tạo ra nhiều ứng dụng cho các nền tảng khác nhau, đồng thời giữ giao diện người dùng tương tự như nền tảng gốc mà ứng dụng được phát triển.
Sau đây là danh sách không đầy đủ các framework phổ biến để phát triển các ứng dụng lai:
2.2 Phương pháp đánh giá an toàn ứng dụng a Kiểm tra hộp trắng và kiểm tra hộp đen
Kiểm tra hộp đen được thực hiện mà không cần người kiểm tra có thông tin về ứng dụng đang thử nghiệm Quá trình này thường được gọi là kiểm thử hộp đen.
Thử nghiệm không có kiến thức nhằm mục đích cho phép người kiểm tra hành xử như một kẻ tấn công thực sự, từ đó khám phá những cách thức sử dụng thông tin có sẵn và có thể được công khai.
Kiểm tra hộp trắng, hay còn gọi là "kiểm tra kiến thức đầy đủ", hoàn toàn trái ngược với thử nghiệm hộp đen, vì người thử nghiệm có kiến thức toàn diện về ứng dụng, bao gồm mã nguồn, tài liệu và sơ đồ Mặc dù thử nghiệm hộp đen dễ dàng và nhanh chóng hơn, nhưng thử nghiệm hộp trắng thường không cho phép nhiều trường hợp thử nghiệm Tuy nhiên, kiểm tra hộp trắng lại hữu ích hơn trong việc bảo vệ ứng dụng khỏi các mối đe dọa từ kẻ tấn công nội bộ.
Kiểm tra hộp màu xám là một phương pháp thử nghiệm kết hợp giữa thử nghiệm hộp trắng và hộp đen, trong đó người thử nghiệm nhận một số thông tin nhất định và phát hiện các thông tin khác Phương pháp này mang lại sự cân bằng thú vị giữa số lượng trường hợp thử nghiệm, chi phí, tốc độ và phạm vi kiểm tra Thử nghiệm hộp màu xám hiện đang là loại thử nghiệm phổ biến nhất trong ngành bảo mật.
Phân tích lỗ hổng là quá trình phát hiện các lỗ hổng trong ứng dụng, có thể thực hiện thủ công hoặc bằng cách sử dụng máy quét tự động để xác định các lỗ hổng chính Hai loại phân tích lỗ hổng phổ biến là phân tích tĩnh và phân tích động.
Phân tích tĩnh là quá trình kiểm tra các thành phần của ứng dụng mà không cần thực thi chúng, tương tự như phương pháp thử nghiệm hộp trắng.
Trong phân tích tĩnh, mã nguồn ứng dụng di động được kiểm tra để đảm bảo các biện pháp bảo mật được thực hiện đúng cách Có hai phương pháp đánh giá chính trong quá trình này.
• Đánh giá mã thủ công
• Phân tích mã tự động
Phân tích động là quá trình kiểm tra ứng dụng từ bên ngoài trong khi nó đang hoạt động, có thể thực hiện thủ công hoặc tự động Mặc dù không cung cấp thông tin chi tiết như phân tích tĩnh, nhưng phân tích động giúp phát hiện các yếu tố quan trọng như tài sản, tính năng và điểm nhập từ góc nhìn của người dùng, tương tự như phương pháp thử nghiệm hộp đen.
Phân tích động, hay còn gọi là DAST (Dynamic Application Security Testing), tập trung vào việc thử nghiệm và đánh giá ứng dụng thông qua việc thực thi trong thời gian thực Mục tiêu chính của phương pháp này là phát hiện các lỗ hổng bảo mật và điểm yếu trong chương trình khi nó đang chạy Phân tích động được thực hiện trên cả nền tảng di động và các dịch vụ, API back-end, cho phép phân tích các yêu cầu và phản hồi của ứng dụng dành cho thiết bị di động.
ĐÁNH GIÁ AN TOÀN THIẾT BỊ DI ĐỘNG IOS
Tổng quan về nền tảng iOS
iOS là hệ điều hành di động của Apple, hỗ trợ các thiết bị như iPhone, iPad và iPod Touch, đồng thời là nền tảng cho tvOS Các ứng dụng iOS hoạt động trong môi trường hạn chế hơn so với macOS, với sự tách biệt ở cấp hệ thống tệp và quyền truy cập API hệ thống bị giới hạn.
Các kiến trúc an ninh iOS bao gồm sáu tính năng cốt lõi:
• Mã hóa và bảo vệ dữ liệu
• Giảm thiểu khai thác chung
Hình 2-1: Kiến trúc bảo mật IOS
Kiến trúc bảo mật iOS tận dụng các tính năng bảo mật phần cứng để cải thiện hiệu suất Mỗi thiết bị iOS được trang bị hai khóa 256-bit AES - GID và UID - được tích hợp trong bộ xử lý ứng dụng và Secure Enclave trong quá trình sản xuất Các khóa này không thể được đọc trực tiếp qua phần mềm hoặc giao diện gỡ lỗi như JTAG Các hoạt động mã hóa và giải mã được thực hiện thông qua các công cụ mã hóa AES phần cứng, chỉ có quyền truy cập vào các khóa này.
GID là giá trị chung giữa các bộ xử lý trong một lớp thiết bị, giúp ngăn chặn giả mạo đối với tệp phần sụn và các tác vụ mã hóa không liên quan đến dữ liệu cá nhân UID, duy nhất cho từng thiết bị, bảo vệ phân cấp khóa cho mã hóa hệ thống tệp Do UID không được ghi lại trong quá trình sản xuất, ngay cả Apple cũng không thể khôi phục khóa mã hóa cho thiết bị cụ thể Để xóa an toàn dữ liệu nhạy cảm trên bộ nhớ flash, iOS trang bị tính năng Effaceable Storage, cho phép truy cập trực tiếp vào công nghệ lưu trữ để xóa các khối đã chọn một cách an toàn.
Khi thiết bị iOS khởi động, nó đọc hướng dẫn từ ROM khởi động chỉ đọc để khởi động hệ thống ROM khởi động chứa mã bất biến và Apple Root CA, tạo ra nền tảng tin cậy cho thiết bị Sau đó, ROM khởi động xác nhận chữ ký của bộ khởi động iBoot Nếu chữ ký hợp lệ, iBoot tiếp tục kiểm tra chữ ký của hạt nhân iOS Nếu bất kỳ bước nào thất bại, quá trình khởi động dừng lại và thiết bị vào chế độ khôi phục với màn hình "Kết nối với iTunes" Nếu ROM khởi động không tải được, thiết bị sẽ chuyển sang chế độ khôi phục đặc biệt thấp gọi là Thiết bị nâng cấp.
Chế độ DFU (Device Firmware Update) là giải pháp cuối cùng để khôi phục thiết bị về trạng thái ban đầu Khi ở chế độ này, thiết bị sẽ không có dấu hiệu hoạt động, nghĩa là màn hình của nó sẽ hoàn toàn không hiển thị gì.
Quá trình "Chuỗi khởi động an toàn" đảm bảo rằng hệ thống và các thành phần của nó đều được phát triển và phân phối bởi Apple Chuỗi Secure Boot bao gồm các thành phần quan trọng như hạt nhân, bộ nạp khởi động, phần mở rộng hạt nhân và phần vững cơ sở.
Apple đã triển khai một hệ thống DRM phức tạp nhằm đảm bảo chỉ có mã được phê chuẩn mới có thể chạy trên thiết bị của họ Điều này có nghĩa là người dùng sẽ không thể cài đặt mã trên thiết bị iOS chưa bẻ khóa nếu không được sự cho phép rõ ràng từ Apple Người dùng chỉ được phép cài đặt ứng dụng thông qua cửa hàng ứng dụng chính thức của Apple.
Để triển khai và chạy ứng dụng, các nhà phát triển cần có hồ sơ và chứng chỉ được Apple ký Họ phải đăng ký tham gia Chương trình nhà phát triển Apple và trả phí thuê bao hàng năm để tận dụng đầy đủ các tính năng phát triển và triển khai Ngoài ra, Apple cũng cung cấp một tài khoản miễn phí cho phép biên dịch và triển khai ứng dụng thông qua sideloading, nhưng không cho phép phân phối trên App Store.
Mã hóa và bảo vệ dữ liệu
Mã hóa mã FairPlay được áp dụng cho các ứng dụng được tải xuống từ App
FairPlay là công nghệ DRM được phát triển cho nội dung đa phương tiện mua qua iTunes Ban đầu, nó được áp dụng cho luồng MPEG và QuickTime, nhưng cũng có thể áp dụng cho các tệp thực thi Khi bạn tạo tài khoản Apple mới, một cặp khóa công khai và riêng sẽ được tạo ra và gán cho tài khoản của bạn, trong đó khóa riêng được lưu trữ an toàn trên thiết bị của bạn Điều này đảm bảo rằng mã được mã hóa FairPlay chỉ có thể được giải mã trên các thiết bị liên kết với tài khoản của bạn.
Mã hóa ngược FairPlay thường được thực hiện bằng cách chạy ứng dụng trên thiết bị, sau đó tiến hành bán phá giá mã đã được giải mã từ bộ nhớ.
Kể từ khi ra mắt iPhone 3GS, Apple đã tích hợp mã hóa vào phần cứng và phần mềm của các thiết bị iOS Mỗi thiết bị được trang bị một động cơ mã hóa dựa trên phần cứng chuyên dụng, sử dụng công nghệ AES 256 bit và hoạt động với hàm băm SHA.
1 Ngoài ra, có một mã định danh duy nhất (UID) được tích hợp vào phần cứng của mỗi thiết bị với khóa AES 256 bit được hợp nhất vào bộ xử lý ứng dụng UID này là duy nhất và không được ghi ở nơi khác Tại thời điểm viết, không phải phần mềm và phần mềm nào cũng có thể đọc trực tiếp UID Bởi vì chìa khóa được đốt cháy vào chip silicon, nó không thể bị giả mạo hoặc bỏ qua Chỉ có crypto engine mới có thể truy cập nó
Xây dựng mã hóa trong kiến trúc vật lý của thiết bị iOS mang lại tính năng bảo mật mặc định, cho phép mã hóa toàn bộ dữ liệu lưu trữ Điều này giúp bảo vệ dữ liệu ở cấp phần mềm, kết hợp với mã hóa phần cứng để nâng cao mức độ an toàn cho thông tin người dùng.
Khi kích hoạt tính năng bảo vệ dữ liệu, mỗi tệp được liên kết với một lớp cụ thể, cung cấp các mức độ truy cập khác nhau và bảo vệ dữ liệu tùy thuộc vào nhu cầu truy cập Các hoạt động mã hóa và giải mã được thực hiện dựa trên nhiều cơ chế, bao gồm UID và mật mã của thiết bị, khóa lớp, khóa hệ thống tệp và khóa riêng cho mỗi tệp Khóa mỗi tệp mã hóa nội dung của nó, trong khi khóa lớp bảo vệ các khóa tệp và được lưu trữ trong siêu dữ liệu Khóa hệ thống tệp mã hóa siêu dữ liệu, và UID cùng mật mã bảo vệ khóa lớp mà người dùng không thấy Để bảo vệ dữ liệu, mật mã cần thiết khi truy cập thiết bị, mở khóa thiết bị và kết hợp với UID để tạo ra các khóa mã hóa iOS chống lại các cuộc tấn công Việc bật bảo vệ dữ liệu là lý do chính khiến người dùng sử dụng mật mã trên thiết bị của họ.
Các appsandbox là công nghệ kiểm soát truy cập trên iOS, được thực thi ở cấp hạt nhân nhằm hạn chế thiệt hại đối với dữ liệu người dùng và hệ thống khi ứng dụng bị xâm phạm.
Môi trường thử nghiệm đánh giá
Môi trường thử nghiệm là công cụ quan trọng để kiểm tra các ứng dụng iOS nhằm phát hiện lỗ hổng bảo mật Những quy trình cơ bản này đóng vai trò nền tảng cho việc xây dựng các trường hợp thử nghiệm hiệu quả.
Giả lập iOS SDK tạo ra môi trường mô phỏng chuyên nghiệp cho thiết bị iOS, trong đó các chương trình nhị phân được biên dịch sang mã x86 thay vì mã ARM Điều này cho phép phân tích hộp đen và kỹ thuật dịch ngược, vì các ứng dụng được biên dịch cho thiết bị thật sẽ không hoạt động trong giả lập.
Cả Windows và Linux đều có thể được cấu hình để thử nghiệm với nền tảng này, nhưng Xcode trên macOS sẽ mang lại sự hỗ trợ tối ưu và dễ dàng hơn cho quá trình phát triển.
Jailbreaking thiết bị giúp thuận tiện cho quá trình kiểm tra bằng cách vô hiệu hóa bảo vệ hệ thống iOS, đặc biệt là các cơ chế ký kết mã của Apple, cho phép chạy mã unsigned trên thiết bị.
Gần đây, Apple đã hạn chế việc jailbreak thiết bị trong các phiên bản phần mềm mới, tuy nhiên, bạn vẫn có thể thiết lập môi trường đánh giá an toàn cho nền tảng iOS bằng cách sử dụng iGoat, mặc dù điều này có thể phức tạp hơn.
Dữ liệu người dùng nhạy cảm có thể được lưu trữ an toàn trên thiết bị iOS thông qua các API lưu trữ an toàn Những API này cho phép các nhà phát triển mã hóa dữ liệu bằng công nghệ phần cứng có sẵn trên mọi thiết bị iOS Khi các API hoạt động chính xác, dữ liệu và tệp sẽ được bảo vệ bằng mã hóa AES 256 bit, đảm bảo an toàn tối đa cho thông tin người dùng.
API bảo vệ dữ liệu
Các nhà phát triển ứng dụng có thể tận dụng API bảo vệ dữ liệu iOS để thực hiện kiểm soát truy cập tinh vi cho dữ liệu người dùng lưu trữ trong bộ nhớ flash API này được xây dựng dựa trên bộ xử lý Secure Enclave (SEP) tích hợp trên iPhone 5S, cung cấp các hoạt động mã hóa để bảo vệ dữ liệu và quản lý khóa Khóa phần cứng thiết bị cụ thể, được gọi là UID (Unique ID), được nhúng trong vùng an toàn, đảm bảo tính toàn vẹn của bảo vệ dữ liệu ngay cả khi hệ điều hành bị xâm nhập.
Kiến trúc bảo vệ dữ liệu sử dụng một hệ thống khóa, bao gồm UID và mật khẩu người dùng, được mã hóa bằng thuật toán PBKDF2 Những khóa này không chỉ giúp bảo vệ thông tin cá nhân mà còn cho phép "mở khóa" các lớp liên quan đến trạng thái thiết bị, như thiết bị bị khóa hoặc mở khóa.
Tất cả các tệp trong hệ thống tệp iOS đều được mã hóa bằng khóa cá nhân riêng biệt, được lưu trữ trong siêu dữ liệu của tệp Siêu dữ liệu này được bảo vệ bằng khóa hệ thống tệp và được gói với một trong các khóa lớp, tùy thuộc vào lớp bảo vệ mà ứng dụng lựa chọn khi tạo tệp.
Hình 2-2:Phân cấp khóa bảo vệ dữ liệu
Tệp có thể được gán cho một trong bốn lớp bảo vệ khác nhau
Bảo vệ hoàn chỉnh (NSFileProtectionComplete) sử dụng một chìa khóa được tạo từ mật mã của người dùng và UID thiết bị để bảo vệ dữ liệu Chìa khóa này sẽ bị xóa khỏi bộ nhớ ngay khi thiết bị bị khóa, khiến cho dữ liệu trở nên không thể truy cập cho đến khi người dùng mở khóa thiết bị.
• Được bảo vệ trừ khi mở (NSFileProtectionCompleteUnlessOpen):
Hoạt động tương tự như Bảo vệ hoàn chỉnh, nhưng cho phép ứng dụng tiếp tục truy cập tệp ngay cả khi thiết bị bị khóa, nếu tệp đã được mở trước đó Lớp bảo vệ này thường được áp dụng khi tệp đính kèm email được tải xuống ở chế độ nền.
Chế độ bảo vệ NSFileProtection CompleteUntilFirstUser Authentication cho phép truy cập vào tập tin ngay sau khi người dùng mở khóa thiết bị lần đầu sau khi khởi động Tập tin này vẫn có thể được truy cập ngay cả khi người dùng khóa thiết bị sau đó, và nội dung của nó không bị xóa khỏi bộ nhớ.
Lớp bảo vệ không bảo vệ (NSFileProtectionNone) chỉ được bảo vệ bằng UID và lưu trữ trong bộ nhớ "Effaceable Storage", một vùng bộ nhớ flash trên thiết bị iOS cho phép lưu trữ một lượng nhỏ dữ liệu Lớp bảo vệ này được thiết kế để cho phép xóa từ xa nhanh chóng; khi khóa lớp bị xóa, dữ liệu ngay lập tức trở nên không thể truy cập.
Tất cả các khóa lớp trừ NSFileProtectionNone đều được mã hóa bằng một khóa dựa trên UID của thiết bị và mật khẩu người dùng Do đó, việc giải mã chỉ có thể thực hiện trên thiết bị đó và yêu cầu nhập đúng mật khẩu.
Từ iOS 7, lớp bảo vệ dữ liệu mặc định là "Được bảo vệ cho đến khi người dùng xác thực người dùng đầu tiên"
Keychain trên iOS là một công cụ lưu trữ an toàn cho các dữ liệu nhạy cảm, bao gồm khóa mã hóa và mã số phiên Nó hoạt động như một cơ sở dữ liệu SQLite, chỉ có thể truy cập thông qua các API Keychain.
API mật mã
Apple cung cấp các thư viện với các thuật toán mã hóa phổ biến, trong đó mã hóa iOS thường đề cập đến các hằng số được xác định trong CommonCryptor.h, chẳng hạn như kCCAlgorithmDES Người dùng có thể tìm kiếm mã nguồn để xác định việc sử dụng các hằng số này Lưu ý rằng các hằng số trên iOS là số, vì vậy cần kiểm tra các giá trị hằng số thuật toán được gửi đến hàm CCCrypt để đảm bảo rằng chúng không phải là những thuật toán không an toàn hoặc đã lỗi thời.
Để kiểm tra các cuộc gọi đến các chức năng mã hóa tiêu chuẩn của Apple, bạn nên xem xét các hàm từ CommonCryptor như CCCrypt và CCCryptorCreate Mã nguồn của chúng chứa chữ ký cho tất cả các chức năng, ví dụ như CCCryptorCreate có chữ ký riêng biệt.
CCOptions options, /* kCCOptionPKCS7Padding, etc */ const void *key, /* raw key material */ size_t keyLength, const void *iv, /* optional initialization vector */
Bạn có thể so sánh tất cả các loại enum để hiểu rõ hơn về thuật toán, padding và tài liệu chính đang được sử dụng Đặc biệt, hãy chú ý đến tài liệu khóa, nhất là khi nó được tạo trực tiếp từ mật khẩu, vì điều này có thể không an toàn.
Mã hóa iOS thường liên quan đến các hằng số định sẵn trong CommonCryptor.h, chẳng hạn như kCCAlgorithmDES Bạn cần kiểm tra các thư viện không chuẩn mà ứng dụng có thể đang sử dụng, như openssl Hãy tìm kiếm mã nguồn để xác định các hằng số này và đảm bảo rằng các giá trị hằng số thuật toán gửi đến hàm CCCrypt không phải là những thuật toán không an toàn hoặc đã lỗi thời Việc sử dụng mật mã học trên iOS cần tuân thủ các nguyên tắc tốt nhất để đảm bảo an toàn.
Tạo số ngẫu nhiên trên iOS
Apple cung cấp cho các nhà phát triển API cho phép tạo ra các số ngẫu nhiên an toàn về mặt mật mã.
API dịch vụ phân biệt ngẫu nhiên sử dụng hàm SecRandomCopyBytes để tạo ra số ngẫu nhiên Hàm này truy cập tệp thiết bị /dev/random, cung cấp giá trị giả ngẫu nhiên an toàn với mật mã trong khoảng từ 0 đến 255 và thực hiện quá trình ghép nối.
Xác minh rằng tất cả các số ngẫu nhiên được tạo ra qua API này là đáng tin cậy và hiệu quả Các nhà phát triển không cần phải tìm kiếm các giải pháp khác vì API này đáp ứng tốt nhu cầu của họ.
API mạng
Hầu hết các ứng dụng iOS hoạt động như máy khách kết nối với nhiều dịch vụ từ xa Tuy nhiên, việc giao tiếp qua mạng thường diễn ra trên các mạng không đáng tin cậy như Wifi công cộng, khiến cho các cuộc tấn công mạng trở thành một mối đe dọa tiềm ẩn.
Hầu hết các ứng dụng di động hiện đại sử dụng các dịch vụ web dựa trên HTTP, nhờ vào sự tài liệu hóa và hỗ trợ tốt của các giao thức này Trên iOS, lớp NSURLConnection cung cấp các phương thức để tải các yêu cầu URL một cách đồng bộ và không đồng bộ.
App Transport Security (ATS) is a security framework implemented by the operating system that enforces secure connections for NSURL Connection, NSURL Session, and CFURL.
35 tên máy chủ công cộng ATS được kích hoạt mặc định cho các ứng dụng xây dựng trên iOS SDK 9 trở lên
ATS chỉ có hiệu lực khi kết nối với tên máy chủ công cộng Do đó, mọi kết nối tới địa chỉ IP, tên miền không hợp lệ hoặc TLD local sẽ không được bảo vệ bởi ATS.
Dưới đây là danh sách tóm tắt các Yêu cầu về An ninh Giao thông Ứng dụng :
• Không được phép kết nối HTTP
• Chứng chỉ X.509 có dấu vân tay SHA256 và phải được ký kết với ít nhất một phím RSA 2048-bit hoặc mật mã ECC 256-bit
Để đảm bảo an toàn cho dữ liệu, phiên bản Bảo mật Tầng Vận chuyển (TLS) cần phải là 1.2 hoặc cao hơn, đồng thời hỗ trợ tính năng Perfect Forward Secrecy (PFS) thông qua việc sử dụng phương pháp trao đổi khóa ECDHE của Diffie-Hellman, kèm theo các khóa mã hóa đối xứng AES-128 hoặc AES-256.
Bộ mật mã phải là một trong các cách sau:
• TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
• TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
• TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
• TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
• TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
• TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
• TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
• TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
• TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
• TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
• TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Hạn chế ATS có thể được vô hiệu hóa thông qua việc cấu hình các ngoại lệ trong tệp Info.plist dưới NSAppTransportSecurity Những ngoại lệ này cho phép tùy chỉnh các quy tắc bảo mật cho ứng dụng.
• Cho phép kết nối không an toàn (HTTP),
• Giảm phiên bản TLS tối thiểu,
• Vô hiệu hóa PFS hoặc
• Cho phép kết nối với các tên miền cục bộ