В эти выходные поддержка исходника Unreal IRCd Server обнаружила бэкдор в дистрибутиве, доступном к скачиванию с его сайтов-зеркал. Полный текст сообщения доступен здесь, а моё внимание привлекла следующая строчка в этом сообщении:
«Судя по всему, дистрибутив Unreal3.2.8.1.tar.gz был подменен зараженным вариантом в ноябре 2009 года (по крайней мере на некоторых зеркалах). По-видимому, до сих пор этого никто не замечал».
Получается, что программа, зараженная трояном, была доступна для скачивания в течение почти 8 месяцев, но выяснилось это только сейчас.
Несмотря на то что официальные исходники были почищены, я за несколько минут нашел версию программы, содержащую троян.
Зараженную версию распознать относительно легко — она содержит следующий MD-хэш:
752e46f2d873c1679fa99de3f52a274d Unreal3.2.8.1.tar.gz
Так каким же образом работает бэкдор? Вот фрагмент зараженного кода:
Как видим, заражение связано всего с двумя дополнительными строчками кода. Еще две строчки содержат условие, при котором происходит внедрение вредоносного кода – в том случае если определен параметр DEBUGMODE3.
Здесь происходит следующее: в модуле “s_bsd.c” содержится функция “read_packet”, которая обрабатывает каждый пакет данных, отправляемый на сервер. Если распознается комадна “AB” (что в данном случае определяется DEBUGMODE3_INFO), то остаток данных в буфере прямо посылается в операционную систему на выполнение через “system()”. Просто и незатейливо.
Какова же мораль сей басни? Во-первых, исходный код современных приложений состоит из сотен тысяч строк, и пару строк вредоносного кода очень легко проглядеть. Случай далеко не первый, и я уверен, что в свободном доступе лежит еще не одно зараженное open-source приложение.
Самое неприятное — это то, что внедренный троян распознали только через 8 месяцев. Интересно, сколько времени потребуется на это в следующий раз?
Unreal IRC Server: в комплекте с бэкдором