Hiện nay, xác thực bằng mật khẩu là cách thức đăng nhập phổ biến nhất đối với các dịch vụ trên mạng Internet. Phần mềm quản lý mật khẩu giúp người dùng ghi nhớ mật khẩu dễ dàng, tiện lợi và an toàn hơn.
Trong thực tế, đã có rất nhiều cuộc tấn công khai thác các lỗ hổng trong phần mềm quản lý mật khẩu để chiếm đoạt các mật khẩu được lưu trữ. Bài viết này phân tích về các lỗ hổng mức ứng dụng trong phần mềm quản lý mật khẩu Web, gây nguy cơ mất mật khẩu của người dùng. Phần mềm quản lý mật khẩu được xem xét, kiểm thử trong bài báo này bao gồm:
- Tích hợp trong các trình duyệt Web trên các máy tính PC: Google Chrome 34, Microsoft Internet Explorer (IE) 11, Mozilla Firefox 29 và Apple Safari 7.
- Từ bên thứ ba hỗ trợ tích hợp trên các trình duyệt Web: 1Password, LastPass, Keeper, Norton IdentitySafe, PasswordSafe, and KeePass.
- Tích hợp trên IOS của Apple: Mobile Safari.
- Tích hợp trên trình duyệt Web của Android: Android browser và Chrome.
Cách thức hoạt động của phần mềm quản lý mật khẩu
Về bản chất, phần mềm quản lý mật khẩu giống như một cơ sở dữ liệu lưu trữ tài khoản/mật khẩu của người dùng. Một phần mềm quản lý mật khẩu sẽ duy trì cơ sở dữ liệu thông tin để xác thực người dùng đối với các ứng dụng Web khác nhau. Khi truy cập một ứng dụng Web, người dùng sẽ được yêu cầu điền các thông tin chứng thực bao gồm tài khoản/mật khẩu vào một mẫu trang đăng nhập (login form).
Hình 1 mô tả cách thức sử dụng phần mềm quản lý mật khẩu để đăng nhập vào ứng dụng Web đã lưu các thông tin chứng thực trong trình duyệt Web (được lưu trong lần đăng nhập trước). Tại bước 1, người dùng sẽ dùng tài khoản/mật khẩu quản trị để đăng nhập vào phần mềm quản lý mật khẩu. Bước 2, người dùng lấy thông tin chứng thực bao gồm tài khoản/mật khẩu dành cho ứng dụng Web muốn sử dụng. Tại bước 3 và bước 4, các thông tin chứng thực sẽ được nhập tự động vào mẫu trang đăng nhập của ứng dụng Web và gửi đi để có thể vào được ứng dụng Web.
Thông thường, người dùng sẽ không đặt tài khoản/mật khẩu quản trị cho các phần mềm quản lý mật khẩu tích hợp trên trình duyệt Web. Vì vậy, khi mở trình duyệt Web, người dùng luôn trong trạng thái truy cập vào phần mềm này. Khi truy cập một trang Web thì các thông tin chứng thực đã lưu sẽ được phần mềm quản lý mật khẩu tự động điền vào mẫu trang đăng nhập bằng chức năng Manual Autofill hoặc Automatic Autofill.
Ở chế độ Manual Autofill, khi phần mềm quản lý điền các thông tin chứng thực vào mẫu trang đăng nhập của ứng dụng Web thì yêu cầu có thêm một vài tương tác từ người dùng (như nhấn chuột, phím tắt từ bàn phím, phím trên trình duyệt...).
Còn ở chế độ Automatic Autofill, khi truy cập trang Web thì thông tin chứng thực sẽ tự động được điền vào mẫu trang đăng nhập của ứng dụng Web mà không yêu cầu bất kỳ một tương tác nào từ người dùng. Người dùng chỉ cần nhấn đăng nhập (login) để đăng nhập vào ứng dụng Web.
Hầu hết các phần mềm quản lý mật khẩu đều thiết lập cấu hình tính năng Automatic Autofill mặc định và điều này gây ra rất nhiều lỗ hổng bảo mật.
Lỗ hổng trong phần mềm quản lý mật khẩu
Trong tên miền và đường dẫn
Tất cả các phần mềm quản lý mật khẩu đã được kiểm thử đều thực hiện tự động điền thông tin chứng thực vào bất kỳ một trang nào trong một miền mà mật khẩu đã được lưu trước đó (xem cột 3 Bảng 1). Ví dụ: mật khẩu được lưu cho trang
//forum. example.com cũng sẽ được tự động điền vào trang
//example.com/log_in khi người dùng truy cập vào. Điều này rất nguy hiểm, bởi trong các forum, blog hay miền con email là các trang mà kẻ tấn công có thể dùng để đánh lừa người dùng. Chẳng hạn, một trang Web cho phép bình luận dưới định dạng thẻ HTML, kẻ tấn công có thể chèn mẫu trang đăng nhập và lấy cắp mật khẩu, thông tin của người dùng. Lỗ hổng này thường được khai thác bởi các cuộc tấn công tạo kịch bản chéo trang (CrossSite Scripting - XSS attacks).
Bảng 1. Lỗ hổng trong các phần mềm quản lý mật khẩu liên quan tới tính năng Autofill
Trong giao thức HTTP và HTTPS
Đây là lỗ hổng nguy hiểm nhất được phát hiện khi kiểm thử phần mềm quản lý mật khẩu của bên thứ ba như: 1Password, Keeper và Lasspass. Các phần mềm quản lý mật khẩu này đã gặp lỗi trong việc phân biệt giữa giao thức HTTP, HTTPS và vi phạm các chính sách về nguồn gốc giữa tên miền và URL của trình duyệt như Chrome, Safari, Firefox và IE. Điều đó có nghĩa rằng khi 1Password, Keeper và Lasspass được cấu hình tự động điền thông tin chứng thực của người dùng vào một miền https như //google.com, nhưng khi gặp một mẫu trang đăng nhập trên trang //google. com thì chúng cũng sẽ tự động điền thông tin chứng thực này vào.
Với một cuộc tấn công “người đứng giữa” trong một mạng wifi công cộng, kẻ tấn công hoàn toàn có thể chuyển hướng nạn nhân từ phiên HTTPS sang phiên HTTP giả mạo. Phiên HTTP giả mạo chứa mẫu trang đăng nhập được viết bằng javascript và 1Password, Keeper và Lasspass sẽ tự động điền các thông tin chứng thực người dùng như bình thường. Khi đó, các thông tin này sẽ được gửi cho kẻ tấn công. Như vậy, người dùng sẽ bị mất mật khẩu do sử dụng một điểm truy cập wifi công cộng độc hại.
Lỗi trang HTTPS
Giả sử mật khẩu đã được lưu trên trang Web có mẫu trang đăng nhập sử dụng giao thức HTTPS hợp lệ, nhưng khi đăng nhập trang Web đó tại một thời điểm khác thì sẽ báo lỗi trang HTTPS, cảnh báo đưa ra là do chứng thư số không tin cậy. Người dùng có thể bỏ qua cảnh báo và đăng nhập vào trang Web. Trong trường hợp này, cần điều tra xem các phần mềm quản lý mật khẩu có tự động điền thông tin chứng thực vào mẫu trang đăng nhập của Web này hay không. Kết quả là các trình duyệt trên máy PC và Chrome trên Android từ chối tự động điền thông tin chứng thực, IE sẽ chuyển từ Automatic Autofill xuống Manual Autofill. Còn các phần mềm quản lý mật khẩu khác sẽ tự động điền thông tin chứng thực ngay khi người dùng nhấn chấp nhận chứng thư số không tin cậy của trang Web (xem cột 8 Bảng 1). Điều này dẫn tới rất nhiều cuộc tấn công lấy cắp mật khẩu như giả mạo máy chủ Web, chiếm đoạt tên miền....
Chỉnh sửa đường dẫn trong thẻ lệnh <form action>
Trong mẫu trang đăng nhập của các trang Web đều có một thẻ lệnh là <form action> chứa đường dẫn (URL) là đích đến của nội dung thông tin chứng thực người dùng đã được điền vào mẫu trang.
Kẻ tấn công có thể lấy cắp được mật khẩu của người dùng khi thay thế được URL của <form action> bằng URL mà chúng kiểm soát. Do dó, các phần mềm quản lý mật khẩu cần có chức năng không tự động điền các thông tin chứng thực nếu URL trong <form action> của trang đăng nhập khác so với URL lần đầu tiên mà mật khẩu được lưu.
Trong quá trình kiểm thử thực tế đối với hai trường hợp khác nhau, ta có kết quả như sau:
Trường hợp thứ nhất, giả sử tại thời điểm mẫu trang đăng nhập được tải về có đường dẫn trong <form action> khác so với URL mà lần đầu tiên mật khẩu được lưu. Khi đó, Safari, Norton Identity Safe và IE (trên các trang HTTPS) vẫn tự động điền thông tin chứng thực vào trường mật khẩu. Còn trình duyệt Chorme và IE trên PC (với các trang HTTP) chỉ tự động điền thông tin chứng thực sau các tương tác của người dùng.
Trường hợp thứ hai, giả sử tại thời điểm mẫu trang đăng nhập được tải về có URL trong <form action> là chính xác. Nhưng khi sử dụng kỹ thuật tiêm mã Javascript vào mẫu trang đăng nhập để thay đổi URL trong <form action>, thì kết quả thu được cho thấy, hầu hết các phần mềm quản lý mật khẩu đều tự điền thông tin chứng thực và để người dùng gửi đi mặc dù mật khẩu được gửi sai địa chỉ.
Trong một số trường hợp, những phần mềm quản lý mật khẩu không tự động điền các thông tin chứng thực vào mẫu trang đăng nhập sẽ yêu cầu thêm sự tương tác từ người dùng trước khi điền, nhưng cũng không đưa ra bất kỳ một thông báo nào khi URL khác biệt so với lần đầu tiên lưu mật khẩu. Thông tin về hành vi của các phần mềm quản lý mật khẩu khi URL bị thay đổi có thể tìm thấy trong cột 5 và 6 Bảng 1.
Tính năng Autocomplete
Một số trang Web sử dụng mẫu trang đăng nhập trong đó cài đặt mặc định tắt tính năng Autocomplete, nhằm ngăn việc tự động điền các thông tin chứng thực người dùng vào mẫu trang đăng nhập:
Các trình duyệt như Firefox, Chrome, trình duyệt mặc định của Android và Safari phiên bản di động đều hỗ trợ bật/tắt chức năng AutoComplete cho các mẫu trang đăng nhập của trang Web. Tuy nhiên, các phần mềm quản lý mật khẩu tích hợp từ bên thứ ba đều bỏ qua tính năng này và tự động điền thông tin chứng thực người dùng vào mẫu trang đăng nhập (xem cột 7 Bảng 1).
Khi tính năng Autocomplete bị tắt sẽ ngăn cản việc tự động điền mật khẩu vào mẫu trang đăng nhập, kể cả khi đã lưu mật khẩu tương ứng với trang Web đó. Điều này có thể hạn chế nguy cơ mất mật khẩu. Tuy nhiên, khi kẻ tấn công điều khiển được đường truyền như trong trường hợp tấn công quét wifi công cộng, thì thuộc tính này bật hay tắt cũng không ngăn chặn được tấn công.
Tính năng Auto Submit
1Password, LastPass, Norton IdentitySafe và KeePass hỗ trợ một phiên bản cải tiến của tính năng Automatic Autofill là Auto Submit, giúp người dùng không phải bấm nút đăng nhập (login), tức là tự động điền thông tin chứng thực vào mẫu trang đăng nhập, sau đó gửi đi để xác thực. Điều này cũng dẫn tới nguy cơ bị mất mật khẩu từ các loại tấn công như: tấn công quét, tấn công chuyển hướng quét, tấn công nhúng mã, tấn công nhúng mã theo kịch bản chéo trang.
Một số khuyến nghị
Các lỗ hổng bảo mật trong các phần mềm quản lý mật khẩu đã trình bày đều liên quan tới tính năng Automatic Autofill. Vì vậy, người dùng nên tắt tính năng này và sử dụng tính năng Manual Autofill (để tắt tính năng Automatic Autofill người dùng nên vào trang Web hỗ trợ của trình duyệt hoặc phần mềm quản lý mật khẩu để được hướng dẫn). Ngoài ra, người dùng cũng cần thực hiện các nguyên tắc khác để hạn chế tấn công lấy cắp mật khẩu như sau:
- Sử dụng phần mềm quản lý mật khẩu để tạo các mật khẩu giả ngẫu nhiên thay vì tự đặt. Điều này làm kẻ tấn công khó dự đoán được mật khẩu.
- Sử dụng một mật khẩu riêng cho mỗi trang Web, để khi bị mất một mật khẩu sẽ không ảnh hưởng tới các trang khác.
- Chỉ thực hiện gửi mật khẩu vào các trang HTTPS đáng tin cậy.
- Lựa chọn mật khẩu quản trị mạnh để truy cập vào các phần mềm quản lý mật khẩu tránh việc kẻ tấn công lấy được mật khẩu khi xâm nhập được vào thiết bị.
Sử dụng trình quản lý mật khẩu đem lại nhiều lợi ích cho người dùng khi sử dụng các dịch vụ trên Internet qua truy cập các trang Web. Tuy nhiên, người dùng cần sử dụng đúng cách để tránh được các nguy cơ rủi ro mất an toàn thông tin.
<input autocomplete=”off” ... >