суббота, 30 сентября 2023 г.

Astra Linux. Список ПО для устранения уязвимостей. Часть 1.

Приветствую, уважаемый читатель!

С недавнего времени в России наконец-то наступила пора импортозамещения ПО. При всех очевидных плюсах данной работы, наружу вылезли большие и мелкие технические проблемы - совместимость ПО, централизованное управление ПО, разные настройки, вытирание слёз пользователей и т.д. Большие проблемы решаются в рамках больших контрактов с вендорами, а вот маленькие проблемы приходится решать самостоятельно и быстро.

Одна из очевидные проблем - централизованный учёт всех установленных пакетов в ОС (например, Astra Linux) для поиска уязвимых пакетов и дальнейшего устранения уязвимостей. 

Кому интересно, добро пожаловать :)  



Итак, в Windows сетях контроль всего ПО на компьютерах и серверах решается очень просто - установленный антивирус ведет базу ПО на компьютере и можно делать выгрузки, писать скрипты для поиска, пихать списки ПО в SIEM и радоваться жизни. Поиск компьютеров с конкретным уязвимым ПО происходит очень быстро. 

Антивирусные агенты для Linux систем такой функционал дают далеко не всегда и встаёт вопрос - как мне из пары сотен импортозамещённых компьютеров найти десятка 2 с критическими уязвимостями пакетов. Естественно, очевидное решение - пройтись по всех таким компьютерам и собрать базу всех пакетов на них, а потом выявить компьютеры с уязвимыми пакетами.

Собрать все пакеты нам поможет bash, сразу скажу, что скрипт вы можете написать с какой угодно логикой и красотой. Ниже просто пример реализации с 2-мя допущениями (обязательно их исправьте):

1) В скрипте захаркожены креды администратора для подключения по SSH.

2) Для примера указал, сбор списка пакетов для доменных имён типа: domain-001....domain-180.

 

 

!/bin/bash

for((i=1; i<180; i++))

do

 

if [ $i -gt 0 ] && [ $i -le 9 ]

then

                echo domain-00$i

                sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-00$i hostname >> /tmp/Soft.log

                sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-00$i dpkg -l | awk ' {print $1,$2,$3,$4} ' | tr " " "," >> /tmp/Soft.log

                              

elif [ $i -gt 9 ] && [ $i -le 99 ]

then

                echo domain-0$i

                sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-0$i hostname >> /tmp/Soft.log

                sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-0$i dpkg -l | awk ' {print $1,$2,$3,$4} ' | tr " " "," >> /tmp/Soft.log

 

elif [ $i -gt 99 ]

then

                echo domain-$i

                sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-$i hostname >> /tmp/Soft.log

                sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-$i dpkg -l | awk ' {print $1,$2,$3,$4} ' | tr " " "," >> /tmp/Soft.log

 

fi

done



Пара комментариев:


sshpass -p 'password'  - позволяет захардкодить пароль в скрипт.

timeout 5 - даём скрипту 5 секунд на сбор пакетов, вдруг компьютер мёртвый в плане железа

-o "StrictHostKeyChecking=no" - игнорируем запросы по SSH-ключам для подключения к неизвестным ранее компьютерам



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



Всем удачи!
 


Комментариев нет:

Отправить комментарий