Уязвимость плагина Googlemaps в Joomla! к атаке DDoS

plugin_googlemap2_proxy.phpНевзирая на то что устаревшая Joomla! v1.5 считается уязвимой, она до сих пор находится у меня на попечении. Мне удалось не разбираясь с самой CMS защитить её от модификации кода простой установкой атрибута immutable. С тех пор много лет подряд сайт работает без каких либо патчей и изменений. Но вот вчера пришло оповещение от системы мониторинга которое вопило о проблемах с сервером где “крутится” эта CMS. Я обнаружил что один сайт порождает огромное количество процессов apache и сильно нагружает сервер. Довольно быстро этот сайт-виновник был обнаружен и отключён. Отключён потому что работал он на shared платформе и приносил проблемы доступности другим сайтам. Далее разбираясь с тем что происходит я обнаружил большое количество запросов из интернет вызывающее скрипт:

http://сайт-виновник/plugins/content/plugin_googlemap2_proxy.php

Continue reading Уязвимость плагина Googlemaps в Joomla! к атаке DDoS

Firefox включение SSLv3

После обнаружения уязвимости Poodle Attack Mozilla выпускает Firefox с заблокированным по умолчанию SSLv3. Это логично так как протокол уязвим и передаваемые внутри него данные могут быть легко перехвачены. Однако SSLv3 используется и в оборудовании, например на устаревших свитчах и роутерах Cisco или на которые не оплачивается техподдержка. Обновления не приходят, а значит и SSLv3 остаётся там основным протоколом. Безусловно глупо входить в такие устройства через публичную сеть. Но если свитч находится за VPN то можно. Так вот чтобы вернуть SSLv3 в новых браузерах Firefox нужно зайти на магическую страничку about:config и там найти параметр security.tls.version.min после чего установить его значение в 0

  • 0 = SSL 3.0
  • 1 = минимально TLS 1.0
  • 2 = минимально TLS 1.1

После этого можно входить на свитч, роутер или что там у вас. После манипуляций лучше параметр снова поднять до версии TLS 1.0.
Для информации: браузер имеет ещё один ключ security.tls.version.max который, как понятно из названия, ограничивает протокол сверху.

Мониториг почтовой очереди

Скрипт получает состояние почтовой очереди и подсчитывает количество заданий их общий размер и выводил даты самого молодого и старого задания в очереди.

mailq | sed -e 's/[\t]\+/ /g' | sed -e '/^ \+/d;/^ *$/d' | awk '{if(NR==1){qtimestr=gensub(/^.+ (-+Q-Time-+) .+$/,"\\1","g",$0);start=index($0,qtimestr);len=length(qtimestr);}else{printf("%d;%"len"s\n", $2, substr($0,start,len));}}' | while IFS=';' read size date ; do echo -e "`date -d\"${date}\" '+%F %T'`;${size}"; done | sort | awk -F';' '{count++;size=size+$2;if(NR==1){printf("oldest:%s\n", $1)}}END{if(count>0){printf("youngest:%s\ncount:%d\nsize:%dMB\n", $1, count, size/1024/1024)}}'
oldest:2015-10-31 04:21:00
youngest:2015-11-04 11:25:00
count:10
size:25MB

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

Значительно более быстро контролировать количество заданий в очереди можно контролировать если очередь заданий разместить на отдельной файловой системе.

df -iP /var/spool/mqueue
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/VG_MAIN-MQUEUE 10485760     120 10485640    1% /var/spool/mqueue
В данном случае интересует количество использованных inodes.
df -iP /var/spool/mqueue | awk '{if($3 ~ /^[0-9]+$/){print $2, $3, $4}}'
10485760 120 10485640

Здесь нужно мониторить второе поле которое показывает количество занятых inode. Их резкий рост и удержание на высоком уровне будет сигнализировать о вероятной спамерской активности с вашего сервера. А так как в отличии от первого (с mailq) такой скрипт работает очень быстро то мониторить можно ежесекундно.
Повторюсь, этот способ не подойдёт если каталог с почтовыми очередями находится в одной файловой системе с другими каталогами, например на корневой FS. Здесь начнут влиять inode временных файлов и всяких других создаваемых пользователями, программами и демонами. Впрочем вынести почтовые очереди на отдельную FS не такая уж и сложная задача. А для сервера полезная.

Мониторинг состояния диска SSD Intel DC S3500

После установки на сервер диска SSD Intel DC S3500 необходимо было подключить его к системе мониторинга.

Для этого необходимо было обновить базу smartctl разобраться с параметрами и выбрать те которые будем мониторить.

Чтобы разобраться с параметрами нужно взять спецификацию на диск. Она нашлась по адресу http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/ssd-dc-s3500-spec.pdf

Как видно из спецификации для параметров мониторинга подходит несколько атрибутов:
Continue reading Мониторинг состояния диска SSD Intel DC S3500

Доступ к данным на диске гостевой виртуальной машины

Предположим ситуацию когда имеется сервер под управлением Linux на котором установлен KVM и запущены виртуальные машины с Linux. С точки зрения производительности и удобства диски виртуальных машин нужно размещать в разделах LVM. Один LV = один диск для виртуальной машины. Однако когда потребуется достать данные с такого диска, а там установлен Linux с использованием LVM то окажется что LVM сервера не видит LVM расположенный внутри диска.

Для этого потребуется утилита kpartx которая подключит диск виртуальной машины после чего он станет виден ядру, lvm и fdisk.
Continue reading Доступ к данным на диске гостевой виртуальной машины

Отладка logrotate

logrotate запускается по крону один раз в сутки.

/etc/cron.daily/logrotate

Для отладки logrotate предусмотрен ключ -t который пишет операции которые должен сделать но из-за ключа отладки не делает в реальности:

/usr/sbin/logrotate -d /etc/logrotate.conf

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

logrotate --help
Usage: logrotate [OPTION...] <configfile>
  -d, --debug               Don't do anything, just test (implies -v)
  -s, --state=statefile     Path of state file
  -v, --verbose             Display messages during rotation

Ключом -v можно пользоваться в команднике /etc/cron.daily/logrotate чтобы во время работы отладочная информация записывалась в файл:

logrotate -v /etc/logrotate.conf 2>&1 | sudo tee -a /var/log/logrotate.log

Для чего нужно поправить файл /etc/cron.daily/logrotate
Возможно для создания файла вам потребуется добавить исключение SELinux для нового log-файла /var/log/logrotate.log.
Continue reading Отладка logrotate

smartctl и новые диски

Когда в сервер устанавливаются новые диски, часто можно заметить что описания некоторых параметров S.M.A.R.T. регистров не соответствуют действительности либо вообще отствуют. Например так было после установки SSD Intel DC S3500 на сервер с “CentOS release 6.6 (Final)“:

170 Unknown_Attribute       0x0033   100   100   010    Pre-fail  Always       -       0
171 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
172 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
174 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       1

Continue reading smartctl и новые диски

Время начала и окончания действия сертификата

Как узнать время начала действия и окончания (истечения) сертификата?

echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -dates | cut -d '=' -f2- | xargs -I{} date --date="{}" '+%F %T'

Для того чтобы после взаимодействия с сервером в пакетном режиме openssl завершился необходимо передать ему перевод строки. Иногда можно встретить, что ему передают файл перенаправлением из /dev/null. Оба варианта работают одинаково.
Второй вызов openssl работает уже с полученным через pipe сертификатом и достаёт из него дату начала его дествия и дату окончания действия. Затем командой cut из сертификата извлекается только дата, и наконец дата передаётся в качестве параметра команде date которая из него может сформировать дату в различных форматах.
Continue reading Время начала и окончания действия сертификата

Проверка что в sudoers все скрипты для Zabbix существуют

zabbix_agentd который используется для мониторинга сероверов, может запускать скрипты. Для большинства из этих скриптов необходимы права root. Это обеспечивается через su в файле конфигурации агента и sudoers.
Но иногда при конфигурировании множества серверов (zabbix-agentd) сталкиваешься с тем, что некоторые скрипты которые там перечислены отсутствуют на диске. Это приведёт к тому что скрипт не будет выполняться. А чтобы по-быстрому проверить я набросал скрипт который проверяет все ли скрипты или программы есть на диске и пишет имена отсутствующих. По правде говоря скрипт не обрабатывает файлы с Cmnd_Alias и файлы вложенные в каталог /etc/sudoers.d/

cat /etc/sudoers | grep -i "zabbix ALL=NOPASSWD:" | cut -d ':' -f2- | sed 's/[,]\+/\n/g' | sed -e 's/^[ \t]\+//g;s/^\(\/[^ ]*\).*$/\1/g' | while read FN ; do [ ! -e "${FN}" ] && echo "${FN} - not exists" ; done

Continue reading Проверка что в sudoers все скрипты для Zabbix существуют

Проверка GnuPG подписи OpenVPN

Как скачивать OpenVPN чтобы минимизировать риски получить поддельный инсталяционный пакет.
Нужно выполнить несколько шагов.

Проверить что открывшийся URL зашифрован TLS1.1 и выше и подписан правильной подписью.

Для этого нужно посмотреть сертификат. На момент публикации статьи сертификат для домена *.openvpn.net подписан Go Daddy Secure Certificate Authority – G2 действительным до 03/05/2016. Отпечаток SHA1:BD:4B:30:9E:65:DC:3F:7B:59:52:46:4A:1C:19:D6:BE:E4:98:5B:5A

$ echo | openssl s_client -tls1_2 -showcerts -connect openvpn.net:443 2>/dev/null | openssl x509 -fingerprint | grep 'BD:4B:30:9E:65:DC:3F:7B:59:52:46:4A:1C:19:D6:BE:E4:98:5B:5A'

Continue reading Проверка GnuPG подписи OpenVPN