Hotline tư vấn - khiếu nại

Bảo mật cho một ứng dụng iOS như thế nào

Bảo mật là một phần quan trọng trong phát triển phần mềm. Hầu như tất cả các ứng dụng đều phải dùng thông tin người dùng hoặc là giao tiếp với máy chủ. Mặc dù vấn đề bảo mật đã được quan tâm đáng kể trong thời gian qua nhưng nó vẫn là một chủ đề nóng.

Trong bài này, tôi muốn chỉ ra một số các chủ đề liên quan đến bảo mật và phát triển di động. Tôi sẽ có nhắc đến một vài best pratices (td cách làm tốt nhất) và những gợi ý mà có thể có ích cho bạn để bảo mật cho ứng dụng bạn đang viết.

Vấn đề bảo mật rất phổ biến. Những lỗ hổng bảo mật được phát hiện và các bản vá xuất hiện hàng ngày. Không có gì là hoàn hảo. Nhưng vẫn có một số điều bạn có thể làm để cải thiện mức độ bảo mật của ứng dụng di động. Một tòa nhà với hàng rào điện thì bọn trộm sẽ ít dám đột nhập vào.

Một vài nhà phát triển có cách suy nghĩ sai khi họ nghĩ rằng người dùng sẽ tin tưởng họ và đưa cho họ hết thông tin. Là một nhà phát triển, bạn cần bảo mật thông tin đó. Không cần biết thông tin đó là gì. Trong khi thông tin đó có thể vô giá trị với bạn nhưng nó quan trọng với người dùng.

Apple cân nhắc vấn đề bảo mật và riêng tư này rất kĩ. HealthKit là một ví dụ của Apple về cam kết bảo mật thông tin riêng tư người dùng. Người dùng quyết định thông tin sức khỏe nào được phép truy cập bởi ứng dụng. Trong khi ứng dụng có thể yêu cầu quyền truy nhập các thông tin đó. HealthKit không lộ thông tin nào mà nó có quyền truy nhập. Nói cách khác, Apple cho rằng trạng thái quyền truy nhập của một ứng dụng là một thông tin nhạy cảm và không ai nên biết.

1. Lưu trữ dữ liệu

saving data

1.1. Ứng dụng của bạn có nên lưu dữ liệu

Trước khi quyết định lưu dữ liệu như thế nào hoặc ở đâu thì bạn cần đặt ra câu hỏi cho bản thân là có nên lưu dữ liệu đó không. Ví dụ ta có thể lưu dữ liệu vào bộ nhớ thay vì phải ghi vào ổ đĩa hoặc là gửi đến máy chủ? Điều này có thể đơn giản hóa ứng dụng của bạn và cải thiện về mặt bảo mật.

1.2. Nên lưu dữ liệu ở đâu

Nếu bạn chỉ có thể lưu dữ liệu cục bộ thì nên quyết định xem nên lưu ở đâu. Với những dữ liệu nhạy cảm như là các thông tin xác minh, dùng keychain là lựa chọn tốt nhất. Phương án này là dành cho một lượng thông tin nhỏ trong ứng dụng mà không chọc đến nó nhiều.

Dữ liệu có cần sao lưu lên iCloud hay iTunes không? Nếu không làm phương án đó thì bạn có thể nghĩ đến việc lưu dữ liệu vào thư mục Caches ở trong sandbox. Thư mục này không được sao lưu lên iCloud hay iTunes. Tại sao điều này lại quan trọng? Thông tin không tồn tại thì không có nguy cơ bị tấn công.

1.3. Keychain

Hệ thống mặc định được tiếp cần thông qua lớp NSUserDefaults, đây là một cách lưu nhiều dữ liệu cùng lúc nhanh chóng và thuận tiện. Không may hệ thống mặc định thường bị các nhà phát triển lạm dụng. Lạm dụng đến nỗi các thông tin nhạy cảm như thông tin xác minh và các token đều được lưu ở hệ thống mặc định.

Một nơi tốt hơn để lưu các thông tin nhạy cảm mà không quá nhiều đó là keychain của hệ thống. Như cái tên, keychain được thiết kế để bảo mật và nó đã có nhiều năm rồi. Dù nó được quản lí bởi hệ điều hành mặc định nhưng các ứng dụng khác không có quyền truy cập vào các thông tin ứng dụng của bạn trong keychain.

Giao diện để vào dịch vụ keychain đúng là khá cũ. May là có nhiều thư viện để hỗ trợ điều này. Lockbox là một thư viện nhẹ, dùng để tương tác với dịch vụ keychain của hệ thống. Giao diện của Lockbox rất dễ hiểu và sử dụng.

1.4. Keys, Tokens, Credentials

Bạn sẽ muốn lưu thông tin khóa, token và thậm chí là thông tin xác minh ở những nơi dễ truy xuất như là Info.plist hoặc một tệp JSON trong ứng dụng. Sự thật là lấy thông tin của một ứng dụng tải từ AppStore về dễ như ăn kẹo. Bằng cách lưu một token API cho một dịch vụ wweb trong Info.plist, các nhà phát triển khác có thể tìm và dùng nó.

2. Networking

 

2.1. App Transport Security

Bảo mật và sự riêng tư luôn được Apple đặt lên hàng đầu và cùng với các tên tuổi khác, Apple đã quyết định đi đầu. Trong hội nghị dành cho các nhà phát triển WWDC năm ngoái, Apple đã giới thiệu App Transport Security (Truyền tải bảo mật ứng dụng).

Với App Transport Security, Apple muốn cải thiện tính bảo mật của nền tảng cũng như là các ứng dụng chạy trên nó. Dù cho Apple có đầu tư cho bảo mật thế nào thì một hệ thống sẽ chưa thể an toàn nếu còn các thành phần có lỗ hổng, đó là các ứng dụng của bên thứ ba.

App Transport Security buộc các ứng dụng gửi yêu cầu qua mạng dưới một kết nối an toàn. Nếu App Transport được kích hoạt cho một ứng dụng, yêu cầu được gửi qua HTTPS mặc định. Apple tập trung vào bảo mật bằng cách tự động bật App Transport Security cho các ứng dụng viết trên Xcode 7.

Bạn có thể đọc them về App Transport Security trên Envato Tuts+. Rất dễ để tắt tính năng này đi nhưng nhớ là mục đích của tính năng đó là khiến nhà phát triển cân nhắc các yêu cầu gửi qua mạng của ứng dụng.

2.2. Tôi đang nói với ai

Hầu như mọi ứng dụng di động đều sử dụng mạng. Có nghĩa là người có ý định xấu sẽ tập trung vào khai thác lỗ hổng bảo mật của ứng dụng. Mạng là một vấn đề phức tạp và ứng dụng xây dựng trên nhiều công nghệ để lấy các thông tin cần thiết.

Là một nhà phát triển, bạn nên nắm được một số điều cần lưu ý. Chúng ta đã bàn về App Transport Security và luật của tính năng mới này. Nhưng không chỉ có vậy. Bạn muốn tìm hiều thêm về các chủ đề cao hơn như là certificate pinning để đảm bảo cho máy chủ mà ứng dụng đang kết nối không bị làm giả. Các thư viện hiện đại như là Alamofire, khiến việc này dễ dàng hơn.

3.Thông tin nhạy cảm

sensitive information

3.1. Dữ liệu người dùng

Hầu hết các ứng dụng dùng hoặc lưu dữ liệu nhạy cảm của người dùng. Các thiết bị di động có quyền truy nhập vào vô số các thông tin người dùng mà thường là thông tin cá nhân ví dụ như là địa điểm, danh bạ, thông tin sức khỏe.

Như tôi đã nói ở trên, câu hỏi đầu tiên bạn cần hỏi là có nên dùng thông tin này không và quan trọng hơn, có nên lưu thông tin đó không.

Nếu bạn có thể truy cập được các thông tin mà bạn cần qua một nền tảng như là HealthKit thì không cần phải sao lưu ra làm gì cả. Ví dụ, Apple sẽ từ chối các ứng dụng mà lưu các thông tin sức khỏe của người dùng trên iCloud.

3.2. Giữ thông tin cục bộ

Giả sử bạn cần lưu một số thông tin nhạy cảm, nghĩ xem có nên lưu nó ở trên cục bộ không. Có cần thiết phải gửi thông tin đó đến máy chủ không?

Lưu thông tin nhạy cảm đi cùng với một cảnh báo, Nếu mà máy chủ mà bạn đang lưu thông tin nhạy cảm, bạn có thể phải gánh trách nhiệm khi các thông tin đó rơi vào tay các bên khác.

3.3. Thông tin xác minh

Bảo mật trực tuyến đã phát triển rất mạnh trong thời gian qua. Các giao thức xác thực như là OAuth, làm cho việc giao tiếp với dịch vụ web trở nên an toàn và minh bạch hơn.

Nếu ứng dụng của bạn cần giao tiếp với một server bảo mật, hãy nghĩ đến chuyện làm sao để xác minh ứng dụng. Ứng dụng có nên lưu thông tin xác minh ở bộ nhớ hay là trên ổ đĩa? Nếu bạn hỏi người dùng tài khoản và mật khẩu để truy cập token, lưu token đó cũng được. Nhưng mà bạn muốn lưu cả tài khoản và mật khẩu? Câu trả lời luôn là không trong hầu hết các trường hợp.

Với các ứng dụng phải làm việc với các thông tin nhạy cảm như là thông tin sức khỏe hay tài chính, nên để thông tin token trong bộ nhớ chứ đừng lưu trên ổ cứng. Dùng trên bộ nhớ thì an toàn hơn, làm ứng dụng ít có nguy cơ bị tấn công. Token lưu trên bộ nhớ cũng có vòng đời không lâu.

Tóm lại, vấn đề bảo mật của một ứng dụng là vấn đề căn bản của phát triển phần mềm. Suy nghĩ về các thông tin mà ứng dụng có thể truy cập và có nên lưu các thông tin đó không. Nếu bạn quyết định lưu các thông tin nhạy cảm, hãy nhớ các điều trên nhé. Hãy tôn trọng thông tin khách hàng. Cho dù thông tin đó không quan trọng với bạn nhưng nó quan trọng với người dùng.

Người dịch: Quang Dự.

Nguồn: code.tutsplus.com.