Giới thiệu
Hôm 27/3, cộng đồng an ninh thông tin Việt cho biết hai ứng dụng ngân hàng nổi tiếng – BIDV SmartBanking và Agribank Plus khai thác API iOS ẩn để dò tìm những app khác cài trên iPhone người dùng.
Hành vi này được @opa334, nhà phát triển của TrollStore, lần đầu nêu trên infosec.exchange cách đây hai ngày và sau đó được nhắc đến trong bài đăng trên Facebook của J2TEAM. Vụ việc nhanh chóng gây xôn xao vì nó cho thấy sự vi phạm chính sách của Apple và xâm phạm quyền riêng tư người dùng.
Thông tin ban đầu trong bài đăng trên Facebook đã nêu nghi ngờ việc vi phạm này do giải pháp bảo mật di động BShield Mobile Security gây ra, dẫn đến hiểu lầm ảnh hưởng đến uy tín của BShield và Verichains.
Do đó, chúng tôi đã tiến hành phân tích kỹ thuật hai ứng dụng ngân hàng được đề cập: BIDV SmartBanking (v5.2.62, cập nhật ngày 14/03/2025) và Agribank Plus (v5.1.8, cập nhật ngày 25/03/2025). Bài viết này trình bày chi tiết phân tích và đánh giá các tác động đối với người dùng cũng như các ứng dụng ngân hàng.
Tuyên bố từ chối trách nhiệm:
Phân tích này được công bố với mục đích nghiên cứu an ninh, minh bạch và bảo vệ khách hàng. Tài liệu cũng nhằm làm rõ các cáo buộc sai lệch liên quan đến sự tham gia của BShield, thúc đẩy tính minh bạch kỹ thuật.
Mặc dù chúng tôi nỗ lực đảm bảo độ chính xác, nhưng không đưa ra bất kỳ cam kết hay bảo đảm nào, dù rõ ràng hay ngụ ý, về tính đầy đủ, chính xác độ tin cậy, tính phù hợp hoặc khả năng sẵn có của thông tin, sản phẩm, dịch vụ, hay hình ảnh liên quan trong bài viết này cho bất kỳ mục đích nào. Thông tin được cung cấp không nhằm khuyến khích, hướng dẫn hay hỗ trợ bất kỳ hành động nào vi phạm chính sách của Apple, Google hoặc quy định pháp lý hiện hành. Chúng tôi không chịu trách nhiệm về bất kỳ thiệt hại hay hậu quả nào sinh từ việc sử dụng sai thông tin trong phân tích này.
Phân tích kĩ thuật
Tóm tắt
Phân tích kỹ thuật cho thấy hai ứng dụng ngân hàng BIDV SmartBanking (v5.2.62, cập nhật ngày 14/03/2025) và Agribank Plus (v5.1.8, cập nhật ngày 25/03/2025), được phát triển bởi VNPay, sử dụng các giải pháp bảo vệ ứng dụng thương mại DexProtector/Licel and Dexguard/iXGuard, kèm theo một mô đun tự phát triển có khả năng được đặt tên “VNPay Runtime Protection” hay “VNPShield”.
Mô đun này khai thác lỗ hổng kênh phụ (side-channel) của một API ẩn của hệ điều hành iOS SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions để xác định ứng dụng được người dùng cài đặt trên thiết bị iPhone/iPad, đồng thời sử dụng cơ chế mã hóa che giấu các chuỗi API ẩn này. Lỗ hổng kênh phụ (side-channel) này ảnh hưởng phiên bản iOS mới nhất trên thiết bị iPhone/iPad không jailbreak. Theo chương trình tiền thưởng bảo mật của Apple (Apple Security Bounty Program), lỗ hổng kênh phụ này thuộc nhóm “Tấn công thiết bị thông qua ứng dụng do người dùng cài đặt - Truy cập trái phép vào dữ liệu nhạy cảm” với mức tiền thưởng 5.000 USD.
Những hành vi trên vi phạm nghiêm trọng chính sách của Apple App Store và gây rủi ro lớn nếu Apple cấm hay gỡ bỏ ứng dụng, ảnh hưởng tới hàng triệu khách hàng của ngân hàng.
Sự cố này hoàn toàn KHÔNG liên quan đến sản phẩm BShield của Verichains. Mục đích chính của giải pháp Mobile Shield là chủ động giúp bảo vệ các ứng dụng ngân hàng trước mã độc trên thiết bị người dùng, ngăn chặn việc chiếm đoạt tài khoản, đánh cắp tiền và dữ liệu cá nhân thường xuyên xảy ra trong thời gian qua. Mặc dù khai thác lỗ hổng N-day hoặc API ẩn có thể giúp một phần tăng cường khả năng phát hiện mã độc, BShield KHÔNG áp dụng các phương pháp kỹ thuật mang tính rủi ro hay nguy hiểm này, đảm bảo tuân thủ đầy đủ chính sách cửa hàng ứng dụng của Apple và Google, ưu tiên bảo mật người dùng và doanh nghiệp trong bối cảnh các mối đe dọa nhắm vào ứng dụng ngân hàng ngày càng gia tăng.
Phân tích Cơ chế làm rối (Obfuscation)
Để che giấu việc sử dụng API ẩn, trong ứng dụng ngân hàng có sử dụng một phương pháp mã hóa XOR rất yếu nhằm làm rối các chuỗi nhạy cảm như tên API và định danh bundle của ứng dụng. Kỹ thuật này nhằm che giấu các chuỗi API khỏi các công cụ phân tích tĩnh của Apple, khiến việc phát hiện lạm dụng API khó khăn hơn. Trong quá trình chạy, các chuỗi đã được mã hóa sẽ được giải mã bằng cách thực hiện phép XOR với khoá để khôi phục về giá trị ban đầu.
Khóa được sử dụng là “94826663” trên ứng dụng BIDV (“41818020” trên ứng dụng Agribank) và dữ liệu mã hóa được lưu trữ trong phần ‘data’. Hàm giải mã, có tên RE_Decrypt_10233F108, có thể được biểu diễn trong Python như sau:
Từ các chuỗi đã được giải mã, chúng tôi nhận thấy đoạn mã này có khả năng là một phần của mô đun có tên ‘VNPay Runtime Protection’. Quay trở lại đoạn mã xử lý:
Đoạn mã hoạt động như sau:
Tạo metadata cho các hằng số được lưu trữ trong vùng dữ liệu (data section).
Gọi swift_initStaticObject để khởi tạo đối tượng static, giá trị được lưu ở một vị trí khác trong phần dữ liệu (trong trường hợp này, kết quả sẽ là một đối tượng String của Swift).
Gọi RE_Decrypt_10233F108 để giải mã các chuỗi nhằm xử lý tiếp theo.
Mã này có thể đơn giản hóa thành v40 = dlopen(XOR_DECRYPT(X), 1), với X là chuỗi được mã hóa trong vùng dữ liệu. Vi dụ:
Đoạn mã trên tương đương với việc gọi hàm csops
từ /usr/lib/libSystem.B.dylib
:
"/usr/lib/libSystem.B.dylib".csops(a1, a2, a3, a4);
Tương tự cho các API ẩn khác:
Phân tích API ẩn lấy thông tin ứng dụng đã cài đặt trên thiết bị
Đoạn mã trên kiểm tra ứng dụng đã được cài đặt trên thiết bị người dùng bằng cách gọi API iOS ẩn SBSLaunchApplicationWithIdentifier với Bundle ID của app. Thông thường, nhà phát triển khởi chạy ứng dụng qua các scheme được hỗ trợ. Tuy nhiên, API này trực tiếp khởi chạy bất kỳ app nào nếu app gọi có “Entitlement” do Apple cấp. Do đó, API ẩn này có thể được dùng như một kênh phụ (side-channel) để xác minh sự tồn tại của app qua mã lỗi trả về.
Lưu ý: API này từ SpringBoard là API ẩn và không được Apple cung cấp chính thức cho các nhà phát triển, nên việc sử dụng nó vi phạm chính sách của App Store.
Danh sách một số app được kiểm tra:
org.coolstar.SileoStore
com.opa334.Dopamine.roothide
com.roothide.manager
com.cokepokes.AppStorePlus
_xyz.willy.Zebra* com.opa334.Dopamine
com.kahsooa.piqwkk.dummy
Ảnh chụp màn hình LLDB bên dưới tại breakpoint trong SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions hiển thị việc kiểm tra "com.opa334.Dopamine.roothide".

Dựa vào các mã lỗi mà nó trả về của API SBSLaunchApplicationWithIdentifier:
• Nếu đã cài đặt: trả về lỗi security policy error (chính sách bảo mật - mã lỗi 9) do thiếu chứng nhận của Apple.
• Nếu không cài đặt: trả về application not found (không tìm thấy ứng dụng - mã lỗi 7).
Đây là một hình thức khai thác lỗ hổng kênh phụ, sử dụng API ẩn của iOS để kiểm tra xem một ứng dụng có được cài đặt hay không. Hành động khai thác này được thực hiện trong class có tên VNPShieldBridgingManager. Chúng tôi đã kiểm chứng và xác nhận lỗi kênh phụ này khai thác được trên phiên bản iOS mới nhất và trên thiết bị bình thường không jailbreak.
Khi ứng dụng ngân hàng khai thác API này, console log của ứng dụng sẽ hiển thị nhiều thông báo lỗi về việc ứng dụng đang cố gắng khởi chạy app khác.
Thảo luận Chính sách App Store của Apple
Theo Hướng dẫn Đánh giá App Store của Apple (Mục 2.5.1 và 5. Legal), việc sử dụng các API ẩn, không công khai (riêng tư) mà không có sự chấp thuận của Apple và người dùng vi phạm các tiêu chuẩn minh bạch dữ liệu, quyền kiểm soát của người dùng và tiêu chuẩn bảo mật, từ đó làm suy yếu lòng tin của người dùng.
Cụ thể, mục 2.5.1 quy định rằng các ứng dụng "chỉ được sử dụng API công khai" và phải sử dụng chúng một cách nghiêm ngặt theo mục đích đã được định sẵn. Bất kỳ việc sử dụng các framework hệ thống nội bộ chưa được tiết lộ hoặc các chức năng ẩn nào cũng sẽ dẫn đến việc ứng dụng bị từ chối hoặc gỡ bỏ. Apple thi hành những quy định này nhằm duy trì sự ổn định của ứng dụng, bảo vệ quyền riêng tư của người dùng và đảm bảo an ninh cho nền tảng.
Hành vi tìm cách vượt qua các hạn chế của iOS hoặc thu thập dữ liệu không được phép (ví dụ như danh sách các ứng dụng đã cài đặt) là một vi phạm nghiêm trọng, gây ra những dấu hiệu cảnh báo nghiêm trọng đối với Apple cũng như người dùng quan tâm đến bảo mật. Những hành vi này có thể dẫn đến việc ứng dụng bị cấm hoặc gỡ bỏ khỏi App Store, ảnh hưởng tới hàng triệu khách hàng của ngân hàng.
Trong bài phân tích này, chúng tôi xác nhận private API SBSLaunchApplicationWithIdentifier
có thể được sử dụng như một kênh phụ (side channel) để xác định sự tồn tại của các ứng dụng thông qua mã lỗi trả về, hoạt động trên các phiên bản iOS mới nhất trên thiết bị mới chưa jailbreak. Theo chương trình tiền thưởng bảo mật của Apple (Apple Security Bounty Program), khai thác lỗ hổng này thuộc nhóm “Tấn công thiết bị thông qua ứng dụng do người dùng cài đặt - Truy cập trái phép vào dữ liệu nhạy cảm” với mức tiền thưởng 5.000 USD.
Kết luận
Phân tích kỹ thuật cho thấy hai ứng dụng ngân hàng BIDV SmartBanking (v5.2.62, cập nhật ngày 14/03/2025) và Agribank Plus (v5.1.8, cập nhật ngày 25/03/2025), được phát triển bởi VNPay, sử dụng các giải pháp bảo vệ ứng dụng thương mại DexProtector/Licel and Dexguard/iXGuard, kèm theo một mô đun tự phát triển có khả năng được đặt tên “VNPay Runtime Protection” hay “VNPShield”.
Mô đun này khai thác lỗ hổng kênh phụ (side-channel) của một API ẩn của hệ điều hành iOS SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions để xác định ứng dụng được người dùng cài đặt trên thiết bị iPhone/iPad, đồng thời sử dụng cơ chế mã hóa che giấu các chuỗi API ẩn này. Lỗ hổng kênh phụ (side-channel) này ảnh hưởng phiên bản iOS mới nhất trên thiết bị iPhone/iPad không jailbreak. Theo chương trình tiền thưởng bảo mật của Apple (Apple Security Bounty Program), lỗ hổng kênh phụ này thuộc nhóm “Tấn công thiết bị thông qua ứng dụng do người dùng cài đặt - Truy cập trái phép vào dữ liệu nhạy cảm” với mức tiền thưởng 5.000 USD.
Những hành vi trên vi phạm nghiêm trọng chính sách của Apple App Store và gây rủi ro lớn nếu Apple cấm hay gỡ bỏ ứng dụng, ảnh hưởng tới hàng triệu khách hàng của ngân hàng.
Sự cố này hoàn toàn KHÔNG liên quan đến sản phẩm BShield của Verichains. Mục đích chính của giải pháp Mobile Shield là chủ động giúp bảo vệ các ứng dụng ngân hàng trước mã độc trên thiết bị người dùng, ngăn chặn việc chiếm đoạt tài khoản, đánh cắp tiền và dữ liệu cá nhân thường xuyên xảy ra trong thời gian qua. Mặc dù khai thác lỗ hổng N-day hoặc API ẩn có thể giúp một phần tăng cường khả năng phát hiện mã độc, BShield KHÔNG áp dụng các phương pháp kỹ thuật mang tính rủi ro hay nguy hiểm này, đảm bảo tuân thủ đầy đủ chính sách cửa hàng ứng dụng của Apple và Google, ưu tiên bảo mật người dùng và doanh nghiệp trong bối cảnh các mối đe dọa nhắm vào ứng dụng ngân hàng ngày càng gia tăng.
Mục đích của team dev chắc tập trung vào support Bank chống các case tấn công gây mất tiền cho Khách hàng và “vô tình” chạm Policy của Apple chứ m ko nghĩ focus vào phần bounty program. Đánh đổi vậy không khôn ngoan.