HomeOur Team
System operator: Những câu chuyện chưa từng được kể (Phần 1)
Others
System operator: Những câu chuyện chưa từng được kể (Phần 1)
minh.pham
minh.pham
March 31, 2021
5 min

Lời nói đầu

Đây là một câu chuyện hư cấu của tác giả và mang tính chất giải trí, trao đổi nhiều hơn. Lý do là không đặt chỉ tiêu viết bài vì không biết viết gì :(

1. Lý do

Như thường lệ, sáng check mail và mình thấy được mail của 1 cậu em đồng nghiệp forward cho một email cảnh báo từ AWS về 1 hành vì từ server của bên mình đang có những hành đồng khai thác trái phép (theo quy định của AWS) sang 1 cụm máy chủ khác của AWS . Sau 30 phút loay hoay mình mới vào được con server đang bị “WARNING” kia (tạm gọi là Server A) kết hợp với một số thông tin mà “thằng” em (gọi là thằng vì nó hay cà khịa mình) gửi cho:

  • SSH vào server rất chậm
  • CPU tăng cao do 1 vài tiến trình nào đó gây ra
  • Kèm thông tin mail cảnh báo từ AWS

P/s: lý do 30 phút mới vào được là phải đợi nó đi mua “Tê ra sua” cho người thương, xong mới cho mình tài khoản truy cập :)

2. Câu chuyện bắt đầu

Sau khi nhìn qua 1 lượt logs monitor thì mình thấy rằng CPU lên xuống rất nhịp nhàng theo 1 chu kỳ hình SIN rất đẹp, có vài thời điểm nó kéo dài ở tình trạng 100% khá lâu. OK, giờ vào server A, bật tiến trình đang hoạt động của OS lên xem nó đang chạy gì và cái gì gây ra chuyện này.

alt text
Image 1

Chúng ta thấy 1 vài command rất lạ đang chiếm đến 180% CPU (hình khoanh đỏ), xem chi tiết 1 chút nhé

alt text
Image 3

Như trong ảnh trên mình đã nhìn thấy rõ hơn việc tiền trình có tên là kthreaddi nghe qua thì nó không có gì đặc biệt nó giống với kthreadd (một tiến trình khác của OS), nhưng nó đang được inject trực tiếp vào php-fpm (1 container image của docker để phục vụ việc chạy mã PHP). Vậy là đã rõ nó là nguyên nhân gây ra những vấn đề trên, vậy câu hỏi tiếp theo là nó là cái gì, thử capture 1 process xem nó đang chạy cái gì

alt text
Image 4

Trong hình là 1 danh sách các chuỗi giao dịch, nhìn đám mã này mình nhớ ngay đến cách đây 3 năm đã gặp những mã kiểu này phục vụ cho việc tận dụng CPU của máy chủ để gửi mở những kết nối đến 1 máy chủ Miner Coin.

alt text
Image 5

Đi kiểm tra thêm chút nữa, thử attack vào 1 kthreaddi đang chạy xem có gì, nó là 1 dạng virus trojan khai thác dưới vỏ bọc là module sysrv trong Ảnh 1 ở trên. kthreaddi tạo ra ra ngẫu nhiên 1 tiến trình vào thư mục /tmp/ với tên ngẫu nhiên, sau đó chạy nó và nó được xóa ngay sau khi tiến trình đó thực thi xong, nên mình không thể nhìn thấy danh sách folder ngẫu nhiên đó trong thư mục /tmp.

Nó có dạng như thế này:

ls -l /proc/30005/exe
lrwxrwxrwx 1 root root 0 Mar 20 14:31 /proc/30005/exe -> /tmp/.JUUXPSyV/[kthreaddi] (deleted)

# ll /tmp/.JUUXPSyV
total 5652
-rwxr-xr-x 1 root root    2180 Mar 20 14:59 config.json
-rwxrwxrwx 1 root root 5781824 Mar 20 14:59 [kthreaddi]

Vậy là đã rõ server A này đang bị attack và attacker đã chiếm được quyền máy chủ để thực hiện hành vi đào coin. Vậy câu hỏi đặt ra là attacker đã vào bằng cách nào và làm như thế nào ? Và dưới đây là 1 số thứ mình tìm thấy và kèm 1 vài giả thiết dưới đây.

3: Gót chân achilles

Sau khi kiểm tra toàn bộ từ server, dịch vụ và code thì có 1 số thứ mình sẽ notes phía dưới đây

3.1 Cổng kết nối

Tất cả các cổng mà dịch vụ đều mở và có thể được truy cập từ bên ngoài: php-fpm(8000), redis (6379), mysql (3306) => đây là những port của dịch vụ chạy trong mạng LAN với nhau và có mức độ bảo mật rất thấp, dễ bị khai thác, nên nếu không cần thiết thì không được mở, hoặc nếu có mở thì phải đặt một lớp xác thực phía trước các dịch vụ này.

3.2 Laravel Enable Debug Model

Một sai lầm tai hại là Laravel chạy ở môi trường production lại để chế độ Debug Model Enable. Điều này có nghĩa khi có lỗi dịch vụ nó sẽ hiển thị hết những thông tin cấu hình của dịch vụ và ai cũng có thể đọc được + với các cổng dịch vụ mở thì có thể kết nối thằng vào dịch vụ đó (ví dụ là mysql, khi đã nhìn thấy thông tin kết nối database), Chưa dừng lại ở đó, nó còn gây ra môi nguy hiểm khác (sẽ nói ở phần bên dưới) (2.5)

3.3 Toàn bộ folder chưa source code đều xét full quyền đọc/ghi thoải mái

Điều cơ bản thứ 2 cần lưu ý trên máy chủ là không được cấp quyền đọc ghi bừa bãi như trường hợp này, mọi thao tá đọc/ghi thoải mái và không bị kiểm soát

alt text
Image 6

3.4 Sử dụng docker images Adminer có dính lỗi CVE

CVE là gì, giải thích qua 1 chút.

  • CVE (Common Vulnerabilities and Exposures) là 1 chương trình được khởi xướng vào năm 1999 bởi MITRE. Mục đích của chương trình này là phân loại và nhận dạng những lỗ hổng về phần cứng hoặc phần mềm, tập hợp thành 1 hệ thống mở để chuẩn hóa qui trình xác thực các lỗ hổng đã được biết. Những lỗ hổng này có thể dẫn đến các vụ tấn công an ninh mạng dưới các hình thức như chiếm quyền điều khiển hệ thống mục tiêu, đọc các dữ liệu quan trọng của người dùng như địa chỉ, số điện thoại, mã thẻ ngân hàng.
  • Như vậy, có thể coi CVE như 1 cơ sở dữ liệu về các lỗ hổng bảo mật, tạo thuận lợi cho việc đối chiếu thông tin giữa các công cụ và dịch vụ bảo mật khác nhau. Danh sách CVE chứa số ID, thông báo trạng thái, mô tả ngắn gọn và tài liệu tham khảo liên quan đến lỗ hổng bảo mật. Bằng việc tham chiếu CVE ID của 1 lỗ hổng nhất định, các tổ chức có thể thu thập thông tin nhanh gọn và chính xác từ nhiều nguồn tin khác nhau.
  • Site đang chạy đã sử dụng 1 docker images có tên là Adminer

alt text
Image 7

Có 2 vấn đề của việc này:

  • 1 không được sử dụng 1 trình truy cập database như trên mà không thông báo cho bên quản trị, trong khi không có 1 hình thức xác thực bảo vệ truy cập bằng mật khẩu vào phần giao diện này
  • 2 tại thời điểm chạy image này nó bị dính lỗi: CVE-2020-35186, lý do mình check cái images này là lúc đó mình thử show access logs vào cái adminer này thì thấy rất nhiều truy cập từ các site xuất phát từ Trung quốc

3.5 Lỗ hổng CVE-2021-3129 Laravel Debug RCE Ignition<2.5.2

Cuối cùng đây là cái mình đã nói ở phía trên, Laravel <= v8.4.2 debug mode, Remote code execution chiếm quyền điều khiển máy chủ, mã CVE-2017-9841

Chi tiết thế nào bạn có thể đọc cụ thể ở đây

4. Hồi kết

Ai xem avengers hồi kết cũng biết rồi đấy, búng tay 1 cái là xóa server đi cài lại thôi :D

Cảm ơn các bạn đã kiên nhẫn đọc hết bài, trong bài có sử dụng 1 số thuật ngữ:

  • OS: Hệ điều hành
  • AWS: 1 dịch vụ máy chủ trên Cloud
  • attack: việc 1 dịch vụ hay tệp tin gì đó bị xâm nhập và thư thi 1 số lệnh khác chạy song song
  • attacker: những người thực hiện những việc attack :D
  • LAN: mạng kết nối nối nội bộ

*) Thanks !


Tags

202103operatorsystemsecurity
minh.pham

minh.pham

Developer

Related Posts

Dãy số Fibonacci
[Code Vui] Fibonacci và những cách tính biểu thức?
March 25, 2021
2 min
Why Protocol-Oriented Programming?
Articles
Why Protocol-Oriented Programming?
March 31, 2021
2 min
Nâng cao bảo mật ứng dụng bằng Android NDK
Tips / Tricks
Nâng cao bảo mật ứng dụng bằng Android NDK
March 26, 2021
4 min
© 2021, All Rights Reserved.

Quick Links

HomeOur Team

Social Media