18.11.2014 Views

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Siemens подтверждает факт проникновения<br />

в SCADA<br />

продлил жизнь «малваре», прежде, чем ее обнаружили. Как бы<br />

то ни было, после пресс-релиза белорусов, другие антивирусные<br />

компании так же подключились к исследованию, как новой уязвимости,<br />

с помощью которой распространялся червь, так и к боевой<br />

нагрузке.<br />

ÐÀÑÏÐÎÑÒÐÀÍÅÍÈÅ<br />

Механизм размножения червя, казалось бы, не особо-то и оригинальный<br />

— через USB-флешки. Но autorun.inf тут уже ни при чем.<br />

В дело вступает новая уязвимость, которая позволяет загружать<br />

произвольную .DLL-библиотеку, как только флешка будет вставлена,<br />

и пользователь откроет ее содержимое. Дело в том, что на<br />

флешке лежит .DLL-файл с вредоносным кодом (ну, фактически<br />

расширение, в случае с червем, — .TMP) и .LNK-файл. Файл<br />

с расширением .LNK является обычным ярлыком. Но в нашей<br />

ситуации ярлык не совсем обычный. При отображении ярлычка в<br />

стандартной оболочке или Total Commander автоматически выполнится<br />

лежащий рядом .DLL-файл со всеми вытекающими отсюда<br />

последствиями! Как такое могло произойти? Как известно, ярлык<br />

указывает на исполняемый файл и при двойном щелчке вызывает<br />

его. Но тут все без щелчков, да и .DLL-файл так не выполнить.<br />

Если рассмотреть ярлык в HEX-редакторе, можно увидеть, что в его<br />

середине указан путь до нашей .DLL. Кроме того, это не обычный<br />

ярлычок, а ярлычок на элемент панели управления! Эта-то деталь<br />

все и объясняет. Любой элемент панели управления — .CPLапплет.<br />

Но CPL — это, по сути, простая .DLL, поэтому ярлык для<br />

панели управления особый, он как бы понимает, что имеет дело с<br />

.DLL. Кроме того, такой ярлык пытается ВЫТАЩИТЬ иконку из.DLL,<br />

чтобы отобразить ее в проводнике. Но для того, чтобы вытащить<br />

иконку, надо подгрузить библиотеку. Что, собственно, оболочка и<br />

делает с помощью вызова LoadLibraryW().<br />

Справедливости ради стоит отметить, что вызов этой функции<br />

автоматически влечет за собой выполнение функции DllMain()<br />

из подгружаемой библиотеки. Поэтому, если такой ярлычок будет<br />

указывать не на .CPL-апплет, а на злую библиотеку со злым кодом<br />

(в функции DllMain()), то код выполнится АВТОМАТИЧЕСКИ при<br />

просмотре иконки ярлыка. Кроме того, эту уязвимость можно использовать<br />

и с помощью .PIF-ярлыков.<br />

ÁÎÅÂÀß ÍÀÃÐÓÇÊÀ<br />

Кроме интересного метода распространения удивила и боевая<br />

нагрузка — никаких ботнетов, краж банковских паролей, номеров<br />

Symantec расписывает компоненты трояна<br />

CC. Все оказалось куда масштабнее. Уязвимость .LNK провоцирует<br />

загрузку скрытого файла с именем ~wtr4141.tmp, лежащего рядом<br />

с ярлыком. Файл этот исполняемый, но маленький (всего 25 Кб).<br />

Как отметили специалисты из Symantec, очень важно на первых<br />

порах скрыть свое присутствие, пока система еще не заражена. С<br />

учетом специфики 0day-уязвимости, которая действует, как только<br />

пользователь увидит иконки, сработает и ~wtr4141.tmp, который в<br />

первую очередь вешает перехваты системных вызовов в kernel32.<br />

dll. Перехватываемые вызовы:<br />

• FindFirstFileW<br />

• FindNextFileW<br />

• FindFirstFileExW<br />

Хуки также вешаются и на некоторые функции из ntdll.dll:<br />

• NtQueryDirectoryFile<br />

• ZwQueryDirectoryFile<br />

Все эти функции обрабатываются со следующей логикой — если<br />

файл начинается с «~wtr» и заканчивается на «.tmp» (или на<br />

«.lnk»), то удалить его из возвращенного оригинальной функцией<br />

значения, а затем вернуть, что осталось. Другими словами, скрыть<br />

свое присутствие на диске. Поэтому пользователь просто не увидит<br />

файлы на флешке. После этого ~wtr4141.tmp подгружает второй<br />

файл с диска (~wtr4132.tmp). Делает он это не совсем стандартно,<br />

я бы даже сказал, извращенно — установкой хуков в ntdll.dll на<br />

вызовы:<br />

• ZwMapViewOfSection<br />

• ZwCreateSection<br />

• ZwOpenFile<br />

• ZwCloseFile<br />

• ZwQueryAttributesFile<br />

• ZwQuerySection<br />

Затем с помощью вызова LoadLibrary он пытается подгрузить<br />

несуществующий файл со специальным именем, на это дело<br />

XÀÊÅÐ 09 /140/ 10 055

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!