Сканирование на вирусы загруженных файлов из Azure Web/Worker Role

Мы разрабатываем веб-сайт Azure, который позволит пользователям загружать контент (файлы MP4, Docx... MSOffice), к которому затем можно получить доступ.

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

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

Быстро просмотрел Symantec Endpoint и Защитник Windows, но не уверен, что они предлагают API


person Tim    schedule 14.09.2015    source источник
comment
Обратите внимание на службу защиты от вредоносных программ Microsoft: azure.microsoft.com/en-us/blog/.   -  person Gaurav Mantri    schedule 14.09.2015
comment
@GauravMantri Есть ли доступный для этого API? Нам нужна возможность детерминистически передать файл и получить ответ, а не загружать и ждать, чтобы увидеть, помещен ли он в карантин.   -  person Tim    schedule 14.09.2015


Ответы (5)


Я успешно сделал это, используя ClamAV с открытым исходным кодом. Вы не указываете, какие языки используете, но, поскольку это Azure, я предполагаю, что это .Net.

Существует оболочка .Net, которая должна предоставить API, который вы ищете:

https://github.com/tekmaven/nClam

Вот пример кода (примечание: он скопирован непосредственно со страницы репозитория nClam GitHub и воспроизведен здесь только для защиты от гниения ссылок)

using System;
using System.Linq;
using nClam;

class Program
{
    static void Main(string[] args)
    {

        var clam = new ClamClient("localhost", 3310);
        var scanResult = clam.ScanFileOnServer("C:\\test.txt");  //any file you would like!

        switch(scanResult.Result)
        {
            case ClamScanResults.Clean:
                Console.WriteLine("The file is clean!");
                break;
            case ClamScanResults.VirusDetected:
                Console.WriteLine("Virus Found!");
                Console.WriteLine("Virus name: {0}", scanResult.InfectedFiles.First().VirusName);
                break;
            case ClamScanResults.Error:
                Console.WriteLine("Woah an error occured! Error: {0}", scanResult.RawResult);
                break;
        }
    }
}

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

person Mike Goodwin    schedule 14.09.2015

У нас та же проблема и тот же прецедент. Конечные клиенты загружают на наш сайт несколько файлов, обычные расширения - изображения, doc/docx, xls/xlsx, pdf - и их надо сканировать на лету, а потом платит пользователь и мы высылаем весь пакет информации дальше. Нам нужно отсканировать и сгладить их, чтобы удалить такие вещи, как макросы.

Мы активно ищем решение.

Как вы решили свой вариант использования?

Кроме того, еще один указатель, кроме сканирования, которое нам нужно для выравнивания файла, CDR - Deep Content Disarm и Reconstruction, как они называют это в OPSWAT.

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

Мы нашли Metadefender, но он не подходит. Добавляю, чтобы другие знали. - Кажется, что сканирование Cloud API выполняется быстро, но CDR занимает около минуты, и загрузка файлов в день ограничена, поэтому оно не подходит.

В соответствии с ядром Metadefender кажется, что это очень дорого, поскольку оно составляет около 3000 долларов США в год для 8 ядер с частотой обнаружения вирусов 83%, и для этого требуется виртуальная машина Azure, которая стоит как минимум 160 долларов (проверено для 4 ядер ЦП, а не 8)

Я просто хотел бы, чтобы был плагин для хранения больших двоичных объектов, который легко делал бы это и возвращал причину удаления файла, если обнаружена какая-либо угроза, обратно в нашу службу приложений.

person Tzvi Gregory Kaidanov    schedule 29.07.2020

ClamAV — хорошая идея, особенно теперь, когда 0,99 скоро будет выпущен с поддержкой правил YARA — это позволит вам очень легко писать собственные правила и позвольте clamav использовать тонны хороших правил YARA в открытом доступе уже сегодня.

Другой путь и немного бессовестного подключения — проверить scanii.com, это SaaS для обнаружения вредоносных программ/вирусов. и он довольно хорошо интегрируется с AWS и Azure.

person Rafael Ferreira    schedule 15.09.2015
comment
Я пытался получить демо-счет через Scanii.com, но я не получаю письмо с подтверждением от веб-сайта, хотя я знаю, что мой адрес электронной почты правильный, поэтому я никогда не смогу протестировать продукт. :-( - person PoorInRichfield; 18.02.2020
comment
Сожалеем это слышать, не могли бы вы отправить электронное письмо по адресу [email protected], и мы сразу же разберемся с вами! - person Rafael Ferreira; 19.02.2020

Для этого есть несколько вариантов:

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

Вы также можете установить коммерческий сканер, такой как avg, kaspersky и т. д. Многие из них поставляются с C API, с которым вы можете общаться напрямую, хотя часто получение доступа к нему может быть дорогим с точки зрения лицензирования.

В качестве альтернативы вы можете напрямую вызывать исполняемый файл, используя что-то вроде следующего для захвата вывода:

var proc = new Process {
    StartInfo = new ProcessStartInfo {
        FileName = "scanner.exe",
        Arguments = "arguments needed",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};
proc.Start();
while (!proc.StandardOutput.EndOfStream) {
    string line = proc.StandardOutput.ReadLine();
}

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

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

person Steve Smith    schedule 06.06.2017
comment
Я протестировал AttachmentScanner с файлом, в котором есть известный вирус, и получил ответ "status": "ok", что нехорошо. API прост в использовании, но бесполезен, если он не работает. - person PoorInRichfield; 18.02.2020

Новинка появится весной/летом 2020 года. Расширенная защита от угроз для хранилища Azure включает проверку репутации вредоносных программ, которая обнаруживает загрузки вредоносных программ с помощью анализа репутации хэшей, используя возможности Microsoft Threat Intelligence, которые включают хэши для вирусов, троянов, шпионских программ и программ-вымогателей. Примечание: мы не можем гарантировать, что каждое вредоносное ПО будет обнаружено с помощью метода анализа репутации хэшей.

https://techcommunity.microsoft.com/t5/Azure-Security-Center/Validating-ATP-for-Azure-Storage-Detections-in-Azure-Security/ba-p/1068131

person Joe Healy    schedule 17.03.2020
comment
К сожалению, он проверяет файлы в BLOB-объекте после их загрузки пользователем, и время, когда это будет сделано, неизвестно. - person zolty13; 15.04.2021