Fail2ban – блокировка IP с занесением в черный список

По умолчанию Fail2ban блокирует IP-адреса, которые попадают под условия бана, на время, заданное в файле jail.conf. По истечение данного времени IP-адрес разблокируется, и с него вновь могут начать поступать запросы.

Однако можно добиться того, чтобы блокируемый адрес заносился в «черный список», и всегда блокировался.

Для этого создадим файл «черного списка», куда впоследствии будут заносится IP-адреса:

touch /etc/fail2ban/ip.blacklist

Затем в файле /etc/fail2ban/action.d/iptables-multiport.conf обновим директивы actionban и actionstart:

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP
            echo <ip> >> /etc/fail2ban/ip.blacklist
actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
              cat /etc/fail2ban/ip.blacklist | while read IP; do iptables -I fail2ban-<name> 1 -s $IP -j DROP; done

Перезапустим сервис:

service fail2ban restart

Материал по теме: ссылка

Google информирует об обновлении популярных CMS

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

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

<meta name="generator" content="WordPress 3.3.1" />

Google информирует об обновлении популярных CMS

[Debian] Блокировка IP-адреса через iptables

Последнюю неделю сервер подвергается многочисленной отправки запросов с конкретных IP-адресов (считай, DDoS-ят).

Решил поставить форк ddos-deflate, который помимо всего прочего умеет еще слать уведомления на почту в случае увеличения числа запросов с одного IP. В итоге картина выглядит следующим образом:

194.9.71.251 with 244 connections
194.9.71.251 with 204 connections
82.220.38.35 with 442 connections
194.9.71.251 with 211 connections
194.9.71.251 with 248 connections
37.187.48.220 with 359 connections
37.220.15.226 with 268 connections
194.9.71.251 with 185 connections
37.204.136.52 with 161 connections
87.98.227.4 with 851 connections
186.2.166.72 with 180 connections
37.113.57.152 with 252 connections
5.45.119.120 with 164 connections

Видно, что есть IP, который используется наибольшее число раз. Забаним:

iptables -A INPUT -s 194.9.71.251 -j REJECT

Проверим, что указанное правило применилось:

iptables -L INPUT -n -v --line-numbers

Чтобы разблокировать указанный IP, нужно выполнить команду:

iptables -D INPUT 1, где 1 — это номер строки правила, которое нужно удалить

Увольняясь, не забудь сбросить пароль от учетной записи

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

Начальник наш, к большому сожалению, не удосужился попросить его уйти по нормальному, как того обычно требует регламент для таких ситуаций. Но регламента у нас, конечно же, нет, а в голове все, вроде как, не удержишь. Сотрудник ушел, а свой пароль от учетных записей двух ОС, которые стояли на его компьютере (Windows и Ubuntu), он не сбросил. В связи с тем, что наши рабочие компьютеры не состоят в домене, и ни кем не администрируются, теперь вроде бы как сложилась ситуация, что получить доступ к его компьютеру мы не можем.

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

Как получить доступ к Windows, не зная пароль от учетной записи администратора? Решением этой проблемы я займусь уже завтра, когда начнется новая трудовая неделя.

А вот руководству я бы порекомендовал быть более ответственным к вопросам подобного рода. К примеру, бывший сотрудник до сих пор имеет доступ к репозиториям наших проектов на GitHub.

Когда мне приходилось покидать компанию VIACode, то прежде, чем меня рассчитать и выплатить причитающиеся жалование, необходимо было пройтись по разным кабинетам с обходным листом (мол, что они ко мне претензий не имеют). Пришлось посетить и сисадминов, которые отметили в этом листке — «Учетная запись заблокирована», «Доступ к ресурсам закрыт», и пр. Считаю, что это более правильный подход.

[IPB] Про то, как обходят проверку лицензии (нуленые версии)

Решил узнать, как ломают популярный форумный движок Invision Power Board. Для этого исключительно в ознакомительных целях я загрузил последнюю релизную версию 3.4.5 (Retail, ENG) и точно такую же версию, только нуленую и русифицированную от IPBMafia.ru.

Для того, чтобы найти изменения, сделанные при нулении, необходим инструмент для сравнения изменений файлов. То, что было у меня под рукой — это Git. Первым коммитом пошел IPB 3.4.5 (Retail, ENG), вторым — IPB 3.4.5 (Nulled, RUS).

И вот какие изменения предстали:

admin\applications\core\extensions\enhancements\ipscdn.php

-		$ping	= $file-&gt;getFileContents( "http://license.invisionpower.com/?a=cdn&amp;key=" . ipsRegistry::$settings['ipb_reg_number'] );
+		$return = NULL;

admin\applications\core\extensions\enhancements\viglink.php

-		$return = $cfm-&gt;getFileContents( "http://license.invisionpower.com/viglink/?subId=" . urlencode( $subId ) );
+		$return = NULL;

\admin\applications\core\modules_admin\tools\licensekey.php

-	{
-		/* If we don't have a key, an empty array is fine */
-		if ( !$this-&gt;settings['ipb_reg_number'] )
-		{
-			$this-&gt;cache-&gt;setCache( 'licenseData', array(), array( 'array' =&gt; 1 ) );
-			return;
-		}
-	
-		/* Query the api */
-		$classToLoad = IPSLib::loadLibrary( IPS_KERNEL_PATH . 'classFileManagement.php', 'classFileManagement' );
-		$classFileManagement = new $classToLoad();
-		$response = $classFileManagement-&gt;getFileContents( "http://license.invisionpower.com/?a=info&amp;key={$this-&gt;settings['ipb_reg_number']}&amp;url={$this-&gt;settings['board_url']}" );
-
-		/* Is it valid? */
-		if ( $response == 'NO_KEY' )
-		{			
-			IPSLib::updateSettings( array( 'ipb_reg_number' =&gt; '' ) );
-			$this-&gt;cache-&gt;setCache( 'licenseData', array(), array( 'array' =&gt; 1 ) );
-			return;
-		}
-					
+	{	
 		/* Save */
-		$licenseData = json_decode( $response, true );
+		$licenseData = darkLAE::getLicenseData();
 		$licenseData['_cached_date']	= time();
 		$licenseData['key']['_expires']	= $licenseData['key']['_expires'] ? $licenseData['key']['_expires'] : 9999999999;
 		$licenseData['key']['expires']	= $licenseData['key']['expires'] ? $licenseData['key']['expires'] : 9999999999;
 		$this-&gt;cache-&gt;setCache( 'licenseData', $licenseData, array( 'array' =&gt; 1 ) );
-		
-		/* Copyright Removal? */
-		if ( $licenseData['cr'] )
-		{
-			IPSLib::updateSettings( array( 'ipb_copy_number' =&gt; $licenseData['cr'], 'ips_cp_purchase' =&gt; 1 ) );
-		}
-		elseif ( $this-&gt;settings['ips_cp_purchase'] )
-		{
-			IPSLib::updateSettings( array( 'ips_cp_purchase' =&gt; 0 ) );
-		}

\admin\index.php

+require_once( IPS_ROOT_PATH . 'sources/base/darkLAE.php' );/*noLibHook*/

\admin\install\index.php

+require_once( IPS_ROOT_PATH . 'sources/base/darkLAE.php' );/*noLibHook*/

\admin\upgrade\index.php

+require_once( IPS_ROOT_PATH . 'sources/base/darkLAE.php' );/*noLibHook*/

\index.php

+require_once( IPS_ROOT_PATH . 'sources/base/darkLAE.php' );/*noLibHook*/

Файл darkLAE.php содержит класс-заглушку, которая как раз и отвечает за то, чтобы движок думал, что он активирован с помощью легального ключа. Содержимое этого файла, по понятным причинам, я выкладывать не буду, а кому надо, тот и так найдет.

Я в свою очередь в предвкушении линейки IPB 4.x. Говорят, там шаблоны будут переписаны с учетом HTML5 🙂

[E-NUM] Обход пин-кода с доступом к QR-Code Scanner

Нашел интересную «особенность» в приложении E-NUM (2.2.6) для Android’а.

Суть в том, что если в настройках интерфейса приложения включить опцию «Fast QR-Code Scan«, то после запуска приложения можно получить доступ QR-Code Scanner даже не вводя пин-код приложения, если он был установлен ранее. Тем не менее, дыры в безопасности нет — сканер хоть и считывает QR-код, но перед тем, как показать ответ, открывает окно ввода пин-кода.

Теперь о том, как получить доступ к QR-Code Scanner не вводя пин-код для разблокировки приложения. Достаточно нажать на аппаратную кнопку включения фотокамеры (если такая есть на устройстве), после чего выйти из режима фотографирования — и вот перед вами уже экран QR-Code Scanner!

Бан IP-адреса, используя iptables

iptables -N ban
iptables -A INPUT -j ban
iptables -A ban -s 00.00.00.00 -j DROP

Про MD5, радужные таблицы и то, как узнать пароль

Если каким-то образом вам удалось завладеть хэшем пароля, который был создан с помощью алгоритма MD5, то вы можете подобрать пароль с помощью специальных таблиц, которые содержат в себе сопоставления «пароль — MD5 хэш». Такие таблицы называются радужными. Существуют онлайн сервисы, которые позволяют ввести хэш, и в случаи найденного совпадения, выдать исходный пароль. Такие таблицы можно загрузить к себе на компьюетр, после чего с помощью программы «rcracki_mt» (или другой ей подобной) попытаться найти совпадение хэша с табличными значениями.

Для эскперимента я скачал таблицы «md5_mixalpha-numeric-all-space#1-6», которые позволяют подобрать пароль длиной 1-6 символов, состоящий из любых символов, включая специальные (abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;»‘<>,.?/). Размер всех таблиц составил 4,58 ГБ.

Затем я воспользовался выше описанной программой (текущая стабильная версия — 0.6.6), создав крохотный bat-файл:

:: Здесь лежат радужные таблицы
set RainbowTables=C:\RainbowTables\RainbowTables
:: Здесь лежат файлы hash.txt (должен содержать хэши, к которым нужно подобрать праоль) и pass.txt (файл, куда будут записываться найденные пароли)
set Path=C:\RainbowTables\
:: Путь до программы
set rcracki_mt=C:\RainbowTables\rcracki_mt_0.6\rcracki_mt.exe

:: Команда запуска программы (подробное описание параметров программы можно посмотреть в файле README.txt)
%rcracki_mt% -l %Path%\hash.txt %RainbowTables% -t 2 -o %Path%\pass.txt

В файл hash.txt я поместил всего одну хэш-запись от известного мне пароля. Я был поражен быстротой поиска пароля по известному хэшу с помощью радужных таблиц — не прошло и 20 секунд, как программа вывела мне мой хэшированный пароль.

Результат нахождения пароля, используя радужные таблицы

Используйте как минимум две учетки в Windows

Для повышения уровня безопасности в ОС Windows, настоятельно рекомендуется не сидеть под учетной записью администратора. Как известно, при установки ОС создается одна учетка, которая по-умолчанию обладает привилегиями администратора. Данный фактор открывает потенциальную возможность нехорошим программам выполнять различные манипуляции, т.к. для совершения каких-либо системных действий необходимы права админа, а т.к. вы работаете под ним, то и запрашивать данные права (при условии, если контроль учетных записей отключен) этим программам не надо.

Поэтому берем, создаем вторую учетную запись, называем ее что-то вроде «Admin», задаем пароль, после чего для пущей безопасности включаем контроль учетных записей (да, будет частенько надоедать своими всплывающими окнами, но зато будете знать, какая программа что хочет сделать). После чего можно перезагрузиться, и войти под своей привычной учеткой. Если что-то проделывать что-то важное с системой, то можно сразу переключиться на учетку админа, проделать необходимые действия, и вернуться опять на учетку пользователя.

Использование двух учетных записей (обычной и с правами администратора) избавляет, как пишут, от использования антивирусных средств защиты. Хотя, тут вопрос, конечно, спорный… Лично я не буду рисковать и полностью полагаться на то, что ОС сможет гарантированно запретить вирусу доступ к системе. Тем более вирусы с каждым днем становятся все умнее и умнее, а брешей в безопасности Windows больше и больше.

Кстати, для учетной записи пользователя лучше тоже задать пароль. К примеру, к компьютеру будет невозможно подключиться через удаленный рабочий стол до тех пор, пока у учетной записи, к которой подключаются, не будет установлен пароль.

Восемь видео-лекций от Яндекса в рамках КИТ

В разделе «Обучение» компания Яндекс выложила восемь интересных видео-лекций, которые проводились в рамках КИТ (курсы информационных технологий):

  • операционные системы (115 минут)
  • архитектура ЭВМ (99 минут)
  • устройство GNU/Linux (109 минут)
  • системы хранения данных (120 минут)
  • файловые системы (103 минуты)
  • сети и протоколы (108 минут)
  • виртуализация  (118 минут)
  • безопасность (116 минут)