Những lỗ hổng bảo mật trên di động và kiểm thử bảo mật di động
Bài đăng này đã không được cập nhật trong 3 năm
Vì sao cần kiểm thử bảo mật?
Sự phát triển của điện thoại thông minh đã làm đơn giản hóa cuộc sống của chúng ta, dù là kết nối với bạn bè, gia đình, ngân hàng, thanh toán hóa đơn hay đặt vé xem phim trực tuyến,... Tuy nhiên nó cũng đã làm cho những người sử dụng smart phone và các nhà cung cấp dịch vụ dễ bị ảnh hưởng bởi các mối đe dọa an ninh. Có thể là mối đe dọa đến tài chính hoặc thông tin cá nhân. Người sử dụng điện thoại thông minh và các nhà phát triển ứng dụng cần phải thông minh hơn để giảm thiểu rủi ro. Tuy nhiên, hầu hết người dùng điện thoại thông minh không phải là hiểu biết về công nghệ. Do vậy trách nhiệm thuộc về phát triển ứng dụng và bảo mật ứng dụng để đảm bảo an ninh.
Bạn có thể có một số cổng an ninh hoặc thực hành bảo mật khác, nhưng nếu không có một chiến lược kiểm thử bảo mật ứng dụng bảo mật di động hiệu quả, bạn vẫn không làm đủ.
Các loại ứng dụng di động
Các ứng dụng di động có thể được chia thành nhiều nhóm, mỗi nhóm có những kỹ thuật kiểm tra riêng và những công cụ tương ứng giúp kiểm tra một cách hiệu quả nhất.
- Native apps: Nhóm ứng dụng di động cơ bản
Native apps được viết cho một nền tảng cụ thế và chỉ chạy trên các thiết bị được hỗ trợ tương ứng. Ví dụ như ngôn ngữ Java cho các ứng dụng Android, hoặc ngôn ngữ Objective-C cho các ứng dụng iOS.
- Web apps: Nhóm ứng dụng web di động
Thay vì phát triển từng ứng dụng cho từng nền tảng di động, web app sẽ hỗ trợ cho bất kỳ thiết bị di động nào. Sự hỗ trợ này thường bao gồm việc tinh chỉnh cho gọn lại, giảm thiểu yêu cầu băng thông, tối ưu hóa cho kích cỡ màn hình nhỏ hơn, sử dụng các tiêu chuẩn như HTML5,..
- Hybrid apps: Nhóm ứng dụng di động lai
Hybrid apps thường bao gồm một giao diện người dùng (WebView/UIWebView) dựa trên web (HTML, CSS, JavaScript) được bao bọc bởi một lớp ứng dụng cơ bản (native).
Mỗi nhóm ứng dụng di động có một mô hình đặc thù để xử lý nhằm tách riêng phần Mobile (phía ứng dụng) và phần Xử lý trung tâm hoặc lưu trữ dữ liệu (phía server). Tuy nhiên, khi một khách hàng sử dụng một ứng dụng để truy cập dịch vụ trên internet, dịch vụ đó bắt buộc phải đảm bảo an ninh ở cả hai đầu: ứng dụng và server. Sẽ là vô nghĩa khi phát triển một ứng dụng bảo mật cao nhưng lại có những lỗ hổng trong các máy chủ lưu trữ và xử lý dữ liệu; và ngược lại, thậm chí nếu server hoàn toàn an toàn nhưng có một ứng dụng không an toàn có thể làm cho dữ liệu khách hàng bị lấy cắp hoặc chuyển hướng đến một kẻ tấn công từ xa.
Những vấn đề/ rủi ro điển hình được phát hiện trong một ứng dụng di động và server
Với một tester, cần cập nhật và nắm bắt được những lỗi bảo mật phổ biến sẽ hữu ích rất nhiều trong việc tìm ra phương pháp kiểm thử áp dụng để có thể phát hiện được nhiều nhất các lỗi bảo mật ứng dụng trong dịch vụ. Với một developer, sẽ hạn chế được phần nào những lỗi lập trình gây ảnh hưởng đến ứng dụng.
Phần lớn các vấn đề an ninh đều là kết quả từ những khiếm khuyết được đưa vào một cách bất cẩn trong khi phát triển phần mềm, các lỗi lập trình của dev. Sau đây là những lỗi bảo mật thường gặp trên ứng dụng mobile:
- Improper Platform Usage: lỗ hổng nền tảng nổi tiếng
Có thể là những lỗ hổng bảo mật trong các thư viện, plugin, module,... của nền tảng sử dụng không được kiểm soát an ninh. Nó có thể là ý đồ của Android như cho phép sử dụng TouchID, Keychain, hoặc một số kiểm soát an ninh khác mà là một phần của hệ điều hành di động.
- Weak Server Side Controls: Điều khiển server yếu
Nó là những lỗ hổng trong máy chủ ảnh hướng đến người dùng nhưng không diễn ra trên điện thoại. Kinh nghiệm cho thấy rằng một số yếu tố đã dẫn đến một sự gia tăng của các lỗ hổng phía máy chủ .
-
Insecure Data Storage: Lưu trữ dữ liệu không an toàn các dữ liệu nhạy cảm trên các thiết bị di động.
-
Insufficient Transport Layer Protection: Thiếu chế độ bảo vệ tầng vận chuyển (mã hóa lớp vận chuyển)
Các ứng dụng di động có thể hoạt động trong nhiều môi trường mạng với nhiều rủi ro cao, vì vậy việc mã hóa lớp vận chuyển (Transport layer) trong SSL/HTTPS được quan tâm nhiều. Việc triển khai mã hóa lớp vận chuyển có thể gây khó khăn khi tiến hành kiểm thử đối với những trình giả lập hoặc mô phỏng từ các thiết bị thực tế.
-
Unintended Data Leakage: Không lường trước rò rỉ dữ liệu
-
Poor Authorization and Authentication: Ủy quyền và xác thực thông tin yếu
Bao gồm truy cập trái phép vào tài khoản của người dùng khác; thiếu xác thực thông tin khi được yêu cầu; cho phép người dùng tạo ra các mật khẩu yếu - hoặc không sử dụng mật khẩu có thể dẫn đến lỗ hổng tài khoản bị bẻ khóa ứng dụng.
-
Broken Cryptography: Mã hóa bị bẻ vỡ hoặc không có mã hóa
-
Client Side Injection: Tiêm nhiễm phía client
Tiêm mã độc hại, chẳng hạn như comment hay góp ý có thể đẩy lên ứng dụng và gây ra lỗ hổng tiết lộ thông tin được bảo vệ bằng cách khác.
-
Security Decisions Via Untrusted Inputs: Đầu vào không đáng tin cậy
-
Improper Session Handling: Xử lý session không đúng hay quản lý session yếu
-
Lack of Binary Protections: Không có bảo mật binary
-
Extraneous Functionality : Lỗi chức năng không liên quan
Thông thường, các lập trình viên thường thêm các chức năng ẩn hoặc kiểm soát an ninh phát triển nội bộ không dự định phát hành trong môi trường production. Ví dụ, một lập trình viên có thể vô tình để mật khẩu trong đoạn mã đã được comment lại trong code của mình. Hay trong quá trình test, lập trình viên đã vô hiệu hóa xác thực.
Trên đây chỉ là một vài ví dụ, những lỗi thông thường về bảo mật trên di động và sẽ còn rất nhiều những khả năng khác do sự phát triển ngày càng tăng của điện toán di động, chúng ta cần không ngừng cải tiến để đảm bảo an ninh thông tin cho ứng dụng.
Những lỗ hổng rủi ro trong mỗi loại ứng dụng loại sẽ khác nhau, do đó bạn cần thực hiện một đánh giá rủi ro cho các phần khác nhau của ứng dụng cần kiểm tra. Các nguy cơ lỗ hổng khác nhau trong ứng dụng cần được cân nhắc để đưa ra một số nguy cơ được sử dụng trong quá trình kiểm tra để đảm bảo tránh các vấn đề rủi ro nhất trước khi phát hành.
Phương pháp kiểm thử bảo mật di động:
Kiểm thử bảo mật di động cũng gồm các thủ tục tương tự như một kiểm thử bảo mật thông thường, đó là:
- Xác đinh mối đe dọa (Threat Profiling): Thực hiện thu thập các luồng dữ liệu trao đổi giữa thiết bị di động và máy chủ nhằm tìm ra những nguy cơ gây tổn hại đến các vấn đề bảo đảm an toàn dữ liệu như tính bí mật, tín toàn vẹn và tính sẵn sàng của máy chủ.
- Lập kế hoạch kiểm thử
- Tiến hành kiểm thử: Thực hiện kiểm tra các chức năng của ứng dụng tại môi trường phân tích tự động. Thực hiện kiểm tra thủ công các tính năng mà chương trình phân tích tự động không thể thực hiện được dựa theo các nhóm lỗ hổng và các tiêu chí kiểm tra.
- Báo cáo
Theo đó, kiểm thử ứng dụng di động phía ứng dụng sẽ bao gồm :
- Phân tích điểm yếu trong việc lưu trữ tại thiết bị
- Kiểm tra an toàn IPC
- Kiểm tra an toàn các vi phạm riêng tư
- Kiểm tra an toàn UI
- Kiểm tra xử lý logic
- Thực thi các mã khai thác ứng dụng
- Kiểm tra an toàn xác thực
- Kiểm tra an toàn sandbox
- Kiểm tra an toàn keychain
- Tìm kiếm các thông tin nhạy cảm được mã hóa trong ứng dụng
- Xác minh tính an toàn của thông tin được lưu trữ tại ứng dụng
- Kiểm tra lại các chứng chỉ SSL có được xác nhận đúng
- Kiểm tra phát hiện sử dụng mật mã không an toàn để truyền dữ liệu hoặc lưu trữ
- Phân tích source code (nếu thích hợp)
- Kiểm tra lại các thông tin cập nhật tự động không cung cấp một đường dẫn cho những kẻ tấn công để cài đặt mã độc
- Xác minh tất cả các thông tin nhạy cảm có được gỡ bỏ sau khi gỡ bỏ các ứng dụng
- Ứng dụng có yêu cầu những quyền truy cập ngoài luồng, chẳng hạn như danh bạ của người dùng khi nó không phải là cần thiết.
Phía server, cần phải xem xét chi tiết các khía cạnh sau để đảm bảo rằng các máy chủ không làm lộ dữ liệu khách hàng cho các bên khác:
- Kiểm tra có lỗi cấu hình máy chủ
- Kiểm tra lỗ hổng trong mã máy chủ hoặc các kịch bản
- Kiểm tra lại dữ liệu mà có thể đã tiếp xúc do lỗi trong quá khứ
Kết luận:
Kiểm thử bảo mật giống như người bạn đồng hành cùng bạn, nói cho bạn tránh các bẫy tốc độ và cảnh sát trên đường (các vấn đề cần tuân thủ), và chỉ cho bạn chỗ nguy hiểm trên đường (kẻ tấn công độc hại). Đó là vẻ đẹp của kiểm thử bảo mật ứng dụng di động khi nó được thực hiện đúng cách. Nó không ở đó để làm chậm bạn, nó ở đó để giúp bạn đi một cách an toàn.
Nguồn tham khảo:
https://www.owasp.org/index.php/Mobile_Top_10_2016-Top_10
https://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Risks
https://www.netcraft.com/security-testing/mobile-app-security-testing/
All rights reserved