Руткит

Поделись знанием:
Перейти к: навигация, поиск

Руткит (англ. rootkit, то есть «набор root'а») — набор программных средств (например, исполняемых файлов, скриптов, конфигурационных файлов), обеспечивающих:

  • маскировку объектов (процессов, файлов, директорий, драйверов);
  • управление (событиями, происходящими в системе);
  • сбор данных (параметров системы).

Термин Rootkit исторически пришёл из мира UNIX, и под этим термином понимается набор утилит или специальный модуль ядра, которые злоумышленник устанавливает на взломанной им компьютерной системе сразу после получения прав суперпользователя. Этот набор, как правило, включает в себя разнообразные утилиты для «заметания следов» вторжения в систему, делает незаметными снифферы, сканеры, кейлоггеры, троянские программы, замещающие основные утилиты UNIX (в случае неядерного руткита). Rootkit позволяет взломщику закрепиться во взломанной системе и скрыть следы своей деятельности путём сокрытия файлов, процессов, а также самого присутствия руткита в системе.

В систему руткит может быть установлен различными способами: загрузка посредством эксплойта, после получения шелл-доступа (в таком случае, может использоваться средство типа wget или исходный FTP-клиент для загрузки руткита с удаленного устройства), в исходном коде или ресурсах программного продукта.





Классификация руткитов

  • По уровню привилегий
    • Уровень пользователя (user-mode)
    • Уровень ядра (kernel-mode)
  • По принципу действия
    • изменяющие алгоритмы выполнения системных функций (Modify execution path)
    • изменяющие системные структуры данных (Direct kernel object manipulation)[1]

Основные методы реализации

В Microsoft Windows

Существуют разнообразные технологии руткитов, наиболее распространенные: захват таблиц вызовов (IAT, IDT, SSDT, GDT), перехват функций (например, модификацией начальных байт), непосредственное изменение системных объектов (DKOM), методы использования драйверов.

Захват таблиц вызовов

Таблица вызовов представляет собой массив, в котором каждый элемент хранит адрес соответствующей процедуры. Такие таблицы существуют и в режиме ядра (IDT, CPU MSRs, GDT, SSDT, IRP dispatch table), и в режиме пользователя (IAT).

Import Address Table (IAT) — основная таблица вызовов модулей пользовательского режима. Большинство исполняемых файлов имеет одну или несколько встроенных IAT, содержащих адреса библиотечных процедур, импортируемых из DLL. [2]

На многопроцессорной машине существуют несколько экземпляров таблиц вызовов (например, IDT, GDT, MSR). Так как каждый процессор имеет собственные системные регистры (в частности, GDTR — регистр глобальной таблицы дескрипторов (GDT), IDTR — регистр дескриптора таблицы прерываний (IDT) и IA32_SYSENTER_EIP — содержит виртуальный адрес входной точки в режим ядра (MSR)), он также имеет собственные системные структуры.[3]

При изменении записи в таблице вызовов контролируется исполнение программ и, при необходимости, перенаправляется на требуемые функции. Перехваченная процедура может[4]:

  • блокировать вызовы, производимые определенными приложениями (например, антивирус)
  • замещать исходную процедуру
  • производить мониторинг системы путём перехвата вводимых параметров
  • фильтровать выходные параметры

Общая идея захвата состоит в следующем:

  • Идентифицировать таблицу вызовов, получить её адрес
  • Сохранить существующую в таблице запись
  • Подменить запись новым адресом
  • Восстановить исходную запись

Если функция перехвата предполагает вызов исходной процедуры, то блокирование и мониторинг производятся до вызова, фильтрация параметров после.

IAT — таблица вызовов, размещаемая в файловой структуре приложения. IAT сохраняет адрес процедур, экспортируемых определенной DLL. Каждая DLL, с которой сцепляется приложение во время загрузки, имеет собственную IAT. Для захвата IAT необходимо выполнить следующие действия:

  • Получить доступ к адресному пространству процессора
  • Локализировать IAT в образе памяти процессора
  • Модифицировать требуемую IAT

Для манипуляции IAT, требуется доступ к адресному пространству приложения, которому таблица принадлежит. Одним из способов является внедрение DLL. Среди методов внедрения DLL в адресное пространство процесса можно указать [5]

  • Модификация значения реестра AppInit_DLL
  • API-вызов SetWindowsHookEx()
  • Использование удаленных потоков

Перехват модификацией кода функции

Принцип работы основан на том, что первые байты перехватываемых функций замещаются на код перехватчика. Необходимо подчеркнуть, что при установке перехватчика не производится анализ кода перехватываемой функции: изменяется N первых байт, а не первые N машинных команд. Следствием этого факта является[6]:

  1. код перехватчика может быть установлен только в начале функции;
  2. для каждого вызова перехваченной функции перехватчику необходимо восстановить её машинный код до вызова и повторно перехватить после завершения вызова.

Алгоритм работы руткита:

  1. В теле перехватчика создается массив, в который записываются первые N байт каждой из перехваченных функций (обычно размер модифицированного кода не превышает 20 байт)
  2. Массив заполняется эталонным машинным кодом перехватываемых функций.
  3. В начало каждой перехватываемой функции записывается код, осуществляющий передачу управления перехватчику.

Алгоритм работы перехватчика:

  1. Последовательность действий, определенных злоумышленником.
  2. Восстановление первых N байт перехваченной функции.
  3. Вызов перехваченной функции.
  4. Повторная модификация машинного кода перехваченной функции: перезапись кода, передающего управление перехватчику, в первые байты.
  5. Анализ и, при необходимости, модификация результатов выполнения исходной функции.
  6. Выполнение операции ret, возвращение управления вызвавшей функцию программе.

Для перехвата достаточно модифицикации пяти первых байт функции, на место которых записывается операция jmp, передающая управление перехватчику руткита.

Следует отметить, что простейшие системы защиты от атак такого типа проверяют первый байт вызываемых функций на предмет наличия в них машинного кода операции jmp. В качестве меры противодействия разработчики руткитов применяют методики «маскировки» кода, записываемого в начало функции перехватчика(применения команд вида PUSH/RET, размещения нескольких операторов NOP или мусорного кода типа PUSH AX/POP АХ, а также элементы полиморфизма).

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

DKOM (Direct Kernel Object Manipulation)

Операционные системы семейства Windows NT используют стандартные модели объектов. Различные компоненты исполняющей системы определяют один или несколько типов объектов. Каждый компонент экспортирует в режиме ядра набор поддерживаемых функции и свойств, называемый COM-интерфейсом, для манипуляции этим типом объектов. Ни один компонент не может напрямую получить доступ к другому объекту компонента. Типичными объектами режима ядра являются[7]:

  • объект типа устройства (определяемый менеджером ввода-вывода тип объекта привилегированного режима, используемый для представления физического, логического или виртуального устройства)
  • файловый объект
  • символьные ссылки
  • ключи реестра
  • потоки и процессы
  • диспетчерский объект (класс типов объектов привилегированного режима, используемый для управления процессами диспетчеризации и синхронизации)

Такой дизайн обеспечивает гибкость и портируемость (переносимость), например, будущие релизы операционной системы могут содержать компоненты ядра, определяющие аналогичные объекты, но имеющие совершенно другую внутреннюю структуру. Если такие компоненты будут экспортировать функции с сохранившимися названиями и параметрами, изменение не возымеет эффекта.[3]

Непосредственное манипулирование объектами ядра является достаточно мощной технологией, трудной для обнаружения. Однако при этом существует ряд недостатков, таких как нестабильность метода, зависимость от версий, сложность реализации в силу отсутствия документированного описания структур и свойств объектов. Несмотря на эти ограничения, данный метод позволяет скрывать процессы, драйверы устройств, порты, повышать уровень привилегий потоков (следовательно, процессов).

EPROCESS — это структура, служащая для внутреннего представления процесса (объект процесса). Windows использует круговой двусвязный список структур EPROCESS для отслеживания процесса исполнения. Ссылки, связывающие объекты EPROCESS, содержатся в поле ActiveProcessLink, структура которого LIST_ENTRY[4]:

typedef struct _LIST_ENTRY {
  struct _LIST_ENTRY  *Flink;
  struct _LIST_ENTRY  *Blink;
} LIST_ENTRY, *PLIST_ENTRY;

Простейший алгоритм скрытия процесса:

  1. Получение указателя на процесс, к которому принадлежит текущий поток, с помощью вызова PsGetCurrentProcess()
  2. Получение PID процесса
  3. При несовпадении PID с искомым осуществляется переход по двусвязному списку (поле ActiveProcessLinks, тип LIST_ENTRY)
  4. Изменение полей ActiveProcessLinks. В частности, ссылка на следующий блок EPROCESS блока А устанавливается на блок С, аналогично ссылка на предыдущий блок в блоке С. Ссылки блока B замыкаются на своей записи. Таким образом, создаются два списка, один из которых состоит из одного элемента

Исключение процесса из списка процессов не влияет на его исполнение. В Windows планирование кода на исполнение производится на уровне потоков, процессы определяют контекст, в котором запускаются потоки. Скрытие процесса производится на внешнем уровне в инструментах, опирающихся на объекты процессов EPROCESS, таких как Диспетчер задач. Диспетчер ядра использует другую схему учета ресурсов, полагающуюся на другие структуры данных (главным образом объекта ETHREAD). Данный метод позволяет скрывать процессы без потери функциональности.[4]

Драйверы

Модель драйверов Microsoft поддерживает многоуровневую архитектуру, поэтому запрос ввода/вывода (I/O request, обмен данными между приложениями и драйверами) может обслуживаться серией подключенных драйверов, каждый из которых выполняет свою задачу. Цепь драйверов, обслуживающих физическое устройство, называется стеком. Такой модульный подход позволяет новым драйверам быть включенными в стек для увеличения функциональности. При этом изменяется или добавляется только отдельный участок цепи. Также некоторые периферийные устройства используют одинаковые контроллеры (и, соответственно, шины ввода/вывода). Модульность позволяет оптимизировать использование одинаковых блоков кода, вместо написания отдельного драйвера для каждого устройства.

В модели WDM определено три типа драйверов: драйвер шины, функциональные драйверы и драйверы-фильтры. Драйверы-фильтры обычно располагаются между другими модулями и захватывают проходящие через них IRPs. Перед отправлением IRP смежному драйверу фильтр может просмотреть содержимое или изменить его для воздействия на дальнейшее поведение системы. Пример, при снятии образа диска с сервера, критичного к простою, драйвер-фильтр может использоваться для изменения потока данных с целью скрытия некоторых файлов.

IRP пакет (I/O request packet) — структура данных ядра Windows, обеспечивающая обмен данными между приложениями и драйвером, а также между драйвером и драйвером. При поступлении запроса от приложения менеджер ввода/вывода формирует соответствующий IRP, который локализует и пересылается верхнему объекту в стеке драйверов. Если верхний драйвер смог самостоятельно обработать поступивший IRP, он завершает запрос и возвращает IRP менеджеру ввода/вывода. В противном случае, драйвер выполняет частичную обработку, локализует нижележащий объект в стеке и запрашивает менеджер ввода/вывода на передачу IRP следующему драйверу

При создании IRP менеджер ввода/вывода резервирует область памяти, находящуюся после заголовка. Выделенная память используется для записи массива структур IO_STACK_LOCATION, выделяемых для каждого драйвера стека:

Размер памяти соответствует количеству драйверов в стеке. Массив нумеруется с 1, соответствующую нижнему драйверу стека. Структура содержит информацию о вызываемой менеджером ввода/вывода функции управления драйвера (поля MajorFunction и MinorFunction), передаваемые функции параметры (поле Parameters, содержимое варьируется в зависимости от функции), указатель на объект драйвера (DeviceObject), указатель на функцию завершения (поле CompletionRoutine, данная функция находится в драйвере верхнего уровня).

Функция управления драйвера при первом получении IRP восстанавливает из соответствующей позиции стека ввода/вывода параметры, производя вызов IoGetCurrentIrpStackLocation(). Далее выполняются предписанные действия, после чего, в случае пересылки IRP нижнему драйверу стека, происходит:

  • установка позиции стека ввода/вывода в IRP
  • регистрация функции завершения (опционально)
  • отправка IRP нижнему драйверу
  • возврат кода статуса (NTSTATUS)

Существуют два стандартных способа установить позицию стека для следующего драйвера[8]:

  • Текущая позиция пересылается без изменений, функция:
VOID IoSkipCurrentIrpStackLocation (IN PIRP Irp);

Функция уменьшает на единицу указатель на массив IO_STACK_LOCATION. Таким образом, при пересылке IRP произойдет восстановление указателя (автоматически увеличится на единицу), в итоге, будет использован тот же участок стека. При использовании данного способа, возникнет неиспользуемый участок в конце стека.

  • Если необходимо передать содержимое текущей позиции стека, за исключением указателя на функцию завершения (поле CompletionRoutine), используется:
VOID IoCopyCurrentIrpStackLocationToNext (IN PIRP Irp);

Пересылка IRP следующему драйверу производится с помощью функции:

NTSTATUS IoCallDriver (IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp);

Первым аргументом является указатель на нижележащий объект драйвера. Способ получения такого адреса определяется конкретной функцией управления, стандартного метода не существует.

Каждый запрос должен быть завершен либо последним драйвером в стеке (дальнейшая пересылка IRP невозможна), либо одним из вышестоящих.

Менеджер ввода/вывода инициализирует процесс завершения для данного IRP, когда любой из драйверов, обрабатывающих IRP, вызывает функцию завершения IoCompleteRoutine(). При её вызове менеджер ввода/вывода заполняет участок стека ввода/вывода текущего драйвера нулями, после чего вызывает драйвер более высокого уровня с установленной функцией завершения к данному IRP. Для определения способа обработки запроса драйвером нижнего уровня функции завершения драйвера более высокого уровня доступен только блок статуса ввода вывода в IRP.

Собственно, установленный таким образом драйвер-фильтр позволяет обрабатывать не только приходящие IRP-пакеты (например, блокировать чтение определенного сектора диска), но и управлять результатами обработки нижестоящих драйверов посредством инициализации функции завершения.[9]

Еще одним методом реализации руткитов является модификация MBR и загрузка до ядра операционной системы — буткиты (например, BackDoor.MaosBoot).

Данный вид вредоносных кодов в среде Windows известен с начала 1990-х годов под названием стелс-вирусов.

В UNIX и linux

  • реализуемые подменой основных системных утилит (очень легко обнаруживаются средствами контроля целостности, кроме того, легко блокируются средствами мандатного управления доступом типа SELinux или AppArmor);
  • реализованные в виде модуля ядра и основанные на патчинге VFS или перехвате таблицы системных вызовов (sys_call_table);
  • основанные на модификации физической памяти ядра.

Дополнительные возможности

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

Руткиты для и против DRM

Руткитами по сути является большинство программных средств защиты от копирования (и средств обхода этих защит — например, эмуляторы CD- и DVD-приводов).

В 2005 году корпорация Sony BMG встраивала в свои аудиодиски защиту на основе руткита, который устанавливался без ведома пользователя.

Антируткиты

Это утилиты или резидентные модули, обнаруживающие в системе присутствие руткитов и (в разной мере) удаляющие их. Существует множество конкурирующих средств для этого — как платных, так и бесплатных, но все они используют сходные принципы действия.

Список антируткитов приведен нижеК:Википедия:Статьи без источников (тип: не указан)[источник не указан 3010 дней]:

  • Kaspersky TDSSKiller
  • GMER
  • McAfee Rootkit
  • Trend Micro RootkitBuster
  • Malwarebytes Anti-Rootkit (MBAR)
  • Bitdefender Rootkit Remover
  • ESET Hidden File System Reader
  • FortiCleanup Tool For Rootkits
  • Vba32 AntiRootkit
  • F-Secure BlackLight
Поиск расхождений

Против MEP-руткитов. Одна и та же информация получается несколькими способами с использованием API и «напрямую» и ищутся расхождения. В частности, обычно сканируются таблицы импорта, таблица Native API, файловая система.

Напишите отзыв о статье "Руткит"

Примечания

  1. Колесниченко, 2006, с. 29.
  2. Колесниченко, 2006, Перезапись адреса функции.
  3. 1 2 Solomon, Russinovich, Ionescu, 2012.
  4. 1 2 3 Blunden, 2009.
  5. Blunden, 2009, Injecting a DLL.
  6. Зайцев, 2006, Перехват модификацией первых байтов функции.
  7. [msdn.microsoft.com/en-us/library/windows/hardware/ff554383%28v=vs.85%29.aspx Managing Kernel Objects] : [англ.] // MSDN.</span>
  8. [support.microsoft.com/kb/320275 Различные способы обработки IRP — краткий справочник] : [англ.] // MSDN.</span>
  9. Зайцев, 2006, Клавиатурный шпион на базе драйвера-фильтра.
  10. </ol>

Литература

  • Зайцев О. Rootkits, SpyWare_AdWare, Keyloggers & BackDoors. Обнаружение и защита / Олег Зайцев. — Санкт-Петербург: БХВ-Петербург, 2006.
  • Blunden B. The Rootkit Arsenal / Bill Blunden. — Plano, Texas: Wordware Publishing, Inc., 2009.
  • Колесниченко Д. ROOTKITS под Windows / Денис Колесниченко. — Санкт-Петербург: Наука и Техника, 2006.
  • Solomon D., Russinovich M., Ionescu A. Windows Internals / David Solomon, Mark Russinovich, Alex Ionescu. — Microsoft Press, 2012.

Ссылки

  • [www.securitylab.ru/contest/212106.php Windows под прицелом] // SecurityLab.Ru. — 21 декабря 2004 г.</span> (Обзорная статья о руткитах.)
  • [www.z-oleg.com/secur/articles/rootkit.php RootKit — принципы и механизмы работы] : [[www.webcitation.org/6Bz8NEeAJ арх.] 7 ноября 2012] / Олег Зайцев.</span>
  • Сайт [ruskod.net/hack-expo.void.ru/hellknights.html «Hell Knights Crew»], — исследователей, занимающихся, в том числе, VX/RAT и руткит технологиями.(недоступная ссылка с 23-01-2015 (3379 дней) — история)

Отрывок, характеризующий Руткит

– О о о а а а!! – загудели голоса. «Ну, попадись теперь кто бы ни был», думал Ростов, вдавливая шпоры Грачику, и, перегоняя других, выпустил его во весь карьер. Впереди уже виден был неприятель. Вдруг, как широким веником, стегнуло что то по эскадрону. Ростов поднял саблю, готовясь рубить, но в это время впереди скакавший солдат Никитенко отделился от него, и Ростов почувствовал, как во сне, что продолжает нестись с неестественною быстротой вперед и вместе с тем остается на месте. Сзади знакомый гусар Бандарчук наскакал на него и сердито посмотрел. Лошадь Бандарчука шарахнулась, и он обскакал мимо.
«Что же это? я не подвигаюсь? – Я упал, я убит…» в одно мгновение спросил и ответил Ростов. Он был уже один посреди поля. Вместо двигавшихся лошадей и гусарских спин он видел вокруг себя неподвижную землю и жнивье. Теплая кровь была под ним. «Нет, я ранен, и лошадь убита». Грачик поднялся было на передние ноги, но упал, придавив седоку ногу. Из головы лошади текла кровь. Лошадь билась и не могла встать. Ростов хотел подняться и упал тоже: ташка зацепилась за седло. Где были наши, где были французы – он не знал. Никого не было кругом.
Высвободив ногу, он поднялся. «Где, с какой стороны была теперь та черта, которая так резко отделяла два войска?» – он спрашивал себя и не мог ответить. «Уже не дурное ли что нибудь случилось со мной? Бывают ли такие случаи, и что надо делать в таких случаях?» – спросил он сам себя вставая; и в это время почувствовал, что что то лишнее висит на его левой онемевшей руке. Кисть ее была, как чужая. Он оглядывал руку, тщетно отыскивая на ней кровь. «Ну, вот и люди, – подумал он радостно, увидав несколько человек, бежавших к нему. – Они мне помогут!» Впереди этих людей бежал один в странном кивере и в синей шинели, черный, загорелый, с горбатым носом. Еще два и еще много бежало сзади. Один из них проговорил что то странное, нерусское. Между задними такими же людьми, в таких же киверах, стоял один русский гусар. Его держали за руки; позади его держали его лошадь.
«Верно, наш пленный… Да. Неужели и меня возьмут? Что это за люди?» всё думал Ростов, не веря своим глазам. «Неужели французы?» Он смотрел на приближавшихся французов, и, несмотря на то, что за секунду скакал только затем, чтобы настигнуть этих французов и изрубить их, близость их казалась ему теперь так ужасна, что он не верил своим глазам. «Кто они? Зачем они бегут? Неужели ко мне? Неужели ко мне они бегут? И зачем? Убить меня? Меня, кого так любят все?» – Ему вспомнилась любовь к нему его матери, семьи, друзей, и намерение неприятелей убить его показалось невозможно. «А может, – и убить!» Он более десяти секунд стоял, не двигаясь с места и не понимая своего положения. Передний француз с горбатым носом подбежал так близко, что уже видно было выражение его лица. И разгоряченная чуждая физиономия этого человека, который со штыком на перевес, сдерживая дыханье, легко подбегал к нему, испугала Ростова. Он схватил пистолет и, вместо того чтобы стрелять из него, бросил им в француза и побежал к кустам что было силы. Не с тем чувством сомнения и борьбы, с каким он ходил на Энский мост, бежал он, а с чувством зайца, убегающего от собак. Одно нераздельное чувство страха за свою молодую, счастливую жизнь владело всем его существом. Быстро перепрыгивая через межи, с тою стремительностью, с которою он бегал, играя в горелки, он летел по полю, изредка оборачивая свое бледное, доброе, молодое лицо, и холод ужаса пробегал по его спине. «Нет, лучше не смотреть», подумал он, но, подбежав к кустам, оглянулся еще раз. Французы отстали, и даже в ту минуту как он оглянулся, передний только что переменил рысь на шаг и, обернувшись, что то сильно кричал заднему товарищу. Ростов остановился. «Что нибудь не так, – подумал он, – не может быть, чтоб они хотели убить меня». А между тем левая рука его была так тяжела, как будто двухпудовая гиря была привешана к ней. Он не мог бежать дальше. Француз остановился тоже и прицелился. Ростов зажмурился и нагнулся. Одна, другая пуля пролетела, жужжа, мимо него. Он собрал последние силы, взял левую руку в правую и побежал до кустов. В кустах были русские стрелки.


Пехотные полки, застигнутые врасплох в лесу, выбегали из леса, и роты, смешиваясь с другими ротами, уходили беспорядочными толпами. Один солдат в испуге проговорил страшное на войне и бессмысленное слово: «отрезали!», и слово вместе с чувством страха сообщилось всей массе.
– Обошли! Отрезали! Пропали! – кричали голоса бегущих.
Полковой командир, в ту самую минуту как он услыхал стрельбу и крик сзади, понял, что случилось что нибудь ужасное с его полком, и мысль, что он, примерный, много лет служивший, ни в чем не виноватый офицер, мог быть виновен перед начальством в оплошности или нераспорядительности, так поразила его, что в ту же минуту, забыв и непокорного кавалериста полковника и свою генеральскую важность, а главное – совершенно забыв про опасность и чувство самосохранения, он, ухватившись за луку седла и шпоря лошадь, поскакал к полку под градом обсыпавших, но счастливо миновавших его пуль. Он желал одного: узнать, в чем дело, и помочь и исправить во что бы то ни стало ошибку, ежели она была с его стороны, и не быть виновным ему, двадцать два года служившему, ни в чем не замеченному, примерному офицеру.
Счастливо проскакав между французами, он подскакал к полю за лесом, через который бежали наши и, не слушаясь команды, спускались под гору. Наступила та минута нравственного колебания, которая решает участь сражений: послушают эти расстроенные толпы солдат голоса своего командира или, оглянувшись на него, побегут дальше. Несмотря на отчаянный крик прежде столь грозного для солдата голоса полкового командира, несмотря на разъяренное, багровое, на себя не похожее лицо полкового командира и маханье шпагой, солдаты всё бежали, разговаривали, стреляли в воздух и не слушали команды. Нравственное колебание, решающее участь сражений, очевидно, разрешалось в пользу страха.
Генерал закашлялся от крика и порохового дыма и остановился в отчаянии. Всё казалось потеряно, но в эту минуту французы, наступавшие на наших, вдруг, без видимой причины, побежали назад, скрылись из опушки леса, и в лесу показались русские стрелки. Это была рота Тимохина, которая одна в лесу удержалась в порядке и, засев в канаву у леса, неожиданно атаковала французов. Тимохин с таким отчаянным криком бросился на французов и с такою безумною и пьяною решительностью, с одною шпажкой, набежал на неприятеля, что французы, не успев опомниться, побросали оружие и побежали. Долохов, бежавший рядом с Тимохиным, в упор убил одного француза и первый взял за воротник сдавшегося офицера. Бегущие возвратились, баталионы собрались, и французы, разделившие было на две части войска левого фланга, на мгновение были оттеснены. Резервные части успели соединиться, и беглецы остановились. Полковой командир стоял с майором Экономовым у моста, пропуская мимо себя отступающие роты, когда к нему подошел солдат, взял его за стремя и почти прислонился к нему. На солдате была синеватая, фабричного сукна шинель, ранца и кивера не было, голова была повязана, и через плечо была надета французская зарядная сумка. Он в руках держал офицерскую шпагу. Солдат был бледен, голубые глаза его нагло смотрели в лицо полковому командиру, а рот улыбался.Несмотря на то,что полковой командир был занят отданием приказания майору Экономову, он не мог не обратить внимания на этого солдата.
– Ваше превосходительство, вот два трофея, – сказал Долохов, указывая на французскую шпагу и сумку. – Мною взят в плен офицер. Я остановил роту. – Долохов тяжело дышал от усталости; он говорил с остановками. – Вся рота может свидетельствовать. Прошу запомнить, ваше превосходительство!
– Хорошо, хорошо, – сказал полковой командир и обратился к майору Экономову.
Но Долохов не отошел; он развязал платок, дернул его и показал запекшуюся в волосах кровь.
– Рана штыком, я остался во фронте. Попомните, ваше превосходительство.

Про батарею Тушина было забыто, и только в самом конце дела, продолжая слышать канонаду в центре, князь Багратион послал туда дежурного штаб офицера и потом князя Андрея, чтобы велеть батарее отступать как можно скорее. Прикрытие, стоявшее подле пушек Тушина, ушло, по чьему то приказанию, в середине дела; но батарея продолжала стрелять и не была взята французами только потому, что неприятель не мог предполагать дерзости стрельбы четырех никем не защищенных пушек. Напротив, по энергичному действию этой батареи он предполагал, что здесь, в центре, сосредоточены главные силы русских, и два раза пытался атаковать этот пункт и оба раза был прогоняем картечными выстрелами одиноко стоявших на этом возвышении четырех пушек.
Скоро после отъезда князя Багратиона Тушину удалось зажечь Шенграбен.
– Вишь, засумятились! Горит! Вишь, дым то! Ловко! Важно! Дым то, дым то! – заговорила прислуга, оживляясь.
Все орудия без приказания били в направлении пожара. Как будто подгоняя, подкрикивали солдаты к каждому выстрелу: «Ловко! Вот так так! Ишь, ты… Важно!» Пожар, разносимый ветром, быстро распространялся. Французские колонны, выступившие за деревню, ушли назад, но, как бы в наказание за эту неудачу, неприятель выставил правее деревни десять орудий и стал бить из них по Тушину.
Из за детской радости, возбужденной пожаром, и азарта удачной стрельбы по французам, наши артиллеристы заметили эту батарею только тогда, когда два ядра и вслед за ними еще четыре ударили между орудиями и одно повалило двух лошадей, а другое оторвало ногу ящичному вожатому. Оживление, раз установившееся, однако, не ослабело, а только переменило настроение. Лошади были заменены другими из запасного лафета, раненые убраны, и четыре орудия повернуты против десятипушечной батареи. Офицер, товарищ Тушина, был убит в начале дела, и в продолжение часа из сорока человек прислуги выбыли семнадцать, но артиллеристы всё так же были веселы и оживлены. Два раза они замечали, что внизу, близко от них, показывались французы, и тогда они били по них картечью.
Маленький человек, с слабыми, неловкими движениями, требовал себе беспрестанно у денщика еще трубочку за это , как он говорил, и, рассыпая из нее огонь, выбегал вперед и из под маленькой ручки смотрел на французов.
– Круши, ребята! – приговаривал он и сам подхватывал орудия за колеса и вывинчивал винты.
В дыму, оглушаемый беспрерывными выстрелами, заставлявшими его каждый раз вздрагивать, Тушин, не выпуская своей носогрелки, бегал от одного орудия к другому, то прицеливаясь, то считая заряды, то распоряжаясь переменой и перепряжкой убитых и раненых лошадей, и покрикивал своим слабым тоненьким, нерешительным голоском. Лицо его всё более и более оживлялось. Только когда убивали или ранили людей, он морщился и, отворачиваясь от убитого, сердито кричал на людей, как всегда, мешкавших поднять раненого или тело. Солдаты, большею частью красивые молодцы (как и всегда в батарейной роте, на две головы выше своего офицера и вдвое шире его), все, как дети в затруднительном положении, смотрели на своего командира, и то выражение, которое было на его лице, неизменно отражалось на их лицах.
Вследствие этого страшного гула, шума, потребности внимания и деятельности Тушин не испытывал ни малейшего неприятного чувства страха, и мысль, что его могут убить или больно ранить, не приходила ему в голову. Напротив, ему становилось всё веселее и веселее. Ему казалось, что уже очень давно, едва ли не вчера, была та минута, когда он увидел неприятеля и сделал первый выстрел, и что клочок поля, на котором он стоял, был ему давно знакомым, родственным местом. Несмотря на то, что он всё помнил, всё соображал, всё делал, что мог делать самый лучший офицер в его положении, он находился в состоянии, похожем на лихорадочный бред или на состояние пьяного человека.
Из за оглушающих со всех сторон звуков своих орудий, из за свиста и ударов снарядов неприятелей, из за вида вспотевшей, раскрасневшейся, торопящейся около орудий прислуги, из за вида крови людей и лошадей, из за вида дымков неприятеля на той стороне (после которых всякий раз прилетало ядро и било в землю, в человека, в орудие или в лошадь), из за вида этих предметов у него в голове установился свой фантастический мир, который составлял его наслаждение в эту минуту. Неприятельские пушки в его воображении были не пушки, а трубки, из которых редкими клубами выпускал дым невидимый курильщик.
– Вишь, пыхнул опять, – проговорил Тушин шопотом про себя, в то время как с горы выскакивал клуб дыма и влево полосой относился ветром, – теперь мячик жди – отсылать назад.
– Что прикажете, ваше благородие? – спросил фейерверкер, близко стоявший около него и слышавший, что он бормотал что то.
– Ничего, гранату… – отвечал он.
«Ну ка, наша Матвевна», говорил он про себя. Матвевной представлялась в его воображении большая крайняя, старинного литья пушка. Муравьями представлялись ему французы около своих орудий. Красавец и пьяница первый номер второго орудия в его мире был дядя ; Тушин чаще других смотрел на него и радовался на каждое его движение. Звук то замиравшей, то опять усиливавшейся ружейной перестрелки под горою представлялся ему чьим то дыханием. Он прислушивался к затиханью и разгоранью этих звуков.
– Ишь, задышала опять, задышала, – говорил он про себя.
Сам он представлялся себе огромного роста, мощным мужчиной, который обеими руками швыряет французам ядра.
– Ну, Матвевна, матушка, не выдавай! – говорил он, отходя от орудия, как над его головой раздался чуждый, незнакомый голос:
– Капитан Тушин! Капитан!
Тушин испуганно оглянулся. Это был тот штаб офицер, который выгнал его из Грунта. Он запыхавшимся голосом кричал ему:
– Что вы, с ума сошли. Вам два раза приказано отступать, а вы…
«Ну, за что они меня?…» думал про себя Тушин, со страхом глядя на начальника.
– Я… ничего… – проговорил он, приставляя два пальца к козырьку. – Я…
Но полковник не договорил всего, что хотел. Близко пролетевшее ядро заставило его, нырнув, согнуться на лошади. Он замолк и только что хотел сказать еще что то, как еще ядро остановило его. Он поворотил лошадь и поскакал прочь.
– Отступать! Все отступать! – прокричал он издалека. Солдаты засмеялись. Через минуту приехал адъютант с тем же приказанием.
Это был князь Андрей. Первое, что он увидел, выезжая на то пространство, которое занимали пушки Тушина, была отпряженная лошадь с перебитою ногой, которая ржала около запряженных лошадей. Из ноги ее, как из ключа, лилась кровь. Между передками лежало несколько убитых. Одно ядро за другим пролетало над ним, в то время как он подъезжал, и он почувствовал, как нервическая дрожь пробежала по его спине. Но одна мысль о том, что он боится, снова подняла его. «Я не могу бояться», подумал он и медленно слез с лошади между орудиями. Он передал приказание и не уехал с батареи. Он решил, что при себе снимет орудия с позиции и отведет их. Вместе с Тушиным, шагая через тела и под страшным огнем французов, он занялся уборкой орудий.
– А то приезжало сейчас начальство, так скорее драло, – сказал фейерверкер князю Андрею, – не так, как ваше благородие.
Князь Андрей ничего не говорил с Тушиным. Они оба были и так заняты, что, казалось, и не видали друг друга. Когда, надев уцелевшие из четырех два орудия на передки, они двинулись под гору (одна разбитая пушка и единорог были оставлены), князь Андрей подъехал к Тушину.
– Ну, до свидания, – сказал князь Андрей, протягивая руку Тушину.
– До свидания, голубчик, – сказал Тушин, – милая душа! прощайте, голубчик, – сказал Тушин со слезами, которые неизвестно почему вдруг выступили ему на глаза.


Ветер стих, черные тучи низко нависли над местом сражения, сливаясь на горизонте с пороховым дымом. Становилось темно, и тем яснее обозначалось в двух местах зарево пожаров. Канонада стала слабее, но трескотня ружей сзади и справа слышалась еще чаще и ближе. Как только Тушин с своими орудиями, объезжая и наезжая на раненых, вышел из под огня и спустился в овраг, его встретило начальство и адъютанты, в числе которых были и штаб офицер и Жерков, два раза посланный и ни разу не доехавший до батареи Тушина. Все они, перебивая один другого, отдавали и передавали приказания, как и куда итти, и делали ему упреки и замечания. Тушин ничем не распоряжался и молча, боясь говорить, потому что при каждом слове он готов был, сам не зная отчего, заплакать, ехал сзади на своей артиллерийской кляче. Хотя раненых велено было бросать, много из них тащилось за войсками и просилось на орудия. Тот самый молодцоватый пехотный офицер, который перед сражением выскочил из шалаша Тушина, был, с пулей в животе, положен на лафет Матвевны. Под горой бледный гусарский юнкер, одною рукой поддерживая другую, подошел к Тушину и попросился сесть.
– Капитан, ради Бога, я контужен в руку, – сказал он робко. – Ради Бога, я не могу итти. Ради Бога!
Видно было, что юнкер этот уже не раз просился где нибудь сесть и везде получал отказы. Он просил нерешительным и жалким голосом.
– Прикажите посадить, ради Бога.
– Посадите, посадите, – сказал Тушин. – Подложи шинель, ты, дядя, – обратился он к своему любимому солдату. – А где офицер раненый?
– Сложили, кончился, – ответил кто то.
– Посадите. Садитесь, милый, садитесь. Подстели шинель, Антонов.
Юнкер был Ростов. Он держал одною рукой другую, был бледен, и нижняя челюсть тряслась от лихорадочной дрожи. Его посадили на Матвевну, на то самое орудие, с которого сложили мертвого офицера. На подложенной шинели была кровь, в которой запачкались рейтузы и руки Ростова.
– Что, вы ранены, голубчик? – сказал Тушин, подходя к орудию, на котором сидел Ростов.
– Нет, контужен.
– Отчего же кровь то на станине? – спросил Тушин.
– Это офицер, ваше благородие, окровянил, – отвечал солдат артиллерист, обтирая кровь рукавом шинели и как будто извиняясь за нечистоту, в которой находилось орудие.