Файл: Paul Troncone and Carl AlbingCybersecurity Ops with bashAttack, Defend, and Analyze from the.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 473
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
76 Часть II • Защитные операции с использованием bash
Во-вторых,.у.некоторых.файлов.журнала.Windows.символ.
/
.есть.в.имени..В.bash,.
однако,.при.указании.пути.к.файлу.
/
.выступает.разделителем.между.каталогами..
Его.не.следует.указывать.в.имени.файла,.поэтому.мы,.используя.синтаксис.
${VAR/
old/new}
,.делаем.другую.замену,.чтобы.заменить.любой.символ.
/
.символом.
-
..Од- нако.обратите.внимание,.что.мы.должны.избегать.значения.
/
,.чтобы.bash.не.считал.
слеш.частью.синтаксиса.замены..Для.указания.того,.что.мы.хотим.именно.слеш,.
добавляем.
\/
.Это.еще.одно.арифметическое.выражение,.заключенное.в.двойные.скобки..
В.таких.выражениях.bash.не.требует.наличия.символа.
$
.перед.большинством.имен.
переменных..Символ.
$
.потребуется.для.позиционных.параметров,.таких.как.
$1
,.
которые.позволят.избежать.путаницы.с.числом.1.
.Здесь,.чтобы.собрать.все.файлы.
.evtx
.в.один.архив,.мы.используем.команду.
tar
Для.сжатия.данных.указываем.параметр.
-z
,.но.не.добавляем.
-v
,.чтобы.
tar
.выпол- няла.свою.работу.без.вывода.сообщений.(поскольку.наш.скрипт.уже.отображал.
имена.файлов.при.их.извлечении).
Сценарий.выполняется.в.подоболочке,.поэтому,.хотя.мы.изменили.каталоги.внутри.
сценария,.после.выхода.из.сценария.мы.вернулись.в.каталог,.с.которого.начали..
Если.бы.нам.нужно.было.вернуться.в.исходный.каталог.внутри.скрипта,.мы.мо- гли.бы.использовать.команду.
cd
-
,.которая.вернула.бы.нас.в.предыдущий.каталог.
Сбор информации о системе
Если.вы.можете.произвольно.выполнять.команды.в.системе,.для.сбора.различной.
информации.о.ней.следует.задействовать.стандартные.команды.ОС..Конкретные.
команды,.которые.вы.используете,.зависят.от.вашей.операционной.системы..
Таблица.5.3.содержит.общие.команды,.которые.могут.дать.много.информации.о.си- стеме..Обратите.внимание,.что.в.зависимости.от.того,.в.какой.системе.выполняется.
команда.—.Linux.или.Windows,.команды.могут.различаться.
Таблица 5.3. Локальные команды сбора данных
Команда Linux Эквивалент Windows Git Bash Назначение
uname.-a uname.-a
Показать.информацию.о.версии.
операционной.системы cat./proc/
cpuinfo systeminfo
Вывести.сведения.о.системном.
оборудовании.и.связанную.информацию ifconfig ipconfig
Вывести.информацию.о.сетевом.
интерфейсе
Глава 5. Сбор информации 77
Команда Linux Эквивалент Windows Git Bash Назначение
route route.print
Показать.таблицу.маршрутизации arp.-a arp.-a
Вывести.таблицу.ARP.(протокол.
определения.адреса)
netstat.-a netstat.-a
Отобразить.сетевые.подключения mount net.share
Вывести.информацию.о.файловых.
системах ps.-e tasklist
Отобразить.запущенные.процессы
Сценарий.
getlocal.sh
,.показанный.в.примере.5.3,.предназначен.для.определения.
типа.операционной.системы,.запуска.различных.команд,.соответствующих.типу.
ОС,.и.записи.результатов.в.файл..Вывод.каждой.команды.хранится.в.формате.XML,.
то.есть.для.упрощения.последующей.обработки.ограничен.тегами.XML..Вызовите.
скрипт.следующим.образом:.
bash getlocal.sh
<
cmds.txt
,.где.файл.
cmds.txt
.содер- жит.список.команд,.аналогичных.приведенным.в.табл..5.3..Ожидаемый.формат.—.
это.поля,.разделенные.вертикальными.линиями,.плюс.дополнительное.поле.—.тег.
XML,.с.помощью.которого.можно.пометить.вывод.команды.(кроме.того,.строки,.
начинающиеся.с.
#
,.считаются.комментариями.и.будут.игнорироваться).
Вот.как.может.выглядеть.файл.
cmds.txt
:
# Linux Command |MSWin Bash |XML tag |Purpose
#----------------+------------+-----------+------------------------------ uname -a |uname -a |uname |O.S. version etc cat /proc/cpuinfo|systeminfo |sysinfo |system hardware and related info ifconfig |ipconfig |nwinterface|Network interface information route |route print |nwroute |routing table arp -a |arp -a |nwarp |ARP table netstat -a |netstat -a |netstat |network connections mount |net share |diskinfo |mounted disks ps -e |tasklist |processes |running processes
Пример.5.3.показывает.исходный.код.для.скрипта.
Пример 5.3. getlocal.sh
#!/bin/bash -
#
# Bash и кибербезопасность
# getlocal.sh
#
# Описание:
# Собираем основную информацию о системе и сбрасываем в файл
#
# Использование:
78 Часть II • Защитные операции с использованием bash
# bash getlocal.sh < cmds.txt
# cmds.txt — это файл со списком команд для выполнения
#
# SepCmds - отделение команд от строки ввода function SepCmds()
{
LCMD=${ALINE%%|*}
REST=${ALINE#*|}
WCMD=${REST%%|*}
REST=${REST#*|}
TAG=${REST%%|*} if [[ $OSTYPE == "MSWin" ]]
then
CMD="$WCMD"
else
CMD="$LCMD"
fi
}
function DumpInfo ()
{
printf '
readarray CMDS
for ALINE in "${CMDS[@]}"
do
# игнорировать комментарии if [[ ${ALINE:0:1} == '#' ]] ; then continue ; fi
SepCmds if [[ ${CMD:0:3} == N/A ]]
then continue else printf "<%s>\n" $TAG
$CMD
printf "%s>\n" $TAG
fi done printf "
}
OSTYPE=$(./osdetect.sh)
HOSTNM=$(hostname)
TMPFILE="${HOSTNM}.info"
# собрать в tmp-файл как информацию, так и ошибки
DumpInfo > $TMPFILE 2>&1
Глава 5. Сбор информации 79
.После.двух.определений.функций.сценарий.начинается.вызовом.нашего.скрипта.
osdetect.sh
.(из.главы.2)..В.качестве.местоположения.сценария.
osdetect.sh
.мы.
указали.текущий.каталог..Вы.можете.поместить.файл.в.другое.место,.но.затем.
обязательно.измените.заданный.путь.с.
./
,.указав.тот.адрес,.по.которому.находится.
данный.сценарий,.и/или.добавьте.это.местоположение.в.переменную.
PATH
Чтобы сделать работу более эффективной, можете включить сценарий osdetect.sh непосредственно в getlocal.sh.
.Затем.мы.запускаем.программу.
hostname
.в.подоболочке,.чтобы.получить.имя.
этой.системы.для.использования.в.следующей.строке,.а.позже.—.в.функции.
DumpInfo
.Мы.используем.имя.хоста.как.часть.временного.имени.файла,.в.который.мы.
поместим.весь.наш.вывод.
.Здесь.мы.вызываем.функцию,.которая.будет.выполнять.большую.часть.работы.
этого.скрипта..При.вызове.функции.мы.перенаправляем.и.stdout,.и.stderr.в.один.
и.тот.же.файл,.чтобы.функция.не.устанавливала.перенаправление.ни.на.один.из.
своих.выходных.операторов;.функция.может.вносить.записи.в.stdou t
,.и.при.необ- ходимости.этот.вызов.перенаправит.весь.вывод..Другой.способ.выполнить.пере- направление.—.поместить.его.перед.закрывающей.скобкой.определения.функции.
DumpInfo
..Вместо.этого.перенаправление.stdout.может.быть.оставлено.на.усмотре- ние.пользователя,.вызывающего.скрипт;.по.умолчанию.же.все.будет.записываться.
в.stdout..Но.если.пользователь.хочет,.чтобы.вывод.отправлялся.в.файл,.ему.нужно.
создать.файл.с.именем.
tempfile
.и.помнить,.что.stderr.перенаправляется.именно.
в.него..Наш.пример.рассчитан.на.менее.опытных.пользователей.
.Здесь.начинается.самая.важная.часть.сценария..Начало.функции.—.вывод.
XML-тега.
,.который.будет.иметь.свой.закрывающий.тег,.записанный.
в.конце.этой.функции.
.Команда.
readarray
.в.bash.будет.читать.все.строки.ввода.(до.конца.читаемого.
файла.или.при.нажатии.сочетания.клавиш.
Ctrl
+
D
)..Каждая.строка.будет.отдельно.
записана.в.массив,.в.данном.случае.
CMDS
.
for
.зацикливает.значения.массива.
CMDS
.—.по.одной.строке.за.один.проход.
.В.этой.строке.используется.операция.подстроки,.чтобы.извлечь.из.переменной.
ALINE
.символ.в.позиции.0.длины.1..Хештег.(
#
).заключен.в.кавычки,.чтобы.оболочка.
не.интерпретировала.его.как.начало.комментария.скрипта.
80 Часть II • Защитные операции с использованием bash
Если.строка.не.является.комментарием,.скрипт.вызовет.функцию.
SepCmds
..Подроб- нее.о.ней.мы.расскажем.позже;.она.разделяет.строку.ввода.на.
CMD
.и.
TAG
,.где.
CMD
будет.подходящей.командой.для.системы.Linux.или.Windows,.в.зависимости.от.
того,.в.какой.системе.мы.запускаем.скрипт.
.Здесь.опять.же.мы.используем.операцию.подстроки.с.начала.строки.(позиция.0).
длины.3,.чтобы.найти.строку,.которая.указывает,.что.в.этой.конкретной.операци- онной.системе.для.данной.информации.нет.соответствующей.операции..Оператор.
continue
.указывает.bash.перейти.к.следующей.итерации.цикла.
.Если.необходимо.выполнить.соответствующие.действия,.в.этом.разделе.кода.
по.обе.стороны.от.вызова.команды.будет.напечатан.заданный.XML-тег..Обратите.
внимание,.что.мы.вызываем.команду,.получая.значение.переменной.
CMD
.Здесь.мы.изолируем.команду.Linux.от.строки.нашего.входного.файла,.удаляя.
все.символы.справа.от.вертикальной.черты,.включая.саму.строку..Символы.
%%
указывают,.что.самое.длинное.совпадение.возможно.в.правой.части.значения.
переменной.и.нужно.удалить.его.из.возвращаемого.значения.(то.есть.
ALINE
.не.из- меняется).
.Добавив.символ.
#
,.мы.удаляем.самое.короткое.совпадение.слева.от.значения.
переменной..Таким.образом,.удаляется.команда.Linux,.которая.была.только.что.
помещена.в.
LCMD
.Опять.же.мы.удаляем.все,.что.находится.справа.от.вертикальной.черты,.но.на.
этот.раз.работаем.с.
REST
,.измененным.в.предыдущем.выражении..Здесь.мы.полу- чаем.команду.
MSWindows
.В.этих.строках.мы.извлекаем.тег.XML.с.помощью.тех.же.операций.замещения,.
которые.уже.дважды.рассматривали.
Все,.что.осталось.в.этой.функции,.—.решить,.основываясь.на.типе.операционной.
системы,.какое.значение.возвращать.в.
CMD
..Все.переменные.являются.глобальными,.
если.они.явно.не.объявлены.в.функции.как.локальные..Ни.одна.из.переменных.
не.является.локальной,.поэтому.их.можно.использовать.(устанавливать,.изменять).
по.всему.сценарию.
При.запуске.данного.сценария,.как.уже.было.показано.ранее,.вы.можете.исполь- зовать.файл.
cmds.txt
.или.изменить.его.значения,.чтобы.получить.необходимую.
вам.информацию..Вы.также.можете.запустить.его,.не.перенаправляя.ввод.из.
файла..Просто.введите.(или.скопируйте/вставьте).входные.данные.после.вызова.
сценария.
Глава 5. Сбор информации 81
Сбор данных о реестре Windows
Реестр Windows.—.это.обширное.хранилище.настроек,.определяющих.поведение.
системы.и.приложений..Некоторые.значения.разделов.реестра.часто.можно.ис- пользовать.для.выявления.наличия.вредоносных.программ.и.различных.видов.
вторжений..Таким.образом,.при.последующем.выполнении.анализа.системы.вам.
может.быть.полезна.копия.реестра.
Чтобы.с.помощью.Git.Bash.экспортировать.весь.реестр.Windows.в.файл,.выполните.
следующую.команду:
regedit //E ${HOSTNAME}_reg.bak
Обратите.внимание:.так.как.мы.вызываем.
regedit
.из.Git.Bash,.перед.параметром.
E
стоят.два.слеша;.при.использовании.командной.строки.Windows.вам.потребуется.
только.один.слеш..Чтобы.упростить.организацию,.укажем.
${HOSTNAME}
.как.часть.
имени.файла.вывода.
При.необходимости.команду.
reg
.также.можно.использовать.для.экспорта.разделов.
реестра.или.отдельных.подразделов..Чтобы.с.помощью.GitBash.экспортировать.
куст.
HKEY_LOCAL_MACHINE
,.введите.следующее:
reg export HKEY_LOCAL_MACHINE $(HOSTNAME)_hklm.bak
Поиск в файловой системе
Возможность.поиска.в.системе.крайне.важна:.он.нужен.как.при.организации.
файлов,.так.и.при.реагировании.на.инциденты.и.криминалистической.экспер- тизе..Для.выполнения.различных.функций.поиска.служат.чрезвычайно.мощные.
команды.
find
.и.
grep
Поиск по имени файла
Поиск.по.имени.файла.—.один.из.основных.методов.поиска..Он.удобен,.если.известно.
точное.имя.файла.или.часть.имени..В.Linux.для.поиска.в.каталоге.
/home
.и.его.подка- талогах.имен.файлов,.содержащих.слово.
password
,.выполните.следу.ющую.команду:
find /home -name '*password*'
Обратите.внимание,.что.символ.
*
.в.начале.и.в.конце.строки.поиска.обозначает.
подстановочный.знак,.который.будет.соответствовать.любым.символам.или.их.
82 Часть II • Защитные операции с использованием bash отсутствию..Это.шаблон.оболочки,.отличающийся.от.регулярного.выражения..
Кроме.того,.вы.можете.вместо.опции.
-name
.использовать.
-iname
,.чтобы.сделать.
поиск.нечувствительным.к.регистру.
Чтобы.выполнить.такой.поиск.с.помощью.Git.Bash.в.системе.Windows,.просто.
замените.
/home
.на.
/c/Users
Если при использовании команды find вы хотите блокировать ошибки, такие как Permission Denied, можете сделать это, перенаправив stderr в /dev/null или в файл журнала:
find /home -name '*password*' 2>/dev/null
Поиск скрытых файлов
Скрытые.файлы.могут.заинтересовать.нас,.так.как.они.нередко.используются.
людьми.или.вредоносными.программами,.которые.хотят.избежать.обнаружения..
В.Linux.имена.скрытых.файлов.начинаются.с.точки..Чтобы.найти.скрытые.файлы.
в.каталоге.
/home
.и.его.подкаталогах,.введите.следующее:
find /home -name '.*'
Символы .* в предыдущем примере — это шаблон оболочки, который отличается от регулярного выражения. В контексте поиска шаблон «точка — звездочка» будет соответствовать любому файлу, который начинается с точки и сопровождается любым количеством дополнительных символов (обозначается подстановочным знаком *).
В.Windows.скрытые.файлы.обозначаются.атрибутом,.а.не.именем.файла..В.команд- ной.строке.Windows.вы.можете.следующим.образом.определить.находящиеся.на.
диске.
c:\
.скрытые.файлы:
dir c:\ /S /A:H
Параметр.
/S
.указывает.команде.
dir
.рекурсивно.обходить.подкаталоги,.а.
/A:H
говорит.вывести.файлы.с.атрибутом,.обозначающим,.что.этот.файл.—.скрытый..
Git.Bash,.к.сожалению,.перехватывает.команду.
dir
.и.выполняет.вместо.нее.коман- ду.
ls
..А.это.означает,.что.команду.
dir
.нельзя.просто.так.запустить.из.bash..Такой.
поиск.можно.выполнить.с.помощью.команды.
find
.и.параметра.
-exec
.в.сочетании.
с.командой.
attrib
.в.Windows.
Глава 5. Сбор информации 83
Команда.
find
.может.запускать.конкретную.команду.для.каждого.найденного.
файла..Для.этого.вы.можете.добавить.опцию.
-exec
,.задав.критерии.поиска..Она.
заменяет.любые.фигурные.скобки.(
{}
).на.найденный.путь.к.файлу..Точка.с.запятой.
завершает.выражение.команды:
$ find /c -exec attrib '{}' \; | egrep '^.{4}H.*'
A H C:\Users\Bob\scripts\hist.txt
A HR C:\Users\Bob\scripts\winlogs.sh
Команда.
find
.выполнит.команду.
attrib
.для.каждого.файла,.который.идентифици- рует.на.диске.
C:\
.(обозначается.как.
/c
),.напечатав,.таким.образом,.атрибуты.для.
файла..Далее,.для.идентификации.строк.с.регулярным.выражением.используется.
команда.
egrep
,.где.пятый.символ.—.это.буква.
H
,.что.соответствует.скрытому.атри- буту.файла.(hidden).
Если.вы.хотите.еще.больше.очистить.вывод.и.вывести.только.путь.к.файлу,.можете.
сделать.это,.отправив.вывод.
egrep
.в.команду.
cut
:
$ find . -exec attrib '{}' \; | egrep '^.{4}H.*' | cut -c22-
C:\Users\Bob\scripts\hist.txt
C:\Users\Bob\scripts\winlogs.sh
Параметр.
-c
.указывает.
cut
.номера.позиций.символов,.которые.будут.использованы.
для.разбиения;.
22-
.указывает,.что.сокращение.начинается.с.символа.
22
,.который.
является.началом.пути.к.файлу,.и.продолжается.до.конца.строки.(символ.
-
)..
Это.может.пригодиться,.если.вы.хотите.передать.путь.к.файлу.в.другую.команду.
для.дальнейшей.обработки.
Поиск по размеру файла
Параметр.
-size
.команды.
find
.можно.использовать.для.поиска.файлов.по.их.раз- меру..Это.может.быть.полезно.для.определения.особенно.больших.файлов.или.
самых.больших.или.самых.маленьких.файлов.в.системе.
Для.поиска.в.каталоге.
/home
.и.его.подкаталогах.файлов.размером.более.5.Гбайт.
выполните.следующую.команду:
find /home -size +5G
Чтобы.определить.самые.большие.файлы.в.системе,.вы.можете.комбинировать.
find
.с.несколькими.другими.командами:
find / -type f -exec ls -s '{}' \; | sort -n -r | head -5
84 Часть II • Защитные операции с использованием bash
Сначала.мы,.чтобы.вывести.список.всех.файлов.в.корневом.каталоге,.используем.
команду.
find
/
-type f
..Каждый.файл.прогоняется.через.команду.
ls
-s
,.которая.
определяет.его.размер.в.блоках.(не.в.байтах)..Затем.список.сортируется.по.убыва- нию,.а.первые.пять.строк.отображаются.с.помощью.команды.
head
..Чтобы.увидеть.
самые.маленькие.файлы.в.системе,.вместо.
head
.можно.использовать.
tail
.или.
удалить.параметр.
-r
.из.сортировки.
В оболочке для представления последней выполненной команды вы можете добавить символы !!. Эти символы могут быть использованы для повторного выполнения команды или ее включения в конвейер команд. Предположим, что вы только что выполнили следующую команду:
find / -type f -exec ls -s '{}' \;
Затем, чтобы снова запустить ее или передать в конвейер, вы можете исполь- зовать символы !!:
!! | sort -n -r | head -5
Оболочка автоматически заменит символы !! последней командой, которая была выполнена. Можете сами попробовать!
Чтобы.найти.самый.большой.файл,.не.задействуя.команду.
find
,.вы.можете.ис- пользовать.команду.
ls
.напрямую,.что.более.эффективно..Для.выполнения.такого.
поиска.просто.добавьте.для.команды.
ls
.параметр.
-R
,.который.заставит.ее.рекур- сивно.перечислять.файлы.в.указанном.каталоге:
ls / -R -s | sort -n -r | head -5
Поиск по времени
Вы.также.можете.выполнить.поиск.файлов.в.файловой.системе.по.такому.показа- телю,.как.последнее.обращение.к.файлам.или.их.последнее.изменение..Такой.поиск.
может.быть.полезен.при.расследовании.инцидентов.и.для.выявления.последних.
действий.системы..Поиск.по.времени.может.также.пригодиться.для.анализа.вредо- носных.программ..С.его.помощью.можно.идентифицировать.файлы,.которые.были.
доступны.или.изменены.во.время.выполнения.вредоносной.программы.
Для.поиска.в.каталоге.
/home
.и.подкаталогах.файлов,.измененных.менее.пяти.минут.
назад,.выполните.команду:
find /home -mmin -5
Для.поиска.файлов,.измененных.менее.24.часов.назад:
find /home -mtime -1
Глава 5. Сбор информации 85
Число,.указанное.в.параметре.
mtime
,.кратно.24.часам,.поэтому.
1
.означает.24.часа,.
2
.означает.48.часов.и.т..д..Отрицательное.число.здесь.означает.«меньше».указанно- го.числа,.положительное.число.означает.«больше»,.а.точное.соблюдение.временных.
параметров.можно.задать,.если.не.устанавливать.никаких.знаков.перед.значением.
Для.поиска.файлов,.измененных.более.двух.дней.(48.часов).назад,.введите:
find /home -mtime +2
Для.поиска.файлов,.доступ.к.которым.был.получен.менее.24.часов.назад,.исполь- зуйте.параметр.
-atime
:
find /home -atime -1
Для.поиска.в.каталоге.
/home
.файлов,.доступных.менее.24.часов.назад,.и.копиро- вания.(
cp
).каждого.файла.в.текущий.рабочий.каталог.(
./
),.введите.следующее:
find /home -type f -atime -1 -exec cp '{}' ./ \;
Параметр.
-type f
.указывает,.чтобы.команда.
find
.искала.соответствие.только.обыч- ным.файлам,.игнорируя.каталоги.и.другие.специальные.типы.файлов..Вы.также.
можете.скопировать.файлы.в.любой.каталог.по.вашему.выбору,.заменив.его.на.
./
с.абсолютным.или.относительным.путем.
Убедитесь, что ваш текущий рабочий каталог не находится где-то в иерархии /home, иначе копии будут найдены и повторно скопированы.
Поиск контента
Команду.
grep
.можно.использовать.для.поиска.файлов.по.их.содержимому..Для.по- иска.в.каталоге.
/home
.и.подкаталогах.файлов,.содержащих.строку.
password
,.вы- полните.следующую.команду:
grep -i -r /home -e 'password'
Параметр.
-r
.рекурсивно.выполняет.поиск.во.всех.каталогах,.вложенных.в.каталог.
/home
,.параметр.
-i
.задает.поиск.без.учета.регистра,.а.параметр.
-e
.определяет.строку.
шаблона.регулярного.выражения.для.поиска.
Параметр -n можно использовать для определения того, какая строка в файле содержит строку поиска, а параметр -w — для сопоставления только целых слов.