Các dữ liệu này được bảo vệ bằng cách được mã hóa với một key được sinh ngẫu nhiên và key đó được bảo vệ qua các bước sau:
Sử dụng DPAPI để mã hóa key ở trên. DPAPI là phương pháp mã hóa dữ liệu được windows cung cấp qua api CryptProtectData / CryptUnprotectData để các ứng dụng có thể mã hóa/giải mã dữ liệu người dùng muốn bảo vệ trên hệ điều hành với mật khẩu của người dùng. Có thể tìm hiểu thêm về cách hoạt động của DPAPI ở bài này: data_protection_api
Mỗi khi cần mã hóa dữ liệu người dùng, Chromium sẽ sinh ra iv ngẫu nhiên và giải mã key trong trường os_crypt bằng DPAPI, sau đó sử dụng thuật toán AES – MODE_GCM để thực hiện mã hóa các dữ liệu như thông tin đăng nhập, cookies trong các file Cookies, LoginData với key vừa giải mã và iv vừa tạo ra. IV và bản mã của thông tin sẽ được lưu trong file database tương ứng như đã đề cập ở phần trên.
Do sử dụng dpapi với key tương ứng với tài khoản người dùng, các mã độc stealer thực thi bằng chính tài khoản người dùng có thể thực hiện việc giải mã key và thông tin tương tự như cách chrome đã mã hóa qua các bước sau:
Khác với các trình duyệt Chromium phụ thuộc vào các phương pháp mã hóa hỗ trợ sẵn trên hệ điều hành sử dụng chính tài khoản người dùng để bảo vệ key mã hóa, Firefox sử dụng thư viện riêng Network Security Services (NSS) (nss3.dll) kèm theo master password (nếu người dùng thiết lập) và cách thức khác để mã hóa dữ liệu người dùng trước khi lưu trữ các dữ liệu này trong file json và sqlite tại các file:
Với mỗi profile, Firefox sẽ sinh ra một số dữ liệu ngẫu nhiên gồm
Sau đó, Firefox sử dụng SHA1 để hash global_salt và master password nếu thiết lập tạo thành secured_hash_data và sử dụng tiếp thuật toán pbkdf2 để sinh ra mật khẩu dùng để mã hóa key_db với các dữ liệu đầu vào phụ thuộc vào secured_hash_data và entry_salt. Mật khẩu này sẽ được sử dụng để mã hóa key_db với thuật toán AES-CBC kèm theo iv ở trên và lưu trong file key4.db.
Mỗi khi cần mã hóa dữ liệu người dùng, Firefox sẽ yêu cầu nhập master password nếu người dùng thiết lập và sử dụng các thông tin được lưu trữ trong file key4.db gồm global_salt, iv, entry_salt để giải mã key_db. Sau đó key_db và iv sinh ngâu nhiên sẽ được dùng để mã hóa các thông tin cần được bảo vệ như username, mật khẩu bằng thuật toán 3DES.
Giả sử người dùng không thực hiện thiết lập master password, các chương trình mã độc có thể dựa vào các thông tin lưu trữ trong key4.db để tiến hành giải mã key_db:
Đọc các dữ liệu global_salt, iv, entry_salt trong file key4.db và sử dụng chúng để giải mã ra key_db.
Đọc các thông tin tài khoản trong login.json, giải mã với key_db thu được ở bước 1.
Nếu người dùng thiết lập master password, có thể thử bruteforce master password cho đến khi decrypt được key_db và giải mã được các dữ liệu thông tin người dùng
## Có thể thấy đối với thông tin lưu trữ của các trình duyệt chromium, bất kì chương trình nào, kể cả mã độc cũng có thể sử dụng DPAPI để giải mã key trong file “Local State” rồi sử dụng key đó để giải mã và đọc được các thông tin tài khoản mật khẩu của người dùng trong file “Login Data”. Tương tự, khi sử dụng firefox và người dùng không sử dụng master password hoặc sử dụng master password kém an toàn, dễ bị bruteforce thì các chương trình mã độc cũng hoàn toàn có thể giải mã key_db trong “key4.db” và đánh cắp các dữ liệu được lưu trong “login.json”. Do đó việc lưu mật khẩu trên các trình duyệt chromium hay firefox theo cách thông thường đều có nhiều nguy cơ mất an toàn khi mã độc thực thi được trên hệ thống.
Note: Một số trình duyệt chromium-based như Yandex đã phát triển thêm tính năng master password để đảm bảo ngay cả khi thực thi được bằng tài khoản người dùng các ứng dụng cũng không thể giải mã các thông tin tài khoản mà không có master password. Chi tiết xem tại: browser-passwords-crypto
Người dùng luôn phải cài đặt, cập nhật các giải pháp bảo mật, phần mềm, hệ điều hành và cẩn trọng với các nội dung từ internet, kiểm tra file tải về trước khi chạy, không sử dụng crack để giảm thiểu các nguy cơ bị phishing và thực thi mã độc. Trong việc quản lí mật khẩu, với việc luôn được khuyến cáo tạo các mật khẩu khó và không lặp lại cho các trang web thì việc tự ghi nhớ và không lưu trữ mật khẩu trên các trình duyệt để tránh bị đánh cắp là không khả thi. Do đó, người dùng có thể
Có thể sử dụng các công cụ có chức năng theo dõi và ngăn chặn các tiến trình khi chúng thực hiện đọc dữ liệu từ các file nhạy cảm của trình duyệt như Local State, Login Data, key4.db, login.json. Đây là POC công cụ sử dụng nguồn dữ liệu từ Audit Filesystem để theo dõi truy cập tới các file nhạy cảm như trên nhằm phát hiện và ngăn chặn các tiến trình khả nghi đọc tài khoản mật khẩu lưu trữ trong các trình duyệt: powershell_stealer_detection
Hiện tại công cụ này có thể phát hiện các hành vi nghi ngờ và ngăn chặn nhưng còn một số giới hạn như xảy ra phát hiện nhầm (người dùng truy cập vào, chương trình bên thứ 3 truy cập vào,..) làm ảnh hưởng đến trải nghiệm người dùng nên cần kiểm tra kỹ hơn các tiến trình khi chúng truy cập tới các file kể trên. Ngoài ra, việc sử dụng dữ liệu event audit nên khi phát hiện xử lí thì các ứng dụng độc hại có thể đã đọc 1 phần dữ liệu rồi (cần minifilter nếu muốn kiểm tra và ngăn chặn trước khi các ứng dụng đọc được dữ liệu). Và kẻ tấn công có thể sử dụng một số kỹ thuật như process injection, dll sideload,.. để bypass được việc theo dõi của công cụ.