Добавить модуль внутри песочницы cuckoo

для динамического анализа вредоносных программ я использую Автоматический Анализ Вредоносных Программ - Cuckoo Sandbox. Теперь я хочу добавить новые модули для анализа вредоносных программ. Я изучил документацию по разработке Cuckoo sandbox. Но в настоящее время я не могу добавить свой пользовательский скрипт для статического анализа вредоносных программ/образцов. Скрипты Python доступен здесь.

может ли кто-нибудь направлять меня, как я могу добавить больше модулей / сценариев анализа внутри модуля обработки песочницы кукушки. Если их любая статья доступна в сети, пожалуйста, поделитесь ею.

спасибо

2 ответов


сначала несколько слов о концепции.

согласно документации:

пакеты анализа являются основным компонентом песочницы Cuckoo. Они состоят из структурированных классов Python, которые при выполнении на гостевых машинах описывают как компонент анализатора кукушки должен проводить анализ.

Итак, пакет анализа несет ответственность за выполнение необходимых действий для обработки файл.

примеры (для гостей windows)

  • exe должен быть выполнен
  • A *.doc необходимо открыть с помощью Microsoft Word.
  • dll должна выполняться с помощью "C:\WINDOWS\system32\rundll32.exe"
  • html загружается с помощью Internet Explorer.
  • PDF пытаются открыть с помощью некоторой версии Acrobat Reader.
  • Etc ...

Итак, вы пишете пакет Analisys, чтобы рассказать кукушке, как чтобы открыть или выполнить файл. Модуль обработки для обработки файла и извлечения информации для отчета (отчетов) модулей.

если вы хотите выполнить static анализ, вам не нужно писать Пакет Analisis но Обрабатывать Модуль. Если вы хотите добавить новый поведенческий анализ, вам нужно реализовать и.

этот ответ касается написания модулей обработки, так как ваш вопрос о статическом анализе.

реализация модуля обработки кукушки

я использую последнюю версию документации. В документах я нашел много полезных вещей, другие вещи (например, как отобразить отчет модуля в интерфейсе html) я обнаружил себя в испытаний и ошибок и взлом кода.

внедрение модуля

чтобы быть модулем обработки, ваш скрипт должен соответствовать некоторым требованиям. Ниже вы увидите которые эти требования и как их собрать вместе, чтобы получить модуль обработки.

после завершения анализа Cuckoo вызовет все модули обработки, доступные в каталоге modules/processing/. Затем каждый модуль будет инициализирован и выполнен, а возвращаемые данные будут добавлены в структуру данных, которую мы будем называть Глобальный контейнерный. Этот контейнер просто большой словарь Python, который содержит все реферировать результаты, полученные всеми модулями, отсортированными по их определенным ключам.

результирующие данные вашего модуля обработки будут добавлены в глобальный контейнер, таким образом, другие модули (например, модули отчетов) могут получить доступ к этому информация.

базовый модуль обработки (назовем его simple_module) может выглядеть так:

# simple_module.py
from lib.cuckoo.common.abstracts import Processing

class SimpleModule(Processing):     # A class inheriting Processing.

    def run(self):                  # A run() function
        self.key = "simple_info"    # The name that will have the returned data in the global container.
        data = "This is the data returned by simple_module."
        return data                 # A set of data (list, dictionary or string etc.) that will be appended to the global container.
                                    # under the key secified in `self.key`.

куда поставить новый модуль.

есть несколько категорий модулей, если вы посмотрите на кукушку иерархия каталогов вы найдете каталог под названием modules и внутри некоторых каталогов:

  • вспомогательный -- Self explanatory
  • машинное оборудование -- модули для регулировать оборудование и виртуализацию.
  • обработка -- модули для обработки файлов (те, которые вы хотите добавить)
  • отчетность -- модули, необходимые для отчетности о результатах, полученных при обработке модулей
  • подписи -- это не claer для меня (я может иметь другое представление о том, что signature средства).

каталог, о котором вы должны заботиться, это: обработка. Там вы разместите свой новый модуль.

включение нового модуля

добавьте улице seccion как следующее :

[simple_module]
enabled = yes

как просмотреть результат?

после анализа необработанные результаты были обработаны и абстрагированы модулями обработки и глобальные контейнер генерируется (ref. Обработка Модули), он передается кукушкой всем доступным модулям отчетности, которые будут использовать его и сделают его доступным и потребляемым в разных форматах.

да!! Нам нужен другой модуль, чтобы иметь возможность видеть выход нового модуля обработки. Самый простой способ-записать результат в файл:

вы можете посетить Модули Отчетности документация и вы найдете такой пример:

позволяет реализовать отчет для нашего модуля обработки, simple_module:

# simple_report.py
import os

from lib.cuckoo.common.abstracts import Report
from lib.cuckoo.common.exceptions import CuckooReportError

class SimpleReport(Report):

    def run(self, results):                         # IMPORTANT!! Here the parameter result will be the Global Container we saw before
        try:
            report = open(os.path.join(self.reports_path, "simple_report.txt"), "w")
            report.write(results["simple_info"])    # We add our information to the Global Container under the key: simple_info
                                                    # now we are querying that info to write it down to a file.
            report.close()
        except (TypeError, IOError) as e:
            raise CuckooReportError("Failed to make a simple report, :(")

Также вам нужно будет включить этот модуль отчетности:

каждый модуль также должен иметь выделенный раздел в файле conf / reporting.conf, например, если вы создаете модуль module/reporting/foobar.py вам придется добавить следующий раздел к conf / reporting.conf

[simple_report]
enabled = on

теперь, когда вы запустите новый анализ, вы сможете найти файл под названием "simple_report.txt " в .

Output to the report to the file

как насчет HTML, я хочу увидеть результат в broswer!!

хорошо ... это немного сложнее. Если вы посмотрите на файл modules/reporting/reporthtml.py вы найдете класс ReportHtml что в какой-то момент есть такой код:

try:
    tpl = env.get_template("report.html")       # Ahhhh, so cuckoo is using a template for this.
    html = tpl.render({"results": results})     # Look, the template receives the Global Container (this dude again!!!, it must be a VIP).
except Exception as e:
    raise CuckooReportError("Failed to generate HTML report: %s" % e)

try:
    with codecs.open(os.path.join(self.reports_path, "report.html"), "w", encoding="utf-8") as report:
        report.write(html)
except (TypeError, IOError) as e:
    raise CuckooReportError("Failed to write HTML report: %s" % e)

шаблоны в web/templates/analysis здесь вы можете найти report.html. Читая этот файл, Вы заметите два важных блока кода:

код для вкладок:

<ul class="nav nav-tabs">
    <li class="active"><a href="#overview" data-toggle="tab">Quick Overview</a></li>
    <li><a href="#static" data-toggle="tab">Static Analysis</a></li>
    {% if analysis.behavior.processes %}<li><a href="#behavior" data-toggle="tab" id="graph_hook">Behavioral Analysis</a></li>{% endif %}
    <li><a href="#network" data-toggle="tab">Network Analysis</a></li>
    <li><a href="#dropped" data-toggle="tab">Dropped Files</a></li>
    {% if analysis.procmemory %}<li><a href="#procmemory" data-toggle="tab">Process Memory</a></li>{% endif %}
    {% if analysis.memory %}<li><a href="#memory" data-toggle="tab">Memory Analysis</a></li>{% endif %}
    <li><a href="#admin" data-toggle="tab">Admin</a></li>
</ul>

и код для контента (некоторый код был опущен для краткости):

<div class="tab-content">
    <div class="tab-pane fade in active" id="overview">
        {% include "analysis/overview/index.html" %}
    </div>
    <div class="tab-pane fade" id="static">
        {% include "analysis/static/index.html" %}
    </div>
    {% if analysis.behavior.processes %}
    <div class="tab-pane fade" id="behavior">
        {% include "analysis/behavior/index.html" %}
    </div>
    {% endif %}
    ...
    ...
</div>

ОК, очевидно, нам нужно добавить наш шаблон, давайте разберем:

1 - создание файла web/templates/analysis/simple_module/index.html

 {{analysis.simple_info}}

в строке analysis указывает на корень глобальных результатов словаря. И простая информация-это ключ, добавленный в такой словарь нашим модулем процесса simple_module.

это заменить {{analysis.simple_info}} со значением, которое мы установили для этого ключа в глобальном Conatiner. См. также язык шаблонов Django: для программистов Python.

2 - Обновление web/templates/analysis/report.html включить ваши шаблоны

добавить строку

<li class="active"><a href="#simple_module" data-toggle="tab">Simple Module</a></li>

в раздел вкладок. И следующие строки к содержанию раздел:

<div class="tab-pane fade" id="simple_module">
    {% include "analysis/simple_module/index.html" %}
</div>

и... Фокус-Покус ...

enter image description here

важно отметить, что если вы хотите отобразить результат только в формате html, вам не нужно имплементировать модуль отчета, просто создайте соответствующие шаблоны и используйте соответствующие переменные.


Я написал для этого другой ответ. Для того, чтобы ответить на вопросы Ники (он/она создал награду на вопрос).

как расширить функциональность динамического анализа, которая включает в себя редактирование пакета анализа?

чтобы ответить на ваш главный вопрос, я сначала отвечу на вопросы, которые вы разместили в комментариях:

Nika: должен ли я добавить или, скорее, изменить существующий пакет "exe"?

вы должны добавить в другом модуле можно указать пакет анализа при отправке.

#analizer.py

...
# If no analysis package was specified at submission, we try to select
# one automatically.
        if not self.config.package:
            log.debug("No analysis package specified, trying to detect "
                      "it automagically.")
...

Nika: где будет выполняться скрипт, клиент или хост?

Я думаю, что под "клиентом "вы подразумевали"гостя".

скрипты "выполняются" в гостях, если посмотреть на код agent.py вы увидите что-то вроде этого:

from SimpleXMLRPCServer import SimpleXMLRPCServer

а также:

def add_analyzer(self, data):
        """Add analyzer.
        @param data: analyzer data.
        @return: operation status.
        """
        data = data.data

        if not self._initialize():
            return False

        try:
            zip_data = StringIO()
            zip_data.write(data)

            with ZipFile(zip_data, "r") as archive:
                archive.extractall(ANALYZER_FOLDER)
        finally:
            zip_data.close()

        self.analyzer_path = os.path.join(ANALYZER_FOLDER, "analyzer.py")

        return True

эти два фрагмента кода показывает, что: во-первых, агент использовать RCP и во-вторых, анализатор копируется на целевую виртуальную машину, все это вместе предполагает, что sripts выполняются в гостевой системе.

на самом деле есть функция, которая показывает, как его казнили:

def execute(self):
        """Execute analysis.
        @return: analyzer PID.
        """
        global ERROR_MESSAGE
        global CURRENT_STATUS

        if not self.analyzer_path or not os.path.exists(self.analyzer_path):
            return False

        try:
            proc = subprocess.Popen([sys.executable, self.analyzer_path],
                                    cwd=os.path.dirname(self.analyzer_path))
            self.analyzer_pid = proc.pid
        except OSError as e:
            ERROR_MESSAGE = str(e)
            return False

если это выполняется на guest, где я могу хранить собранную информацию для дальнейшего извлечения в отчет?

см. мой другой ответ, информация всегда собрана обработка модули и добавил Глобальный контейнерный. Затем оттуда вы можете получить к нему доступ, используя модуль отчетов.

пакета анализа надо использовать некоторое средство для получения результата или информации, которую вы хотите. Тогда в модуле обработки у вас есть member self.dropped_path вы можете посмотреть файл там, обработать его и добавить информацию в глобальный контейнер.

Я надеюсь, что это поможет вам приблизиться к тому, что хотеть acheive.