Крис Касперски
Ошибки синхронизации потоков встречаются так же часто, как
переполняющиеся буферы, и точно так же, как и переполняющиеся буферы, их можно
использовать для удаленных атак с засылкой shell-кода, тем более что пока от
них никто не пытается защищаться, открывая тем самым огромные возможности для
хакерства, и первые ласточки (в смысле черви) уже выползли из гнезда…
Интенсивность атак на переполняющиеся буферы, достигнув своего пика в первых
годах XXI века, начинает неуклонно идти на спад, сдаваясь под напором
контратаки большого количества противохакeрских мер, предпринятых со стороны
производителей процессоров, компиляторов и операционных систем. Неисполняемый
стек, контроль целостности адреса возврата, рандомизация адресного пространства
– все это и многое другое затрудняет атаки, вынуждая хакеров искать обходные
пути. И такие пути действительно есть!
3 сентября 2006 года хакер Johnny Cache описал
принципиально новую атаку на драйверы устройств беспроводной связи Intel Centrino
PRO, открывающую очередную страницу в книге переполняющихся буферов: http://lists.immunitysec.com/pipermail/dailydave/2006-September/003459.html.
Вслед за этим, буквально месяц спустя, 11 октября
2006 года David Maynor из SecureWorks, Inc. и независимый исследователь Jon Ellch
опубликовали сообщение о дыре в драйвере TOSRFBD.SYS, разработанном фирмой Toshiba
для своих Bluetooth-устройств, используемых многими производителями
оборудования, в числе которых оказались ASUS, Dell, Sony и другие бренды.

Рисунок 1. Toshiba выпускает
заплатки для драйверов своих Bluetooth-устройств
Обе атаки основаны на ошибках синхронизации
потоков (race condition). Такие ошибки часто встречаются в драйверах,
обрабатывающих асинхронные запросы от сетевых устройств и охватывающие широкий
спектр оборудования, простилающийся от инфракрасных адаптеров до DSL-модемов.
Как известно, программы, работающие с большим количеством соединений (например,
клиенты файло-обменных сетей), способны обрушивать систему в BSOD с посмертным
сообщением IRQL_NOT_LESS_OR_EQUAL. Это – следствие «удара по памяти»,
возникающего из-за разрушения базовых структур данных в небрежно написанном
драйвере сетевого устройства, страдающего ошибками синхронизации. Прикладные
программы лишь создают условия наиболее «благоприятные» для проявления ошибки,
но сами по себе они не виноваты, и претензии пользователей направлены не по
адресу, а претензий таких – много! Настолько много, что у большинства программ
подобного рода соответствующий пункт явно включен в FAQ.
Аналогичная картина наблюдается и с
Bluetooth-устройствами, сырость драйверов которых породила целый класс атак под
общим называнием BlueSmack, основанный на шторме эхо-запросов, направленных на
жертву и вызывающих все тот же «голубой экран смерти». Долгое время никто из
хакеров не интересовался, что именно происходит при этом, какой характер носят
разрушения и можно ли осуществить нечто более умное, чем банальный отказ в
обслуживании.
Johnny Сache стал первым хакером, вызывавшим
направленный удар по памяти, в результате которого ему удалось воздействовать
на регистр EIP с передачей управления на shell-код, исполняющийся в режиме
ядра, то есть на наивысшем уровне привилегий. За ним начали подтягиваться и
остальные. Есть все основания утверждать, что через несколько лет ошибки
синхронизации станут одним из основных типов удаленных атак. Причем, если для
атаки на Bluetooth-устройство необходимо находиться в радиусе его действия
(которое в лучшем случае составляет несколько километров, да и то лишь в случае
применения хакером специальной антенны), DSL-модемы доступны со всех концов
Интернета!