Haskell, Delphi, Phix: антивирусы бессильны перед редкими языками
Злоумышленники всё чаще выбирают экзотические языки программирования, потому что вредоносный код на них сложнее анализировать. Согласно новому исследованию, новые способы скрыться от систем статического анализа — метода изучения кода без его запуска — предоставляют языки вроде Haskell, Delphi и Phix.
Исследователи изучили около 400 тысяч исполняемых файлов для Windows, чтобы понять, почему вредоносные программы на редких языках труднее обнаружить. Выяснилось, что нестандартные компиляторы и языки действительно снижают точность систем обнаружения. Особенно заметным стал эффект использования малораспространённых компиляторов — например, Embarcadero Delphi, Tiny C и Pelles C. Причём выбор компилятора больше влияет на способность обходить анализ, чем сам язык.
Традиционно вредоносы создаются на C или C++ и компилируются с помощью Microsoft Visual Studio. Такие бинарные файлы достаточно однородны, что упрощает работу антивирусов: байты шелл-кода зачастую идут последовательно или с предсказуемыми интервалами, позволяя применять сигнатурные методы. Но в случае с Rust, Lisp, Haskell и рядом других языков структура памяти гораздо менее предсказуема. Там байты вредоносного кода могут быть разнесены по всему бинарному файлу, что существенно осложняет автоматическое обнаружение.
Использование необычных языков также ведёт к большему количеству непрямых вызовов, множеству параллельных потоков и сложной логике исполнения. Всё это затрудняет реверс-инжиниринг для аналитиков и увеличивает шансы злоумышленников на успешную атаку.
Растущую популярность экзотических языков у известных группировок подтверждает практика. APT29 использовала Python в бэкдоре Masepie и сочетание Delphi, Go, C# и Python в трояне Zebrocy. Вымогатель Akira перешёл с C++ на Rust, BlackByte заменил C# на Go, Hive был переписан на Rust. Такие метаморфозы затрудняют анализ кода и делают его менее узнаваемым для автоматических средств.
Чем меньше специалистов и инструментов понимают формат кода, тем выше вероятность, что вредонос останется незамеченным. Особенно это касается языков с необычной моделью исполнения, таких как Haskell или Lisp, либо окружений с громоздкой стандартной библиотекой, как Dart и Go.
Исследователи подчёркивают, что безопасность не должна ограничиваться наблюдением за популярными языками. Малораспространённые технологии дают злоумышленникам пространство для манёвра. Чтобы оставаться на шаг впереди, нужно расширять арсенал анализа и на такие нестандартные случаи.
Читать на dev.by