Brute-force có lẽ là dạng tấn công bảo mật cơ bản và lâu đời nhất, tuy nhiên lại có nhiều thành công ngoài mong đợi. Hiện nay có rất nhiều website là nạn nhân hoặc mục tiêu đầy tiềm năng của những cuộc tấn công brute-force.
Vậy brute-force là gì? Lý do tại sao trang của bạn lại nằm trong tầm ngắm của các hacker brute-force? Và cách phòng chống brute-force cho website như thế nào?
Bài viết sau đây sẽ giúp bạn tìm kiếm câu trả lời cho những thắc mắc trên.
Brute-force là gì?
Brute-force là một dạng tấn công bảo mật website bằng cách thử lần lượt các thông tin đăng nhập (tên đăng nhập, mật khẩu) khác nhau cho đến khi thành công.
Loại website thường bị tấn công brute-force nhất chính là các website mã nguồn mở hoặc được xây dựng dựa trên CMS mã nguồn mở. Đứng đầu là WordPress khi CMS này chiếm lĩnh phần lớn thị trường, sau đó là đến các CMS phổ biến khác như Joomla, Drupal… Bởi vì mã nguồn các CMS này được mở nên ai cũng có thể tìm hiểu cách hệ thống hoạt động và tìm ra những kẻ hở trong khâu bảo mật của nó.
Tuy nhiên, cách thức hoạt động của brute-force có thể xâm hại bất kỳ website nào chứ không chỉ riêng website mã nguồn mở.
Khi tấn công brute-force, hacker sẽ sử dụng các thông tin đăng nhập thông dụng nhất (như tên đăng nhập là admin hoặc mật khẩu là 12345) để truy cập hệ thống. Nếu không thành công, hắn sẽ dùng cách suy đoán tên đăng nhập và người dùng dựa trên các gợi ý nào đó.
Nghe có vẻ khá mông lung nhưng trên thực tế brute-force lại có hiệu quả cao không ngờ. Lý do cụ thể sẽ được để cập ở phần sau, tuy nhiên trên lý thuyết không gì có thể ngăn chặn được brute-force. Nếu không bị giới hạn bởi thời gian và tài nguyên máy tính, một cuộc tấn công brute-force luôn luôn thành công.
Chúng ta chỉ có thể làm chậm quá trình brute-force, khiến hacker thấy nản hoặc không còn lợi ích khi bỏ ra thời gian quá lâu cho một trang web và từ bỏ.
Để làm được điều đó, trước hết ta phải biết cái gì đã mở đường cho một cuộc tấn công brute-force vào website của mình.
Lý do website bạn bị tấn công brute-force
Như đã nói, brute-force mất rất nhiều thời gian và công sức để hack thành công một website. Tuy nhiên, có những lý do, mà chủ yếu là do con người, đã tiếp tay cho hacker để thực hiện brute-force một cách nhanh chóng và hiệu quả hơn.
Lấy tên đăng nhập quá phổ biến
Nhiều người dùng để nguyên tên đăng nhập mặc định khiến dễ bị Brute-force hơn
Thông thường khi nghĩ đến bảo mật, mọi người đều nghĩ đến một mật khẩu mạnh mẽ và phức tạp hơn. Không mấy ai quan tâm đến tên đăng nhập (username), thường sử dụng những cụm từ cực kỳ cơ bản. Thậm chí họ để nguyên dòng username mặc định nhất của mọi hệ thống: admin.
Nhưng họ cũng quên mất một điều rằng tên đăng nhập cũng là 1 trong 2 dòng thông tin đăng nhập, là 50% cơ hội đăng nhập thành công. Dù không được mã hóa nhưng tên đăng nhập cũng là một thứ mà hacker cũng phải bỏ công tính toán và kiểm tra.
Việc lơ là, không thay đổi, không sử dụng những cụm từ khó đoán cho tên đăng nhập khiến nguy cơ bị brute-force vào website tăng lên một cách đáng kể.
Các hacker có thể giữ nguyên những mật khẩu phổ biến (như 12345) trong khi thay đổi những tên đăng nhập khác nhau cho đến khi tìm ra kết quả. Hoặc họ có thể khai thác tính năng Quên mật khẩu của website. Tính năng này yêu cầu tên đăng nhập đã đăng ký tài khoản để có thể phục hồi mật khẩu thông qua email. Các hacker có thể đoán và thử từng tên đăng nhập khác nhau, nếu không đúng hệ thống sẽ thông báo “Không tìm thấy tài khoản” và chuyển sang cái tên tiếp theo.
Ngoài ra, còn có một lý do khách quan liên quan đến WordPress giúp để lộ thông tin tên đăng nhập: Author Archive. Đây là một chức năng của WordPress giúp lọc tất cả nội dung được đăng bởi một tác giả trong trường hợp website có nhiều tác giả.
Chức năng này có tác dụng tốt cho SEO và tránh trùng lặp nội dung bài đăng. Tuy nhiên, hacker có thể dễ dàng lợi dụng nó để tìm ra tên đăng nhập của từng tác giả bằng cách gõ vào thanh địa chỉ: http://tên-miền-website/?author=[1, 2, 3,…]. Trong hệ thống WordPress, mỗi tác giả tương ứng với một con số. Cứ thử lần lượt từ con số bắt đầu từ số 1, nếu có tác giả hoạt động, WordPress sẽ trả về địa chỉ theo dạng: http://tên-miền-website/author/tên-tác-giả.
Trong hầu hết các trường hợp, tên-tác-giả được để mặc định, tức cũng là tên đăng nhập của tác giả đó. Như vậy, dù có sử dụng tên đăng nhập riêng và khó đoán vẫn có thể bị tìm ra một cách dễ dàng.
Đặt mật khẩu quá yếu hoặc dễ đoán
Nghe có vẻ phi lý nhưng hầu hết mọi người đều sử dụng những mật khẩu cực kỳ yếu đuối và dễ đoán. Trong khi có vô vàn những khuyến nghị đặt mật khẩu dài hơn, phức tạp và bảo mật hơn nhưng phần đông người dùng chẳng mấy quan tâm. Kết quả là, theo báo cáo của công ty thu thập dữ liệu SplashData, những mật khẩu phổ biến nhất năm 2018 là 12345, password và 123456789!
Một số người dùng có nhận thực tốt hơn không sử dụng những dãy số như 12345 làm mật khẩu, nhưng chuỗi ký tự họ xài lại chẳng bảo mật hơn là mấy. Đó là những cụm từ có nghĩa có thể tra được bằng từ điển và viết ra bằng một ngôn ngữ viết nào đó, như tiếng Anh chẳng hạn. Việc hacker sử dụng từ điển đoán những cụm từ có nghĩa được dùng làm mật khẩu được gọi là dictionary attack, cũng là một phương pháp hack thành công rất nhiều tài khoản.
Ngoài ra, người dùng ở những khu vực khác nhau lại còn có xu hướng đặt mật khẩu giống nhau. Các hacker đã có thể thu gom chúng lại tạo thành các danh sách thông tin đăng nhập đem lại tỷ lệ thành công cao để sử dụng.
Bạn có thể tham khảo danh sách từ khóa để brute-force một tài khoản Facebook Việt Nam tại đây.
Từ thực trạng trên, có thể nói phía phải chịu trách nhiệm lớn nhất mọi vấn đề bảo mật chính là người dùng. Trong trường hợp này chính là những thành viên quản trị website đã chủ quan, nhận thức kém về vấn đề bảo mật, dẫn đến nguy cơ bị tấn công brute-force.
Không ẩn đường dẫn (URL) đăng nhập
Mặc định, đường link đăng nhập vào tài khoản quản trị website thường có cấu trúc rất đơn giản. Ví dụ đối với WordPress là http://tên-miền-website/wp-admin. Các website thường làm như vậy để người quản trị dễ truy cập, tuy nhiên nó cũng mở ra một nguy cơ bảo mật dễ khai thác.
Những đường dẫn như vậy quá phổ biến và dễ đoán, hacker có thể dễ dàng tìm đến trang đăng nhập hệ thống quản trị trong tích tắc. Sau đó, hacker có thể thực hiện thử các thông tin đăng nhập khác nhau để tấn công brute-force website như đã nói ở trên.
Không thường xuyên thay đổi mật khẩu
Ngoài việc không thay đổi đường dẫn đăng nhập, nhiều người dùng cũng không tôn trọng thực hiện những nguyên tắc bảo mật, cụ thể là nguyên tắc thường xuyên thay đổi mật khẩu. Các hacker có thể sử dụng những siêu máy tính để dò mật khẩu, cho dù có đặt một mật khẩu phức tạp và lắt léo đến mức nào, vẫn có tỷ lệ bị tìm ra. Không thay đổi mật khẩu thường xuyên khiến tỷ lệ bị tấn công tăng lên một cách đáng kể.
Cách phòng chống brute-force cho website: Không có an toàn tuyệt đối
Như đã nói ở phần đầu, không có cách bảo vệ website hoàn toàn khỏi brute-force. Tuy nhiên, chúng ta có thể làm chậm quá trì brute-force đi một cách đáng kể, khiến hacker cảm thấy chán nản hoặc không còn lợi ích khi gắng sức tấn công website. Sau đây là những phương pháp khả dụng để ngăn chặn brute-force cũng như tăng cường khả năng bảo mật tổng thể cho website.
Tăng độ bảo mật của mật khẩu
Mật khẩu dài và mạnh ngăn chặn brute-force và các loại tấn công bảo mật khác
Mật khẩu mạnh mẽ là phương pháp bảo mật webste hữu hiệu trước các cuộc tấn công, không chỉ riêng brute-force.
Muốn mật khẩu mạnh mẽ, bạn phải tăng số lượng ký tự trong mật khẩu, phối hợp chữ viết hoa với chữ thường, kèm theo các ký tự đặc biệt. Mật khẩu càng dài và phức tạp thì càng hiệu quả – hacker sẽ mất rất nhiều thời gian để giải mã các mật khẩu như vậy.
Vấn đề có lẽ là người dùng bình thường khó lòng ghi nhớ một mật khẩu rắc rối và lê thê như vậy. Do đó, là ngườ dùng, hãy sử dụng những trình quản lý mật khẩu như Dashlane Password Manager, BitWarden… để chúng lưu trữ giúp bạn. Tất nhiên là bạn vẫn phải tự nhớ các mật khẩu và nhất là mật khẩu đăng nhập ứng dụng quản lý mật khẩu.
Ngoài ra, còn có một mẹo đặt mật khẩu vừa bảo mật lại vừa dễ nhớ. Đó là hãy viết ra 1 câu có ý nghĩa với bạn với độ dài tương đối. Sau đó, viết tắt tất cả chữ cái đầu của từng từ trong câu lại với nhau, bạn sẽ được 1 đoạn mã ngắn mà có thể nhớ lại dễ dàng.
Ví dụ: con gà đẻ 2 quả trứng, con bò cho 3 lít sữa = cgd2qtcbc3ls. Bạn cũng có thể mã hóa nó đi trên để thêm phần bảo mật: Cgd2q7cbc3|$.
Tất nhiên còn một lưu ý quan trọng nữa là bạn phải thường xuyên thay mật khẩu mới. Dùng mãi một mật khẩu sẽ gia tăng tỷ lệ bị giải mãi bởi các hệ thống máy tính của hacker, dẫn đến các cuộc tấn công bảo mật.
Về phần chủ website, hãy bắt buộc nhân viên của mình và cả người dùng đặt những mật khẩu mạnh mẽ hơn. Điều này có thể được thực hiện bằng cách giới hạn độ dài tối thiểu của mật khẩu, yêu cầu có đủ các loại ký tự viết hoa, viết thường và ký tự đặc biệt trong mật khẩu.
Tăng cường bảo mật từ tên đăng nhập
Đừng sử dụng những cụm từ quá thông dụng và dễ đoán cho tên đăng nhập website. Tất nhiên tên đăng nhập không cần phức tạp như mật khẩu, nhưng chí ít cũng không phải là cụm một đến hai chữ thông thường, như: admin, lan, ngoc, tramanh, v.v…
Riêng đối với WordPress và cũng là đối với số đông các website hiện nay, tên đăng nhập có phức tạp mấy cũng sẽ bị lộ bởi tính năng Author Archive. Chỉ vài thao tác tra cứu trên thanh địa chỉ hacker đã có thể tìm ra tên đăng nhập của bất cứ tác giả nào trong website.
Để hạn chế điều này mà không cần phải tắt Author Archive, hãy đặt nickname trong mục Hồ sơ của từng tác giả, thành viên BQT website. Nickname sẽ xuất hiện trong URL của từng tác giả theo cấu trúc: http://tên-miền-website/author/nickname và bạn sẽ giấu được tên đăng nhập đi để ít bị brute-force hơn.
Tuy nhiên, vì không được mã hóa, tên đăng nhập cũng không có tác dụng bảo mật cao như mật khẩu. Thay đổi tên đăng nhập cũng là chưa đủ để bảo vệ website của bạn khỏi các cuộc tấn công brute-force.
Ẩn đường dẫn đăng nhập
Các website xây dựng từ các CMS hầu hết đều có các thiết lập giống nhau về đường dẫn đăng nhập, đăng xuất. Một số CMS như WordPress cho phép bạn thay đổi các đường dẫn này để tránh bị hacker khai thác, tấn công brute-force. Theo cách này, bạn thực ra đang tạo những URL mới có tác dụng chuyển hướng về đường dẫn đăng nhập, đăng xuất thực để che giấu chúng đi.
Xem thêm: Hướng dẫn thay đổi đường dẫn trang Admin trên WordPress
Hạn chế số lần đăng nhập sai
Trong quá trình tấn công brute-force một website, các hacker phải thử đăng nhập rất nhiều lần. Để gián đoạn quá trình này, bạn có thể giới hạn số lần đăng nhập sai từ một địa chỉ IP. Bạn có thể thiết lập chặn 5 phút hoặc 10 phút sau 4-5 lần đăng nhập sai. Bấy nhiêu thời gian cũng là đủ để khiến tên hacker thấy chán nản và bỏ cuộc.
Hạn chế số lần đăng nhập được xem là một trong những phương pháp đặc trị brute-force, tuy nhiên nó cũng đem đến những phiền toái nhất định.
Đầu tiên, để giới hạn số lần đăng nhập sai, hệ thống cần theo dõi và ghi nhận hoạt động của từng địa chỉ IP truy cập vào website. Điều này dẫn đến nhiều tác vụ ghi – truy xuất vào cơ sở dữ liệu của website. Nếu có quá nhiều người đăng nhập thì sẽ làm bắt máy chủ làm việc nhiều, hao tốn tài nguyên và công năng máy chủ.
Thứ hai, nếu bị khóa hacker có thể đổi địa IP khác để tiếp tục dò tìm. Có những hacker và chương trình hack tự động có thể đổi IP sau mỗi lần thử nên phương án này cũng không quá hoàn hảo.
Cuối cùng, hạn chế số lần đăng nhập sai có thể ảnh hưởng đến trải nghiệm của những người dùng bình thường. Đôi khi có những người thực sự quên mật khẩu hoặc bất cẩn nhập sai mật khẩu quá số lần quy định, nếu bị khóa đăng nhập sẽ gây ra cảm giác tiêu cực cho họ.
Vì những lý do trên, hãy suy nghĩ kỹ số lần đăng nhập mà bạn muốn giới hạn. Ngoài ra, có thể gửi email thông báo cho người dùng nếu tài khoản bị khóa đăng nhập để họ không bị bỡ ngỡ, tức giận.
Sử dụng Captcha
Các hacker thường sử dụng các chương trình tự động (bot) để thực hiện tìm và thử các thông tin đăng nhập. Chúng có thể thực hiện hàng trăm lượt thử đăng nhập trong vòng 1 phút, hoàn toàn tự động và tiết kiệm công sức cho hacker.
Chương trình bot không thể nhập captcha, còn hacker sẽ mau nản chí khi gặp loại bảo mật này
Tuy nhiên những con bot này lại không thể nhập captcha chính xác được. Điều này bắt buộc hacker phải tự tay xác nhận captcha, sẽ dễ khiến hắn mệt mỏi và chán nản, bỏ cuộc. Vì vậy, captcha là một trong những phương pháp brute-force hiệu quả nhất.
Nhưng dù có thể chống brute-force rất tốt, thực tế là không nhiều website hiện đại sử dụng captcha. Lý do là bởi captcha còn gây ra sự bất tiện lên chính người dùng. Không ai muốn quá trình đăng nhập bị gián đoạn cả. Với lại, có rất nhiều người không thể đọc được captcha, không thể xác nhận đúng được.
Vì vậy, để vừa chống brute-force hiệu quả vừa không ảnh hưởng đến trải nghiệm người dùng, bạn có thể chỉ yêu cầu captcha sau 2-3 lần đăng nhập thất bại.
Các tiện ích giúp tăng cường bảo mật, phòng chống brute-force cho website
Hầu hết các biện pháp ngăn ngừa brute-force trên đây đều có thể được thực hiện thông qua việc tinh chỉnh trong hệ thống CMS hoặc mã nguồn website. Tuy nhiên, nếu bạn không quá rành về mảng lập trình, có thể sử dụng những công cụ, ích tiện sau (danh sách bao gồm những tiện ích của WordPress):
- Limit Logins Attempts: plugin hạn chế số lần đăng nhập sai và nhiều chức năng bảo mật khác
- Key Captcha: plugin giúp bạn tạo captcha cho WordPress một cách dễ dàng và bảo mật
-
Brute Force Login Protection: ngăn chặn tấn công brute-force toàn diện với nhiều chức năng bảo mật
Kết luận
Bài viết trên đây đã giải thích brute-force là gì, lý do website bạn bị tấn công và các cách ngăn ngừa brute-force mà bạn cần biết.
Hãy nhớ rằng nếu không bị giới hạn về thời gian và tài nguyên, brute-force luôn luôn hack được website của bạn.
Vì vậy, phải luôn tăng cường, duy trì độ bảo mật cho website. Hãy sử dụng các mật khẩu mạnh mẽ hơn, thay đổi mật khẩu thường xuyên, áp dụng các thủ thuật bảo mật như ẩn đường dẫn đăng nhập, hạn chế số lần đăng nhập sai, yêu cầu captcha khi đăng nhập, v.v… Bạn có thể tự cải thiện bảo mật cho trang hoặc cài plugin nhanh gọn, hoặc cũng có thể thuê một đội ngũ thiết kế website chuyên nghiệp có chuyên môn về bảo mật cao hơn.
Và điều quan trọng nhất là không có phương pháp nào hoàn hảo để phòng chống brute-force cho website của bạn, tất cả đều nằm ở ý thức của người sử dụng.