Установка, настройка и использование сканера безопасности Antidoto

  • Tutorial
Ранее я писал о двух известных сканерах безопасности общего плана rkhunter и CentOS
На “Хабре” так же есть описание организации работы сканера для вебхостинга — maldet. Теперь хотелось бы рассмотреть реализацию приложения для эвристического обнаружения уязвимостей, вирусов и ботнетов для OpenVZ ОС Linux — Antidoto.



Имея итальянское имя, этот открытый проект является детищем русскоязычного разработчика Павла Одинцова pavelodintsov. Это открытый проект и располагается на гитхабе. Одна из причин создания этого сканера, а так же то, что ярко выделяет его перед остальными — сканирование памяти работающей системы на предмет обнаружения запущенного вредоносного программного обеспечения.

Заявлена работа на всех популярных современных Linux-дистрибутивах: Centos 5-6, Debian 5-7, Ubuntu 10-14. В целом, должно работать и на других дистрибутивах, так как проект написан на perl.
Рассмотрим возможности Антидота.
  • Поиск не пустых файлов и директорий со странными названиями (пробелы, точки) в публично доступных директориях (/tmp, /var/tmp)
  • Поиск не пустых файлов с заданиями планировщика для пользователей apache, www-data (/var/spoo/crontabs, /var/spool/cron)
  • Уведомление об отсутствующих файлах с информацией о последних авторизациях (/var/log/btmp, /var/log/wtmp)
  • Поиск процессов, чьи исполняемые файлы отсутствуют
  • Обнаружение популярных вредоносных программ в памяти по md5-хэшам
  • Обнаружение подозрительного ПО, использующего udp/tcp-порты (irc, прокси, контроллеры ботнета)
  • Обнаружение подключений к удаленным серверам с ненормальным количеством тредов (от 5 и выше)
  • Обнаружение процессов, отличающиеся по архитектуре от системы, используемой на сервере
  • Обнаружение процессов, которые запущены из файлов, собранных статически (бинарные файлы, включающие все зависимые компоненты)
  • Обнаружение процессов, которые были запущены с использованием LD_PRELOAD, запущенных из файлов с битами SUID, SGID

Antidoto может быть запущен в режиме аудита, который используется в качестве замены сразу нескольких программ: netstat, lsof, ss и ps. Так же, может использовать в качестве движка сканирования установленный ClamAV.

Установка и запуск сканера antidoto очень простая, так как для запуска не требуется никаких дополнительных зависимостей. Просто скачивается файл сканера и модуль к нему:

wget -OAntidoto.pl --no-check-certificate https://raw.githubusercontent.com/pavel-odintsov/Antidoto/master/Antidoto.pl
wget -OAntidoto.pm --no-check-certificate https://raw.githubusercontent.com/pavel-odintsov/Antidoto/master/Antidoto.pm
perl Antidoto.pl


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

wget -OAntidoto.pm --no-check-certificate https://raw.githubusercontent.com/pavel-odintsov/Antidoto/master/Antidoto.pm
wget -Olinux_network_activity_tracker.pl --no-check-certificate https://raw.githubusercontent.com/pavel-odintsov/Antidoto/master/linux_network_activity_tracker.pl
perl linux_network_activity_tracker.pl


Далее рассмотрим практическое использование Antidoto на сервере под управлением CentOS на котором расположено некоторое количество openvz-контейнеров.
Ни первый скрипт, ни второй не предполагают использование параметров при запуске.
Но у Antidoto.pl есть набор параметров в коде с помощью которых можно откорректировать проверку сетевой активности. Используются булевы значения, поэтому настроить не особо сложно.

  • compress_forks => 1, при обнаружении форков процесса показывать только один процесс
  • show_process_information => 1, выводить информацию о найденных процессах
  • show_open_files => 1, выводить в отчет открытые файлы приложений

Следующий блок будет полностью посвещен TCP-соединениям
  • show_tcp => 1, выводить любую информацию, относящуюся к TCP
  • show_whitelisted_listen_tcp => 1, выводить списком прослушиваемые сокеты, находящиеся в белом списке
  • show_listen_tcp => 1, выводить список слушающих TCP-сокетов
  • show_client_tcp => 1, выводить список TCP-сокетов клиентов
  • show_local_tcp_connections => 1, отобразить информацию о локальных TCP-соединениях


Последний блок аналогичный предыдущему, но относится к UDP
  • show_udp => 1,
  • show_whitelisted_listen_udp => 1,
  • show_listen_udp => 1,
  • show_client_udp => 1,
  • show_local_udp_connections => 1,


Запустив скрипт на родительском сервере я получил следующие данные

# perl Antidoto.pl
We got warning about process from CT: 115: 'Programm is x86 on container with arch x86_64  Probably it's an malware!'
pid: 48998 name: 3proxy ppid: 30919 uid: 13 gid: 13 CT: 115
exe path: /home/proxy/bin/3proxy
cwd: /
cmdline: /home/proxy/bin/3proxy /home/proxy/conf/main.cfg

We found a file with suspicious name .crontab.kVBjzc.swp in CT 485 in directory: /vz/root/485/tmp

We got warning about process from CT: 485: 'it running manually from NOT root user and it's very dangerous'
pid: 927381 name: AchievementSave ppid: 925991 uid: 501 gid: 502 CT: 485
exe path: /home/0xp_servers/prop_hunt2/serverfiles/srcds_linux
cwd: /home/0xp_servers/prop_hunt2/serverfiles
cmdline: ./srcds_linux -game garrysmod -strictportbind -ip 192.168.0.2 -port 27015 +host_workshop_collection -authkey +clientport 27008 +tv_port 27023 +map cs_office +servercfgfile prop_hunt2.cfg -maxplayers 32 +gamemode prop_hunt -tickrate 33



Как мы видим, при проверке сервера был выявлен подозрительный файл во временной директории контейнера 485 и несоответствие архитектуры запущенного процесса 3proxy.
К счастью, на сервере не обнаружено никакого вредоносного ПО.

Перейдем к рассмотрению режима диагностики (аудита) сервера, который представлен отдельным скриптом — linux_network_activity_tracker.pl

Его преимущества в том, что он заменяет сразу несколько утилит: netstat, lsof, ss и ps и предоставляет в качестве результата проверки удобочитаемый вывод информации. Как и Antidoto, просто запускаем скрипт на родительском сервере с контейнерами

# perl linux_network_activity_tracker.pl 
Container's 15675 process 415528 connected to the DANGER tcp port 6667 to the server 192.169.0.2
Container's 15675 process 415530 connected to the DANGER tcp port 6667 to the server 192.169.0.2
Container's 29419 process 174494 listens DANGER tcp port 9050


Как видно из полученной информации, скрипт аудита обнаружил в одном контейнере подключения к 6667 порту (это наиболее популярный порт для подключения к IRC и управления ботами), а в другом -приложение, ожидающее подключение на 9050 порт. При дальнейшем рассмотрении, это оказалась socks-прокси.

Другие статьи про сканеры безопасности и уязвимостей:
  • +15
  • 8,6k
  • 9
FirstVDS / FirstDEDIC
65,00
Компания
Поделиться публикацией

Комментарии 9

    +5
    Спасибо за статью! Я очень рад, что моя программа используется и приносит пользу! :)
      +1
      Да, программа заслуживает внимания, но как таковой документации к ней нет. Только несколько статей на гитхабе и руководство к использованию в стиле «скачал и запустил». Это первое время меня настораживало. Поэтому решил скомпоновать все одной статьей.
      Для получения общей информации по программе одним взглядом, так сказать.
        +3
        У нас довольно обширные планы по её улучшению, документация в ToDO тоже значится, но Вы нам очень помогли с ней! :)
      0
      Не могу запустить
      # perl linux_network_activity_tracker.pl
      Can't exec "/usr/sbin/vzlist": No such file or directory at Antidoto.pm line 507.
      

      Ubuntu 14.04.2 LTS
        0
        Требуется запускать на родительском сервере с openvz
          0
          Спасибо!
        0
        Для массового vds хостинга на openvz есть nodewatch ( vpsantiabuse.com/ ).
        Честно говоря, там самый минимум(в основном блокировка уже последствий взлома), но уже решает кучу проблем, работает стабильно, ложных срабытываний некоторое количество есть, но минимум.
        Я на всякий случай ставлю даже если на железке всего пара подконтрольных мне виртуалок.
          0
          Не совсем понял. После запуска скрипт выдал полный отчёт или остановился на первом предупреждении? Сам предупреждение выглядит ошибочным.
          root@home:~/antidoto# perl Antidoto.pl
          We got warning about process from CT: 319: 'Executable file for this process was removed, it's looks like malware'
          pid: 500 name: dbus-daemon ppid: 1 uid: 107 gid: 112 CT: 319
          exe path: (deleted)/usr/bin/dbus-daemon
          cwd: /
          cmdline: /usr/bin/dbus-daemon --system

          root@home:~/antidoto# ls -la /usr/bin/dbus-daemon
          -rwxr-xr-x 1 root root 409424 Feb 9 16:37 /usr/bin/dbus-daemon
            0
            действительно, больше похоже на ложное срабатывание. Но все это выглядит как окончание сканирование. В скрипте нет какого-то итоговой информации и его работа заканчивается просто строками вывода последней информации.
            Из пожеланий к скрипту хотелось бы бОльшего интерактива =)

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

          Самое читаемое