Ngày nay bảo mật thông tin ngày càng trở thành một vấn đề đáng được quan tâm khi các sự cố rò rỉ thông tin, tấn công mạng thường xuyên xảy ra khắp nơi trên thế giới. Một trong những vấn đề phổ biến nhất vẫn luôn là mã độc vì những hành vi độc hại mà chúng có thể gây ra cho một hệ thống máy tính và phát hiện các hành vi của mã độc luôn là một bài toán mà bất kỳ đơn vị nào cũng luôn quan tâm. Để thực hiện tốt công việc này chúng ta có rất nhiều các phương pháp cũng như công cụ để thực hiện và trong đó, Sandbox là một công cụ mạnh mẽ vẫn luôn được nhắc đến.
Sandbox là một công cụ hỗ trợ phân tích động trong một môi trường được kiểm soát chặt chẽ nhằm ghi lại các hành vi các phần mềm có thể thực hiện. Đây cũng là một kỹ thuật quan trọng lĩnh vực bảo mật có tác dụng cô lập các ứng dụng hạn chế tối đa các phần mềm độc hại không làm hỏng hệ thống máy tính hay cài các mã độc vào các hệ thống thật trong quá trình phân tích.
Ví dụ cho vai trò của Sandbox là ngay trên trình duyệt web mà bạn sử dụng hàng ngày. Các trang web bạn truy cập sẽ được chạy trong một môi trường Sandbox, website sẽ bị hạn chế và chỉ được chạy trong trình duyệt cũng như chỉ can thiệp vào một phần nhỏ tài nguyên hệ thống. Chúng không được phép sử dụng webcam hay truy cập vào dữ liệu trên máy tính nếu bạn không cho phép. Giả sử các trang web không bị giới hạn thì khi bạn vô tình truy cập vào các website chứa mã độc, nguy cơ máy tính của bạn bị tấn công là rất cao.
Để đi vào chi tiết hôm nay chúng ta hãy cũng tìm hiểu về Cuckoo Sandbox – một công cụ mã nguồn mở mạnh mẽ bạn có thể tự mình dựng và tùy biến theo yêu cầu của bản thân
Tổng quan về Cuckoo Sandbox
Cuckoo Sandbox là một công cụ phân tích các mã độc một cách tự động. Bao gồm nhiều module, component hoạt động để thu thập các hành vi, thông tin của mã độc.
Cuckoo Sandbox có thể phân tích nhiều loại file khác nhau như: exe, MS office, pdf, emails… Hay các trang web độc hại trong môi trường ảo hóa được dựng từ trước: Windows, Linux, Mac OS hay Android…
Là một phần mềm mã nguồn mở, chúng ta hoàn toàn có thể tùy chỉnh các phần của quá trình phân tích, xử lý kết quả và báo cáo.
Luồng hoạt động
Đầu tiên chúng ta hãy cùng tìm hiểu một chút về luồng hoạt động cơ bản của Cuckoo Sandbox xem quy trình hoạt động của công cụ này nhé:
Hình 1 Luồng hoạt động cơ bản của Cuckoo Sandbox
Cuckoo Sandbox sẽ cung cấp một giao diện cho phép submit các file hoặc URL, khi đó một entry mới và task ID sẽ được tạo trong cơ sở dữ liệu của Cuckoo. Entry này chứa thông tin về target và các tùy chọn phục vụ cho việc phân tích với task tương ứng.
Thành phần Scheduler sẽ kiểm tra thường xuyên xem có máy ảo nào khả dụng không, nếu có, nó sẽ tìm kiếm các task đang trong trạng thái pending. Sau đó, task có độ ưu tiên cao hơn sẽ được chọn và nó sẽ được chuyển cho Analysis Manager quản lý.
Analysis Manager sẽ chọn các máy ảo khả dụng để bắt đầu phân tích các task này.
Result Server sau đó sẽ được thông báo có task mới đang được thực thi để thu thập thông tin các dữ liệu phục vụ báo cáo.
Trước khi máy ảo khởi động, tất cả các auxiliary module sẽ được chạy, khi đó, analyzer, monitor, configuration và target được tải vào trong máy ảo thông qua agent và được quản lý bởi Guest Manager. Lúc này, analyzer được chạy bởi agent và lần lượt thực thi trên máy ảo. Trong khi target được thực thi monitor và analyzer sẽ thu thập các thông tin và gửi về cho Result Server tổng hợp.
Trên máy host, Analyst Manager chờ cho đến khi Guest Manager xác định target đã chạy xong hay chưa bằng cách kiểm tra analyzer đã dừng hay timeout chưa. Khi target chạy xong, Analyst Manager sẽ dừng máy ảo và tất cả các auxiliary module. Nếu target ở trạng thái terminated, các module sẽ thu thập các thông tin, hành vi để xử lý và tả về kết quả có thể sử dụng. Các kết quả này sẽ được kiểm tra với các signature có sẵn.
Cuối cùng các reporting module sẽ xử lý kết quả và lưu trữ theo định dạng JSON vào MongoDB để giao diện web hiển thị kết quả cho người dùng
Có lẽ sẽ có một số khái niệm mà các bạn chưa thể hiểu ngay được trong luồng hoạt động này, nhưng đừng lo lắng rất nhanh thôi chúng ta sẽ tìm hiểu rõ hơn về các thành phần của Cuckoo
Các thành phần của Cuckoo Sandbox
Task Scheduler:
đây là một trong những thành phần được chạy liên tục. Nó được dùng để khởi tạo các machinery module (Virtual Box, VMWare…) và chạy các task đang trong trạng thái pending nếu có đủ tài nguyên. Scheduler liên tục kiểm tra các máy ảo có sẵn, nếu có, nó sẽ tìm kiếm các task pending và thực thi.
Analyst Manager:
thành phần này được khởi động bởi Task Scheduler, thành phần này sẽ quản lý luồng phân tích của một task. Khi được khởi động, nó sẽ khởi động các auxiliary module cần thiết. Lúc này, luồng phân tích sẽ được xử lý bởi Guest Manager cho đến khi analyzer dừng hoặc task chạy hết timeout nhưng vẫn chưa phân tích xong.
Auxiliary Modules:
các module này cần được chạy trước khi khởi động máy ảo. Nó xử lý các task phải hoàn thành trước hoặc trong khi chạy máy ảo. Ví dụ như Sniffer là auxiliary module có chức năng để dump các network traffic trong khi một máy đang chạy.
Hình 2 Ví dụ một Auxiliary Module
Các module này được viết bằng python, bên cạnh các module có sẵn chúng ta hoàn toàn có thể tùy chỉnh hoặc viết thêm các module cần thiết.
Hàm start sẽ được chạy trước khi chạy máy ảo và bắt đầu phân tích. Hàm stop được chạy ở cuối quá trình phân tích, trước khi chạy quy tình xử lý và báo cáo. Các module này nằm trong thư mục: analyzer/windows/module/auxiliary
Hình 3 Folder auxiliary của Cuckoo Sandbox
Ví dụ với module procmon.py, hàm start sẽ lấy đường dẫn của Procmon, kiểm tra xem công cụ này có đang tồn tại trên máy ảo hay không và chạy tiến trình này hoặc thông báo công cụ đang không có sẵn trên máy ảo:
Hình 4 Hàm start của procmon module
Đối với hàm stop sẽ thực hiện kết thúc tiến trình procmon và chuyển file log của procmon sang định dạng XML sau đó gửi đến host
Hình 5 Hàm stop của procmon module
Machinery Modules:
Các module này sẽ tương tác với các lớp ảo hóa (hypervisor) hoặc máy chủ vật lý để thực hiện bật tắt hoặc khôi phục máy ảo về một restore point đã tạo sẵn. Chúng ta có thể tùy chỉnh cấu hình để chạy các công nghệ ảo hóa tùy ý như VMWare, KVM, VirtualBox…
Bắt đầu từ phiên bản 0.5 trở đi các machinery module đều sử dụng LibVirt giúp cho việc quản lý dễ dàng hơn. Class LibVirtMachinery nằm trong file: cuckoo/common/abstracts.py
Để cấu hình thêm các công nghệ ảo hóa khác chúng ta sẽ kế thừa từ class này và cung cấp phương thức kết nối tới máy ảo.
Hình 6 Lớp kế thừa từ LibVirtMachinery
Các công nghệ ảo hóa được Libvirt hỗ trợ có thể được kiểm tra qua lệnh virsh -V
Hình 7 Các lớp ảo hóa được LibVirt hỗ trợ
Guest Manager:
Guest Manager có trách nhiệm liên lạc với các agent, đóng vai trò kiểm tra xem các máy ảo đã được khởi động thành công chưa. Sau đó sẽ thực hiện tải các file liên quan và khởi động analyzer. Sau khi analyzer đã chạy, Guest Manager sẽ đợi và liên tục kiểm tra analyzer đã hoàn thành phân tích hay chưa, nếu hết thời gian timeout, nó sẽ buộc analyzer dừng lại
Cuckoo Agent:
Cuckoo Agent là một HTTP Server đơn giản nằm trong máy ảo và được khởi động ngay khi máy ảo được bật. Agent có trách nghiệm nhận các file cần phân tích đưa vào máy ảo và khởi chạy analyzer để thực hiện phân tích.
Analyzer:
Analyzer cũng là thành phần được chạy bên trong máy ảo. Nó chứa các logic và support module cần thiết cho luồng phân tích sẽ được thực hiện trong máy ảo. Các support module sẽ khác nhau và được Analyzer chủ động lựa chọn các theo hệ điều hành được chỉ định.
Khi được chạy, analyzer sẽ xử lý các cấu hình mà nó nhận được, bao gồm các thông tin về target, URL hoặc đường dẫn đến các tệp liên quan trên máy ảo thực thi mã độc. Mỗi target được thực thi bằng cách sử dụng analyst package.
Analyst Package:
Analyst package chứa các thông tin để mở target. Ví dụ: lựa chọn trình duyệt nào để mở 01 URL hay sử dụng phần mềm nào để mở các file docx (MS Word, Office 365…), file zip (winrar, 7zip…)
Analyst package sẽ được cung cấp khi submit target. Nếu không có, analyzer sẽ tìm các analyst package phù hợp nhất thông qua thông tin của target trong file cấu hình.
Chúng ta có thể tạo mới các analyst package để thực thi ác chức năng riêng tùy ý. Đường dẫn đến analyst package nằm ở: analyzer/windows/module/package
Hình 8 Các analyst package cơ bản
Ví dụ đối với một file analyst package mở các file exe sẽ có hàm “start” khởi chạy tiến trình xử lý tên ứng dụng và đường dẫn thực thi trong máy ảo, sau đó sẽ thực thi ứng dụng này:
Hình 9 Hàm mô tả các hành động thực hiện khi chạy một file .exe
Hàm “execute” được gọi từ “start” sẽ kiểm tra trạng thái, thực thi chương trình độc hại sau đó inject các dll vào trong chương trình này:
Hình 10 Nội dung hàm “execute” thực thi file .exe
Result server:
Trước khi máy ảo chạy, Analyst Manager sẽ đăng ký task ID và IP với Result Server, thành phần này chịu trách nhiệm xử lý các luồng dữ liệu đến (incoming data stream) và lưu trữ các stream này theo đúng định dạng
Processing Modules:
Sau khi máy ảo dừng lại, các dữ liệu về hành vi được thu thập và cần xử lý. Processing Module sẽ xử lý các dữ liệu này và so sánh với các signature để hiện thử cho người dùng dưới dạng báo cáo. Ví dụ việc dịch các syscall về định dạng có thể đọc, tìm kiếm được; thực hiện phân tích tĩnh, trích xuất các network stream và tìm kiếm các dấu hiệu bất thường trong memory dump của các tiến trình.
Một processing module sẽ kế thừa class Processing, trong đó hàm “run” sẽ thực thi nội dung cần xử lý.
Hình 11 Hàm run cơ bản của Processing Module
Cuckoo chứa rất nhiều các processing module mặc định, các module này sẽ được gọi đến khi kết thúc quá trình phân tích, chúng sẽ được thực thi theo thứ tự bảng chữ cái.
Signatures:
Signature được chạy sau khi quá trình xử lý (processing) hoàn tất. Nếu có bất kỳ signature nào trùng khớp sẽ được đưa vào kết quả đầu ra. Sau đó các report module sẽ được chạy, lưu trữ các kết quả khác nhau ở các định dạng khác nhau, định dạng phổ biến được sử dụng là JSON và lưu trữ trong cơ sở dữ liệu MongoDB.
Các signature giúp đơn giản hóa việc giải thích kết quả phân tích, tự động xác định các mẫu mã độc hại:
– Xác định một họ phần mềm độc hại dựa trên hành vi
– Phân biệt các thay đổi mà phần mềm thực hiện trên hệ thống
– Phân loại các mẫu mã độc là không xác định, hoặc chưa biết đến…
Để cập nhật các signature, ta cần chạy lệnh: cuckoo community để cập nhật các signature mới nhất được cộng đồng người dùng đưa ra. Các signature sẽ được đặt trong folder cuckoo/cuckoo/signature
Hình 12 Ví dụ một signature
Report Modules:
Cuối cùng khi quá trình báo cáo kết thúc, task sẽ được đánh dấu là reported và hiển thị kết quả cho người dùng.
Các file config cần lưu ý sẽ bao gồm:
– Cuckoo.conf: cấu hình các thông số cơ bản nhất của cuckoo
– Auxiliary.conf: cấu hình các auxiliary module sẽ được sử dụng
– Machinery.conf: cấu hình các tùy chọn cho phần mềm ảo hóa
– Processing.conf: cấu hình các processing module sẽ được sử dụng
– Reporting.conf: bật hoặc tắt cá định dạng của báo cáo
Kết luận
Trong nội dung lần này chúng ta đã đi qua những khái niệm về các thành phần cũng như luồng hoạt động cơ bản của Cuckoo Sandbox, trên thực tế, có rất nhiều các phiên bản Cuckoo Sandbox được public trên Internet, tuy nhiên, việc sử dụng các phiên bản này có một số hạn chế như sau:
– Các mẫu mã độc phức tạp cần cấu hình điều kiện thực thi cụ thể không thể được phân tích, VD các mẫu mã độc kiểm tra một registry hoặc tiến trình đã tồn tại trước đó để thực thi hay các mẫu có thời gian delay để thực hiện sẽ không cho ra kết quả trên những trang public do chúng ta không thể tùy biến các cấu hình này
– Các mẫu mã độc có tính nhạy cảm cao, đặc biệt là trong các cuộc tấn công APT có thể chứa thông tin liên quan đến đơn vị của chúng ta và không nên được public cho một bên thứ ba
– Do là một dịch vụ public, có thể có nhiều người sử dụng, các kết quả sẽ bị pending khá lâu trước khi có thể thực thi và thời gian được cấu hình cho một mẫu chạy cũng sẽ có giới hạn nhất định dẫn tới các hành vi có thể không được ghi nhận đầy đủ.
Do đó, có thể thấy các phiên bản Cuckoo dựng lên trên Internet chủ yếu phục vụ mục đích học tập và nghiên cứu, để sử dụng cho các hoạt động thực tế là tương đối khó khăn.
Nội dung của ngày hôm nay có lẽ cũng đã hơi dài, trong phần sau chúng mình sẽ mang tới cho các bạn những khó khăn trong quá trình tự dựng cho bản thân một hệ thống Cuckoo Sandbox cũng như cách mà chúng ta có thể khắc phục nó đặc biệt là cách để có thể tùy chỉnh các tham số cho phù hợp với các mẫu mã độc tinh vi có những hành vi anti-sandbox. Cảm ơn các bạn đã theo dõi và mong được gặp lại các bạn trong những phần tiếp theo, rất sớm thôi!