Windows là những hệ điều hành bị tấn công nhiều nhất. Chính vì vậy mà Microsoft đã xây dựng rất nhiều công cụ trong hệ điều hành Windows để các quản trị viên và một số người dùng có thể phân tích nhằm xác định xem máy tính của họ hiện có bị thỏa hiệp hay không.
Trong hướng dẫn gồm hai phần này, phần đầu tiên chúng tôi sẽ giới thiệu cho các bạn về 5 công cụ dòng lệnh hữu dụng trong Windows để thực hiện một hành động phân tích đó.
1. WMIC
Windows Management Instrumentation Command-line (WMIC) không chỉ đơn thuần là một lệnh mà có rất nhiều tính năng khác. Công cụ này có một giao diện dòng lệnh cho Windows Management Instrumentation API bên trong Windows. WMIC cho phép quản lý người dùng truy cập các thông tin chi tiết trên máy tính Windows, gồm có các thuộc tính chi tiết của hàng ngàn các thiết lập và đối tượng. WMIC được xây dựng bên trong Windows XP Professional, Windows 2003 và Windows Vista. Để sử dụng nó, người dùng phải khởi chạy chương trình bằng cách chạy lệnh WMIC, theo sau là phần mà người dùng quan tâm (thường được gọi là các alias bên trong hệ thống). Cho ví dụ, để biết về các quá trình đang chạy trên máy tính, người dùng có thể chạy lệnh:
C:\> wmic process
Phần đầu ra của lệnh này có vẻ khá khó đọc vì định không được chỉ định. Tuy nhiên với WMIC, đầu ra mà công cụ này cung cấp được định dạng hoàn toàn khác, trong đó phần "list full" sẽ hiển thị các thông tin chi tiết cho mỗi lĩnh vực mà người dùng quan tâm, còn phần "list brief" sẽ cung cấp một dòng đầu ra cho mỗi một mục báo cáo dưới sạng danh sách các mục, chẳng hạn như các quá trình đang chạy, các chương trình tự động khởi chạy và những chia sẻ hiện hữu.
Cho ví dụ, chúng ta có thể quan sát mọi quá trình đang chạy trên máy tính bằng cách chạy lệnh:
C:\> wmic process list brief
Lệnh trên sẽ hiển thị tên, ID của quá trình và quyền ưu tiên của mỗi quá trình đang chạy cũng như các thuộc tính khác. Để nhận thêm các thông tin chi tiết hơn, chạy lệnh:
C:\> wmic process list full
Lệnh này sẽ hiển thị tất cả các thông tin chi tiết, gồm có đường dẫn của file thực thi có liên kết với quá trình và lệnh triệu gọi dòng lệnh của nó. Khi nghiên cứu một máy tính có bị tiêm nhiễm hay không, quản trị viên cần phải xem xét từng quá trình để xác định xem các quá trình này có hợp lệ trên máy tính hay không, sau đó nghiên cứu các quá trình lạ hoặc không mong đợi bằng cách sử dụng các cỗ máy tìm kiếm.
Ngoài các alias về các quá trình, người dùng có thể thay thế startup để nhận danh sách các chương trình tự động khởi chạy trên máy tính, gồm có các chương trình khởi chạy khi hệ thống khởi động hoặc người dùng đăng nhập, đây là những chương trình được định nghĩa bởi một auto-start registry key hoặc thư mục:
C:\> wmic startup list full
Rất nhiều malware có thể tự động chạy trên máy tính bằng cách thêm một mục auto-start bên cạnh các mục hợp lệ khác có bên trong các công cụ antivirus hay các chương trình system tray. Người dùng có thể quan sát các thiết lập khác trên máy tính với WMIC bằng cách thay thế "startup" bằng "QFE" (cụm chữ cái viết tắt cho Quick Fix Engineering) để thấy được mức vá của một hệ thống, bằng "share" để xem danh sách các file chia sẻ trên Windows hoặc bằng "useraccount" để thấy được các thiết lập tài khoản chi tiết của người dùng.
Một tùy chọn khác bên trong WMIC là khả năng chạy một lệnh để thu thập thông tin trên trên một chu kỳ nào đó bằng cách sử dụng cú pháp "/every:[N]" sau phần còn lại của lệnh WMIC. [N] ở đây là một số nguyên, chỉ thị rằng WMIC sẽ chạy lệnh trên cứ [N] giây một lần. Bằng cách đó, người dùng có thể tìm kiếm các thay đổi trong các thiết lập của hệ thống theo thời gian, cho phép khảo sát một cách kỹ lưỡng đầu ra. Sử dụng chức năng này để kéo toàn bộ các thông tin về quá trình trong 5 giây một lần, người dùng có thể chạy:
C:\> wmic process list brief /every:1
Nhấn CTRL+C sẽ dừng chu kỳ.
2. Lệnh net
Giới thiệu ở trên, WMIC là một lệnh tương đối mới, tuy nhiên còn có một số lệnh khác không phải là mới nhưng khá hữu dụng đó là lệnh "net". Các quản trị viên có thể sử dụng lệnh này để hiển thị tất cả các thông tin hữu dụng.
Cho ví dụ, lệnh "net user" sẽ hiển thị tất cả các tài khoản người dùng được định nghĩa nội bộ trên máy tính. Lệnh "net localgroup" sẽ hiển thị các nhóm, lệnh "net localgroup administrators" sẽ hiển thị thành viên của nhóm quản trị viên và lệnh "net start" hiển thị các dịch vụ đang chạy.
Các hacker thường đưa người dùng vào một hệ thống hoặc đặt các tài khoản của họ vào một nhóm quản trị viên, vì vậy chúng ta luôn phải kiểm tra đầu ra của các lệnh này để xem liệu hacker đã sửa đổi các tài khoản trên máy tính hay chưa. Thêm vào đó, một số hacker có thể tạo các dịch vụ xấu trên máy tính, vì vậy người dùng nên cần thận với chúng.
3. Openfiles
Nhiều quản trị viên Windows không quen với việc sử dụng các lệnh openfiles mạnh có trong Windows. Mặc dù vậy, như tên ngụ ý của nó, lệnh này sẽ hiển thị tất cả các file được mở trong máy tính, chỉ thị tên quá trình đang tương tác với mỗi file. Nó được xây dựng trong các phiên bản Windows đời mới, từ XP Pro đến Vista. Giống như lệnh lsof phổ biến cho Linux và Unix, nó cũng thể hiện cho các quản trị viên tất cả các file đang mở trên máy tính, cung cấp tên quá tình và đường dẫn hoàn chỉnh cho mỗi file. Tuy nhiên không giống như lsof, nó không cung cấp nhiều thông tin chi tiết, chẳng hạn như số ID của quá trình, số người dùng hoặc các thông tin khác.
Xem xét phân vùng thông tin mà nó thu thập được, bạn sẽ không hề ngạc nhiên rằng lệnh openfiles thực sự tiêu hao rất nhiều hiệu suất. Chính vì vậy, thông thường các quá trình có liên quan đến openfiles bị tắt mặc định, nghĩa là người dùng không thể kéo bất cứ dữ liệu nào từ lệnh này cho tới khi bật nó. Chức năng này có thể được kích hoạt bằng cách chạy lệnh:
C:\> openfiles /local on
Người dùng sẽ cần phải khởi động lại và khi hệ thống hoạt động trở lại, họ sẽ có thể chạy lệnh openfiles như dưới đây:
C:\> openfiles /query /v
Lệnh này sẽ hiển thị đầu ra một cách chi tiết, gồm có tài khoản người dùng mà quá trình cho một file mở đang chạy bên trong. Từ đó có thể nhận biết được malware gì đã được cài đặt, hoặc tấn công gì có thể đang được thực hiện trên máy tính, người dùng nên tìm kiếm các file dị thường hoặc các file không mong đợi, đặc biệt các file có liên quan đến những người dùng nội bộ không mong đợi trên máy tính.
Khi kết thúc với lệnh openfiles, chức năng tính toán của nó có thể được tắt bỏ và hệ thống sẽ trở lại với tình trạng hiệu suất bình thường bằng cách chạy lệnh dưới đây và khởi động lại máy tính:
C:\> openfiles /local off
4. Lệnh netstat
Lệnh netstat trong Windows có thể hiển thị hành vi mạng, tập trung vào TCP và UDP mặc định. Vì malware thường truyền thông trong toàn mạng, nên người dùng có thể tìm kiếm các kết nối không bình thường trong đầu ra của netstat, chạy lệnh dưới đây:
C:\> netstat -nao
Tùy chọn –n sẽ thông báo cho netstat hiển thị các số trong đầu ra của nó, trừ tên máy và giao thức mà thay vì đó sẽ hiển thị các địa chỉ IP và TCP hoặc số cổng UDP. –a chỉ thị hiển thị tất cả các kết nối và các cổng đang lắng nghe. Tùy chọn –o thông báo cho netstat hiển thị số processID của mỗi chương trình đang tương tác với cổng TCP hoặc UDP. Nếu thay vì TCP và UDP, bạn chỉ quan tâm đến ICMP, khi đó bạn có thể chạy lệnh netstat như dưới đây:
C:\> netstat –s –p icmp
Lệnh trên chỉ thị rằng nó sẽ trả về thống kê (-s) của giao thức ICMP. Mặc dù không thể hiện nhiều chi tiết bằng TCP và UDP nhưng người dùng có thể thấy được liệu máy tính có đang gửi lưu lượng ICMP không mong đợi trên mạng hay không. Tuy nhiên một số backdoor và một số malware khác có thể truyền thông bằng cách sử dụng tải trọng của các thư ICMP Echo.
Giống như WMIC, lệnh netstat cũng cho phép chúng ta chạy nó theo một chu kỳ lặp đi lặp lại. Tuy nhiên thay vì sử dụng cú pháp "/every:[N]" như WMIC, người dùng chỉ cần thêm sau lệnh triệu gọi netstat dấu cách và số nguyên. Như vậy, để liệt kê các cổng TCP và UDP đang sử dụng trên máy tính cứ sau 2 giây một lần, người dùng có thể chạy:
C:\> netstat –na 2
5. Find
Hầu hết các lệnh mà chúng tôi đã giới thiệu cho đến đây đều hiển thị rất nhiều đầu ra trên màn hình, điều này đôi khi làm khó người dùng trong việc quan sát toàn bộ để tìm ra một mục nào đó mà họ quan tâm. Tuy nhiên Windows có một công cụ khác có thể giúp bạn khắc phục điều này. Người dùng có thể tìm kiếm trong toàn bộ đầu ra của mỗi lệnh bằng cách sử dụng lệnh findstr và find trong Windows. Lệnh find sẽ tìm kiếm các chuỗi đơn giản, trong khi đó lệnh findstr sẽ hỗ trợ cho các từ ngữ thông thường, một cách phức tạp hơn để phân biệt các mẫu tìm kiếm. Do các từ ngữ thông thường được hỗ trợ bởi findstr vượt ra ngoài phạm vi của bài viết này, nên chúng tôi chỉ tập trung vào lệnh find. Mặc định lệnh find sẽ phân biệt giữa chữ hoa và chữ thường, tuy nhiên bằng cách sử dụng tùy chọn /i bạn có thể làm mất đi sự phân biệt này.
Lệnh find cũng có khả năng đếm. Được triệu gọi với lệnh /c, nó sẽ đếm số dòng của đầu ra gồm có chuỗi đã cho. Nếu người dùng muốn đếm số lượng dòng trong đầu ra của lệnh để biết được số lượng quá trình đang chạy, số lượng mục startup đang hiện diện, hoặc một loạt các hành động khác trên máy. Để đếm số dòng đầu ra, người dùng có thể dẫn đầu ra của họ qua find /c /v "". Lệnh này sẽ đếm (/c) số dòng trừ dòng trống.
Lúc này, với lệnh find, người dùng có thể quan sát đầu ra của mỗi một lệnh mà chúng tôi đã giới thiệu cho đến đây để tìm ra những điều thú vị riêng. Cho ví dụ, để xem thông tin mỗi giây về các quá trình cmd.exe đang chạy trên máy tính, bạn hãy đánh:
C:\> wmic process list brief /every:1 | find "cmd.exe"
Để đếm số file mở trên máy tính khi openfiles được kích hoạt, bạn chỉ cần đánh:
C:\> openfiles /query /v | find /c /v ""
Dù có đếm các mục theo một cách nào đi nữa, các bạn cần nhớ trừ đi số dòng được liên kết với header cột. Ví dụ, để xem với độ chính xác theo mỗi giây khi cổng TCP 2222 bắt đầu được sử dụng trên máy tính, cùng với process ID đang sử dụng trên cổng, 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ể xử lý các thông tin về cấu hình, trạng thái bảo mật của mỗi một máy tính Windows. Mặc dù vậy để sử dụng mỗi lệnh trong việc nhận diện sự thỏa hiệp, người dùng cần phải so sánh các thiết lập hiện hành củ máy tính bị nghi ngờ với máy tính bình thường.
Có ba cách có thể thiết lập sự so sánh này. Đầu tiên, nếu người dùng là một “thợ săn” malware đã có kinh nghiệm thì anh ta có thể nhận biết về những gì đúng và những gì sai với máy tính, nhận ra những vấn đề không bình thường dựa trên kinh nghiệm. Cách thứ hai, so sánh này có thể được thực hiện với một máy không bị tiêm nhiễm nếu có. Nếu không có một máy tính “sạch”, người dùng có thể dựa vào tùy cách thứ ba – tìm kiếm các file, tên quá trình, tên file và số cổng cụ thể được nhận biết bởi các lệnh này và tìm kiếm chúng online nhằm xác định xem chúng có phải là các file thông thường cho máy tính và phần mềm mà nó đã cài đặt hay có liên quan tới một số loại malware.
Trong phần này, chúng tôi đã giới thiệu cho các bạn 5 lệnh rất mạnh trong Windows. Trong phần tiếp theo của loạt bài này, chúng tôi sẽ giới thiệu tiếp cho các bạn 5 lệnh hữu dụng khác từ dòng lệnh.