Chủ Nhật, 21 tháng 7, 2013

Xây dựng lab phục vụ cho phân tích động malware

Malware labs có thể cực kì đơn giản hoặc rất phức tạp. Tất cả phụ thuộc vào resources hiện có của bạn (ví dụ như hardware, networking equipment, Windows licences, và những thứ khác), phụ thuộc vào bao nhiêu công việc phân tích bạn muốn tự động hóa, bao nhiêu options bạn muốn có. Bài viết này chỉ cho bạn cách set up một lab nhỏ bao gồm các mục tiêu ảo (virtual targets) và các mục tiêu vật lý (physical targets) sử dụng Internet thực hoặc mô phỏng. Hình phía dưới shows một ví dụ của môi trường lab.
Mô hình lab trên gồm các thành phần sau:

  • Physical targets: Đây là các máy tính xài hệ điều hành Windows, chúng sẽ đảm nhiệm việc thực thi malware. Đừng lo lắng về việc lây nhiễm malware lên các máy vật lý. Bạn có thể ngăn chặn không cho chúng lây malware lây nhiễm với Deep Freeze , hoặc bạn cũng có thể re-image chúng một cách nhanh chóng qua các giải pháp như Truman và FOG. Khi FOG  d được thảo luận trong Recipe 7-8, những physical targets được coi như là FOG clients. Dĩ nhiên, các máy tính thật không phải là một yêu cầu, nhưng thật là tốt khi ta có chúng trong trường hợp ta cần phân tích VM-aware malware. 
  • Virtual targets: Đây là các máy ảo chạy Windows bạn cũng sẽ thực thi malware trên các máy này. Mỗi khi bạn xong việc, bạn có thể phục hồi chúng về trạng thái trước khi bị lây nhiễm. Chúng tôi khuyến nghị bạn nên có ít nhất một hoặc hai VMs running các phiên bản khác nhau của Windows. Trong bài viết này, khi nhắc đến virtual targets tôi còn sử dụng hai thuật ngữ là virtual machine guests VMs
  • Controller: Đây là một máy tính vật lý chạy Linux. Nó runs imaging software để điều khiển physical targets, các phần mềm máy ảo (như là VMware hoặc VirtualBox) để điều khiển virtual targets, và các chương trình để điều khiển, log, hoặc mô phỏng truy cập mạng. Xuyên suốt bài viết này, tôi nhắc tới controller như là FOG server và virtual machine host, phụ thuộc vào vai trò của nó trong vấn đề ta thảo luận. 
Thông thường chúng ta chỉ xài một laptop, nhưng với những yêu cầu phía trên đòi hỏi ta phải có 2 máy thật (Physical targets và Controller). Bạn có thể tạo một lab dựa trên một máy tính duy nhất. Tôi khuyến cáo bạn nên sử dụng Linux như là hệ điều hành của controller, nhưng nó không phải là yêu cầu, chỉ là lựa chọn của bạn mà thôi. Bạn cũng có thể tạo một portable, personal lab trên các máy tính chạy Windows hoặc Mac OS X. Tuy nhiên, bởi vì chúng ta không thể cung cấp instructions trên mọi cấu hình có thể, tôi sẽ sử dụng setup trong Figure 7-1 như là một mô hình chung trong bài viết này và tôi sẽ chỉ ra những chỗ bạn cần điều chỉnh nếu lab của bạn khác với cách thức chung.

Mạng trong mô hình này được chứa trong một LAN duy nhất bởi vì đó là những gì người ta sử dụng nhiều nhất. Mặc dù không được chỉ ra trong Figure 7-1, tôi đang giả định rằng firewall có một địa chỉ IP bên ngoài để giao tiếp với Internet. Nêu bạn có quyền truy nhập đến một mạng lớn hơn hoặc bạn có nhiều địa chỉ external IP lấy từ ISP của bạn, khi đó bạn có thể gắn cho mỗi target những IP để nó có thể được route.

Trước khi bắt đầu với việc setting up một lab , luôn nhớ trong đầu rằng việc setting up một môi trường an toàn là rất quan trọng, nếu bạn không muốn compromise hệ thống host và controller của bạn. Virtual machines chia sẻ rất nhiều resources với host computer và một cách nhanh chóng có thể trở thành một nguy cơ an ninh nếu bạn cấp phép cho chúng. Dưới đây là một vài điểm giúp bạn ngăn chặn malware "chạy thoát" khỏi môi trường bị cô lập đến nơi mà chúng bị hạn chế:

  • Đảm bảo rằng phần mềm máy ảo bạn đang sử dụng đã được cập nhật. Các lỗ hổng trong máy ảo có thể dẫn đến việc lây nhiểm malware lên host của bạn.
  • Cấu hình firewall trên host của bạn để drop incoming packets đến từ targets. 
  • Nếu bạn không muốn cho malicious code mà bạn run trong target có thể đi vào Internet, chắc chắn rằng bạn đã disable virtual network card, sử dụng host-only networking configuration, hoặc chứa traffic với simulation scripts (sẽ thấy trong Recipe 7-3)
  • Disable shared folders giữa host và target hoặc làm cho chúng read-only.
  • Ngăn chặn target truy nhập tới bất cứ shared devices hoặc removable media nào, ví dụ USB drives được cắm vào host của bạn. 
  • Đừng tùy chỉnh (customize) target system của bạn với bất cứ thông tin nào, nếu bị leaked bởi một trojan, các thông tin này có thể được sử dụng để nhận dạng bạn. 
Bạn cần có kiến thức về TCP/IP, Linux system administration, và Windows system administration. Bạn cần biết sử dụng máy ảo như VMware hoặc Virtual Box. Bạn cần phải quen thuộc với forensic tools, cũng như là khả năng tùy chỉnh Perl và Python scripts để phù hợp với nhu cầu của bạn. 

Networking

Cấu hình mạng hợp lý trong môi trường lab của bạn là một bước quan trọng cho việc capturing và phân tích traffic mà malware sinh ra. Việc giải quyết thách thức này yêu cầu sự hiểu biết về các network settings khác nhau mà hầu hết các sản phẩm máy ảo cung cấp. 
Tham khảo Table 7-1, đây là một bảng tổng kết về các chế độ mạng: host-only, NAT/shared, và bridged. 

Ba modes được định nghĩa như sau:
  • Host-only mode: Mode này tạo ra một private LAN được chia sẻ giữa host và VMs của nó. VMs không thể giao tiếp với các hệ thống bên ngoài- những hệ thống mà có thể tốt hoặc xấu, dựa trên mục đích của bạn. Đó là rất tệ nếu bạn muốn cho phép malware liên hệ (contact) với các sites thực tế trên Internet, bởi vì nó sẽ không hoạt động, nhưng một điều tốt đó là nếu bạn muốn chứa traffic trong môi trường sandbox của cá nhân bạn . 
  • NAT/Shared mode: VMs contact với máy khác trong LAN hoặc Internet, nhưng các kết nối thường có địa chỉ IP nguồn là địa chỉ IP của host. Các máy khác khổng thể khởi tạo các kết nối đến ngược trở lại VMs nếu không có cấu hình port-forwarding trên máy host. 
  • Bridge mode: VMs chia sẻ physcal Ethernet adaptor của host, nhưng chúng các địa chỉ IPv MAC của riêng chúng. VMs xuất hiện trong cùng local subnet với host. Đó là cấu hình duy nhất cho phép các máy khác tạo ra các kết nối gửi đến VMs. Nó còn là mode duy nhất cho phép các máy bên ngoài, như là router hoặc firewall, để phân biệt giữa traffic sinh ra bởi host và traffic sinh ra bởi một VM trên host. 
Chúng tôi khuyến nghị sử dụng bridged mode cho các VMs của bạn và gán cho chúng các địa chỉ IP vì vậy bạn mới có thể xác định được VM nào chịu trách nhiệm cho traffic mà bạn capture. Dĩ nhiên, nếu bạn chỉ có một VM và không có nhu cầu cho incoming connections đến VM của bạn, khi đó NAT/Shared mode sẽ thích hợp. 

RECIPE 7-1: ROUTING TCP/IP CONNECTIONS IN YOUR LAB

Trên máy của bạn, đối với controller trong sơ đồ ở đầu bài, sử dụng ifconfig để xác định địa chỉ IP của nó. Sau đó sử dụng ipconfig trên Windows targets của bạn để làm điều tương tự. Kiểm tra tất cả các máy nằm chung một subnet và đảm bảo rằng bạn có thể ping controller từ Windows targets. Để thuận tiện cho việc tham khảo, Table 7-2 cung cấp các giá trị có liên quan lấy từ lab của tôi, những thứ này sẽ còn liên quan trong các phần sau. 

Note: Nếu bạn bị hạn chế về mặt hardware, bạn có thể sử dụng máy ảo Linux như là controller. Trong trường hợp đó, bạn sẽ cần tối thiểu 2 VMs - một để running Windows (the target) và cái kia để running Linux (the controller).

Thế nào, bây giờ bạn đã kiểm tra được tính liên thông của mạng giữa controller và targets của bạn, bạn sẽ cần tạo ra một vài thay đổi để tất cả traffic sinh ra bởi programs trên target "đổ" vào controller. Chúng ta sẽ thảo luận một vài cách thức để thực hiện điều đó, vì vậy bạn có thể đánh giá được những điểm mạnh và điểm yếu, nhưng tôi thực sự khuyên bạn nên sử dụng chỉ một cách thức đó là kĩ thuật IP routing. 


Redirecting DNS

Nếu bạn đã biết DNS hostname của server(s) được liện hệ với malware, bạn có thể modify hosts file để điều hướng các kết nối đến controller's IP. Hosts file được đặt trong thư mục %SYSTEMROOT%\config\drivers\etc và nó được định dạng như sau:

# redirect DNS to the controller’s IP
172.16.176.130 commandserver.com

Entry phía trước forces processes trên target machine để kết nối với địa chỉ IP của controller sau khi resolving commandserver.com với DNS. Nếu bạn có một process trên controller của bạn lằng nghe incoming connections, bạn có thể log traffic và nhìn xem malware có thể làm gì khi kết nối thành công đến server thực sự commandserver.com.

Có một vài điểm yếu với phương thức này. Thứ nhất, bạn sẽ không thường xuyên "chắc ăn" biết được hostname mà một sample contact đến, và giả sử nếu bạn biết được đi nữa, thêm các entries đến host files mỗi lần phải thực hiện một cách thủ công và tẻ nhạt. Thứ hai, nếu malware resolves domains sử dụng DNS_QUERY_NO_HOSTS_FILE flag trong DnsQuery, khi đó nó sẽ bypass your hosts file entries.

Một lựa chọn khác là bạn có thể tạo một DNS server cho chính mình và cấu hình nó để trả về IP của controller cho một vài hoặc tất cả hostnames mà target cố gắng để resolve. Sử dụng kĩ thuật này, bạn không phải edit thủ công hosts file, nhưng malware vẫn có thể bypass setup của bạn thông qua việc không thực hiện DNS lookups và contacting với một hệ thống bằng IP của nó. Malware có thể lờ đi DNS settings trên target machine của bạn và resolve hostnames sử dụng một public DNS server thay thế (cho ví dụ, Google's open DNS).

Redirecting IP with Routing

Nếu bạn thay đổi thiết lập mạng trên target của mình, trỏ gateway của nó vào controller của bạn, sau đó tất cả traffic sẽ hit controller của bạn mặc kệ malware contacts với một hệ thống bởi DNS name hoặc IP. Nếu bạn có một quyết định quan trọng cần phải quyết - Bạn có muốn log hay là forward packets đến real servers trên Internet hay là bạn muốn redirect packets đến một hệ thống giả hoặc các dịch vụ mô phỏng ?

Nếu bạn forward packets đến real servers, bạn có thể biết được chính xác hơn những cư sử của malware trong tự nhiên, nhưng có một mối lo ngại đó là bạn có thể làm lộ IP của bạn với bad guys. Nếu bạn sử dụng một bộ phần mềm mô phỏng, bạn có thể tạo hoàn toàn một sandnet chứa chính nó, nhưng bạn sẽ không thực sự quan sát được malware trong môi trường tự nhiên.

Để route tất cả target machine's traffic thông qua controller, làm theo các bước sau:

  1. Trên controller chạy Linux, enable IP forwarding trong kernel bằng việc thực hiện command sau như root:
          $ sudo su
          # echo 1 > /proc/sys/net/ipv4/ip_forward
    2.    Trên controller, đảm bảo rằng iptables default firewall policy cho phép forwarding packets,           như sau
          $sudo iptables - P FORWARD ACCEPT
    3. Quay lại target, cấu hình mạng cho nó sao cho default gateway trỏ đến controller. Bạn có thể 
          thực hiện điều này thông qua 2 cách. Cách thứ nhất yêu cầu gõ command sau trong cmd.exe
          C:\> route change 0.0.0.0 mask 0.0.0.0 172.16.176.130

         Bạn cũng thể sử dụng GUI, như trong Figure 7-2. 


 Với thiết lập như trên, bạn có thể tự tin để capture, redirect, hoặc interact với bất cứ traffic được sinh bởi Windows target machine. Sở dĩ tôi nói từ "tự tin" một cách công bằng bởi vì mặc dù chúng ta không bao giờ có thể nhìn thấy nó trong tự nhiên, malware có thể reconfigure default gateway trên target machine và gửi traffic xung quan controller. Khả năng để làm điều đó phụ thuộc vào nơi đặt controller của bạn. Malware còn cần phải biết IP của next-hop router mà nhận hoặc và forwards traffic; tuy nhiên, có rất nhiều thứ bạn có thể học được từ một trace route đơn giản. 

Recipe 7-2: CAPTURING AND ANALYZING NETWORK TRAFFIC

Tất cả traffic gửi từ / đến targets của bạn đổ xuống controller, bạn đã có thể khởi động tiện ích capture trên controller và nhìn packets trong thời gian thực. 

NOTE: 
Bên cạnh phương thức capturing packets, bạn có thể sử dụng một vài kĩ thuật khác:
  • Kết nối machines trên mạng của bạn đến một old hub nếu bạn có một cái, và sử dụng dụng một mode sniffer.
  • Plug sniffer của bạn vào trong một switch hoặc router để cho phép port mirroring.
  • Kết nối target machines đến controller của bạn thông qua crossover cable. 

Using WireShark's GUI 

WireShark là một công cụ phân tích giao thức mạng trên Windows, Linux, MAC OS X, trên các OS khác. Bên cạnh việc capturing packets, WireShark có thể thực hiện việc kiểm tra "sâu" hàng trăm giao thức, và xuất ra kết quả là pcap file, CSV, hoặc XML. Nó còn có khả năng filter mạnh mẽ. Nếu WireShark chưa được cài đặt trên controller của bạn, bạn có thể tải nó bằng cách running command sau:

  $ sudo apt-get install wireshark

Figure 7-3 shows WireShark's GUI. Bạn sẽ chú ý đến source address của DNS queries là 172.16.176.138 - target VM. DNS server hồi đáp lại queries là 172.16.176.2, trên mỗi cấu hình trong bước phía trước. Bạn có thể nhìn thấy được target resolved hostnames trong wikipedia.org google.com domains để giao tiếp với những servers này thông qua HTTP.

Using tshark

Nếu bạn thích các công cụ sử dụng command-line hơn (được khuyến khích cho việc phân tích tự động), bạn có thể sử dụng tshark , là một non-GUI version của Wireshark. Bạn có thể cài đặt nó như sau:

 $ sudo apt-get install tshark

Command sau đây shows cách để capture packets trên eth0 interface, tự động thoát ra sau 60 giây, và lưu packets vào output.pcap

 $ sudo tshark -i eth0 -a duration:60 -w output.pcap

Để đọc packets sử dụng cùng cách thức phân tích như GUI version của Wireshark, bạn có thể làm như sau:

 $ tshark -r output.pcap -V

Using tcpdump

tcpdump không bao gồm các phân tích giao thức mở rộng như Wireshark và tshark, nhưng nó cung cấp khả năng capture đáng tin và mạnh mẽ và các khả năng đọc trở lại. Nếu bạn cần cài đặt nó, sử dụng command sau:

 $ sudo apt-get install tcpdump

Command sau shows cách để capture packets trên eth0 interface đã được đánh đánh địa chỉ đến hoặc từ 172.16.172.138, và lưu tất cả bytes trong packet (thông qua việc thiết lập snaplen đến 0) trong output.pcap:

 $ tcpdump -i eth0 -s 0 -w output.pcap host 172.16.172.138

Từ khóa host là một trong nhiều BPF-style filters mà giúp cho bạn điều khiển chính xác những packets nào được lưu trong file của mình. Để có nhiều thông tin về BPF-style filters, gõ man tcpdump

Nếu bạn pass -r flag đến tcpdump, nó sẽ phân tích file packet capture được lưu.

 $ tcpdump -r output.pcap

Chúng tôi khuyến cáo bạn có thể pass -n flag để ngăn cho tcpdump khỏi thực hiện DNS lookups, những gì có thể tốn thời gian. Dĩ nhiên, nếu bạn muốn nhìn thấy DNS names thay cho IP addresses, đừng sử dụng -n flag.

Using snort IDS

Bạn có thể cài đặt Snort IDS lên controller của mình để cảnh báo bất cứ traffic đáng nghi nào gửi đến hoặc là gửi từ target machines trong khi malware đang running. Snort sẽ cho bạn một gợi ý tốt về các kiểu cảnh báo bạn sẽ nhìn thấy nếu một malware hay malware tương tự tồn tại trên mạng công ty. Commands sau tạo một simple Snort setup với Emerging Threats signatures trên controller của bạn:

 $ sudo apt-get install snort
 $ sudo wget -P /etc/snort/rules http://www.emergingthreats.net/rules/emerging-all.rules
 $ sudo echo 'include $RULE_PATH/emerging-all.rules' >> /etc/snort/snort.conf
 $ sudo /etc/init.d/snort start

Nếu bạn muốn kiểm tra xem mọi thứ thực hiện có thành công không hoặc nhìn xem command-line parameters startup script gửi đến Snort, khi đó bạn có thể view nó như sau:

 $ cat /proc/'pidof snort'/cmdline
/usr/sbin/snort –m 027 –D –d –l /var/log/snort –u snort –g snort –c \
/etc/snort/snort.conf –S HOME_NET=[172.16.176.0/24] –i eth0


Không có nhận xét nào:

Đăng nhận xét