2 giờ sáng, điện thoại rung. Alert từ Grafana: có user lạ đang chạy cron job với quyền root trên production server. Mình nhảy vào điều tra và nhận ra — server đã bị compromise, kẻ tấn công leo thang đặc quyền từ một service account bị bỏ quên từ lâu.
Không phải lần đầu. Mấy năm trước cũng có vụ SSH brute-force, cũng lúc nửa đêm, cũng vá tay trong trạng thái nửa tỉnh nửa ngủ. Từ đó mình chuyển sang audit chủ động — chạy LinPEAS trên mọi server mới dựng hoặc tiếp nhận từ người khác, trước khi bất kỳ ai kịp exploit.
Chạy LinPEAS ngay trong 5 phút
Một bash script duy nhất. Không cần cài đặt, không cần build — download xuống là chạy được:
# Cách 1: Download và chạy trực tiếp
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
# Cách 2: Download về trước (khuyên dùng trên production)
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
Nếu server không có internet, copy sang bằng scp từ máy local:
# Từ máy local
scp linpeas.sh [email protected]:/tmp/
# Trên server
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh
Luôn lưu output lại để phân tích sau — đừng để nó cuộn qua rồi mất:
./linpeas.sh 2>/dev/null | tee linpeas_output.txt
Màu sắc trong LinPEAS — tìm vấn đề trong vài phút thay vì vài giờ
Output của LinPEAS dài, đôi khi hơn 1000 dòng. May mắn là không cần đọc hết. Hiểu hệ thống màu sắc thì chỉ cần vài phút là xong:
- Đỏ/Vàng đậm: 95% khả năng là vector leo thang đặc quyền — xem ngay lập tức
- Vàng nhạt: Đáng chú ý, cần xem xét thêm
- Xanh lá: Thông tin hữu ích nhưng không trực tiếp nguy hiểm
- Xanh dương / Không màu: Dữ liệu system thô để tham khảo
Rule đơn giản: bắt đầu từ màu đỏ. Không thấy đỏ thì mới xuống vàng.
Các nhóm kiểm tra chính của LinPEAS
- SUID/SGID binaries: File có set SUID bit — nguồn phổ biến nhất để leo thang
- Sudo rules: Lệnh nào được phép chạy với sudo không cần password
- Cron Jobs: Script chạy theo lịch với quyền root mà user thường có thể ghi
- Writable paths in PATH: Thư mục ghi được nằm trong PATH của root
- Users & Groups: Ai thuộc group docker, sudo, lxd, adm
- Credentials: File cấu hình chứa password plaintext, SSH key không bảo vệ
- Container checks: Đang trong Docker/LXC không, container escape có khả thi không
- Kernel exploits: Suggest exploit theo kernel version hiện tại
Đọc kết quả — đừng đọc từng dòng
Lọc thẳng vào phần nguy hiểm. Đọc từ đầu đến cuối chỉ mất thời gian:
# Lọc các dòng được đánh dấu 95% nguy hiểm
grep -a "95%" linpeas_output.txt
# Xem toàn bộ section SUID
grep -a -A 30 "SUID - Check" linpeas_output.txt
# Xem sudo rules
grep -a -A 20 "Sudo version" linpeas_output.txt
# Tìm cron job đáng ngờ
grep -a -A 20 "Cron jobs" linpeas_output.txt
Ba kết quả nguy hiểm thường gặp nhất
1. SUID bit trên binary không chuẩn:
# LinPEAS báo:
-rwsr-xr-x 1 root root 12345 Jan 1 00:00 /usr/local/bin/custom-tool
# Kiểm tra binary đó trên GTFOBins:
# https://gtfobins.github.io/
# Nếu có trong danh sách — đó là lỗ hổng cần vá ngay
2. Sudo rules quá rộng:
# Output nguy hiểm:
(ALL) NOPASSWD: /usr/bin/vim
(ALL) NOPASSWD: /usr/bin/python3
# Với vim, leo thang đặc quyền chỉ cần một lệnh:
sudo vim -c ':!/bin/bash'
# Với python3:
sudo python3 -c 'import os; os.system("/bin/bash")'
3. Cron job của root chạy script ghi được:
# LinPEAS phát hiện trong crontab:
* * * * * root /opt/maintenance/cleanup.sh
# Kiểm tra quyền file:
ls -la /opt/maintenance/cleanup.sh
# Nếu world-writable hoặc group-writable mà bạn thuộc group đó:
# → Inject lệnh vào script là đủ để chạy code với quyền root
Tùy chỉnh LinPEAS khi cần
Mặc định LinPEAS quét tất cả — mất khoảng 3–5 phút. Muốn nhanh hơn hoặc focus vào một vùng cụ thể, dùng các options sau:
# Chỉ kiểm tra network
./linpeas.sh -o network
# Chỉ kiểm tra processes và services
./linpeas.sh -o procs_crons_timers_srvcs_sockets
# Bỏ qua scan mạng (nhanh hơn, ít noise)
./linpeas.sh -s
# Chạy với timeout để tránh block quá lâu trên production
timeout 300 ./linpeas.sh 2>/dev/null | tee linpeas_output.txt
# Xem tất cả option có sẵn
./linpeas.sh -h
Trên server production, mình thường chạy với flag -s — bỏ qua scan mạng giúp nhanh hơn và giảm load trên hệ thống.
Chạy không để lại file trên đĩa
Trong pentesting hoặc khi cần giảm artifact, dùng cách này:
# Trên máy auditor — setup HTTP server tạm
python3 -m http.server 8080
# Trên server cần audit (script chạy trong RAM, không tạo file)
curl http://AUDITOR_IP:8080/linpeas.sh | bash 2>/dev/null | tee /dev/shm/result.txt
Những thứ mình học được sau nhiều lần dùng LinPEAS thực chiến
Chạy với quyền thấp, không phải root. LinPEAS cho kết quả thực tế nhất khi chạy bằng user thường — đúng như tình huống kẻ tấn công đã có shell và muốn leo lên root. Chạy với root thì output khác, kém hữu ích hơn nhiều.
# Switch sang user service account để test
su - webapp_user
./linpeas.sh 2>/dev/null | tee /tmp/linpeas_webapp.txt
Lưu output theo ngày, diff để phát hiện thay đổi bất thường. SUID file mới hoặc cron job lạ xuất hiện giữa hai lần chạy là dấu hiệu cần điều tra ngay:
# Đặt tên theo ngày
./linpeas.sh 2>/dev/null | tee "linpeas_$(date +%Y%m%d).txt"
# So sánh với lần trước
diff linpeas_20260601.txt linpeas_20260701.txt | grep "^[<>]" | head -50
Kernel exploit — cực kỳ thận trọng trên production. LinPEAS suggest kernel exploit theo kernel version. Trên CTF thì thoải mái thử. Còn trên production thật: đừng chạy. Kernel exploit có thể crash toàn bộ hệ thống. Ghi nhận kernel version lại, sau đó update lên bản có vá lỗi là đủ.
Tra GTFOBins ngay khi thấy SUID hoặc sudo rule lạ. Website gtfobins.github.io liệt kê cách khai thác từng binary Linux. Binary nào có tên trong đó mà server đang để SUID hoặc sudo NOPASSWD — fix ngay đêm nay, không để đến sáng.
Checklist xử lý sau khi có kết quả LinPEAS
- Remove SUID bit khỏi binary không cần thiết:
chmod u-s /path/to/binary - Tighten sudo rules — dùng đường dẫn tuyệt đối, giới hạn argument, bỏ NOPASSWD nếu không cần
- Kiểm tra và set quyền đúng cho mọi script được cron root gọi:
chmod 750, owner root - Audit group membership — remove user thường khỏi
docker,sudo,admnếu không dùng - Update kernel nếu có CVE nghiêm trọng đang bị suggest
- Tìm và mã hóa hoặc xóa credential plaintext trong file cấu hình
LinPEAS là công cụ tấn công — mục tiêu của nó là tìm mọi điểm yếu có thể khai thác. Dùng nó từ phía defense: chạy trước kẻ tấn công, tìm trước, vá trước. Sau vụ SSH brute-force năm đó, mình chạy LinPEAS định kỳ mỗi tháng trên toàn bộ server. Hiệu quả hơn nhiều so với ngồi chờ điện thoại rung lúc 2 giờ sáng.

