หยุด Bittorrent โดยใช้ Suricata

Suricata คือ อะไร ?

Suricata เป็น open source engine สำหรับ ดักตรวจ และป้องกันการโจมตีในระบบเครือข่าย รวมไปถึงการตรวจพฤติกรรมที่ไม่เหมาะสมในองค์กร (IDS/IPS - Intrusion Detection/Intrusion Prevention System) พัฒนาโดย Open Information Security Foundation

จุดเด่นของ Suricata คือ การทำงานแบบ multi-threaded ซึ่งส่งผลให้ทำงานได้เร็วในระบบที่มีหลายหน่วยประมวลผล (multi-processor/multi-core) อย่างในปัจจุบัน

หลาย ๆ ท่านที่ทำงานด้าน infosec อาจจะคุ้นเคยกับ open source engine อีกตัวหนึ่ง คือ Snort ซึ่งทำงานในลักษณะเดียวกัน เนื่องจาก Suricata ถูกสร้างโดยถอดแบบมาจาก Snort พร้อมกับแนวคิดในเรื่อง multi-threaded matching ที่เพิ่มเข้ามา ทำให้ Suricata สามารถที่จะใช้ข้อมูล และลักษณะการกำหนดค่าต่าง ๆ ได้คล้าย ๆ หรือแทบจะเหมือนกับ Snort ซึ่งถ้าใครเคยใช้ Snort มาก่อน น่าจะทดลอง Suricata ได้ไม่ยาก (สำหรับผม ไม่เคยใช้ทั้งคู่ ก็เลยต้องอ่านเอกสารเอาเองมากหน่อย)

สิ่งที่สำคัญที่สุดในระบบ IDS/IPS คือ ข้อมูล signature rules ซึ่งแต่ละการโจมตี หรือพฤติกรรมการใช้งาน จะมีรูปแบบที่ชัดเจน สามารถตรวจจับได้ เป็นข้อดีที่ Suricata ถอดแบบมาจาก Snort จึงสามารถใช้ Snort rules ได้ รวมถึง rules ที่ใช้กับ Suricata โดยตรงที่สามารถดาวน์โหลดมาติดตั้งเพิ่มได้จาก ET (emergingthreats.net) โดยที่เราสามารถจะเพิ่ม หรือแก้ไข rules ต่าง ๆ หรือเพิ่มข้อมูลเข้าไปตามความต้องการของเราได้ แต่ทว่า rules ก็มีข้อกำหนดสัญญาอนุญาต การแก้ไขหรือดัดแปลง เผยแพร่ หรือแม้แต่นำไปใช้ในเชิงการค้า ต้องตรวจสอบสัญญาอนุญาตให้ดีก่อน

ระบบที่จำเป็นสำหรับการติดตั้ง

  • Debian GNU/Linux Squeeze/Sid จำเป็นต้องเป็น Squeeze หรือ Sid เท่านั้น เนื่องจาก suricata package ค่อนข้างใหม่อยู่ จึงยังไม่มีอยู่ใน Debian Lenny แต่ถ้าจะติดตั้งใน Lenny ก็คิดว่าอาจจะเป็นไปได้แต่คงต้องใช้เทคนิคเพิ่มเติม เอาเป็นว่า จะยังไม่พูดถึงการติดตั้งใน Lenny ละกันครับ
  • netfilter/iptables เนื่องจากเราจะทำ inline blocking จึงต้องใช้ความสามารถของ NFQUEUE ดังนั้น สำหรับวิธีการที่จะอธิบายต่อไปนี้ จะใช้กับ kfreebsd kernel ใน Debian ไม่ได้
  • signature rules จำเป็นต้องมี signature สำหรับตรวจจับ Bittorrent ซึ่งเราจะใช้ rules จาก ET ที่เป็น open source rules:
    http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz (MD5)

ขั้นตอนการติดตั้ง

  • ติดตั้ง suricata package
# apt-get install suricata
  • ดาวน์โหลด signature rules จาก ET
  • # wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
    # wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz.md5
  • ตรวจสอบ MD5 hash
  • # cat emerging.rules.tar.gz.md5
    b3ec2bcc53283291c12b5c0ac23d06f6  /home/packaging/www/rules/open/suricata/emerg
    ing.rules.tar.gz
    # md5sum emerging.rules.tar.gz
    b3ec2bcc53283291c12b5c0ac23d06f6  emerging.rules.tar.gz
    
  • แตกแฟ้ม และคัดลอกไปวางใน /etc/snort/rules
  • # tar xzf emerging.rules.tar.gz
    # cd rules; cp *.rules /etc/snort/rules
    

    กำหนดค่าสำหรับเริ่มการทำงาน

    • ค่าที่กำหนดมาในตัวอย่างของ Debian (/etc/suricata/suricata-debian.yaml) สามารถใช้งานได้ทันที แต่จุดประสงค์ของเราคือการ block Bittorrent จึงต้องปรับ signature rules สักเล็กน้อย
    # cd /etc/snort/rules
    # sed --in-place 's/^alert/drop/g' emerging-p2p.rules
    
  • กำหนดค่า iptables เพื่อส่งข้อมูลเข้ามายัง Suricata โดยใช้ NFQUEUE
  • # iptables -A FORWARD -j NFQUEUE
  • สั่งเริ่ม Suricata
  • # suricata -c /etc/suricata/suricata-debian.yaml -q 0
    ...
    ...
    [30619] 16/11/2010 -- 16:11:31 - (source-nfq.c:267)  (NFQInitThread) -- bi
    nding this thread to queue '0'
    [30619] 16/11/2010 -- 16:11:31 - (source-nfq.c:291)  (NFQInitThread) -- se
    tting queue length to 200
    [30619] 16/11/2010 -- 16:11:31 - (source-nfq.c:304)  (NFQInitThread) -- se
    tting nfnl bufsize to 300000
    [30617] 16/11/2010 -- 16:11:32 - (tm-threads.c:1429)  (TmThreadWaitOnThrea
    dInit) -- all 9 packet processing threads, 3 management threads initialize
    d, engine started.
    
  • ทดสอบใช้งาน Bittorrent client เพื่อพยายามโหลดข้อมูล ถ้าไม่มีอะไรผิดพลาด ระบบจะ block ไม่ให้สามารถใช้งานได้
  • เกร็ดเพิ่มเติม

    • หากจุดประสงค์เพื่อต้องการ block Bittorrent เพียงอย่างเดียว เราสามารถปรับแต่งค่าตั้งของ Suricata เพื่อลดการใช้หน่วยความจำ และการใช้หน่วยประมวลผลในเวลาทำงาน ไม่ให้ทำงานหนักเกินความจำเป็น โดยทำการ comment ("#") rules อื่น ๆ ให้หมด เหลือไว้เพียง emerging-p2p.rules
    /etc/suricata/suricata-debian.yaml
    ...
    # Set the default rule path here to search for the files.
    # if not set, it will look at the current working dir
    default-rule-path: /etc/snort/rules
    rule-files:
    # - attack-responses.rules
    # - backdoor.rules
    # - bad-traffic.rules
    # - chat.rules
    # - ddos.rules
    ...
    ...
     - emerging-p2p.rules
    # - emerging-policy.rules
    ...
    ...
    
  • หากเครื่องที่ติดตั้ง เป็นเครื่องที่มีประสิทธิภาพสูง เราสามารถปรับแต่งในส่วนของ max-pending-packets ให้มีค่ามากขึ้นจาก 50 ได้
  • /etc/suricata/suricata-debian.yaml
    ...
    ...
    # If you are using the CUDA pattern matcher (b2g_cuda below), different rules
    # apply. In that case try something like 4000 or more. This is because the CUDA
    # pattern matcher scans many packets in parallel.
    max-pending-packets: 100
    ...
    
  • สามารถตรวจสอบได้ว่า เครื่องไหน กำลังพยายามจะใช้ Bittorrent บ้าง โดยดูจาก fast.log
  • # tail /var/log/suricata/fast.log
    ...
    ...
    11/16/10-09:16:13.449538  [**] [1:2000334:9] ET P2P BitTorrent peer sync [**] [C
    lassification: Potential Corporate Privacy Violation] [Priority: 3] {6} 192.168.
    20.15:56380 -> 202.170.114.153:50075 [Xref => http://bitconjurer.org/BitTorrent/
    protocol.html][Xref => http://doc.emergingthreats.net/bin/view/Main/2000334][Xre
    f => http://www.emergingthreats.net/cgi-bin/cvsweb.cgi/sigs/P2P/P2P_Bittorrent_T
    raffic]
    11/16/10-09:16:29.770682  [**] [1:2000334:9] ET P2P BitTorrent peer sync [**] [C
    lassification: Potential Corporate Privacy Violation] [Priority: 3] {6} 192.168.
    20.15:56380 -> 202.170.114.153:50075 [Xref => http://bitconjurer.org/BitTorrent/
    protocol.html][Xref => http://doc.emergingthreats.net/bin/view/Main/2000334][Xre
    f => http://www.emergingthreats.net/cgi-bin/cvsweb.cgi/sigs/P2P/P2P_Bittorrent_T
    raffic]
    

    สรุปข้อดีของวิธีนี้

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

    สรุป

    ผู้ดูแลระบบท่านใด ที่กำลังประสบปัญหากับ Bittorrent อยู่ ลองมาหลายวิธี สำเร็จบ้าง ไม่สำเร็จบ้างก็ตามแต่ ถ้าสนใจ อาจจะนำไปลองทดสอบกันได้ ได้ผลอย่างไร ก็บอกเล่าเก้าสิบกันบ้างละกันครับ

    Comments

    หามานาน
    ที่เคยทำมาได้บ้าง ไม่ได้บ้าง

    Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
    ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้