Tuesday, July 17, 2007

Truy tìm thủ phạm (2)

Tui hoang mang vì một lẽ con đường khả dĩ nhất đi vào server, phù hợp nhất với những giả định và lập luận của tui không phải là con đường mà kẻ xâm nhập đã chọn. Điều làm tui lo lắng nhất chính là khả năng kẻ xâm nhập là một tay cao thủ và hắn đang chơi trò "mèo vờn chuột". Đối mặt với một tay có khả năng "lai vô ảnh, khứ vô hình" là một điều thú vị nhưng tui e rằng mình vẫn chưa đủ "cao tay ấn" để mà "chơi" với hắn. Khi đó điều tệ hại nhất không phải là không xác định được ai là thủ phạm mà là xác định nhầm đối tượng.

Thật sự từ khi bắt đầu điều tra, mặc dù tui luôn giả định kẻ xâm nhập là một tay mơ nhưng thú thật tui chưa bao giờ tin tưởng tuyệt đối những gì mà mình thấy trên server. Trong đầu tui tồn tại hai tư tưởng: a) cứ phân tích dựa theo những gì mình thấy để nhanh chóng tìm ra thủ phạm; b) paranoid, paranoid, paranoid, thủ phạm đang lừa mình vô tròng đó! Vì nôn nóng và hiếu thắng nhất thời, tui đã chọn cách làm thứ nhất để rồi lâm vào tình trạng bế tắc. Phải paranoid! Tui đã được "dạy dỗ" như vậy từ khi mới chân ướt chân ráo mày mò học bảo mật.

Tui bắt đầu rà soát lại điểm mấu chốt trong lập luận của mình. Nhắc lại, vì file index.html có permission mode là 0644 với owner và group là hippie/hippie mà user hippie lại không có quyền shell nên tui đã suy ra rằng chỉ có hai hướng để kẻ xâm nhập thay đổi file này: a) chiếm được quyền root trên server; b) lấy được password user hippie rồi thông qua ftp để upload file lên ghi đè file index.html. Như mọi người đã thấy ở phần 1, giả thuyết b) mà tui đưa ra (và hết sức tin tưởng) đã hoàn toàn phá sản. Như vậy chỉ còn lại khả năng kẻ xâm nhập đã chiếm được quyền root trên server.

Có thể đơn giản bằng cách nào đó (cài keylogger trên máy tính ở Thụy Du chẳng hạn), kẻ xâm nhập chôm được mật khẩu root của server, hoặc phức tạp hơn, hắn khai thác một lỗi bảo mật nào đó trong cái đám service đang chạy hoặc trong chính cái kernel mà server đang sử dụng. Bằng cách nào đi chăng nữa thì việc kẻ tấn công chiếm được quyền root là hết sức nguy hiểm. Có thể ngay lúc này đây, thông qua một con rookit -5- nào đó, hắn đang ung dung theo dõi những bước điều tra của tui từ đầu đến giờ và cười sảng khoái khi thấy tui lâm vào đường cùng. Tui thót giật mình khi nghĩ đến điều rất-có-khả-năng-là-sự-thật này :-((! Tui nhanh chóng download, cài đặt và chạy bộ công cụ chkrootkit. Chẳng có rootkit nào được phát hiện trên server. Một câu hỏi được đặt ra, liệu kết quả này có đáng tin hay không? Ai biết được kẻ cao thủ mà tui đang đối mặt đã có kế hoạch ứng phó với chkrootkit từ trước hay không? Nói như vậy không có nghĩa là chkrootkit hoàn toàn vô dụng, ít nhất nó cho tui biết khả năng mà kẻ xâm nhập là một "đại cao thủ" là cực thấp.

Có rất nhiều loại attacker, thượng vàng hạ cám đều có đủ. Loại attacker có khả năng chiếm quyền root trên server rồi cài đặt rootkit có sẵn lên đó thì nhiều, nhưng loại attacker có khả năng đánh lừa cả chkrootkit thì tui cho là rất ít. Cộng thêm yếu tố là người VN và hành động deface nữa thì chắc chẳng còn ai. "OK, cứ tạm tin tưởng vào kết quả chkrootkit đi xem sao", tui tự nhủ.

Như vậy trên server không có rookit, và chkrootkit cũng thông báo cho tui biết là lastlog -6- và wtmp -7- chưa hề bị chỉnh sửa. Như vậy có thể tạm tin vào thông tin từ lệnh last mà tui đã chạy ở trên. Tui thử chạy tiếp:
# lastlog
root pts/0 223.231.66.125 Tue Mar 21 07:22:23 -0700 2006
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
dbus **Never logged in**
vcsa **Never logged in**
rpm **Never logged in**
haldaemon **Never logged in**
netdump **Never logged in**
nscd **Never logged in**
sshd **Never logged in**
ntp **Never logged in**
apache **Never logged in**
named **Never logged in**
webalizer **Never logged in**
cpanel **Never logged in**
mailman **Never logged in**
mysql **Never logged in**
yeahlap pts/0 58.186.121.22 Mon Mar 20 00:37:55 -0700 2006
hippie **Never logged in**
clamav pts/1 58.186.41.101 Thu Feb 16 20:29:59 -0700 2006
Như vậy có thể thấy chỉ có 3 user từng ssh vào server là root, yeahlap và clamav. Tui nhanh chóng kiểm tra user clamav
# cat /etc/passwd | grep clamav
clamav:x:32003:504::/usr/local/clamav:/bin/false
Chà lạ nhỉ, user clamav này chẳng có shell mà sao lastlog lại thông báo là nó đã login vào server lúc Thu Feb 16 20:29:59 -0700 2006? User clamav chắc hẳn dùng để chạy ClamAV, phần mềm GPL chống virus trên mail server rất nổi tiếng. Mail server được sử dụng trên server là Exim, chắc thằng này đi kèm với Cpanel. Tui đoán không sai, có cả SpamAssassin để chống spam nữa. Hiện tại trên server đang chạy clamd daemon, nó chẳng listen trên tcp/ip socket nào mà sử dụng unix domain socket nằm ở /var/clamd. Thằng ClamAV này được cài đặt từ source, do đó một giả thuyết được đặt ra là tay Administrator lúc tạo user clamav đã cho user này một cái shell, một cái password (vẫn còn nằm trong /etc/shadow). Sau khi đã hoàn thành việc cài đặt, tay Admin mới bỏ cái shell đó đi, và disable luôn cái account bằng lệnh passwd -l clamav (bằng chứng là field chứa password trong /etc/shadow có kí tự "!" đứng đầu). Chắc hẳn tay Administrator làm theo một cái HOWTO nào đó. Có thể tạm tin tưởng là vậy bởi thời điểm 16/02/2006, bạn tui vẫn chưa tiếp nhận server này. Bạn tui cho hay anh ấy order server này hồi đầu tháng 02/2006 và đến khoảng 20/02/2006 thì bên công ti hosting mới setup xong và giao server lại cho anh.

Như vậy chỉ còn 2 user là root và yeahlap đã từng truy cập vào server. Thông tin output của lastlog cũng rất phù hợp với output của last. Shell của yeahlap:
# cat /etc/passwd | grep yeahlap
lapyeah:x:32004:505::/home/yeahlap:/usr/local/cpanel/bin/jailshell
Jailshell hưh? Search một vòng trên Google thì thấy như vầy:
Jailshell is a very limited shell that allows clients to logon to your server via SSH. It limits them to their home directories, keeping the rest of your files on your server from being viewed. Use caution when giving users shell accounts on your server, as it's likely possible to breakout of the jailshell.
Đọc cái dòng "it's likely possible to breakout of the jailshell" nghe thấy ớn quá. Như vậy cũng có khả năng kẻ xâm nhập chôm được mật khẩu yeahlap từ cafe Thụy Du, login vào server qua ssh, rồi "breakout of the jailshell", tiếp theo là get root, và deface.

Tui tổng kết lại các khả năng có thể xảy ra:

a) chôm mật khẩu root, login vào server rồi deface

b) chôm mật khẩu yeahlap, login vào server, break out of jailshell, get root rồi deface.

c) khai thác một lỗi nào đó trong các service chạy trên server hoặc ngay chính cái kernel đang được sử dụng, get root rồi deface

Còn gì nữa không ta? Tui chợt nhớ đến scp và sftp -8-. Số là tui không có cảm tình với ftp, nên mặc dù trên server có ftp service nhưng do thói quen, tui sử dụng scp để chép một số file log về desktop để tiện tìm hiểu và chợt nhật ra một thiếu sót là kẻ tấn công vẫn còn một hướng khác:

d) chôm mật khẩu root, sử dụng scp ghi đè lên file index.html để deface.

Đây chỉ là 4 trong số rất nhiều khả năng khác có thể xảy ra, tui tự nhủ.

(còn tiếp)

Bật mí kì cuối: chu choa ơi, thằng attacker nó chẳng sử dụng cái cách nào trong 4 cách trên hết. Ai đó thử đoán xem nó làm thế nào để deface mà: không có quyền root và user hippie không có shell?

---chú thích---

-5-: rootkit là thuật ngữ dùng để chỉ những phần mềm giúp kẻ xâm nhập che dấu tung tích của hắn khi "ẩn mình" trong một hệ thống máy tính nào đó. Tham khảo thêm http://en.wikipedia.org/wiki/Rootkit

-6-: tham khảo "man lastlog"

-7-: tham khảo "man last"

-8-: sftp là một phần của bộ giao thức ssh, giúp truyền file một cách an toàn bằng cách mã hoá dữ liệu truyền đi trên mạng. Tham khảo "man scp"

3 comments:

Anonymous said...

chkrootkit is the most stupid and userless tool I have ever seen. It is way too easy to defeat it, if you understand how it works. Besides, it can be easily fucked by a kernel rootkit. So never rely on it, my boy :-)

saylinux said...

Hic hic sao không viết nữa.
Mà tại sao IP của user clamav lại của FPT vậy?

ThangNM said...

Mong chờ phần tiếp theo của Thái, mặc dù bài viết đã vài năm rồi nhưng vẫn đón chờ phần kết.