Conti Ransomware malware leak WITH LOCKER
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

132 lines
5.9 KiB

Доработка для хранения статуса проверки образцов в криптопанели
ЦЕЛЬ ДОРАБОТКИ
Это часть из комплекса мер по автоматизации тестирования закриптованых образцов.
Общий смысл доработки следующий:
- в криптопанели формируется очередь образцов на тестирование (очень похоже как на virustotal.com или dyncheck.com)
- у нас есть пул виртуальных машин, на которых есть скрипты тестирования
- скрипты дергают криптопанель, говоря например "привет, я машина IEWIN10, дай мне файлы, чтобы протестировать на мне"
- криптопанель в ответ отдает файл из очереди, делая у себя в БД нужные пометки
- скрипты что-то там тестируют, потом отдают ответ, например "привет, я машина IEWIN10, я протестила файл такой-то, отвечаю, файл - гавно! вот лог."
РЕАЛИЗАЦИЯ ДОРАБОТКИ
Сейчас в криптопанели хранятся образцы, загружаемые туда пользователями.
Нужно добавить для ЗАКРИПТОВАНЫХ образцов статусы:
- Не нужно проверять
- Нужно проверять
- Проверяется
- Проверено
Исходя из этих статусов:
- скрипты автоматизированного тестирования могут выбирать образцы для проверки на наших виртуалках
- а также отдавать результат проверки.
Все это в комплексе позволить минимизировать ручной труд при проверке криптов.
ДЕТАЛИ
Статусом "не нужно проверять" заведомо нерабочие либо те, которые по какой-то причине не нужно проверять.
К статусу "не нужно проверять" должна быть причина - enum { "заведомо нерабочий", "своя причина" (и тогда коммент к ней) }
К статусу "Нужно проверять" также нужно добавить следующие атрибуты:
- простое число - приоритет проверки. Для пользователя желательно сделать управление этим приоритетом через drag-drop, но это как удобнее.
*ПРАВКА 18.09.2018* Приоритет как отдельное свойство не нужен. Лучше добавлять файл на проверку в начало или конец очереди.
- признак отката виртуалки (булево значение). Значение по умолчанию = true.
Если данный флаг = true, это означает разрешение откатить виртуалку после теста.
Если флаг = false, то после теста ВМ не откатывать, запретить добавлять новые задачи на эту ВМ. В интерфейсе пользователя
необходимы индикаторы/кнопки статусов ВМ, с помощью которых оператор может вновь включить в работу ВМ.
Соответственно, у ВМ должен быть статус "активна"/"неактивна", каковой статус разрешает назначать на неё задачи.
К статусу "Проверено" идут детали:
* для каждой из виртуальных машин:
- полный лог проверки (текстовое поле длиной до 64к)
- статус проверки: success/failure
- дата-время начала и конца проверки
В системе должен быть раздел управления виртуальными машинами:
- создать-редактировать-удалить машину.
В свойствах машины:
- имя
- разрядность ОС
- версия ОС
Проверка происходит НА НЕСКОЛЬКИХ МАШИНАХ. Общий успех проверки определяется успехом проверки НА ВСЕХ МАШИНАХ.
Соответственно, должен быть раздел управления списком машин. У машины есть свойства - имя, и IP-адрес.
Когда скрипт проверки коннектится к панели через API, он представляется системе - называет имя машины, на которой он запущен.
ПОЛЬЗОВАТЕЛЬСКИЙ СЦЕНАРИЙ
Оператор может:
- выбирать файлы для проверки, помечая их статусом "нужно проверить", а также выбирая список машин для проверки
- выбирать приоритет проверки для файлов
- помечать файлы, не требующие проверки
- смотреть результат проверки (просматривать лог проверки, на каждой из машин)
- сбрасывать результат проверки (например, если проверка зависла, или если нужно перепроверить файл)
*ПРАВКА 18.09.2018*
При назначении файла на проверку на конкретную виртуалку, необходимо выдать команду на запуск этой виртуалки.
Результат команды следует игнорировать - если виртуалка уже работает, то менеджер ВМ проигнорирует эту команду.
API
Нужно предусмотреть API для автоматизации работы скрипта, со следующими операциями:
1. дай мне следующий по приоритету файл в очереди для проверки на машине с именем %MACHINE%
HTTP POST /some-random-and-long-api-prefix/getfile
параметры:
pass: захардкоженый пароль - общий для всего API. Строка.
machine: имя компьютера. Строка.
Ответ: json следующего вида:
{
"file_id": 32, // идентификатор файла в БД
"file": "TVqQAAMAAAAEAAAA//8AA" // тело файла в кодировке base64
}
Начиная с момента отдачи файла, данная машина помечается в БД как проверяюшая данный файл.
Повторные запросы с этой же машины на выдачу файла следует расценивать как валидные --
это означает сетевой сбой при приеме файла на предыдущем запросе.
2. возьми результаты проверки файла на машине %MACHINE%
HTTP POST /some-random-and-long-api-prefix/setresult
параметры:
pass: захардкоженый пароль - общий для всего API. Строка.
machine: имя компьютера. Строка.
status: 0|1. Число. Возможно только два значения - обозначающие "ok" и "failed" соответственно. Означает общий результат тестирования.
log: лог тестирования. Длинная строка (будем считать, до 64к, но в теории может быть и больше) в кодировке base64.
file_id: число. Идентификатор файла, полученный в предыдущем запросе.
Система смотрит, какой файл проверялся на данной машине, и проставляет ему соответствующий статус.
ЕСЛИ файл на данной машине НЕ проверялся, либо время начала проверки слишком давнее (больше 24 часов), данный запрос следует игнорировать
как невалидный.
Если проверка завершилась успешно, ИЛИ если для данной проверки разрешен откат виртуалки,
следует откатить виртуальную машину через API phpVirtualBox (*В РАЗРАБОТКЕ*)
В противном случае, откат виртуалки не производится, и все ожидающие задачи на проверку на этой машине
так и продолжают ожидать, ПОКА оператор вручную не нажмет кнопку "откатить данную виртуалку".
Для этого, в интерфейсе пользователя должно появиться уведомление оператору, с кнопкой "Откатить".
ДОСТУП
Для минимизации риска утечки данных, нужно чтобы доступ к API не пересекался с обычными учетками системы.
Для этого предлагается:
- чтобы функции API предварялись длинным случайным префиксом в url (security by obscurity)
- функции API проверяли бы захардкоженный пароль, присылаемый в POST (чтобы пароль не светился в логах вместе с GET)
- функции API следует особо тщательно проверить на инъекции.