Глава 1. Введение в PowerShell для расследования
Содержание
PowerShell предоставляет великолепный механизм выборки для получения обширных массивов информации от работающих систем, серверов, периферийных устройств, мобильных устройств и движимых данными приложений, подобных Active Directory.
Поскольку Microsoft решила открыть PowerShell и предоставить возможность выборки информации с отличных от Microsoft платформ, таких как Mac и Linux, широта информации, которую можно охватывать практически не ограничена (пр наличии соответствующих полномочий). Соедините это с изобилием встроенных CmdLet и CmdLet сторонних разработчиков (произносятся как "команд лет"), которые способны фильтровать, сортировать и соединять конвейером воедино, и вы получите требуемый механизм неограниченной выборки данных.
Добавляя некий мост от PowerShell к Python, мы теперь можем применять всё богатство логического машинного изучения и глубокого анализа всей получаемой из PowerShell сырой информации. Рисунок 1-1 отображает все ключевые компоненты, которые мы объединяем в данной книге. В результате мы получим инструментальное средство для разработки новых инновационных подходов к приложениям расследования в реальном времени и откликов на происшествия.
PowerShell является инфраструктурой Microsoft, которая содержит некую оболочку командной строки и язык программирования. PowerShell традиционно применялся системными администраторами, командами ИТ, группами откликов на присшествия и криминальными расследователями для получения доступа к рабочей информации в зависимости от той среды, которой они управляют. За последнее десятилетие произошдо значительное развитие, которое отражено на Рисунке 1-2.
PowerShell в основном используется для автоматизации административных задач и изучения подробностей работающих настольных компьютеров, серверов и мобильных устройств. Он применяется для исследования как локальных, так и удалённых систем с применением Common-Object-Model (COM, Модели составных объектов) и Windows Management Interface (WMI, Интерфейса управления Windows). Сегодня он может применяться для изучения и управления удалёнными Linux, Mac и Сетевыми устройствами при помощи Common Information Model (CIM, Общей информационной модели).
PowerShell обычно уже установлен в современных настольных или серверных платформах Windows. Если это не так, вы можете просто открыть предпочитаемый вами браузер и выполнить поиск “Windows Management Framework 5”, а заетм выгрузить и установить PowerShell. PowerShell и ISE (Integrated Scripting Environment, среда интеграции сценариев) PowerShell бесплатны. {Прим. пер.: также вы можете установить PowerShell Core, получив его с официальной страницы GitHub Microsoft для требующейся вам версии операционной системы и следуя нашему переводу Книги рецептов Powershell Core 6.2 Жан-Эндрика Питерса.}
Я предпочитаю применять PowerShell ISE, поскольку он предоставляет:
-
Некую интегрированную среду, которая имеет целью изучение и эксперименты с CmdLet
-
Возможность писать, проверять и отлаживать сценарии
-
Лёгкий доступ к контекстно- чувствительным справочным данным
-
Автоматическое выполнение команд, которое ускоряет ка разработку, так и обучение
Когда ваш ISE PowerShell установлен, вы можете запускать его в некой платформе Windows кликом по своему меню Пуск (для Windows 8-10 с последующим поиском ISE PowerShell и щелчком по соответствующему прикладному приложению, как это показано на Рисунке 1-3.
Замечание | |
---|---|
Вы можете запускать PowerShell и PowerShell ISE с полномочиями User; однако для получения доступа ко всему необходимому разнообразию функций извлечения данных рекомендюется запускать PowerShell от имени Administrator. Всего лишь несколько слов в догонку. Запуск от имени Администратора или Пользователя и исполнение CmdLet может разрушить вашу систему или удалить важные файлы! Выполняйте их аккуратно! |
Обычно я добавляю его в свою Панель задач Windows для более простого доступа, как это отображено на Рисунке 1-4. В моём случае добавлены и PowerShell, и PowerShell ISE. В отмеченном блоке справа расположена иконка ISE, а та что левее это PowerShell.
После своего запуска, ISE имеет три основных окна, отображаемых на Рисунке 1-5. Отметим, что сама панель составления сценариев по умолчанию не отображается, но её можно выбрать для просмотра из соответствующей панели инструментов. Я вкратце охарактеризую все три основные раздела данного приложения:
-
Панель сценариев: Данная панель предоставляет возможность создания сценариев PowerShell, которые содержат множество команд, с применением включённого в неё языка сценариев PowerShell. Заметим, что обычно мы запускаем и разрабатываем сценарии PowerShell не здесь. Вместо этого мы для начала проводим эксперименты в Панели элемента непосредственной команды (Direct Command Entry Panel); далее после того как мы получили нужное нам приближение, мы после этого можем создавать сценарии.
-
Панели элемента непосредственной команды (Direct Command Entry Panel): Эта панель используется для выполнения CmdLet PowerShell. Воодимые здесь команды намного мощнее своих предшественниц команд Командной строки Windows или DOS. Кроме того, сами формат и структура этих команд сильно отличаются и следуют строгим правилам. Я поясню формат глагол- существительное, а также структуру и предоставлю множество подробностей в ряде примеров следующего раздела.
-
Справочная панель команд: В жтой панели предоставляется подробная спавочная информация относящаяся ко всем доступным нам CmdLet. Тем не менее, я редко пользуюсь этой областью и вместо этого выполняю напрямую запросы при помощи CmdLet Get-Help для получения информации о представляющих интерес CmdLet чтобы изучать как они работают, получать примеры их использования и выдавать подробности всех тех параметров, которые будут доступны.
Прежде чем мы непосредственно погрузимся в CmdLet PowerShell, несколько слов предостережения:
-
Имеются буквально тысячи CmdLet.
-
Существуют сотни тысяч возможных вариантов если вы рассматриваете все доступные возможности.
-
Помимо имеющихся CmdLet, появляются новые CmdLet, их вариации и обновления, которые создаются ежедневно.
-
Всякий CmdLet содержит подробную справку и примеры.
Важно обновлять Help CmdLet на ежедневной основе чтобы обеспечивать доступ к самой последней информации относительно тех CmdLet, которые вы может применять или планировать к использованию.
Некий CmdLet обычно является сценарием PowerShell с малым весом, который выполняет особенную функцию. Основная причина, по которой я это постулирую здесь состоит в том, что CmdLet обычно достаточно объёмны и при возможности создания ваших собственных CmdLet их сложность и потребление системных ресурсов могут изменяться в зависимости от целей самого разработчика.
Некий CmdLet далее выступает неким особым запросом от какого- то пользователя к самой операционной системе или к некому приложению на выполнение какой- то услуги, такой как "отобразить все исполняемые в настоящий момент процессы" или "покажи мне все те службы, которые в данный момент остановлены".
Все CmdLet представляются как некая пара глагол - имя существительное
(verb–noun) и имеет некий справочный файл, к которому можно выполнять доступ с помощью пары глагол- существительное
Get-Help <CmdLet name>
. Следовательно да, даже справка это просто CmdLet.
Обновление подсказки жизненно важно для сохранения связи со всеми установленными в данный момент CmdLet и устанавливать справки
для новых CmdLet, которые создаются и обновляются ежедневно.
Как вы могли догадаться, это всего лишь другой CmdLet и именно этот CmdLet вы применяете первым. А именно:
Update-Help
Вы можете выполнить этот CmdLet из панели непосредственных элементов команд, как это отображено на Рисунке 1-6. Мы обсудим модули в одной из следующих глав,а пока скажем лишь, что это обновит все стандартные модули PowerShell. Для множества устройств и служб доступны дополнительные модули, такие как Active Directory, VMWare, SharePoint и сотни прочих.
Одним из самых первых вопросов, которым вы можете задаться будет "Какие CmdLet доступны?" Или же более
определённо "Какие CmdLet доступны для определения конкретных сведений?" Этот раздел введёт для вас несколько
ключевых CmdLet: Get-Help
, Get-Process
и
Get-Member
.
Get-Help
Предположим, что мы интересуемся получением информации относительно исполняемых в настоящий момент служб. Чтобы отыскать те CmdLet, которые относятся к этой теме я бы ввёл:
Get-Help services
Обратите внимание, что я не запрашиваю информацию о каком- то определённом CmdLet, вместо этого я запрашиваю у справочной системы предоставление для меня информации относительно всех CmdLet, которые могут относиться к службам (service). Рисунке 1-7.
Заметим, что в зависиомости от той версии PowerShell с которой вы работаете, значения текущей версии справочного файла и того какие именно CmdLet установлены, ваш список может существенно разниться.
Наш следующий шаг состоит в выборе одного или более CmdLet и выполнения Get-Help для такого CmdLet. Просматривая свой сокращённый перечень, моногобещающе звучит Get-Service, а следовательно я запрашиваю справку для этого конкретного CmdLet набирая:
Get-Help Get-Service
Рисунок 1-8 отображает сокращённый вывод. Отметим, что у нас имеется множество вариантов связанных с выполнением CmdLet Get-Help. Для данного примера я пользуюсь самой простой формой. однако я могу применить и прочие виды CmdLet, такие как:
Get-Help Get-Service -Detailed
или
Get-Help Get-Service -Examples
Изучая полученный вывод мы замечаем предоставляемый нам синтаксис с подробностями для каждой команды. Данный CmdLet
позволяет нам получать информацию относительно служб в локальном или удалённом компьютере. Параметр
-ComputerName
позволяет нам определять более одного компьютера, разделяя их все
запятой. Воспользуйтесь:
Get-Help Get-Service -Examples
ваша справочная система предоставит мнжество примеров, показывающих нам применение данного CmdLet (Рисунок 1-9).
Get-Help
Другим полезным CmdLet является Get-Process; во многом как и Get-Service, он возвращает информацию относительно процессов, запущенных в неком локальном или удалённом компьютере. Взглянув попристальней на Get-Process с помощью Get-Help (см. Рисунок 1-10), мы для начала отмечаем шесть основных различных вариантов Get-Process. Технически это именуется наборами параметров, которые позволяют нам запускать CmdLet Get-Process шестью различными способами.
Изучая самый первый набор параметров (см. Рисунок 1-11), мы обнаруживаем что все параметры являются необязательными. Это отражается присутствием квадратных скобок, которые окружают все параметры.
Это делает для нас возможным просто набрать данную команду без включения каких бы то ни было дополнительных параметров, как это показано на Рисунке 1-12 с сокращённым выводом.
А что если я желаю получать информацию только к процессам, связанным с запущенным браузером Google Chrome? На
Рисунке 1-13
я развернул конкретный параметр -Name
, который нам требуется для применения чтобы
выполнить именно это.
Вы уже знаете, что параметр -Name
не обязательный; тем не менее, если он предписан,
вы обязаны задать некую строку, указывающую конкретный тип данных, который следует вам предоставить (содержащееся в самом
названии отображаемого процесса). Вы также можете заметить, что следом за словом String идёт пара квадратных скобок. Это указывает
на то, что вы можете по желанию включать некий список необязательных имён. Каждое последующее имя отделяется запятой.
Рисунок 1-14
отображает некий пример.
Get-Member
Как вы уже видели, CmdLet PowerShell предоставляют полезные результаты при их использовании для получения информации (или признака) от целевой системы. Дополнительно к своему простому выводу, каждый CmdLet также возвращает некий объект, который предоставляет доступ к дополнительным свойствам и методам. Cmdlet Get-Member отобразит все имеющиеся свойства и методы для некого CmdLet.
Отметим, что для всякого CmdLet вы можете применять CmdLet Get-Help для получения подробностей и примеров, относящихся к Get-Member. К примеру, такой командой может быть:
Get-Help Get-Member
Для иллюстрации тех значений, которые получаются как дополнительные свойства некого CmdLet, давайте рассмотрим стандартный вывод CmdLet Get-Service, отображаемый на Рисунке 1-15.
А что если требуется для ясности иная информация? Например, что если важно знать как была запущена данная служба? Для ответа на этот вопрос нам потребуется выспросить и получить дополнительные свойства данного объекта.
Для выделения конкретного метода и подробностей о свойствах некого объекта нам потребуется воспользоваться неким конвейером для направления получаемого вывода объекта в CmdLet Get-Member. Конвейер работает аналогично тому как это происходит в большинстве сред командной строки и оболочки. Тем не менее, в PowerShell они являются особыми для объекта и контекста.
Сам CmdLet, который мы желаем выспросить в данном примере, Get-Service, не выполняется, а вместо этого информация о его объекте передаётся в CmdLet Get-Member, как это показано на Рисунке 1-16. Заметим, что само название того свойства, которое мы ищем это StartType.
Теперь, когда мы знаем само название, мы можем задать это свойство StartType
для отображения в неком индивидуальном выводе, показанном на
Рисунке 1-17.
Это самый простой вид конвейера, который мы можем применять. Запускается CmdLet Get-Service и его результаты передаются конвейером в
CmdLet Select-Object.
Затем CmdLet Select-Object отображает все прописанные конкретные свойства. Наш аргумент -Property
CmdLet Select-Object принимает строковые названия для отображения. И снова, все они разделены запятыми.
Чтобы вам было удобно в PowerShell, его ISE и с самими CmdLet, которые вы скорее всего применяете в процессе изысканий, вам требуется провести с
ними эксперименты напрямую. Для помощи в этом процессе я поместил здесь соединёнными вместе некий набор проблем и задач, помещаемых
в конце каждой главы. Не забывайте применять Get-Help для каждого изучаемого CmdLet и убедиться что вы воспользовались параметрами
-Detailed
и -Examples
при исследовании конкретного
CmdLet. Я также предоставил решения для всех обозначенных задач в Приложении, а
потому попробуйте сначала решать их самостоятельно, а затем проверять свои результаты.
Многие из вас могут быть знакомы с командой dir командной строки Windows, которая пересилит содержимое обозначенного
каталога. Все обычные команды Windows и DOS имеют эквиваленты команд PowerShell. И тем способом, которым без всяких усилий вы
можете отыскать эти эквиваленты, является применение CmdLet
PowerShell для поиска таких связанных CmdLet PowerShell, как это показано на
Рисунке 1-18.
Воспользуйтесь справочной системой PowerShell для изучения дополнительных сведений относительно Get-Alias и
Get-ChildItem. {Прим. пер.: обратите внимание на Get-Alias ls
}.
Теперь, когда вы знаете о CmdLet Get-ChildItem, воспользуйтесь им для поиска всех файлов с расширением .jpg в своей системе.
Не сдерживайте себя в экспериментах с теми параметрами, котоые предоставляет Get-ChildItem. Кроме того, убедитесь что вы посмотрели Get-Help с применением переключателя -Examples и изучили эти примеры.
На данный момент вы можете подумать: "Если PowerShell просто заменяет командную строку Windows, тогда почему бы просто не пользоваться самой командной строкой Windows?" Как мы уже изучали ранее в этой главе, наша справочная система способна предоставлять некий список доступных в окрестности определённого слова или фразы команд.
Попробуйте набрать:
Get-Help ip
Это снабдит нас всеми CmdLet PowerShell, которые содержат IP. Вы обнаружите некое число возможных CmdLet, которые позволят вам изучать ваши сетевые настройки. Отметим, что они намного мощнее чем применяемые в командной строке Windows. Для данной задачи рассмтрите поглубже всего три из таких CmdLet:
Get-NetIPAddress
Get-NetIPConfiguration
Get-NetIPInterface
Начните с применения справлчной системы PowerShell чтобы осознать возможности каждого из этих CmdLet и изучите предоставляемые примеры. Затем поэкспериментируйте с каждой из этих команд и рассмотрите подробнее свои собственные сетевые настройки. Знали ли вы об всех этих установках?
Для данной задачи отыщите возможные CmdLet, относящиеся к межсетевому экрану (firewall). В частности, получите информацию, относящуюся к настройкам межсетевого экрана в вашей системе. После того как вы изучите всю основную информацию отыщите и выполните CmdLet который опросит все включенные "Service Filters". Обнаружили ли вы нечто удивительное?
В этой задаче воспользуйтесь справочной системой и теми ключевыми словами, которые интересуют именно вас в тестировании вашей системы.
Эта глава сделала введение в основные цели данной книги, в частности, как обсуждаемая интеграция PowerShell и Python предоставила бы пользу для расследований.
Кроме того, было кратко рассмотрено развитие PowerShell для лучшего понимания того какое отношение PowerShell наших дней имеет к расследованиям. Были предоставлены основы установки и исполнения PowerShell, а также как получать самые последние проверенные версии. Были рассмотрены ISE PowerShell и система подсказок PowerShell, а вместе с тем указана важность обновления этой справочной системы. Затем были введены CmdLet PowerShell и применяемый в обиходе глагол- имя существительное с последующим кратким обсуждением и примерами того как выявлять представляющие интерес CmdLet. Для предоставления подробностей относительно глубины информации, которую можно получать в PowerShell были продемонстрированы некоторые CmdLet. Наконец, был представлен некий набор задач чтобы призвать вас погрузиться поглубже и поэкспериментировать с PowerShell.
Заглядывая далее в Главу 2, мы обнаружим, что одним из ключевых элементов CmdLet PowerShell является возможность создания переменных PowerShell и строк одновременно со многими командами и методами, имеющими название организации Копвейера (Pipelining). Мы выставим несколько задач расследования и решим их при помощи переменных PowerShell и Конвейеризации. Кроме того, мы введём несколько новых CmdLet, которые позволят нам выполнять сортировку, фильтрацию и форматирование получаемого вывода. Глава 2 является ключевой, аоскольку она предоставляет некую прелюдию к тому как мы будем выполнять расследование PowerShell с применением Python.