Какие способы проверки существуют и для чего
Наиболее безопасно организовано распространение приложений в операционных системах, где применяются официальные магазины приложений (Google Play, Apple Store, Microsoft Store), а также репозитории программного обеспечения, то есть практически любой Linux. При этом предполагается, что компетентные специалисты известных компаний и опытные программисты сделали всё возможное, чтобы не допустить попадания туда зловредных компонентов и опасных приложений. Хотя и здесь периодически возникают ситуации, когда злоумышленники на некоторое время обманывают (1, 2) строгую систему безопасности.
Традиционно в Windows пользователю самостоятельно приходится заботиться о себе, поскольку полезное приложение должно быть скачано откуда-то из интернета перед его установкой. В связи с такой особенностью Windows здесь приводятся несколько возможных проблем и способов их решения:
1. Приложение скачивается пользователем не с официального сайта, а например, с файлообменника, торрента, по ссылке на облако частного лица либо с поддельного сайта. От любого из этих вариантов стоит отказаться, а является ли сайт поддельным, можно попытаться выяснить способом, описанным в этой статье чуть ниже. В любом случае применение фильтра SmartScreen и надёжного антивируса с облачной защитой (для наиболее быстрого реагирования на неизвестные угрозы) может помочь.
2. Если установочный пакет повредился при скачивании или хранении, это легко заметить, если проверить его электронную подпись (если она вообще есть), сравнить с указанным на официальном сайте хэшем, либо, если это архив, а других способов проверки нет, хотя бы выполнить его тестирование при помощи программы-архиватора, например бесплатного 7-zip, пред распаковкой.
3. Если приложение модифицировано злоумышленниками, для выяснения этого может помочь проверка его электронной подписи (её отсутствие либо не валидность обязательно должно вас насторожить), в большинстве случаев позволит выявить проблемы, но и здесь не всё так просто. Насколько помню, были случаи как кражи у разработчиков легитимных электронных подписей, так и компрометации системы распространения программного обеспечения, когда злоумышленники внедрялись в процесс производства программного продукта непосредственно в локальной сети разработчика. То есть применение антивируса является необходимым условием выявления проблем пусть даже и не сразу, а, возможно, через некоторое время после заражения, если от действий злоумышленников пострадали многие. От целенаправленной атаки на вас никакой антивирус, скорее всего, не спасёт. Сбрасывать со счетов APT, если вы обычный пользователь не стоит, поскольку предположить что именно в вас может заинтересовать продвинутых злоумышленников невозможно. Например, совсем недавно они зачем-то атаковали азиатских посетителей сайтов религиозных и благотворительных организаций.
Проверка электронной подписи на примере установочного пакета LibreOffice
Мне, вот уже на протяжении примерно десятилетия, не требуются сложные работы с текстовыми документами и электронными таблицами и поэтому я достаточно давно отказался от использования платного Microsoft Office (Word, Excel) в пользу сначала OpenOffice, а затем, когда проект разделился, LibreOffice. По условиям лицензии его можно использовать бесплатно, что я и делаю, хотя, когда было немного свободных денег, переводил весьма небольшие суммы (сколько мог) на развитие этого проекта. На примере LibreOffice я и покажу, как можно проверить электронную подпись установочного пакета. Итак, сначала скачиваем пакет LibreOffice_6.4.2_Win_x64.msi с указанного сайта.
Затем в папке со скачанным пакетом находим его, нажимаем правую клавишу мыши и выбираем "Свойства".
Потом на вкладке "Цифровые подписи" выбираем нужную подпись и нажимаем кнопку "Сведения". Вообще пакет может быть подписан нескольким цифровыми подписями. Часто это делается для обратной совместимости, чтобы проверка проходила и по старым (если, например, до сих пор на некотором устройстве используется встроенная ОС Windows XP, эксплуатация которой, вроде, официально должна быть прекращена), и по новым правилам.
Обращаю внимание, что применённый при подписывании файла алгоритм выборки в данном случае - это устаревший уже sha1, который не рекомендуется разработчикам для любого его использовании в связи с ненадёжностью. Поэтому, если какой-либо установочный пакет подписан, например, ещё и подписью с алгоритмом выборки sha256, лучше проверять в первую очередь именно такую цифровую подпись. В нижнем окошке можно увидеть когда пакет был подписан. Это делается с использованием доверенных серверов в интернете, чтобы гарантировать, что подписание установочного пакета было произведено действительно в то время, когда эта цифровая подпись могла применяться для подписывания кода. Ранее при включении отметки времени также чаще всего применялся алгоритм sha1, теперь sha256.
Если мы нажмём на кнопку "Просмотр сертификата", то увидим, что он действителен строго в определённый период времени и предназначен только для определённых целей. Учитывая, что на предыдущем скриншоте показано, что "Эта цифровая подпись действительна", можно с уверенностью сказать, что установочный пакет был выпущен действительным издателем LibreOffice "The Document Foundation" и с момента подписания им пакета никакие данные в этом пакете не потерялись и не были изменены вследствие сбоя или злонамеренного воздействия.
Как видно, алгоритм подписи используется всё же современный: SHA-2.
Дополнительно можно посмотреть путь сертификации.
На самом верху расположен корневой сертификат. Такие сертификаты, как правило, служат для выдачи других сертификатов. Срок их действия может быть довольно значительным и, поскольку, большинство таких сертификатов были выпущены достаточно давно, в них по-прежнему используется небезопасный алгоритм подписи SHA-1. Это не является большой проблемой, так как корневые сертификаты распространяются на компьютеры с Windows 10 централизовано в процессе обновлений. Из этого можно сделать два вывода: 1. обновления нужно обязательно устанавливать хотя бы по причине периодической замены, добавления, отзыва ряда корневых сертификатов, но, на самом деле, других причин обязательной установки обновлений ещё больше; 2. не следует самостоятельно без особых причин и понимания всех рисков устанавливать в систему дополнительно чьи либо корневые сертификаты, поскольку Windows (но не хорошие антивирусы) сразу начинает доверять всем приложениям, которые подписаны с применением этого корневого сертификата. Вообще иногда могут появиться ещё и такие проблемы безопасности, которые на настоящий момент затрагивают всех, кто не обновился вовремя.
Проверки сайта, с которого пакет ещё только будет скачан
Продолжим наше исследование на примере всё того же сайта LibreOffice. Проверим его владельца и дату регистрации. Для этого зайдём, например сюда (таких сервисов сейчас много) и заполним адресом интересующего нас домена соответствующее поле. Нажмём кнопку "Проверить". Обращаю внимание, что адрес домена вводится без указания протокола, то есть начальная часть адреса "https://" исключается, также исключается адрес конкретной страницы сайта, в данном случае на неё указывает завершающий слэш "/".
Далее нажимаем ссылку "подробнее" и получаем следующую важную информацию.
То есть домен и весь диапазон адресов действительно принадлежит The Document Foundation и был создан и изменён достаточно давно. Опасения, прежде всего, должны вызывать домены зарегистрированные недавно, пользователь которых скрыт. Но полностью доверять информации о владельце, даже если она и указана, всё равно нельзя. Наличие здесь проблемы, всей сложности которой не понимают, порой, даже суды, можно проиллюстрировать этой статьёй. А что касается важности даты регистрации домена, то вся логика строится здесь на том, что, как только вредоносный домен будет обнаружен специалистами по информационной безопасности, высока вероятность, что он довольно быстро будет заблокирован. То есть не просуществует достаточно долго. Хотя известны случаи, когда злоумышленники регистрировали домен и не использовали его никак в течение довольно значительного времени, с тем чтобы провести затем внезапно вредоносную кампанию или целевую атаку. В общем, вся информация whois обычному пользователю в сложных случаях может и не помочь сделать правильные выводы о безопасности какого-либо домена. К тому же домен может быть безопасен, но если файлы на него выкладывает неизвестно кто или может модифицировать злоумышленник, никакого вывода об их безопасности на основании whois вообще сделать нельзя.
Проверка хешей при помощи PowerShell
Прошли те времена, когда для вычисления хешей файла требовалось установить и запустить специальную программу. В настоящий момент все современные версии Windows, включая десятку, содержат "из коробки" установленный .Net Framework, а значит и PowerShell - дальнейшее развитие пакетных (bat/cmd) файлов и WSH (VBS/JS). Для того, чтобы его использовать, выполним некоторую настройку. Нажмём правой клавишей мыши на панели задач и выберем "Параметры панели задач". Далее включим следующий переключатель, касающийся запуска PowerShell по умолчанию вместо командного интерпретатора CMD.
Теперь, нажав сочетание клавиш Windows+X, мы сможем запустить окно интерпретатора PowerShell.
Вычислим sha256 хеш файла LibreOffice_6.4.2_Win_x64.msi следующей командой:
Get-FileHash .\Soft_x64\LibreOffice\LibreOffice_6.4.2_Win_x64.msi -Algorithm sha256
Результат получим следующий:
Зайдём та страницу загрузки LibreOffice, установим галку напротив "Подробнее (md5sum, ...)" и нажмём затем появившуюся ссылку "md5sum...", как указано на скриншоте:
Теперь мы можем увидеть, что вычисленный командлетом Get-FileHash sha256 хеш и полученный с сайта совпадают:
Значит установочный пакет, находящийся на диске является по содержанию оригинальным файлом, скачанным с сайта загрузки LibreOffice. Выполняя такие проверки, следует обращать внимание на то, чтобы работа с сайтом выполнялась через защищённое соединение, то есть адрес сайта начинался с "https://", а слева от него находился значок замочка, чтобы проверочная информация с сайта не была модифицирована возможными злоумышленником по дороге на компьютер. Также весьма желательно, чтобы скачивание файлов выполнялось через защищённое соединение. Но и это не даст полной уверенности в надёжности пакета, скачанного даже и с официального сайта, которая возможна лишь в случае своевременной установки на компьютер всех обновлений безопасности, использования надёжного антивирусного решения класса Internet Security со свежими, постоянно обновляемыми антивирусными базами и его проактивной защите, включенной на максимум.
Некоторое отступление о моем командлете
Сам я уже достаточно давно, столкнувшись с задачей вычисления хешей на PowerShell, написал для себя соответствующий командлет и пользуюсь до сих пор для решения таких задач только им, поскольку он всё ещё достаточно хорошо работает и вполне меня устраивает. Недавно выложил его на форуме сайта, посвященном приёмам написания скриптов, который, правда, на PowerShell не специализируется, но раз уж выложил там с некоторым описанием, приведу ссылку на него и здесь. Не претендую на высокое качество кода, но отмечу только, что любопытен мой скрипт будет, разве что, тем, кто хорошо разбирается в PowerShell, и, возможно, только из исторического интереса к древнему .Net Framework 2.0, либо для тестирования производительности различных способов организации чтения одного и того же файла с жёстного диска (а, возможно, и из кэша) без особых затрат своего времени, задавая для этого различные режимы работы командлета. Скрипт по умолчанию позволяет за один раз проверить довольно быстро несколько хешей файла, например так:
Командлет самодокументирован, если кто вдруг захочет использовать, сможет получить информацию по нему обычным способом через Get-Help. Хотя ещё раз повторюсь, стандартного теперь командлета Get-FileHash вам вполне достаточно для решения рассмотренной и подобных задач.
UPD: если статья показалась полезной, обратите внимание ещё и на это: Немного о себе, принципах, состоянии здоровья и финансов.