From 33b49cbad3eaeb6d5f5329904ca049fb224766ef Mon Sep 17 00:00:00 2001 From: Angelo Compagnucci Date: Thu, 7 Oct 2021 10:53:51 +0200 Subject: [PATCH 1/3] research/fraginternals: Test: adding pre_delay pre_delay can be used to add a delay before actually executing the test. Suggested-by: Michael Trimarchi Signed-off-by: Angelo Compagnucci --- research/fraginternals.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/research/fraginternals.py b/research/fraginternals.py index 63d159ed6..15ac8c9c2 100644 --- a/research/fraginternals.py +++ b/research/fraginternals.py @@ -202,6 +202,7 @@ class Test(metaclass=abc.ABCMeta): def __init__(self, actions=None): self.actions = actions if actions != None else [] self.generated = False + self.pre_delay = None self.delay = None self.inc_pn = None self.check_fn = None @@ -268,7 +269,8 @@ class Test(metaclass=abc.ABCMeta): return False return self.check_fn(p) - def set_general_options(self, delay=None, inc_pn=None): + def set_general_options(self, delay=None, inc_pn=None, pre_delay=None): + self.pre_delay = pre_delay self.delay = delay self.inc_pn = inc_pn From 4c59cdfffda6bc494039b769ea3a36745f64bd4e Mon Sep 17 00:00:00 2001 From: Angelo Compagnucci Date: Thu, 7 Oct 2021 10:57:27 +0200 Subject: [PATCH 2/3] research/fraginternals: Test: adding enforce_pre_delay Adding a delay before actually executing the test. This can be useful in all the cases the network stack of the victim is still not ready to receive packets leading to a timed out test result. Suggested-by: Michael Trimarchi Signed-off-by: Angelo Compagnucci --- research/fraginternals.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/research/fraginternals.py b/research/fraginternals.py index 15ac8c9c2..d2f289154 100644 --- a/research/fraginternals.py +++ b/research/fraginternals.py @@ -261,7 +261,7 @@ class Test(metaclass=abc.ABCMeta): def generate(self, station): self.prepare(station) - self.enforce_delay() + self.enforce_delays() self.enforce_inc_pn() def check(self, p): @@ -274,13 +274,19 @@ class Test(metaclass=abc.ABCMeta): self.delay = delay self.inc_pn = inc_pn - def enforce_delay(self): - if self.delay == None or self.delay <= 0: - return + def enforce_delays(self): + inject_frags = self.get_actions(Action.Inject) - # Add a delay between injected fragments if requested - for frag in self.get_actions(Action.Inject)[1:]: - frag.delay = self.delay + # Add a delay before executing the first Inject action. This means a delay is added after + # possibly getting an IP via DHCP but before injecting the first test fragment/frame. + if self.pre_delay is not None and self.pre_delay > 0: + assert len(inject_frags) > 0 + inject_frags[0].delay = self.pre_delay + + # Add a delay between every next injected fragments if requested + if self.delay is not None and self.delay > 0: + for frag in inject_frags[1:]: + frag.delay = self.delay def enforce_inc_pn(self): if self.inc_pn == None: From 0375781b8eb92ce53babf07557d2f2d7616f840b Mon Sep 17 00:00:00 2001 From: Angelo Compagnucci Date: Thu, 7 Oct 2021 11:02:42 +0200 Subject: [PATCH 3/3] research/fragattack: add --pre-test-delay parameter This parameter can be used each time a test needs to be delayed before actually executing it. Suggested-by: Michael Trimarchi Signed-off-by: Angelo Compagnucci --- research/fragattack.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/research/fragattack.py b/research/fragattack.py index 7063dde88..eab9c83b4 100755 --- a/research/fragattack.py +++ b/research/fragattack.py @@ -132,7 +132,7 @@ def prepare_tests(opt): else: return None # If requested, override delay and inc_pn parameters in the test. - test.set_general_options(opt.delay, opt.inc_pn) + test.set_general_options(opt.delay, opt.inc_pn, opt.pre_test_delay) # If requested, override the ptype if opt.ptype != None: @@ -215,6 +215,7 @@ if __name__ == "__main__": parser.add_argument('--no-qos', default=False, action='store_true', help="Don't send QoS data frames (experimental - may break some tests).") parser.add_argument('--freebsd-cache', default=False, action='store_true', help="Sent EAP(OL) frames as (malformed) broadcast EAPOL/A-MSDUs.") parser.add_argument('--connected-delay', type=float, default=1, help="Second to wait after AfterAuth before triggering Connected event") + parser.add_argument('--pre-test-delay', type=int, default=0, help="Delay before launching the test") parser.add_argument('--to-self', default=False, action='store_true', help="Send ARP/DHCP/ICMP with same src and dst MAC address.") parser.add_argument('--no-drivercheck', default=False, action='store_true', help="Don't check if patched drivers are being used.") parser.add_argument('--stay-up', default=False, action='store_true', help="Don't quit when test has finished.")