--- title: Практическая работа 2 tags: pt-start, linux basics --- ## Основы мониторинга ### df Утилита df позволяет узнать количество свбодного места на дисках ```commands df df -h /dev df -k /dev df -a df - h <file> ``` ![](https://i.imgur.com/2x9pN0Y.png) ### du du же позволяет изнать призблизительный размер используемого дискового пространства каталогами и дисками ``` du -h <dir> du -csh <dir> ``` ![](https://i.imgur.com/Yxunn6A.png) ![](https://i.imgur.com/IHT9232.png) ### free команда free позволяет узнать количество свободной оперативной памяти и swap памяти. > [name=despersy] > От себя отмечу, что для linux-based систем крайне важно добавить swap память, ибо, к примеру, тот же parrot будет спокойно использовать всю свободную оперативную память, из-за при базовом переборе хешей вы будете "терять" управление системой, ибо она будет виснуть. > Добавить swap можно следуя инструкциям с [этого сайта](https://www.thegeekdiary.com/how-to-add-swap-space-in-linux/), ибо тут она для cli версий подойдет. Однако использовать стоит именно раздел форматированый как swap нежели файл подкачки. Для windows систем это не будет играть сильной роли, а вот для liunx-based уже будет значительно отличаться. ```commands free free -h free -h -t ``` ![](https://i.imgur.com/IGMw0vR.png) ## iostat Для работы данного приложения стоит скачать пакет sysstat. После установки можно запустить iostat. ```commands iostat iostat -p <раздел> <частота обновления в секундах> ``` ![](https://i.imgur.com/vJ4bV0E.png) ![](https://i.imgur.com/hq0LBwO.png) ### mpstat mpstat позволяет увидеть текущую нагрузку на ядра процессора. Так как я выделил всего одно ядро для виртуальной машины, у меня выводится только 0 ядро. Флаг -P позволяет вывести информацию о конкретном ядре. ```commands mpstat -A mpstat -P ALL mpstat -P 0 mpstat mpstat -P 2 mpstat -P 1 ``` ![](https://i.imgur.com/3cBjspg.png) ![](https://i.imgur.com/eEPWqFt.png) ### vmstat vmstat позволяет увидеть нагрузку на систему от активных процессов, а также от зомби процессов. ```commands vmstat vmstat -a vmstat -f vmstat -d vmstat -D ``` ![](https://i.imgur.com/g4RYrsj.png) ### команда w Крайне полезная команда, позволяющая увидеть всех работающих в системе пользователей. Также отображает подключения по ssh и telnet(в следующих заданиях отображено) ```commands w w -h w -u w -s w -f w -i w -V ``` ![](https://i.imgur.com/Lch4cG1.png) ### htop Ну это уже стандарт для любой системы. Прекраснейшая замена старому top, который не мог выделить процесс, а просто выводил их список вместе с нагрузкой. > [name=despersy] > Не думаю, что стоит говорить про преимущества htop перед top, лучше просто покажу два изображения выполенения этих команд. Стоит ли говорить, что при попытке убить процесс нужно выключать top и запускать kill <код выключения> <процесс>, когда в htop это можно сделать не выходя из него. Однако для просмотра используемой памяти через scanmem я все же выбираю top. ![](https://i.imgur.com/dAosAP9.png) ![](https://i.imgur.com/IkvTBEs.png) ## Работа с ssh ### Установка ssh Установка выполняется командой apt install ssh. После чего проверем его работу командой systemctl status sshd. > [name=despersy] > Проверяем sshd потому что d значит daemon. Это будет процесс работающий в фоне. На примере работы с докером можно очень хорошо научиться различать запуск контейнера с демоном и без. > Почему systemctl? Потому что это debian 11 и service у него нет, это все больше для debian-based систем, на который накачаны дополнительные пакеты. По умолчанию в debian этого нет. ![](https://i.imgur.com/MDe2obx.png) ### Настройка sshd > [name=despersy] > Важно отметить, что в директории ssh есть два конфига: ssh_config и sshd_config. Очевидно, что для работы демона мы настраиваем именно конфиг демона. В конфиге выставляем порт. Желательно брать выше 65000, ибо в таком случае он не будет браться nmap -Pn который сканирует как раз до 65000. Включаем подключаение по ключам шифрования, а все остальное отключаем. ![](https://i.imgur.com/C8N8TQC.png) Теперь перезапускаем сервис командой systemctl restart sshd, чтобы изменения вступили в силу. ![](https://i.imgur.com/171Pjj5.png) ### Подключение к системе Подключение я совершал с целевой системы. Как раз тут можно увидеть подключение через w -h. Перед подключением надо в конфиге включить пароль, чтобы была возможность обменяться ключами шифрования командой ssh-copy-id -i <путь до созданного ключа> -p <port> <user>@<ip>. Если на системе ключ не создан, то делается это командой ssh-keygen. После чего подключаемся к системе командой ssh -p <port> <user>@<ip>. ![](https://i.imgur.com/3X8rHW6.png) ## Сбор информации о дистрибутиве. ### Os-release Поиск os-release в системе. Стоит отметить, что некоторые дистрибутивы могут хранить файл в другой директории. ![](https://i.imgur.com/ax2Kbzo.png) ### Просмотр прав директории home При помощи команды ls -la <dir> можно увидеть права на файлы и директории, а также их создателя и его группу. ![](https://i.imgur.com/0miQxGZ.png) ### Ограничение прав и просмотр соседей С помощью команды chmod -R o-rx /home/desp можно запретить пользователям, не состоящим в группе desp чтение и выполнение команд, также это работает рекурсивно, то есть на все лежащие внутри файлы. ip neigh позволяет системы, с которыми производится обмен данными. ![](https://i.imgur.com/W4Wey6b.png) Показывает открытые порты на системе, а также процесс, который порт открыл. Аналогом данной утилиты можно считать netstat ![](https://i.imgur.com/UGhPOzp.png) ### suid файлы setuid и setgid являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца или группы исполняемого файла. В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root. Обычнов таких файлах можно запрятать парочку ловушек или бекдоров. ![](https://i.imgur.com/IEnBxYh.png) ### Lynis Также есть вариант автоматической проверки при помощи утилиты lynis. Для этого ее требуется скачать. Выполняется при помощи команды wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz, после чего выполняем распаковку архива tar -xvf <archive.tar> ![](https://i.imgur.com/kWiBE7r.png) Также стоит проверить хеши полученных файлов с теми, что указано на сайте. Сначала генерируем хеш полученного файла при помощи sha256sum <file>. > [name=despersy] > Я решил выполнить эту проверку просто через тернарный оператор в python. Присваиваем переменным наши хеши и пишем условие на совпадение. Как можно заметить, мои хеши совпали. ![](https://i.imgur.com/xsYRRqf.png) Теперь запускаем аудит системы. ![](https://i.imgur.com/z6otJjj.png) ![](https://i.imgur.com/kUGgJEv.png) ![](https://i.imgur.com/1U0zGEv.png) Еще можно посмотреть на опции, которые присутствуют для запуска lynis ![](https://i.imgur.com/8ApZRBD.png) Можно также отобразить сгенерированный отчет после запуска аудита. ![](https://i.imgur.com/Zfw3EVf.png) ### Проверка целостности пакетов Для просмотра штатных утилит системы можно использовать команду dpkg -l coreutils. ![](https://i.imgur.com/7aaPYaj.png) ### Установка debsums Данная утилита часто используется для обнаружения пакета, который был изменен рутом системы. > [name=despersy] > Тут у меня возникла небольшая проблема с локалью, но я ее исправил командой dpkg-reconfigure locales ![](https://i.imgur.com/HtGKUfu.png) ![](https://i.imgur.com/mD7Y63l.png) Так как в системе был изменен /bin/dir на /bin/dir.bak система отображает его как потерянный пакет ![](https://i.imgur.com/ZGibcyo.png) ### post exploration Если в систему кто-то уже успел проникнуть, то стоит проверить, что он уже успел в системе сделать. Для этого стоит использовать подобного рода команду sudo find / -printf "%T@ %Tc %p\\n" ``` %T@ - время %Tc - время для человека, а не набор секунд %p\\n - путь до файла ``` ![](https://i.imgur.com/tF89elF.png) После работы выводим полученный результат ![](https://i.imgur.com/OjY7crN.png) ## Работа с окружением bash Для работы стоит установить пакет coreutils командой apt install coreutils -y для автоматического соглашения ![](https://i.imgur.com/XVW9jwu.png) Теперь отобразим все переменные используемого окружения. ![](https://i.imgur.com/piaDx8F.png) Можно также изменить переменные внутри окружения. ![](https://i.imgur.com/qtNvZ0T.png) Также можно добавить переменные. Стоит отметить, что пока переменные не записаны в bashrc пользователя, они будут обнуляться после перезапуска шелла. ![](https://i.imgur.com/Xvpc3z7.png) Исправить эту проблему можно путем экспортирования переменной в bashrc ![](https://i.imgur.com/nbyHdCU.png) Теперь после перезапуска шелла можно увидеть, что переменная появилась. ![](https://i.imgur.com/wUycFNT.png) Также подобные вещи можно настраивать в /etc/profile. ![](https://i.imgur.com/orBxaRY.png) После проверки можно заметить появление новой переменной. ![](https://i.imgur.com/baf426p.png)