Подобно компьютеру с системой 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, если мы не перекомпилируем ее статически.
Представьте себе на минуту, что вы взломщик, и хотите поддерживать доступ к системе, которую вы только что взломали. Вы хотите изменить некоторые из системных команд, например,
Теперь вернитесь назад в положение человека, расследующего инцидент. Выполняя ответ на атаку, вы должны точно знать, что не пользуетесь этой поддельной оболочкой; поэтому вам нужно загрузить такую оболочку, которую вы сами скомпилировали и которой доверяете. На большинстве систем Unix-оболочки обычно находятся в каталоге /bin.
Для запуска надежной оболочки наберите следующую команду:
victim# ./bash
bash - это одна из любимых командных оболочек автора, но можно использовать sh, tsh, Команда 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.Таблица ARP (Address Resolution Protocol - Протокол определения адресов) устанавливает соответствие между физическим машинным MAC-адресом Ethernet-карты и соответствующим IP-адресом в подсети. Поскольку большинство сетей не обеспечивают безопасность локальной подсети, связывая определенный MAC-адрес с IP-адресом, используя коммутаторы, то любой может изменить свою ARP -таблицу или IP-адрес и вызвать смуту. Это происходит, например, когда один из служащих маскируется под другого служащего во внутренней сети. Используя команду ARP, вы можете видеть, какой MAC-адрес соответствовал определенному IP-адресу в течение последних нескольких минут, и это поможет вам выследить жулика.
Программа ARP обычно расположена в каталоге /sbin или /usr/sbin, в зависимости от версии Unix, которую вы используете.
Команда используется для просмотра ARP -таблицы машины-жертвы. Очень похожа на команду, которая используется при живом ответе в Windows:
victim# ./arp -an
С системы-жертвы возвращается следующая таблица ARP:
? (192.168.1.1) at 00:BD:81:43:07:03 [ether] on eth0
Результаты показывают, что машина с IP-адресом 192.168.1.1 имеет MAC-адрес 00:BD:81:43:07:03. Эта дополнительная часть информации помогает нам при отслеживании адреса 192.168.1.1 из нашей сети, когда мы не регулируем IP-адреса сами. Мы можем проверять каждую машину, пока не найдем MAC-адрес 00:BD:81:43:07:03.
Использование команды ls в Unix подобно использованию команды dir при выполнении живого ответа в Windows. Мы можем использовать ее, чтобы собрать те файлы системы, к которым недавно обращались или которые недавно изменялись. Неплохо выполнить эту команду, чтобы ни одна временная метка в системе не была потеряна на случай, если в процессе живого ответа будет сделана ошибка. Команда ls обычно находится в каталоге /bin.
ls для получения меток времени и даты.Чтобы собрать файлы, к которым кто-либо обращался в последнее время, выполните следующую команду:
victim# ls-alR --time=atime/
Соответствующие файлы, возвращенные в результате этой команды, показаны в следующем фрагменте. Сначала, мы видим файлы из каталога /etc.
-rw-r--r-- 1 root root 7470 Mar 21 06:32 mime.types -rw-r--r-- 1 root root 1048 Mar 7 2000 minicom.users -rw-r--r-- 1 root kjohnson 196 Mar 22 00:17 motd -rw-r--r-- 1 root root 90 Mar 22 00:23 mtab -rw-r--r-- 1 root root 1925 Feb 9 2000 mtools.conf
Затем мы видим файлы в подкаталоге home каталога /kjohnson:
/home/kjohnson: total 240 drwx------ 2 root kjohnson 4096 Mar 22 00:30 . drwxr-xr-x 7 root root 4096 Mar 22 00:30 .. -rw------- 1 root kjohnson 216 Mar 22 00:18 .bash_history -rw-r--r-- 1 root kjohnson 24 Mar 22 00:18 .bash_logout -rw-r--r-- 1 root kjohnson 230 Mar 21 23:40 .bash_profile -rw-r--r-- 1 root kjohnson 124 Mar 21 23:40 .bashrc -rw-r--r-- 1 root kjohnson 3394 Mar 21 23:39 .screenrc -rwxr-xr-x 1 root kjohnson 210096 Mar 22 00:13 1
Чтобы собрать файлы, которые в последнее время модифицировались, выполняем следующую команду:
victim# ls-alR - time=mtime/
Если команда не сработала, это может означать, что модифицированные файлы уже были отображены по умолчанию (так обстоит дело в системе Linux).
Если файлы, модифицированные в ближайшее время, были показаны по умолчанию, то вместо предыдущей команды можно использовать следующую:
victim# ls-alR/
В результате этой команды были отображены следующие файлы. Сначала видим подозрительные файлы в каталоге /etc.
-rw-r--r-- 1 root root 7470 Mar 21 06:32 mime.types -rw-r--r-- 1 root root 1048 Mar 7 2000 minicom.users -rw-r--r-- 1 root kjohnson 196 Mar 22 00:17 motd -rw-r--r-- 1 root root 90 Mar 22 00:23 mtab -rw-r--r-- 1 root root 1925 Feb 9 2000 mtools.conf
Затем смотрим файлы из подкаталога home каталога /kjohnson.
/home/kjohnson: total 240 drwx------ 2 root kjohnson 4096 Mar 22 00:18 . drwxr-xr-x 7 root root 4096 Mar 21 23:39 .. -rw------- 1 root kjohnson 216 Mar 22 00:18 .bash_history -rw-r--r-- 1 root kjohnson 24 Mar 21 23:39 .bash_logout -rw-r--r-- 1 root kjohnson 230 Mar 21 23:39 .bash_profile -rw-r--r-- 1 root kjohnson 124 Mar 21 23:39 .bashrc -rw-r--r-- 1 root kjohnson 3394 Mar 21 23:39 .screenrc -rwxr-xr-x 1 root kjohnson 210096 Mar 21 23:43 1
Чтобы собрать данные о том, когда изменялась какая-либо информация в пределах
victim# ls -alR --time=ctime /
Эта команда даст почти такие же результаты как та, которую мы использовали для получения последних модифицированных файлов в начале этого раздела. Другие результаты могут получиться только в том случае, если были изменены свойства файла без изменения содержимого самого файла.
В подкаталоге home каталога /kjohnson мы видим подозрительный файл с именем 1. Сейчас он может не иметь для нас большого значения, но он будет играть важную роль позже в разделе "Пример из жизни".
Для системы Unix существует команда w, подобная команде loggedon, которую мы использовали с системой Windows. Эта команда отображает всех пользователей, в настоящее время вошедших в систему, и их исходящие IP-адреса. Эта команда полезна при расследовании неправомочного использования учетных записей в системе Unix.
Команда w расположена в каталоге /usr/bin.
Чтобы использовать команду w, наберите следующее:
victim# w
Вывод команды w на нашей машине-жертве выглядит следующим образом:
12:24am up 1:38, 1 user, load average: 0.02, 0.02, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT Root tty1 - 10:44pm 0.00s 0.71s 0.03s w
Поскольку мы вошли в систему в качестве привилегированного (root) пользователя с консоли (обозначено символом " - " в столбце FROM ), мы не видим никакой подозрительной деятельности.
Чтобы посмотреть последние входы пользователей в систему на определенной системе Unix, используются команды last и lastb. Команды last и lastb отображают последние, успешные или неудавшиеся, входы в систему, соответственно. Команда last помогает получить свидетельства о фактах неправомочного использования учетной записи в нашей системе, в то время как команда lastb может обнаружить свидетельства использования грубой силы против нашей машины.
Команды last и lastb обычно расположены в каталоге /usr/bin.
lastb по умолчанию. В частности, в системе Linux для того, чтобы работала команда lastb, нужно предварительно создать файл /var/log/btm командой touch.В сценарии своего расследования вам нужно сделать дамп всех попыток входа в систему. Это должно выполняться следующей командой (при использовании команды lastb, замените last на lastb):
victim# last
Команда выведет следующие результаты с нашей машины-жертвы:
mpepe pts/0 192.168.1.1 Thu Mar 21 23:37 - 00:24 (00:46) root tty1 Thu Mar 21 22:44 still logged in reboot system boot 2.2.14-5.0 Fri Mar 22 03:42 (-3:-6) root tty1 Fri Mar 22 03:39 - down (00:00) reboot system boot 2.2.14-5.0 Fri Mar 22 03:09 (00:30) reboot system boot 2.2.14-5.0 Thu Mar 21 09:04 (18:36) wtmp begins Thu Mar 21 09:04:17 2002
Как видим, регистрация входа в систему пользователя kjohnson отсутствует. Мы можем сделать еще несколько заключений: или файлы регистрации были испорчены взломщиком, или он взломал учетную запись mpepe и переключил пользователя, используя команду su, на учетную запись kjohnson.
Поскольку для большинства разновидностей систем Unix отсутствует версия netstat, которая поддерживает флаг -p, то для отображения сетевых сокетов, открытых в файловой системе для исполняемых файлов, мы используем инструмент, который называется lsof. В этом отношении, lsof подобен инструменту fport, который был описан в предыдущей лекции. Кроме того, lsof покажет нам все открытые файлы в системе. Инструмент lsof распространяется бесплатно и перенесен почти на все разновидности системы Unix. Хотя lsof имеет множество опций, полезных для обычного системного администратора, в этой лекции обсуждаются только те опции, которые полезны для сценария "живого ответа". Если вам интересно использование других опций, с помощью команды man посмотрите страницы, посвященные утилите lsof. На них этот инструмент широко обсуждается.
lsof доступен на следующих FTP-сайтах:
Используйте следующую команду, чтобы получить список всех открытых сокетов и файлов в системе:
victim# ./lsof -n
Опция -n используется в команде lsof, чтобы не выполнять обратный поиск имен DNS для всех IP-адресов, перечисленных в результатах. В целях нашего расследования, мы стараемся не полагаться на полностью квалифицированные имена доменов, потому что они могут меняться; лучше использовать действующие IP-адреса. Ниже показан вывод этой команды.
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME inetd 721 root cwd DIR 3,2 4096 2 / inetd 721 root rtd DIR 3,2 4096 2 / inetd 721 root txt REG 3,2 21552 35319 /usr/sbin/inetd inetd 721 root mem REG 3,2 340663 146606 /lib/ld-2.1.3.so inetd 721 root mem REG 3,2 4101324 146613 /lib/libc-2.1.3.so inetd 721 root mem REG 3,2 246652 146644 /lib/libnss_files-2.1.3.so inetd 721 root 0u CHR 1,3 65387 /dev/null inetd 721 root 1u CHR 1,3 65387 /dev/null inetd 721 root 2u CHR 1, 65387 /dev/null inetd 721 root 3u IPv4 745 TCP *:39168 (LISTEN) inetd 721 root 4u IPv4 746 TCP 192.168.1.104:39168-192.168.1.1:2028 (CLOSE_WAIT) inetd 721 root 5u unix 0xc2a99980 853 socket inetd 721 root 6u IPv4 748 TCP *:ftp (LISTEN) inetd 721 root 7u IPv4 749 TCP *:telnet (LISTEN) inetd 721 root 8u IPv4 750 TCP *:shell (LISTEN) inetd 721 root 9u IPv4 751 TCP *:login (LISTEN) inetd 721 root 10u IPv4 752 UDP *:talk inetd 721 root 11u IPv4 753 UDP *:ntalk inetd 721 root 12u IPv4 754 TCP *:finger (LISTEN) inetd 721 root 13u IPv4 755 TCP *:linuxconf (LISTEN) inetd 721 root 14u IPv4 756 TCP *:4375 (LISTEN) 1 881 root cwd DIR 3,2 4096 83456 /home/kjohnson 1 881 root rtd DIR 3,2 4096 2 / 1 881 root txt REG 3,2 210096 83461 /home/kjohnson/1 1 881 root mem REG 3,2 340663 146606 /lib/ld-2.1.3.so 1 881 root mem REG 3,2 4101324 146613 /lib/libc-2.1.3.so 1 881 root mem REG 3,2 246652 146644 /lib/ /libnss_files-2.1.3.so 1 881 root 0u CHR 136,0 2 /dev/pts/0 1 881 root 1u CHR 136,0 2 /dev/pts/0 1 881 root 2u CHR 136,0 2 /dev/pts/0 1 881 root 3u sock 0,0 954 can't identify protocol 1 881 root 4w REG 3,2 36864 35934 /tmp/.net
Здесь мы видим, что inetd открыл TCP-порт 4375. Следовательно, мы должны исследовать файл /etc/inetd.conf. Далее мы видим, что исполняемый файл 1 открывает файл с именем /tmp/.net, и этот файл также надо исследовать. Исполняемый файл 1 открывает также "сырой" (необработанный) сокет, как видно из следующей строки:
1 881 root 3u sock 0,0 954 can't identify protocol
Если мы убеждаемся, что этот исполняемый файл открывает "сырой" сокет и обычный файл, то можно предполагать, что исполняемый файл 1 может быть анализатором сетевого трафика (
Чтобы получить список процессов, в настоящее время выполняющихся в системе, используется команда ps. Эта команда подобна программе Pslist, которую мы обсуждали в лекции "Компоновка и использование набора инструментов для расследования хакерских атак, то есть для "живого ответа" в системе Windows". Мы используем команду ps, чтобы увидеть процессы, запущенные взломщиком, такие как анализаторы сетевых потоков (sniffers), черные ходы для скрытого удаленного администрирования, зомби, вызывающие распределенный отказ в обслуживании, а также взломщики паролей (
Команда ps обычно расположена в каталоге /bin.
Когда мы собираем информацию о процессах, мы хотим видеть все процессы, которые в настоящее время выполняются в системе, и какие пользователи ими управляют. Это можно сделать с помощью следующей команды:
victim# ./ps-aux
Ниже показан список процессов нашей машины-жертвы. Обратите внимание, что мы можем видеть время начала каждого процесса, то есть, можем узнать, какие процессы были выполнены вскоре после того, как система была взломана.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.7 1120 476 ? S Mar21 0:06 init [3] root 2 0.0 0.0 0 0 ? SW Mar21 0:00 [kflushd] root 3 0.0 0.0 0 0 ? SW Mar21 0:01 [kupdate] root 4 0.0 0.0 0 0 ? SW Mar21 0:00 [kpiod] root 5 0.0 0.0 0 0 ? SW Mar21 0:00 [kswapd] root 6 0.0 0.0 0 0 ? SW Mar21 0:00 [mdrecoveryd] bin 319 0.0 0.7 1212 496 ? S Mar21 0:00 portmap root 334 0.0 0.0 0 0 ? SW Mar21 0:00 [lockd] root 335 0.0 0.0 0 0 ? SW Mar21 0:00 [rpciod] root 358 0.0 0.7 1104 480 ? S Mar21 0:00 /usr/sbin/apmd -p root 409 0.0 0.8 1172 552 ? S Mar21 0:00 syslogd -m 0 root 418 0.0 1.2 1440 768 ? S Mar21 0:00 klogd nobody 432 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 435 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 436 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 438 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 439 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o daemon 450 0.0 0.7 1144 496 ? S Mar21 0:00 /usr/sbin/atd root 464 0.0 0.9 1328 620 ? S Mar21 0:00 crond root 496 0.0 0.8 1204 532 ? S Mar21 0:00 lpd root 510 0.0 0.8 1156 532 ? S Mar21 0:00 rpc.rstatd root 526 0.0 0.6 1140 408 ? S Mar21 0:00 rpc.rusersd nobody 540 0.0 0.9 1316 612 ? S Mar21 0:00 rpc.rwalld root root 554 0.0 0.8 1132 552 ? S Mar21 0:00 rwhod root 598 0.0 1.7 2128 1124 ? S Mar21 0:00 sendmail: accepti root 613 0.0 0.7 1144 456 ? S Mar21 0:00 gpm -t ps/2 xfs 647 0.0 1.2 1728 808 ? S Mar21 0:00 xfs -droppriv -da root 685 0.0 1.6 2224 1040 tty1 S Mar21 0:00 login - root root 686 0.0 0.6 1092 408 tty2 S Mar21 0:00 /sbin/mingetty tt root 687 0.0 0.6 1092 408 tty3 S Mar21 0:00 /sbin/mingetty tt root 688 0.0 0.6 1092 408 tty4 S Mar21 0:00 /sbin/mingetty tt root 689 0.0 0.6 1092 408 tty5 S Mar21 0:00 /sbin/mingetty tt root 690 0.0 0.6 1092 408 tty6 S Mar21 0:00 /sbin/mingetty tt root 693 0.0 1.5 1716 976 tty1 S Mar21 0:00 -bash root 721 0.0 0.8 1156 520 ? S Mar21 0:00 /usr/sbin/inetd root 881 0.0 1.2 1964 776 ? S 00:14 0:00 ./1 -s 65535 -n - root 975 0.0 1.1 2332 700 tty1 R 00:34 0:00 ps aux
Если мы рассмотрим процесс, соответствующий выполнению команды 1, мы увидим, что он выполняется как процесс с идентификатором (ID) 721. Процесс был запущен пользователем с правами привилегированного доступа (root) в 00:14 того же дня. Следовательно, если мы знаем, что пользователь с именем kjohnson, запустивший исполняемый файл 1, был неправомочным пользователем в системе, и этот процесс выполняется с правами привилегированного доступа (root), то, вероятно, у взломщика есть право привилегированного доступа.
Примеры, приведенные в этой книге, показывают такой ps может делать вывод данных в разнообразных форматах. Формат, заданный в первой команде ps (ps -, отсекает часть синтаксиса командной строки перечисляемых процессов. Чтобы решить проблему с отсечением части данных, мы можем переформатировать вывод команды ps следующим образом:
victim# ./ps-axo <var1>, <var2>, :
Маркер <var> может представлять любой из параметров, перечисленных далее. Столбец "код" содержит код, который вы вводите как <var1>, <var2> и так далее; столбец "заголовок" содержит название заголовка, который появляется в выводе команды ps. С помощью этих кодов можно инвентаризировать почти любой аспект
| Код | Заголовок |
|---|---|
%cpu |
%CPU |
% |
% |
|
|
args |
COMMAND |
blocked |
BLOCKED |
bsdstart |
START |
bsdtime |
TIME |
c |
C |
caught |
CAUGHT |
cmd |
CMD |
comm. |
COMMAND |
command |
COMMAND |
cputime |
TIME |
drs |
DRS |
dsiz |
DSIZ |
egid |
EGID |
egroup |
EGROUP |
|
|
|
|
etime |
ELAPSED |
|
|
euser |
EUSER |
f |
F |
fgid |
FGID |
fgroup |
FGROUP |
flag |
F |
flags |
F |
fname |
COMMAND |
fsgid |
FSGID |
fsgroup |
FSGROUP |
fsuid |
FSUID |
fsuser |
FSUSER |
fuid |
FUID |
|
|
|
|
group |
GROUP |
ignored |
IGNORED |
intpri |
|
|
|
longtname |
TTY |
lstart |
STARTED |
m_drs |
DRS |
m_trs |
TRS |
maj_flt |
MAJFL |
majflt |
MAJFLT |
min_flt |
MINFL |
minflt |
MINFLT |
ni |
NI |
nice |
NI |
nwchan |
WCHAN |
opri |
|
pagein |
PAGEIN |
pcpu |
%CPU |
|
|
pgid |
PGID |
pgrp |
PGRP |
pid |
PID |
pmem |
% |
|
|
|
|
rgid |
RGID |
rgroup |
RGROUP |
rss |
RSS |
rssize |
RSS |
rsz |
RSZ |
ruid |
RUID |
ruser |
RUSER |
s |
S |
sess |
SESS |
session |
SESS |
sgi_p |
P |
sgi_rss |
RSS |
sgid |
SGID |
sgroup |
SGROUP |
sid |
SID |
|
|
sig_block |
BLOCKED |
sig_catch |
CATCHED |
sig_ignore |
IGNORED |
sig_pend |
SIGNAL |
sigcatch |
CAUGHT |
sigignore |
IGNORED |
sigmask |
BLOCKED |
stackp |
STACKP |
start |
STARTED |
start_stack |
STACKP |
start_time |
START |
stat |
STAT |
state |
S |
stime |
STIME |
suid |
SUID |
suser |
SUSER |
svgid |
SVGID |
svgroup |
SVGROUP |
svuid |
SVUID |
svuser |
SVUSER |
sz |
SZ |
time |
TIME |
timeout |
TMOUT |
tmout |
TMOUT |
tname |
TTY |
tpgid |
TPGID |
trs |
TRS |
trss |
TRSS |
tsiz |
TSIZ |
tt |
TT |
tty |
TT |
tty4 |
TTY |
tty8 |
TTY |
ucomm |
COMMAND |
uid |
UID |
uid_hack |
UID |
uname |
USER |
user |
USER |
vsize |
VSZ |
vsz |
VSZ |
wchan |
WCHAN |
Многие из этих полей могут быть вам не интересны. Тем не менее, некоторые из них могут оказаться полезными. Например, если вы хотели посмотреть только идентификаторы процессов ID (PID), пользователей, которые создали процессы, время их запуска и полную командную строку, понадобится следующая команда:
victim# ./ps-axo pid,uid,start,command
Эта командная строка вывела бы больше синтаксиса командных строк, перечисленных процессов, чем выводит версия ps -.
Если начальство просит нас немедленно исправить ситуацию, мы можем уничтожить подозрительный процесс, запущенный взломщиком (ID 721). Это можно сделать с помощью команды kill. Команда kill установлена по умолчанию в операционных системах Unix и может быть найдена в каталоге /bin.
Следующая команда уничтожит процесс с идентификатором <PID>:
victim# ./kill-9 <PID>
После того как вся информация была передана на компьютер, используемый для расследования (судебный), неплохо получить контрольную сумму MD5-вывода. Поскольку на судебном компьютере может быть установлена система Unix (вместо системы Windows, которая демонстрируется в лекции "Компоновка и использование набора инструментов для расследования хакерских атак, то есть для "живого ответа" в системе Windows"), то в этом разделе мы предлагаем правильную нотацию команд для Unix.
Версия Md5sum распространяется с основной операционной системой Linux, и подобная ей версия, md5, распространяется с системой FreeBSD. Инструментальные средства вычисления контрольной суммы MD5 будут обсуждаться снова в лекции "Некоммерческие наборы инструментов, предназначенные для судебного дублирования".
Md5sum вычисляет контрольную сумму.Следующая команда вычислит контрольную сумму MD5-файлов вывода и сохранит их в файле с именем md5sums.txt.
forensic# md5sum-b * > md5sums.txt
В любой момент утилита Md5sum может проверять контрольные суммы MD5 любых файлов, если вы снабдите ее списком этих файлов. Следующая команда проверит контрольные суммы MD5 для списка файлов и сообщит о любом изменении в их содержании.
forensic# md5sum-c md5sums.txt
md5sum, а md5, и она не требует ключа -b.Инструмент и выполнять на большинстве систем с ядром Linux v2.2 (хотя он был разработан на RedHat и наилучшие результаты показал на подобной системе).
Поскольку процессы могут выполняться без связанных с ними двоичных файлов в файловой системе, традиционное силовое выключение машины уничтожило бы улики. Следовательно, процессы, скрытые с помощью команды kill -31 инструмента Knark, могли бы быть найдены, если бы было возможно проникнуть в ядро и исследовать таблицу процессов. Поэтому один из возможных способов бороться с комплектами LKM root состоит в использовании LKM-решений, в связи с чем и был создан инструмент Carbonite.
Инструмент Carbonite должен компилироваться на системе, имеющей то же ядро, что и машина-жертва. Версию ядра можно, обычно, посмотреть с помощью следующей команды:
victim# uname-a
После того как надежная машина с такой же самой версией ядра, как у вашей машины-жертвы, найдена, разархивируйте содержимое пакета Carbonite и измените каталог в ней. Введите следующую команду, чтобы создать пакет:
forensic# make
Пакет компилируется, и создается файл carbonite.o. Скопируйте этот каталог на машину-жертву надежным способом (через диск или компакт диск). Затем Carbonite нужно установить в ядро, используя команду
victim# ./carbonite.sh
Carbonite в живом ответе, вы захотите указать скрипт в надежной версии загрузчика модуля (insmod) так, чтобы не использовать копию, принадлежащую взломанной машине.Когда Carbonite внесен в ядро, он временно замораживает систему, пока не выполнит свою миссию. Он создает каталог /tmp/CARBONITE, который будет содержать копию каждого процесса, выполняющегося на машине. Имена копий процессов будут CARBONITE.< Команда> < PID >, где < команда > - имя процесса и < PID > - ID процесса.
Создается дополнительный файл, CARBONITE.html, который может быть загружен в Web-браузер. Этот файл подобен файлу, созданному с помощью команды ps (рассматривался ранее), но поскольку он получен в результате прямого входа в ядро, то он более надежен и показывает все процессы, даже если они скрыты с помощью инструмента Knark.
Carbonite будет вести запись в среде хоста. Учтите это, если планируете оставить открытой возможность судебного дублирования!Этот инструмент еще не выпущен публично; его дебют состоится в этой книге. Написанный Кейтом Джонсом (Keith J. Jones) инструмент execve_sniffer в большей степени является программой "доказательства-концепции", чем инструментом, "пригодным для часа пик", но его можно изменить так, чтобы удовлетворить определенные потребности. Инструмент execve_sniffer загружается как модуль ядра. Он "обертывает" системный вызов execve. После того как системный вызов запакован, все запросы к этой функции будут полностью зарегистрированы в виде сообщений ядра.
Чтобы понять, почему это действие важно, вы должны понять системный вызов execve. Каждый раз, когда в системе выполняется команда, командная строка передается в системный вызов execve для выполнения. Когда мы обертываем этот системный вызов, то можем сделать с информацией, которая передается в этот вызов, что захотим (подобно тому, что делает инструмент Knark, описанный в лекции "Черный ход и средства удаленного доступа"). Поскольку мы ребята хорошие, то хотим лишь сообщать о том, какая команда была выполнена, а затем передавать саму команду оригинальному системному вызову execve.
Вся эта работа может показаться неважной, если вы можете поместить в сеть анализатор сетевых потоков (execve_sniffer скрыть его с помощью инструмента modhide.o, имеющегося в Knark, чтобы преступник его не обнаружил и не попытался выгрузить.
Следующий текст дает пример вывода инструмента execve_sniffer из системы RedHat v6.2 Linux.
Execve Sniffer Inserted execve - user: 0 pid: 769 filename: /sbin/lsmod args: lsmod execve - user: 0 pid: 770 filename: /usr/bin/w args: w execve - user: 0 pid: 771 filename: /usr/sbin/tcpdump args: tcpdump -s 65535 -n -w /tmp/.net execve - user: 0 pid: 772 filename: /bin/dmesg args: dmesg
Как уже упоминалось, этот инструмент борется против команд взломщика, выполняющихся по зашифрованному каналу. Даже если взломщик выполняет команды, и нам не видно, что он набирает (через контроль сети), теперь мы можем видеть полное содержание того, что он выполняет.
Пример из жизни. Сценарий взлома системы Unix
В этом примере мы анализируем систему RedHat v6.2 Linux. На хосте установлена стандартная система RedHat без ненужных служб, которые были заблокированы и удалены.
Взломщик получил доступ через службу rpc.statd, которая распространялась несколько лет назад. Как только взломщик получил доступ в систему, он добавил новых пользователей так, чтобы он мог воспользоваться утилитой telnet в любое время, когда захочет. Этот метод взлома оставляет "отпечатки пальцев" в живом ответе, который мы здесь выполним.
Системный администратор вошел в систему утром и заметил, что файл дневных сообщений (файл /etc/
"Ваш сайт парализован. Я взломал его. Я планирую удалить файлы, если вы не заплатите мне $4000. Это не шутка. Я крутой парень! Your momma wears combat boots! Подписано, Владимир Дорохов"
Администратор, конечно, покачал головой, решив, что слишком ретивый ребенок решил позабавиться с его системой.
И снова начальство хотело бы иметь подтверждение серьезности этого электронного сообщения прежде, чем они задействуют ресурсы, необходимые для расследования. Вооруженный своим диском, содержащим средства ответа на инциденты, системный администратор начинает "живой ответ".
Примеры, представленные в этой лекции были зафиксированы при использовании данной машины-жертвы. Вернитесь к этим примерам, чтобы освежить в памяти результаты, которые мы получили.
lsof. С помощью команды lsof обнаруживаются два подозрительных процесса: процесс 1, который записывает в файл и открыл "сырой" сокет, и процессы inetd, которые открыли TCP-порт 4375. После дальнейшего анализа файла inetd.conf мы видим, что демон открыл TCP-порт, который связан с привилегированной оболочкой (root shell). Короче говоря, это обеспечивает приглашение к вводу команд, которое не нуждается ни в каких мандатах для входа в систему с привилегированным доступом (поэтому они не обнаруживаются в выводе команд last или w ). Для такого входа в систему никогда не должно быть никаких законных причин. Ниже приведена строка из файла inetd.conf:
4375 stream tcp nowait root /bin/sh -h
ls. Команда ls дает нам новую учетную запись пользователя (kjohnson), которая отсутствовала в системе перед тем, как машина была взломана. Каталог содержит исполняемый файл 1, и мы можем видеть, когда он, вероятно, был создан (из последних модифицированных файлов) и выполнен (из файлов, к которым последний раз обращались).
last. Команда last дает нам последнюю ключевую часть информации, потому что мы никогда не видели вход в систему пользователя с именем kjohnson (kjohnson был владельцем процесса 1 и изменил файл /etc/su.
Подобно компьютеру с системой 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, если мы не перекомпилируем ее статически.
Представьте себе на минуту, что вы взломщик, и хотите поддерживать доступ к системе, которую вы только что взломали. Вы хотите изменить некоторые из системных команд, например,
Теперь вернитесь назад в положение человека, расследующего инцидент. Выполняя ответ на атаку, вы должны точно знать, что не пользуетесь этой поддельной оболочкой; поэтому вам нужно загрузить такую оболочку, которую вы сами скомпилировали и которой доверяете. На большинстве систем Unix-оболочки обычно находятся в каталоге /bin.
Для запуска надежной оболочки наберите следующую команду:
victim# ./bash
bash - это одна из любимых командных оболочек автора, но можно использовать sh, tsh, Команда 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.Таблица ARP (Address Resolution Protocol - Протокол определения адресов) устанавливает соответствие между физическим машинным MAC-адресом Ethernet-карты и соответствующим IP-адресом в подсети. Поскольку большинство сетей не обеспечивают безопасность локальной подсети, связывая определенный MAC-адрес с IP-адресом, используя коммутаторы, то любой может изменить свою ARP -таблицу или IP-адрес и вызвать смуту. Это происходит, например, когда один из служащих маскируется под другого служащего во внутренней сети. Используя команду ARP, вы можете видеть, какой MAC-адрес соответствовал определенному IP-адресу в течение последних нескольких минут, и это поможет вам выследить жулика.
Программа ARP обычно расположена в каталоге /sbin или /usr/sbin, в зависимости от версии Unix, которую вы используете.
Команда используется для просмотра ARP -таблицы машины-жертвы. Очень похожа на команду, которая используется при живом ответе в Windows:
victim# ./arp -an
С системы-жертвы возвращается следующая таблица ARP:
? (192.168.1.1) at 00:BD:81:43:07:03 [ether] on eth0
Результаты показывают, что машина с IP-адресом 192.168.1.1 имеет MAC-адрес 00:BD:81:43:07:03. Эта дополнительная часть информации помогает нам при отслеживании адреса 192.168.1.1 из нашей сети, когда мы не регулируем IP-адреса сами. Мы можем проверять каждую машину, пока не найдем MAC-адрес 00:BD:81:43:07:03.
Использование команды ls в Unix подобно использованию команды dir при выполнении живого ответа в Windows. Мы можем использовать ее, чтобы собрать те файлы системы, к которым недавно обращались или которые недавно изменялись. Неплохо выполнить эту команду, чтобы ни одна временная метка в системе не была потеряна на случай, если в процессе живого ответа будет сделана ошибка. Команда ls обычно находится в каталоге /bin.
ls для получения меток времени и даты.Чтобы собрать файлы, к которым кто-либо обращался в последнее время, выполните следующую команду:
victim# ls-alR --time=atime/
Соответствующие файлы, возвращенные в результате этой команды, показаны в следующем фрагменте. Сначала, мы видим файлы из каталога /etc.
-rw-r--r-- 1 root root 7470 Mar 21 06:32 mime.types -rw-r--r-- 1 root root 1048 Mar 7 2000 minicom.users -rw-r--r-- 1 root kjohnson 196 Mar 22 00:17 motd -rw-r--r-- 1 root root 90 Mar 22 00:23 mtab -rw-r--r-- 1 root root 1925 Feb 9 2000 mtools.conf
Затем мы видим файлы в подкаталоге home каталога /kjohnson:
/home/kjohnson: total 240 drwx------ 2 root kjohnson 4096 Mar 22 00:30 . drwxr-xr-x 7 root root 4096 Mar 22 00:30 .. -rw------- 1 root kjohnson 216 Mar 22 00:18 .bash_history -rw-r--r-- 1 root kjohnson 24 Mar 22 00:18 .bash_logout -rw-r--r-- 1 root kjohnson 230 Mar 21 23:40 .bash_profile -rw-r--r-- 1 root kjohnson 124 Mar 21 23:40 .bashrc -rw-r--r-- 1 root kjohnson 3394 Mar 21 23:39 .screenrc -rwxr-xr-x 1 root kjohnson 210096 Mar 22 00:13 1
Чтобы собрать файлы, которые в последнее время модифицировались, выполняем следующую команду:
victim# ls-alR - time=mtime/
Если команда не сработала, это может означать, что модифицированные файлы уже были отображены по умолчанию (так обстоит дело в системе Linux).
Если файлы, модифицированные в ближайшее время, были показаны по умолчанию, то вместо предыдущей команды можно использовать следующую:
victim# ls-alR/
В результате этой команды были отображены следующие файлы. Сначала видим подозрительные файлы в каталоге /etc.
-rw-r--r-- 1 root root 7470 Mar 21 06:32 mime.types -rw-r--r-- 1 root root 1048 Mar 7 2000 minicom.users -rw-r--r-- 1 root kjohnson 196 Mar 22 00:17 motd -rw-r--r-- 1 root root 90 Mar 22 00:23 mtab -rw-r--r-- 1 root root 1925 Feb 9 2000 mtools.conf
Затем смотрим файлы из подкаталога home каталога /kjohnson.
/home/kjohnson: total 240 drwx------ 2 root kjohnson 4096 Mar 22 00:18 . drwxr-xr-x 7 root root 4096 Mar 21 23:39 .. -rw------- 1 root kjohnson 216 Mar 22 00:18 .bash_history -rw-r--r-- 1 root kjohnson 24 Mar 21 23:39 .bash_logout -rw-r--r-- 1 root kjohnson 230 Mar 21 23:39 .bash_profile -rw-r--r-- 1 root kjohnson 124 Mar 21 23:39 .bashrc -rw-r--r-- 1 root kjohnson 3394 Mar 21 23:39 .screenrc -rwxr-xr-x 1 root kjohnson 210096 Mar 21 23:43 1
Чтобы собрать данные о том, когда изменялась какая-либо информация в пределах
victim# ls -alR --time=ctime /
Эта команда даст почти такие же результаты как та, которую мы использовали для получения последних модифицированных файлов в начале этого раздела. Другие результаты могут получиться только в том случае, если были изменены свойства файла без изменения содержимого самого файла.
В подкаталоге home каталога /kjohnson мы видим подозрительный файл с именем 1. Сейчас он может не иметь для нас большого значения, но он будет играть важную роль позже в разделе "Пример из жизни".
Для системы Unix существует команда w, подобная команде loggedon, которую мы использовали с системой Windows. Эта команда отображает всех пользователей, в настоящее время вошедших в систему, и их исходящие IP-адреса. Эта команда полезна при расследовании неправомочного использования учетных записей в системе Unix.
Команда w расположена в каталоге /usr/bin.
Чтобы использовать команду w, наберите следующее:
victim# w
Вывод команды w на нашей машине-жертве выглядит следующим образом:
12:24am up 1:38, 1 user, load average: 0.02, 0.02, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT Root tty1 - 10:44pm 0.00s 0.71s 0.03s w
Поскольку мы вошли в систему в качестве привилегированного (root) пользователя с консоли (обозначено символом " - " в столбце FROM ), мы не видим никакой подозрительной деятельности.
Чтобы посмотреть последние входы пользователей в систему на определенной системе Unix, используются команды last и lastb. Команды last и lastb отображают последние, успешные или неудавшиеся, входы в систему, соответственно. Команда last помогает получить свидетельства о фактах неправомочного использования учетной записи в нашей системе, в то время как команда lastb может обнаружить свидетельства использования грубой силы против нашей машины.
Команды last и lastb обычно расположены в каталоге /usr/bin.
lastb по умолчанию. В частности, в системе Linux для того, чтобы работала команда lastb, нужно предварительно создать файл /var/log/btm командой touch.В сценарии своего расследования вам нужно сделать дамп всех попыток входа в систему. Это должно выполняться следующей командой (при использовании команды lastb, замените last на lastb):
victim# last
Команда выведет следующие результаты с нашей машины-жертвы:
mpepe pts/0 192.168.1.1 Thu Mar 21 23:37 - 00:24 (00:46) root tty1 Thu Mar 21 22:44 still logged in reboot system boot 2.2.14-5.0 Fri Mar 22 03:42 (-3:-6) root tty1 Fri Mar 22 03:39 - down (00:00) reboot system boot 2.2.14-5.0 Fri Mar 22 03:09 (00:30) reboot system boot 2.2.14-5.0 Thu Mar 21 09:04 (18:36) wtmp begins Thu Mar 21 09:04:17 2002
Как видим, регистрация входа в систему пользователя kjohnson отсутствует. Мы можем сделать еще несколько заключений: или файлы регистрации были испорчены взломщиком, или он взломал учетную запись mpepe и переключил пользователя, используя команду su, на учетную запись kjohnson.
Поскольку для большинства разновидностей систем Unix отсутствует версия netstat, которая поддерживает флаг -p, то для отображения сетевых сокетов, открытых в файловой системе для исполняемых файлов, мы используем инструмент, который называется lsof. В этом отношении, lsof подобен инструменту fport, который был описан в предыдущей лекции. Кроме того, lsof покажет нам все открытые файлы в системе. Инструмент lsof распространяется бесплатно и перенесен почти на все разновидности системы Unix. Хотя lsof имеет множество опций, полезных для обычного системного администратора, в этой лекции обсуждаются только те опции, которые полезны для сценария "живого ответа". Если вам интересно использование других опций, с помощью команды man посмотрите страницы, посвященные утилите lsof. На них этот инструмент широко обсуждается.
lsof доступен на следующих FTP-сайтах:
Используйте следующую команду, чтобы получить список всех открытых сокетов и файлов в системе:
victim# ./lsof -n
Опция -n используется в команде lsof, чтобы не выполнять обратный поиск имен DNS для всех IP-адресов, перечисленных в результатах. В целях нашего расследования, мы стараемся не полагаться на полностью квалифицированные имена доменов, потому что они могут меняться; лучше использовать действующие IP-адреса. Ниже показан вывод этой команды.
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME inetd 721 root cwd DIR 3,2 4096 2 / inetd 721 root rtd DIR 3,2 4096 2 / inetd 721 root txt REG 3,2 21552 35319 /usr/sbin/inetd inetd 721 root mem REG 3,2 340663 146606 /lib/ld-2.1.3.so inetd 721 root mem REG 3,2 4101324 146613 /lib/libc-2.1.3.so inetd 721 root mem REG 3,2 246652 146644 /lib/libnss_files-2.1.3.so inetd 721 root 0u CHR 1,3 65387 /dev/null inetd 721 root 1u CHR 1,3 65387 /dev/null inetd 721 root 2u CHR 1, 65387 /dev/null inetd 721 root 3u IPv4 745 TCP *:39168 (LISTEN) inetd 721 root 4u IPv4 746 TCP 192.168.1.104:39168-192.168.1.1:2028 (CLOSE_WAIT) inetd 721 root 5u unix 0xc2a99980 853 socket inetd 721 root 6u IPv4 748 TCP *:ftp (LISTEN) inetd 721 root 7u IPv4 749 TCP *:telnet (LISTEN) inetd 721 root 8u IPv4 750 TCP *:shell (LISTEN) inetd 721 root 9u IPv4 751 TCP *:login (LISTEN) inetd 721 root 10u IPv4 752 UDP *:talk inetd 721 root 11u IPv4 753 UDP *:ntalk inetd 721 root 12u IPv4 754 TCP *:finger (LISTEN) inetd 721 root 13u IPv4 755 TCP *:linuxconf (LISTEN) inetd 721 root 14u IPv4 756 TCP *:4375 (LISTEN) 1 881 root cwd DIR 3,2 4096 83456 /home/kjohnson 1 881 root rtd DIR 3,2 4096 2 / 1 881 root txt REG 3,2 210096 83461 /home/kjohnson/1 1 881 root mem REG 3,2 340663 146606 /lib/ld-2.1.3.so 1 881 root mem REG 3,2 4101324 146613 /lib/libc-2.1.3.so 1 881 root mem REG 3,2 246652 146644 /lib/ /libnss_files-2.1.3.so 1 881 root 0u CHR 136,0 2 /dev/pts/0 1 881 root 1u CHR 136,0 2 /dev/pts/0 1 881 root 2u CHR 136,0 2 /dev/pts/0 1 881 root 3u sock 0,0 954 can't identify protocol 1 881 root 4w REG 3,2 36864 35934 /tmp/.net
Здесь мы видим, что inetd открыл TCP-порт 4375. Следовательно, мы должны исследовать файл /etc/inetd.conf. Далее мы видим, что исполняемый файл 1 открывает файл с именем /tmp/.net, и этот файл также надо исследовать. Исполняемый файл 1 открывает также "сырой" (необработанный) сокет, как видно из следующей строки:
1 881 root 3u sock 0,0 954 can't identify protocol
Если мы убеждаемся, что этот исполняемый файл открывает "сырой" сокет и обычный файл, то можно предполагать, что исполняемый файл 1 может быть анализатором сетевого трафика (
Чтобы получить список процессов, в настоящее время выполняющихся в системе, используется команда ps. Эта команда подобна программе Pslist, которую мы обсуждали в лекции "Компоновка и использование набора инструментов для расследования хакерских атак, то есть для "живого ответа" в системе Windows". Мы используем команду ps, чтобы увидеть процессы, запущенные взломщиком, такие как анализаторы сетевых потоков (sniffers), черные ходы для скрытого удаленного администрирования, зомби, вызывающие распределенный отказ в обслуживании, а также взломщики паролей (
Команда ps обычно расположена в каталоге /bin.
Когда мы собираем информацию о процессах, мы хотим видеть все процессы, которые в настоящее время выполняются в системе, и какие пользователи ими управляют. Это можно сделать с помощью следующей команды:
victim# ./ps-aux
Ниже показан список процессов нашей машины-жертвы. Обратите внимание, что мы можем видеть время начала каждого процесса, то есть, можем узнать, какие процессы были выполнены вскоре после того, как система была взломана.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.7 1120 476 ? S Mar21 0:06 init [3] root 2 0.0 0.0 0 0 ? SW Mar21 0:00 [kflushd] root 3 0.0 0.0 0 0 ? SW Mar21 0:01 [kupdate] root 4 0.0 0.0 0 0 ? SW Mar21 0:00 [kpiod] root 5 0.0 0.0 0 0 ? SW Mar21 0:00 [kswapd] root 6 0.0 0.0 0 0 ? SW Mar21 0:00 [mdrecoveryd] bin 319 0.0 0.7 1212 496 ? S Mar21 0:00 portmap root 334 0.0 0.0 0 0 ? SW Mar21 0:00 [lockd] root 335 0.0 0.0 0 0 ? SW Mar21 0:00 [rpciod] root 358 0.0 0.7 1104 480 ? S Mar21 0:00 /usr/sbin/apmd -p root 409 0.0 0.8 1172 552 ? S Mar21 0:00 syslogd -m 0 root 418 0.0 1.2 1440 768 ? S Mar21 0:00 klogd nobody 432 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 435 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 436 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 438 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o nobody 439 0.0 0.9 1292 628 ? S Mar21 0:00 identd -e -o daemon 450 0.0 0.7 1144 496 ? S Mar21 0:00 /usr/sbin/atd root 464 0.0 0.9 1328 620 ? S Mar21 0:00 crond root 496 0.0 0.8 1204 532 ? S Mar21 0:00 lpd root 510 0.0 0.8 1156 532 ? S Mar21 0:00 rpc.rstatd root 526 0.0 0.6 1140 408 ? S Mar21 0:00 rpc.rusersd nobody 540 0.0 0.9 1316 612 ? S Mar21 0:00 rpc.rwalld root root 554 0.0 0.8 1132 552 ? S Mar21 0:00 rwhod root 598 0.0 1.7 2128 1124 ? S Mar21 0:00 sendmail: accepti root 613 0.0 0.7 1144 456 ? S Mar21 0:00 gpm -t ps/2 xfs 647 0.0 1.2 1728 808 ? S Mar21 0:00 xfs -droppriv -da root 685 0.0 1.6 2224 1040 tty1 S Mar21 0:00 login - root root 686 0.0 0.6 1092 408 tty2 S Mar21 0:00 /sbin/mingetty tt root 687 0.0 0.6 1092 408 tty3 S Mar21 0:00 /sbin/mingetty tt root 688 0.0 0.6 1092 408 tty4 S Mar21 0:00 /sbin/mingetty tt root 689 0.0 0.6 1092 408 tty5 S Mar21 0:00 /sbin/mingetty tt root 690 0.0 0.6 1092 408 tty6 S Mar21 0:00 /sbin/mingetty tt root 693 0.0 1.5 1716 976 tty1 S Mar21 0:00 -bash root 721 0.0 0.8 1156 520 ? S Mar21 0:00 /usr/sbin/inetd root 881 0.0 1.2 1964 776 ? S 00:14 0:00 ./1 -s 65535 -n - root 975 0.0 1.1 2332 700 tty1 R 00:34 0:00 ps aux
Если мы рассмотрим процесс, соответствующий выполнению команды 1, мы увидим, что он выполняется как процесс с идентификатором (ID) 721. Процесс был запущен пользователем с правами привилегированного доступа (root) в 00:14 того же дня. Следовательно, если мы знаем, что пользователь с именем kjohnson, запустивший исполняемый файл 1, был неправомочным пользователем в системе, и этот процесс выполняется с правами привилегированного доступа (root), то, вероятно, у взломщика есть право привилегированного доступа.
Примеры, приведенные в этой книге, показывают такой ps может делать вывод данных в разнообразных форматах. Формат, заданный в первой команде ps (ps -, отсекает часть синтаксиса командной строки перечисляемых процессов. Чтобы решить проблему с отсечением части данных, мы можем переформатировать вывод команды ps следующим образом:
victim# ./ps-axo <var1>, <var2>, :
Маркер <var> может представлять любой из параметров, перечисленных далее. Столбец "код" содержит код, который вы вводите как <var1>, <var2> и так далее; столбец "заголовок" содержит название заголовка, который появляется в выводе команды ps. С помощью этих кодов можно инвентаризировать почти любой аспект
| Код | Заголовок |
|---|---|
%cpu |
%CPU |
% |
% |
|
|
args |
COMMAND |
blocked |
BLOCKED |
bsdstart |
START |
bsdtime |
TIME |
c |
C |
caught |
CAUGHT |
cmd |
CMD |
comm. |
COMMAND |
command |
COMMAND |
cputime |
TIME |
drs |
DRS |
dsiz |
DSIZ |
egid |
EGID |
egroup |
EGROUP |
|
|
|
|
etime |
ELAPSED |
|
|
euser |
EUSER |
f |
F |
fgid |
FGID |
fgroup |
FGROUP |
flag |
F |
flags |
F |
fname |
COMMAND |
fsgid |
FSGID |
fsgroup |
FSGROUP |
fsuid |
FSUID |
fsuser |
FSUSER |
fuid |
FUID |
|
|
|
|
group |
GROUP |
ignored |
IGNORED |
intpri |
|
|
|
longtname |
TTY |
lstart |
STARTED |
m_drs |
DRS |
m_trs |
TRS |
maj_flt |
MAJFL |
majflt |
MAJFLT |
min_flt |
MINFL |
minflt |
MINFLT |
ni |
NI |
nice |
NI |
nwchan |
WCHAN |
opri |
|
pagein |
PAGEIN |
pcpu |
%CPU |
|
|
pgid |
PGID |
pgrp |
PGRP |
pid |
PID |
pmem |
% |
|
|
|
|
rgid |
RGID |
rgroup |
RGROUP |
rss |
RSS |
rssize |
RSS |
rsz |
RSZ |
ruid |
RUID |
ruser |
RUSER |
s |
S |
sess |
SESS |
session |
SESS |
sgi_p |
P |
sgi_rss |
RSS |
sgid |
SGID |
sgroup |
SGROUP |
sid |
SID |
|
|
sig_block |
BLOCKED |
sig_catch |
CATCHED |
sig_ignore |
IGNORED |
sig_pend |
SIGNAL |
sigcatch |
CAUGHT |
sigignore |
IGNORED |
sigmask |
BLOCKED |
stackp |
STACKP |
start |
STARTED |
start_stack |
STACKP |
start_time |
START |
stat |
STAT |
state |
S |
stime |
STIME |
suid |
SUID |
suser |
SUSER |
svgid |
SVGID |
svgroup |
SVGROUP |
svuid |
SVUID |
svuser |
SVUSER |
sz |
SZ |
time |
TIME |
timeout |
TMOUT |
tmout |
TMOUT |
tname |
TTY |
tpgid |
TPGID |
trs |
TRS |
trss |
TRSS |
tsiz |
TSIZ |
tt |
TT |
tty |
TT |
tty4 |
TTY |
tty8 |
TTY |
ucomm |
COMMAND |
uid |
UID |
uid_hack |
UID |
uname |
USER |
user |
USER |
vsize |
VSZ |
vsz |
VSZ |
wchan |
WCHAN |
Многие из этих полей могут быть вам не интересны. Тем не менее, некоторые из них могут оказаться полезными. Например, если вы хотели посмотреть только идентификаторы процессов ID (PID), пользователей, которые создали процессы, время их запуска и полную командную строку, понадобится следующая команда:
victim# ./ps-axo pid,uid,start,command
Эта командная строка вывела бы больше синтаксиса командных строк, перечисленных процессов, чем выводит версия ps -.
Если начальство просит нас немедленно исправить ситуацию, мы можем уничтожить подозрительный процесс, запущенный взломщиком (ID 721). Это можно сделать с помощью команды kill. Команда kill установлена по умолчанию в операционных системах Unix и может быть найдена в каталоге /bin.
Следующая команда уничтожит процесс с идентификатором <PID>:
victim# ./kill-9 <PID>
После того как вся информация была передана на компьютер, используемый для расследования (судебный), неплохо получить контрольную сумму MD5-вывода. Поскольку на судебном компьютере может быть установлена система Unix (вместо системы Windows, которая демонстрируется в лекции "Компоновка и использование набора инструментов для расследования хакерских атак, то есть для "живого ответа" в системе Windows"), то в этом разделе мы предлагаем правильную нотацию команд для Unix.
Версия Md5sum распространяется с основной операционной системой Linux, и подобная ей версия, md5, распространяется с системой FreeBSD. Инструментальные средства вычисления контрольной суммы MD5 будут обсуждаться снова в лекции "Некоммерческие наборы инструментов, предназначенные для судебного дублирования".
Md5sum вычисляет контрольную сумму.Следующая команда вычислит контрольную сумму MD5-файлов вывода и сохранит их в файле с именем md5sums.txt.
forensic# md5sum-b * > md5sums.txt
В любой момент утилита Md5sum может проверять контрольные суммы MD5 любых файлов, если вы снабдите ее списком этих файлов. Следующая команда проверит контрольные суммы MD5 для списка файлов и сообщит о любом изменении в их содержании.
forensic# md5sum-c md5sums.txt
md5sum, а md5, и она не требует ключа -b.Инструмент и выполнять на большинстве систем с ядром Linux v2.2 (хотя он был разработан на RedHat и наилучшие результаты показал на подобной системе).
Поскольку процессы могут выполняться без связанных с ними двоичных файлов в файловой системе, традиционное силовое выключение машины уничтожило бы улики. Следовательно, процессы, скрытые с помощью команды kill -31 инструмента Knark, могли бы быть найдены, если бы было возможно проникнуть в ядро и исследовать таблицу процессов. Поэтому один из возможных способов бороться с комплектами LKM root состоит в использовании LKM-решений, в связи с чем и был создан инструмент Carbonite.
Инструмент Carbonite должен компилироваться на системе, имеющей то же ядро, что и машина-жертва. Версию ядра можно, обычно, посмотреть с помощью следующей команды:
victim# uname-a
После того как надежная машина с такой же самой версией ядра, как у вашей машины-жертвы, найдена, разархивируйте содержимое пакета Carbonite и измените каталог в ней. Введите следующую команду, чтобы создать пакет:
forensic# make
Пакет компилируется, и создается файл carbonite.o. Скопируйте этот каталог на машину-жертву надежным способом (через диск или компакт диск). Затем Carbonite нужно установить в ядро, используя команду
victim# ./carbonite.sh
Carbonite в живом ответе, вы захотите указать скрипт в надежной версии загрузчика модуля (insmod) так, чтобы не использовать копию, принадлежащую взломанной машине.Когда Carbonite внесен в ядро, он временно замораживает систему, пока не выполнит свою миссию. Он создает каталог /tmp/CARBONITE, который будет содержать копию каждого процесса, выполняющегося на машине. Имена копий процессов будут CARBONITE.< Команда> < PID >, где < команда > - имя процесса и < PID > - ID процесса.
Создается дополнительный файл, CARBONITE.html, который может быть загружен в Web-браузер. Этот файл подобен файлу, созданному с помощью команды ps (рассматривался ранее), но поскольку он получен в результате прямого входа в ядро, то он более надежен и показывает все процессы, даже если они скрыты с помощью инструмента Knark.
Carbonite будет вести запись в среде хоста. Учтите это, если планируете оставить открытой возможность судебного дублирования!Этот инструмент еще не выпущен публично; его дебют состоится в этой книге. Написанный Кейтом Джонсом (Keith J. Jones) инструмент execve_sniffer в большей степени является программой "доказательства-концепции", чем инструментом, "пригодным для часа пик", но его можно изменить так, чтобы удовлетворить определенные потребности. Инструмент execve_sniffer загружается как модуль ядра. Он "обертывает" системный вызов execve. После того как системный вызов запакован, все запросы к этой функции будут полностью зарегистрированы в виде сообщений ядра.
Чтобы понять, почему это действие важно, вы должны понять системный вызов execve. Каждый раз, когда в системе выполняется команда, командная строка передается в системный вызов execve для выполнения. Когда мы обертываем этот системный вызов, то можем сделать с информацией, которая передается в этот вызов, что захотим (подобно тому, что делает инструмент Knark, описанный в лекции "Черный ход и средства удаленного доступа"). Поскольку мы ребята хорошие, то хотим лишь сообщать о том, какая команда была выполнена, а затем передавать саму команду оригинальному системному вызову execve.
Вся эта работа может показаться неважной, если вы можете поместить в сеть анализатор сетевых потоков (execve_sniffer скрыть его с помощью инструмента modhide.o, имеющегося в Knark, чтобы преступник его не обнаружил и не попытался выгрузить.
Следующий текст дает пример вывода инструмента execve_sniffer из системы RedHat v6.2 Linux.
Execve Sniffer Inserted execve - user: 0 pid: 769 filename: /sbin/lsmod args: lsmod execve - user: 0 pid: 770 filename: /usr/bin/w args: w execve - user: 0 pid: 771 filename: /usr/sbin/tcpdump args: tcpdump -s 65535 -n -w /tmp/.net execve - user: 0 pid: 772 filename: /bin/dmesg args: dmesg
Как уже упоминалось, этот инструмент борется против команд взломщика, выполняющихся по зашифрованному каналу. Даже если взломщик выполняет команды, и нам не видно, что он набирает (через контроль сети), теперь мы можем видеть полное содержание того, что он выполняет.
Пример из жизни. Сценарий взлома системы Unix
В этом примере мы анализируем систему RedHat v6.2 Linux. На хосте установлена стандартная система RedHat без ненужных служб, которые были заблокированы и удалены.
Взломщик получил доступ через службу rpc.statd, которая распространялась несколько лет назад. Как только взломщик получил доступ в систему, он добавил новых пользователей так, чтобы он мог воспользоваться утилитой telnet в любое время, когда захочет. Этот метод взлома оставляет "отпечатки пальцев" в живом ответе, который мы здесь выполним.
Системный администратор вошел в систему утром и заметил, что файл дневных сообщений (файл /etc/
"Ваш сайт парализован. Я взломал его. Я планирую удалить файлы, если вы не заплатите мне $4000. Это не шутка. Я крутой парень! Your momma wears combat boots! Подписано, Владимир Дорохов"
Администратор, конечно, покачал головой, решив, что слишком ретивый ребенок решил позабавиться с его системой.
И снова начальство хотело бы иметь подтверждение серьезности этого электронного сообщения прежде, чем они задействуют ресурсы, необходимые для расследования. Вооруженный своим диском, содержащим средства ответа на инциденты, системный администратор начинает "живой ответ".
Примеры, представленные в этой лекции были зафиксированы при использовании данной машины-жертвы. Вернитесь к этим примерам, чтобы освежить в памяти результаты, которые мы получили.
lsof. С помощью команды lsof обнаруживаются два подозрительных процесса: процесс 1, который записывает в файл и открыл "сырой" сокет, и процессы inetd, которые открыли TCP-порт 4375. После дальнейшего анализа файла inetd.conf мы видим, что демон открыл TCP-порт, который связан с привилегированной оболочкой (root shell). Короче говоря, это обеспечивает приглашение к вводу команд, которое не нуждается ни в каких мандатах для входа в систему с привилегированным доступом (поэтому они не обнаруживаются в выводе команд last или w ). Для такого входа в систему никогда не должно быть никаких законных причин. Ниже приведена строка из файла inetd.conf:
4375 stream tcp nowait root /bin/sh -h
ls. Команда ls дает нам новую учетную запись пользователя (kjohnson), которая отсутствовала в системе перед тем, как машина была взломана. Каталог содержит исполняемый файл 1, и мы можем видеть, когда он, вероятно, был создан (из последних модифицированных файлов) и выполнен (из файлов, к которым последний раз обращались).
last. Команда last дает нам последнюю ключевую часть информации, потому что мы никогда не видели вход в систему пользователя с именем kjohnson (kjohnson был владельцем процесса 1 и изменил файл /etc/su.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.