Thử nghiệm bảo mật của web và ứng dụng của một số ngân hàng tại VN

Nhân dịp vấn đề an toàn giao dịch ngân hàng trực tuyến đang nóng, mình làm một vài bài thử nghiệm với các dịch vụ của 5 ngân hàng lớn trong nước: BIDV, Vietcombank, ACB, Techcombank, Sacombank và 2 ngân hàng nước ngoài là Citibank và HSBC. Mình sẽ chạy một số bài test về bảo mật trên cả web lẫn ứng dụng di động chính chủ do các ngân hàng này phát hành, cũng như kiểm tra các cách mà họ mã hóa dữ liệu và bảo vệ đường truyền thông tin giữa người dùng với máy chủ.
Thử nghiệm bảo mật của web và ứng dụng của một số ngân hàng tại VN

Các bài test được tiến hành bao gồm

1. Trang web


  • TLS: phải bật
  • SSL Server Test: phải từ A trở lên
  • HPKP: phải sử dụng
  • hoặc phải mã hóa tên và mật khẩu bằng Javascript trước khi đăng nhập. 
2. Ứng dụng di động: lúc đầu mình tính kiểm tra riêng Android và iOS nhưng thực tế thấy ứng dụng mỗi ngân hàng ở hai nền tảng khá giống nhau nên gom lại chung cho gọn

  • TLS: phải sử dụng
  • Certificate/Public Key Pinning: phải sử dụng
  • hoặc phải mã hóa tên và mật khẩu đăng nhập

Giải thích một số khái niệm cơ bản:

Mã hóa: biến một dữ liệu bình thường, ví dụ duyluandethuong, thành một chuỗi các kí tự, ví dụ bfruifJfrieYFGUR13fnyfi. Có kiểu hai chiều (giải mã được) và một chiều (không giải mã được) thường dùng nhất là trong quá trình đăng nhập nhằm kiểm tra password.

TLS (Transport Layer Security): là người kế nhiệm cho giao thức bảo mật SSL trước đây nhưng đôi khi cũng được gọi chung là SSL hoặc SSL / TLS. Đây là giao thức dùng để mã hóa dữ liệu trong quá trình truyền thông tin. Mục đích của TLS là nhằm đảm bảo an toàn cho dữ liệu, theo lý thuyết thì không có bên thứ ba nào có thể lấy trộm hay chỉnh sửa dữ liệu khi nó đang được gửi đi. Nếu có lấy được thì nó cũng chỉ là dữ liệu đang được mã hóa và không thể sử dụng được. TLS đang được triển khai trong rất nhiều trang web, trình gửi file, email, ứng dụng chat, gọi thoại...

Man In The Middle (người trung gian): là dạng tấn công mà tin tặc sẽ đứng giữa hai điểm gửi nhận dữ liệu và bí mật chuyển các dữ liệu đó đi đường khác trong nỗ lực đánh cắp thông tin. Tin tặc cũng có thể nhận gói dữ liệu, chỉnh sửa lại theo kiểu có hại trước khi đưa dữ liệu về cho điểm nhận.

Giới thiệu về các bài kiểm tra

TLS cần có chứng chỉ, trước đây còn có rào cản về chi phí để duy trì chứng chỉ đó (giá tham khảo trên trang web GoDaddy vào khoảng 70$ đến vài trăm đô tùy loại, check vào tháng 7/2016). Tuy nhiên gần đây đã có chứng chỉ miễn phí từ các dịch vụ ví dụ như Let's Encrypt nên không còn lý do gì nữa để không làm việc này. TLS là bước cơ bản nhất để bảo mật thông tin giữa ngân hàng và người sử dụng.

SSL Server Test là bài kiểm tra máy chủ web bao gồm phần mềm, cấu hình TLS và chứng chỉ. Bài kiểm tra này sẽ cho điểm trang web, tối đa là điểm A. Điểm càng cao càng tốt. Mình sử dụng dịch vụ test miễn phí của trang Qualys SSL Labs.

HPKP (Public Key Pinning Extension for HTTP) là một phần mở rộng cho HTTP cho phép các trang web bảo vệ mình khỏi các cuộc tấn công dạng MITM (man in the middle / người trung gian). Cách tấn công này nôm na là kẻ tấn công can thiệp vào giữa kết nối của người dùng và ngân hàng sau đó bí mật ngăn chặn và thay đổi thông tin qua lại giữa hai bên. HPKP vẫn còn khá mới và chưa được hỗ trợ rộng khắp, người dùng cần sử dụng phiên bản khá mới của các trình duyệt để được bảo vệ (ví dụ: Chrome 46, Firefox 35 trở lên).

Certificate/Public Key Pinning có ý tưởng gần giống HPKP nhưng thay vì thực hiện kiểm tra ở trình duyệt thì mỗi ứng dụng tự kiểm tra khi kết nối với máy chủ. Lợi điểm của việc này là không phụ thuộc nhiều vào app / web ở phía người dùng. Do ứng dụng được phát hành bởi chính ngân hàng nên đội phát triển có thể nắm rõ máy chủ ngân hàng sử dụng chứng chỉ gì, phát hành bởi đơn vị nào, từ đó thực hiện Pinning đảm bảo thông tin của người sử dụng không bị lộ với bên thứ ba.

Trong trường hợp không sử dụng Pinning thì ứng dụng cần phải mã hóa tất cả các thông tin nhạy cảm như tên, mật khẩu đăng nhập theo cả hai hướng (gửi lên / nhận về) để bảo vệ người sử dụng.

Kết quả: Mỗi bước kiểm tra có thể có kết quả là

  • PASS: đạt, yêu
  • BAD: yêu cầu nên có mà không sử dụng
  • FAIL: yêu cầu phải có mà không sử dụng

Kết quả kiểm tra
Trên web
Trên Ứng dụng

Ghi chú: không thử mã hóa vì đã áp dụng pinning, không thấy được các request

Kết luận

Như vậy là chỉ có 1 trang web qua được bài kiểm tra (Sacombank) và cả 7 trang đều không xài HPKP. Như đã nói ở trên, đây là chức năng khá mới và đa số người dùng cũng chưa sử dụng trình duyệt phiên bản đủ mới để hưởng lợi từ việc này. Trên thế giới cũng còn nhiều trang web tài chính chưa bắt đầu sử dụng HPKP (ví dụ như PayPal, HSBC US).

Về ứng dụng di động, 2 ứng dụng không qua được bài kiểm tra (ACB, Techcombank) và 1 ứng dụng duy nhất có sử dụng kỹ thuật Pinning là BIDV. Ứng dụng HSBC và Citibank là do mình rảnh quá test thêm, anh em tham khảo chơi.

Một số ghi chú thêm
Chi tiết


Thông báo lỗi của app BIDV và HSBC khi bị tấn công​

Trang web của ACB bị điểm B vì nhiều lý do tuy nhiên nặng nhất là do cấu hình chưa an toàn (chi tiết xem thêm trang tổng hợp về ACB tại SSL Labs).

Kết luận chung cuộc

1. Sacombank: chưa áp dụng các công nghệ mới nhất nhưng vẫn an toàn
2. BIDV, Vietcombank: ứng dụng của 2 ngân hàng này an toàn hơn web của họ
3. ACB, Techcombank: về chót. Nên hạn chế sử dụng nếu đang kết nối qua mạng công cộng (wifi quán cà phê, wifi không bảo mật).
Bài này đã được thay đổi do lỗi khi chạy thử web của BIDV dẫn đến thay đổi thứ tự bảng tổng kết cuối cùng (kết quả cũ là BIDV số 1, kết quả cập nhật là Sacombank vượt lên!).

Theo Tinhte.vn / Geek, ảnh minh họa: Gemalto​

* Cảm xúc Nhận Làm Marketing Online chuyên nghiệp uy tín
* Bán cá Nhật nhập khẩu từ Hokkaido
* Tuyển dụng nhân viên lễ tân, giao nhận đi làm ngay

Bài viết liên quan: