Phát triển phần mềm độc hại - The Dark Side: Phần 1

1720
11-06-2018
Phát triển phần mềm độc hại - The Dark Side: Phần 1

Bài viết dưới đây xin được giới thiệu tới các bạn về quá trình phát triển một phần mềm độc hại. Tuy nhiên trước đó cũng cần phải lưu ý nghiên cứu kỹ trước khi bắt đầu tiến hành thực hiện.

Nếu bạn chưa hiểu kỹ về phần mềm độc hại thì có thể tham khảo bài viết của Bizfly Cloud : Malware (phần mềm độc hại) là gì? để có thể hiểu rõ hơn nhé!.

Viết một phần mềm độc hại hoàn toàn không thể phát hiện (FUD) là một kỹ năng tuyệt vời nên có nếu bạn đang ở trong vùng cybersecurity, đặc biệt là Red Teaming. Folks có xu hướng sử dụng Metasploit kết hợp với Veil-Evasion hoặc PE injectors như LordPE hoặc Shelter, để tạo ra một nhị phân có thể bỏ qua phần mềm diệt virus. Đôi khi điều này có hiệu quả và cũng đôi khi không. Điều tệ nhất có thể xảy ra khi chạy một hoạt động của Red Team là việc nhị phân bị AV phát hiện và đưa ra một cảnh báo tới nhóm SOC/Phản hồi sự cố.

Một lý do nữa để viết phần mềm độc hại FUD từ scratch là loại bỏ nhu cầu dành cho Metasploit, vì nó chỉ có thể xử lý một kết nối tại một thời điểm. Trong khi đó, trong quá trình red teaming, tôi cần một Máy chủ CnC có thể điều khiển tất cả các máy được sinh ra với nhau, hay đơn giản mà nói đó là Botnet.

Do đó, blog này sẽ là blog giới thiệu để khởi động chương trình phát triển phần mềm độc hại. Trong blog tiếp theo tôi sẽ giới thiệu về các kỹ thuật liên quan. Dưới đây là một cái nhìn thoáng qua về toolkit sau cùng:

Phát triển phần mềm độc hại - The Dark Side: Phần 1  - Ảnh 1.

Malware CnC Server

Trước hết, phần mềm độc hại chỉ là một đoạn mã giống như mọi chương trình khác. Ví dụ, nếu bạn muốn viết một keylogger không thể phát hiện, trước tiên bạn nên kiểm tra xem một trò chơi bình thường sẽ hoạt động như thế nào trong Windows. Ví dụ: mỗi khi bạn nhấn một phím trong trò chơi -> lên, xuống, sang trái, phải, ctrl, v.v., một nút điều khiển Windows sẽ chụp phím tắt và thực hiện một số thao tác theo nó. Vì vậy, nếu tôi chỉ có thể viết một chương trình với cùng một mã chạy trong nền và chỉ sửa đổi một chút để lưu trữ các tổ hợp phím trong bộ nhớ thay vì thực hiện một số hoạt động dựa trên trò chơi, khi đó nó sẽ trở thành một keylogger. Sau đó tôi có thể chuyển đổi nó thành một mô-đun và đẩy nó vào trình reverse shell để kết xuất các lần nhấn phím từ một máy từ xa.

Tuy nhiên, có một vài điều kiện tiên quyết trước khi tiến hành nghiên cứu sâu về phần mềm độc hại. Chúng ta cần nghiên cứu thật kỹ trước khi chúng ta bắt đầu. Dưới đây là một tập hợp các câu hỏi quan trọng nhất trước khi bạn bắt đầu viết phần mềm độc hại:

1. Bạn muốn viết loại phần mềm độc hại nào?

         1. Có phải một cái gì đó lây lan tự động như một worm không

         2. Hay Trojan Horse?

         3. Hay một cái gì đó tự động hóa một số nhiệm vụ khi tiến hành thực thi hơn là một reverse shell

         4. Hay reverse shell mô phỏng Red Team/Phishing/Targeted Attack

         5. Hoặc có thể là bind shell 

2. Giao thức nào sẽ được sử dụng - TCP/ HTTP/ UDP hay HTTPS?

3. Tôi muốn viết bằng ngôn ngữ nào?

Dưới đây là một số ưu và nhược điểm của các ngôn ngữ lập trình khác nhau khi triển khai FUD đầu tiên của bạn:

Ngôn ngữ

Độ khó

Khả năng mang theo được

Khả năng mở rộng

Kích cỡ

Hiệu suất

Sự phát hiện

Python / Ruby

Dễ

Lớn

Chậm vì tốn quá nhiều phí tổn điều khiển

Dễ vì quá nhiều thư viện

Golang

Trung bình

Lớn

Nhanh hơn Python/

Ruby

Trung bình vì không có quá nhiều người viết trong Go

C#

Trung bình

Không

Lớn

Chậm do quá phí tốn điều khiển thư viện

Khó

C/C

Khó

Dễ - vì bản chất là cấp thấp

Nhỏ

Nhanh

Khó

Assembly/

Shellcoding

Khó nhất

Dễ

Không

Nhỏ nhất

Nhanh nhất

Khó


Chúng tôi sẽ sử dụng kết nối TCP trong toàn bộ blog, tuy nhiên phần mềm độc hại mà chúng tôi sẽ viết có thể dễ dàng được chuyển sang HTTP. Để đi vào mục đích thật sự của blog này, chúng tôi sẽ viết các phần mềm độc hại và phần mềm độc hại không mong muốn, vì việc viết phần mềm độc hại sẽ yêu cầu chúng tôi đi sâu vào lắp ghép, tạo shellcode và gửi nó vào bộ đệm để thực hiện bước tiến hành.

Nhưng trong trường hợp tôi muốn viết một cách nhanh chóng và đơn giản, tôi sẽ viết các chương trình này trong C và C và sử dụng Python 3 cho code server. Các tệp nhị phân dựa trên C / C có kích thước rất nhỏ và khi viết handler/ server cho phần mềm độc hại, chúng ta sẽ cần một thứ nhanh hơn để viết, đó chính là Python3. Tôi khuyên bạn không nên viết các phần mềm độc hại trong python hoặc ruby, vì kích thước được biên dịch của tệp nhị phân lên tới 1 megabyte trong khi đó phần mềm độc hại mà chúng tôi sẽ viết chỉ dưới 50 kilobyte.

Điều kiện tiên quyết

Dưới đây là một số kỹ năng cần có mà tôi nghĩ rằng là cần thiết để có thể hiểu đầy đủ code được viết trong suốt toàn bộ blog:

1.C / C [Phần mềm độc hại / Bot]

        1. Con trỏ [để lưu trữ dữ liệu trong bộ nhớ ở phía nạn nhân]

    2. TCP Sockets [reverse shell]

    3. Thao tác bộ đệm trên heap [đọc các tệp lớn]

 2. Python 3 [Code server/handler]

         1. Đa xử lý / Đa luồng [Handler cho các đa bot]

     2. Xử lý các kiểu dữ liệu với cấu trúc dữ liệu

     3. TCP Socket

     4. Xử lý tín hiệu các sự cố tác động

3. WINAPI [Windows Socket]

4. Trình biên dịch Mingw-g flag/tùy chọn [để giảm kích thước của tệp nhị phân]

5. Elasticsearch và Kibana [để hiển thị trực quan các hệ thống / người dùng bị xâm nhập, các đặc lợi có được từ việc đánh giá Red Team]

Các công cụ cần thiết để thiết lập môi trường kiểm tra phần mềm độc hại:

        1. Linux [Ưu tiên Debian - sẽ chạy Máy chủ xử lý phần mềm độc hại]


       Tải về theo link - https://www.debian.org/devel/debian-installer/


    2. Windows [Máy ảo - để kiểm tra nhị phân]

    3. Visual Code [để viết cả mã Python và C ]

           Tải về theo link - https://code.visualstudio.com/download


Nếu máy nguồn của bạn là Linux (như của tôi), nó sẽ chạy mã Windows, tôi khuyên bạn nên cài đặt trình biên dịch chéo i686-w64-mingw32-gcc để biên dịch mã windows trong Linux.

Cài đặt trình biên dịch chéo Mingw trong Debian:

$ apt-get install mingw-w64-common mingw-w64-i686-dev mingw-w64-tools mingw-w64-x86-64-dev

Tuy nhiên, nếu bạn định sử dụng hệ thống Windows để thực hiện việc triển khai chương trình, bạn có thể sử dụng trình biên dịch Mingw tại đây - https://sourceforge.net/projects/mingw/files/

Chương trình làm việc của toàn bộ Blog

Các phần tiếp theo của loạt bài này sẽ bao gồm:

    1. Viết một trình reverse shell hoàn toàn không thể phát hiện dựa trên TCP trong C / C

    2. Viết một trình bind shell dựa trên TCP hoàn toàn không thể phát hiện trong C / C

    3. Phần mềm độc hại phải tương thích với tất cả các phiên bản của windows [Windows Xp / 7/8/10/2012/2016]

    4. Lập trình một trình xử lý hỗ trợ nhiều kết nối trong Python3 [Kiểu Botnet]

    5. Sử dụng Elasticsearch và Kibana khi xử lý nhiều kết nối bot để hiển thị trạng thái và đặc quyền của chúng. 


Toolkit/server phần mềm độc hại cuối cùng sẽ trông như thế này:

Building a C2 Server with FUD payload/malware

Khi bạn đã thiết lập tất cả các điều kiện tiên quyết, đã đến lúc bắt đầu liệt kê tất cả các tính năng mà bạn muốn phần mềm độc hại của mình chạy:

    1. Người dùng nào bị nhiễm phần mềm độc hại (whoami)

    2. In thư mục làm việc hiện tại (pwd)

    3. Liệt kê các tệp trong thư mục hiện tại (ls)

    4. Di chuyển / Sao chép tệp / thư mục (mv / cp)

    5. Tạo tệp / thư mục (touch / mkdir)

    6. Xóa tệp / thư mục (rm / rmdir)

    7. Thực hiện lệnh Windows hoặc tệp nhị phân / tệp khác.

    8. Download file

    9. Upload file

    10. Kết nối lại vào khoảng thời gian ngẫu nhiên với server CnC

    11. Ẩn nhị phân khi thực hiện

    12. Chuyển đổi giữa nhiều trình reverse shell được kết nối

    13. Gửi lệnh đến nhiều Bots


Hãy nhớ rằng, tính năng số 7 chỉ chạy một cách ngẫu nhiên, lý do là mỗi khi bạn thực thi lệnh dựa trên Windows, nó tạo ra một quy trình và tạo điều kiện dễ dàng cho Windows ATP hoặc các giải pháp khác dựa trên agent như Crowdstrike / Sysmon nhằm theo dõi phần mềm độc hại đã làm những gì. Tất cả các tính năng được đề cập ở trên sẽ được viết bằng cách sử dụng các cuộc gọi API C / C của windows hoặc thứ gì đó được viết đơn thuần từ scratch.

Trong phần tiếp theo, chúng ta sẽ bắt đầu viết một reverse shell cmd-based đơn giản dựa vào netcat, và sau đó sửa đổi nó để kết nối với một server C & C Python.

Link gốc: http://niiconsulting.com/checkmate/2018/02/malware-development-welcome-dark-side-part-1/

                                                                        Nguồn: Bizfly Cloud chia sẻ    

>> Có thể bạn quan tâm:  Phát triển phần mềm độc hại - Dark Side: Phần 2-1

SHARE