Архив метки: Ubuntu

Про уязвимость Elevation of Privilege - needrestart (CVE-2024-48990)

Про уязвимость Elevation of Privilege - needrestart (CVE-2024-48990)

Про уязвимость Elevation of Privilege - needrestart (CVE-2024-48990). 19 ноября Qualys выпустили бюллетень безопасности про 5 уязвимостей повышения привилегий в утилите needrestart (CVE-2024-48990, CVE-2024-48991, CVE-2024-48992, CVE-2024-10224 и CVE-2024-11003), используемой по умолчанию в Ubuntu Server, начиная с версии 21.04.

Утилита needrestart запускается автоматически после операций пакетного менеджера APT, таких как установка, обновление или удаление пакетов. Она определяет требуется ли перезагрузка для системы или ее служб. Таким образом гарантируется, что службы используют последние версии библиотек, без снижения аптайма.

Все 5 уязвимостей позволяют обычному пользователю стать root-ом. Для всех у Qualys есть приватные эксплоиты. Публичный эксплоит есть пока только для одной, связанной с переменной окружения PYTHONPATH. ⚡️ Он доступен на Github с 20 ноября.

Обновляйте needrestart до версии 3.8 или отключайте "interpreter scanning" в needrestart.conf.

Безопасная чистая ОС для массового использования

Безопасная чистая ОС для массового использования

Безопасная чистая ОС для массового использования. По итогам разговоров с родными и близкими я пришёл к выводу, что у многих людей есть потребность в безопасном доступе к важным онлайн-сервисам: госуслугам, онлайн-банкам, финансовым сервисам и т.п. Профилактические awareness-рассказы про кейсы с уводом денег, набором кредитов, попытки продать квартиру и прочие шалости злоумышленников, в целом, работают. 👍 При этом выполнять элементарные нормы кибергигиены (не ставить на десктоп всякую пакость непонятно кем написанную и выложенную, не ставить варез, своевременно обновлять ОС и прикладное ПО, по возможности не использовать Windows, которая в приоритете у малварщиков, и т.д.) они не готовы. 🤷‍♂️ Удобство и сформировавшиеся пользовательские привычки перевешивают любые потенциальные риски. Меня, как ИБ-шника и VM-щика, такое положение дел немало удручает, но это факт. 😑 Уговоры тут не работают. Тем более, что объективно подавляющее большинство реальных кейсов атак на физических лиц сейчас связаны с социалкой, а не с непосредственной компрометацией устройств. В общем, плетью обуха не перешибешь. Только зря разругаетесь и выставите себя как неадекватного параноика. 😵‍💫

И что делать в таком случае? Как обезопасить близких?

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

🔹 Гораздо более доступный вариант - загрузочная live usb флешка.

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

Тут, конечно, помимо скомпрометированного роутера можно нарваться и на скомпрометированный UEFI, но всё же атаки на live usb это пока далеко не мэйнстрим. Поэтому, имхо, использование live usb в качестве меры безопасности стоит популяризировать.

Проще всего создать live usb через Startup Disk Creator в Ubuntu (пакет ). Процесс подготовки live usb тривиальный. Нужно только выбрать скачанный iso-файл дистрибутива (я предпочитаю Xubuntu Desktop) и флешку. Установка быстрая и полностью автоматическая.

Далее пример мануала для использования live usb, который можно выдать близким. Тут всё максимально упрощено, с расчётом на тех, кто Linux-ом никогда не пользовался и разбираться с ним не хочет и не будет.

---

Как пользоваться загрузочной флешкой с чистой операционной системой для доступа к онлайн-банку, Госуслугам, nalog.ru и т.д.

1. Выключить компьютер
2. Вставить флешку в USB порт
3. Включить компьютер и зажать кнопку F12 [процесс выбора boot device может отличаться, проверьте на конкретном устройстве]
4. Выбрать "boot device" UEFI: Sony Storage Media… [замените на свою флешку]
5. Нажать Enter (Try or Install Ubuntu)
6. Должна показаться иконка xubuntu. Подождать окончания загрузки примерно 3 минуты.
7. После того как загрузится рабочий стол кликнуть на синюю иконку с белой мышкой в верхнем левом углу экрана.
8. Выбрать опцию Web Browser. Подождать 3 минуты до загрузки браузера.
9. Браузер можно открыть на полный экран, нажав на иконку "+" в правом верхнем углу окна браузера.
10. В поле ввода адреса набрать "online.sberbank.ru", далее работать с интерфейсом Сбербанка. (Раскладка будет только английская! Для добавления русской, нужно будет выполнить ещё несколько шагов) [Описать кейсы, которые нужны пользователю]
11. После завершения работы закрыть окно браузера иконкой "x" в правом верхнем углу окна браузера.
12. Нажать на синюю иконку с белой мышкой в верхнем левом углу экрана. Выбрать оранжевую иконку с белой стрелкой. Затем выбрать Красную иконку "Shut Down".
13. Если в течение минуты компьютер не выключается, нажать кнопку "ESC", должен появиться текст ошибки на экране, затем нажать Enter. Компьютер должен выключиться.

До End of Life CentOS 7 осталось 2 недели

До End of Life CentOS 7 осталось 2 недели

До End of Life CentOS 7 осталось 2 недели. Самое время проверить не осталось ли где-то в инфраструктуре хостов с этой операционной системой. Куда мигрировать с CentOS 7 не особо понятно. RedHat превратили CentOS в нестабильный дистрибутив CentOS Stream и начали бороться с традиционными альтернативами в виде Alma и Rocky. Можно, конечно, посмотреть в сторону SberLinux, RedOS и Роса «Кобальт», но, имхо, будущее RPM-based дистрибутивов совместимых с RHEL в России достаточно туманно и стоит целиться скорее в Астру или Альт. Судя по статистике, в мире в основном бегут на Ubuntu.

Хакатон MaxPatrol VM, часть 1: Linux стенд и Ansible

Хакатон MaxPatrol VM, часть 1: Linux стенд и Ansible

Хакатон MaxPatrol VM, часть 1: Linux стенд и Ansible. Как и обещал, делюсь впечатлениями от хакатона. Первым заданием у меня была автоматизации установки софта из TAR-архива на Debian 12 с помощью Ansible. Раньше я с Ansible толком не работал, поэтому появился повод немного разобраться.

Ansible - система управления конфигурациями, написанная на Python. Главное отличие Ansible от аналогов - не нужна установка агента или клиента на управляемые хосты. Обычно используется для управления Linux-хостами, но Windows также поддерживается. Взаимодействие происходит по модели push: сам Ansible запускается на "центральном" управляющем хосте, ходит на управляемые хосты и что-то делает. На управляемом хосте должен быть установлен Python версии 2.4 и выше, соединение выполняется по SSH или WinRM.

Управляющим хостом для Ansible будет мой десктоп на Ubuntu 23.10, а управляемым хостом будет виртуалка в VirtualBox.

Я завёл виртуалку в VirtualBox с Debian 12, добавил интерфейс Host-only adapter, чтобы можно было подключаться к ней по SSH. Я проверил, что подключение работает с помощью:

$ ssh vmuser@192.168.56.104

Для работы Ansible должна быть настроена аутентификация по ключам. Я сгенерировал ключ с помощью:

$ ssh-keygen -t ed25519 -C "alexander@avleonov.com"

Затем я закинул его на target-host:

$ ssh-copy-id vmuser@192.168.56.104

После этого команда уже не требовала пароль.

На десктоп с Ubuntu 23.10 я поставил Ansible при помощи утилиты pipx

$ sudo apt-get install pipx
$ pipx install --include-deps ansible

Обновлять можно с помощью:

$ pipx upgrade --include-injected ansible

Проверить версию ansible можно с помощью:

$ ansible --version
ansible [core 2.16.7]
...

Далее описываю управляемый хост (виртуалку) в yaml файле:

$ cat hosts.yaml 
myhosts:
hosts:
debian12:
ansible_host: 192.168.56.104

Валидирую файл hosts.yaml:

$ ansible-inventory -i hosts.yaml --list
{
"_meta": {
"hostvars": {
"debian12": {
"ansible_host": "192.168.56.104"
}
}
},
"all": {
"children": [
"ungrouped",
"myhosts"
]
},
"myhosts": {
"hosts": [
"debian12"
]
}
}

Проверяю соединение:

$ ansible myhosts -m ping -i hosts.yaml -u vmuser
debian12 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}

Всё работает, связь есть. Теперь можно попробовать выполнить какие-то команды на хосте с помощью Ansible. Делаю тестовый плейбук для вывода hostname и версии дистрибутива:

- name: Print Hostname and OS Version
hosts: all
tasks:
- name: Get Hostname
command: hostname
register: hostname_output

- name: Get OS Version
ansible.builtin.shell: lsb_release -a | grep "Description:" | awk -F"\t" '{print $2}'
register: os_version_output

- name: Display Outputs
debug:
msg: "Hostname is {{ hostname_output.stdout }} and OS Version is {{ os_version_output.stdout }}"

Запускаю его:

$ ansible-playbook -i hosts.yaml -u 'vmuser' playbook.yaml
...

TASK [Display Outputs] *********************************************************
ok: [debian12] => {
"msg": "Hostname is debian and OS Version is Debian GNU/Linux 12 (bookworm)"
}

Работает! В следующей части рассмотрим как описать в плейбуке установку софта из TAR-архива.

На выходных добился первых результатов в своём опенсурсном проекте по детектированию уязвимостей Vuldetta

На выходных добился первых результатов в своём опенсурсном проекте по детектированию уязвимостей Vuldetta
На выходных добился первых результатов в своём опенсурсном проекте по детектированию уязвимостей VuldettaНа выходных добился первых результатов в своём опенсурсном проекте по детектированию уязвимостей Vuldetta

На выходных добился первых результатов в своём опенсурсном проекте по детектированию уязвимостей Vuldetta. 😇

Что получилось сделать:

🔹 Распарсил Ubuntu OVAL в простые правила детектирования по версиям пакетов. Cтруктура OVAL-а там достаточно навороченная, особенно что касается детектирования уязвимостей ядра (не по пакетам, а по uname_test и variable_test 🤯). Несмотря на то, что OVAL-контент для каждой версии дистрибутива качается в отдельном файле, на уровне OVAL-а также реализованы проверки версии дистриба. Сейчас я просто прохожу по всем definition-ам, смотрю какие dpkginfo_test используются в критериях и разбираю только их.

🔹 Сделал примитивную чекалку по правилам детектирования. Без оптимизаций на парсинг OVAL-а и расчет уязвимостей уходит 6,5 секунд. Проверил для пакетов необновленного хоста - получил список свежих уязвимостей, обновил пакеты - уязвимости ушли. Работает. 🙂👍

Всё на Github. Дальше разбираться с уязвимостями ядра, оптимизацией и оформление в API-шку.

Хочется немного поиграться с непосредственным детектом уязвимостей - проект Vuldetta

Хочется немного поиграться с непосредственным детектом уязвимостей - проект Vuldetta

Хочется немного поиграться с непосредственным детектом уязвимостей - проект Vuldetta. С 2021 года я работаю над открытым проектом сканера уязвимостей Scanvus для Linux хостов и docker-образов. И с ним всё отлично, кроме того, что он сам уязвимости не детектирует. 😅 Он собирает пакеты и версию дистриба, но для детектирования использует внешние коммерческие API-шки: Vulners Linux API или VulnsIO API. А оно стоит денег и это, естественно, снижает привлекательность утилиты. 🤷‍♂️

Можно ли сделать так, чтобы Scanvus работал без использования коммерческих API? Можно. И тут видятся 2 пути:

🔹 Первый путь - это добавить детектирование уязвимостей непосредственно в Scanvus. Мне это не очень нравится. Мне нравится концепция такого "безмозглого" нейтрального сканера, который может использовать различную внешнюю экспертизу в зависимости от потребностей.

🔹 Второй путь - это сделать некоторый аналог Vulners Linux API или VulnsIO API, который можно было бы развернуть локально в организации и использовать для детекта уязвимостей хотя бы для некоторых Linux дистрибутивов. Понимая, безусловно, что коммерческий сервис будет, скорее всего, поддерживать большее количество дистрибутивов и, возможно, будет даже лучше детектировать. Но от бесплатной свободной альтернативы хуже не будет.

Собственно второй путь и есть Vuldetta. Взять готовые формализованные правила детекта (после возни с OVAL-контентом для Debian я смотрю теперь в сторону OVAL-контента для Ubuntu), разобрать их во что-нибудь простое и удобное для работы (Bulletin|CVE_Number|Distribution_Version|Package_Name|Package_Version), сделать API-шку-сравнивалку версии на хосте с безопасными версиями из OVAL-контента.

Вроде выглядит как изян. А на выходе может получиться штука, которую как минимум можно будет использовать для валидации качества детектирования коммерческих сканеров уязвимостей, а как максимум возможно даже в проде где-то использовать. А так как лицензия будет MIT, то это даже можно будет встроить куда-нибудь как альтернативу жуткому фолсящему Trivy. 😅 И будет на чём тестовый контент для Vulremi генерить опять же. 🙂

Платные обновления безопасности для актуальных версий Ubuntu

Платные обновления безопасности для актуальных версий Ubuntu

Платные обновления безопасности для актуальных версий Ubuntu. Рекомендации в бюллетенях Ubuntu поставить ESM (Expanded Security Maintenance) версий пакетов доступные с платной подпиской это дело обычное. Как правило, это касается End of Life (EOL) версий Ubuntu. С 30 апреля EOL будут все версии ниже Ubuntu 18.04 (Bionic Beaver) включительно. Всё честно. Обновитесь на новую версию дистриба, будут вам безопасные версии пакетов, не можете - платите.

С появлением подписки Ubuntu Pro стало интереснее. Вот 2 USN бюллетеня с ESM пакетами для Ubuntu 20.04 (EOL Apr 2030):

USN-5273-1: RPM Package Manager vulnerabilities
USN-5160-1: Midnight Commander vulnerability

Пишут, что эти обновления доп. фича и без Ubuntu Pro их бы вообще не было - радуйтесь. По факту это значит, уязвимость в пакете из репозитория есть (тот же Scanvus продетектит), версия дистриба актуальная, исправить уязвимость без платной подписки нельзя. А Canonical подписки компаниям из РФ не продает. 🤷‍♂️