← News ARTICOLI
3 min lettura 640 parole

DoS e DDoS

di Marco Dal Broi

Comprendi dos, ddos, attacchi informatici e syn flood. Migliora la tua cybersecurity e sicurezza rete con le nostre strategie di difesa.

DoS e DDoS

Comprendere gli Attacchi DoS e DDoS: Tecniche, Esempi Pratici e Strategie di Difesa

Nel panorama della sicurezza informatica, gli attacchi Denial of Service (DoS) e Distributed Denial of Service (DDoS) rappresentano una delle minacce più persistenti e potenzialmente devastanti per la disponibilità dei servizi online. Questo articolo si propone di esplorare le principali tecniche utilizzate in questi attacchi, fornendo una comprensione approfondita del loro funzionamento e alcuni esempi di codice a scopo puramente didattico. L'obiettivo è sensibilizzare sulle vulnerabilità e promuovere una difesa proattiva.


Attacchi DoS (Denial of Service): Principi e Metodologie

Un attacco DoS mira a rendere un servizio, una risorsa o un server non disponibile per i suoi utenti legittimi, sovraccaricando la risorsa con un volume eccessivo di traffico o richieste o sfruttando specifiche vulnerabilità del software. A differenza del DDoS, un attacco DoS proviene tipicamente da un'unica fonte. Vediamo alcune delle tecniche più comuni.


Attacchi DDoS (Distributed Denial of Service): La Potenza della Distribuzione

Gli attacchi DDoS rappresentano un'evoluzione degli attacchi DoS, distinguendosi per l'uso di molteplici fonti compromesse (spesso una 'botnet' composta da migliaia di dispositivi) che inviano traffico malevolo contemporaneamente. Questa distribuzione rende gli attacchi DDoS molto più difficili da mitigare, in quanto bloccare una singola fonte non è sufficiente. Vediamo alcune varianti comuni.

Le tecniche e gli esempi di codice presentati in questo articolo sono a scopo puramente didattico e informativo. L'esecuzione di attacchi DoS o DDoS senza esplicita e documentata autorizzazione è illegale, considerata un crimine informatico in molte giurisdizioni, e può comportare gravi sanzioni penali e civili. È fondamentale utilizzare queste conoscenze responsabilmente e solo in ambienti di test controllati, autorizzati e isolati. La difesa contro questi attacchi richiede una combinazione di soluzioni tecnologiche (firewall, IDS/IPS, WAF, servizi anti-DDoS) e best practice di sicurezza, come il monitoraggio costante, la gestione delle patch e la segmentazione della rete. Proteggere la propria infrastruttura è cruciale per garantire la continuità operativa e la reputazione aziendale.

python
# Imports
from scapy.all import *
from pprint import pprint
import operator

# Parameters
interface = "eth0"                      # Interface you want to use
dns_source = "local-ip"                 # IP of that interface
dns_destination = ["ip1","ip2","ip3"]   # List of DNS Server IPs

time_to_live = 128                                                                 # IP TTL
query_name = "google.com"                                                          # DNS Query Name
query_type = ["ANY", "A","AAAA","CNAME","MX","NS","PTR","CERT","SRV","TXT", "SOA"] # DNS Query Types

# Initialise variables
results = []
packet_number=0

# Loop through all query types then all DNS servers
for i in range(0,len(query_type)):
    for j in range(0, len(dns_destination)):
        packet_number += 1

        # Craft the DNS query packet with scapy
        packet = IP(src=dns_source, dst=dns_destination[j], ttl=time_to_live) / UDP() / DNS(rd=1, qd=DNSQR(qname=query_name, qtype=query_type[i]))

        # Sending the packet
        try:
            query = sr1(packet,iface=interface,verbose=False, timeout=8)
            print("Packet #{} sent!".format(packet_number))
        except:
            print("Error sending packet #{}".format(packet_number))

        # Creating dictionary with received information
        try:
            result_dict = {
                'dns_destination':dns_destination[j],
                'query_type':query_type[i],
                'query_size':len(packet),
                'response_size':len(query),
                'amplification_factor': ( len(query) / len(packet) ),
                'packet_number':packet_number
            }
            results.append(result_dict)
        except:
            pass

# Sort dictionary by the amplification factor
results.sort(key=operator.itemgetter('amplification_factor'),reverse=True)

# Print results
pprint(results)

Stai esplorando i nostri servizi?

Parla con un esperto: ti guidiamo verso la soluzione più adatta alla tua azienda.

Contattaci ora