Файл: Paul Troncone and Carl AlbingCybersecurity Ops with bashAttack, Defend, and Analyze from the.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 474
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Глава 5. Сбор информации 67
Данные
Описание данных
Расположение данных
Данные.
пользователя
Документы,.изображения.и.другие.
файлы,.созданные.пользователем
Пользовательские.файлы.в.Linux.
обычно.размещаются.в.каталоге./home/..
В.Windows.эти.файлы.вы.найдете.
в.папке.c:\Users\
История.
браузера
Веб-страницы,.которые.недавно.
были.открыты
Широко.варьируется.в.зависимости.
от.операционной.системы.и.браузера
Реестр..
Windows
Иерархическая.база.данных,.
в.которой.хранятся.настройки.
и.другие.данные,.важные.для.
работы.Windows.и.приложений
Реестр.Windows
В.этой.главе.мы.рассмотрим.различные.методы.сбора.данных.как.из.локальной.
операционной.системы,.так.и.из.удаленной.(из.Linux.и.Windows).
Используемые команды
В.этом.разделе.мы.познакомим.вас.с.командами,.которые.помогут.выбрать.и.со- брать.интересующие.вас.данные.из.локальных.и.удаленных.систем..Для.операци- онной.системы.Linux.это.такие.команды,.как.
cut
,.
file
,.
head
,.а.для.систем.Windows.
это.команды.
reg
.и.
wevtutil cut
Команда.
cut
.используется.для.извлечения.отдельных.частей.файла..Во.время.ее.
выполнения.происходит.построчное.чтение.предоставленного.входного.файла.
и.анализ.каждой.прочитанной.строки.с.помощью.указанного.разделителя..Если.раз- делитель.не.указан,.команда.
cut
.в.качестве.разделителя.по.умолчанию.будет.ис- пользовать.символ.табуляции..Разделители.делят.каждую.прочитанную.строку.
файла.на.поля..Для.извлечения.частей.файла.можно.использовать.либо.номер.поля,.
либо.номер.позиции.символа..Поля.и.символы.начинаются.с.позиции.1.
Общие параметры команды
-c
.—.символы.для.извлечения.
-d
.—.символ,.используемый.в.качестве.разделителя.полей..По.умолчанию.раз- делителем.является.символ.табуляции.
-f
.—.поля.для.извлечения.
68 Часть II • Защитные операции с использованием bash
Пример команды
Для.демонстрации.действия.команды.
cut
.воспользуемся.текстовым.файлом.
cutfile.txt
..Он.состоит.из.двух.строк,.каждая.с.тремя.столбцами.данных,.как.по- казано.в.примере.5.1.
Пример 5.1. cutfile.txt
12/05/2017 192.168.10.14 test.html
12/30/2017 192.168.10.185 login.html
В.файле.
cutfile.txt
.каждое.поле.разделено.пробелом..Для.извлечения.IP-адреса.
(второе.поле).используйте.следующую.команду:
$ cut -d' ' -f2 cutfile.txt
192.168.10.14 192.168.10.185
Параметр.
-d''
.указывает,.что.в.качестве.разделителя.полей.используется.пробел..
Параметр.
-f2
.определяет,.что.команде.нужно.вырезать.и.отобразить.второе.поле,.
в.данном.случае.IP-адреса.
Команда cut рассматривает каждый символ-разделитель как символ, отделяющий поле. Он не изменяет количество пробелов. Рассмотрим следующий пример:
Pat 25
Pete 12
Если мы в отношении этого файла выполним команду cut, то в качестве разде- лителя зададим пробел. В первой записи есть три пробела между именем (Pat) и номером (25). Таким образом, число находится в поле 4. Однако для следующей строки имя (Pete) находится в поле 3, так как между именем и номером стоит только два пробела. Для такого файла данных было бы лучше отделить имя от числа одним символом табуляции и использовать его в качестве разделителя для команды cut.
file
Команда.
file
.используется.для.идентификации.типа.файла..Это.особенно.полезно.
в.операционной.системе.Linux,.так.как.большинство.файлов.не.имеют.расширения,.
которое.можно.использовать.для.идентификации.типов.(в.отличие.от.Windows,.
где.расширения.файлов.есть,.например.
.exe
)..Команда.
file
.смотрит.не.только.на.
имя.файла,.читая.и.анализируя.первый.блок.данных,.также.известный.как.маги-
ческое число (magic.number)..Даже.если.вы.переименуете.файл-изображение.
А.png
Глава 5. Сбор информации 69
и.присвоите.ему.имя.и.расширение.
С.jpg
,.изменив.тем.самым.его.тип,.команда.
file
.сможет.понять.это.и.сообщит.вам.правильный.тип.файла.(в.данном.случае.
это.PNG-файл).
Общие параметры команды
-f
.—.читать.список.файлов.для.анализа.из.данного.файла.
-k
.—.не.останавливаться.на.первом.совпадении,.перечислять.все.совпадения.
для.типа.файла.
-z
.—.просмотреть.сжатые.файлы.
Пример команды
Чтобы.определить.тип.файла,.передайте.его.имя.команде.
file
:
$ file unknownfile unknownfile: Microsoft Word 2007+
head
Команда.
head
.позволяет.отобразить.несколько.первых.строк.или.байтов.файла..
По.умолчанию.выводит.первые.десять.строк.
Общие параметры команды
-n
.—.количество.строк.для.вывода..Чтобы.отобразить.15.строк,.можно.задать.
-n15
.или.
–15
-c
.—.количество.байтов.для.вывода.
reg
Команда.
reg
.используется.для.управления.реестром.Windows.и.доступна.в.Win- dows.XP.и.более.поздних.версиях.
Общие параметры команды
add
.—.добавить.записи.в.реестр.
export
.—.копировать.указанные.записи.реестра.в.файл.
query
.—.возвратить.список.подразделов.ниже.указанного.пути.
70 Часть II • Защитные операции с использованием bash
Пример команды
Чтобы.перечислить.все.корневые.ключи.в.ветке.
HKEY_LOCAL_MACHINE
,.введите.в.Git.
Bash.команду:
$ reg query HKEY_LOCAL_MACHINE
HKEY_LOCAL_MACHINE\BCD00000000
HKEY_LOCAL_MACHINE\HARDWARE
HKEY_LOCAL_MACHINE\SAM
HKEY_LOCAL_MACHINE\SECURITY
HKEY_LOCAL_MACHINE\SOFTWARE
HKEY_LOCAL_MACHINE\SYSTEM
wevtutil wevtutil
.—.это.утилита.командной.строки,.используемая.для.просмотра.систем- ных.журналов.в.среде.Windows.и.управления.ими..Она.доступна.в.большинстве.
современных.версий.Windows.и.вызывается.из.Git.Bash.
Общие параметры команды
el
.—.перечислить.доступные.журналы.
qe
.—.запросить.события.журнала.
Общие опции команды
/с
.—.максимальное.количество.событий.для.чтения.
/f
.—.форматировать.вывод.в.виде.текста.или.XML.
/rd
.—.если.установлено.значение.
true
,.то.сначала.прочитать.самые.последние.
журналы.
В командной строке Windows перед параметрами команды требуется только один символ /. В терминале Git Bash из-за способа обработки команд необходимы два символа // (например, //c).
Пример команды
Чтобы.перечислить.все.доступные.журналы,.введите.команду:
wevtutil el
Глава 5. Сбор информации 71
Чтобы.просмотреть.последнее.событие.в.системном.журнале.через.Git.Bash,.вве- дите.команду:
wevtutil qe System //c:1 //rd:true
Дополнительные сведения о команде wevtutil см. в документации Microsoft по адресу http://bit.ly/2FIR3aD.
Сбор информации о системе
При.защите.системы.в.первую.очередь.нужно.понять.ее.состояние.и.выполняемые.
ею.действия..Поэтому.для.анализа.состояния.системы.вам.необходимо.собрать.
данные,.как.локальные,.так.и.удаленные.
Удаленное выполнение команды с использованием SSH
Данные,.которые.вы.хотите.получить,.не.всегда.могут.быть.доступны.локаль- но..Возможно,.чтобы.получить.нужные.данные,.вам.потребуется.подключиться.
к.удаленной.системе.по.сети.с.помощью.протокола.передачи.файлов.(File.Transfer.
Protocol,.FTP).или.SSH-сервера.
Команды.могут.выполняться.с.использованием.SSH.удаленно.и.безопасно,.но.при.
условии,.если.в.удаленной.системе.также.запущена.служба.SSH..В.базовом.виде.
(без.параметров),.чтобы.запустить.ее.на.необходимом.хосте,.вы.можете.просто.
добавить.перед.любой.командой,.выполняемой.в.оболочке,.команду.
ssh
.и.имя.тре- буемого.хоста..Например,.
ssh myserver who
..Эта.команда.запустит.
who
.на.удаленном.
компьютере.
myserver
..Если.вам.нужно.указать.другое.имя.пользователя,.введите.
ssh username
@
myserver who
.или.
ssh
-l username myserver
..Эти.команды.выполня- ют.одно.и.то.же.действие..Только.замените.
username
.именем.пользователя,.под.
которым.хотите.войти.в.систему..Вы.можете.перенаправить.вывод.в.файл.в.вашей.
локальной.системе.или.в.файл.в.удаленной.системе.
Для.выполнения.команды.в.удаленной.системе.и.перенаправления.вывода.в.файл.
в.локальной.системе.введите.следующее:
ssh myserver ps > /tmp/ps.out
72 Часть II • Защитные операции с использованием bash
Для.выполнения.команды.в.удаленной.системе.и.перенаправления.вывода.в.файл.
в.удаленной.системе.введите.следующее:
ssh myserver ps \> /tmp/ps.out
Если.вы.добавите.обратный.слеш,.это.избавит.вас.от.специального.значения.пере- направления.(в.текущей.оболочке).и.просто.передаст.символ.перенаправления.как.
второе.слово.из.трех.слов,.отправленных.на.
myserver
..При.выполнении.в.удаленной.
системе.команда.будет.интерпретироваться.этой.оболочкой,.перенаправлять.вывод.
на.удаленный компьютер.(
myserver
).и.оставлять.его.там.
Кроме.того,.используя.SSH,.вы.можете.брать.скрипты,.которые.находятся.в.вашей.
локальной.системе,.и.запускать.их.в.удаленной.системе..Для.этого.следует.исполь- зовать.команду.для.удаленного.запуска.сценария.
osdetect.sh
:
ssh myserver bash < ./osdetect.sh
Она.запускает.в.удаленной.системе.команду.
bash
.и.передает.в.запущенную.обо- лочку.строки.скрипта.
osdetect.sh
.непосредственно.из.вашей.локальной.системы..
Это.избавляет.от.необходимости.двухэтапного.процесса:.сначала.передать.скрипт.
в.удаленную.систему,.а.затем.запустить.его..Результат.выполнения.скрипта.возвра- щается.в.вашу.локальную.систему.и.может.быть.захвачен.путем.перенаправления.
stdout,.как.мы.это.делали.со.многими.другими.командами.
Собираем файлы журнала Linux
Файлы.журналов.для.системы.Linux.обычно.хранятся.в.каталоге.
/var/log/
..Чтобы.
легко.собрать.файлы.журнала.в.один.файл,.используйте.команду.
tar
:
tar -czf ${HOSTNAME}_logs.tar.gz /var/log/
Параметр.
-c
.используется.для.создания.архивного.файла,.
-z
.—.для.архивирования.
файла.и.
-f
.—.для.указания.имени.файла.вывода..Переменная.
HOSTNAME
.—.это.пере- менная.bash,.которая.автоматически.устанавливается.оболочкой.на.имя.текущего.
хоста..Мы.включаем.его.в.наше.имя.файла,.поэтому.файл.вывода.будет.иметь.то.же.
имя,.что.и.система,.что.поможет.позже.с.организацией,.если.журналы.собираются.
из.нескольких.систем..Обратите.внимание,.что.для.успешного.копирования.файлов.
журнала.вам.нужно.будет.войти.в.систему.в.качестве.привилегированного.пользо- вателя.или.ввести.команду.
sudo
В.табл..5.2.перечислены.некоторые.важные.и.распространенные.журналы.Linux.
и.их.стандартные.расположения.
Глава 5. Сбор информации 73
Таблица 5.2. Файлы журналов Linux
Расположение журнала Описание
/var/log/apache2/
Журналы.доступа.и.ошибок.для.веб-сервера.Apache
/var/log/auth.log
Сведения.о.входе.пользователя.в.систему,.привилегированном.
доступе.и.удаленной.проверке.подлинности
/var/log/kern.log
Журналы.ядра
/var/log/messages
Общая.некритическая.системная.информация
/var/log/syslog
Общие.системные.журналы
Чтобы.получить.больше.информации.о.том,.где.хранятся.файлы.журналов.для.
данной.системы,.в.большинстве.дистрибутивов.Linux.обратитесь.к.файлам.
/etc/
syslog.conf
.или.
/etc/rsyslog.conf
Собираем файлы журналов Windows
В.среде.Windows.команду.
wevtutil
.можно.использовать.для.сбора.лог-файлов.
и.управления.ими..К.счастью,.эта.команда.вызывается.из.Git.Bash..Сценарий.
winlogs.sh
,.показанный.в.примере.5.2,.использует.для.вывода.списка.всех.доступ- ных.журналов.параметр.
el
.команды.
wevtutil
,.а.для.экспорта.каждого.журнала.
в.файл.—.параметр.
epl
1 2 3 4 5 6 7 8 9 10 ... 23
Пример 5.2. Сценарий winlogs.sh
#!/bin/bash -
#
# Bash и кибербезопасность
# winlogs.sh
#
# Описание:
# Собираем копии файлов журнала Windows
#
# Использование:
# winlogs.sh [-z]
# -z Заархивировать вывод
#
TGZ=0
if (( $# > 0 ))
then if [[ ${1:0:2} == '-z' ]]
then
TGZ=1 # флаг tgz для tar/zip-архивирования лог-файлов shift fi
74 Часть II • Защитные операции с использованием bash fi
SYSNAM=$(hostname)
LOGDIR=${1:-/tmp/${SYSNAM}_logs}
mkdir -p $LOGDIR
cd ${LOGDIR} || exit -2
wevtutil el | while read ALOG
do
ALOG="${ALOG%$'\r'}"
echo "${ALOG}:"
SAFNAM="${ALOG// /_}"
SAFNAM="${SAFNAM//\//-}"
wevtutil epl "$ALOG" "${SYSNAM}_${SAFNAM}.evtx"
done if (( TGZ == 1 ))
then tar -czvf ${SYSNAM}_logs.tgz *.evtx
fi
.Сценарий.начинается.с.простой.инициализации.и.оператора.
if
,.который.про- веряет,.были.ли.предоставлены.какие-либо.аргументы..
$#
.—.это.специальная.
переменная.оболочки,.значением.которой.является.количество.аргументов,.пере- даваемых.в.командной.строке.при.вызове.скрипта..Это.условие.для.
if
.из-за.
двойных.скобок.является.арифметическим.выражением,.поэтому.можно.исполь- зовать.символ.«больше».(
>
).и.выполнять.численное.сравнение..Если.этот.символ.
в.выражении.
if
.используется.с.квадратными.скобками,.а.не.с.двойными,.символ.
>
выполняет.лексическое.сравнение.—.в.алфавитном.порядке..Для.численного.срав- нения.необходимо.добавить.
-gt
.в.квадратных.скобках.
Для.этого.сценария.единственным.аргументом,.который.мы.поддерживаем,.явля- ется.
-z
,.указывающий,.что.по.окончании.процесса.все.собранные.файлы.журналов.
должны.быть.сжаты.в.один.файл.TAR..Это.также.означает,.что.мы.можем.исполь- зовать.простой.тип.разбора.аргументов..В.следующем.скрипте.воспользуемся.более.
сложным.анализатором.аргументов.(
getopts
).
.В.ходе.этой.проверки,.начиная.с.начала.строки.(смещение.0.байт).длиной.2.бай- та,.принимается.подстрока.первого.аргумента.(
$1
)..Если.аргумент.
-z
,.то.мы.уста- новим.флаг..Для.удаления.этого.аргумента.в.сценарии.выполняется.сдвиг.(
shift
)..
То,.что.ранее.было.вторым.аргументом.(и.если.таковой.имелся),.теперь.становится.
первым..Третий.(если.таковой.имеется).становится.вторым.и.т..д.
.Если.пользователь.хочет.указать.расположение.журналов,.это.можно.определить.
в.качестве.аргумента.в.сценарии..Необязательный.аргумент.
-z
,.если.он.указан,.
уже.был.смещен,.поэтому.любой.пользовательский.путь.теперь.станет.первым.
Глава 5. Сбор информации 75
аргументом..Если.в.командной.строке.не.было.указано.никакого.значения,.вы- ражение.внутри.фигурных.скобок.вернет.значение.по.умолчанию..Значение.по.
умолчанию.указывается.справа.от.знака.минус..Мы.используем.фигурные.скобки.
вокруг.
SYSTEM
,.потому.что.
_logs
.в.противном.случае.считался.бы.частью.имени.
переменной.
.Добавление.параметра.
-p
.для.команды.
mkdir
.приводит.к.созданию.всех.указан- ных.каталогов..Сообщение.об.ошибке.не.будет.выдано,.даже.если.такой.каталог.
уже.существует..В.следующей.строке.мы.вызываем.команду.
cd
,.чтобы.перейти.
в.созданный.каталог.и.сделать.его.текущим,.где.будут.сохранены.файлы.журна- ла..Если.команда.
cd
.не.будет.выполнена,.программа.завершит.работу,.выдав.код.
ошибки.
.Здесь.мы.вызываем.команду.
wevtutil el
,.чтобы.перечислить.все.возможные.
файлы.журнала..Вывод.передается.в.цикл.
while
,.который.за.раз.будет.читать.одну.
строку.(одно.имя.файла.журнала).
.Поскольку.этот.скрипт.выполняется.в.системе.Windows,.каждая.строка,.на- печатанная.
wevtutil
,.заканчивается.символом.новой.строки.(
\n
).и.символом.
возврата.(
\r
)..Мы.удаляем.символ.из.правой.части.строки.с.помощью.оператора.
%
Чтобы.указать.(непечатаемый).возвращаемый.символ,.мы.используем.конструк- цию.
$'string'
,.которая.заменяет.произвольные.символы.обратного.слеша.непе- чатаемыми.символами.(как.определено.в.стандарте.ANSI.C)..Таким.образом,.два.
символа.
\r
.заменяются.возвращаемым.символом.ASCII.13.
.Здесь.мы.повторяем.имя.файла,.чтобы.указать.пользователю.на.ход.выполнения.
процесса.и.напомнить,.какой.журнал.в.настоящее.время.извлекается.
.Чтобы.задать.имя.файла,.в.котором.
wevtutil
.должен.сохранить.свой.вывод.
(файл.журнала),.мы.делаем.два.изменения.в.имени..Во-первых,.поскольку.имя.
журнала,.как.указано,.может.иметь.пробелы,.заменяем.любой.пробел.символом.
подчеркивания..Хотя.это.и.не.обязательно,.подчеркивание.позволяет.избежать.
необходимости.ставить.кавычки.при.использовании.имени.файла..В.общем.случае.
синтаксис.для.получения.значения.
VAR
.с.заменой.
old
.на.
new
.будет.следующим:.
${VERY/old/new}
..Используя.двойной.слеш,.
${VAR//old/new}
,.мы.проводим.замену.
всех.вхождений,.а.не.только.первого.
Распространенной ошибкой будет вариант ${VAR/old/new/}. Конечный слеш не является частью синтаксиса, и, если будет выполнена подстановка, он просто окажется добавлен в результирующую строку. Например, если VAR=embolden, то ${VAR/old/new/} вернет embnew/en.