📦Как проверить и зарегистрировать вредоносную установку RPM пакета |

📦Как проверить и зарегистрировать вредоносную установку RPM пакета

Мануал

В этой статье мы расскажу вам о том, как проверить и залогировать вредоносную установку RPM.

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

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

Анализ файлов логов – это первое, что делает разработчик или администратор при возникновении проблемы.

📦 Как проверить поставщика установленных пакетов RPM на Linux

Как проверить вредоносную установку RPM

По умолчанию Linux предоставляет централизованное хранилище для хранения файлов журналов, которые можно найти в каталоге /var/logs и подкаталогах.

В Linux файлы логов создаются для всего, например, для системы, базы данных, ядра, управления процессами, загрузки и т.д.

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

cd /var/log/
ls -lhtr
total 42M
drwxr-xr-x. 2 chrony chrony 4.0K Mar  2  2021 chrony
drwxr-xr-x. 2 root   root   4.0K Jun  2  2021 tuned
drwx------. 2 root   root   4.0K Sep 10 20:17 private
-rw-rw----. 1 root   utmp      0 Sep 10 20:17 btmp
-rw-------. 1 root   root      0 Sep 10 20:18 spooler-20210922
-rw-------. 1 root   root      0 Sep 10 20:18 maillog-20210922
drwxr-xr-x. 2 root   root   4.0K Sep 10 20:21 anaconda
-rw-------. 1 root   root    20K Sep 22 13:24 secure-20210922
-rw-r--r--. 1 root   root   1.6K Sep 22 14:16 hawkey.log-20210922
-rw-------. 1 root   root   6.4K Sep 22 15:01 cron-20210922
-rw-------. 1 root   root    22M Sep 22 15:49 messages-20210922
-rw-------  1 root   root    65K Sep 22 15:50 boot.log-20210922
drwxr-x---. 2 sssd   sssd   4.0K Sep 22 15:50 sssd
-rw-------  1 root   root      0 Sep 22 15:50 spooler
-rw-------  1 root   root      0 Sep 22 15:50 maillog
drwx------. 2 root   root   4.0K Sep 22 22:55 audit
drwx------. 3 root   root   4.0K Nov  2 19:01 samba
drwxr-xr-x  2 root   root   4.0K Feb  2 20:31 supervisor
-rw-r--r--  1 root   root   1.4K Feb  2 22:31 hawkey.log
-rw-r--r--. 1 root   root    66K Feb 22 15:41 dnf.librepo.log
-rw-r--r--. 1 root   root    27K Feb 22 15:41 dnf.rpm.log
-rw-r--r--. 1 root   root   194K Feb 22 15:41 dnf.log
-rw-------. 1 root   root    30K Feb 22 18:23 boot.log
-rw-------  1 root   root   5.3K Feb 22 18:23 cron
-rw-r--r--. 1 root   root    12K Feb 22 18:23 kdump.log
-rw-r-----. 1 root   root    56K Feb 22 18:23 firewalld
-rw-rw-r--. 1 root   utmp    37K Feb 22 18:25 wtmp
-rw-rw-r--. 1 root   utmp   286K Feb 22 18:25 lastlog
-rw-------  1 root   root   5.5K Feb 22 18:25 secure
-rw-------  1 root   root    20M Feb 22 18:25 messages

На Linux существуют файлы системных журналов и файлы журналов приложений.

В этом руководстве мы сосредоточимся на файлах журналов приложений.

Мы разработаем простое приложение и создадим для него файлы журналов.

Он может быть сгенерирован в папке по умолчанию, т.е. /var/log, или мы можем сгенерировать настроенные файлы журнала в другой папке.

Мы создадим настроенные файлы журнала в нашем руководстве.

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

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

Для выполнения наших задач нам потребуются следующие 3 файла.

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

📦 Как проверить целостность rpm-пакета на Linux

Создадим белый список.csv

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

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

Это будет передано в качестве входного файла в app.sh скрипт.

Запустите rpm qa и сохраните выходные данные в файле whitelist.csv, как показано ниже.

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

rpm -qa > whitelist.csv
libsss_nss_idmap-2.4.0-9.el8_4.2.x86_64
gettext-0.19.8.1-17.el8.x86_64
geolite2-city-20180605-1.el8.noarch
firewalld-filesystem-0.8.2-7.el8_4.noarch
fontpackages-filesystem-1.44-22.el8.noarch
systemd-239-45.el8_4.3.x86_64
trousers-0.3.15-1.el8.x86_64
tigervnc-license-1.11.0-6.el8.noarch
libldb-2.2.0-2.el8.x86_64
ncurses-base-6.1-7.20180224.el8.noarch
polkit-0.115-11.el8_4.1.x86_64
iproute-5.9.0-4.el8.x86_64
dnf-data-4.4.2-11.el8.noarch
kernel-modules-4.18.0-305.17.1.el8_4.x86_64
----------------------------------------------------------

Создаем скрипт log.sh

Далее нам нужно создать функциональный скрипт ведения журнала под названием log.sh в каталоге /root.

В этом скрипте мы создаем функцию под названием log(), которую мы собираемся использовать в нашем прикладном скрипте под названием app.sh на следующем шаге.

Приведенный ниже скрипт в основном проверяет аргумент, переданный с помощью функции log, а затем добавляет сообщения в зависимости от типа сообщения, будь то ERROR, WARNING или INFO.

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

vi log.sh
!/bin/bash
function log(){
if [[ $1 == "-e" ]]; then
shift
msgType="ERROR: "
fi
if [[ $1 == "-w" ]]; then
shift
msgType="WARNING: "
fi
if [[ $1 == "-i" ]]; then
shift
msgType="INFO: "
fi
if [[ $1 == "-p" ]]; then
echo "$*"
fi
echo -n "`date +"%Y-%m-%dT%H:%M:%S.%6N%:z"`, $msgType " >> $logFile
echo "$*" >> $logFile
}

Описание:-

  • -e -> Для записи сообщений об ошибках
  • -i -> Для записи информационных сообщений
  • -w -> Для записи предупреждающих сообщений
  • Shift -> Для перемещения аргумента командной строки на одну позицию влево
  • $* -> Для записи всех аргументов командной строки, передаваемых скрипту.

Создайте app.sh Скрипт

Функционал этого скрипта заключается в анализе файла whitelist.csv.

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

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

Вы можете включить режим отладки, раскомментировав инструкцию set -x.

Мы создаем файлы журналов в папке /var/log/cyberithub/.

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

🐧 Как отключить и удалить ненужные службы на Linux

Создайте временный файл /tmp/temp_file, который необходим для выполнения скрипта.

vi app.sh
!/bin/bash
set -x
include log.sh
. /root/log.sh
Call log function
log
mkdir -p /var/log/cyberithub/
logFile=/var/log/cyberithub/application.log
CSV_FILE=$1
TEMPFILE=/tmp/temp_file
function package_check(){
rpm -qa > $TEMPFILE
while read line
do
PACKAGE_NAME=`/bin/echo $line | cut -d';' -f 1`
grep -v "^$PACKAGE_NAME" $TEMPFILE > $TEMPFILE.o
cp $TEMPFILE.o $TEMPFILE
done < $CSV_FILE
if [ -s $TEMPFILE ]
then
for i in `cat $TEMPFILE`
do
log -e "New Installed Package Found $i..."
done
fi
rm -rf $TEMPFILE.o $TEMPFILE
log -w "Info message implementation"
log -w "Warning message implementation"
}
#MAIN
Check CSV File
if [ ! -f "${CSV_FILE}" ]; then
log -e "Input file not found"
exit 1
fi
Check file type
if [ "${CSV_FILE}" != *.csv  ]; then
log -e "Input file should be a .csv file"
exit 1
fi
package_check

Нам нужно изменить права доступа к файлу перед выполнением скрипта.

chmod 755 *

Теперь установите на машину несколько дополнительных пакетов rpm.

yum install net-tools -y
yum install tcpdump -y
yum install telnet -y

Пример использования 1: Когда файл whitelist.csv не передается в качестве входных данных

./app.sh
cd /var/log/cyberithub/
cat application.log
2022-02-22T19:10:12.151834+05:30, ERROR:  Input file not found

Пример использования 2: Когда в качестве входных данных передается неправильный формат файла

./app.sh whitelist
cd /var/log/cyberithub/
cat application.log
2022-02-22T19:10:12.151834+05:30, ERROR:  Input file not found
2022-02-22T19:14:23.926123+05:30, ERROR:  Input file should be a .csv file

Пример использования 3: При передаче правильного входного файла

./app.sh whitelist.csv
cd /var/log/cyberithub/
cat application.log
2022-02-22T19:10:12.151834+05:30, ERROR:  Input file not found
2022-02-22T19:14:23.926123+05:30, ERROR:  Input file should be a .csv file
2022-02-22T19:48:20.905768+05:30, ERROR:  New Installed Package Found telnet-0.17-76.el8.x86_64...
2022-02-22T19:48:20.906775+05:30, ERROR:  New Installed Package Found tcpdump-4.9.3-2.el8.x86_64...
2022-02-22T19:48:20.907791+05:30, ERROR:  New Installed Package Found net-tools-2.0-0.52.20160912git.el8.x86_64...
2022-02-22T19:48:20.909619+05:30, WARNING:  Info message implementation
2022-02-22T19:48:20.910591+05:30, WARNING:  Warning message implementation

см. также:

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