Опубликован: 20.02.2007 | Уровень: специалист | Доступ: платный
Лекция 19:

Создание и использование комплекта инструментов "живого ответа" для Unix

< Лекция 18 || Лекция 19: 12345 || Лекция 20 >
Аннотация: Эта лекция является продолжением предыдущей. Здесь описаны инструменты, которые могут использоваться в Unix-системах

Подобно компьютеру с системой Windows, рассмотренному в предыдущей лекции, инциденты, жертвой которых стал компьютер с системой Unix, могут быть также расследованы с помощью методики "живого ответа". Живой ответ позволяет вам получить данные, помогающие при расследовании инцидентов, которые касаются событий, произошедших до того, как машина была выключена для судебного дублирования, и которые пропадают при выключении машины. (Ваша компания может не позволить вам выключить машину, необходимую для выполнения судебного дублирования.) "Живой ответ" позволит вам выполнить качественное расследование и исправить ситуацию, возникшую в результате нападения. В этой лекции обсуждаются инструментальные средства, используемые для успешного "живого ответа", и демонстрируется их применение при изучении реального примера.

Все инструментальные средства, упомянутые в этой лекции, должны быть объединены в надежный набор инструментов живого ответа, который вы копируете на свой компакт диск или дискету. Поскольку все примеры с использованием командной строки в этой лекции предполагают, что текущим каталогом является ваше "средство живого ответа" (компакт диск или дискета, которая содержит ваш набор инструментов), то к началу командной строки надо присоединять путь ./. Использование пути ./ приведет к запуску инструмента из текущего каталога и предотвратит возможность выполнения инструмента с тем же именем, расположенного на ненадежной системе-жертве.

Чтобы проводить деятельность, связанную с "живым ответом", вы должны войти в систему с привилегированными правами (root). Большинство команд живого ответа не сможет делать вывод, если у вас нет привилегированных прав доступа (root) при обращении к объектам, для анализа которых они были разработаны.

Вывод всех команд, выполненных в этих расследованиях, будет производиться на компьютер, предназначенный для хранения и анализа данных. Не стоит сохранять информацию на локальном жестком диске машины-жертвы, потому что это могло бы уничтожить потенциальные свидетельства. Процесс передачи информации по сети может быть выполнен с помощью следующих команд - инструментов Netcat (или Cryptcat ).

Ниже показана команда, выполненная на машине-получателе, использующейся для расследования (с именем forensic-судебный):

forensic# nc -l -p <порт получателя> > <команда>.txt

Маркер <команда> будет представлять каждую из команд, выполненных на исходной машине-жертве (с именем victim - жертва).

На машине-жертве (с именем victim ) наберите следующую команду, чтобы выполнить <команду> и передать информацию на компьютер с IP-адресом <IP-адрес получателя> по TCP-порту <порт получателя>:

victim# ./ <команда> | .nc <IP-адрес получателя> <порт получателя>
Примечание. Последнюю часть этой команды ( | .nc <IP-адрес получателя> <порт получателя> ) нужно вставить во все команды, представленные в этой лекции, хотя это и не напечатано в примерах. Так сделано, чтобы избежать путаницы и сохранить простоту, поскольку вы изучаете концепции применения инструментальных средств, а не определенный синтаксис передачи данных по сети.

Система Unix работает иначе, чем Windows, в том отношении, что вы не можете просто скопировать нужные DLL-файлы на компакт-диск, если требуется делать запросы к файлам динамической компоновки. Вместо этого вы должны перекомпилировать их статически, потому что большинство инструментальных средств имеет открытый исходный код (то есть исходный код вам доступен). Объяснение статического компилирования инструментальных средств, представленных в этой лекции, выходит за рамки темы данной книги. Однако основное правило, которое стоит упомянуть, состоит в том, что нужно изменить файл makefile так, чтобы строки CFLAGS или LDFLAGS содержали маркер static. С некоторыми пакетами, чтобы создать makefile, сначала необходимо выполнить скрипт configure. Если вы не можете скомпилировать статическую версию, вы должны скопировать все библиотеки динамической компоновки на компакт-диск и изменить переменную среды LD_LIBRARY_PATH так, чтобы путь указывал то место, где будет смонтирован (mount) компакт-диск во время расследования (обычно что-то вроде /mnt/cdrom). Вы можете определить, какие библиотеки необходимы для работы исполняемых файлов, набрав следующее:

forensic * ldd/usr/local/sbin/lsof
        libkvm.so.2 = >/usr/lib/libkvm.so.2 (0x2807d000)
        libc.so.4 = >/usr/lib/libc.so.4 (0x28083000)

Эта команда показывает, что команда lsof для своей работы нуждается в файлах libkvm.so.2 и libc.so.4, если мы не перекомпилируем ее статически.

bash

Представьте себе на минуту, что вы взломщик, и хотите поддерживать доступ к системе, которую вы только что взломали. Вы хотите изменить некоторые из системных команд, например, командную оболочку (shell), чтобы скрыть свое присутствие в системе. Если вы сможете модифицировать командную оболочку, чтобы сделать то, что задумали, то поместите ее на взломанной системе.

Теперь вернитесь назад в положение человека, расследующего инцидент. Выполняя ответ на атаку, вы должны точно знать, что не пользуетесь этой поддельной оболочкой; поэтому вам нужно загрузить такую оболочку, которую вы сами скомпилировали и которой доверяете. На большинстве систем Unix-оболочки обычно находятся в каталоге /bin.

Реализация

Для запуска надежной оболочки наберите следующую команду:

victim# ./bash
Примечание. Оболочка bash - это одна из любимых командных оболочек автора, но можно использовать sh, tsh, csh, или другие оболочки в качестве альтернативы, если они были скопированы с надежной системы.

netstat

Команда netstat в системе Unix подобна аналогичной команде в системе Windows. Она перечисляет все сетевые подключения, прослушивающие TCP/UDP-порты в системе. Этот инструмент обеспечивает вас данными, которые будут полезны при поиске черных ходов и конечных точек сетевых подключений, связанных с системой жертвы. Netstat обычно находится в каталоге /bin или /usr/bin/, в зависимости от типа системы Unix, которую вы используете.

Реализация

Следующая команда используется в живом ответе. Обратите внимание, что она выглядит точно так же, как соответствующая команда в Windows:

victim# ./netstat -an

Следующий вывод является результатом команды netstat. Предполагается, что взломанная система имеет IP-адрес 192.168.1.104.

Active Internet connections (servers and established)
Proto  Recv-Q  Send-Q   Local Address   Foreign Address State   
tcp         0       0   0.0.0.0:4375    0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:98      0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:79      0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:513     0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:514     0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:23      0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:21      0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:25      0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:515     0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:113     0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:1024    0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:111     0.0.0.0:*   LISTEN
tcp         0       0   0.0.0.0:111     0.0.0.0:*   LISTEN
udp         0       0   0.0.0.0:518     0.0.0.0:*
udp         0       0   0.0.0.0:517     0.0.0.0:*
udp         0       0   0.0.0.0:513     0.0.0.0:*
udp         0       0   0.0.0.0:1026    0.0.0.0:*
udp         0       0   0.0.0.0:1025    0.0.0.0:*
udp         0       0   0.0.0.0:704     0.0.0.0:*
udp         0       0   0.0.0.0:689     0.0.0.0:*
udp         0       0   0.0.0.0:1024    0.0.0.0:*
udp         0       0   0.0.0.0:111     0.0.0.0:*
raw         0       0   0.0.0.0:1       0.0.0.0:*   7
raw         0       0   0.0.0.0:6       0.0.0.0:*   7
Active UNIX domain sockets (servers and established)
Proto   RefCnt  Flags     Type    State       I-Node  Path
unix    0       [ ACC ]   STREAM  LISTENING   517     /dev/printer
unix    7       [ ]       DGRAM               422     /dev/log
unix    0       [ ACC ]   STREAM  LISTENING   682     /tmp/.font-unix/fs-1
unix    0       [ ACC ]   STREAM  LISTENING   652     /dev/gpmctl
unix    0       [ ]       STREAM  CONNECTED   169     @00000014
unix    0       [ ]       DGRAM               853
unix    0       [ ]       DGRAM               720
unix    0       [ ]       DGRAM               685
unix    0       [ ]       DGRAM               636
unix    0       [ ]       DGRAM               511
unix    0       [ ]       DGRAM               446
unix    0       [ ]       DGRAM               434

Здесь мы видим, что порт 4375 открыт и прослушивает подключения. Я знаю, что раньше этот порт не был открыт (потому что являюсь системным администратором), и это необходимо расследовать! Никакие другие порты, упомянутые в результатах netstat, не требуют нашего внимания.

Версия netstat, работающая в системе Linux, позволяет использовать ключ -p, по которому порты прослушивания будут отображены в двоичные файлы, расположенные на диске, который их открывает. Команда выглядит следующим образом:

victim#./netstat -anp

Поскольку большинство разновидностей Unix не поддерживают флаг -p, мы не будем его использовать. Вместо этого в следующем разделе мы используем инструмент lsof, чтобы найти соответствие между открытыми портами и их "родительскими" процессами.

Совет. Если вы заинтересованы в получении таблицы маршрутизации хоста, можете получить ее, добавив ключ -r к утилите netstat.
< Лекция 18 || Лекция 19: 12345 || Лекция 20 >
Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва