Превентивная защита ПК от Petya.C

Новый вирус, который уже успели окрестить и NoPetya и NotPetya, официально носит название Petya.C. Этот вирус модифицирует MBR (Master Boot Record – главная загрузочная запись), прописывает в него свой код и при перезагрузке шифрует файлы, требуя выкуп. Но еще он “научился” распространяться по локальной сети и использовать существующие уязвимости. Подробнее можно почитать в статье компании Майкрософт, где рассматривается случай с распространением через обновление бухгалтерского ПО MeDoc.

Как же спасти свой ПК от заражения подобным вирусом? Можно ли защитить MBR от перезаписи или запретить удаленный запуск приложений на ПК под управлением ОС Windows? Короткий ответ — можно.

Защита MBR

MBRFilter – это драйвер от компании Cisco, который запрещает изменение загрузчика программами если Виндовс работает в обычном, а не безопасном режиме (Safe Mode).

Для установки скачайте драйвер в зависимости от разрядности вашей ОС, распакуйте архив, кликните правой клавишей на файле MBRFilter.inf (файл меньшего размера) и выберите в меню пункт “Установить”. Виндовс потребует перезагрузки, перезагрузите ОС и все готово. От вирусов в целом вас это не спасет, но спасти данные от злобных шифровальщиков – вполне поможет.

Запрет удаленного запуска программ

Здесь вам придется воспользоваться командной строкой. Запустите cmd с правами администратора:

  • Нажмите значок поиска на Панели задач или кнопку Пуск
  • В строке поиска напечатайте cmd
  • В результатах поиска нажмите правую кнопку мыши на классическом приложении Командная строка
  • В открывшемся меню выберите пункт Запустить от имени администратора

Дальше наберите команду:

sc.exe sdshow scmanager

Вам выведется строчка из кучи разных непонятных букв, что-то типа D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU) и т.д. Это формат записи флагов и прав на файлы – SDDL. Вам нужно сохранить эту строчку! Чтобы ее скопировать: выделите весь текст, кликните правой клавишей, текст будет в буфере обмена. Далее вставьте этот текст в ваш любимый текстовый редактор. Т.к. строчка длинная, в командной оболочке она была разбита на две или три строки, в текстовом редакторе отредактируйте ее так, чтобы это была одна строчка, без переводов строки.

Как вариант, можете выполнить следующий код:

sc.exe sdshow scmanager > c:\scm.backup.txt

Т.о. строчка сохранится в файл c:\scm.backup.txt

Далее сделайте копию файла, в строчку после D: добавьте следующее:

(D;;GA;;;NU)

Чтобы начало строчки у вас выглядело так:

D:(D;;GA;;;NU)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)

Далее всю длинную строчку вставьте после команды:

sc.exe sdset scmanager D:(D;;GA;;;NU)(A;;CC;;;AU)(A;;C.....(все остальные буквы)

И проверьте правильность (если не выдало ошибок):

sc.exe sdshow scmanager

Начало строки может выглядеть вот так:

D:(D;;KA;;;NU)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)

Это нормально, не переживайте. Главное, чтобы все остальные буквы совпадали.

Теперь хакер или вирус не сможет при помощи psexec запустить вирус или программу на вашем ПК под управлением ОС Виндовс.

Источник

image_pdfimage_print

yum установка пакета из определенного репозитория

Часто необходимо не просто устанавливать пакеты, а устанавливать их из указанного репозитория, например php и его модули, для этого смотрим:

# ls -l /etc/yum.repo.d/

Далее выполняем:

# yum --disablerepo=* --enablerepo=remi,remi-test install php-mbstring

Первый параметр — отключить все репозитории (независимо от того, что у них указано в настройках), второй — включить необходимые (можно перечислять через запятую), ну и сама команда установки — install <package-name>.

Точно можно эти же параметры можно передавать и при обновлении пакетов:

# yum --disablerepo=* --enablerepo=remi,remi-test update php-mbstring
# yum --disablerepo=* --enablerepo=remi,remi-test upgrade
image_pdfimage_print

yum удалить репозиторий

Например был установлен по ошибке репозиторий ius-release

# yum install https://centos7.iuscommunity.org/ius-release.rpm

который нужно удалить.

Сперва смотрим какие репозитории установлены в системе:

# ls -l /etc/yum.repos.d/
итого 124
-rw-r--r-- 1 root root 1664 Ноя 23 2018 CentOS-Base.repo
-rw-r--r-- 1 root root 1309 Ноя 23 2018 CentOS-CR.repo
-rw-r--r-- 1 root root 649 Ноя 23 2018 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 314 Ноя 23 2018 CentOS-fasttrack.repo
-rw-r--r-- 1 root root 630 Ноя 23 2018 CentOS-Media.repo
-rw-r--r-- 1 root root 1331 Ноя 23 2018 CentOS-Sources.repo
-rw-r--r-- 1 root root 5701 Ноя 23 2018 CentOS-Vault.repo
-rw-r--r-- 1 root root 951 Окт 2 2017 epel.repo
-rw-r--r-- 1 root root 1050 Окт 2 2017 epel-testing.repo
-rw-r--r-- 1 root root 669 Май 1 19:00 ius-archive.repo
-rw-r--r-- 1 root root 591 Май 1 19:00 ius.repo
-rw-r--r-- 1 root root 669 Май 1 19:00 ius-testing.repo
-rw-r--r-- 1 root root 269 Авг 11 2018 ownCloud.repo
-rw-r--r-- 1 root root 446 Мар 8 09:34 remi-glpi91.repo
-rw-r--r-- 1 root root 446 Мар 8 09:34 remi-glpi92.repo
-rw-r--r-- 1 root root 446 Мар 8 09:34 remi-glpi93.repo
-rw-r--r-- 1 root root 446 Мар 8 09:34 remi-glpi94.repo
-rw-r--r-- 1 root root 855 Мар 8 09:34 remi-modular.repo
-rw-r--r-- 1 root root 456 Мар 8 09:34 remi-php54.repo
-rw-r--r-- 1 root root 1314 Мар 8 09:34 remi-php70.repo
-rw-r--r-- 1 root root 1314 Мар 8 09:34 remi-php71.repo
-rw-r--r-- 1 root root 1314 Мар 8 09:34 remi-php72.repo
-rw-r--r-- 1 root root 1314 Мар 8 09:34 remi-php73.repo
-rw-r--r-- 1 root root 2605 Мар 8 09:34 remi.repo
-rw-r--r-- 1 root root 750 Мар 8 09:34 remi-safe.repo
-rw-r--r-- 1 root root 167 Фев 20 12:42 rspamd.repo
-rw-r--r-- 1 root root 963 Окт 8 2014 webtatic-archive.repo
-rw-r--r-- 1 root root 865 Окт 8 2014 webtatic.repo
-rw-r--r-- 1 root root 963 Окт 8 2014 webtatic-testing.repo
-rw-r--r-- 1 root root 410 Авг 28 2017 zabbix.repo

Видно, что к нашему репозиторию относится три файла, удаляем их:

# cd /etc/yum.repos.d && rm ius*

Теперь удаляем записи из системы навсегда:

# yum remove ius-release

Репозитории CentOS 7

image_pdfimage_print

Postfix: смена адреса From для писем root@hostname

При получении писем с сервера, различных логов и прочей служебной информации, в поле From: указывался адрес:

Charlie Root <root@hostname.domain.org.ua>

Что бы изменить его — выполним следующие действия.

В файл конфигурации сервера Postfix добавляем строку:

sender_canonical_maps = hash:/usr/local/etc/postfix/generic

Теперь создаём файл /usr/local/etc/postfix/generic и в него добавляем строку:

root@hostname.new_mydomain.org.ua mainaddress@mydomain.kiev.ua

Где mainaddress@mydomain.kiev.ua — адрес, который должен устанавливаться в поле From:.

Теперь выполняем:

# postmap /usr/local/etc/postfix/generic

И даём команду серверу Postfix перечитать конфигурационный файл:

# service postfix reload

Теперь, в письмах с сервера в поле From: будет указываться:

Jun 22 11:31:11 mail postfix/qmgr[81428]: 2A78E3010E0E: from=<info@tst-amo.net.ua>, size=1315, nrcpt=1 (queue active)

И напоследок — пример простого скрипта для отправки почты с сервера, из-за которого и возникла необходимость изменить поле From:, т.к. мобильный оператор не принимал письма с обратным адресом типа root@hostname.domain.org.ua:

#!/usr/local/bin/bash
# Script to send a email

# Тема письма
SUBJECT=»Subject here«

# Адрес получателя
EMAIL=»recipient@address.here«

#Файл, который будет содержать текст,
#который позже будет вставлен в тело письма
EMAILMESSAGE=»/tmp/message.txt»

#Текст, который должен быть добавлен в письмо.
#Первая строка добавляется с помощью >
#Последующие — с помощью >>
echo «Message text here» > $EMAILMESSAGE

#Отправка письма с помощью /bin/mail
mail -s «$SUBJECT» «$EMAIL» < $EMAILMESSAGE

Postfix: смена адреса From для писем root@hostname

image_pdfimage_print

Postfix меняем пользователя и домен отправителя

Как правило сразу после установки posstfix отправляет письма используя домен, который возвращает команда

uname -n

При этом отправителем является системный пользователь от которого выполняется скрипт или идет отправка.

Пример может быть user@localhost.localdomain.

Для того что бы изменить домен, который будет значиться в отправленных письмах, и имя пользователя, от которого осуществляется отправка, нужно подредактировать файл /etc/postfix/main.cf следующей строкой:

smtp_generic_maps = hash:/etc/postfix/generic

После этого редактируем файл /etc/postfix/generic для пользователя user

user@localhost.localdomain info@tst-amo.net.ua

или для домена и пользователя:

user@localhost.localdomain info@example.com

Дальше в консоли выполняем:

postmap /etc/postfix/generic

И перезапускаем postfix, чтобы измменения вступили в силу:

service postfix reload

Отправляем письмо и смотрим логи

Jun 22 11:31:11 mail postfix/qmgr[81428]: 2A78E3010E0E: from=<info@tst-amo.net.ua>, size=1315, nrcpt=1 (queue active)

 

image_pdfimage_print

Exel – получить человеческое время из Unix TimeStamp

Пускай есть таблица вида:

  A             B
1560924173   19.06.2019 9:02:53

конвертировать время в время по GMT можно по формуле:

=UnixTime / 86400 + 25569

или

=(A2/60/60/24)+ ДАТА(1970;1;1)

если нужно учитывать местное время/часовой пояс то:

=UnixTime / 86400 + 25569 + 3/24

или

=(A1/60/60/24)+ ДАТА(1970;1;1)+(3/24)

где 3  время которое нужно добавить к GMT, что бы получить местное время (часовой пояс).

 

Конвертор времени online

image_pdfimage_print

ulog-acctd – подсчет и детализация трафика

Ищем по RPM-пакетам на этом сайте: http://rpm.pbone.net/index.php3?stat=3&search=ulog-acctd&srodzaj=3 и переходим по ссылке напротив нашей версии ОС (у меня CentOS 6.9 i386, но подошла на 6.5)

# wget ftp://ftp.pbone.net/mirror/rnd.rajven.net/centos/7.0.1406/os/x86_64/ulog-acctd-0.4.3-7cnt7.x86_64.rpm
# rpm -Uhv ulog-acctd-0.4.3-7cnt7.x86_64.rpm

Конфигурационный файл чрезвычайно прост, там нужно указать multicast group (указанный в правиле iptables), формат лога. Он находится в /etc, немного поправим его:

# vi /etc/ulog-acctd.conf

multicast groups=4

accounting file=/var/log/ulog-acctd/account.log
dump file=/var/log/ulog-acctd/dump
debug file=/var/log/ulog-acctd/debug.log

Все остальное по умолчанию.

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

# ULOG-ACCTD
iptables -A INPUT -j ULOG --ulog-nlgroup 4 --ulog-cprange 48 --ulog-qthreshold 10 --ulog-prefix "INPUT"
iptables -A FORWARD -j ULOG --ulog-nlgroup 4 --ulog-cprange 48 --ulog-qthreshold 10 --ulog-prefix "FORWARD"
iptables -A OUTPUT -o $if_wan -j ULOG --ulog-nlgroup 4 --ulog-cprange 48 --ulog-qthreshold 10 --ulog-prefix "OUTPUT"

Здесь мы добавляем в цепочку FORWAD (пакеты проходящие через маршуризатор) отправлять все пакеты в target ULOG, задать им префикс ‘FORWARD’ (чтобы можно было различать статистику полученную с разных правил) –ulog-nlgroup 4 – номер multicast group, в которую будут посылаться заголовки пакетов.

tst.tst-amo.net.ua 1561299321 17 185.25.183.91 27142 192.168.0.10 54286 1 174 "enp2s0" "enp3s1" "FORWARD"
tst.tst-amo.net.ua 1561299314 17 185.25.183.91 27088 192.168.0.10 54286 1 173 "enp2s0" "enp3s1" "FORWARD"
tst.tst-amo.net.ua 1561299314 17 185.25.183.93 27174 192.168.0.10 54286 1 174 "enp2s0" "enp3s1" "FORWARD"
tst.tst-amo.net.ua 1561299325 17 185.25.181.77 27088 192.168.0.10 54286 1 181 "enp2s0" "enp3s1" "FORWARD"
tst.tst-amo.net.ua 1561299316 17 185.25.183.91 27119 192.168.0.10 54286 1 174 "enp2s0" "enp3s1" "FORWARD"
tst.tst-amo.net.ua 1561299318 17 185.25.183.93 27206 192.168.0.10 54286 1 176 "enp2s0" "enp3s1" "FORWARD"
tst.tst-amo.net.ua 1561299320 17 185.25.183.93 27085 192.168.0.10 54286 1 175 "enp2s0" "enp3s1" "FORWARD"

Ulog-acctd должен быть настроен на прослушивание этой группы. –ulog-cprange 48 – количество байт из пакета передаваемых в userspace. При этом может возникнуть ситуация, когда при наличии в пакете большого количества флагов заголовок может ‘не влезть’, тогда пакет будет не посчитан. В syslog будет выдано сообщение “Short IP header. Increase copy range to RANGE” по которому можно будет обнаружить и исправить эту ситуацию. Если же cprange настолько мало, что даже не может вместить ip адрес, то в лог дополнительно будет помещено сообщение ‘copy range is too short to even capture IP headers. ALL IP PACKETS WILL BE DROPPED!’ –ulog-qthreshold 10 сколько пакетов должно собрать ядро прежде чем передать данные о них в user-space.

Если прописать правило в цепочку INPUT, то мы получим статистику по входящим в роутер пакетам (адрес назначения которых – роутер)

tst.tst-amo.net.ua 1561299331 17 192.168.1.1 138 192.168.1.255 138 1 229 "enp2s0" "-" "INPUT"
tst.tst-amo.net.ua 1561299327 17 192.168.0.10 27005 255.255.255.255 27015 14 854 "enp3s1" "-" "INPUT"

Запускаем:

# systemctl start ulog-acctd

Статистику смотрим в

/var/log/ulog-acctd

Столбцы согласно описанию идут в таком порядке:

# Accounting format, specified with a format string with similar
# syntax to printf(3)
#
# %h hostname
# %t timestamp
# %p protocol
# %s source IP
# %S source port
# %d destination IP
# %D destination port
# %P packets
# %b bytes
# %i incoming interface
# %o outgoing interface
# %f prefix
#
# \t tab
# \n newline
# \\ literal \
# \" literal "
# \% literal %
# %% literal %

Данные можно втянуть, например, в Exel:

=UnixTime / 86400 + 25569 - 4 / 24

Для ежедневной ротации логов проверить присутсвие файла /etc/logrotate.d/ulog-acctd и прав 644 или 444:

# cat /etc/logrotate.d/ulog-acctd
/var/log/ulog-acctd/account.log /var/log/ulog-acctd/debug.log {
    weekly
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
    sharedscripts
    prerotate
        if [ -e /var/run/ulog-acctd.pid ]; then kill -TSTP `cat /var/run/ulog-acctd.pid`; fi
    endscript
    postrotate
         if [ -e /var/run/ulog-acctd.pid ]; then kill -CONT `cat /var/run/ulog-acctd.pid`; fi
    endscript
}

 

https://www.opennet.ru/base/net/ulog_traf.txt.html

Простой учёт трафика на Linux средствами iptables + ulog-acctd

https://www.e-reading.club/chapter.php/79424/70/Andreasson_-_Iptables_Tutorial_1.1.19.html

https://it.wikireading.ru/14371

image_pdfimage_print

OpenVPN – почему тормозит сервер?

Проведем простую аналогию. Нам нужно перевезти некий груз из пункта A в пункты Б и В, в пункт Б ведет хорошая автомагистраль со средней скоростью 90 км/ч, а в пункт B грунтовка, разогнаться на которой можно до 45 км/ч. Понятно, что, используя один и тот-же транспорт за одно и тоже время в пункт Б удастся доставить в два раза больше груза, чем в пункт В.

В сетях все происходит аналогично. Исторически сложилось так, что размер буфера OpenVPN составляет 64 КБ, в Linux системах это значение устанавливается принудительно, в Windows вроде бы как отдается на откуп ОС, но по факту чаще всего мы имеем все те же 64 КБ. В этом несложно убедиться заглянув в лог:

Socket Buffers: R=[65536->65536] S=[65536->65536]

Теперь вооружимся калькулятором и посчитаем. Объем данных отправляемых или принимаемых за одну передачу не может превышать объем буфера, а количество отправок в единицу времени ограничено скоростью прохождения пакетов (пингом). Таким образом при пинге в 50 мс мы можем осуществить 20 передач в секунду, а при 200 мс только пять. Отправить за один раз мы можем 64 КБ, считаем, при 50 мс это будет 1280 КБ/сек (1,25 МБ/с) или 10 Мбит/с. Результат довольно неплохой и при общей скорости канала филиалов в 15-20 Мбит/с данное ограничение легко списать на служебный трафик, шифрование и т.п.

При пинге в 200 мс все гораздо более печально, мы упремся в потолок 320 КБ/с или 2,5 Мбит/с. Таким образом, путем несложных математических вычислений мы ответили на главный вопрос: “Почему тормозит OpenVPN”. Как видим, ни шифрование, ни “накладные расходы” тут не причем, проблема в физических ограничениях канала.

Что же делать? Ответ прост – увеличивать размер буферов. Сделать это просто, откройте конфигурационный файл сервера и добавьте туда строки:

sndbuf 524288
rcvbuf 524288

Это установит объем буферов в размере 512 КБ и позволит достичь скоростей при 50 мс – 80 Мбит/с, а при 200 мс – 20 Мбит/с.

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

push "sndbuf 524288"
push "rcvbuf 524288"

Чтобы убедиться, что настройки работают заглянем в лог на клиенте, там мы должны обнаружить примерно следующее:

Socket Buffers: R=[65536->524288] S=[65536->524288]

Также в ряде источников выражается мнение, что данная проблема (размеров буфера) актуальна только для Linux систем, а в Windows все должно работать быстро, однако уже у другого клиента мы обнаружили что в одном из филиалов, при проводном подключении, Windows Server 2008 R2 устанавливал размеры буферов в 8 КБ:

Socket Buffers: R=[8192->8192] S=[8192->8192]

А это даже при хорошем пинге в 50 мс не более 1,25 МБит/с, при скорости канала в десятки раз превышающем это значение.

В нашем же случае увеличение буфера до 512 КБ позволило достичь скоростей 11-12 Мбит/с, что вполне соответствует реальной скорости канала.

https://interface31.ru/tech_it/2017/04/pochemu-tormozit-openvpn-razmer-buferov-priema-i-otpravki.html

image_pdfimage_print

Ограничение доступа/блокировка определенной страны

Две недели подрят брутили почтовый сервер на предмет подбора паролей от dovecot. Так как стоял fail2ban я не сильно заморачивался, но когда блокированных IP перевалило за 50 тыс. я озаботился. Просмотрев внимательно логи я выяснил, что 99% IP принадлежат Малайзии. Погуглив я нашел сервис который предоставляет базы сетей по странам. Пишем скрипт для выборки малазийских сетей:

# cat grep_ip.sh
#!/bin/bash
# парсинг IP из скачанного файла для дальнейшего добавления в iptables/ipfw
# дописать проверку скачанного файла
# если тот же - не работать с ним,
# если разные - старый удалить!
# дописать rm и не забить очистку правил файервола перед добавлением
user=$(who | awk '{print $1}' | uniq)
cd /home/$user/GEOIP/tmp
rm GeoLite2-Country-CSV.zip && sleep 2

wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip
unzip GeoLite2-Country-CSV.zip -d .

ls -l | grep GeoLite2-Country-CSV_ | sed 's/_/ /g' | awk '{print $10}' > tmp.txt
d=$(<tmp.txt)
cd GeoLite2-Country-CSV_$d

# 733045 - id Малайзии, его смотрим в файлах GeoLite2-Country-Locations-*.csv
cat GeoLite2-Country-Blocks-IPv4.csv | grep "733045" > GEOIP_MY.txt
# Копируем результат, на всякий случай, и работаем с копией
cp GEOIP_MY.txt GEOIP_MY2.txt

cat GEOIP_MY2.txt | sed 's/,/ /g' > test
cat test | awk '{print $1}' > GEOIP_MY_end.txt

# Эта строка просто посмотреть результат
#cat GEOIP_MY_end.txt | wc -l

rm ../GeoLite2-Country-CSV.zip

Дописываем правило в firewall.script (там у меня FreeBSD):

${ipfw} add 1 deny log all from table\(4\) to me

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

Добавляем в ipfw скриптом:

# cat add_ip_to_ipfw.sh 

#!/bin/sh
# IPFW table 4
#user=$(who | awk '{print $1}' | uniq);
user=`who | awk '{print $1}' | uniq`
cat /home/$user/GEOIP_MY_end.txt | { while read ip;
do
/sbin/ipfw table 4 add $ip;
done;
}

Радуемся тишине в логах.

Продолжение ))

https://dev.maxmind.com/geoip/geoip2/geolite2/
http://qaru.site/questions/570060/loading-variables-from-a-text-file-into-bash-script

image_pdfimage_print

LVM – создание зеркала

С помощью LVM мы может создать зеркальный том — данные, которые мы будем на нем сохранять, будут отправляться на 2 диска. Таким образом, если один из дисков выходит из строя, мы не потеряем свои данные.

Зеркалирование томов выполняется из группы, где есть, минимум, 2 диска.

1. Сначала инициализируем диски:

# pvcreate /dev/sd{d,e}

2. Создаем группу:

# vgcreate vg02 /dev/sd{d,e}

3. Создаем зеркальный том:

# lvcreate -L200 -m1 -n lv-mir vg02
# lsblk
sdd                     8:16   0    1G  0 disk
vg02-lv--mir_rmeta_0  253:2    0    4M  0 lvm
  vg02-lv--mir        253:6    0  200M  0 lvm
vg02-lv--mir_rimage_0 253:3    0  200M  0 lvm
  vg02-lv--mir        253:6    0  200M  0 lvm

sde                     8:32   0    1G  0 disk
vg02-lv--mir_rmeta_1  253:4    0    4M  0 lvm
  vg02-lv--mir        253:6    0  200M  0 lvm
vg02-lv--mir_rimage_1 253:5    0  200M  0 lvm
  vg02-lv--mir        253:6    0  200M  0 lvm
image_pdfimage_print