Nhiều người tin rằng vì mã của một app được đóng gói và cài lên điện thoại nên nó an toàn hơn một website phơi bày trên trình duyệt. Đây là một ngộ nhận nguy hiểm. App mobile có những điểm yếu bảo mật rất riêng, và cách tốt nhất để hiểu chúng là nhìn qua con mắt của kẻ tấn công, người sẽ tìm tới những chỗ mà nhà phát triển hay xem nhẹ. Một app được làm cẩu thả về bảo mật có thể làm lộ dữ liệu người dùng, để lộ đường vào hệ thống phía sau, hoặc bị giả mạo. Bài viết này đi qua những điểm yếu đặc thù của app mobile và cách phòng thủ đúng, bằng ngôn ngữ dễ hiểu cho người không chuyên kỹ thuật.
App mobile bị tấn công khác website ra sao
Khác biệt cốt lõi là một app sống trên thiết bị của người dùng, một môi trường mà bạn không kiểm soát và kẻ tấn công có thể nắm trong tay. Họ có thể cài app lên máy của chính mình, mổ xẻ nó, theo dõi cách nó hoạt động và giao tiếp, tìm những bí mật mà nhà phát triển vô tình để lại bên trong. Với website, phần lớn logic quan trọng nằm trên máy chủ; với app, một phần đáng kể nằm ngay trên thiết bị, trong tầm với của kẻ tấn công.
Điều này nghĩa là một nguyên tắc nền tảng phải được ghi nhớ: không bao giờ tin tưởng những gì nằm trên thiết bị của người dùng. Mọi thứ được cài lên máy đều có thể bị xem xét và can thiệp. Hiểu được rằng app hoạt động trong một môi trường thù địch, chứ không phải một không gian an toàn do bạn kiểm soát, là điểm khởi đầu để xây dựng phòng thủ đúng đắn thay vì dựa vào những giả định sai lầm về sự an toàn.
Lưu trữ dữ liệu trên thiết bị: con dao hai lưỡi
App thường lưu dữ liệu ngay trên thiết bị để hoạt động nhanh và mượt, nhưng đây cũng là một điểm yếu lớn nếu làm cẩu thả. Nếu thông tin nhạy cảm được lưu một cách hớ hênh trên máy, kẻ tấn công có thể truy cập tới nó, đặc biệt trên những thiết bị đã bị can thiệp. Một sai lầm phổ biến là lưu những bí mật quan trọng ngay trong app với niềm tin sai lầm rằng không ai mò tới được.
Phòng thủ đúng nghĩa là cẩn trọng về việc cái gì được lưu trên thiết bị và lưu như thế nào. Thông tin nhạy cảm nếu buộc phải lưu thì cần được bảo vệ đúng cách bằng những cơ chế an toàn mà nền tảng cung cấp, thay vì để trần. Và nguyên tắc tốt nhất là hạn chế tối đa việc giữ những bí mật quan trọng trên máy ngay từ đầu. Càng ít thứ giá trị nằm trong tầm với của kẻ tấn công trên thiết bị, bề mặt tấn công càng nhỏ.
Token và phiên đăng nhập
Khi người dùng đăng nhập vào app, hệ thống thường cấp cho thiết bị một dạng vé chứng minh danh tính, gọi là token, để họ không phải nhập lại mật khẩu liên tục. Vé này rất giá trị với kẻ tấn công, vì nếu chiếm được nó, họ có thể mạo danh người dùng. Vì thế cách app lưu giữ và quản lý token là một điểm bảo mật then chốt mà nếu làm sai sẽ mở toang cánh cửa.
Phòng thủ tốt bao gồm việc lưu token một cách an toàn trên thiết bị, đặt cho nó thời hạn hợp lý để giảm thiệt hại nếu bị lộ, và có cơ chế thu hồi khi cần. Một token sống mãi mãi và được lưu hớ hênh là một thảm họa chờ xảy ra. Quản lý vòng đời của token một cách cẩn thận, cân bằng giữa sự tiện lợi cho người dùng và sự an toàn, là một phần thiết yếu của bảo mật app mà người dùng không nhìn thấy nhưng được bảo vệ nhờ nó.
API phía sau: cánh cửa thật sự vào hệ thống
Đây có lẽ là điểm quan trọng nhất mà nhiều người bỏ qua. App giao tiếp với hệ thống phía sau qua các điểm kết nối gọi là API, và chính các API này, chứ không phải bản thân app, mới là cánh cửa thật sự dẫn vào dữ liệu và hệ thống của bạn. Một sai lầm chí mạng là tin rằng vì chỉ có app của mình gọi tới các API này nên chúng an toàn; thực tế kẻ tấn công có thể gọi thẳng tới chúng mà không cần qua app.
Vì thế, mọi API phải tự bảo vệ mình như thể bất kỳ ai cũng có thể gọi tới, kiểm tra kỹ quyền của mỗi yêu cầu và không tin tưởng rằng yêu cầu đến từ app hợp lệ. Một lỗi phổ biến và nguy hiểm là đặt phần kiểm tra bảo mật trong app thay vì ở phía hệ thống; kẻ tấn công bỏ qua app và gọi thẳng API sẽ vượt qua mọi kiểm tra đặt sai chỗ đó. Bảo vệ API đúng cách là tuyến phòng thủ quan trọng nhất, vì đó là nơi dữ liệu thật sự nằm.
Dữ liệu truyền đi phải được mã hóa
Khi app trao đổi thông tin với hệ thống phía sau, dữ liệu đó di chuyển qua mạng và có thể bị nghe lén trên đường đi nếu không được bảo vệ, đặc biệt khi người dùng dùng mạng công cộng. Đây là một điểm yếu cơ bản nhưng vẫn bị xem nhẹ trong một số app. Thông tin nhạy cảm truyền đi mà không được mã hóa giống như gửi một tấm bưu thiếp mà ai cầm cũng đọc được.
Phòng thủ ở đây là đảm bảo mọi giao tiếp giữa app và hệ thống đều diễn ra qua kết nối được mã hóa, để dữ liệu trên đường truyền không thể bị đọc trộm. Với những app xử lý thông tin đặc biệt nhạy cảm, có thể cần thêm những lớp bảo vệ để chống lại cả những kiểu nghe lén tinh vi. Bảo vệ dữ liệu trên đường truyền là một yêu cầu nền tảng không thể thỏa hiệp, vì một đường truyền không an toàn làm vô hiệu hóa mọi nỗ lực bảo mật khác.
Mã nguồn app không phải một hộp kín
Một ngộ nhận phổ biến là tin rằng vì app được đóng gói nên không ai xem được bên trong. Thực tế, kẻ tấn công có công cụ để mổ xẻ một app, đọc hiểu phần nào cách nó hoạt động, và quan trọng nhất là tìm những bí mật được nhúng bên trong. Vì thế, đặt những thông tin nhạy cảm như khóa bí mật ngay trong mã app là một sai lầm thường gặp và nguy hiểm, vì chúng có thể bị moi ra.
Phòng thủ đúng là không bao giờ coi bên trong app là nơi an toàn để giấu bí mật. Những thông tin thật sự nhạy cảm nên nằm ở phía hệ thống được bảo vệ, không phải trong app. Có những kỹ thuật làm cho việc mổ xẻ app khó khăn hơn, nhưng chúng chỉ là lớp làm chậm chứ không phải sự an toàn tuyệt đối. Nguyên tắc vàng vẫn là giả định rằng mọi thứ trong app đều có thể bị nhìn thấy, và thiết kế bảo mật dựa trên giả định đó thay vì dựa vào sự che giấu.
Bảo mật phải được tích hợp từ đầu, không vá sau
Một chủ đề xuyên suốt là bảo mật app không phải thứ thêm vào ở phút chót mà phải được nghĩ tới ngay từ khi thiết kế. Những quyết định nền tảng về việc cái gì lưu ở đâu, API được bảo vệ ra sao, token quản lý thế nào, đều ảnh hưởng sâu tới toàn bộ kiến trúc và rất khó sửa sau khi app đã hoàn thiện. Cố vá bảo mật vào một app được xây mà không nghĩ tới nó thường tốn kém và để lại lỗ hổng.
Cách tiếp cận đúng là xem bảo mật như một phần của quá trình phát triển từ đầu tới cuối, với những cân nhắc ở mỗi quyết định thiết kế. Điều này không có nghĩa là mọi app đều cần mức bảo mật cao nhất; mức độ phù hợp phụ thuộc vào độ nhạy cảm của dữ liệu và rủi ro. Nhưng kể cả với một app đơn giản, những nguyên tắc cơ bản về bảo vệ API, mã hóa đường truyền và cẩn trọng với lưu trữ cục bộ đều nên được áp dụng. Phòng bệnh từ đầu luôn rẻ hơn chữa một sự cố sau này.
Dấu hiệu rủi ro và những phòng thủ cốt lõi
Tổng kết lại, có vài nguyên tắc phòng thủ cốt lõi đáng ghi nhớ. Không tin tưởng những gì nằm trên thiết bị và hạn chế lưu thông tin nhạy cảm ở đó. Bảo vệ mọi API ở phía hệ thống như thể bất kỳ ai cũng có thể gọi tới, thay vì đặt kiểm tra trong app. Mã hóa mọi dữ liệu trên đường truyền. Quản lý token cẩn thận với thời hạn và khả năng thu hồi. Và không bao giờ giấu bí mật trong mã app.
Những nguyên tắc này nghe có vẻ kỹ thuật, nhưng với người chủ doanh nghiệp, điều quan trọng là biết chúng tồn tại và hỏi đơn vị làm app liệu họ có áp dụng hay không. Cách họ trả lời cho bạn biết họ nghiêm túc với an toàn của người dùng tới đâu. Bảo mật app là một lĩnh vực mà sự cẩu thả không lộ ra cho tới khi xảy ra sự cố, và lúc đó cái giá phải trả, gồm cả niềm tin của người dùng, thường vượt xa khoản tiết kiệm được từ việc làm ẩu.
Tại Microads, chúng tôi tích hợp bảo mật vào app ngay từ thiết kế, với sự chú trọng đặc biệt vào bảo vệ API phía sau, quản lý token và cẩn trọng với dữ liệu trên thiết bị. Nếu app của bạn xử lý dữ liệu người dùng và bạn muốn chắc rằng nó được phòng thủ đúng cách, hãy trao đổi với chúng tôi qua 0919 788 815 hoặc khanhn@microads.vn.