Добавить модуль внутри песочницы 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 " в .
как насчет 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>
и... Фокус-Покус ...
важно отметить, что если вы хотите отобразить результат только в формате 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.