Log là một dữ liệu quan trọng trong ngành Công nghệ Thông tin cũng như trong lĩnh vực điều tra số, pháp y kỹ thuật số. Hầu như tất cả dấu vết của một cuộc tấn công đều được lưu trong log.
Log Mining hay Log Forensics là thuật ngữ để chỉ về một cuộc điều tra dựa trên Log. Mặc dù chứa rất nhiều thông tin có ích, nhưng việc phân tích Log lại không hề đơn giản. Dữ liệu lớn, nhiều file riêng lẻ, mỗi loại có một cấu trúc khác nhau và có thể bị xóa, sửa đổi là những bất lợi khi làm việc với Log.
Việc phân tích Log có thể sử dụng một số công cụ như:
- Apache Log Viewer (chuyên dùng phân tích log Apache)
- Log Parse (chuyên dùng phân tích các loại log của Microsoft như IIS, NCSA...)
- Logwatch (monitor log trên linux)
- Web Log Expert
- Splunk (monitor, phân tích big data, các log dung lượng lớn, mất phí)
- và một số công cụ khác....
Ngoài ra notepad hay các script tự viết cũng là những công cụ hữu ích để đọc log.
Case-Study: Một máy chủ linux bị nghi ngờ xâm nhập, toàn bộ log đã được backup ra tại đây. Chúng ta sẽ cùng tìm hiểu chi tiết về cuộc tấn công này.
Toàn bộ log ở đây đều trên linux, để hiểu hơn về các loại log trong môi trường này bạn nên xem qua ở đây:
1. Hệ thống có dấu hiệu bị xâm nhập không? Và nếu có thì phương pháp tấn công là gì?
Kiểm tra file auth.log(đây là log xác thực của hệ thống trên linux, có thể tìm thấy tại /var/log/auth.log), chúng ta sẽ thấy sự bất thường:
Apr 19 05:26:04 app-1 sshd[7369]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.17.30.49 user=root
Apr 19 05:26:06 app-1 sshd[7369]: Failed password for root from 58.17.30.49 port 53236 ssh2
Apr 19 05:26:08 app-1 sshd[7371]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.17.30.49 user=root
Apr 19 05:26:10 app-1 sshd[7371]: Failed password for root from 58.17.30.49 port 53453 ssh2
Apr 19 05:26:12 app-1 sshd[7373]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.17.30.49 user=root
Apr 19 05:26:15 app-1 sshd[7373]: Failed password for root from 58.17.30.49 port 53655 ssh2
Apr 19 05:26:17 app-1 sshd[7375]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.17.30.49 user=root
Trong 1 giây có hàng loạt request yêu cầu đăng nhập bị thất bại, chứng tỏ kẻ tấn công đang tìm cách “đoán”(bruteforce) mật khẩu để đăng nhập hệ thống thông qua SSH.
2. Có bao nhiêu IP thực hiện tấn công? Bao nhiêu trong đó tấn công thành công?
Khoanh vùng các IP thực hiện việc brute force phía trên, có thể xác định được 28 IP tấn công tất cả, trong đó có 6 IP đã brute force thành công.
Apr 19 05:42:27 app-1 sshd[9031]: Accepted password for root from 219.150.161.20 port 40877 ssh2
Apr 19 10:45:36 app-1 sshd[28030]: Accepted password for root from 222.66.204.246 port 48208 ssh2
Apr 19 22:37:24 app-1 sshd[2012]: Accepted password for root from 190.166.87.164 port 50753 ssh2
Lưu ý: Thông tin trên chỉ là liệt kê một phần của log.
Danh sách các IP đã brute force thành công:
- 219.150.161.20
- 222.66.204.246
- 121.11.66.70
- 222.169.224.197
- 122.226.202.12
- 61.168.227.12
Một điểm khá thú vị là 2 IP 121.11.66.70 và 222.66.204.246 vẫn thực hiện brute force sau khi đã attack thành công. Công việc phân tích này có thể đơn giản hóa bằng cách viết các script để thực hiện một cách tự động.
3. Chuyện gì xảy ra sau khi hệ thống bị xâm nhập?
Thời điểm đầu tiên mà log ghi nhận sự xâm nhập thành công là vào Apr 19 05:41:44 từ địa chỉ 219.150.161.20. Quan sát các đoạn log khác từ sau thời điểm này, chúng ta thấy:
- Từ auth.log, có một số user được tạo mới như packet, dhg, messagebus, fido, wind3str0y. Search log với từ khóa useradd để thấy kết quả
- Ứng dụng được cài thêm như nmap, psybnc, eggdrop, exim mail... Cái này kiểm tra qua log apt và dpkg, đây là nơi ghi lại log cài, setting ứng dụng.
- Mở cổng inbound 2424, 53, 113. Xem ở auth.log
Apr 24 20:03:06 app-1 sudo: root : TTY=pts/2 ; PWD=/etc ; USER=root ; COMMAND=/sbin/iptables -A INPUT -p ssh -dport 2424 -j ACCEPT
Apr 24 20:03:44 app-1 sudo: root : TTY=pts/2 ; PWD=/etc ; USER=root ; COMMAND=/sbin/iptables -A INPUT -p tcp -dport 53 -j ACCEPT
Apr 24 20:04:13 app-1 sudo: root : TTY=pts/2 ; PWD=/etc ; USER=root ; COMMAND=/sbin/iptables -A INPUT -p udp -dport 53 -j ACCEPT
Apr 24 20:06:22 app-1 sudo: root : TTY=pts/2 ; PWD=/etc ; USER=root ; COMMAND=/sbin/iptables -A INPUT -p tcp --dport ssh -j ACCEPT
Apr 24 20:11:00 app-1 sudo: root : TTY=pts/2 ; PWD=/etc ; USER=root ; COMMAND=/sbin/iptables -A INPUT -p tcp --dport 53 -j ACCEPT
Apr 24 20:11:08 app-1 sudo: root : TTY=pts/2 ; PWD=/etc ; USER=root ; COMMAND=/sbin/iptables -A INPUT -p tcp --dport 113 -j ACCEPT
4. Server này còn có những vấn đề gì khác?
- Rõ ràng là SSH cho phép truy cập tài khoản root, mật khẩu yếu dẫn đến việc bị bruteforce
- Từ daemon.log thấy:
Mar 18 10:18:42 app-1 /etc/mysql/debian-start[7566]: WARNING: mysql.user contains 2 root accounts without password!
2 tài khoản root không đặt mật khẩu, Đây rõ ràng là một vấn đề an ninh nghiêm trọng, do lỗi cấu hình của quản trị viên.
- Log access của web cho thấy có 1 số request nhờ server thành 1 proxy, nhưng đã bị chặn:
221.192.199.35 - - [19/Apr/2010:09:23:37 -0700] "GET http://www.wantsfly.com/prx2.php?hash=FABB83E72D135F1018046CC4005088B36F8D0BEDCEA7 HTTP/1.0" 404 1466 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" YhL5XgoAAQ4AAEP2EQcAAAAC 11250471
Như vậy, bằng cách điều tra log, hay còn gọi là Log Mining, chúng ta đã phát hiện ra khá nhiều vấn đề của máy chủ Linux trong case study trên. Hy vọng rằng bài viết này mang lại kiến thức bổ ích cho các bạn. Trong phần tiếp theo, chúng ta sẽ tìm hiểu về Memories Forensics.