Tải bản đầy đủ (.pdf) (60 trang)

Bài tập lớn môn an toàn mạng (37)

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 (969.67 KB, 60 trang )

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA CƠNG NGHỆ THƠNG TIN 1

Học phần : An Tồn Mạng
Chủ đề: Volatility – Memory Forensic Tool

Giảng viên

:

TS. Đặng Minh Tuấn

Sinh viên

:

Trần Văn Hải

Mã sinh viên

:

B18DCAT073

Lớp

:

D18CQAT01-B

Nhóm mơn học :



02

Số điện thoại

0947017224

:


Lời mở đầu
Volatility là một forensic framework sử dụng nhiều cơng cụ để phân tích hình ảnh
bộ nhớ. Cơng cụ này được phát triển bằng Python, hỗ trợ các nhà điều tra tìm hiểu
thêm về bộ nhớ tạm (RAM) trên hệ thống bằng cách trích xuất các tiến trình đang
chạy, cấu hình máy tính, kết nối mạng đang mở, phần mềm độc hại có thể có, v.v.
RAM có thể lưu giữ dấu vết của mã độc, dữ liệu có thể đã bị lấy từ hệ thống, tên
người dùng và mật khẩu, nội dung của cửa sổ đang mở, registry và các phần dữ liệu
khác có thể được sử dụng trong cuộc điều tra. Vì RAM là bộ nhớ tạm thời nên dữ
liệu sẽ biến mất ngay khi hệ thống bị tắt nguồn. Để lưu nội dung của RAM, một số
công cụ nhất định có thể được sử dụng để thu thập bộ nhớ và từ đó, tính năng của
Volatility có thể được sử dụng để phân tích những gì thu được, cung cấp cho điều
tra viên tất cả các loại bằng chứng. Các tiến trình đang chạy, mật khẩu, kết nối mạng
và nhiều danh sách sẽ được hiển thị để giúp người kiểm tra phân tích những gì có
thể đã xảy ra trong một hệ thống. Bằng chứng được cung cấp bởi Volatility có thể
tạo ra tất cả sự khác biệt và nếu sử dụng hết khả năng của nó, có thể cung cấp đầy
đủ thơng tin về cách hệ thống bị xâm phạm như nào trong thời gian mà bộ nhớ được
trích xuất.

2



Mục lục
Mục lục ............................................. 3
I. Giới thiệu .......................................... 6
1.

Tổng quan.......................................... 6

2.

Lịch sử hình thành. .................................... 7

3.

Thuật ngữ .......................................... 8

II. Hướng dẫn cài đặt .................................... 8
1.

Tải xuống Volatility ................................... 8

2.

Cài đặt Volatility ..................................... 8
2.1.

3.

Các thư viện phụ thuộc. .............................. 9


Cập nhật Volatility ................................... 11

III. Các lệnh cơ bản ..................................... 12
1.

Các tùy chọn chung .................................. 13
1.1.

Hiển thị Trợ giúp. ................................. 13

1.2.

Chọn Cấu hình ................................... 14

1.3.

Các tùy chọn khác. ................................ 16

1.4.

Bật thơng báo gỡ lỗi ............................... 18

1.5.

Sử dụng bộ nhớ đệm ............................... 18

1.6.

Đặt múi giờ ..................................... 18


1.7.

Đặt DTB ....................................... 20

1.8.

Đặt địa chỉ KDBG ................................. 20

1.9.

Đặt địa chỉ KPCR ................................. 21

1.10.

Bật hỗ trợ ghi................................... 21

1.11.

Chỉ định Thư mục Plugin Bổ sung ..................... 22

1.12.

Chọn định dạng Đầu ra ............................ 22

2.

Các tùy chọn cụ thể của plugin ........................... 23

3.


Sử dụng Volatility làm Thư viện .......................... 23

IV. Các plugin thường được sử dụng ......................... 24
3


1.

2.

3.

4.

5.

Vùng nhớ ......................................... 24
1.1.

Imageinfo ...................................... 24

1.2.

Crashinfo....................................... 24

1.3.

Hibinfo ........................................ 25

1.4.


Imagecopy ...................................... 25

Các tiến trình và DLLs ................................ 26
2.1.

Pslist ......................................... 26

2.2.

Pstree ......................................... 26

2.3.

Psscan......................................... 27

2.4.

Dllist ......................................... 27

2.5.

Dlldump ....................................... 28

2.6.

Handles ........................................ 28

2.7.


Cmdscan ....................................... 29

Các đối tượng bộ nhớ và kernel ........................... 30
3.1.

Procmemdump ................................... 30

3.2.

Procexedump .................................... 30

3.3.

Modscan ....................................... 30

3.4.

Driverscan ...................................... 31

3.5.

Filescan........................................ 31

Mạng ............................................ 32
4.1.

Connections ..................................... 32

4.2.


Connscan....................................... 32

4.3.

Sockscan ....................................... 33

4.4.

Netscan ........................................ 34

Registry .......................................... 34
5.1.

Hivescan and Hivelist .............................. 34

5.2.

Hivedump ...................................... 35

5.3.

Hashdump ...................................... 35
4


6.

Phân tích mã độc .................................... 36
6.1.


Malfind ........................................ 36

6.2.

Svcscan ........................................ 36

6.3.

Apihooks ....................................... 37

6.4.

Callbacks....................................... 37

6.5.

Devicetree ...................................... 38

6.6.

Psxview ....................................... 39

V. Các plugin khác ..................................... 39
1.

Iehistory .......................................... 39

2.

Evtlogs ........................................... 40


3.

Deskscan ......................................... 40

VI. Kịch bản .......................................... 40
1.

Kịch bản 1 : Memory Analysis - Ransomware ................. 40

2.

Kịch bản 2 : Memory Analysis – Stuxnet sử dụng Process Injection ... 48

VII.

Tổng kết ....................................... 59

VIII. Tài liệu tham khảo ................................ 60

5


I.

Giới thiệu
1. Tổng quan
Volatility là một công cụ mã nguồn mở dùng để phân tích bộ nhớ trong
thời gian chạy của máy tính để phục vụ cơng việc xử lý sự cố và phân
tích phần mềm độc hại. Volatility được viết bằng Python và hỗ trợ hỗ

trợ Microsoft Windows, Mac OS X và Linux (kể từ phiên bản 2.5).
Volatility được tạo ra bởi Aaron Walters, dựa trên nghiên cứu học thuật
mà ông đã thực hiện trong pháp y bộ nhớ.
Vào năm 2007, phiên bản đầu tiên của Volatility Framework đã được
phát hành công khai tại Black Hat DC. Phần mềm này dựa trên nhiều
năm nghiên cứu học thuật đã được cơng bố về các kỹ thuật phân tích và
pháp y bộ nhớ tiên tiến. Cho đến thời điểm đó, các cuộc điều tra kỹ
thuật số tập trung chủ yếu vào việc tìm kiếm các tệp tin khả nghi tồn tại
trong ổ cứng. Volatility đã giới thiệu cho mọi người sức mạnh của việc
phân tích trạng thái trong thời gian chạy của một hệ thống bằng cách sử
dụng dữ liệu được tìm thấy trong bộ nhớ tạm (RAM) của máy tính. Nó
cũng cung cấp một nền tảng đa nền tảng, mơ-đun và có thể mở rộng để
khuyến khích nghiên cứu sâu hơn vào lĩnh vực nghiên cứu thú vị này.
Một mục tiêu chính khác của dự án là khuyến khích sự hợp tác, đổi mới
và khả năng tiếp cận với kiến thức đã phổ biến trong cộng đồng phần
mềm tấn công.
Kể từ thời điểm đó, phân tích bộ nhớ đã trở thành một trong những chủ
đề quan trọng nhất đối với tương lai của điều tra kỹ thuật số và volatility
đã trở thành nền tảng pháp y bộ nhớ được sử dụng rộng rãi nhất trên thế
giới. Dự án được hỗ trợ bởi một trong những cộng đồng lớn nhất và tích
cực nhất trong ngành pháp y. Volatility cũng cung cấp một nền tảng
độc đáo cho phép chuyển ngay nghiên cứu tiên tiến vào tay các nhà điều
tra kỹ thuật số. Kết quả là, nghiên cứu được xây dựng dựa trên volatility
đã xuất hiện tại các hội nghị học thuật hàng đầu và volatility đã được
sử dụng trong một số cuộc điều tra quan trọng nhất trong thập kỷ qua.
Nó đã trở thành một công cụ điều tra kỹ thuật số không thể thiếu được
các nhà thực thi pháp luật, quân đội, học viện và các nhà điều tra thương
mại trên toàn thế giới tin cậy.
6



Sự phát triển của volatility hiện được hỗ trợ bởi “The Volatility
Foundation”, một tổ chức phi lợi nhuận độc lập. Quỹ được thành lập để
thúc đẩy việc sử dụng Volatility và phân tích bộ nhớ trong cộng đồng
pháp y, để bảo vệ tài sản trí tuệ của dự án (nhãn hiệu, giấy phép, v.v.)
và tuổi thọ, và cuối cùng, để giúp thúc đẩy nghiên cứu phân tích trí nhớ
sáng tạo. Cùng với đó, nền tảng này cũng được thành lập để giúp bảo
vệ quyền của các nhà phát triển, những người hy sinh thời gian và tài
nguyên của họ để làm cho nền tảng pháp y bộ nhớ tiên tiến nhất trên
thế giới trở nên miễn phí và có nguồn mở.
2. Lịch sử hình thành.
Gần đây, ngày càng có nhiều sự chú ý dành cho nghiên cứu và tiến bộ
trong lĩnh vực phân tích pháp y bộ nhớ tạm. Mặc dù sự chú ý ngày càng
tăng, nhưng ít nhà điều tra cảm thấy họ có thời gian, nguồn lực hoặc
chuyên mơn để đưa phân tích bộ nhớ tạm vào q trình điều tra kỹ thuật
số của họ. Một số nhà điều tra, nhiều người trong số họ đang phải đối
mặt với các vụ án tồn đọng, coi bộ nhớ hệ thống dễ bay hơi là một
“chất” khác cần được phân tích. Do đó, bộ nhớ tạm thường khơng được
thu thập trong quá trình xử lý sự cố và trong những trường hợp khi nó
đã được thu thập, phân tích thường tập trung vào việc tìm kiếm các
chuỗi khơng có ngữ cảnh. Mục đích của cơng việc này là nhấn mạnh
thơng điệp rằng pháp y về bộ nhớ tạm không nên được coi là “nhiệm
vụ bổ sung” cho người điều tra kỹ thuật số quá tải, mà là một phần
không thể thiếu của quá trình điều tra kỹ thuật số. Chúng tơi cũng sẽ
chứng minh cách loại phân tích này có thể là một quá trình chuyển đổi
dễ dàng cho những người đã tận dụng bối cảnh được cung cấp từ các
kỹ thuật xử lý hệ thống trực tiếp.
Có một số nguyên tắc pháp y quan trọng cần xem xét khi trích xuất dữ
liệu từ một hệ thống trực tiếp. Những xem xét này tập trung vào việc
cố gắng giảm thiểu những thay đổi trên hệ thống, hiểu được tác động

của những thay đổi và giảm thiểu sự tin cậy được đặt vào hệ thống. Thật
khơng may, đã có rất ít công việc được thực hiện để đánh giá xem các
phương pháp thu thập dữ liệu trực tiếp hiện tại có tuân thủ các nguyên
tắc này tốt như thế nào. Vì vậy, bộ công cụ này được thiết kế để giúp
các nhà điều tra kỹ thuật số và các nhóm xử lý sự cố nhanh chóng xác
7


định bối cảnh hệ thống thời gian chạy và các đầu mối điều tra có thể
hữu ích trong các giai đoạn phân tích sau này.
Cuối cùng, kỹ thuật pháp y bộ nhớ tạm bằng công vụ Volatility sẽ được
chứng minh và đưa vào quá trình điều tra kỹ thuật số có thể giúp giải
quyết một số thách thức hàng đầu mà pháp y kỹ thuật số phải đối mặt.
Các công cụ và kỹ thuật phân tích bộ nhớ có thể được sử dụng để bổ
sung cho các công cụ và thực hành hiện đang được sử dụng trong các
cuộc điều tra kỹ thuật số. Ví dụ: các nhà điều tra có thể tận dụng bối
cảnh được tìm thấy trong bộ nhớ tạm để tập trung điều tra với khối
lượng lớn bằng chứng và phân tích thơng tin trên bộ nhớ tạm trước khi
nó tiêu tan.
3. Thuật ngữ
Dưới đây là một số từ khóa quan trọng:
- Volatile: Dữ liệu khơng cố định; nó sẽ bị mất khi nguồn điện bị ngắt
khỏi hệ thống.
- Plugin: Phần mềm làm cho một phần mềm lớn hơn có khả năng hoạt
động tốt hơn.
- Framework: Một cấu trúc hoặc bộ công cụ pháp y hỗ trợ điều tra.
- Forensic: pháp y, điều tra về những hành vi mã độc thực hiện trên
hệ thống.
II.


Hướng dẫn cài đặt
1. Tải xuống Volatility
Bạn có thể lấy mã nguồn bằng cách tải xuống bản phát hành ổn định
hoặc sao chép từ github. Để thực hiện thao tác sau, hãy nhập:
$ git clone />Thao tác này sẽ tạo một thư mục Volatility có chứa mã nguồn và bạn
có thể chạy thư mục Volatility từ đó.
2. Cài đặt Volatility
Nếu bạn đang sử dụng tệp thực thi Windows, Linux hoặc Mac độc lập,
8


khơng cần cài đặt - chỉ cần chạy nó từ dấu nhắc lệnh. Khơng cần cài
thêm các gói phụ thuộc, vì chúng đã được đóng gói bên trong exe.
Nếu bạn đang sử dụng tệp thực thi Pyinstaller (chỉ dành cho Windows),
hãy nhấp đúp và làm theo hướng dẫn cài đặt (về cơ bản bao gồm nhấp
vào “Continues” một vài lần và sau đó “Finish”). Bạn phải có một
Python 2.7 đang hoạt động. Cũng xem bên dưới để biết các thư viện
phụ thuộc.
Nếu bạn đã tải xuống kho lưu trữ mã nguồn zip hoặc tar (Windows,
Linux, OSX), có hai cách để "cài đặt" mã:
Cách 1: Giải nén kho lưu trữ và chạy setup.py. Thao tác này sẽ thực
hiện việc sao chép các tệp vào đúng vị trí trên đĩa của bạn. Việc chạy
setup.py chỉ cần thiết nếu bạn muốn có quyền truy cập vào không gian
tên Volatility từ các tập lệnh Python khác, ví dụ: nếu bạn định nhập
Volatility làm thư viện. Ưu điểm: dễ dàng sử dụng như một thư viện.
Nhược điểm: khó nâng cấp hoặc gỡ cài đặt hơn.
Cách 2: Giải nén kho lưu trữ vào một thư mục mà bạn chọn. Khi bạn
muốn sử dụng Volatility, chỉ cần thực hiện python
/path/to/directory/vol.py. Đây là một phương pháp gọn gàng hơn vì
khơng có tệp nào được di chuyển ra ngồi thư mục bạn đã chọn, điều

này giúp bạn dễ dàng nâng cấp lên các phiên bản mới khi chúng được
phát hành. Ngồi ra, bạn có thể dễ dàng cài đặt đồng thời nhiều phiên
bản của Volatility bằng cách chỉ giữ chúng trong các thư mục riêng biệt
(như /home/me/vol2.0 và /home/me/vol2.1). Ưu điểm: sạch, dễ chạy
nhiều phiên bản, dễ nâng cấp hoặc gỡ cài đặt. Nhược điểm: khó sử dụng
hơn như một thư viện.
2.1.

Các thư viện phụ thuộc.
Phần này không áp dụng cho tệp thực thi Windows độc lập, vì các
thư viện phụ thuộc đã được bao gồm trong exe. Cũng xin lưu ý rằng
phần lớn chức năng cốt lõi của Volatility cũng sẽ hoạt động mà
khơng có bất kỳ phụ thuộc bổ sung nào. Bạn sẽ chỉ cần cài đặt các
gói nếu bạn định sử dụng các plugin cụ thể tận dụng các gói đó
(xem phần thư viện được đề xuất) hoặc nếu bạn muốn nâng cao trải
nghiệm của mình (xem phần thư viện tùy chọn). Lưu ý: đối với
9


Linux, bạn có thể phải cài đặt một vài gói / thư viện khác làm điều
kiện tiên quyết cho các gói được đề xuất sau (Ví dụ: apt-get install
pcregrep libpcre ++ - dev python-dev -y)
2.1.1. Các thư viện được đề xuất.
Để được hỗ trợ plugin toàn diện nhất, bạn nên cài đặt các thư
viện sau. Nếu bạn không cài đặt các thư viện này, bạn có thể
thấy thơng báo cảnh báo để nâng cao nhận thức của mình,
nhưng tất cả các plugin không dựa vào các thư viện bị thiếu sẽ
vẫn hoạt động bình thường.
- Distorm3 : Thư viện Dissassembler mạnh mẽ dành cho
x86/AMD64

Các plugin phụ thuộc:
o Apihooks
o Callbacks
o Impscan
o Kdbgscan, pslist, modules v.v. cho các máy chạy
Windows 8/2012
o Các lệnh dissassemble trong volshell, linux_volshell
và mac_volshell.
- Yara : Một công cụ phân loại và nhận dạng phần mềm độc
hại.
Các plugin phụ thuộc:
o yarascan, linux_yarascan, mac_yarascan
Lưu ý: lấy yara từ trang web chính của dự án, khơng cài đặt
bằng pip.
Lưu ý: nếu bạn đang sử dụng Linux, bạn có thể phải sử dụng
lệnh sau:
echo "/usr/local/lib" >> /etc/ld.so.conf && ldconfig
- PyCrypto : Bộ công cụ mật mã Python
Các plugin phụ thuộc:
o Lsadump
o Hashdump
Lưu ý: điều này yêu cầu python-dev để cài đặt (trừ khi bạn
nhận được các tệp nhị phân được tạo sẵn)
10


- PIL : Thư viện hình ảnh Python
Các plugin phụ thuộc:
o Screenshots
- OpenPyxl : Thư viện Python để đọc / ghi tệp Excel 2007

xlsx / xlsm
Các plugin phụ thuộc:
o Bất kỳ plugin nào đã được chuyển đổi sang định dạng
hợp nhất (với tùy chọn --output=xlsx)
- Ujon: Thư viện phân tích cú pháp JSON cực nhanh
Các plugin phụ thuộc:
o Các plugin phụ thuộc: bất kỳ thứ gì sử dụng -output=html
2.1.2. Các thư viện tùy chọn
Các thư viện sau đây là tùy chọn. Nếu chúng được cài đặt,
Volability sẽ tìm và sử dụng chúng; nếu khơng một phương
pháp thay thế thích hợp sẽ được chọn.
- pytz để chuyển đổi múi giờ. Thay thế: tzset (tiêu chuẩn với
Python)
- IPython để nâng cao trải nghiệm volshell. Thay thế: code
(tiêu chuẩn với Python)
- libforecular1394 để phân tích trực tiếp qua firewire. Thay
thế: Libraw1394
3. Cập nhật Volatility
Nếu bạn đã sử dụng setup.py để cài đặt Volatility, các tệp sẽ được đặt
ở một vài vị trí tiêu chuẩn. Ví dụ:

11


Rất tiếc, khơng có trình gỡ cài đặt và nếu bạn chỉ cố chạy setup.py cho
phiên bản mới của Volatility, bạn có thể gặp phải một số tệp nguồn hỗn
hợp, điều này chắc chắn sẽ dẫn đến rắc rối. Vì vậy, trước khi bạn cài
đặt phiên bản mới của Volatility, hãy xóa mọi thứ mà setup.py đã tạo
trước đó:
$ sudo rm -rf /usr/local/lib/python2.6/dist-packages/volatility

$ sudo rm `which vol.py`
$ sudo rm -rf /usr/local/contrib/plugins

Bây giờ bạn có thể chạy setup.py cho phiên bản Volatility mới của
mình. Như đã nêu ở trên, hãy nhớ setup.py chỉ cần thiết nếu bạn định
nhập Volatility làm thư viện từ các tập lệnh Python khác. Nếu bạn chỉ
muốn sử dụng Volatility, không cần cài đặt (chỉ cần giải nén kho lưu
trữ và chạy vol.py bên trong).

III. Các lệnh cơ bản
Các lệnh Volatility cơ bản nhất được xây dựng như hình dưới đây. Thay
thế [plugin] bằng tên của plugin để sử dụng, [image] với đường dẫn tệp
đến hình ảnh bộ nhớ của bạn và [profile] bằng tên cấu hình (chẳng hạn như
Win7SP1x64).
$ python vol.py [plugin] -f [image] --profile=[profile]

Ví dụ:
$ python vol.py pslist -f /path/to/memory.img -profile=Win7SP1x64

12


Đối với mọi thứ ngồi ví dụ này, chẳng hạn như kiểm soát định dạng đầu
ra, liệt kê các plugin và cấu hình có sẵn hoặc cung cấp các tùy chọn dành
riêng cho plugin, hãy xem phần còn lại của văn bản bên dưới.
1. Các tùy chọn chung
Có một số tùy chọn dòng lệnh chung (tức là chúng áp dụng cho tất cả
các plugin). Phần này dành cho những người mới làm quen với
Volatility hoặc bất kỳ ai muốn làm quen hơn với những chức năng có
thể được tinh chỉnh.

1.1.

Hiển thị Trợ giúp.
Bạn có thể hiển thị menu trợ giúp chính bằng cách truyền -h hoặc
--help trên dịng lệnh. Điều này hiển thị các tùy chọn chung và liệt
kê các plugin có sẵn cho cấu hình hiện được chỉ định. Nếu bạn
khơng chỉ định cấu hình, bạn sẽ làm việc với cấu hình mặc định,
WinXPSP2x86, do đó bạn sẽ chỉ thấy các plugin hợp lệ cho hệ
điều hành và kiến trúc đó (ví dụ: bạn sẽ khơng thấy plugin linux
hoặc plugin windows chỉ hoạt động trên Vista). Để chỉ định cấu
hình khác với cấu hình mặc định, hãy xem “Chọn cấu hình” bên
dưới.

13


Phần còn lại của phần này sẽ thảo luận chi tiết hơn về các tùy chọn
khác nhau.
$ python vol.py -h
-h, --help

list all available options and their default values.
Default values may be set in the configuration file
(/etc/volatilityrc)
--conf-file=/Users/mhl/.volatilityrc
User based configuration file
-d, --debug
Debug volatility
--plugins=PLUGINS
Additional plugin directories to use (colon separated)

--info
Print information about all registered objects
--cache-directory=/Users/mhl/.cache/volatility
Directory where cache files are stored
--cache
Use caching
--tz=TZ
Sets the (Olson) timezone for displaying timestamps
using pytz (if installed) or tzset
-f FILENAME, --filename=FILENAME
Filename to use when opening an image
--profile=WinXPSP2x86
Name of the profile to load (use --info to see a list
of supported profiles)
-l LOCATION, --location=LOCATION
A URN location from which to load an address space
-w, --write
Enable write support
--dtb=DTB
DTB Address
--output=text
Output in this format (support is module specific, see
the Module Output Options below)
--output-file=OUTPUT_FILE
Write output in this file
-v, --verbose
Verbose information
--shift=SHIFT
Mac KASLR shift address
-g KDBG, --kdbg=KDBG Specify a KDBG virtual address (Note: for 64-bit

Windows 8 and above this is the address of
KdCopyDataBlock)
--force
Force utilization of suspect profile
-k KPCR, --kpcr=KPCR Specify a specific KPCR address
--cookie=COOKIE
Specify the address of nt!ObHeaderCookie (valid for
Windows 10 only)

1.2.

Chọn Cấu hình
Volatility cần biết bộ nhớ của bạn đến từ loại hệ thống nào, vì vậy
nó biết cấu trúc dữ liệu, thuật toán và ký hiệu nào sẽ sử dụng. Cấu
hình mặc định của WinXPSP2x86 được đặt bên trong, vì vậy nếu
bạn đang phân tích kết xuất bộ nhớ Windows XP SP2 x86, bạn
không cần cung cấp --profile. Tuy nhiên, đối với tất cả những
14


người khác, bạn phải chỉ định tên hồ sơ thích hợp.
Lưu ý: Nếu bạn không biết kết xuất bộ nhớ thuộc loại hệ thống
nào, hãy sử dụng plugin [imageinfo] hoặc [kdbgscan] để có gợi ý.
Các plugin này chỉ dành cho Windows.
Nếu bạn muốn xem danh sách các tên hồ sơ được hỗ trợ, hãy làm
như sau:

15



$ python vol.py --info
VistaSP0x64
VistaSP0x86
VistaSP1x64
VistaSP1x86
VistaSP2x64
VistaSP2x86
Win10x64
Win10x86
Win2003SP0x86
Win2003SP1x64
Win2003SP1x86
Win2003SP2x64
Win2003SP2x86
Win2008R2SP0x64
Win2008R2SP1x64
Win2008SP1x64
Win2008SP1x86
Win2008SP2x64
Win2008SP2x86
Win2012R2x64
Win2012x64
Win7SP0x64
Win7SP0x86
Win7SP1x64
Win7SP1x86
Win81U1x64
Win81U1x86
Win8SP0x64
Win8SP0x86

Win8SP1x64
Win8SP1x86
WinXPSP1x64
WinXPSP2x64
WinXPSP2x86
WinXPSP3x86

1.3.

-

A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile

Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile
Profile

for
for
for
for
for
for
for

for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for
for

Windows

Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows

Windows
Windows
Windows
Windows

Vista SP0 x64
Vista SP0 x86
Vista SP1 x64
Vista SP1 x86
Vista SP2 x64
Vista SP2 x86
10 x64
10 x86
2003 SP0 x86
2003 SP1 x64
2003 SP1 x86
2003 SP2 x64
2003 SP2 x86
2008 R2 SP0 x64
2008 R2 SP1 x64
2008 SP1 x64
2008 SP1 x86
2008 SP2 x64
2008 SP2 x86
Server 2012 R2 x64
Server 2012 x64
7 SP0 x64
7 SP0 x86
7 SP1 x64
7 SP1 x86

8.1 Update 1 x64
8.1 Update 1 x86
8 x64
8 x86
8.1 x64
8.1 x86
XP SP1 x64
XP SP2 x64
XP SP2 x86
XP SP3 x86

Các tùy chọn khác.
Nếu bạn sắp tham gia một cuộc điều tra dài và không muốn nhập
lại các tùy chọn phổ biến, có hai lựa chọn thay thế: biến mơi trường
và tệp cấu hình. Nếu một tùy chọn khơng được cung cấp trên dịng
lệnh, thì Volatility sẽ cố gắng lấy tùy chọn đó từ một biến mơi
trường và nếu điều đó khơng thành cơng nó sẽ cố gắng tìm từ một
tệp cấu hình.

16


1.3.1.

Biến môi trường.

Trên hệ thống Linux hoặc OS X, bạn có thể đặt các tùy chọn bằng
cách xuất chúng trong trình bao của mình, như được hiển thị bên
dưới:
$

$
$
$
$

1.3.2.

export
export
export
python
python

VOLATILITY_PROFILE=Win7SP0x86
VOLATILITY_LOCATION=file:///tmp/myimage.img
VOLATILITY_KDBG=0x82944c28
vol.py pslist
vol.py files

Tệp cấu hình.

Các tệp cấu hình thường là "volualityrc" trong thư mục hiện tại
hoặc ~/.volabilityrc (thư mục chính của người dùng), hoặc tại
đường dẫn do người dùng chỉ định (sử dụng tùy chọn --conf-file).
Dưới đây là một ví dụ về nội dung tệp:
[DEFAULT]
PROFILE=Win7SP0x86
LOCATION=file:///tmp/myimage.img
KDBG=0x82944c28
Các tệp cấu hình đặc biệt hữu ích khi xử lý một số mẫu bộ nhớ

trong một lần.
Chú ý:
- Các cờ plugin khác có thể được sử dụng theo cách này, ví
dụ như KPCR, DTB hoặc PLUGINS. Khi xuất các biến, chỉ
cần đặt tiền tố VOLATILITY_ trước tên cờ (ví dụ:
VOLATILITY_KPCR). Nếu khơng, tên cờ vẫn giữ ngun
khi thêm nó vào tệp cấu hình.
- Nếu bạn có một đường dẫn có khoảng trắng trong tên, thì
nên thay dấu cách bằng %20 (ví dụ: LOCATION = file:
///tmp/my%20image.img).

17


1.4.

Bật thơng báo gỡ lỗi
Nếu điều gì đó khơng xảy ra trong Volatility theo cách bạn mong
đợi, hãy thử chạy lệnh với -d / --debug. Điều này sẽ cho phép in
thông báo gỡ lỗi thành lỗi chuẩn. Nếu bạn thực sự cần gỡ lỗi
Volatility (như khi sử dụng trình gỡ lỗi pdb), hãy thêm “ -d -d -d
“ vào các lệnh của bạn.

1.5.

Sử dụng bộ nhớ đệm
Lưu ý: Bộ nhớ đệm đã bị tắt vào lúc này.
Bộ nhớ đệm cho phép Volatility lưu trữ các đối tượng và hằng số
tùy ý để truy xuất sau này. Điều này có thể bao gồm, địa chỉ DTB,
KDBG hoặc KPCR, toàn bộ bảng dịch trang x86 hoặc thậm chí

cấu trúc dữ liệu giải nén ở chế độ ngủ đông. Để cho phép sử dụng
bộ đệm, hãy thêm --cache vào các lệnh của bạn. Tính năng này
chọn (tuần tự hóa) dữ liệu trong các tệp trên đĩa của bạn, vì vậy
nếu bạn muốn chọn vị trí của các tệp trong bộ đệm, hãy sử dụng
--cache-directory. Để biết thêm thông tin, hãy xem trang hệ thống
bộ nhớ đệm trong hướng dẫn dành cho nhà phát triển cho phiên
bản phát hành của bạn.

1.6.

Đặt múi giờ
Dấu thời gian được trích xuất từ bộ nhớ có thể theo giờ địa
phương hệ thống hoặc theo Tọa độ thời gian tồn cầu (UTC).
Nếu chúng đang ở UTC, có thể hướng dẫn cho volatility hiển thị
chúng theo múi giờ mà nhà phân tích lựa chọn. Để chọn múi giờ,
hãy sử dụng một trong các tên múi giờ chuẩn (chẳng hạn như
Châu Âu / Luân Đôn, Hoa Kỳ / Miền Đông hoặc hầu hết các múi
giờ của Olson) với cờ --tz = TIMEZONE. Volatility cố gắng sử
dụng pytz nếu được cài đặt, nếu khơng nó sẽ sử dụng tzset.
Lưu ý rằng việc chỉ định múi giờ sẽ không ảnh hưởng đến cách
hiển thị giờ địa phương của hệ thống.

18


Theo mặc định, dấu thời gian _EPROCESS CreateTime và
ExitTime ở UTC. Dưới đây là đầu ra từ Volatility có cài đặt pytz:

$ python vol.py -f win7.vmem --profile=Win7SP1x86 pslist
Volatility Foundation Volatility Framework 2.4

Offset(V) Name
PID
PPID
Thds
Hnds
Sess Wow64
Start
Exit
---------- -------------------- ------ ------ ------ -------- ------ ----------------------------------- -----------------------------0x84133630 System
4
0
93
420 -----0
2011-10-20 15:25:11 UTC+0000
0x852add40 smss.exe
276
4
4
29 -----0
2011-10-20 15:25:11 UTC+0000
0x851d9530 csrss.exe
364
356
9
560
0
0
2011-10-20 15:25:15 UTC+0000
0x859c8530 wininit.exe
404

356
7
88
0
0
2011-10-20 15:25:16 UTC+0000
0x859cf530 csrss.exe
416
396
10
236
1
0
2011-10-20 15:25:16 UTC+0000
[snip]

Dưới đây là kết quả từ cùng một mẫu bằng cách sử dụng tùy chọn
--tz = America / Chicago để lấy Central Standard Time:
$ python vol.py -f win7.vmem --profile=Win7SP1x86 pslist -tz=America/Chicago
Volatility Foundation Volatility Framework 2.4
Offset(V) Name
PID
PPID
Thds
Hnds
Sess Wow64
Start
Exit
---------- -------------------- ------ ------ ------ -------- ------ ----------------------------------- -----------------------------0x84133630 System
4

0
93
420 -----0
2011-10-20 10:25:11 CDT-0500
0x852add40 smss.exe
276
4
4
29 -----0
2011-10-20 10:25:11 CDT-0500
0x851d9530 csrss.exe
364
356
9
560
0
0
2011-10-20 10:25:15 CDT-0500
0x859c8530 wininit.exe
404
356
7
88
0
0
2011-10-20 10:25:16 CDT-0500
0x859cf530 csrss.exe
416
396
10

236
1
0
2011-10-20 10:25:16 CDT-0500
[snip]

Dưới đây là đầu ra tương tự ở trên, nhưng không có thư viện pytz
được cài đặt:
19


$ python2.6 vol.py -f win7.vmem --profile=Win7SP1x86 pslist -tz=America/Chicago
Volatility Foundation Volatility Framework 2.4
Offset(V) Name
PID
PPID
Thds
Hnds
Sess Wow64
Start
Exit
---------- -------------------- ------ ------ ------ -------- ------ ----------------------------------- -----------------------------0x84133630 System
4
0
93
420 -----0
2011-10-20 10:25:11 CDT
0x852add40 smss.exe
276
4

4
29 -----0
2011-10-20 10:25:11 CDT
0x851d9530 csrss.exe
364
356
9
560
0
0
2011-10-20 10:25:15 CDT
0x859c8530 wininit.exe
404
356
7
88
0
0
2011-10-20 10:25:16 CDT
0x859cf530 csrss.exe
416
396
10
236
1
0
2011-10-20 10:25:16 CDT
[snip]

1.7.


Đặt DTB
DTB (Directory Table Base) là thứ mà Volatile sử dụng để dịch
các địa chỉ ảo sang địa chỉ vật lý. Theo mặc định, kernel DTB
được sử dụng (từ quy trình Chờ / Hệ thống). Nếu bạn muốn sử
dụng DTB của một quy trình khác khi truy cập dữ liệu, hãy cung
cấp địa chỉ cho
--dtb=ADDRESS.

1.8.

Đặt địa chỉ KDBG
Đây là tùy chọn chỉ dành cho Windows
Volatility quét cấu trúc _KDDEBUGGER_DATA64 bằng cách
sử dụng chữ ký được mã hóa cứng "KDBG" và một loạt các kiểm
tra. Những chữ ký này không quan trọng để hệ điều hành hoạt
động bình thường, do đó phần mềm độc hại có thể ghi đè chúng
nhằm mục đích loại bỏ các cơng cụ dựa vào chữ ký. Ngồi ra,
trong một số trường hợp, có thể có nhiều hơn một
_KDDEBUGGER_DATA64 (ví dụ: nếu bạn áp dụng bản cập
nhật hệ điều hành lớn và khơng khởi động lại), điều này có thể
20


gây nhầm lẫn và dẫn đến danh sách quy trình và mơ-đun khơng
chính xác, trong số các sự cố khác. Nếu bạn biết địa chỉ thêm
_KDDEBUGGER_DATA64, bạn có thể chỉ định địa chỉ đó bằng
--kdbg=ADDRESS và điều này sẽ ghi đè q trình qt tự động.
Để biết thêm thơng tin, hãy xem plugin [kdbgscan].
Đối với Windows 8 trở lên, tham số --kdbg phải là địa chỉ của

KdCopyDataBlock.
1.9.

Đặt địa chỉ KPCR
Đây là tùy chọn chỉ dành cho Windows
Có một KPCR (Kernel Processor Control Region) cho mỗi CPU
trên hệ thống. Một số plugin Volatility hiển thị thông tin về mỗi
bộ xử lý. Vì vậy, nếu bạn muốn hiển thị dữ liệu cho một CPU cụ
thể, chẳng hạn như CPU 3 thay vì CPU 1, bạn có thể chuyển địa
chỉ của KPCR của CPU đó với --kpcr = ADDRESS. Để định vị
KPCR cho tất cả CPU, hãy xem plugin [kpcrscan]. Cũng xin lưu
ý rằng bắt đầu từ volatility 2.2, nhiều plugin như [idt] và [gdt] tự
động lặp lại qua danh sách KPCR.

1.10. Bật hỗ trợ ghi
Ghi hỗ trợ trong Volatility nên được sử dụng một cách thận trọng.
Do đó, để thực sự kích hoạt nó, bạn khơng chỉ phải gõ --write
trên dịng lệnh mà còn phải nhập "mật khẩu" để trả lời câu hỏi
mà bạn sẽ được nhắc. Trong hầu hết các trường hợp, bạn sẽ
khơng muốn sử dụng hỗ trợ ghi vì nó có thể dẫn đến hỏng hoặc
sửa đổi dữ liệu trong kết xuất bộ nhớ của bạn. Tuy nhiên, vẫn tồn
tại những trường hợp đặc biệt khiến tính năng này thực sự thú vị.
Ví dụ: bạn có thể làm sạch một hệ thống trực tiếp của một số
phần mềm độc hại nhất định bằng cách ghi vào RAM qua
firewire hoặc bạn có thể đột nhập vào một máy trạm bị khóa bằng
cách vá các byte trong winlogon DLL.

21



1.11. Chỉ định Thư mục Plugin Bổ sung
Kiến trúc plugin của Volatility có thể tải các tệp và hồ sơ plugin
từ nhiều thư mục cùng một lúc. Trong mã nguồn Volatility, hầu
hết các plugin đều nằm trong volatility/plugins. Tuy nhiên, có
một thư mục khác (volatility/contrib) được dành riêng cho các
đóng góp từ các nhà phát triển bên thứ ba hoặc các plugin được
hỗ trợ yếu mà chỉ đơn giản là không được bật theo mặc định. Để
truy cập các plugin này, bạn chỉ cần gõ --plugins=contrib/plugins
trên dịng lệnh. Nó cũng cho phép bạn tạo một thư mục riêng gồm
các plugin của riêng bạn mà bạn có thể quản lý mà khơng cần
phải thêm / xóa / sửa đổi các tệp trong thư mục gốc.
Chú ý:
- Các thư mục con cũng sẽ được duyệt qua miễn là có tệp
__init__.py (có thể trống) bên trong chúng.
- Tham số cho --plugins cũng có thể là một tệp zip chứa các
plugin như --plugins=myplugins.zip.
- Nếu thư mục được chỉ định chứa các cấu hình, chúng cũng
sẽ được tải. Điều này thuận tiện cho việc sử dụng các cấu
hình Linux / Android / Mac được tạo với khả năng thực thi
độc lập của Volability.
Do cách các plugin được tải, thư mục plugin bên ngoài hoặc tệp
zip phải được chỉ định trước bất kỳ đối số cụ thể của plugin nào
(bao gồm cả tên của plugin). Thí dụ:
$ python vol.py --plugins=contrib/plugins -f
XPSP3x86.vmem example

1.12. Chọn định dạng Đầu ra
Theo mặc định, các plugin sử dụng trình kết xuất văn bản cho
đầu ra tiêu chuẩn. Nếu bạn muốn chuyển hướng đến một tệp, tất
nhiên bạn có thể sử dụng chuyển hướng của bảng điều khiển (tức

22


là > out.txt) hoặc bạn có thể sử dụng --output-file=out.txt.
Lý do bạn cũng có thể chọn --output=FORMAT là để cho phép
các plugin cũng hiển thị đầu ra dưới dạng HTML, JSON, SQL
hoặc bất kỳ thứ gì bạn chọn. Tuy nhiên, khơng có plugin nào có
các định dạng đầu ra thay thế đó được định cấu hình trước để sử
dụng, vì vậy bạn sẽ cần thêm một hàm có tên là render_html,
render_json, render_sql, tương ứng vào mỗi plugin trước khi sử
dụng --output=HTML.
2. Các tùy chọn cụ thể của plugin
Nhiều plugin chấp nhận các đối số của riêng chúng, độc lập với các tùy
chọn chung. Để xem danh sách các tùy chọn có sẵn, hãy nhập cả tên
plugin và -h / - help trên dòng lệnh.
$ python vol.py dlllist -h

3. Sử dụng Volatility làm Thư viện
Nếu bạn cần nhập Volatility từ một trong các tập lệnh python khác của
mình, bạn có thể sử dụng mã ví dụ sau:
$ python
>>> import volatility.conf as conf
>>> import volatility.registry as registry
>>> registry.PluginImporter()
<volatility.registry.PluginImporter object at 0x7f9608f3ac10>
>>> config = conf.ConfObject()
>>> import volatility.commands as commands
>>> import volatility.addrspace as addrspace
>>> registry.register_global_options(config, commands.Command)
>>> registry.register_global_options(config,

addrspace.BaseAddressSpace)
>>> config.parse_options()
>>> config.PROFILE="WinXPSP2x86"
>>> config.LOCATION = "file:///media/memory/private/image.dmp"
>>> import volatility.plugins.taskmods as taskmods
>>> p = taskmods.PSList(config)
>>> for process in p.calculate():
...
print process
...

23


IV. Các plugin thường được sử dụng
Phần một của dự án Volatility này được dành để nghiên cứu các plugin mà
các đội xử lý sự cố rất có thể sẽ sử dụng trong một số trường hợp. Điều
quan trọng là phải biết cách chạy các lệnh này và hiểu khi nào sử dụng
chúng trong quá trình điều tra, vì Volatility có thể là một chương trình khó
sử dụng.
1. Vùng nhớ
Các plugin liên quan đến phần này xác định hình ảnh bộ nhớ đang được
phân tích và cung cấp hiểu biết cơ bản về những gì nó chứa.
1.1.

Imageinfo
Imageinfo xác định hình ảnh bộ nhớ và đề xuất một cấu hình để
sử dụng. Volatility địi hỏi bạn phải chỉ định hình ảnh bộ nhớ đến
từ hệ điều hành nào. Lệnh này xác định hệ điều hành để bạn có
thể chạy các lệnh khác.

i.

Cách sử dụng :
$python vol.py

1.2.

–f imageinfo

Crashinfo
Plugin này hiển thị thông tin được lưu trữ trong tiêu đề
crashdump.
i.

Cách sử dụng :
$python vol.py –f --profile=
crashinfo

ii.

Đầu ra :
• MajorVersion
• MinorVersion
• KdSecondaryVersion
• DirectoryTableBase
24


• PfnDataBase
• PsLoadedModuleList

• PsActiveProcessHead
• MachineImageType
• NumberProcessors
• BugCheckCode
• KdDebuggerDataBlock
• ProductType
• SuiteMask
• WriterStatus
• Comment
• Physical Memory Description
1.3.

Hibinfo
Plugin này kết xuất thơng tin tệp ngủ đông nếu hệ thống đã từng
ở chế độ đó.
i.

Cách sử dụng:
$python vol.py –f --profile=
hibinfo

ii.

1.4.

Đầu ra :
• Signature
• System Time
• Control registers flags
• Windows Version


Imagecopy
Imagecopy sao chép khơng gian địa chỉ vật lý ra ngồi dưới dạng
hình ảnh ổ đĩa thơ (dd)
i.

Cách sử dụng
$python vol.py –f --profile=
imagecopy -O <output file>

25


×