![](https://habrastorage.org/getpro/habr/upload_files/970/3b1/3c4/9703b13c40733dd81e9fdd1094d55de7.jpg)
ДИСКЛЕЙМЕР: Внимание! Вся представленная ниже информация предназначена только для ознакомительного изучения. Автор не несет никакой ответственности за любой причиненный вред с использованием изложенной информации.
Предисловие
Идея статьи родилась в ходе исследования способов автоматизации рутинных действий при проведении тестирования на проникновение. Данная мысль возникает, когда исследователь понимает, что в лучшем случае копирует одни и те же команды, в худшем – печатает их на клавиатуре вручную. Моя личная цель автоматизации – экономия самого ценного ресурса, который у нас есть. Времени. Надеюсь, что данная статья позволит и вам сделать это, а также потратить его на более творческие вещи, чем поиск, к примеру, способа реализации туннелирования в Windows-сетях.
Я понимаю и поддерживаю исследователей, которые используют ручное тестирование в целях обучения и при решении нестандартных ситуаций. А для всего остального есть MasterCard… автоматизация).
Что хотелось бы автоматизировать и почему не Metasploit Framework?
Чаще всего целью внутреннего тестирования на проникновение является получения наивысших привилегий в исследуемой инфраструктуре. В зависимости от желаний заказчика это может быть и компрометация наибольшего количества узлов c описанием эксплуатации всех существующих популярных уязвимостей, и получение полного доступа к рабочей станции главного системного администратора, и реализация бизнес-рисков, выделенных руководством. В любом случае перед пентестером зачастую стоит задача собрать воедино множество крупиц информации в тестируемой сети, которые добываются на протяжении всего процесса работ. Если мы рассматриваем тестирование на проникновение как моделирование атаки злоумышленника, то средства и уровень автоматизации должны соответствовать. От этого напрямую зависит скорость получения доступа к критичным данным, а также их полнота. Одним из популярных средств автоматизации являются решения типа RAT/C&C, позволяющие агрегировать все получаемые доступы, произвести ряд некоторых повторяющихся действий на большом количестве узлов, обеспечить закрепление в тестируемой сети. В данной статье будет рассмотрено одно из таких средств, а также выделен функционал, который является наиболее используемым. Изложенная информация посвящена менее распространенному решению, поскольку хочется понять, насколько данные средства являются менее детектируемыми по сравнению с популярными, к примеру, Metasploit Framework, и имеют ли они достаточный функционал.
Давайте начнем с того, что выделим те самые действия, которые повторяются из проекта в проект при проведении внутреннего тестирования на проникновение. Для себя я выделил следующие признаки, используемые далее для сравнения и представленные в порядке рассмотрения:
Простота развертывания;
Наличие поддержки проекта;
Кроссплатформенность агентов, использующихся для связи с командным сервером;
Наличие механизмов обхода средств защиты на узле в процессе генерации нагрузки;
Наличие механизмов обхода средств защиты при взаимодействии с командным сервером;
Автоматизация методов закрепления в системе;
Автоматизация поиска/получения чувствительной информации (в основном учетные данные);
Возможность организации динамического перенаправления портов;
Наличие встроенной функции сканирования портов;
Наличие встроенных модулей проверки возможности повышения привилегий;
Наличие встроенной функции прослушивания/записи сетевого траффика.
Pupy
Установка и поддержка проекта
https://github.com/n1nj4sec/pupy
Для рассмотрения был выбран проект Pupy – кроссплатформенный RAT, имеющий в своем арсенале множество методов постэксплуатации. Проект преимущественно написан на Python 2. Его отличительной чертой является стремление к максимальному охвату эксплуатируемых операционных систем, а также исполнение вредоносного Python-кода, модулей и расширений, написанных на C.
Средство поддерживается для операционных систем Debian 9 и Kali Rolling. Также предоставляется поддержка любой операционной системы, если используется официальный Docker-образ. Но не все так просто…. Данный пункт я сначала я хотел выделить как отдельный комментарий, так как он является довольно объемным и не особо интересным для прочтения. В итоге для всех, кто планирует протестировать данное средство, ссылки на решения и решения некоторых проблем, с которыми столкнулся я, представлены ниже:
https://einsteinathome.org/ru/content/vsyscall-now-disabled-latest-linux-distros;
https://ahmetozer.org/Error-response-from-daemon-OCI-runtime-create-failed-container-with-id-exists;
regex<2022.1.1 в pupy/requirements.txt.
Генерация агентов и организация взаимодействия
Тестирование функционала средства производилось в собственной лаборатории и на основании инфраструктуры endgame Hades портала HackTheBox.
После запуска нас встречает напоминание о неправомерности использования средства без соглашения с владельцем и интерактивная оболочка.
![](https://habrastorage.org/getpro/habr/upload_files/54e/dea/e21/54edeae21fa2ee12082cc5cea18b0424.png)
Взаимодействие организуется путем запуска listener с определенным способом передачи, который зачастую реализуется путем использования конкретного протокола. Я протестирую два вида организации соединения: SSL+RSA и Websocket с RSA+AES. Стоит также отметить, что чрезмерное использование шифрование значительно замедляет скорость взаимодействия. Данный факт стоит учитывать особенно в условиях работы через всевозможные туннели.
![](https://habrastorage.org/getpro/habr/upload_files/b18/8f8/eb8/b188f8eb8a1377cceba20fd3fec1efff.jpg)
Для получения контроля над удаленным узлом нам необходимо сгенерировать агент. Pupy поддерживает следующие виды, которые классифицируются по формату нагрузки, целевой операционной системе и варианту первичных исполняемых действий.
![](https://habrastorage.org/getpro/habr/upload_files/547/c72/07e/547c7207e359335037157b96643f8043.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/899/01b/311/89901b311447f223ec7da1434fc351d1.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/b06/d6b/afc/b06d6bafc1483c8d313b7cba0b40ae88.jpg)
Наиболее интересными мне показались агенты, позволяющие выполнять вредоносный код из памяти. На Windows-системе было принято решение протестировать два типа: ps1_onliner и .NET_oneliner.
Перед генерацией агента .NET_oneliner возникла проблема отсутствия пакета для компиляции. Проблема была решена путем обращения к issues на github.
Процесс генерации агента заключается в создании нового фрагмента кода на языке C# и последующей его компиляции при помощи mcs. Pupy выводит на экран готовую команду для запуска на целевой системе. Процесс организации канала представлен на рисунках ниже.
![](https://habrastorage.org/getpro/habr/upload_files/cba/116/8be/cba1168bee4494443a77854f5314b2de.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/5d0/344/ef9/5d0344ef986ba74629d6ecc219421051.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/d06/499/8a2/d064998a2e0cee43b38291e6f0d283bd.jpg)
В данной конфигурации Kaspersky Security Cloud блокирует запуск. Обход данного механизма защиты решился довольно банальным способом – отказом от использования опции enc. Успешный запуск и организация канала представлены ниже.
![](https://habrastorage.org/getpro/habr/upload_files/401/b37/189/401b371890be43e9c6294861353d146b.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/02a/af5/f19/02aaf5f193206d7e1155f91b525cbd65.jpg)
Статистика по детектированию исполняемого файла на ресурсе virustotal представлена ниже.
![](https://habrastorage.org/getpro/habr/upload_files/3cf/3a7/0aa/3cf3a70aa5503aac9dcd80687d13e24d.jpg)
Далее протестируем вариант агента ps1_oneliner. Данный вектор с точки зрения доставки состоит из двух этапов: скачивание лоадера, а затем скачивание нагрузки. По аналогии с описанными выше действиями был сгенерирован агент, использующий в качестве канала взаимодействия связку криптографического протокола SSL со слоем RSA. Стоит обратить внимание, что данная конфигурация заметно уменьшает скорость взаимодействия.
![](https://habrastorage.org/getpro/habr/upload_files/fff/5c8/01b/fff5c801bdbf0a25e5de3daacb9eefdd.jpg)
Данный вариант доставки нагрузки был заблокирован при помощи AMSI. Текущие способы обхода данного компонента защиты Microsoft Windows хорошо описаны в статье моего товарища, с которой я очень советую ознакомиться. Мы на данном вопросе не будем останавливаться. Используем лишь один из вариантов обхода:
$a = 'System.Management.Automation.A';$b = 'ms';$u = 'Utils'
$assembly = [Ref].Assembly.GetType(('{0}{1}i{2}' -f $a,$b,$u))
$field = $assembly.GetField(('a{0}iInitFailed' -f $b),'NonPublic,Static')
$field.SetValue($null,$true)
![](https://habrastorage.org/getpro/habr/upload_files/30f/13d/e1b/30f13de1b520deee11e30e4717250004.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/a8f/3fd/f1f/a8f3fdf1f6b35936bbf0c71b72455e3d.jpg)
Аналогичным образом протестируем агента для Linux-систем. В качестве нагрузки будем использовать исполняемый файл в формате elf. Взаимодействие агента с сервером организуется путем канала websocket, созданного ранее. В качестве лабораторного стенда использовался endgame Hades с платформы www.hackthebox.eu. Выполнение созданного агента осуществляется посредством уязвимости внедрения команд операционной системы. Более детальный разбор уязвимости можно посмотреть здесь.
![](https://habrastorage.org/getpro/habr/upload_files/43a/ab6/94b/43aab694bf20acdd9ff759d982fb01bf.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/e51/524/2e2/e515242e2f8f9f0908cbcc361298f798.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/069/57d/e8d/06957de8d087615fbff391a8bb1e0d20.jpg)
Хоть антивирус и не частый гость на Unix-системах, результаты проверки на ресурсе virustotal представлены ниже.
![](https://habrastorage.org/getpro/habr/upload_files/f2d/95c/a9e/f2d95ca9e17609830f632ddbb76c33e8.jpg)
Обобщая изложенный материал по генерации агентов и организации клиент-серверного взаимодействия, можно сделать вывод, что в решении Pupy используются основные средства обхода средств защиты. Исполнение из памяти и нераспространенность данного решения позволяют скрыть от антивирусных средств вредоносную активность. Тесты производились на Kaspersky Security Cloud и Microsoft Defender с актуальными базами обновлений. Также средство имеет широкий спектр способов организации клиент-серверного взаимодействия с разными типами шифрования.
Способы закрепления
В Pupy cуществует отдельный модуль, отвечающий за закрепление на узле жертвы под названием persistence. Его функционал в основном нацелен на Windows-системы, поэтому рассмотрим только этот случай. Также стоит отметить, что в зависимости от привилегий доступны разные методы закрепления. В данной статье будут рассмотрены стандартный пользователь, пользователь с правами локального администратора, пользователь с привилегиями NT AUTHORITY\SYSTEM.
Модуль persistence имеет довольно краткую справку, но ее вполне достаточно для ознакомления.
![](https://habrastorage.org/getpro/habr/upload_files/cff/ca8/5c2/cffca85c2dd0f9efbdbbfedb02ce5fdc.jpg)
Также стоит отметить, что при генерации агентов по умолчанию встроен механизм установления соединения в случае его потери. Данный вариант возможен только, если нагрузка все еще находится в запущенном состоянии.
![](https://habrastorage.org/getpro/habr/upload_files/b05/b80/8f3/b05b808f375e2cea90126a4656350a5d.jpg)
Рассмотрим варианты закрепления, которые могут «пережить перезагрузку». Для пользователя со стандартными привилегиями мы имеем следующие способы:
![](https://habrastorage.org/getpro/habr/upload_files/383/569/c78/383569c78b673cd824e244585dd0c54d.jpg)
Все доступные способы в моем случае не дали результатов. Обращение к реестру и использование приложения «Cortana» приводит к блокированию действий посредством антивируса и разрыву соединения. Приложение «People» в моем случае недоступно. Вариант автозапуска является единственно рабочим. Для тестирования был выбран «Калькулятор». Создание недетектируемого при помощи антивируса исполняемого файла, хранящегося в файловой системе, является трудозатратной задачей. При этом раскрывается алгоритм обхода средств защиты. Обычно это приводит к блокированию всех нагрузок, созданных при помощи данной последовательности действий в ближайшем будущем.
![](https://habrastorage.org/getpro/habr/upload_files/8c2/cf4/f7c/8c2cf4f7cfd952e550d907035361bf9d.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/37e/768/84c/37e76884ca4cbe01068e1ce95e5f57cb.jpg)
Встроенные функции закрепления в Windows-системах являются оберткой проекта WinPwnage.
![](https://habrastorage.org/getpro/habr/upload_files/10d/4c2/f26/10d4c2f266e5b6621bf1fce4380d2355.jpg)
Создание пакетного файла формата bat в данном случае невозможно из-за ограничений, в рамках которых создается файл. Код представлен здесь.
![](https://habrastorage.org/getpro/habr/upload_files/d25/b01/bca/d25b01bca4ee3fe45d23cf61653e7186.jpg)
Путем ручной доставки и нагрузки, которая используется при генерации агента формата .NET_oneliner, было произведено закрепление двумя способами. Первый – связка пакетного файла формата bat, в котором происходит запуск PowerShell-скрипта, второй – одиночный пакетный файл.
![](https://habrastorage.org/getpro/habr/upload_files/eb2/5da/305/eb25da30576dc5d5aea6300e9db37b6d.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/f2c/ac4/d72/f2cac4d72ebd7a837079bfe8e32568c1.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/71f/d28/f78/71fd28f78c7d36bce7a405c3d2e88eec.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/ea4/438/22c/ea443822c216cf361a98aec98e379855.jpg)
Оба способа при этом через некоторое время блокируются антивирусным средством.
В случае наличия сессии с высокими привилегиями нам доступны практически все имеющиеся методы.
![](https://habrastorage.org/getpro/habr/upload_files/4df/f9d/1ed/4dff9d1ed5e5ceafb343b6dccc363424.jpg)
К сожалению, ситуация с блокированием посредством антивируса повторяется практически на всех доступных способах. Pupy содержит в себе большинство методов закрепления в Windows-системах. Проект WinPwnage, посредством которого реализован функционал данного модуля, поддерживается (на момент написания статьи последние правки в проект вносились 16 октября 2021 года). Для обхода средств антивирусной защиты необходимо использовать либо полностью ручные методы, либо связку автоматизированных методов с недетектируемой нагрузкой.
Способы постэксплуатации
Разберем основные возможности постэксплуатации, которые есть в данном средстве для Windows-систем. В первую очередь отметим, что повышение привилегий от локального администратора до NT AUTHORITY\SYSTEM в нашем случае может быть выполнено при помощи модуля getsystem.
![](https://habrastorage.org/getpro/habr/upload_files/4e6/b3b/a77/4e6b3ba777ccdd12d09bb66ba1290f08.jpg)
Список и краткую информацию обо всех доступных модулях можно получить при помощи команды help -M.
![](https://habrastorage.org/getpro/habr/upload_files/066/94c/7f9/06694c7f96473414341e0646505e8891.jpg)
Начнем с тех, которые используются для поиска аутентификационных данных. Далее будет рассмотрены модули, которая доступны в основном для Windows-систем (хотя ряд из них поддерживают и Unix-системы). Отдельная трудность в рассмотрении – отсутствие и документации, и подробной справки. Данный фактор очень сильно тормозил рассмотрение и понимание происходящих процессов.
Модуль lazagne
https://github.com/AlessandroZ/LaZagne
Как выяснилось, данный модуль по умолчанию использует все категории учетных данных, которые доступны (lazagne и lazagne all аналогичны).
![](https://habrastorage.org/getpro/habr/upload_files/0a5/6cf/ceb/0a56cfcebcd857822dc0c746c6a583ff.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/cfd/a09/0a6/cfda090a6df51a07cee75b2f388db005.jpg)
Также в исходниках были найдены и другие категории: hashdump, cachedump, credfiles. Полный список размещен в репозитории LaZagne. Я не погружался в реализацию данного решения, но есть определенные проблемы с кодировками (возможно при использовании в Pupy). Тестируемая система не содержала специфичных мест хранения паролей, кроме браузера, в котором учетные данные не были обнаружены (хотя таковые были).
Модуль loot_memory
В моем случае не дал результатов. Производится поиск в памяти процессов на предмет наличия паролей в открытом виде.
Модуль creddump
Данный способ позволяет получить кусты реестра и извлекать учетные данные, не вызывая срабатываний антивирусных средств.
![](https://habrastorage.org/getpro/habr/upload_files/533/1f1/914/5331f1914d2cd66cb6e86e1c9ce48466.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/53b/d64/243/53bd6424306f66fa5da5cbc6868ba9b5.jpg)
Модуль mimishell/mimikatz
Запуск mimishell (интерактивный режим mimikatz) в стандартной конфигурации не срабатывал из-за ошибок, поэтому был протестирован модуль mimikatz в двух режимах: с работающим и с отключенным антивирусом. Также стоит отметить, что исполняемые файлы формата exe по умолчанию не были найдены в моем контейнере. Вместо этого в системе находился zip-архив, из которого необходимо было извлечь содержимое. Для корректной работы необходимо проверить, что в конфигурационном файле проекта правильно указаны пути до исполняемых файлов mimikatz.
![](https://habrastorage.org/getpro/habr/upload_files/e3e/e86/e6c/e3ee86e6c9e15c141c3609a93a1f5f2a.jpg)
Работающий антивирус
![](https://habrastorage.org/getpro/habr/upload_files/9c1/4e4/5dc/9c14e45dcce215c045b73229ba96d61c.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/7af/0b1/d06/7af0b1d06bdc49ba8b2721691f953196.jpg)
Отключенный антивирус
![](https://habrastorage.org/getpro/habr/upload_files/626/735/ec4/626735ec493496b30687d0e54baf9737.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/2d6/76d/eae/2d676deae0a16915275a33264200a386.jpg)
Также в исходниках была найдена стандартная команда запуска модуля.
![](https://habrastorage.org/getpro/habr/upload_files/f04/5bd/acb/f045bdacb1507d8a9b6e6f8ebe47e9fd.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/3c6/50f/f57/3c650ff57d093ecaaba1b72e138353ab.jpg)
Модуль search
Модуль search позволяет искать разного рода файла по именам, содержимому и другим признакам, поддерживая при этом регулярные выражения.
![](https://habrastorage.org/getpro/habr/upload_files/111/c50/8bc/111c508bcdbfed96ee93a4c5cb629826.jpg)
Модуль forward
Для динамического перенаправления портов в Pupy существует отдельным модуль под названием forward. Он реализует локальное и удаленное перенаправление портов с поддержкой SOCKS-proxy.
![](https://habrastorage.org/getpro/habr/upload_files/b36/979/ed8/b36979ed81090cabb68600f1535b330f.jpg)
Я продемонстрирую локальное динамическое перенаправление портов с использование SOCKS-proxy, а также сканирование узла из другой подсети на наличие открытых портов при помощи nmap.
![](https://habrastorage.org/getpro/habr/upload_files/063/3ff/b6c/0633ffb6c5ffcad4407366d20da123d8.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/af8/350/23c/af835023c71669b63498fb487bf646fb.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/4a2/a68/7e1/4a2a687e175ce15557c49e04d7c4a3d1.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/1e1/41b/ce3/1e141bce32caeb4a70fbb19123193ae5.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/86e/6de/6d6/86e6de6d6c6f97d10a95a7d911e65c59.jpg)
Данный функционал очень полезен при внутреннем тестировании на проникновение, особенно если реализован так просто.
Модуль port_scan
Далее рассмотрим встроенную функцию сканирования портов, реализованную посредством модуля port_scan.
![](https://habrastorage.org/getpro/habr/upload_files/5b2/58d/4b9/5b258d4b9338e656eb9d6350bf933c0f.jpg)
Данное средство подходит для сканирования некоторого диапазона IP-адресов по небольшому количеству портов для принятия стратегических решений по захвату сети.
![](https://habrastorage.org/getpro/habr/upload_files/01f/2f0/d7a/01f2f0d7adbaad3d8a43ce330eeed11d.jpg)
Модули повышения привилегий
Рассмотрим модули, которые созданы для тестирование возможности повышения привилегий: beroot, privesc_checker, exploit_suggester. Ни один их них не дал хоть
каких-то результатов.
Модуль tcpdump
Последним функционалом, который бы хотелось рассмотреть, является прослушивание траффика. Для этого создан модуль tcpdump, который на Windows-системе не был выполнен из-за ошибок.
Модули на Unix-системах
Похожим образом по порядку рассмотрим применение модулей на Unix-системе. Группа поиска учетных данных отработала везде без ошибок, но не дала никаких результатов, кроме флага endgame Hades.
![](https://habrastorage.org/getpro/habr/upload_files/00c/d1f/a66/00cd1fa66db7245ba81e6a98114e13f2.jpg)
Модуль forward справился со своей задачей на отлично.
![](https://habrastorage.org/getpro/habr/upload_files/f1e/d1b/250/f1ed1b2506612cfa4e7e4f944697fe89.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/5a3/a74/533/5a3a745334c15b4b167d8323d9890508.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/7ea/8d0/825/7ea8d082522d6a08439972e1cfdb5976.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/2c0/c07/ca0/2c0c07ca03812d07d64e02c6e5ec5e5d.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/229/d6d/d9c/229d6dd9c7e299b57e77b1820270a8a9.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/053/44d/b61/05344db611530d0301af8877658d238d.jpg)
Модуль сканирование портов port_scan.
![](https://habrastorage.org/getpro/habr/upload_files/24e/a9a/0b1/24ea9a0b16ba74d90307166bd19ff565.jpg)
Группа модулей повышения привилегий частично отработала. Beroot также не был исполнен из-за ошибок.
![](https://habrastorage.org/getpro/habr/upload_files/183/777/295/183777295cf40a986b091db54a0a720f.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/f43/9c6/5aa/f439c65aaabce0f303041c20ccc96b8a.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/e77/c7d/84b/e77c7d84baca007286d23cc8b591743c.jpg)
Модуль tcpdump также не был исполнен из-за ошибок.
Выводы
Подводя итог, хочется обобщить все вышеописанное. Для того, чтобы как-то оценить данное средство, я выделил плюсы, которые позволили мне сэкономить время, и минусы, которые отняли у меня (очень много) времени, отчасти на основании пунктов, которые приведены в начале статьи.
Плюсы:
Кроссплатформенность агентов;
Запуск исполняемых файлов из памяти;
Использование компилятора mcs для генерации нагрузки;
Шифрование траффика при взаимодействии агентов и сервера;
Удобный механизм управления сессиями;
Встроенное динамическое перенаправление портов;
Встроенное сканирование портов.
Минусы:
Сложность развертывания (много-много времени);
Отсутствие поддержки;
Отсутствие подробной документации;
Большое количество зависимостей от сторонних проектов.
В целом, я остался доволен работой данного средства, хоть и не стал бы его советовать. Для простых задач может подойти, но придется постоянно бороться с неработающим функционалом и в итоге большинство модулей запускать вручную. Выбирая между широко используемым Metasploit Framework и Pupy, я бы остановился на первом, так как не нашел каких-то преимуществ у второго.
Надеюсь, что данная статья позволила узнать что-то новое для себя, принять решение пользоваться Pupy или нет и хотя бы чуть-чуть сподвигла читателей к тому, чтобы автоматизировать свой труд и экономить время.