Hình ảnh minh họa việc kết nối SSH vào máy chủ ảo để quản lý hệ thống bảo mật
Máy Tính

Honeypot SSH: Lưới Bẫy Kỹ Thuật Số Hé Lộ Những Nguy Hiểm Rình Rập Trên Internet

Trong vài tháng gần đây, tôi đã dành thời gian khám phá sâu hơn về lĩnh vực mạng, bao gồm việc thiết lập hệ thống OPNsense của riêng mình và triển khai Proxmox trên một vài máy chủ. Trải nghiệm này thực sự thú vị, và từ góc độ của một người đam mê bảo mật, những dữ liệu mà tôi có thể quan sát trong OPNsense cực kỳ đáng để tìm hiểu. Thông qua các công cụ như CrowdSec, tôi có thể thấy rõ các cổng quét tự động đang bị chặn, điều này khiến tôi phải xem xét kỹ hơn về mạng gia đình và an ninh mạng nói chung. Đó là lý do tại sao tôi quyết định thiết lập một honeypot SSH – một “nồi mật ong” điện tử – để cố gắng hình dung những gì mà những kẻ tấn công làm khi chúng giành được quyền truy cập vào một hệ thống. Và kết quả thu được thực sự đáng sợ, cho thấy internet là một nơi đầy rẫy hiểm nguy với vô vàn cuộc tấn công tự động rình rập.

Trước khi đi sâu vào chi tiết, tôi cần đưa ra một cảnh báo quan trọng: Trừ khi bạn thực sự hiểu rõ những gì mình đang làm, tôi không khuyến nghị bạn tự thiết lập honeypot, và tuyệt đối không bao giờ triển khai nó trên mạng gia đình của bạn. Tôi đã triển khai một máy ảo Ubuntu tối giản, chạy trên một máy chủ riêng biệt, không chứa bất kỳ dữ liệu nhạy cảm nào khác, và thiết lập một công cụ có tên là Cowrie. Cowrie là một honeypot SSH chuyên biệt, có khả năng mô phỏng một kết nối SSH thực sự, hoàn chỉnh với các phản hồi lệnh trông “hợp lệ”. Nó thậm chí có thể chấp nhận chuyển file, cho phép các kịch bản và file độc hại khác bị chặn lại và phân tích bởi các nhà nghiên cứu bảo mật. Chúng ta sẽ cùng nhau tìm hiểu về những dữ liệu đáng giá này.

Để cấu hình Cowrie, tôi đã sử dụng kho lưu trữ GitHub này, kết hợp với cơ sở dữ liệu ElasticSearch (mặc dù tôi cần sửa đổi tập lệnh thiết lập để phù hợp), và điều chỉnh bảng điều khiển Kibana để hiển thị thông tin mà tôi đặc biệt muốn theo dõi. Dữ liệu được trình bày ở đây đặc biệt quan trọng không chỉ vì nó ghi lại các nỗ lực tấn công theo thời gian thực từ những kẻ muốn tự động xâm nhập vào các dịch vụ tự lưu trữ (self-hosted) bị phơi bày ra internet, mà còn cho thấy điều gì có thể xảy ra khi bạn không sử dụng mật khẩu an toàn. Gần như tất cả các nỗ lực này đều sử dụng mật khẩu nằm trong danh sách các mật khẩu phổ biến nhất, nhưng một số kẻ tấn công có mục tiêu cụ thể cũng có thể cố gắng điều chỉnh các nỗ lực của chúng để nhắm trực tiếp vào bạn.

Cowrie: Honeypot SSH Mạnh Mẽ Dưới Tầm Kiểm Soát Của Bạn

Mô Phỏng Kết Nối SSH Thực Tế

Cowrie là một honeypot dành cho SSH và Telnet, được thiết kế để ghi lại tất cả các tương tác. Được viết bằng Python, nó mô phỏng một hệ thống Unix, mặc dù cũng có thể hoạt động như một proxy tới một máy thực nếu bạn muốn. Cowrie hoàn toàn có thể tùy chỉnh, cho phép bạn thay đổi banner đăng nhập, các thông tin đăng nhập được chấp nhận, hệ thống file, và nhiều thứ khác nữa. Hơn nữa, không chỉ các tương tác được ghi lại, mà các file được truyền tải cũng được lưu cục bộ vào máy để có thể phân tích sau này.

Cowrie có thể được chạy trong môi trường container (chẳng hạn như với Podman hoặc Docker), hoặc có thể chạy như một ứng dụng thông thường sử dụng Python. Mục đích của nó là người kết nối đến honeypot không hề biết rằng đó là một honeypot. Nó phản hồi các lệnh với những phản hồi hợp lý, bao gồm cả các lệnh được thiết kế để in thông tin hệ thống. Như chúng ta sẽ thấy, có rất nhiều lệnh như vậy, và một số hành động được thực hiện bởi những kẻ đã kết nối với honeypot của tôi thực sự rất thú vị.

Tôi đã triển khai máy chủ Cowrie của mình vào ngày 23 tháng 4 năm 2025, và tất cả dữ liệu được thảo luận trong bài viết này đã được thu thập kể từ đó. Có tổng cộng 29.282 tương tác duy nhất, với ngày hoạt động mạnh nhất là ngày 1 tháng 5 năm 2025, ghi lại tổng cộng 7.438 tương tác duy nhất. Một “tương tác” được định nghĩa là bất kỳ hành động riêng lẻ nào, chẳng hạn như một nỗ lực đăng nhập, một lệnh được thực thi, hoặc việc client ngắt kết nối. Có 447 địa chỉ IP duy nhất được xác định trong tập dữ liệu sau khi tôi đã lọc bỏ địa chỉ IP của chính mình trong quá trình thử nghiệm.

Hình ảnh minh họa việc kết nối SSH vào máy chủ ảo để quản lý hệ thống bảo mậtHình ảnh minh họa việc kết nối SSH vào máy chủ ảo để quản lý hệ thống bảo mật

Phân Tích Tên Người Dùng và Mật Khẩu Thường Bị Tấn Công

Các Tài Khoản Và Mật Khẩu Yếu Phổ Biến

Đầu tiên và quan trọng nhất, chúng ta sẽ xem xét các tên người dùng và mật khẩu được sử dụng nhiều nhất. Không có gì ngạc nhiên khi “root” là tài khoản người dùng được cố gắng đăng nhập nhiều nhất, chiếm hơn một phần sáu tổng số nỗ lực. Điều này hợp lý, vì người dùng root là tài khoản có đặc quyền cao nhất trên hệ thống dựa trên Linux. Với quyền truy cập root, kẻ tấn công có thể kiểm soát toàn bộ hệ thống của bạn và truy cập mọi file có mặt. Nó về cơ bản là “chén thánh” của tin tặc, đó là lý do tại sao khuyến nghị chung là nên sử dụng SSH keys để truy cập từ xa. Hơn nữa, nếu bạn không cần tài khoản root được kích hoạt, tốt hơn hết là nên vô hiệu hóa hoàn toàn người dùng root và thay vào đó dựa vào các lệnh sudo để có được các đặc quyền nâng cao khi bạn cần chúng từ tài khoản của mình.

Xem xét các tên người dùng phổ biến khác, hầu hết đều không gây ngạc nhiên. “admin” và “user” rất có lý, tương tự như “support”. Thú vị thay, “ubnt” là tên người dùng mặc định trên hầu hết các sản phẩm của Ubiquiti, và tên người dùng này là một trong những tên được thử nhiều nhất trong bộ dữ liệu của tôi. “usario” là tiếng Tây Ban Nha của “user”, và “oracle”, “ubuntu”, “pi” đều khá tự giải thích. Hầu hết các tên người dùng khác được thử ở đây dường như chủ yếu tấn công các dịch vụ cụ thể, chẳng hạn như “hadoop”, “ec2-user”, và “nginx”, để kể tên một vài cái. Cuối cùng, cũng có những tham chiếu đến tên tiền điện tử, cho thấy một số kẻ tấn công có thể đang tìm kiếm các ví tiền điện tử liên quan đến hoạt động khai thác.

Biểu đồ thống kê các mật khẩu SSH thường được tin tặc sử dụng để tấn công Honeypot CowrieBiểu đồ thống kê các mật khẩu SSH thường được tin tặc sử dụng để tấn công Honeypot Cowrie

Tiếp theo là các mật khẩu, và không có mật khẩu nào trong số này gây bất ngờ. Đây là những mật khẩu bạn sẽ tìm thấy trong các danh sách mật khẩu phổ biến, ngoại trừ một số mật khẩu cụ thể như “raspberryraspberry993311”. Mật khẩu này dường như được sử dụng bởi một loại sâu máy tính (worm), theo một nhà nghiên cứu, sẽ báo cáo tới một máy chủ IRC, thay đổi mật khẩu thành mật khẩu này, và sau đó quét các thiết bị nạn nhân tiềm năng khác. Một số kẻ tấn công có thể sử dụng mật khẩu này trong các nỗ lực của chúng để giành quyền kiểm soát một thiết bị từ một kẻ tấn công khác, trong khi những kẻ đã triển khai nó có thể sử dụng mật khẩu này như một cách để biết liệu chúng đã giành được quyền truy cập vào hệ thống này trong quá khứ hay chưa.

Không có nhiều điều để nói ở đây; những mật khẩu này rất tệ và đại diện cho những nỗ lực đầu tiên của hacker khi cố gắng giành quyền truy cập vào một hệ thống. Nếu bạn đang sử dụng một trong những mật khẩu này (hoặc bất kỳ mật khẩu phổ biến nào khác), bạn nên thay đổi nó ngay lập tức. Đặc biệt đối với quyền truy cập SSH vào máy chủ của bạn, bạn nên sử dụng SSH keys hoặc ít nhất là đảm bảo bạn sử dụng một mật khẩu mạnh. Giống như trong trường hợp nỗ lực mật khẩu “raspberryraspberry993311”, chúng ta cũng có thể nhận được thông tin từ các mật khẩu khác đã được thử. Một mật khẩu, “0l0ctyQh243O63uD”, đã được thử nhiều lần và dường như được sử dụng bởi NoaBot dựa trên Mirai, theo nghiên cứu bảo mật của Akamai.

Các Lệnh Thường Được Thực Thi Nhất và Điều Bất Ngờ

Không ngạc nhiên, lệnh được sử dụng phổ biến nhất là “uname -s -v -n -r -m”. Lệnh này in tên kernel, phiên bản kernel (ngày xây dựng và các thông tin khác), tên máy chủ nút mạng, phiên bản phát hành kernel và tên phần cứng máy. Lệnh này có thể được sử dụng để xác định một honeypot, nhưng nó cũng được sử dụng để xác định loại phần cứng mà kẻ tấn công đã kết nối nói chung. Nhiều kẻ đã ngắt kết nối ngay sau khi chạy lệnh này, cho thấy rằng đó không phải là thứ chúng đang tìm kiếm.

Điều thú vị là Telegram cũng được nhắm mục tiêu cụ thể. Cả lệnh “locate D877F783D5D3EF8Cs” và các lệnh liên quan đến Telegram đều có liên quan, trong đó “D877F783D5D3EF8Cs” chứa ID người dùng và khóa mã hóa để liên lạc giữa client Telegram và máy chủ. Các lệnh khác được chạy để thu thập thông tin về khả năng của hệ thống, trong khi một số khác được sử dụng để thực thi các script và ứng dụng đã được tải xuống. Tất nhiên, những file này không thể thực sự được thực thi, vì chúng đã bị Cowrie chặn lại và đặt bên ngoài container để xem xét sau.

Hầu hết các lệnh khác xuất hiện thường xuyên đều liên quan đến nỗ lực thực thi các file đó, bao gồm cố gắng cấp quyền thực thi cho chúng và các lệnh “scp -t” để nhận một file và đặt nó vào thư mục /tmp.

Giải Mã Mã Độc: Cái Nhìn Sâu Vào Một Tệp Tin Thu Được

Có tổng cộng 18 mục đã được chuyển đến honeypot của tôi trong suốt thời gian thu thập dữ liệu, với các file có kích thước từ 1 KB đến gần 30 MB. Tôi đã xem xét một trong số chúng chỉ để xem nó bắt đầu thực thi như thế nào, vì việc đảo ngược kỹ thuật phần mềm có thể mất rất nhiều thời gian. Thông thường, tốt nhất là nên phân tích mã độc trong máy ảo, và tôi đang sử dụng Ghidra cho quá trình này. Trong ảnh chụp màn hình bên dưới, chúng ta có thể thấy một trong các file thu được từ honeypot, được mở trong Ghidra. Ghidra là một công cụ miễn phí và mã nguồn mở, được Cơ quan An ninh Quốc gia Hoa Kỳ phát hành, và được sử dụng để đảo ngược kỹ thuật phần mềm. Công cụ này, khi kết hợp với một công cụ khác như radare2, có thể mang lại cái nhìn sâu sắc hấp dẫn về cách một phần mềm hoạt động.

Trong ảnh chụp màn hình đầu tiên bên dưới, tôi đã đi theo bản đồ hàm từ điểm vào của ứng dụng (nơi nó bắt đầu thực thi) để hiểu cách dữ liệu luân chuyển trong đó. Đây là một trong những hàm sớm nhất thực sự làm một điều gì đó, và có vẻ là một ứng cử viên tốt để phân tích. Trong phần được đánh dấu, chúng ta có thể thấy rằng đây có khả năng là một kiểm tra cho thứ gì đó được phân tách bằng dấu chấm.

cVar1 = *pcVar7;while ((byte)(cVar1 - 0x30U) unaff_EBX = pcVar7 + 1; uVar4 = (int)cVar1 - 0x30; cVar1 = pcVar7[1]; while ((byte)(cVar1 - 0x30U) unaff_EBX = unaff_EBX + 1; uVar4 = cVar1 + -0x30 + uVar4 * 10; cVar1 = *unaff_EBX; } iVar3 = iVar3 + 1; uVar8 = uVar8 if (cVar1 != '.') break; pcVar7 = unaff_EBX + 1; cVar1 = *pcVar7;}

Đoạn mã này đọc ký tự đầu tiên trong cVar1, được lấy từ một tham chiếu con trỏ đến pcVar1. pcVar1 có thể chứa phiên bản kernel, và chúng ta sẽ tìm hiểu lý do sau. Sau đó, nó kiểm tra xem đó có phải là một chữ số hay không (vì ‘0’ = 0x30), vì vậy vòng lặp này chỉ tiếp tục nếu ký tự là ‘0’-‘9’. Sau đó, nó khởi tạo uVar4 bằng giá trị của chữ số hiện tại và chuyển sang ký tự tiếp theo. Vòng lặp while lồng nhau thứ hai phân tích một số có nhiều chữ số khi nó liên tục nhân giá trị trước đó với 10 và thêm chữ số tiếp theo, xử lý các octet có nhiều chữ số. Sau đó, nó dịch giá trị uVar8 hiện có sang trái 8 bit và thêm octet mới được phân tích, đưa nó vào một đơn vị duy nhất. Cuối cùng, khi nó đạt đến dấu ‘.’, nó chuyển sang octet tiếp theo, thoát khỏi vòng lặp khi không còn gì nữa.

Màn hình phần mềm Ghidra hiển thị quá trình phân tích mã độc thu thập từ Honeypot SSHMàn hình phần mềm Ghidra hiển thị quá trình phân tích mã độc thu thập từ Honeypot SSH

Khối mã tiếp theo này khá thú vị, nhưng đây cũng là lúc tôi sẽ dừng phân tích, vì đây chỉ là một cái nhìn tổng quan nhanh về những gì bạn có thể làm với một honeypot và dữ liệu bạn thu thập được. Đoạn mã này bắt đầu bằng cách đảo ngược tất cả các bit trong uVar8, giá trị đã phân tích mà chúng ta đã nói ở trên, và sau đó dịch phải 31 bit. Điều này kiểm tra xem giá trị ban đầu có phải là tất cả các bit 1 (0xFFFFFFFF) hoặc 0 hay không, xử lý các giá trị đó như các trường hợp đặc biệt. Nếu kết quả của phép dịch là 0, mã sẽ bỏ qua logic sắp tới và thay vào đó cố gắng đọc phiên bản kernel bằng cách truy cập /proc/sys/kernel/osrelease. Nếu nó khác 0, nghĩa là đó là một giá trị “bình thường”, nó sẽ vào một vòng lặp sử dụng uVar8 cùng với một giá trị toàn cục được gọi là DAT_080d7e64. Sau đó, nó tạo một giá trị 64-bit từ hai giá trị 32-bit đó (uVar9), có thể để sử dụng làm trạng thái ghép hoặc định danh duy nhất. Nếu DAT_080d7e64 toàn cục không phải là 0, mã sẽ so sánh hai phần của giá trị 64-bit. Dựa trên đó, nó quyết định có cập nhật biến toàn cục với giá trị mới được phân tích hay giữ lại giá trị trước đó.

Sau khi tất cả những điều đó được thực hiện, nó kiểm tra xem giá trị (hoặc một giá trị dẫn xuất từ nó) có nhỏ hơn một ngưỡng cụ thể hay không: 0x20609. Nếu có, mã sẽ in thông báo “FATAL: kernel too old” và nhảy đến một hàm mà có lẽ sẽ dừng thực thi. Toàn bộ hàm này phục vụ để phân tích phiên bản kernel của hệ thống và đưa ra lỗi nếu nó quá cũ. Ngưỡng đó sẽ tương ứng với phiên bản kernel Linux 2.6.9, được phát hành vào năm 2004.

Giao diện Ghidra khi phân tích sâu hơn logic kiểm tra phiên bản kernel trong mã độcGiao diện Ghidra khi phân tích sâu hơn logic kiểm tra phiên bản kernel trong mã độc

Internet Đầy Rẫy Những Nguy Hiểm Rình Rập

Hãy Luôn Cảnh Giác Để Bảo Vệ Chính Mình

Như bạn có thể thấy xuyên suốt bài viết này, internet thực sự là một nơi đáng sợ. Có rất nhiều công cụ quét tự động đang cố gắng tìm kiếm nạn nhân, và nhiều trong số đó đã thực sự thành công trong việc tìm ra chúng. Trong trường hợp của honeypot này, không có thiệt hại nào xảy ra, nhưng trên một máy chủ thực sự, hậu quả có thể là thảm khốc. Rõ ràng là những kẻ xấu này có thể làm bất cứ điều gì một khi chúng giành được quyền truy cập, từ việc đánh cắp thông tin đăng nhập và ví tiền điện tử đến triển khai mã độc hại cố gắng lây lan sang các thiết bị khác.

Như mọi khi, hãy luôn cảnh giác khi nói đến bảo mật. Sử dụng mật khẩu mạnh, không phơi bày các thiết bị ra internet nếu không cần thiết, và tuân thủ các nguyên tắc bảo mật cơ bản khi duyệt web. Đây chỉ là một máy chủ mà tôi đã chạy trong hơn một tuần, và kết quả thật đáng sợ nếu không gây bất ngờ. Hãy tưởng tượng vô số thiết bị ngoài kia đã bị xâm nhập mà chủ sở hữu không hề hay biết? Các script này được thiết kế để tự ẩn mình, vì vậy trong trường hợp của tôi, nếu máy chủ của tôi đã bị xâm nhập, tôi sẽ cần phải chủ động tìm kiếm nó để phát hiện ra.

Hãy chia sẻ kinh nghiệm và các biện pháp bảo mật mà bạn đang áp dụng để bảo vệ hệ thống của mình trong phần bình luận bên dưới. Đừng quên truy cập camnangcongnghe.net thường xuyên để cập nhật những thông tin và kiến thức mới nhất về an ninh mạng!

Related posts

Phát hiện công cụ chia sẻ và chỉnh sửa ảnh mới trên Windows 11 23H2 Beta

Administrator

Những Sai Lầm Phổ Biến Khi Bắt Đầu Dùng Portainer (Và Cách Khắc Phục)

Administrator

Cách Khởi Động Lại File Explorer Trên Windows 10/11 Khi Bị Đơ Hoặc Không Phản Hồi

Administrator

Kết hợp NotebookLM và Perplexity: Cặp Đôi AI Hoàn Hảo Biến Đổi Quy Trình Nghiên Cứu

Administrator

Microsoft Tạm Dừng Cập Nhật Bảo Mật Windows Tháng 6/2025: Vì Sao?

Administrator

Cải Tiến Lớn Cho Voice Access Trên Windows 11: Nút Bật/Tắt Trực Tiếp Từ Quick Actions

Administrator