1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Cơ sở an toàn thông tin Đề tài Tìm hiểu về OTP (One Time Password) và ứng dụng

35 124 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 35
Dung lượng 19,86 MB

Nội dung

HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN Cơ sở an toàn thông tin Đề tài Tìm hiểu về OTP (One- Time Password) và ứng dụng Sinh viên thực hiện: Lê Tiến Dũng- AT150311 Lê Văn Sớm- AT150245 Nhóm 18 Giảng viên: Nguyễn Mạnh Thắng MỤC LỤC 2 DANH MỤC HÌNH VẼ 3 LỜI MỞ ĐẦU Ngày nay với sự phát triển nhanh chóng về số lượng các dịch vụ trực tuyến dẫn đến số lượng ngày càng tăng về nhu cầu xác thực nhận dạng kỹ thuật số khác nhau mà mỗi người dùng cần quản lý Kết quả là nhiều người cảm thấy quá tải với thông tin đăng nhập, điều này tác động tiêu cực đến khả năng quản lý chúng một cách an toàn Phương thức xác thực phổ biến nhất vẫn là sử dụng các ký tự làm mật khẩu Để tránh việc nhớ những mật khẩu khó, người dùng có xu hướng đặt mật khẩu theo tên chính mình, tên nhân vật nổi tiếng ưu thích, hay ngày sinh nhật, điều này làm cho tính bảo mật thấp đi, làm cho kẻ tấn công có thể sẽ dự đoán được Hầu hết các chuyên gia bảo mật đều đánh giá là việc sử dụng mật khẩu không còn an toàn trước các thủ đoạn tấn công tinh vi hiện nay Mật khẩu có thể bị nghe lén, bị đánh cắp, hoặc bị phá mã Một số giải pháp đã được phát triển để tăng cường tính bảo mật, loại bỏ nhu cầu người dùng tạo và quản lý mật khẩu, một giải pháp điển hình dựa trên việc tạo mật khẩu một lần, tức là mật khẩu chỉ sử dụng một phiên hoặc một giao dịch Đây là phương pháp được giới thiệu để tăng cường độ an toàn trong quá trình xác thực người dùng, xác thực các giao dịch, đặc biệt là các giao dịch thanh toán trực tuyến trong các hệ thống ngân hàng đang được sử dụng phổ biến hiện nay Đề tài "Tìm hiểu về OTP và ứng dụng" được lựa chọn với mục đích nghiên cứu về mật khẩu sử dụng một lần, các phương pháp sinh và tạo mật khẩu sử dụng một lần và ứng dụng trong thực tiễn 4 CHƯƠNG 1: TỔNG QUAN VỀ OTP 1.1 Khái quát về mật khẩu và xác thực sử dụng mật khẩu 1.1.1 Khái niệm mật khẩu Mật khẩu hay đôi khi được gọi là mật mã, là một lượng thông tin mật nào đó, mà chỉ có người dùng và hệ mật được biết, người dùng cần phải nhớ, thường là một chuỗi ký tự, được sử dụng để xác nhận, chứng minh tính chính xác một người nào đó khi đăng nhập vào một hệ thống, một dịch vụ hay một ứng dụng 1.1.2 Phương pháp xác thực sử dụng mật khẩu Nhằm kiểm soát quyền truy cập ở mức hệ thống Mỗi người sử dụng muốn vào được mạng để sử dụng tài nguyên đều phải đăng ký tên và mật khẩu Sự kết hợp giữa username và password có thể nói là cách xác thực cơ bản nhất và cũng là phổ biến nhất Với phương thức xác thực này, thông tin cặp username và password nhập vào được đối chiếu với dữ liệu trên hệ thống, nếu trùng khớp username và password, thì người dùng được xác thực còn nếu không người dùng sẽ bị từ chối hoặc cấm quyền truy cập 1.1.3 Độ an toàn mật khẩu Thông thường, để dò tìm mật khẩu, các người tấn công thường sử dụng cách thức tấn công vét cạn (Brute-force), là cách thức sử dụng các công cụ để tự động thử nghiệm lần lượt các chuỗi ký tự cho đến khi tìm ra mật khẩu đúng Do vậy, nếu sử dụng các mật khẩu quá đơn giản hay quá ngắn, việc sử dụng phương pháp tấn công dựa trên từ điển hoặc vét cạn có thể giúp người tấn công dễ dàng dò ra mật khẩu của người dùng mà không mất quá nhiều thời gian Độ an toàn của mật khẩu phụ thuộc vào độ dài mật khẩu và kích thước tập ký tự: 5 • Độ dài của mật khẩu phải từ 8 ký tự trở lên Khi độ dài mật khẩu đủ lớn, khả năng bị đoán hoặc tấn công • vét cạn giảm đi Mật khẩu không nên chứa các từ đơn giản, dễ đoán, như tên người thân, tên con vật yêu thích, hoặc ngày tháng năm sinh Các mật khẩu như vậy thường dễ • dàng bị dò tìm thông qua tấn công dựa trên từ điển Mật khẩu phải là tổ hợp của các chữ cái in hoa, in thường, chữ số và ký tự đặc biệt (như các ký tự $ #, ) Khi số loại ký tự được sử dụng tăng lên, số tổ hợp mật khẩu có thể có trở lên rất lớn làm cho việc thực hiện tấn công vét cạn không khả thi 1.2 Giới thiệu về OTP 1.2.1 Định nghĩa OTP Mật khẩu sử dụng một lần hay còn gọi là OTP (One Time Password), là mật khẩu chỉ được sử dụng một lần hoặc chỉ có giá trị trong một phiên làm việc OTP có thể được sử dụng một lần trong xác thực người dùng cho một phiên làm việc hoặc xác thực một giao dịch của người dùng OTP thường được sử dụng trong các giao dịch điện tử hoặc các hệ thống xác thực có độ bảo mật cao OTP thường có độ dài từ 6 đến 8 ký tự chữ và số OTP thường được dùng để làm bảo mật 2 lớp trong các giao dịch xác minh đăng nhập, đặc biệt là giao dịch với tài khoản ngân hàng OTP giúp ngăn chặn, giảm thiểu những rủi ro bị tấn công khi mật khẩu bị lộ hoặc các kẻ tấn công xâm nhập 1.2.2 Nguyên lý hoạt động Nguyên lý hoạt động của OTP như sau: sau khi đã đăng ký dịch vụ, mỗi lần muốn đăng nhập hay xác thực, người dùng sẽ được cấp một mã OTP được 6 tạo ra bởi đầu đọc và thẻ thông minh hay thiết bị tạo mật khẩu cầm tay (Token) nhờ vào kết nối internet với máy chủ của dịch vụ cung cấp OTP hoặc cũng có thể thông qua thẻ OTP in sẵn hay điện thoại di động mà không cần đến kết nối internet Mã OTP này được dùng để xác nhận giao dịch một lần duy nhất Thậm chí khi chưa sử dụng thì sau khoảng 30 giây đến 2 phút, mã xác nhận này cũng không còn hiệu lực, và cũng không thể sử dụng nó cho bất kì giao dịch nào khác Quá trình tạo mã OTP mới sẽ được lặp lại mỗi khi người dùng yêu cầu xác thực đối với hệ thống được bảo mật bằng OTP 1.2.3 Ưu điểm và nhược điểm OTP OTP có nhiều ưu điểm so với mật khẩu truyền thống Cụ thể: • Khả năng chống lại các cuộc tấn công: Xác thực OTP cung cấp những lợi thế khác biệt so với việc chỉ sử dụng mật khẩu tĩnh Không giống như mật khẩu truyền thống, OTP không dễ bị tấn công — trong đó tin tặc chặn việc truyền dữ liệu (như người dùng gửi mật khẩu của họ), ghi lại và sử dụng nó để truy cập vào hệ thống hoặc tài khoản của chính họ Khi người dùng có quyền truy cập vào tài khoản của họ bằng OTP, mã sẽ trở nên không hợp lệ và do đó kẻ tấn công không thể sử dụng lại • Khó đoán: OTP thường được tạo bằng các thuật toán sử dụng sự ngẫu nhiên Điều này khiến những kẻ tấn công khó đoán và sử dụng chúng thành công OTP có thể chỉ có hiệu lực trong thời gian ngắn, yêu cầu người dùng có kiến thức về OTP trước đó hoặc cung cấp cho người dùng một thử thách (ví dụ: “vui lòng 7 nhập số thứ hai và thứ năm”) Tất cả các biện pháp này làm giảm thêm bề mặt tấn công của môi trường khi so sánh với xác thực chỉ bằng mật khẩu • Giảm rủi ro khi mật khẩu bị xâm phạm: Người dùng không áp dụng các biện pháp bảo mật mạnh mẽ có xu hướng tái chế các thông tin đăng nhập giống nhau trên các tài khoản khác nhau Nếu những thông tin đăng nhập này bị rò rỉ hoặc rơi vào tay kẻ xấu, dữ liệu bị đánh cắp và gian lận là những mối đe dọa đáng kể đối với người dùng trên mọi phương diện Bảo mật OTP giúp ngăn chặn vi phạm truy cập, ngay cả khi kẻ tấn công đã có được bộ thông tin đăng nhập hợp lệ • Dễ dàng áp dụng: Mật mã dùng một lần cũng dễ dàng cho các tổ chức tích hợp vào chiến lược xác thực của họ Mặc dù bản chất khó hiểu của những mã này khiến mọi người khó ghi nhớ, nhưng điện thoại, mã thông báo và các công nghệ khác có thể truy cập rộng rãi để các nhóm bảo mật sử dụng và phân phối cho nhân viên của họ Nhược điểm: • Mã OTP có thể bị lộ nếu chủ tài khoản không giữ thông tin cẩn thận • Giao dịch thông qua hệ thống internet có thể bị hacker tấn công • Với hình thức OTP Token, bảo mật hơn nhưng phải trả thêm chi phí làm máy Token 8 CHƯƠNG 2: CÁCH THỨC SINH VÀ CHUYỂN GIAO MÃ OTP 2.1 Một số phương pháp sinh mã OTP 2.1.1 Phương pháp sinh theo thời gian Theo phương pháp sinh OTP theo thời gian, người dùng sẽ được cấp một thiết bị sinh mã được gọi là token Token gồm có ba thành phần chính: một mã seedcode, một đồng hồ đếm thời gian, và một thuật toán mã hóa một chiều Mã seedcode là mã được nhà sản xuất cài đặt sẵn trong token Mỗi token có một mã seedcode khác nhau Và mã seedcode này cũng được lưu lại trong hệ thống của nhà cung cấp dịch vụ tương ứng với tên truy nhập của người dùng Đồng hồ đếm thời gian là đồng hồ của token, nó được đồng bộ với đồng hồ của hệ thống trước khi giao cho người dùng Mỗi khi người dùng bấm nút sinh mã, token sẽ lấy biến thời gian của đồng hồ Biến thời gian được lấy chi tiết đến từng phút, hoặc 30 giây Thuật toán mã hóa được sử dụng là thuật toán băm SHA-1 Thuật toán Time-based One-Time Password (TOTP) là một ví dụ cụ thể của những giải thuật sinh mật khẩu một lần dựa trên thời gian như vậy Với thuật toán TOTP sinh mật khẩu OTP dựa theo thời gian thì giá trị T về thời gian được tính như sau: Trong đó: • : là giá trị thời gian hiện tại được tính theo thời gian Unix (được tính từ thời điểm của Unix Epoch là ngày • • 01/01/1970 theo UTC (giờ chuẩn quốc tế) : Là giá trị thời gian ban đầu (thường chọn T0 = 0) : Là bước thời gian, đây là tham số quyết định thời gian hợp lệ của mật khẩu OTP 9 • : Chính là kết quả tính (đã lấy phần nguyên) từ công thức tính toán trên Với thuật toán TOTP thì thời gian chuẩn hợp lệ của mật khẩu OTP là 30 giây (X=30), thời gian có hiệu lực của mỗi lần sử dụng mật khẩu OTP là 30 giây được chọn phù hợp với yêu cầu về bảo mật và khả năng sử dụng Thuật toán TOTP dựa trên thuật toán HOTP thay giá trị đếm (C) bằng giá trị thời gian (T): Đối với thuật toán TOTP độ dài của mật khẩu OTP được tính như sau: Trong đó: d là số chữ số của mật khẩu OTP Hình 1 Time-based One-Time Password (TOTP) 2.1.2 Phương pháp sinh theo thuật toán OTP sinh ra bằng thuật toán dựa trên mật khẩu cũ không có giá trị thay đổi theo thời gian, mà chúng được sinh ra theo thuật toán mỗi khi có yêu cầu sử dụng Thuật toán của bên xác thực và người dùng phải đồng bộ với nhau Mỗi lần một người dùng được xác thực thành công, bên xác thực sẽ chỉ chấp nhận một OTP kế tiếp được sinh ra bởi thuật toán Không giống OTP 10 được thường qua email lừa đảo, phần mềm độc hại, web 2 đen hoặc nghiên cứu trên mạng xã hội Khi có quyền truy cập vào hệ thống SS7, hacker có quyền truy cập vào các thông tin nhạy cảm của người dùng Chúng có thể chuyển tiếp một cuộc gọi để ghi âm hoặc nghe lén Chúng cũng có thể đọc các SMS được 3 gửi và nhận giữa các điện thoại Các thiết bị được đồng bộ hóa cũng tạo cơ hội cho những kẻ tấn công có thể được truy cập từ nhiều điện thoại thông minh, máy tính xách tay, máy 4 tính bảng Nhiều nhà cung cấp dịch vụ không dây cho phép người dùng xem tin nhắn văn bản qua tài khoản trực tuyến trên cổng web của họ Nếu các tài khoản này không được bảo mật bằng yếu tố thứ hai đáng tin cậy, những kẻ xấu có thể có quyền truy cập và cố gắng theo dõi chúng để tìm mã xác 5 thực SMS Những kẻ tấn công đóng giả là một tổ chức đáng tin cậy trong nỗ lực thuyết phục các mục tiêu giao thông tin cá nhân và mật khẩu của họ bao gồm cả mã SMS sau đó họ có thể sử dụng để truy cập trái phép 3.2.2 Một số cách tấn công khi sử dụng Secret tạo OTP 1 Đánh cắp secret chung từ service provider: Nếu kẻ tấn công có thể sao chép được secret chung, thì hắn có thể tạo OTP hợp lệ và vượt qua được lớp bảo mật TOTP 2FA 21 Hình 5 Đánh cắp secret chung từ service provider 2 Đánh cắp secret chung từ trusted device: Trusted device của Alice có thể bị đánh cắp Nếu thiết bị không mã hoá ổ cứng, thì hacker có thể lấy secret chung ra một cách dễ dàng Tình huống tồi tệ hơn là Alice không đặt mật khẩu cho trusted device và hacker có thể dễ dàng sử dụng ứng dụng xác thực để xem dịch vụ nào được đăng ký cùng với username và OTP cho mỗi dịch vụ 22 Hình 6 Đánh cắp secret chung từ trusted device 3 Tấn công phishing và MITM attacks: Hình 7 Tấn công phishing và MITM attacks Alice nghĩ rằng cô ấy đang ở trên một trang web thật, vì vậy cô ấy đăng nhập bình thường với username và password Và các hacker điều hành trang web lừa đảo sử dụng username và password Alice vừa nhập để đăng nhập vào trang web thật Sau đó, trang web lừa đảo sẽ nhắc Alice nhập OTP được tạo bởi ứng dụng xác thực trên thiết bị đáng tin cậy của cô ấy Một lần nữa, Alice nghĩ 23 rằng cô ấy đang ở trên trang web thật và biết rằng cô ấy đã bật TOTP 2FA trên tài khoản của mình, vì vậy cô nhập OTP vào trang web lừa đảo Ngay sau khi cô ấy làm vậy, hacker có thể sử dụng OTP hợp lệ đó để đăng nhập thành công vào tài khoản của Alice trên trang web thực TOTP 2FA cũng dễ bị tấn công bởi Man in the Middle (MITM) attack Alice sử dụng kết nối HTTP không an toàn để đăng nhập vào trang web thật Điều này cho phép hacker đọc tất cả lưu lượng truy cập web, bao gồm cả OTP mà Alice đã nhập thủ công vào trình duyệt của mình 3.2.3 Giải pháp bảo mật chung 1 Cảnh giác trước khi truy cập hoặc mở bất kỳ tin nhắn văn bản và email, nghiên cứu kỹ các nguồn tin 2 Luôn cập nhật hệ thống, chương trình phòng chống virus và ứng dụng của mình Không sử dụng phần mềm thương mại bất hợp pháp trên thiết bị 3 Luôn cập nhật hệ thống, chương trình phòng chống virus và ứng dụng của mình Không sử dụng phần mềm thương mại bất hợp pháp trên thiết bị 4 Luôn sao lưu dữ liệu quan trọng lên dịch vụ đám mây hoặc ổ cứng di động, đề phòng mất điện thoại hoặc máy tính xách tay 5 Không sử dụng các thiết bị cũ vì phần cứng đã lỗi thời, có thể tồn tại lỗ hổng để tin tặc khai thác 6 Không sử dụng cùng một mật khẩu trên nhiều tài khoản và không lưu mật khẩu trong trình duyệt Cân nhắc việc sử dụng Face ID và vân tay để thay thế mật khẩu 7 Đặt mã khóa hoặc mã PIN riêng cho thẻ SIM của mình Điều này sẽ cung cấp thêm một lớp bảo mật quan trọng 8 Không sử dụng Wi-fi công cộng hoặc không an toàn Trong trường hợp 9 bắt buộc, hãy đảm bảo rằng bạn đang sử dụng VPN Không chia sẻ các secret của mình với người khác, nên ghi secret ra giấy thay vì các thiết bị điện tử 24 CHƯƠNG 4: XÂY DỰNG MÔ HÌNH CHƯƠNG TRÌNH SỬ DỤNG OTP XÁC THỰC 2 YẾU TỐ 4.1 Ngôn ngữ và thư viện sử dụng Trong chương trình mô phỏng này sẽ sử dụng Node.js và FrameWork Express làm một máy chủ đơn giản Với việc tạo khóa bí mật sẽ sử dụng hàm generateSecret() của Speakeasy Các bước thực hiện: 1 2 3 Tạo id người dùng và khóa bí mật tạm thời Xác minh khóa bí mật để bật xác thực hai yếu tố với tài khoản Xác thực hai yếu tố (giả sử quá trình đăng nhập bằng tài khoản và mật khẩu đã thông qua) 4.2 Mô hình chương trình xác thực hai yếu tố 4.2.1 Tạo ID người dùng và khóa bí mật tạm thời (Giả sử ở đây người dùng đã nhập thông tin tài khoản để đăng ký.) //tạo id người dùng và khóa bí mật tạm thời app.post("/api/register", (req, res) => { const id = uuid.v4(); try { const path = `/user/${id}`; //tạo khóa bí mật tạm thời (các dạng ascii, hex, base32, otpauth_url) const temp_secret = speakeasy.generateSecret(); //thêm người dùng vào cơ sở dữ liệu db.push(path, { id, temp_secret }); // gửi id người dùng và khóa bí mật tạm thời res.json({ id, secret: temp_secret }) } catch(e) { console.log(e); res.status(500).json({ message: 'Lỗi tạo người dùng'}) } }) Tạo ra một id và một khóa bí mật tạm thời với các dạng mã hóa ascii, hex, base32, otpauth_url (Thông tin này sẽ được gửi lại cho người dùng) 25 (Ở đây sẽ sử dụng dạng base32 làm khóa bí mật) 4.2.2 Xác minh khóa đó để bật xác thực 2 yếu tố đối với tài khoản //xác khóa bí mật tạm thời, chuyển đổi khóa bí mật tạm thời sang vĩnh viễn //để bật xác thực 2 yếu tố đối với tài khoản app.post("/api/verify", (req,res) => { const { userId, token } = req.body; try { // lấy dữ liệu người dùng const path = `/user/${userId}`; const user = db.getData(path); console.log({ user }) const { base32: secret } = user.temp_secret; const verified = speakeasy.totp.verify({ secret, encoding: 'base32', token }); if (verified) { // cập nhật thành khóa bí mật vĩnh viễn khi xác minh thành công db.push(path, { id: userId, secret: user.temp_secret }); res.json({ verified: true }) } else { res.json({ verified: false}) } } catch(error) { console.error(error); 26 res.status(500).json({ message: 'Lỗi truy xuất người dùng'}) }; Sử dụng Authenticator trên web hoặc app trên điện thoại để nhập khóa bí mật tạm thời Sau khi xác nhận sẽ nhận được một mã OTP 27 Sử dụng mã OTP này để xác minh Nhập id người dùng và mã otp vừa nhận được Kết quả trả về true nếu mã otp đúng, false nếu mã otp sai Nếu xác minh thành công khóa bí mật từ dạng tạm thời sẽ chuyển sang vĩnh viễn trên cơ sở dữ liệu 28 29 4.2.3 Sử dụng mã otp để xác thực nhiều lần // sử dụng otp để xác thực nhiều lần app.post("/api/validate", (req,res) => { const { userId, token } = req.body; try { //lấy dữ liệu người dùng từ cơ sở dữ liệu const path = `/user/${userId}`; const user = db.getData(path); console.log({ user }) const { base32: secret } = user.secret; // trả về true nếu mã otp khớp const tokenValidates = speakeasy.totp.verify({ secret, encoding: 'base32', token, window: 1 }); if (tokenValidates) { res.json({ validated: true }) } else { res.json({ validated: false}) } } catch(error) { console.error(error); res.status(500).json({ message: 'Lỗi truy xuất người dùng'}) }; }) Khi xác minh khóa bí mật thành công (bật xác thực 2 yếu tố đối với tài khoản) người dùng có thể sử dụng khóa vĩnh viễn này để lấy mã otp sử dụng cho nhiều lần xác thực đăng nhập về sau (Giả sử bước đăng nhập bằng tài khoản và mật khẩu của người dùng đã thông qua trước đó) 30 Lấy mã OTP qua Authenticator Nếu mã OTP trùng khớp sẽ trả về true (đăng nhập thành công), sai sẽ trả về false (đăng nhập thất bại) 31 Cùng mã otp đó nhưng sau một khoảng thời gian không nhập (thường là 30s) hoặc sử dụng mã otp này cho lần đăng nhập tiếp theo kết quả sẽ trả về false 32 CHƯƠNG 5: TÀI LIỆU THAM KHẢO • • https://en.wikipedia.org/wiki/One-time_password https://en.wikipedia.org/wiki/Time-based_One- • Time_Password https://en.wikipedia.org/wiki/HMAC-based_one- • time_password https://en.wikipedia.org/wiki/Challenge • %E2%80%93response_authentication http://tailieudientu.lrc.tnu.edu.vn/Chi-tiet/nghien-cuu-vande-xac-thuc-giao-dich-ngan-hang-truc-tuyen-su-dung-mat- • khau-dang-otp-55926 https://tamhoang1412.wordpress.com/2020/08/19/totp-antoan-hon-rat-nhieu-so-voi-sms-nhung-so-voi-push-lai- • khong-tien-bang http://m.antoanthongtin.gov.vn/giai-phap-khac/xac-thuc- • da-nhan-to-lieu-co-an-toan-tuyet-doi-phan-hai-106712 https://blog.logrocket.com/implementing-two-factorauthentication-using-speakeasy 33 ... sử dụng phổ biến Đề tài "Tìm hiểu OTP ứng dụng" lựa chọn với mục đích nghiên cứu mật sử dụng lần, phương pháp sinh tạo mật sử dụng lần ứng dụng thực tiễn CHƯƠNG 1: TỔNG QUAN VỀ OTP 1.1 Khái quát... thực Máy chủ kiểm tra OTP, thực giao dịch, khơng có báo lỗi CHƯƠNG 3: ỨNG DỤNG VÀ VẤN ĐỀ AN TOÀN CỦA OTP 3.1 Một số ứng dụng OTP thực tế 3.1.1 Ứng dụng giao dịch ngân hàng OTP dùng xác nhận giao... người dùng cảm thấy an tâm nhiều 3.1.2 Ứng dụng đăng nhập Ứng dụng đăng nhập lần dựa mật sử dụng lần xây dựng nhằm xác thực người sử dụng người sử dụng truy cập vào chuỗi ứng dụng có liên kết môi

Ngày đăng: 12/02/2022, 13:13

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w