Добавить в корзинуПозвонить
Найти в Дзене
The Codeby

Предсказуемый sequence number — и чужая сессия у тебя в руках

Полгода назад на внутреннем пентесте я перехватил TCP-сессию между сервером мониторинга и управляющей консолью. RST-инъекция сработала с первого пакета — от обнаружения открытого порта до разрыва чужого соединения прошло 12 минут. Коллега-джуниор, наблюдавший в Wireshark, не мог понять, что происходит. Он знал, что TCP — «надёжный протокол». Но не представлял, как именно эта надёжность становится уязвимостью. 🔍 Суть проблемы — в механике трёхстороннего рукопожатия. Клиент отправляет SYN с начальным sequence number, сервер отвечает SYN-ACK со своим, клиент подтверждает ACK. Три пакета — соединение установлено. Просто? Да. Но дьявол в деталях: • Сервер после получения SYN выделяет ресурсы на полуоткрытое соединение ещё до завершения handshake. Запись в SYN-очереди висит ~31 секунду, ожидая финального ACK. Отправь тысячи SYN без продолжения — и очередь переполнится. Это классический SYN flood. • В устаревших TCP-стеках начальные sequence numbers генерировались линейно. Атакующий предс

Предсказуемый sequence number — и чужая сессия у тебя в руках

Полгода назад на внутреннем пентесте я перехватил TCP-сессию между сервером мониторинга и управляющей консолью. RST-инъекция сработала с первого пакета — от обнаружения открытого порта до разрыва чужого соединения прошло 12 минут. Коллега-джуниор, наблюдавший в Wireshark, не мог понять, что происходит. Он знал, что TCP — «надёжный протокол». Но не представлял, как именно эта надёжность становится уязвимостью.

🔍 Суть проблемы — в механике трёхстороннего рукопожатия. Клиент отправляет SYN с начальным sequence number, сервер отвечает SYN-ACK со своим, клиент подтверждает ACK. Три пакета — соединение установлено. Просто? Да. Но дьявол в деталях:

• Сервер после получения SYN выделяет ресурсы на полуоткрытое соединение ещё до завершения handshake. Запись в SYN-очереди висит ~31 секунду, ожидая финального ACK. Отправь тысячи SYN без продолжения — и очередь переполнится. Это классический SYN flood.

• В устаревших TCP-стеках начальные sequence numbers генерировались линейно. Атакующий предсказывал ISN удалённого хоста и инжектировал пакеты в чужую сессию вслепую — blind TCP injection. Современные ОС вычисляют ISN через криптографический хеш (RFC 6528), но legacy-системы в промышленных сетях и SCADA — до сих пор уязвимы.

⚡ А теперь про разведку. SYN-скан в Nmap (nmap -sS) — первое, что запускаешь на новом проекте. Отправляется SYN, анализируется ответ, тут же шлётся RST — рукопожатие не завершается. Три варианта ответа:

• SYN-ACK → порт открыт, сервис слушает

• RST → порт закрыт

• Тишина → файрвол дропает пакет

Разница между SYN-сканом и обычным connect-сканом (-sT) — как между подглядыванием в замочную скважину и стуком в дверь. Первый не оставляет записей в логах сервиса, второй — оставляет.

🛡 Каждый уровень TCP/IP-стека — отдельная поверхность атаки. На L2 — ARP-спуфинг и MAC-flooding. На L3 — IP-спуфинг и фрагментация. На L4 — манипуляции флагами, SYN flood, session hijacking. На L7 — SQL-инъекции и перехват сессий. Один пентестер за час может работать на трёх уровнях — и каждый раз правила игры меняются.

TCP-атаки — не финальная цель. Это разведка и плацдарм для lateral movement и privilege escalation. Без понимания транспортного уровня весь пентест строится на догадках.

📖 В полной статье — разбор всех TCP-флагов, практика с Scapy и Wireshark, реальные примеры RST-инъекций и защита от них. Читайте на Codeby.

https://codeby.net/threads/tcp-ip-stek-protokolov-dlya-khakera-flagi-rukopozhatiye-i-real-nyye-ataki.93696/