Статья посвящена вопросам устранения уязвимостей в приложениях, разработанных с использованием Delphi. Мы рассмотрим две основные проблемы, выявленные в ходе тестирования безопасности приложения: загрузку небезопасного DLL и настройку флагов компиляции. Для каждой проблемы мы предложим решение и альтернативные варианты.
Загрузка небезопасного DLL
Проблема заключается в том, что приложение может загружать небезопасный DLL, такой как avrt.dll, если один или несколько мест в поисковом пути ресурсов находятся под контролем непредвиденных акторов. Чтобы устранить эту уязвимость, мы можем предпринять следующие шаги:
Удалить ненужные модули и единицы: В нашем случае, inclusion of the unit FMX.Media был причиной загрузки avrt.dll. Чтобы предотвратить это, убедитесь, что все единицы и модули, включенные в ваше приложение, действительно используются. Удалите ненужные единицы и модули, чтобы минимизировать риск загрузки небезопасных DLL.
Использовать безопасные поисковые пути: Убедитесь, что все поисковые пути ресурсов находятся под вашим контролем и защищены от непредвиденных акторов. Вы можете сделать это, ограничив поисковые пути только доверенными каталогами.
{$APPTYPE CONSOLE}
uses
System.SysUtils;
var
SearchPath: string;
begin
SearchPath := 'C:\Path\to\Trustworthy\Folder';
SetLength(SearchPath, 0);
if not TPath.IsDirectory(SearchPath) then
Exit;
// Добавить другие доверенные каталоги в SearchPath
// ...
end.
Использовать защищенные загрузчики DLL: Вместо того, чтобы позволять операционной системе загружать DLL, вы можете использовать защищенные загрузчики DLL, такие как Windows API LoadLibraryEx или LoadPackedLibrary, которые позволяют указать флаг загрузки, например, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE. Это поможет предотвратить загрузку недопустимых DLL.
Настройка флагов компиляции
Проблема заключается в том, что приложение не использует определенные флаги компиляции, которые могут повысить безопасность, такие как Authenticode, cfg, forceIntegrity, gs и rfg. Чтобы устранить эту проблему, мы можем предпринять следующие шаги:
Использование Authenticode: Authenticode - это цифровая подпись, которую можно добавить к исполняемому файлу для верификации подлинности и целостности приложения. Чтобы использовать Authenticode, вам понадобится цифровой сертификат, выпущенный доверенным центром сертификации. Вы можете подписать свой исполняемый файл с помощью утилиты подписи, такой как signtool, предоставляемой Microsoft.
Использование EurekaLog для GS: Еще один способ защитить приложение от атак, нацеленных на стек, - это использовать EurekaLog. EurekaLog - это набор инструментов для анализа и отладки приложений, который может добавить защиту стека в ваше приложение. Однако, как отметил Kas Ob., это может ухудшить производительность приложения.
Перевод приложения на Visual Studio: Как отметил Kas Ob., некоторые флаги компиляции, такие как cfg и rfg, в настоящее время поддерживаются только Visual Studio. Если безопасность является приоритетом, а использование этих флагов является обязательным требованием, вам может потребоваться перевести ваше приложение на Visual Studio. Тем не менее, это может быть дорогостоящим и трудоемким процессом, учитывая время и ресурсы, необходимые для переноса приложения с одного компилятора на другой.
В заключение, устранение уязвимостей в приложениях, разработанных с использованием Delphi, требует тщательного подхода к настройке поисковых путей, удалению ненужных модулей и единиц, а также настройке флагов компиляции. Хотя некоторые флаги компиляции могут быть доступны только в Visual Studio, существуют альтернативные варианты, которые можно использовать для повышения безопасности приложения.
Статья посвящена методам устранения уязвимостей в приложениях, созданных с использованием Delphi, включая проблемы с загрузкой небезопасных библиотек и настройкой флагов компиляции для повышения безопасности.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.