Рубрики
Uncategorized

Сканирующее хранилище Blob для вирусов с функциями Azure и Docker

Работая над побочным проектом, кто -то спросил меня, как сканировать вирусы на уроженце облака, и подавать … Tagged с Azure, CICD, без сервера.

Работая над побочным проектом, кто -то спросил меня, как сканировать вирусы в облачном родном и без серверного ландшафта. Это заставило меня задуматься о проекте, который я сделал пару лет назад. Во время этого проекта мы использовали Clamav Это было установлено на виртуальной машине. Мы отсканировали файлы, которые конечные пользователи загружены в приложении ASP.NET, и все было размещено на виртуальных машинах Datacenter где-то в Нидерландах.

CLAMAV® является антивирусным двигателем с открытым исходным кодом для обнаружения троян, вирусов, вредоносных программ и других злонамеренных угроз.

В этом блоге я покажу доказательство концепции, используя функции изображения Docker и Azure, чтобы создать простой автоматизированный Virusscanner для хранения Blob Blob.

Настройка изображения Docker

Прежде всего, некоторые предпосылки. В этой демонстрации я использую Docker для Windows на своем рабочем столе и кодируюсь в Visual Studio 2019 с локальными функциями Azure. Я уже настроил учетную запись Azure Storage, которую я могу использовать в качестве триггера в своих функциях.

Во -первых, давайте найдем изображение Docker с Clamav установлены.

На Dockerhub есть несколько, я вытащил Mkodockx/Docker-Clamav И это работает плавно в моей демонстрации. Чтобы запустить это, просто выполните следующую команду:

docker run -d -p 127.0.0.1:3310:3310 mk0x/docker-clamav:alpine

Он должен работать и прослушивание порта по умолчанию на Localhost.

Создание функции Azure

Второй шаг — создать проект для нашей функции Azure:

Мы используем функцию, запускаемую Blob, потому что мы хотим сканировать все новые капли в месте «загрузка».

Теперь для сканирования следующее Пакет Nuget для NCLAM должно быть установлено:

Install-Package nClam -Version 4.0.1

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

using System.IO; using System.Linq; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; using nClam; namespace VirusScanFunction { public static class ScanBlobs { static readonly string serverName = "localhost"; static readonly int serverPort = 3310; [FunctionName("ScanBlobs")] public static void Run([BlobTrigger("upload/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log) { // Create client var clam = new ClamClient(serverName, serverPort); // Scanning for viruses... var scanResult = clam.SendAndScanFileAsync(myBlob).Result; switch (scanResult.Result) { case ClamScanResults.Clean: log.LogInformation("The file is clean!"); break; case ClamScanResults.VirusDetected: log.LogInformation("Virus Found!"); log.LogInformation("Virus name: {0}", scanResult.InfectedFiles.First().VirusName); break; case ClamScanResults.Error: log.LogInformation("Error scanning file: {0}", scanResult.RawResult); break; } } } }

Это в основном! Вы только что создали свой собственный местный Virusscanner для вашего хранилища Blob!

Резюме и соображения

Очевидно, это POC и хорошо работает на моем Машина контейнер’. Для корпоративных среду вы должны заботиться о том, какое изображение контейнера использовать, как обрабатывать найденные вирусы и что делать, чтобы смягчить проблемы. Вы, очевидно, хотите предупредить и блокировать человека, который в первую очередь загрузил вирус.

Вывод

Без сервера и контейнеры позволяют настроить действительно классные концепции и заставлять вас думать вне коробки. Несколько лет назад нам пришлось установить Clamav на виртуальную машину, где теперь мы можем использовать контейнеры, раскрутить их, масштабировать и утилизировать, когда мы закончим. Подумайте о возможностях!

Оригинал: «https://dev.to/sogeti/scanning-blob-storage-for-viruses-with-azure-functions-and-docker-1ph9»