“TARPIT” имеет какие-либо известные уязвимости или оборотные стороны?

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

Это обеспечивается как Netfilter дополнение и может использоваться точно так же, как любая другая цель IPTables.

Существуют ли известные оборотные стороны или уязвимости в этом подходе контакта с (D) DoS?

8
задан 9 July 2014 в 23:33
2 ответа

Раньше я думал, что это хорошая идея. Но теперь, к сожалению, я знаю, что это очень плохая идея.

Вы когда-нибудь запускали приложение для тестирования http-бизнеса, как apache bench. На одной машине Вы можете настроить его на создание сотен соединений в секунду с целевым сервером. Запустите несколько из этих клиентов и подключитесь к своему серверу с включенной функцией tarpitting, и я думаю, что вы увидите проблему.

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

Ваш сервер будет быстро потреблять все доступные ресурсы (или файловые дескрипторы), так что больше никаких соединений не будет разрешено. Это хуже, чем просто закрыть соединение. Лучше бросить нарушителя на некоторое время, чем пытаться связать его ресурсы. Именно этого и добиваются такие скрипты, как fail2ban

Кроме того, вы никогда не хотите, чтобы ваши обычные пользователи застряли в брезенте. По крайней мере, для интерактивных сессий. Как вы решаете, кому позволено, а кому нет? Для некоторых протоколов вы не можете. Например, HTTP-трафик. Вы должны предполагать, что клиент в порядке, пока не получите от него активность, говорящую об обратном. Тогда вы можете решить относиться к нему как к плохому и в следующий раз он попадет в брезент. Что, казалось бы, нормально, за исключением того, что многие из этих атак могут исходить от динамических adsl пользователей и т.д., которые просто случайно заразились последним червьим вирусом.

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

6
ответ дан 2 December 2019 в 22:53

Резюме

Запуск tarpit на сервере общего назначения сопряжен с риском. Если вы знаете, какие риски, вы можете уменьшить их, в зависимости от вашего уровня комфорта.

  • Вы должны убедиться, что вы случайно не DOS ваш сервер с трафиком tarpit
  • Вы должны убедиться, что вы заполните свое состояние таблицы с информацией о соединении с тарпедом
  • Вы должны убедиться, что не наводняете свои журналы информацией о соединении с тарпитом
  • Вам необходимо убедиться, что длинный черный список не влияет на производительность
  • Вы должны убедиться, что ваш черный список автоматически expires hosts
  • Вам нужна возможность заносить хосты в белый список (постоянно или с ограничением по времени)

К счастью, это все возможно и довольно легко, используя обычные iptables и ipset.

Ограничение использования ресурсов TARPIT

Вы Можно использовать iptables, чтобы ограничить количество хостов, на которых вы выполняете TARPIT, без использования слишком большого количества системных ресурсов. См. Пример ниже. Сюда входят пропускная способность сети, системная память, записи о стабильном состоянии и другие системные ресурсы. Получите слишком много запутанных связей, начните игнорировать их. Если вы организуете свой набор правил в правильном порядке, ни одно из подключенных с задержкой соединений не попадет в ваши таблицы состояний. Также убедитесь, что вы не ведете журнал, если только вы не ведете статистику в реальном времени с помощью чего-то вроде настраиваемого ulog - журналы tarpit Direct iptables могут быстро заполнить диск.

По моему опыту, мои текущие хосты могут легко содержать 200+ хостов в тарпите, с незначительным влиянием на использование памяти, трафика или использование процессора. Вероятно, я мог бы продвинуть это дальше, но пока в среднем я захватываю только около 130 хостов в любой момент времени.

Причина, по которой я установил ограничения, была указана в другом предложении, потому что мой первый хост tarpit был затоплен .Это был тривиальный обходной путь. С тех пор у меня не было проблем.

Использование ipset для эффективных черных списков

ipset - отличный маленький инструмент, который позволяет вам создавать группы объектов для использования в правилах iptables. Более того, поскольку он может содержать объекты в хэш-таблице, чем больше ipset, тем быстрее он сравнивается с эквивалентным линейным набором правил iptables.

В дополнение к этому списки могут включать счетчики (пакеты / байтов), тайм-аут и исключение для каждого объекта.

Вы можете добавлять / удалять из ipset с помощью большинства программ, которые автоматически блокируют, таких как fail2ban, ossec и т. д. Поскольку вы можете установить тайм-аут по умолчанию, вы можете гарантировать, что записи истекли независимо от того, какая программа установила запись.

Пример

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

Предостережение

### Note:  This does not account for all possible traffic you might need or want
###        This is only an example of mitigating common risks of using a tarpit
###        Use at your own risk

Настройка ipset

# Create the ipset blacklist
# options:
# - create         : create a new ipset
# - blacklist      : Name of the ipset we'll reference in the iptables rule
# - hash:net       : Make blacklist type hash to hold network (ip/mask) data
# - family inet    : This is for IPv4 data (inet6 for IPv6)
# - counters       : We want packet/byte stats counted for each entry
# - comment        : So we can add a comment with each entry (handy)
# - timeout 604800 : Set a default timeout of 604800 seconds (1 week) for each new entry
# - nomatch        : Allow us to enter exclusion entries (never match an entry)
ipset create blacklist hash:net family inet counters comment timeout 604800 nomatch

# Create an entry to never blacklist a trusted network
# options:
# - timeout 0      : entry never expires
# - nomatch        : Tells IPset to never match this entry (whitelist, in our usage)
ipset add blacklist 123.45.67.0/24 comment "Trusted subnet, causes breakage if blocked" timeout 0 nomatch

# Example to blacklist hosts
# no netmask implies /32 (or /128 for ipv6)
ipset add blacklist 34.56.78.90 comment "SSH Bruteforce"
ipset add blacklist 23.45.67.89 comment "SQL Injection" timeout 12345
# etc...

Настройка iptables

# Flush the input table
iptables -F INPUT

# Drop the custom flow TAR
iptables -X TAR

# Set default INPUT policy to DROP
iptables -P INPUT DROP

# Create the chain TAR
iptables -N TAR

# Send all blacklisted hosts to the tarpit
iptables -A INPUT -m set --match-set blacklist src -j TAR

# Allow established connections
# Note: after the blacklist so newly blacklisted threats are immediately ignored
#       Yes, that will cause the server to hold the state open until it times out.
#       Would you rather have a malicious host continuing its attack?
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Allow the services we want
# Note:  These create new state table entries/use up memory
# Note:  We do not account for synflood prevention in this example
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -m tcp --syn -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

# Send everything else to tarpit chain
iptables -A INPUT -j TAR

# This is the tarpit chain

# Tarpit up to 10 unique connections a second, any more, and pass to next rule
# Note: 10/s limit is arbitrary, adjust to your preference (experiment)
iptables -A TAR -p tcp -m limit --limit 10/sec -j TARPIT --tarpit 

# Drop everything else that makes it this far
# You can also set to REJECT which will immediately tell all connections to buzz off
iptables -A TAR -j DROP

Просмотр захваченных хостов в реальном времени

$ sudo tcpdump -npi eth0 'src YOUR.HOST.IP and (tcp[14] = 0 && tcp[15] = 0)'
7
ответ дан 2 December 2019 в 22:53

Теги

Похожие вопросы