Memory Dump Analysis with Volatility [1]

Chơi forensic trong các cuộc thi CTF, bên cạnh các bài thi kiểu cho tập tin pcap rồi phân tích tìm flag, thì còn có một dạng nữa là cho tập tin RAM dump để tìm flag. Đây là dạng đề bài tôi chưa chơi bao giờ, nhân dịp có việc cần dùng đến nên quyết định tìm hiểu.

Bài 2: https://minhthuongeh.wordpress.com/2018/08/05/memory-dump-analysis-with-volatility-2/

Bài 3: https://minhthuongeh.wordpress.com/2018/08/05/memory-dump-analysis-with-volatility-3/

Trong bài viết này, ta sẽ đi vào thực nghiệm một việc đơn giản với tập tin RAM dump là lấy mật khẩu của các user trên Windows. Ở các bài viết sau, tôi sẽ minh họa cách đọc nội dung mà người dùng sử dụng notepad để soạn thảo. Cuối cùng là xem lại tất cả lịch sử lệnh đã được thực thi trong cmd của Windows.

Để làm được việc này, tôi sử dụng 2 máy ảo: Windows 7 và Kali Linux. Thật ra nếu tiết kiệm thì cũng có thể sử dụng một máy Windows 7 thôi cũng đủ rồi, nhưng có một số lệnh tôi quen dùng trong linux nên quyết định sử dụng Kali để phân tích cho nhanh. Một chuyện nữa là Volatility được cài sẵn trong Kali Linux.

Để dump được RAM ra tập tin *.raw file, tôi sử dụng chương trình DumpIt của MoonSols. Chương trình thao tác đơn giản, chỉ việc chọn Yes hoặc No một lần là xong. Một điểm tôi không thích của chương trình này là nó dump toàn bộ cả dung lượng RAM bạn có mà không cho lựa chọn cụ thể process nào mình muốn dump thôi. Một số chương trình khác làm được việc này thì lại xuất ra tập tin *.dmp. Khi bỏ vào Volatility để phân tích thì lại không xác định được profile. Vấn đề này tôi vẫn đang đọc tiếp (nói trắng ra là chưa biết làm haha…).

DumpIt tool.jpg
DumpIt dùng để extract RAM ra tập tin .raw file nhanh chóng

Để phân tích tập tin RAM dump ta vừa lấy được, tôi sử dụng một công cụ cực kỳ nổi tiếng mà bất kỳ ai làm forensic cũng từng nghe đến: Volatility của Volatile Systems.

Đầu tiên, chép tập tin vừa thu được vào máy Kali Linux và mở Terminal lên để tiến hành phân tích.

Note: Tôi thấy trong Ubuntu có thể mở Terminal nhanh bằng tổ hợp Keyboard shortcut là Ctrl + Shift + T. Bạn cũng nên set trên Kali Linux để mở nhanh hơn. Nhớ không lầm thì trước đây tôi đã từng viết hướng dẫn về cái thủ thuật này trên blog rồi.

Để xử lý một tập tin RAM dump, ta phải phân tích xem nó là của OS nào. Có thể thực hiện bằng câu lệnh kinh điển:

volatility -f <tập_tin_ram_dump.raw> imageinfo

hoặc

volatility imageinfo -f <tập_tin_ram_dump.raw> 

Screenshot from 2018-08-04 20-06-38.png

Quan sát dòng Suggested Profile(s) và nhìn kết quả đầu tiên, tôi biết được đây là tập tin RAM dump lấy từ Windows 7 SP1 64bit. Đây là trường kết quả, tuy nhiên nó không khẳng định 100% kết quả mà đưa ra một loạt các gợi ý, thông thường kết quả đầu tiên luôn chính xác.

Sau khi đã xác định được profile, mọi việc tiếp theo trở nên dễ dàng hơn nhiều.

Tiếp theo, thông tin cần lấy tiếp theo là hive list. Hiểu đơn giản thì đây là công đoạn lấy ra trường địa chỉ bắt đầu trong bộ nhớ của nơi lưu trữ thông tin đăng ký và quản lý về tài khoản người dùng Windows.

volatility -f <tập_tin_ram_dump.raw>  –profile=Win7SP1x64 hivelist

Screenshot from 2018-08-04 20-20-48.png

Trong kết quả hiện ra, ta có được danh sách các key về user trên Windows đang được lưu trữ trên RAM. Công đoạn tiếp theo chỉ là tìm ra mã băm của mật khẩu trong mớ thông tin hỗn độn này thôi. Để làm được, ta phải biết được trường địa chỉ bắt đầu cho cả hai giá trị key của hệ thống [system key] và key của tập tin SAM [SAM key] (Windows lưu trữ chuỗi băm của mật khẩu người dùng trong tập tin SAM).

Trong các records trả về ở trên, ta quan sát có tổng cộng 3 cột: Virtual | Physical | Name. Nhìn ở cột Name ta thấy được system key là dòng \REGISTRY\MACHINE\SYSTEM và SAM key là \SystemRoot\System32\Config\SAM. Lấy ra giá trị Virtual tương ứng của 2 records trên và bỏ vào câu lệnh bên dưới. Đồng thời, ta sẽ trích xuất mã băm mật khẩu vào một tập tin text document để tiện quan sát.

volatility -f <tập_tin_ram_dump.raw>  –profile=Win7SP1x64 hashdump -y <Virtual_value_of_System_Key> -s <Virtual_value_of_SAM_Key> > pwdhashes.txt

Screenshot from 2018-08-04 20-33-02.png

Sau khi chạy xong lệnh, tôi mở tập tin text document có tên pwdhashes.txt vừa tạo lên để xem kết quả. Và như vậy, Windows có bao nhiêu tài khoản, chương trình sẽ liệt kê toàn bộ ra, kể cả những tài khoản đang bị disable.

Mỗi record lấy ra sẽ có các trường cụ thể ngăn cách nhau bởi dấu “:”. Ý nghĩa các trường này là:

<Username>:<User ID>:<LM hash>:<NT hash>:<Comment>:<Home Dir>:

Tham khảo thêm: https://www.yg.ht/blog/blog/archives/339/what-is-aad3b435b51404eeaad3b435b51404ee

Nếu ta thấy ở trường LM hash kết thúc bằng “404ee” thì có nghĩa là nó không có hăm LM, nhưng có băm NTLM – vốn được Windows sử dụng.

Đọc thêm: https://en.wikipedia.org/wiki/NT_LAN_Manager

Để giải mã kiểu băm này ra chuỗi gốc ban đầu, ta chỉ việc tra cứu ở các trang giải mã online thôi là xong.

FireShot Capture 5 - NTLM Decrypter - Over 312.072 b_ - https___hashkiller.co.uk_ntlm-decrypter.aspx.png

Với vài câu lệnh đơn giản như vậy, ta đã có thể xem mật khẩu của user account trên Windows dễ dàng. Cách này có thể áp dụng trong trường hợp, bạn đang login với một account user thường, nhưng muốn xem mật khẩu của toàn bộ account trên máy, mà cụ thể hơn là password của (các) user Admin thì cách này đơn giản nhiều so với việc phải dùng tới các công cụ hỗ trợ boot khác.

Thật ra ứng dụng của nó trong nhiều việc khác cũng hay hơn, nhưng thôi không nói. Nói ra giống như vẽ đường cho hưu chạy.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s