Программистам не всегда удается скрыть происхождение

Образование и кириллица часто выдают русскоязычных хакеров
В цифровую эпоху место экспертизы почерка и дактилоскопии зачастую должны занять другие способы идентификации личности преступников/ Е. Разумный/ Ведомости

В последнее время западные СМИ регулярно рассказывают о хакерских атаках на критически важные IT-системы иностранных государств, говоря при этом о российском происхождении хакеров. Иностранные эксперты обычно объясняют свои выводы свойствами вредоносных программ, такими как время наибольшей активности, совпадающее с рабочим временем в часовом поясе Москвы, и присущими только российским хакерам и программистам стилистическими особенностями написания программного кода.

В октябре 2014 г. исследовательская компания FireEye рассказала о группе хакеров (они назвали ее APT28), целью которой являются правительственные и военные организации и спецслужбы стран, входящих в сферу интересов России. Хотя у FireEye нет прямых доказательств (имен и стоящих за атаками организаций), код используемых группой вредоносных программ содержит русскоязычные фрагменты, а время их компиляций совпадает с дневным временем на европейской части России.  

По словам главного антивирусного эксперта «Лаборатории Касперского» Александра Гостева, «Лаборатория Касперского» давно следит за APT28 и о российском происхождении группировки позволяет судить целый комплекс улик: кроме комментариев в коде на транслите (русскими словами, набранными латинскими буквами), это и версии операционной системы, на которой создавались файлы, и часовые пояса, а также пересечение технологий с другими русскоязычными группами хакеров. 

Позже, в апреле 2015 г., CNN сообщил о российском следе хакеров, атаковавших компьютерную сеть Белого дома США. Сославшись на расследование американских спецслужб, канал объяснил, что доказательством служат характерные компьютерные коды и другие индикаторы.

Отвечая на вопрос корреспондента «Ведомостей», как могут выглядеть подобные индикаторы, руководитель нидерландской фирмы, занимающейся кибербезопасностью, Fox-IT Эвинд Дрейхус привел пример. По его словам, увидев в программном коде вставки, написанные на языке ассемблера (низкоуровневый язык программирования, близкий к машинным кодам), можно делать предположение о российском происхождении автора вируса – и такие предположения нередко подтверждались. Дело в сложности написания таких вставок, присущих российской школе программирования, объяснял он. 

Опрошенные «Ведомостями» эксперты по IT-безопасности оговаривались, что речь идет не о доказательстве российского происхождения кода, а только такой вероятности. Настоящие профессионалы следов не оставляют, а имитировать можно почти все что угодно, и намеренно добавленная в программный код вируса строка на иностранном языке или отличительная особенность программистов из какой-то конкретной страны могут быть призваны увести следствие по ложному следу. В хакерской атаке Duqu 2.0 часть кода была намеренно представлена как работа то китайских, то русскоговорящих специалистов, вспоминает антивирусный эксперт «Лаборатории Касперского» Игорь Суменков.

Но, с другой стороны, злоумышленникам есть что симулировать, признают собеседники «Ведомостей», – стилистических особенностей программирования, присущих российским разработчикам, немного, но все же они есть.

Русский язык между строк

Использование ассемблера и языка программирования Си c минимумом структур и шаблонов из более позднего языка Си++ характерно для выпускников Московского инженерно-физического института (МИФИ), объясняет ведущий антивирусный эксперт «Лаборатории Касперского» Сергей Голованов, сам закончивший этот вуз.

«Русский стиль» отличает филигранное написание очень сложных и интересных частей вредоносного кода и крайне небрежное – достаточно простых и рутинных, уверен гендиректор Digital Security Илья Медведовский. По его словам, другие разработчики пишут код равномерно – или одинаково хорошо, или одинаково плохо. У россиян же такие куски могут соседствовать, говорит Медведовский.

Международные взломщики

В середине августа Комиссия по ценным бумагам и биржам США (SEC) предъявила иск 30 ответчикам, большинство из которых живет на Украине (Киев, Одесса) и в России (Москва, Воронеж) и некоторые – в штате Джорджия (США). В иске говорится, что украинские хакеры Иван Турчинов и Александр Еременко взламывали ленты раскрытия информагентств США и получали доступ к финансовым отчетам компаний раньше, чем они становились публичной информацией. Среди пострадавших компаний Hewlett-Packard, Oracle, Boeing, Panera Bread, Caterpillar. Эти данные они передавали знакомым трейдерам, которые зарабатывали на них. По данным SEC, хакеры и трейдеры в 2010–2014 гг. незаконно заработали $100 млн.

Русские программисты в среднем пишут код медленнее китайских или индийских разработчиков, но зато они способны работать по нечеткому плану или без плана совсем, замечает гендиректор группы компаний Infowatch Наталья Касперская. Стиль написания кода, по ее словам, зависит не от национальности, а от школы программирования, а в России их несколько.

Родина разработчика может проявиться в названиях элементов: классов, методов, переменных, а в комментариях к коду могут всплыть языковые и культурные нюансы, говорит руководитель направления собственных разработок компании «Крок» Сергей Стрелков. С ним соглашается руководитель группы разработки интегратора AT Consulting Артур Щеглов, обращающий внимание на комментарии к коду. Впрочем, часто российские программисты грешат отсутствием комментариев вовсе – в Mango Office программисты иногда говорят: «Хороший код сам себя документирует», – отмечает IT-директор этой компании Дмитрий Метлин.

Российских программистов может также отличать не самое лучшее знание английского языка, соглашаются Щеглов и Метлин. Так, иногда российского программиста может выдать некорректный перевод имен. Например, слово «счетчик» переводится двумя способами: первый принятый в отрасли перевод – сount, но иногда российские программисты используют непривычное слово аmount, рассказывает Метлин. Иногда автор вируса делает ошибки в написании слов с использованием английского алфавита, рассказывает ведущий антивирусный аналитик Eset Артем Баранов.

Создатели вредоносных приложений оставляют и другие следы. «Наши американские коллеги как-то обнаружили в коде непонятную им надпись, и, когда они показали нам ее, мы обнаружили оскорбительное послание от русскоязычного хакера», – вспоминает Голованов из «Лаборатории Касперского». С такими же комментариями в коде сталкивался и руководитель отдела тестирования на проникновение компании Positive Technologies Дмитрий Серебрянников. А Баранов вспоминает, как вскоре после публикации отчета о кибератаке Windigo ее исполнители передали привет аналитикам Eset в коде нового вредоносного софта.

По словам Стрелкова из «Крока», недавнего российского студента-программиста можно отличить по стремлению написать код с нуля вместо использования стандартных библиотек. По мнению гендиректора разработчика программного обеспечения «Рексофт» Александра Егорова, это характерно и для зрелых команд. Метлин из Mango Office объясняет это тем, что с собственноручно написанными функциями программистам работать легче и приятнее, чем с чужими, пусть даже это приводит к избыточности.

Распространенные в разных странах алгоритмы шифрования, которыми пользуются программисты при разработке кода, также могут указывать на их происхождение, соглашаются Суменков из «Лаборатории Касперского» и аналитик вирусной лаборатории Eset в Словакии Питер Кошинар.

Виновата математика

В особенностях кода русских программистов, как правило, виновато естественно-научное образование, говорит директор центра информационной безопасности интегратора «Инфосистемы джет» Алексей Гришин. По его словам, большинство российских программистов помимо самого программирования изучали математику, что накладывает свой отпечаток.

Советская школа программирования развивалась на математических и физических факультетах элитных вузов, поэтому подразумевала, что программист – это не просто «кодер», но и алгоритмист, и архитектор, поэтому первые программы были практически произведениями искусства, говорит замдиректора Infowatch Рустэм Хайретдинов. Национальной особенностью кода он называет архитектуру самого приложения, стремящуюся к компактности. По словам Хайретдинова, эта особенность берет начало из времен ограниченных ресурсов – оперативной памяти, графических возможностей, сменных носителей – первых персональных компьютеров в 1980-х, когда зарождалась советская школа программирования. В качестве примера он приводит операционную систему PS-DOS, написанную в МИФИ: она полностью повторяла возможности MS-DOS, но требовала в несколько раз меньше памяти.

Однако в современной бизнес-среде и лицензия на софт, и труд программиста стоят гораздо дороже инфраструктуры, подобные навыки не востребованы: компании проще докупить лишнюю память или процессор, чем заботиться об оптимизации кода, объясняет Хайретдинов. Поэтому советская школа программирования теряет преимущества перед китайской и индийской, уверен он. Теперь кроме информационной безопасности талантливые программисты могут применить себя разве что в высокочастотном трейдинге – отрасли, где миллисекундное преимущество в скорости позволяет зарабатывать деньги, рассказывает Хайретдинов. Не случайно большинство разработчиков торговых роботов для высокочастотного трейдинга получили советское или постсоветское образование, замечает он.

Привычку российских программистов к преждевременной оптимизации отмечает и Метлин из Mango Office: по его словам, игра за повышение эффективности и борьба с мелочами может длиться бесконечно.

Порядок бьет происхождение

Такие понятия, как «китайский код» или «индусский код», скорее свидетельство массовости профессии программиста в этих странах, а не национальная особенность, рассуждает замдиректора по исследованиям и разработкам ABBYY Александр Марков. Причем огромное количество из них непрофессиональны: сравнивая российского и индийского разработчика, зачастую приходится сопоставлять выпускника МГУ и закончившего курсы, продолжает Марков. С ним соглашается Гришин из «Инфосистемы джет», по словам которого в Индии есть множество небольших школ программирования, где обучение длится несколько месяцев, продолжает он.

Китайские программисты часто пишут код как придется, не думая о его качестве, говорит Суменков из «Лаборатории Касперского». Дело во множестве индийских и китайских разработчиков на рынке, объясняет Щеглов из AT Consulting. Он напоминает, что было время, когда индийским разработчикам платили за количество строк, что вызывало дублирование кода и нежелание его оптимизировать.

Индустриальное производство кода отлично налажено в американских компаниях, которые по этому показателю опережают весь остальной мир на 7–10 лет, говорит Егоров из «Рексофта». По его словам, все разработчики сейчас пользуются единой терминологией, используют единые стандарты и правила – и в таких условиях происхождение программиста почти теряет роль.