Image default
Máy Tính

Tấn Công SSH Tự Động: Bóc Trần Mối Nguy Từ Dữ Liệu Honeypot Thực Tế

Trong những 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, từ việc tự thiết lập hệ thống OPNsense cho đến triển khai Proxmox trên nhiều máy chủ. Quá trình này không chỉ mang lại niềm vui khám phá mà còn mở ra một góc nhìn thú vị về an ninh mạng từ quan điểm của một người đam mê bảo mật. Với các công cụ như CrowdSec tích hợp vào OPNsense, tôi có thể theo dõi và chặn các máy quét cổng tự động, điều này thúc đẩy tôi tìm hiểu kỹ hơn về bảo mật mạng gia đình nói riêng và an ninh mạng nói chung. Đó là lý do tôi quyết định triển khai một Honeypot SSH. Mục tiêu là để có được cái nhìn trực tiếp về những gì các kẻ tấn công làm khi chúng giành quyền truy cập vào một hệ thống. Kết quả thu được thực sự đáng báo động và cho thấy rõ mức độ nguy hiểm tiềm tàng trên không gian mạng hiện nay.

Để đảm bảo an toàn, tôi muốn nhấn mạnh rằng việc tự thiết lập một honeypot đòi hỏi kiến thức chuyên môn nhất định và tuyệt đối không nên triển khai trên mạng gia đình của bạn, trừ khi bạn thực sự hiểu rõ mình đang làm gì. 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à cài đặt một công cụ có tên là Cowrie. Cowrie là một honeypot SSH tiên tiến, 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 có vẻ hợp lệ. Công cụ này cũng có thể chấp nhận các hoạt động truyền file, cho phép các chuyên gia bảo mật chặn và phân tích các script hoặc file mã độc. Trong bài viết này, chúng ta sẽ cùng nhau khám phá những dữ liệu thú vị và đáng sợ mà Cowrie đã thu thập được.

Tôi đã sử dụng kho lưu trữ GitHub này để cấu hình Cowrie với cơ sở dữ liệu ElasticSearch (mặc dù tôi cần sửa đổi tập lệnh cài đặt), và tùy chỉnh bảng điều khiển Kibana để hiển thị thông tin mà tôi đặc biệt quan tâm. Dữ liệu được trình bày ở đây vô cùng quan trọng không chỉ vì nó ghi lại những nỗ lực 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ữ được phơi bày ra internet, mà còn cho thấy những 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 những mật khẩu xuất hiện trên các danh sách mật khẩu phổ biến nhất. Tuy nhiên, một kẻ tấn công nhắm mục tiêu cụ thể có thể còn cố gắng điều chỉnh các nỗ lực của chúng để phù hợp với bạn.

Honeypot SSH là gì và hoạt động ra sao?

Cowrie: Công cụ giả lập SSH chuyên nghiệp

Cowrie là một honeypot 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ù nó cũng có thể hoạt động như một proxy cho một máy thật 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. Hơn nữa, không chỉ các tương tác được ghi lại, mà các file được truyền cũng được lưu trữ cục bộ trên máy chủ để có thể phân tích sau này.

Giao diện mô phỏng kết nối SSH thông thường của Honeypot CowrieGiao diện mô phỏng kết nối SSH thông thường của Honeypot Cowrie

Cowrie có thể chạy trong môi trường container (chẳng hạn như với Podman hoặc Docker), hoặc chạy như một ứng dụng thông thường bằng Python. Mục đích chính của nó là khiến người kết nối vào 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ào honeypot của tôi thực sự rất đáng chú ý.

Tôi đã triển khai phiên bản 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ừ thời điểm đó. Đã có tổng cộng 29.282 tương tác độc đáo, với ngày hoạt động mạnh nhất là ngày 1 tháng 5 năm 2025, ghi nhận tổng cộng 7.438 tương tác riêng biệ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 lần thử đăng nhập, một lệnh được thực thi hoặc việc client ngắt kết nối. Sau khi lọc bỏ địa chỉ IP của chính tôi khi thử nghiệm, đã có 447 địa chỉ IP độc nhất được xác định trong tập dữ liệu.

Phân tích các mục tiêu tấn công: Tên người dùng và mật khẩu phổ biến nhất

“Root” và những cái tên quen thuộc

Đầ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 ngạc nhiên, “root” là người dùng được thử đă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 hoàn toàn hợp lý, vì người dùng root là người dùng 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 kiểm soát toàn bộ hệ thống của bạn và có thể truy cập mọi file hiện có. Nó về cơ bản là “chén thánh” của kẻ tấn công, đó là lý do tại sao việc sử dụng khóa SSH cho truy cập từ xa nói chung được khuyến nghị. Hơn nữa, nếu bạn không cần kích hoạt người dùng root, tốt hơn hết là vô hiệu hóa hoàn toàn người dùng root và thay vào đó chỉ 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 riêng mình.

Biểu đồ thống kê các tên người dùng được thử đăng nhập nhiều nhất vào honeypot SSH CowrieBiểu đồ thống kê các tên người dùng được thử đăng nhập nhiều nhất vào honeypot SSH Cowrie

Nhìn vào các tên người dùng phổ biến khác, hầu hết chúng không gây ngạc nhiên. “admin” và “user” rất hợp lý, cũng như “support”. Thật thú vị, “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 người dùng được thử nhiều nhất trong tập dữ liệu của tôi. “usario” trong tiếng Tây Ban Nha có nghĩa là “user”, và “oracle”, “ubuntu”, và “pi” đều khá dễ hiểu. 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”. 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 ví tiền điện tử liên quan đến hoạt động khai thác.

Mật khẩu “dễ đoán” và mã độc tự động

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 ngạc nhiên quá lớn. Đâ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, nó sẽ báo cáo về một máy chủ IRC, thay đổi mật khẩu thành mật khẩu đó, 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 đã từng truy cập vào hệ thống này trong quá khứ hay chưa.

Biểu đồ thống kê các mật khẩu được sử dụng phổ biến nhất trong các cuộc tấn công vào honeypot SSH CowrieBiểu đồ thống kê các mật khẩu được sử dụng phổ biến nhất trong các cuộc tấn công vào honeypot SSH Cowrie

Không có nhiều điều để nói ở đây; những mật khẩu này cực kỳ 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. Đối với quyền truy cập SSH vào máy chủ của bạn, đặc biệt, bạn nên sử dụng SSH keys hoặc, ít nhất, đảm bảo rằng bạn sử dụng một mật khẩu mạnh. Như trong trường hợp mật khẩu “raspberryraspberry993311”, chúng ta có thể thu thập 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 Akamai Security.

Những hành động sau khi “xâm nhập”: Các lệnh được thực thi nhiều nhất

Thăm dò hệ thống và mục tiêu cụ thể

Không có gì 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 build 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 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.

Biểu đồ thống kê các lệnh thường xuyên được thực thi nhất bởi kẻ tấn công trên honeypot SSH CowrieBiểu đồ thống kê các lệnh thường xuyên được thực thi nhất bởi kẻ tấn công trên honeypot SSH Cowrie

Đáng chú ý, Telegram cũng là mục tiêu cụ thể. Cả lệnh “locate D877F783D5D3EF8Cs” và các lệnh Telegram đều có liên quan, với “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 lệnh này không thể thực sự được thực thi, vì các file đã bị Cowrie chặn và đặt bên ngoài container để xem xét sau.

Hầu hết các lệnh khác thường xuyên xuất hiện đều liên quan đến việc cố gắng thực thi các file đó, bao gồm việc 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.

“Mổ xẻ” mã độc: Phân tích một file thu được bằng Ghidra

Công cụ Ghidra và quy trình phân tích cơ bản

Trong suốt thời gian thu thập dữ liệu, tổng cộng có 18 mục đã được chuyển đến honeypot của tôi, với các file có kích thước từ 1KB khiêm tốn đến gần 30MB. Tôi đã xem xét một trong số chúng chỉ để xem cách nó bắt đầu thực thi, vì kỹ thuật đảo ngược phần mềm có thể mất rất nhiều thời gian. Thông thường, tốt nhất là 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 những 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ỳ (NSA) 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ể cung cấp cái nhìn hấp dẫn về cách một phần mềm hoạt động.

Mã giả C được phân tích bằng Ghidra, hiển thị logic kiểm tra định dạng dữ liệu trong một file mã độcMã giả C được phân tích bằng Ghidra, hiển thị logic kiểm tra định dạng dữ liệu trong một file mã độc

Trong ảnh chụp màn hình trên, tôi đã theo dõi sơ đồ 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 hơn thực sự làm 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ó thể là một kiểm tra cho một cái 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), do đó 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 thành 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 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 nhiều chữ số. Sau đó, nó dịch chuyển 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ó đến một dấu ‘.’, nó chuyển sang octet tiếp theo, phá vỡ vòng lặp khi không còn gì nữa.

Khám phá cơ chế hoạt động: Kiểm tra phiên bản Kernel

Khối mã giả C trong Ghidra cho thấy quá trình kiểm tra và so sánh phiên bản kernel của hệ thốngKhối mã giả C trong Ghidra cho thấy quá trình kiểm tra và so sánh phiên bản kernel của hệ thống

Khối mã tiếp theo này khá thú vị, nhưng đây cũng là nơi tôi sẽ dừng phân tích này, vì đây 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. 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ước đó, và sau đó dịch phải 31 bit. Điều này kiểm tra xem giá trị gốc có phải là tất cả 1 (0xFFFFFFFF) hoặc 0 hay không, coi các giá trị đó là các trường hợp đặc biệt. Nếu kết quả dịch là 0, mã sẽ bỏ qua logic sắp tới hoàn toàn 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 xem có cập nhật giá trị toàn cục với giá trị mới được phân tích hay giữ lại giá trị trước đó.

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ị được 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 dùng để phân tích phiên bản kernel của hệ thống và báo lỗi nếu phiên bản kernel quá cũ. Ngưỡng đó sẽ tương ứng với phiên bản Linux kernel 2.6.9, được phát hành vào năm 2004. Điều này cho thấy kẻ tấn công thường nhắm mục tiêu vào các hệ thống hiện đại hơn hoặc có thể phát hiện và bỏ qua các hệ thống với kernel quá cũ, có thể là do các lỗ hổng đã được vá hoặc vì đó là một honeypot.

Cảnh báo từ thế giới mạng: Hàng trăm ngàn mối nguy hiểm

Như bạn có thể thấy xuyên suốt bài viết này, internet là một nơi khá đáng sợ. Có rất nhiều máy quét tự động đang cố gắng tìm kiếm nạn nhân, và nhiều trong số chúng đã thành công trong việc tìm thấy họ. Trong trường hợp 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, 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 quyền truy cập, từ đánh cắp thông tin đăng nhập và ví tiền điện tử cho đến triển khai mã độc cố gắng lây lan sang các thiết bị khác.

Giao diện Kibana dashboard hiển thị tổng quan các cuộc tấn công và hoạt động trên honeypot SSHGiao diện Kibana dashboard hiển thị tổng quan các cuộc tấn công và hoạt động trên honeypot SSH

Như mọi khi, hãy cảnh giác với bảo mật. Sử dụng mật khẩu phù hợp, không để lộ các thiết bị ra internet mà không cần thiết, và tuân thủ các nguyên tắc thông thường 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à những kết quả thu được thật đáng sợ nếu không nói là bất ngờ. Hãy tưởng tượng vô số thiết bị ngoài kia đã bị xâm phạm mà chủ sở hữu không hề hay biết? Những tập lệnh 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 thực sự bị xâm phạm, tôi sẽ phải tích cực tìm kiếm để phát hiện ra nó.

Những phân tích từ honeypot SSH này là một lời nhắc nhở đanh thép về tầm quan trọng của việc duy trì an ninh mạng vững chắc. Mỗi chúng ta, dù là người dùng cá nhân hay quản trị viên hệ thống, đều cần có ý thức và hành động cụ thể để bảo vệ tài sản số của mình. Hãy chia sẻ ý kiến của bạn về những nguy hiểm trên internet và cách bạn bảo vệ hệ thống của mình ở phần bình luận bên dưới!

Related posts

Vì Sao SSD Cấp Doanh Nghiệp Đã Qua Sử Dụng Là Lựa Chọn Lưu Trữ Thông Minh?

Administrator

Tối Ưu Cộng Tác Trong Microsoft Word: Nâng Cao Hiệu Suất Làm Việc Nhóm

Administrator

BookStack: Giải Pháp Kiến Tạo Wiki Cá Nhân & Quản Lý Tri Thức Tự Host Toàn Diện

Administrator