Как хакеры покрывают свои действия на эксплуатированном Linux сервере с помощью скриптов командной оболочки |

Как хакеры покрывают свои действия на эксплуатированном Linux сервере с помощью скриптов командной оболочки

Мануал

Злоумышленник с доступом оболочки к серверу Linux может манипулировать или, возможно, даже разрушать все, к чему у них есть доступ.

Хотя многие более тонкие атаки могут обеспечить значительную ценность для хакера, большинство атак также оставляют следы.

Разумеется, эти следы также можно манипулировать и избегать с помощью таких методов, как shell-скрипты.

Поиск доказательств атаки может начинаться со следа, оставленного атакующим, как дата изменения файла.

Каждый раз, когда файл создается, модифицируется или «touch» в терминологии Unix, он обычно обновляет время модификации файла.

Каждый файл в файловой системе Linux содержит дату модификации, хранящуюся где-то.

Системному администратору файлы, которые неожиданно отображают последнее время модификации, могут помочь уведомить  об атаке и предложить им предпринять действия для блокировки системы.

К счастью для злоумышленника, время модификации не является безошибочной записью.

Эти сами модификации могут быть подделаны или изменены.

Одним из таких способов, которым злоумышленник может автоматизировать процесс резервного копирования и восстановления времени модификации, – это написать сценарий оболочки.

Шаг 1 Просмотр и управление отметками времени

Несколько инструментов, включенных в большинство систем Linux, позволяют нам очень быстро просматривать и изменять временные метки файлов.

Наиболее подходящий инструмент, влияющий на это свойство, называется касанием.

Эта команда позволяет нам создать новый файл или обновить последний раз, когда файл или группа файлов были «touched.».

 # touch file 

Выполнение вышеприведенной команды создаст новый файл с именем «file», если он еще не существует, и если он существует, он обновит дату модификации с текущим системным временем.

Мы также можем использовать подстановочный знак, как в строке ниже.

 # touch *

Эта команда обновит временную метку каждого файла в папке, в которой она была запущена.

После создания или изменения нашего файла есть несколько способов, которыми мы можем просмотреть его детали.

 # stat file 

Запуск stat возвращает некоторую информацию о файле, включая Access, Modify и Change timestamps.

Для партии файлов мы также можем просматривать временные метки различных файлов в папке с параметрами ls.

Эта команда перечисляет файлы, а параметр -l или «long» также включает отметки времени этих файлов в своем выводе.

 # ls -l 

Теперь, когда мы можем установить текущие временные метки и просмотреть те, которые уже были установлены, мы также можем использовать touch для определения пользовательской метки времени. Мы можем сделать это, используя флаг d и определяя определенное время в формате YYYY-MM-DD, за которым следует время в часах, минутах и секундах.

 # touch -d “2001-01-01 20:00:00” file 

Мы можем подтвердить это помощью ls.

 # ls -l file 

Хотя это полезно в отдельных случаях использования, было бы очень неэффективно использовать этот метод, чтобы вручную изменять разные времена модификации на сервере после редактирования файлов.

Мы можем автоматизировать этот процесс с помощью сценария оболочки.

Шаг 2 Организация сценария оболочки

Прежде чем запускать скрипт мы должны точно рассмотреть, какие процессы нам нужны для его выполнения.

Для скрытия треков  на сервере злоумышленник должен иметь возможность создавать резервные копии исходных временных меток папки, записывая их в файл, а также иметь возможность восстанавливать их в исходные файлы после того, как мы изменили их любыми изменениями конфигурации, которые мы создаем на этапе эксплуатации.

Эти две разные функции могут быть вызваны различными пользовательскими вводами или аргументами.

Поскольку наш скрипт будет функционировать на основе этих аргументов, мы также хотим иметь способ обработки ошибок.

Это дает нам в общей сложности три потенциальных курса действий в зависимости от ввода пользователя.

  • no argument: return error message
  • save timestamps flag: save timestamps to a file
  • restore timestamps flag: restore timestamps to files according to saved list

Хотя мы могли бы использовать вложенные операторы if / or для создания этого скрипта, мы могли бы также назначить каждую из этих функций своему собственному выражению «if», основанному на условиях.

Мы можем начать писать скрипт в текстовом редакторе по нашему выбору или, возможно, с помощью nano.

Шаг 3 Подготовка скрипта

Мы можем запустить nano из командной строки и создать скрипт под названием timestamps.sh с помощью следующей команды.

 # nano timestamps.sh 

Сначала начнем сценарий с #! / Bin / bash, чтобы объявить скрипт оболочки как скрипт bash, а затем написать наш первый оператор if.

Начнем с if и добавим условие [$ # -eq 0].

Это условие указывает, что если аргументов нет, и программа должна делать то, что следует then.

В случае примера мы возвращаем сообщение об ошибке пользователю с использованием echo, а затем выходим из программы и закрываем цикл if с помощью fi.

#!/bin/bash
if [ $# -eq 0 ]; then
echo “Use a save (-s) or restore (-r) parameter.”
exit 1
fi

После сохранения этого файла, нажав Ctrl + O в nano, мы должны пометить его как скрипт, который можно запустить.

Мы можем сделать это с помощью chmod.

 # chmod +x timestamps.sh

Затем мы можем запустить скрипт без аргументов, чтобы проверить функциональность нашего сообщения об ошибке.

 # ./timestamps.sh 

Если скрипт возвращает наш оператор echo, мы готовы перейти к следующему условию.

Шаг 4 Написание временных меток в файл

Начнем с определения оператора if, который будет происходить только в том случае, если пользовательский ввод соответствует указанному флагу.

if [ $1 = “-s” ] ; then
fi

Первая строка определяет условие для оператора if, как если бы пользовательский ввод, $ 1, был равен «-s», тогда он должен выполнять последовательность шагов в инструкции if. Как указано в нашем заявлении об ошибке, флаг «-s» указывает, что скрипт будет запущен в функции «save».

Теперь мы можем начать писать, что на самом деле включает эта часть скрипта.

Первая строка должна удалить или, по крайней мере, проверить существование файла, в который мы планируем сохранить отметки времени.

Хотя этого можно избежать, используя уникальное имя файла, и улучшившись с помощью скрытого файла, предшествующего периоду в имени файла, по-прежнему идеально подходит для удаления файла, если он существует.

Это позволит избежать случайного перекрытия или неправильных входов, если файл ранее содержал какой-либо контент внутри него.

 rm -f timestamps;

Эта строка удалит файл с именем «timestamps», если этот файл существует. Затем мы захотим использовать ls, чтобы начать генерировать список файлов и время их модификации. Мы можем запустить ls и передать его вывод в другую программу, например sed, чтобы помочь нам очистить этот вход позже.

 ls -l

Мы хотим ограничить вывод из ls только тем, что нам нужно.

При запуске ls -l вывод обычно похож на строку ниже.

 -rw-r–r– 1 user user 0 Jan 1 2017 file

Для сохранения временных меток нам нужны только год, месяц, день и имя файла.

Хотя мы могли бы попытаться удалить все до трехмесячной аббревиатуры месяца, основанной на количестве пробелов или символов перед ним, мы можем быть абсолютно уверены в том, где мы решили отказаться от ненужной информации, ища конкретную строку, например месяц.

Строка ниже удалит все на линии до наступления jan.

  ls -l file | sed ‘s/^.*Jan/Jan/p’

Однако, хотя теперь у нас есть вся информация, которая нам нужна для нашей программы, она не в удобном формате.

Чтобы использовать touch для установки времени модификации, месяцы должны быть в формате чисел, а не в трехбуквенных аббревиатурах.

Мы можем изменить эту встроенную строку, изменив вторую строку в команде sed ниже.

  ls -l file | sed ‘s/^.*Jan/01/p’

Здесь Jan заменяется на 01 в дополнение ко всему, прежде чем он заменяется на заменяемую линию.

Мы можем распространить эту систему на все другие возможные месяцы.

ls -l | sed -n ‘s/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;’

Теперь, если вы работаете в папке, наш вывод должен выглядеть так, как показано ниже.

Этот вывод можно использовать для нашего скрипта, поэтому мы можем добавить его и отправить вход в файл с помощью >> перенаправления.

В этом случае вывод отправляется в файл с именем «timestamps».

Теперь первые два возможных действия скрипта должны быть завершены, и он должен выглядеть примерно так, как показано на рисунке ниже.

Мы можем протестировать скрипт, запустив его с флагом -s, который мы теперь определили.

 ./timestamps.sh -s 

После запуска скрипта мы можем проверить, что информация была сохранена с помощью cat.

Если возвращается список времен и имен файлов, мы готовы перейти к написанию окончательной части скрипта.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий