Offensive Security

Pivoting qua Máy chủ Bị Xâm nhập với Tunnel SOCKS5

4 min read Published Updated 745 words

Một máy chủ bị xâm nhập duy nhất trong mạng nội bộ sẽ vô dụng nếu không có đường dẫn pivot đáng tin cậy. Các đường hầm SOCKS5 qua SSH cung cấp phương pháp di chuyển ngang có độ trễ thấp nhất và không phụ thuộc vào công cụ — nhưng hầu hết các nhà khai thác đều cấu hình sai hoặc để lại dấu vết pháp y mà một đội xanh (blue team) có năng lực sẽ phát hiện ngay trong vài giây. Vào năm 2024, một proxy SOCKS5 được thiết lập đúng cách vẫn vượt trội hơn proxy HTTP CONNECT về thông lượng TCP thô, và với các công cụ như proxychains-ng và Chisel, bạn có thể định tuyến nmap, Metasploit và các tập lệnh tùy chỉnh qua một phiên SSH duy nhất mà không cần chạm vào quy tắc tường lửa của mục tiêu.

Tại sao SOCKS5 qua SSH lại vượt trội hơn Port Forwarding

Port forwarding tĩnh cục bộ (-L) buộc bạn phải ánh xạ từng dịch vụ từ xa vào một cổng cục bộ trước khi có thể tương tác. Nếu bạn cần quét một subnet /24, bạn sẽ phải tạo 254 forward riêng biệt. Dynamic forwarding SOCKS5 (-D) giải quyết vấn đề này bằng cách hiển thị một proxy SOCKS5 cục bộ, định tuyến bất kỳ kết nối TCP nào qua đường hầm SSH đến máy chủ từ xa. Giao thức này được định nghĩa trong RFC 1928 và hỗ trợ xác thực, UDP (tùy chọn) và IPv6. Trong thực tế, bạn có một trình lắng nghe cục bộ duy nhất — thường trên 127.0.0.1:1080 — và mọi công cụ hỗ trợ proxy SOCKS đều có thể sử dụng nó. Chi phí là không đáng kể: mã hóa SSH có thể tăng thêm 5-10% CPU, nhưng độ trễ thấp hơn nhiều so với VPN hoặc reverse port forward qua web shell.

Thiết lập một SOCKS5 Listener trên một Foothold Linux

Giả sử bạn có một shell trên máy chủ Linux bên trong mạng mục tiêu. Cách nhanh nhất để thiết lập pivot là chạy ssh -D 1080 -N -f user@your-listener từ máy chủ bị xâm nhập trở lại máy tấn công của bạn. Nhưng điều này yêu cầu quyền truy cập SSH đi ra ngoài, có thể bị chặn. Thay vào đó, hãy chạy dynamic forward từ máy tấn công của bạn đến máy chủ bị xâm nhập:

ssh -D 1080 -N -f compromised_user@compromised_host

Thao tác này mở một proxy SOCKS5 trên cổng cục bộ 1080 của bạn. Bây giờ hãy cấu hình proxychains-ng (/etc/proxychains.conf) để sử dụng proxy đó:

socks5 127.0.0.1 1080

Sau đó chạy bất kỳ công cụ TCP nào qua đường hầm:

proxychains4 nmap -sT -Pn -p 445,3389 10.10.10.0/24

Lưu ý rằng nmap yêu cầu -sT (quét kết nối TCP) vì SOCKS5 không hỗ trợ gói SYN thô. Đối với Metasploit, hãy đặt setg Proxies socks5:127.0.0.1:1080 và tất cả các module auxiliary và exploit sẽ định tuyến qua pivot. Kỹ thuật này hoạt động trong các môi trường CTF như Hack The Box hoặc Proving Grounds, nơi mục tiêu là tiếp cận một subnet thứ hai.

Chisel, Ligolo-ng và các đánh đổi

Khi SSH không khả dụng — có thể mục tiêu chạy Windows hoặc không có máy chủ SSH — các công cụ tunneling thay thế sẽ lấp đầy khoảng trống. Chisel sử dụng client và server dựa trên Go, tunnel TCP qua HTTP/HTTPS. Chạy server trên máy tấn công của bạn: chisel server -p 8000 --reverse. Trên máy chủ bị xâm nhập, chạy client: chisel client your_ip:8000 R:socks. Điều này cung cấp cho bạn một trình lắng nghe SOCKS5 ở phía server. Chisel nhanh và hoạt động qua các bộ lọc egress hạn chế, nhưng lưu lượng của nó không được mã hóa theo mặc định — hãy bọc nó trong TLS hoặc sử dụng SSH nếu bạn quan tâm đến opsec.

Ligolo-ng có cách tiếp cận khác: nó tạo một đường hầm mạng ở Layer 3 bằng giao diện TUN/TAP. Thay vì SOCKS5, bạn định tuyến toàn bộ dải IP qua pivot. Điều này có nghĩa là bạn có thể chạy nmap -sS (quét SYN) mà không cần proxychains. Sự đánh đổi là chi phí quản trị: bạn cần quyền root trên cả hai đầu, và việc thiết lập đường hầm yêu cầu thêm route trên máy tấn công. Đối với CTF nơi bạn kiểm soát cả hai phía, Ligolo-ng nhanh hơn. Trong các cuộc kiểm tra thực tế, cách tiếp cận SOCKS5 linh hoạt hơn vì nó hoạt động mà không cần đặc quyền nâng cao trên máy chủ pivot.

Các tín hiệu phát hiện mà kẻ tấn công để lại

Mọi phương pháp pivot đều để lại các artifact. Dynamic forward SSH tạo một socket lắng nghe trên máy chủ bị xâm nhập — ss -tlnp hiển thị một tiến trình ssh gắn với 127.0.0.1:1080. Đội xanh có thể tương quan điều này với các kết nối SSH đi ra ngoài đến một IP bên ngoài. Tiến trình client của Chisel có tên mặc định là chisel — dễ dàng phát hiện bằng giám sát tiến trình. Ligolo-ng yêu cầu một thiết bị TUN (ip link show), điều này bất thường trên một máy chủ.

Tệ hơn, nhiều nhà khai thác quên dọn dẹp. Phiên SSH vẫn tồn tại cho đến khi máy chủ từ xa giết nó hoặc kết nối bị ngắt. Proxychains không để lại artifact cục bộ, nhưng bản thân lưu lượng nmap — các bản quét cổng bất thường xuất phát từ một máy chủ thường không quét — sẽ kích hoạt cảnh báo IDS. Sai lầm phổ biến nhất là tái sử dụng cổng SOCKS5 mặc định 1080. Hãy đổi nó thành một cổng ephemeral cao (ví dụ: ssh -D 53421) và đặt bí danh cho cấu hình proxychains để tránh để lại tệp cấu hình mặc định. Trong CTF, điều này không quan trọng. Trong một bài kiểm tra thâm nhập thực tế, những tín hiệu này chính là cách bạn bị phát hiện.