0Pricing
Cyber Security Academy · บทเรียน

กฎลายเซ็นด้วย Snort และ Suricata

การเขียนและอ่านกฎเครือข่าย

กฎลายเซ็นด้วย Snort และ Suricata เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน

Snort และ Suricata

Snort และ Suricata คือระบบประมวลผล IDS/IPS แบบเปิดเผยซอร์สโค้ดที่มีการใช้งานอย่างแพร่หลายที่สุดสองระบบ ทั้งสองใช้ภาษาสำหรับเขียนกฎที่เข้ากันได้เป็นส่วนใหญ่ ดังนั้นกฎที่เขียนสำหรับระบบหนึ่งจึงมักทำงานบนอีกระบบได้

Suricata เพิ่มการประมวลผลหลายเธรด ตัวแยกวิเคราะห์โพรโทคอลในตัว การดึงไฟล์ออก และการบันทึกข้อมูลอย่างละเอียด (EVE JSON) ส่วน Snort 3 ก็ปรับปรุงระบบประมวลผลของตนให้ทันสมัยในแนวทางเดียวกัน การเรียนรู้ไวยากรณ์กฎเพียงครั้งเดียวช่วยให้คุณใช้งานได้อย่างมีประสิทธิภาพกับทั้งสองระบบ

โครงสร้างของกฎ

กฎทุกข้อมีสองส่วน: ส่วนหัว และ เนื้อหา ที่อยู่ในวงเล็บ ส่วนหัวกำหนดการดำเนินการ โพรโทคอล และทิศทางการรับส่งข้อมูล ส่วนเนื้อหากำหนดสิ่งที่จะจับคู่และวิธีรายงานผล

alert tcp $EXTERNAL_NET any -> $HOME_NET 80 ( \
  msg:"WEB suspicious request"; \
  content:"/admin.php"; http_uri; \
  sid:1000001; rev:1; )

ฟิลด์ส่วนหัว

ส่วนหัวจะถูกอ่านจากซ้ายไปขวา:

  • การกระทำ — แจ้งเตือน, ทิ้ง, ปฏิเสธ, อนุญาต
  • โพรโทคอล — tcp, udp, icmp, ip (หรือโพรโทคอลระดับแอปพลิเคชันใน Suricata: http, dns, tls)
  • IP/พอร์ตต้นทาง และ IP/พอร์ตปลายทาง
  • ทิศทาง — -> ทางเดียว หรือ <> สองทิศทาง

ตัวแปรอย่าง $HOME_NET และ $EXTERNAL_NET มาจากการกำหนดค่าของคุณ เพื่อให้กฎยังคงนำไปใช้ได้กับหลายไซต์

drop tcp any any -> $HOME_NET 22 ( msg:"SSH blocked"; sid:1000002; rev:1; )

การกระทำ: แจ้งเตือนเทียบกับทิ้ง

การกระทำจะเป็นตัวกำหนดพฤติกรรมแบบ IDS หรือ IPS สำหรับกฎนั้น:

  • alert — บันทึกและแจ้งเตือน โดยไม่หยุดการรับส่งข้อมูล (IDS)
  • drop — ทิ้งแพ็กเก็ตโดยไม่แจ้งให้ทราบ (IPS ใช้ได้เฉพาะแบบอินไลน์)
  • reject — ทิ้งแพ็กเก็ตและส่งการรีเซ็ต TCP หรือข้อความ ICMP ที่ระบุว่าเข้าถึงไม่ได้
  • pass — อนุญาตอย่างชัดเจน และข้ามกฎถัดไป

เอนจินเดียวกันจะทำงานเป็น IDS หรือ IPS ขึ้นอยู่กับว่าติดตั้งแบบอินไลน์หรือไม่ และคุณใช้การกระทำใด

การจับคู่เนื้อหา

คีย์เวิร์ด content ใช้จับคู่รูปแบบไบต์ในข้อมูลส่วนบรรทุก ข้อความจะอยู่ในเครื่องหมายคำพูด ส่วนข้อมูลไบนารีจะอยู่ภายในเครื่องหมายไปป์ในรูปเลขฐานสิบหก

คีย์เวิร์ดสำหรับกำหนดจุดเริ่มช่วยให้การจับคู่แม่นยำขึ้น: offset, depth, distance และ within จะจำกัดตำแหน่งที่รูปแบบสามารถปรากฏได้ ซึ่งช่วยเพิ่มทั้งความถูกต้องและประสิทธิภาพ

alert tcp any any -> $HOME_NET any ( \
  msg:"Malware magic bytes"; \
  content:"|4D 5A|"; offset:0; depth:2; \
  sid:1000003; rev:1; )

บัฟเฟอร์แบบยึดติด

กฎสมัยใหม่จะจับคู่กับ บัฟเฟอร์ที่เข้าใจโพรโทคอล แทนกระแสข้อมูลดิบ หลังคีย์เวิร์ดบัฟเฟอร์ การจับคู่ content ที่ตามมาจะใช้กับส่วนนั้นของโพรโทคอลที่แยกวิเคราะห์แล้ว

  • http_uri — URI ของคำขอ
  • http_header — ส่วนหัวของคำขอ/การตอบกลับ
  • http_user_agent — User-Agent
  • tls_sni / dns_query — ชื่อเซิร์ฟเวอร์ TLS / คำค้น DNS

วิธีนี้เชื่อถือได้มากกว่าการค้นหาสตริงย่อยในแพ็กเก็ตทั้งแพ็กเก็ต

alert http any any -> any any ( \
  msg:"Suspicious user agent"; \
  http.user_agent; content:"sqlmap"; nocase; \
  sid:1000004; rev:1; )

PCRE และการไม่แยกตัวพิมพ์เล็กใหญ่

เมื่อสตริงคงที่ไม่เพียงพอ pcre จะเพิ่มความสามารถในการใช้นิพจน์ปกติที่เข้ากันได้กับ Perl ควรใช้ตัวกรองเบื้องต้น content ที่มีต้นทุนต่ำคู่กับ pcre เพื่อให้นิพจน์ปกติทำงานเฉพาะกับแพ็กเก็ตที่เป็นตัวเลือกเท่านั้น ซึ่งช่วยรักษาประสิทธิภาพไว้

ตัวปรับแต่ง nocase ทำให้การจับคู่เนื้อหาไม่แยกตัวพิมพ์เล็กใหญ่ ซึ่งสำคัญสำหรับส่วนหัวและฟิลด์ที่ผู้ใช้ควบคุมได้และผู้โจมตีสามารถปรับเปลี่ยนได้

alert http any any -> $HOME_NET any ( \
  msg:"SQLi attempt in URI"; \
  http.uri; content:"select"; nocase; \
  pcre:"/union\s+select/i"; \
  sid:1000005; rev:1; )

คีย์เวิร์ดโฟลว์และสถานะ

ตัวเลือก flow จะจำกัดขอบเขตของกฎตามสถานะและทิศทางของการเชื่อมต่อ ช่วยลดผลบวกลวงและต้นทุนการประมวลผล

  • established — ใช้เฉพาะกับเซสชัน TCP ที่เสร็จสมบูรณ์แล้ว
  • to_server / to_client — ทิศทางคำขอเทียบกับการตอบกลับ

การจับคู่การตอบกลับจากเซิร์ฟเวอร์เฉพาะเมื่อการเชื่อมต่อสร้างเสร็จแล้วและอยู่ในทิศทาง to_client จะช่วยป้องกันการทำงานกับแพ็กเก็ตหลงทางหรือแพ็กเก็ตปลอมแปลง

alert tcp $HOME_NET any -> $EXTERNAL_NET any ( \
  msg:"Beacon response"; \
  flow:established,to_client; \
  content:"|00 01 02 03|"; \
  sid:1000006; rev:1; )

ข้อมูลเมตา: sid, rev, msg, reference

ตัวเลือกสำหรับจัดระเบียบช่วยให้ชุดกฎดูแลรักษาได้ง่าย:

  • sid — รหัสลายเซ็นที่ไม่ซ้ำกัน (ใช้ 1000000+ สำหรับกฎภายใน)
  • rev — หมายเลขรุ่นแก้ไข ซึ่งต้องเพิ่มทุกครั้งที่แก้ไข
  • msg — ข้อความแจ้งเตือนที่นักวิเคราะห์เห็น
  • classtype — หมวดหมู่ที่ใช้กำหนดลำดับความสำคัญ
  • reference — ลิงก์ไปยัง CVE หรือคำแนะนำด้านความปลอดภัย

sid ที่คงที่และ rev ที่เพิ่มขึ้นตามลำดับช่วยให้คุณติดตามและอัปเดตกฎได้โดยไม่ทำให้แดชบอร์ดและการระงับการแจ้งเตือนเสียหาย

alert tcp any any -> $HOME_NET 445 ( \
  msg:"EternalBlue exploit attempt"; \
  flow:to_server,established; content:"|FF|SMB"; \
  classtype:attempted-admin; \
  reference:cve,2017-0144; sid:1000007; rev:2; )

ความแตกต่างระหว่าง Snort กับ Suricata

แม้จะใช้กฎร่วมกันได้ แต่เอนจินทั้งสองมีความสามารถแตกต่างกัน:

  • Suricata ทำงานแบบหลายเธรด แยกวิเคราะห์โพรโทคอลแอปพลิเคชันได้โดยกำเนิด แยกไฟล์ออกมา คำนวณ JA3 และส่งออก JSON ของ EVE
  • Snort 3 เขียนเอนจินใหม่เพื่อเพิ่มประสิทธิภาพและรองรับระบบปลั๊กอินแบบแยกส่วน

คีย์เวิร์ดบางรายการใช้ได้เฉพาะกับเอนจินใดเอนจินหนึ่ง Suricata เพิ่มคีย์เวิร์ดระดับแอปพลิเคชัน (tls.sni, dns.query, http.method) รวมถึงความสามารถด้านชุดข้อมูลและ flowbits เมื่อแชร์กฎ ให้กำหนดเป้าหมายเป็นความสามารถร่วมขั้นต่ำสุด หรือดูแลชุดกฎแยกตามเอนจิน

การกรองตามอัตราและเกณฑ์จำกัด

เพื่อป้องกันไม่ให้กฎส่งข้อความจำนวนมากจนท่วมคอนโซล ให้ใช้เกณฑ์จำกัด detection_filter จะทำงานต่อเมื่อพบเหตุการณ์จำนวน N ครั้งภายในช่วงเวลาหนึ่ง ส่วน threshold ร่วมกับ limit จะจำกัดปริมาณการแจ้งเตือน

สิ่งนี้จำเป็นสำหรับการตรวจจับการเดารหัสผ่านแบบลองซ้ำและการสแกน เพราะเหตุการณ์เดียวไม่มีความหมาย แต่การเกิดเหตุการณ์ถี่เป็นสัญญาณสำคัญ

alert tcp any any -> $HOME_NET 22 ( \
  msg:"SSH brute force"; flow:to_server; \
  detection_filter:track by_src, count 5, seconds 60; \
  sid:1000008; rev:1; )

ตรวจสอบอย่างรวดเร็ว

อ่านกฎหนึ่งข้อแล้วคาดการณ์พฤติกรรมของกฎ

สรุปทบทวน

ขณะนี้คุณสามารถอ่านและเขียนลายเซ็นของ Snort/Suricata ได้แล้ว:

  • กฎหนึ่งข้อประกอบด้วย ส่วนหัว (การกระทำ, โพรโทคอล, ต้นทาง/ปลายทาง, ทิศทาง) และตัวเลือกใน ส่วนเนื้อหา
  • การกระทำกำหนดว่าเป็น IDS หรือ IPS: alert, drop, reject, pass
  • content ร่วมกับ offset/depth และเลขฐานสิบหกใช้จับคู่ไบต์ของข้อมูลส่วนบรรทุก
  • บัฟเฟอร์แบบยึดติด (http.uri, tls.sni, dns.query) ใช้จับคู่ฟิลด์ของโพรโทคอลที่แยกวิเคราะห์แล้ว
  • pcre และ nocase จัดการรูปแบบที่เปลี่ยนแปลงได้
  • flow จำกัดขอบเขตตามสถานะและทิศทาง
  • sid/rev/msg/reference ช่วยให้ดูแลกฎได้ง่าย
  • เกณฑ์จำกัดช่วยลดสัญญาณรบกวนจากการเดารหัสผ่านแบบลองซ้ำและการสแกน

ถัดไป: การตรวจจับภัยคุกคามโดยไม่ใช้ลายเซ็นเลย

คำถามที่พบบ่อย

บทเรียน “กฎลายเซ็นด้วย Snort และ Suricata” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กฎลายเซ็นด้วย Snort และ Suricata” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กฎลายเซ็นด้วย Snort และ Suricata”

การเขียนและอ่านกฎเครือข่าย คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “กฎลายเซ็นด้วย Snort และ Suricata” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม

ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนวคิด IDS เทียบกับ IPS
  2. กฎลายเซ็นด้วย Snort และ Suricata
  3. การตรวจจับความผิดปกติและพฤติกรรม
  4. การปรับแต่งและการนำไปใช้งาน
← กลับไปที่ Cyber Security Academy