under moderation Автоматическая проверка .exe файла на Virustotal

Как я уже отвечал в личке - я понимаю как реализовать проверку обычных вложений, но вот чтобы сам сервер что-то скачивал, а потом отправлял на проверку - это уже перебор. Если там реально самораспаковывающийся архив на пару гигабайт или еще что будет?
Задумался над этой идеей. Пока поднял transmission демона и в него отправляю торренты новых релизов по rss и потом вычисляю хэш exe-шников.

Можно даже обойтись без отправки exe в virustotal, а делать запрос типа т.к. большинство файлов уже давно отправлено и проверено
Code:
https://www.virustotal.com/gui/file/SHA256_ХЭШ_ФАЙЛА/detection

PHP:
if (!defined('IN_AJAX')) die(basename(__FILE__));

global $userdata, $bb_cfg, $lang;

$api_key = $bb_cfg['virustotal_api_key']; // Замените на ваш ключ API
$hash = !empty($this->request['hash']) ? $this->request['hash'] : false;
$file = !empty($this->request['file']) ? $this->request['file'] : false;

if ($hash) {

    $url = "https://www.virustotal.com/api/v3/files/{$hash}";

    // Инициализация cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "x-apikey: {$api_key}"
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    $this->response['type'] = 'hash';

    // Обработка ответа
    if ($response) {
        $data = json_decode($response, true);

        if (isset($data['data']['attributes']['last_analysis_stats'])) {
            $last_analysis_stats = $data['data']['attributes']['last_analysis_stats'];
            $total = (isset($data['data']['attributes']['last_analysis_stats']['malicious']) && isset($data['data']['attributes']['last_analysis_stats']['undetected']))
                ? (int)$data['data']['attributes']['last_analysis_stats']['malicious'] + (int)$data['data']['attributes']['last_analysis_stats']['undetected']
                : 0;
            $malicious = (isset($data['data']['attributes']['last_analysis_stats']['malicious'])) ? (int)$data['data']['attributes']['last_analysis_stats']['malicious'] : 0;


            // Формируем HTML для отображения
            $this->response['html'] = $lang['VT_MALICIOUS'].': <b'.($malicious>0?' class="text-danger"':' class="text-success"').'>' . $malicious . '/' . $total. '</b>';
        } else {
            $this->response['html'] = $lang['ERROR'].': <b class="text-danger">'.$data['error']['code'].'</b>';
        }
    } else {
        $this->response['html'] = '<i class="text-danger">Ошибка запроса к VirusTotal</i>';
    }
}
if ($file) {

    $this->response['type'] = 'file';
    $this->response['html'] = '<i class="text-danger">В разработке...</i>';

    $malicious_extensions = array(
        '.exe',  // Исполнимые файлы
        '.bat',  // Пакетные файлы
        '.cmd',  // Файлы команд Windows
        '.vbs',  // Скрипты Visual Basic
        '.js',   // JavaScript файлы
        '.jse',  // Защищённые JavaScript файлы
        '.ps1',  // Скрипты PowerShell
        '.scr',  // Экранные заставки
        '.pif',  // Программный информационный файл
        '.reg',  // Реестровые файлы
        '.dll',  // Библиотеки динамической компоновки
        '.lnk',  // Ярлыки
        '.msp',  // Пакеты установки
        '.msi',  // Установочные файлы
        '.iso',  // Образы дисков
        '.apk',  // Android-программы
        '.zip',  // Архивы
        '.rar',  // Архивы
        '.7z',   // Архивы
        '.tar',  // Архивы
        '.gz',   // Архивы
        '.tar.gz', // Архивы
        '.tar.bz2', // Архивы
        '.tar.xz', // Архивы
        '.ace',  // Архивы
        '.alz',  // Архивы
        '.cab',  // Кабинетные архивы
        '.vbe',  // Визуальные Basic-скрипты
        '.wsf',  // Скрипты Windows Script
        '.ws',   // Скрипты Windows Script
        '.vb',   // Visual Basic
        '.scf',  // Файлы сценариев Windows
        '.inf',  // Файлы конфигурации
        '.torrent', // Торрент файлы (может содержать исполнимые файлы)
        '.html', // Веб-страницы, которые могут содержать вредоносный JavaScript
        '.htm',  // Веб-страницы
        '.php',  // PHP скрипты (если доступ через веб)
        '.pl',   // Perl скрипты
        '.cgi',  // CGI-скрипты
        '.aspx', // ASP.NET страницы
        '.jsp',  // Java Server Pages
        '.py',   // Python скрипты
        '.rb',   // Ruby скрипты
        '.sh',   // Скрипты оболочки
        '.shtml', // Веб-страницы с расширением для серверных скриптов
        // Документы, в которых могут содержаться вирусы:
        '.doc',  // Microsoft Word документы
        '.docx', // Microsoft Word документы (XML формат)
        '.xls',  // Microsoft Excel документы
        '.xlsx', // Microsoft Excel документы (XML формат)
        '.ppt',  // Microsoft PowerPoint документы
        '.pptx', // Microsoft PowerPoint документы (XML формат)
        '.odt',  // OpenDocument текстовые файлы
        '.ods',  // OpenDocument электронные таблицы
        '.odp',  // OpenDocument презентации
        '.rtf',  // Rich Text Format
        '.pdf',  // PDF документы
        '.chm',  // Справочные файлы Windows
        '.mht',  // MHTML файлы
        '.html', // Веб-страницы, которые могут содержать вредоносный JavaScript
        '.txt',  // Текстовые файлы (может содержать вредоносный скрипт)
        '.csv',  // CSV файлы (могут содержать вредоносные макросы в Excel)
        '.epub', // Электронные книги формата EPUB
        '.djvu'  // Формат DjVu для документов
    );

// sending file to virustotal via api
}
 
Last edited:
Back
Top