Tải bản đầy đủ (.docx) (80 trang)

Nghiên cứu kỹ thuật điều tra tấn công sử dụng PowerShell

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.99 MB, 80 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

ĐỒ ÁN TỐT NGHIỆP

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

Ngành: An tồn thơng tin
Mã số: 7.48.02.02

Hà Nội, 2020


BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

ĐỒ ÁN TỐT NGHIỆP

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

Ngành: An tồn thơng tin
Mã số: 7.48.02.02

Sinh viên thực hiện:
Nguyễn Thanh Trà
Lớp: AT12D
Người hướng dẫn:


ThS. Phạm Sỹ Nguyên
Đại học Kỹ thuật - Hậu cần CAND

Hà Nội, 2020



MỤ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
Chương 3. Thực nghiệm điều tra tấn công sử dụng PowerShell......................53
1


3.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. Q 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

2


DANH MỤC KÍ HIỆU VÀ VIẾT TẮT
CAND

Cơng An Nhân Dân

CMD

Command Prompt

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

3


Hì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
4


Hì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


5


DANH MỤC BẢNG
Bảng 1.1: Các kiểu dữ liệu PowerShell.....................................................................2
Bảng 1.2: So sánh PowerShell và Command Prompt...............................................6
Bảng 3.1: Thiết lập môi trường để phân tích cuộc tấn cơng...................................53

6


LỜ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ông
tác tại Đại học Kỹ thuật - Hậu cần CAND, người đã tận tình giúp đỡ, truyền đạt
kinh nghiệm và chỉ hướng để em có thể thực hiện và hồ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 Nam
VNCERT/CC, người đã hướng dẫn và chia sẻ những hiểu biết để em có thể thực
hiệ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è đã động
viê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ệm
thự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à

7


LỜI NĨI ĐẦU
PowerShell của Microsoft Windows là một cơng cụ mặc định trên hệ điều
hành Windows hiện nay với ý định thay thế cho CMD (Command Prompt) đã lỗi
thờ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ý trong
cá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ừa
ngườ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ần
mề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ế để qt máy tính và tìm chữ ký số của mã độc đã biết và chặn các tập
tin 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ụng
PowerShell để khai thác máy nạn nhân sẽ không có chữ ký số nào cho các phần
mềm chống virus để tìm kiếm. Mã độc Purple Fox [3] được báo cáo là đã ảnh
hưở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ản
PowerShell độc hại được đặt dưới dạng tập tin hình ảnh (.jpg), sẽ sử dụng API của
msi.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ói
Microsoft 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ụng
PowerShell 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ân
tí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ấn
cô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ổng
quan về PowerShell, sau đó nghiên cứu về các kỹ thuật điều tra, truy vết các cuộc
tấ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ác
PowerShell và quy trình điều tra tấn cơng có sử dụng PowerShell.
8


Chươ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 q 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à

9


CHƯƠ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ấp
lố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ên

dò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ệnh
mớ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ào
nă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ứa khá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ảng
lớ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ại
Hộ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 Windows
PowerShell. 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ản
Windows 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ất
xưởng. Trong quá trình phát triển, tổng cộng 3 bản xem trước (community
technology preview) đã được Microsoft tạo. Vào tháng 12-2008, bản CTP cuối
cù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ồm
mộ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ột
thành phần trên hệ điều hành Windows, Windows PowerShell, sau đó đã trở thành
phần mềm mã nguồn mở và đa nền tảng (Linux, macOS và Windows) vào 18-082016 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ủa
PowerShell được phát hành vào tháng 11 năm 2006 cho Windows XP, Windows
Server 2003 và Windows Vista. Các phiên bản sau của PowerShell là Windows
1



PowerShell 4.0 được phát hành vào tháng Mười năm 2013. Phiên bản này được
phâ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ọc
cá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 tồ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ột
phầ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
Kiểu dữ liệu

Chi tiết

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
2


PowerShell 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ên
lị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ện
tạ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ực
hiệ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ủ
và máy trạm;
 Hướng đến các quản trị viên hệ thống bằng cách cho phép tạo các cú
pháp làm dễ dàng hơn;
 PowerShell an toàn hơn so với chạy VBScript hoặc các ngôn ngữ kịch
bản khác;
 PowerShell remoting: PowerShell cho phép script (một đoạn mã kịch
bản) và cmdlet (câu lệnh ngắn) được gọi tới một máy từ xa;
 Công việc chạy nền: PowerShell giúp thêm các đoạn chương trình
khơng đồng bộ, chạy các cơng việc của mình trên máy cục bộ hoặc
nhiều máy hoạt động từ xa;
 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 Microsoft
Disk Operation System (MS-DOS) của thập niên 1980. Đây là một ứng dụng
win32 đơn giản giúp người dùng tương tác với hệ điều hành Windows bằng các
lệnh và tham số đơn giản.

3


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à
Windows Command Processor, nhưng đôi khi cũng đc gọi là CMD prompt hay
Command shell, hoặc đơn giản là CMD. Therese Stowell đã phát triển bản đầu tiên
của CMD cho Windows NT vào tháng 12/1987 và có sẵn trong hầu hết các hệ điều
hà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ẵn
tại dòng lệnh. PowerShell khi chạy cũng gọi chúng theo chương trình thơng qua
Windows PowerShell API.
Cmdlet thực hiện một hành động và thường trả về một đối tượng
Microsoft .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ều
sau:
 Cmdlet là đối tượng lớp .NET Framework nên khơng thể được thực

thi 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.
4


Hầu hết các chức năng PowerShell đến từ cmdlet. Hơn nữa, các đối tượng
trả về của cmdlet không phải là văn bản. Cmdlet là một chuỗi các lệnh, được lưu
trữ 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ũng
chất lượng hơn so với Windows Command Prompt. Hãy thực hiện một ví dụ đơn
giản là xác định địa chỉ IP. Sử dụng câu lệnh ipconfig trong CMD, và nó sẽ trả ra
mà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ự.
Ngồ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ủ đơn
giản, nhưng nó sẽ là tuyệt vời đối với một máy chủ cấp cao. Lệnh cmdlet GetNetIPAddress cho phép xem cấu hình IP cho cả IPv4 và IPv6 cùng với mọi giao
diệ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ết
quả 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 GetService. 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ày
sang 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ểu
thà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.
5


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ến
trình có đang chạy hay khơng, sử dụng tham số Where-Object:
Get-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 tố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ình
của Chrome đang chạy trên máy.
Bảng 1.2: So sánh PowerShell và Command Prompt
PowerShell

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 số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
để gỡ lỗi sự cố.

4. Đầu ra được tạo bởi PowerShell
không chỉ là một chuỗi ký tự mà
là một tập hợp các đối tượng.

4. Đầu ra được tạo bởi cmd là một
chuỗi các ký tự


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 thi
tậ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ồm
một động từ tiêu chuẩn được gạch nối với một danh từ cụ thể. Động từ PowerShell
khô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ụ
6


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
chế, nhưng ln mơ tả những gì động từ hành động. PowerShell có các lệnh như
Get-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ống

cá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ác
má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ố Verb
cho 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 đối
tượ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

7


Các lệnh được sử dụng trong giao diện dòng lệnh truyền thống khơng phải
lú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.
1.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ày
và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ợp
với tiêu chuẩn.
PowerShell cũng chuẩn hóa bộ phân tách tham số. Tên tham số ln 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ụng

trê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ên
lệ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ột
chứ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ùng
cmd.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ần
biết tên lệnh PowerShell. Nếu đã sử dụng cmd.exe trong nhiều năm, có thể theo
phả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 đối
tượ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ỳ

8


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ệ:

Hình 1.5: Tạo một biến
Ví dụ này trả về khơng có kết quả vì $test khơng có giá trị. Có thể tạo một
biến và gán cho nó một giá trị trong cùng một bước. PowerShell chỉ tạo biến nếu

nó khơng tồn tại. Mặt khác, nó gán giá trị được chỉ định cho biến hiện có. Ví dụ
sau lưu trữ vị trí hiện tại trong biến $test: $test = Get-Location
PowerShell hiển thị khơng có đầu ra khi gõ lệnh này. PowerShell gửi đầu ra
của 'Get-Location' tới $test. Trong PowerShell, dữ liệu không được chỉ định hoặc
chuyển hướng sẽ được gửi đến màn hình. Nhập $test hiển thị vị trí hiện tại:

Hì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

9


PowerShell có thể sử dụng cùng các biến mơi trường có sẵn cho bất kỳ quy
trì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ống
khỏ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 GetExecutionPolicy. 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át

triể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êu
cầ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 được
tả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ười
dù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!"

10


Hì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óa
trê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:
Set-ExecutionPolicy RemoteSigned

Cần xác nhận chuyển đổi chính sách và khởi động lại PowerShell để thực thi
lại lệnh.


Hình 1.11: Kết quả chạy tập tin kịch bản

11


1.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ệnh
PowerShell. Windows PowerShell hỗ trợ thao tác từ xa bằng cách sử dụng các
cô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ơng
cịn được hỗ trợ.
Nhiều lệnh Windows PowerShell cmdlet có tham số ComputerName cho
phé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ác
lệnh cmdlet này sử dụng các giao thức truyền thông khác nhau và hoạt động trên
tấ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 PowerShell
cho 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ác
tậ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 cmdlet
Enter-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 InvokeCommand. Ví dụ: để chạy lệnh Get-UICulture trên máy tính từ xa Server01 và
Server02, nhập:
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

12


1.4. PowerShell ISE
1.4.1. Tổng quan
Windows PowerShell ISE lần đầu tiền được giới thiệu với Windows
PowerShell 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ư Visual
Studio Code với PowerShell Extension có sẵn thơng qua Visual Studio
Marketplace.
Windows PowerShell tích hợp mơi trường kịch bản (Integrated Scripting
Environment - ISE) là một ứng dụng máy chủ cho Windows PowerShell. Trong
ISE, 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 giao
diệ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ột
tậ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

13


×