diff --git a/docs/manual.md b/docs/manual.md index c64871c..ad0b054 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -181,6 +181,7 @@ - [fakeddisorder](#fakeddisorder) - [hostfakesplit](#hostfakesplit) - [tcpseg](#tcpseg) + - [oob](#oob) - [Дурение udp](#дурение-udp) - [udplen](#udplen) - [dht\_dn](#dht_dn) @@ -3991,6 +3992,35 @@ function tcpseg(ctx, desync) С помощью tcpseg можно сделать seqovl без сегментации, используя маркеры "0,-1". Для замещения текущего диссекта можно комбинировать с drop. +### oob + +``` +function tcpseg(ctx, desync) +``` + +- arg: char=c - 1 символ oob +- arg: byte=c - числовое значение байта OOB 0..255 +- arg: drop_ack - дропать пустой ACK в ответ на SYN,ACK +- arg: urp - позиционный [маркер](#маркеры) для urgent pointer, "b" или "e". по умолчанию - "b" + +Функция перехватывает TCP handshake, сдвигая sequence влево на 1 байт, затем вставляет 1 байт OOB в первый отсылаемый пейлоад и отсылает его. +После отработки функция уходит в cutoff по обоим направлениям. + +ОС получателя выбрасывает OOB байт из потока, DPI может не выбрасывать и получать оригинальное сообщение со вставленным в него посторонним байтом, что может портить смысл всего сообщения. + +- OOB - устаревший, но все еще поддерживаемый в ОС механизм. Имеется 2 стандарта. Более старый предполагает, что th_urp указывает на байт OOB, +более новый - на следующий за ним байт. Поэтому значение th_urp=0 невалидно по новому стандарту, но все еще может работать. +Чтобы задействовать его укажите "urp=b". +- "urp=e" вставляет OOB байт после самого последнего байта пейлоада - для обхода DPI как правило бесполезно, поскольку DPI получает все оригинальное сообщение. +- Требуется перенаправление входящего трафика в пределах `--in-range=-s1' +- Не может быть отфильтровано по пейлоаду, поскольку после начала модификации tcp handshake соскок уже невозможен, иначе поедут sequence. +- Фильтрация по хостлистам возможна только при `--ipcache-hostname`. +- Не может работать с функциями, предполагающими отправку пейлоада - multisplit, multidisorder, fakedsplit, fakeddisorder и тд. Они будут работать, но будут слать дубль без OOB. +- Если пейлоад [многопакетный](#особенности-приема-многопакетных-пейлоадов) - отсылается весь [reasm](#особенности-приема-многопакетных-пейлоадов). OOB вставляется в тот сегмент, куда попал urp. +В этом сегменте th_urp нормализуется по смещению сегмента, выставляется флаг TH_URG. Остальные части шлются как есть. Функция дропает последующие части replay, затем уходит в cutoff по обоим направлениям. +- drop_ack дропает пустой пакет с ACK в ответ на SYN,ACK - тот, что имеет sequence=1. В Windows для drop_ack необходим параметр --wf-tcp-empty=1. + + ## Дурение udp Для udp намного меньше вариантов, чем для tcp, в силу простоты данного протокола. С ним особо нечего делать.