Thứ Bảy

Dùng các lệnh của Windows để kiểm tra (sự toàn vẹn của) hệ thống khi (nghi ngờ) hệ thống bị tấn công

Mỗi người dùng máy tính đều phải đối mặt với vấn đề những máy chạy Windows bị tấn công. Và trong một số môi trường, thì điều này xảy ra rất thường.

May thay, Microsoft đã xây dựng một loạt các công cụ trong Windows để các nhà quản trị cũng như người dùng có kinh nghiệm có thể phân tích chiếc máy tính của mình xem liệu nó có đang bị xâm phạm hay không. Trong hướng dẫn thủ thuật này- bao gồm 2 phần, tác giả bài viết sẽ giới thiệu năm công cụ dòng lệnh hữu ích được tích hợp (build-in) trong Windows cho mục đích này.
1) WMIC: Một thế giới mạo hiểm đang chờ 

Nó đưa ra một giao diện dòng lệnh cho Windows Management Instrumentation API cực mạnh mẽ bên trong Windows. WMIC cho phép người dùng quản trị truy cập tất cả các loại thông tin chi tiết về máy tính chạy Windows, bao gồm chi tiết các thuộc tính của hàng ngàn thiết lập và đối tượng. WMIC được tích hợp trong Windows XP Professional, Windows 2003 and Windows Vista. Để sử dụng WMIC, người dùng cần kích hoạt nó bằng cách chạy lệnh WMIC với tham số là lĩnh vực của máy mà người dùng quan tâm tìm hiểu ( thường được tham chiếu như một tên tắt trong hệ thống) Ví dụ, để biết về các tiến trình đang chạy trên máy, người dùng có thể chạy:

C:\> wmic process 

Đầu ra của lệnh này có vẻ sẽ rất kinh khủng vì format đầu ra đã không được chỉ ra. Với WMIC, đầu ra có thể được định dạng theo vài cách, tuy nhiên 2 trong số những định dạng hữu dụng nhất cho việc phân tích khả năng hệ thống bị tấn công là lựa chọn “list full” , chỉ ra một lượng lớn các chi tiết cho mỗi lĩnh vực của máy tính mà người dùng quan tâm và lựa chọn “list brief” , cung cấp một hàng tin cho một mục báo cáo trong danh sách các thực thể, chẳng hạn như các tiến trình đang chạy, các phần mềm tự khởi động và các chia sẽ đang có.
Ví dụ, chúng ta có thể coi một tổng kết các tiến trình đang chạy trên máy bằng cách gõ vào:

C:\> wmic process list brief 

Lệnh này sẽ chỉ ra tên, ID của tiến trình và độ ưu tiên của mỗi tiến trình đang chạy, cũng như các thuộc tính khác ít quan trọng hơn. Để có thông tin chi tiết hơn, ta nhập lệnh:

C:\> wmic process list full 

Lệnh này xuất ra toàn bộ các chi tiết , gồm đường dẫn đầy đủ của mã thực thi liên quan tới các tiến trình và tham số của chúng. Khi điều tra để tìm sự lây nhiễm của máy tính, người quản trị cần xem xét từng tiến trình để xác định xem liệu chúng có sử dụng máy một cách hợp pháp, tìm kiếm các tiến trình không được mong chờ và không được biết đến bằng cách áp dụng các cổ máy tìm kiếm.
Ngoài các tên tắt của các tiến trình, người dùng có thể xem xét quá trình khởi động để có được danh sách các phần mềm tự khởi động , bao gồm các phần mềm được khởi động trong quá trình hệ thống boot up, được xác định bởi các khóa hay thư mục auto-start registry.

C:\> wmic process list full 

Phần lớn các malware tự chạy trên máy bằng cách thêm một dòng tự khởi động cùng với các phần mềm hợp lệ khác, có thể thuộc các công cụ antivirus và các chương trình khác trên khay hệ thống. Người dùng có thể xem các thiết lập khác trên máy với dòng lệnh WMIC bằng cách thay thế “startup” bởi “QFE” (viết tắt của “Kỹ Thuật Sửa chữa Nhanh” - Quick Fix Engineering) để thấy được mức độ được Vá (Patch) của hệ thống, với tùy chọn “share” để xem danh sách các tệp chia sẻ có trên máy và với “useraccount” để xem chi tiết vể thiết lập tài khoản người dùng.
Một sự lựa chọn rất tiện dụng của WMIC là khả năng chạy lệnh thu thập thông tin trên cơ sở lặp lại bằng cách sử dụng cú pháp “ /every:[N]” ở cuối cùng của dòng lệnh WMIC. [N] ở đây là số nguyên, chỉ ra rằng WMIC sẽ phải thực thi lệnh được chỉ định cứ mỗi [N] giây. Bằng cách này, người dùng có thể thấy sự thay đổi trong các thiết lập của hệ thống theo thời gian, cho phép kiểm soát kỹ lưỡng đầu ra. Để sử dụng chức năng này nhằm đánh giá các process cứ sau 5 giây, người dùng cần chạy dòng lệnh:

C:\> wmic process list brief /every:5 

Nhấn tổ hợp CTRL+C sẽ ngưng chu trình này.

2) Lệnh net: cũ nhưng tốt

Trong khi WMIC là lệnh tương đối mới , chúng ta cũng không quên một số lệnh cũ hữu ích. Một trong những lệnh rất được ưa chuộng là “net”. Người quản trị có thể dùng lệnh này để hiển thị toàn bộ các kiểu thông tin hữu ích.
Ví dụ, lệnh “net user” chỉ ra toàn bộ các tài khoản người dùng được xác định trên máy. Lệnh "net localgroup" sẽ chỉ ra các nhóm (groups), lệnh "net localgroup administrators" sẽ chỉ ra các thành viên quản trị của Nhóm và lệnh “net start” cho ta xem các dịch vụ đang chạy.
Những kẻ tấn công thường thêm users vào hệ thống hoặc chèn tài khoản riêng của chúng vào Nhóm Quản trị (administrators groups) , vậy nên việc kiểm tra đầu ra của dòng lệnh này là ý tưởng hay để xem kẻ tấn công có can thiệp vào các tài khoản người dùng trên máy không. Những kẻ tấn công cũng có thể tạo các dịch vụ độc hại trên máy, vậy nên người dùng cũng cần kiểm soát được khả năng này.

3)Openfiles: Cái nhìn sâu xa

Có nhiều quản trị Windows không biết sức mạnh của lệnh openfiles có trong Windows. Như tên gọi của mình, lệnh này đưa ra toàn bộ những files đang được mở, chỉ ra tên những process đang tương tác với mỗi file. Lệnh này được xây dựng trong các phiên bản Windows mới , từ XP Pro tới Vista. Tương tự như lệnh lsof rất phổ biến trong Linux và Unix, nó sẽ đưa ra toàn bộ các tệp đang mở trên máy, chỉ ra tên các process và đường dẫn đầy đủ tới mổi file. Tuy nhiên điểm khác với lệnh lsof là nó không cung cấp nhiều chi tiết hơn, như số hiệu process ID, số hiệu người dùng ( user number) và những thông tin khác.
Xét trên số lượng thông tin mà lệnh này thu thập, có thể thấy lệnh openfiles là một gánh nặng năng suất. Bởi thế nên tài khoản liên quan với openfiles bị tắt theo mặc định, nghĩa là người dùng không thể lôi được bất kỳ thông tin gì từ lệnh này cho tới khi nó được mở. Chức năng này có thể được kích hoạt bằng cách sau:

C:\> openfiles /local on 

Người dùng sẽ cần phải khởi động lại máy, khi có lại hệ thống, ta có thể chạy lệnh openfiles như sau:

C:\> openfiles /query /v 

Lệnh này sẽ trưng ra một đầu ra dài dòng, bao gồm tài khoản người dùng mà mỗi tiến trình (process) cùng với file đang mở mà nó chạy ở dưới. Để có thể hình dung malware đã được cài đặt như thế nào, hoặc giả kẻ tấn công có thể làm gì trên hệ thống, người dùng cần tìm những file không bình thường hoặc không mong đợi, đặc biệt những file có liên quan với những người dùng bất thường trên máy.
Khi lệnh openfiles kết thúc, chức năng tài khoản của nó sẽ được tự tắt và hệ thống sẽ trở lại năng xuất bình thường bằng cách chạy lệnh tiếp theo và khởi động lại.

C:\> openfiles /local off 

4) Netstat: Cho tôi xem hệ thống mạng 

Bởi malware thường giao tiếp thông qua mạng, nên người dùng có thể tìm các kết nối không bình thường và không được mong chờ trên đầu ra của netstat, chạy như sau:

C:\> netstat -nao 

Tham số tùy chọn –n chỉ cho netstat hiển thị số của máy tính, thay vì hiển thị tên máy và giao thức, và thay vì chỉ ra địa chỉ IP và số hiệu cổng TCP hoặc UDP. Tùy chọn –a để hiển thị toàn bộ các kết nối và các ports đang lắng nghe. Tùy chọn –o khi ta cần netsat hiển thị số hiệu processID của mỗi chương trình đang giao tiếp với cổng TCP hay UDP. Nếu như, thay vì TCP và UDP, bạn quan tâm ICMP, thì hãy chạy netstat như sau:

C:\> netstat –s –p icmp

Dòng lệnh sẽ trả về thống kê (-s) của giao thức ICMP Tuy không được chi tiết như đầu ra của TCP và UDP, người dùng có thể thấy liệu máy có đang gửi ICMP traffic thông thường hay bất thường lên mạng. Một số backdoors và malware giao tiếp bằng cách sử dụng tải trọng của các thông điệp ICMP Echo, tương tự như những gói ping thông thường vẫn thấy trên phần lớn các hệ thống mạng.
Giống như WMIC, netstat cũng cho phép ta chạy nó cứ mỗi N giây. Tuy nhiên, thay vì sử dụng syntax của WMIC là "/every:[N]", ta chỉ cần thêm vào cuối cùng của dòng lệnh netstat dấu cách và một số nguyên. Như vậy để list ra các cổng TCP và UDP đang mở trên máy cứ mỗi 2 giây, ta nhập lệnh:

C:\> netstat –na 2 

5) Find: Tìmcác thứ hay ho ở đầu ra (kết xuất)

Phần lớn các lệnh thảo luận ở đây cho tới giờ đều cho ra rất nhiều thông tin đầu ra, có thể khó cho ta khi cần xem và tìm thứ mình quan tâm.Tuy nhiên, Windows sẽ giúp ta. Người dùng có thể tìm trên đầu ra của lệnh bằng cách sử dụng các lệnh bên trong Windows là find và findstr. Lệnh find sẽ tìm trên một chuỗi đơn, trong khi findstr hỗ trợ tìm các regular expressions, một cách thức phức tạp hơn để chỉ ra các mẫu tìm kiếm. Do vì regular expressions được hỗ trợ bởi findstr nằm ngoài khuôn khổ bài này nên ta sẽ chỉ tập trung vào lệnh find. Mặc định, find là lệnh có phân biệt chữ in hoa và thường – ta dùng tùy chọn /i để làm cho nó không phân biệt chữ thường hay hoa nữa. 

Lệnh find cũng có khả năng đếm. Khi lệnh được kích hoạt với /c , nó sẽ đếm số hàng của đầu ra mà chuỗi cho trước có. Người dùng thường muốn đếm số lượng các hàng có trong đầu ra của lệnh để xác định có bao nhiêu tiến trình đang chạy, có bao nhiêu chương trình được khởi động từ đầu, hoặc vài thứ hay khác trên máy. Để đếm số hàng của đầu ra, ta chỉ cần pipe đầu ra của nó thông qua find /c /v”” Lệnh này sẽ đếm số lượng (/c) hàng không có hàng trống (blank line) (“”) trong nó. Bằng cách đếm số lượng các hàng không trống, lệnh này thực chất là đã đếm số lượng hàng. 


Vậy là với lệnh find, ta có thể xét toàn bộ đầu ra của mỗi lệnh mà chúng ta đã xét ở trên để có thể tìm ra gì đó hay ho. Ví dụ, để xem thông tin về tiến trình lệnh cmd.exe cứ sau mỗi giây trên máy, ta đánh:

C:\> wmic process list brief /every:1 | find "cmd.exe" 

Hoặc, để xem xem chương trình tự khởi động nào liên quan registry hive HKLM, ta chạy:

C:\> wmic startup list brief | find /i "hklm" 

Để đếm số các tệp đang mở trên máy mà tài khoản lệnh openfiles đang được kích hoạt, ta đánh:

C:\> openfiles /query /v | find /c /v ""

Cứ khi nào đếm các mục theo kiểu này, ta nhớ trừ đi số hàng liên quan với đầu cột (column headers).
Và với ví dụ cuối cùng, ta sẽ cùng xem với độ chính xác 1 giây khi nào trạng thái cổng TCP 2222 bắt đầu được sử dụng trên máy, cùng với processID sử dụng cổng. Ta chạy:

C:\> netstat –nao 1 | find "2222" 

Nghiên cứu đầu ra:

Với 5 công cụ này, người dùng có thể thu được lượng lớn thông tin về cấu hình và tình trạng an toàn của máy chạy Windows. Để sử dụng từng lệnh trong việc phát hiện sự xâm phạm thì người dùng tuy nhiên sẽ phải so sánh các thiết lập hiện thời của máy dưới sự phân tích là trạng thái “bình thường”, của máy không bị nhiễm bệnh. 

Có ba lựa chọn để thiết lập ranh giới so sánh căn bản. Thứ nhất, nếu người dùng là người có kinh nghiệm săn lùng malware, anh hay cô ta sẽ có linh cảm với những gì là đúng hay sai đối với mỗi kiểu máy, và sẽ phát hiện malware hay chỉ là sự cố bất thường dựa trên kinh nghiệm cá nhân. Một cách khác, so sánh kết quả thực hiện lệnh có thể được thực hiện đối với một máy sạch, không bị nhiễm nếu ta sẵn có. 

Còn nếu không có, người dùng có thể phải viện đến lựa chọn thứ ba – nghiên cứu các files, các tên process, các tên file đặc trưng và các số hiệu cổng được xác định bởi lệnh này và tìm kiếm thông tin về chúng trên Internet để xác định xem chúng có là bình thường đối với một hệ thống phần cứng và phần mềm được cài trên đó, hay là liệu chúng có liên quan với một loại malware nào đó.
Trong bài này, chúng ta đã xem xét năm lệnh bên trong rất mạnh mẽ của Windows. Ở bài tới, cúng ta sẽ xét nốt cho đủ 10 danh mục bằng cách xem xét các tính năng ít được biết đến nhưng hết sức hữu ích của các lệnh tasklist, reg và ipconfig , và không kém thú vị là vòng lặp FOR cũng như việc chạy giao diện quản trị GUIs thông qua dòng lệnh.

Về tác giả: 
Ed Skoudis là một giảng viên của tổ chức SANS và là nhà sáng lập, tư vấn cao cấp về an toàn thông tin của Intelguardians, một công ty về An toàn thông tin có trụ sở ở DC. Chuyên môn sâu của ông bao gồm các phương thức tấn công của hacker và cách phòng vệ, các vấn đề về ngành an toàn thông tin và computer privacy. Ông giành được các giải thưởng 2004,2005 và 2006 của Microsoft MVP về an ninh Windows Server.

Biên dịch: minhta - misoft

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates