In this attack pattern, the adversary leverages fuzzing to try to identify weaknesses in the system. Fuzzing is a software security and functionality testing method that feeds randomly constructed input to the system and looks for an indication that a failure in response to that input has occurred. Fuzzing treats the system as a black box and is totally free from any preconceptions or assumptions about the system. Fuzzing can help an attacker discover certain assumptions made about user input in the system. Fuzzing gives an attacker a quick way of potentially uncovering some of these assumptions despite not necessarily knowing anything about the internals of the system. These assumptions can then be turned against the system by specially crafting user input that may allow an attacker to achieve their goals.
Description
Attack Execution Flow
Step 1
Explore[Observe communication and inputs] The fuzzing attacker observes the target system looking for inputs and communications between modules, subsystems, or systems.
Network sniffing. Using a network sniffer such as wireshark, the attacker observes communications into and out of the target system.
Monitor API execution. Using a tool such as ktrace, strace, APISpy, or another debugging tool, the attacker observes the system calls and API calls that are made by the target system, and the nature of their parameters.
Observe inputs using web inspection tools (OWASP's WebScarab, Paros, TamperData, TamperIE, etc.)
[Osserva comunicazioni e input] L'attaccante fuzzing osserva il sistema target alla ricerca di input e comunicazioni tra moduli, sottosistemi o sistemi.
Sniffing di rete. Utilizzando uno strumento di sniffing di rete come Wireshark, l'attaccante osserva le comunicazioni in entrata e in uscita dal sistema target.
Monitoraggio dell'esecuzione API. Utilizzando strumenti come ktrace, strace, APISpy o altri strumenti di debugging, l'attaccante osserva le chiamate di sistema e le chiamate API effettuate dal sistema target, e la natura dei loro parametri.
Osserva gli input utilizzando strumenti di ispezione web (OWASP WebScarab, Paros, TamperData, TamperIE, ecc.)
Attack Techniques
-
Network sniffing. Using a network sniffer such as wireshark, the attacker observes communications into and out of the target system.
-
Monitor API execution. Using a tool such as ktrace, strace, APISpy, or another debugging tool, the attacker observes the system calls and API calls that are made by the target system, and the nature of their parameters.IT: Sniffing di rete. Utilizzando un network sniffer come Wireshark, l'attaccante osserva le comunicazioni in entrata e in uscita dal sistema target.
-
Observe inputs using web inspection tools (OWASP's WebScarab, Paros, TamperData, TamperIE, etc.)IT: Sniffing di rete. Utilizzando un network sniffer come Wireshark, l'attaccante osserva le comunicazioni in entrata e in uscita dal sistema target.
Step 2
Experiment[Generate fuzzed inputs] Given a fuzzing tool, a target input or protocol, and limits on time, complexity, and input variety, generate a list of inputs to try. Although fuzzing is random, it is not exhaustive. Parameters like length, composition, and how many variations to try are important to get the most cost-effective impact from the fuzzer.
Boundary cases. Generate fuzz inputs that attack boundary cases of protocol fields, inputs, or other communications limits. Examples include 0xff and 0x00 for single-byte inputs. In binary situations, approach each bit of an individual field with on and off (e.g., 0x80).
Attempt arguments to system calls or APIs. The variations include payloads that, if they were successful, could lead to a compromise on the system.
Sperimentazione
[Generare input fuzzed] Data uno strumento di fuzzing, un input o protocollo target, e limiti su tempo, complessità e varietà di input, generare una lista di input da testare. Sebbene il fuzzing sia casuale, non è esaustivo. Parametri come lunghezza, composizione e quante variazioni tentare sono importanti per ottenere l'impatto più efficace in rapporto ai costi dal fuzzer.
Casi limite. Generare input fuzzed che attaccano i casi limite dei campi del protocollo, degli input o di altri limiti di comunicazione. Esempi includono 0xff e 0x00 per input a singolo byte. In situazioni binarie, affrontare ogni bit di un singolo campo con on e off (ad esempio, 0x80).
Tentare argomenti di system call o API. Le variazioni includono payload che, se riuscissero, potrebbero portare a una compromissione del sistema.
Attack Techniques
-
Boundary cases. Generate fuzz inputs that attack boundary cases of protocol fields, inputs, or other communications limits. Examples include 0xff and 0x00 for single-byte inputs. In binary situations, approach each bit of an individual field with on and off (e.g., 0x80).
-
Attempt arguments to system calls or APIs. The variations include payloads that, if they were successful, could lead to a compromise on the system.IT: Casi limite. Genera input di fuzzing che attaccano i casi limite dei campi del protocollo, degli input o di altri limiti di comunicazione. Esempi includono 0xff e 0x00 per input a singolo byte. In situazioni binarie, affronta ogni bit di un singolo campo con on e off (ad esempio, 0x80).
Step 3
Experiment[Observe the outcome] Observe the outputs to the inputs fed into the system by fuzzers and see if anything interesting happens. If failure occurs, determine why that happened. Figure out the underlying assumption that was invalidated by the input.
[Osserva l'esito] Osserva gli output rispetto agli input forniti al sistema dai fuzzers e verifica se si verificano eventi interessanti. Se si verifica un fallimento, determina il motivo di tale evento. Individua l'assunzione sottostante che è stata invalidata dall'input.
Step 4
Exploit[Craft exploit payloads] Put specially crafted input into the system that leverages the weakness identified through fuzzing and allows to achieve the goals of the attacker. Fuzzers often reveal ways to slip through the input validation filters and introduce unwanted data into the system.
Identify and embed shell code for the target system.
Embed higher level attack commands in the payload. (e.g., SQL, PHP, server-side includes, etc.)
Induce denial of service by exploiting resource leaks or bad error handling.
[Creare payload di exploit] Inserire input appositamente progettati nel sistema che sfruttano la vulnerabilità identificata tramite fuzzing e consentono di raggiungere gli obiettivi dell'attaccante. I fuzzers spesso rivelano modi per passare attraverso i filtri di convalida dell'input e introdurre dati indesiderati nel sistema.
Identificare e incorporare shell code per il sistema target.
Incorporare comandi di attacco di livello superiore nel payload. (ad esempio, SQL, PHP, inclusioni lato server, ecc.)
Indurre un denial of service sfruttando perdite di risorse o una cattiva gestione degli errori.
Attack Techniques
-
Identify and embed shell code for the target system.
-
Embed higher level attack commands in the payload. (e.g., SQL, PHP, server-side includes, etc.)IT: Identifica e incorpora shell code per il sistema target.
-
Induce denial of service by exploiting resource leaks or bad error handling.IT: Identifica e incorpora shell code per il sistema target.