Security

กระบวนการบล็อคเว็บนั้นมีหลายวิธีการและหลายเหตุผล ทั้งการควบคุมเนื้อหา ไม่ว่าจะเป็นรัฐบาลต้องการเซ็นเซอร์เว็บหรือผู้ปกครองต้องการระมัดระวังไม่ให้บุตรหลานเข้าถึงข้อมูลไม่เหมาะสม, เพิ่มความปลอดภัยหากเรามีรายการของโดเมนที่เป็นภัยหรือถูกแฮก, ตลอดจนการรักษาความเป็นส่วนด้วยด้วยการบล็อคโดเมนที่เกี่ยวข้องกับการโฆษณา ที่เป็นที่นิยมค่อนข้างมาก จนโครงการ Pi-hole กลายเป็นหนึ่งในโครงการยอดนิยมของ GitHub ด้วยจำนวนดาวถึง 34,100 ดาว

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

การบล็อคเว็บผ่านทางเซิร์ฟเวอร์ DNS นั้นมีข้อจำกัดในตัวเอง ข้อสำคัญคือผู้ใช้อาจจะไม่ให้ความร่วมมือใช้งานเซิร์ฟเวอร์ DNS ที่เรากำหนดไว้ เช่น ตั้งค่าไปใช้งานเซิร์ฟเวอร์ DNS สาธารณะ 8.8.8.8 ของกูเกิล หรือ 1.1.1.1 ของ Cloudflare ที่ผ่านมาบางองค์กรอาจจะพยายามโยกทราฟิกของเซิร์ฟเวอร์เหล่านี้เข้าไปยังเซิร์ฟเวอร์ DNS ขององค์กรเองเพื่อให้สามารถควบคุมการเข้าโดเมนต่างๆ ได้อยู่ แต่ความนิยมของโปรโตคอล DNS over HTTPS (DoH) ก็ทำให้การควบคุมทำให้ยากขึ้น หากพยายามใช้เซิร์ฟเวอร์ขององค์กรไปแทน DoH ก็จะทำให้ผู้ใช้ไม่สามารถใช้งานอินเทอร์เน็ตได้เลย

กระบวนการบล็อคเว็บอีกรูปแบบที่นิยมกัน คือการใช้ไฟร์วอลล์อ่านฟิลด์ Host ใน HTTP header ซึ่งได้เฉพาะการเชื่อมต่อที่ไม่เข้ารหัสเท่านั้น หากเชื่อมต่อเข้ารหัสแล้วไฟร์วอลล์ก็จะไม่สามารถอ่านค่า HTTP header ได้อีกต่อไป อย่างไรก็ดีการเชื่อมต่อที่เข้ารหัสนั้น แม้เนื้อหาในการเชื่อมต่อจะเข้ารหัสแทบทั้งหมดแต่ก็มีข้อมูลบางส่วนที่ไม่ได้เข้ารหัสเอาไว้ ทำให้ผู้ให้บริการอินเทอร์เน็ตสามารถสังเกตได้ว่าผู้ใช้กำลังเข้าเว็บใด คือค่า TLS SNI

TLS SNI (RFC3456 มีการปรับปรุงอีกหลายครั้งตามเวอร์ชั่น TLS) เป็นส่วนขยายของ TLS 1.0 ที่ช่วยให้ไคลเอนต์สามารถแจ้งเซิร์ฟเวอร์ได้ว่าต้องการเชื่อมต่อกับโดเมนใด การแจ้งล่วงหน้านี้ทำให้เซิร์ฟเวอร์หนึ่งไอพีสามารถให้บริการได้หลายโดเมนพร้อมกัน และเลือกเปิดการเชื่อมต่อตามโดเมนที่ผู้ใช้ร้องขอมา หลังจากเซิร์ฟเวอร์รับรู้ว่าไคลเอนต์ต้องการเชื่อมต่อกับเซิร์ฟเวอร์โดเมนใดแล้วก็จะส่งใบรับรองตามโดเมนนั้นๆ กลับไป เพื่อเริ่มกระบวนการเข้ารหัสในใบรับรองนั้นจะระบุชื่อโดเมนของเว็บที่กำลังใช้งานเอาไว้ในฟิลด์ CN (canonical name) และ SAN (subject alternative name) เราท์เตอร์ที่คั่นกลางการเชื่อมต่อระหว่างไคลเอนต์และเซิร์ฟเวอร์สามารถเลือกตัดการเชื่อมต่อรายโดเมน โดยดูค่า SNI ได้

ซอฟต์แวร์ในกลุ่มที่สังเกตุข้อมูลการเชื่อมต่อและตัดการเชื่อมต่อจากข้อมูลเหล่านั้นได้ เรียกว่า Intrusion Prevention Systems (IPS) หรือบางทีก็เรียกว่า Intrusion Detection Systems (IDS) การทำงานนั้นคาบเกี่ยวกันไปมา แต่โดยรวมแล้วซอฟต์แวร์ในกลุ่มนี้จะตรวจข้อมูลการเชื่อมต่อได้อย่างละเอียด

Suricata เป็นหนึ่งใน IPS/IDS แบบโอเพนซอร์สยอดนิยม (รองจาก Snort ที่อยู่ในกลุ่มเดียวกัน และปัจจุบันเป็นโครงการที่ดูแลโดยซิสโก้) มันถูกใช้งานอยู่ในบริการไฟร์วอลล์หลายตัว เช่น ไฟร์วอลล์ชื่อ Threat Prevention ในเราท์เตอร์ของ Synology

Suricata รองรับลินุกซ์หลายดิสโทร ตั้งแต่ Ubuntu, Debian, Fedora, RHEL/CentOS (ทดสอบกับ Rocky Linux ก็สามารถใช้งานได้ ในกรณีของ CentOS/Rocky Linux นั้นสามารถติดตั้งได้ด้วยสามคำสั่ง

yum install epel-release yum-plugin-copr
yum copr enable @oisf/suricata-6.0
yum install suricata

คอนฟิกเริ่มต้นของของ Suricata ในแพ็กเกจนั้นไม่ได้ปรับมาให้ตรงกับ CentOS ต้องเข้าไปแก้ไฟล์ /etc/suricata/suricata.yaml เสียก่อน โดยเฉพาะฟิลด์ default-rule-path: /etc/suricata/rules เพื่อกำหนดตำแหน่งของไฟล์ที่จะใช้กรองแพ็กเก็ต จากนั้นกำหนดรายการไฟล์กฎการกรองในฟิลด์ rule-files

กฎของ Suricata นั้นมีรูปแบบดังนี้

[action] [protocol] [source IP] [source port] -> [dest IP] [dest port] (msg:"[log message]"; [conditions]; sid:[signature ID]; rev:[revision])
  • action: สามารถกำหนดได้ว่าจะทำให้ทำอะไรหากจากทราฟิกตรงเงื่อนไข เช่น drop (ทิ้งแพ็กเก็ต ทำให้การเชื่อมต่อไม่สำเร็จ), reject (เหมือน drop แต่ส่ง RST ทำให้การเชื่อมต่อหลุด), pass (ถือว่าข้อมูลปลอดภัย ไม่ต้องพิจารณากฎอื่นต่อ), alert (ปล่อยผ่าน แต่ log ลงไฟล์)
  • protocol ตัว Suricata สามารถอ่านข้อมูลโปรโตคอลได้เป็นจำนวนมาก และการออกเวอร์ชั่นใหม่ๆ ก็มักเพิ่มโปรโตคอลใหม่ๆ อย่างต่อเนื่อง เช่นตอนนี้กำลังพัฒนาให้อ่าน mqtt เพิ่มเติมเนื่องจากใช้งานในระบบ IoT มากขึ้น โปรโตคอลพื้นฐานที่อ่านข้อมูลได้ ได้แก่ IP, ICMP, TCP, และ UDP และยังอ่านโปรโตคอลระบบแอปพลิเคชั่นได้อีกมาก ในกรณีนี้เราสนใจโปรโตคอล TLS (ใช้งานร่วมกับ SSL)
  • source IP ไอพีต้นทาง สามารถกำหนดเป็นกลุ่มได้ในคอนฟิก เช่น วงไอพีภายในองค์กร
  • source port พอร์ตต้นทง
  • dest IP ไอพีปลายทาง
  • dest port พอร์ตปลายทาง
  • log message ข้อความสำหรับแสดงในไฟล์ log ว่าต้องการแจ้งเตือนผู้ดูแลเน็ตเวิร์คว่าอย่างไรบ้าง เช่น แจ้งหมายเลข CVE ที่คนร้ายกำลังโจมตี
  • conditions เงื่อนไขสำหรับตรวจสอบ เช่น ฟิลด์ในโปรโตคอลที่เราต้องการตรวจสอบ
  • signature ID หมายเลขกฎสำหรับอ้างอิง ตัว Suricata จะบันทึกไว้ใน log เพื่อให้ผู้ดูแลมาตรวจสอบได้ง่ายขึ้น
  • revision หมายเลขเวอร์ชั่นของกฎ ในกรณีที่กฎมีการแก้ไข เช่น การปรับกฎหลังพบการโจมตีรูปแบบใหม่ๆ ในช่องโหว่เดิม ก็ควรปรับหมายเลข revision เพิ่มขึ้นทุกครั้ง เพื่อให้อ้างอิงได้ว่าการบล็อคแต่ละครั้งมาจากกฎต่างกัน

ในกรณีของโปรโตคอล TLS นั้น Suricata สามารถดึงเอาค่า SNI, เวอร์ชั่นโปรโตคอล, สถานะการเชื่อมต่อ (เริ่มส่ง Hello, หรือกำลังแลกกุญแจ), ตลอดจนค่าต่างๆ ในใบรับรอง การตั้งค่าให้ Suricata บล็อคโดเมนนั้นสามารถทำได้เบื้องต้น เช่นการบล็อคโดเมน example.com จะใช้กฎว่า

drop tls any any -> any any (msg:"BLOGNONE Drop example.com"; content:"example.com" ; sid:2230031; rev:1;)

การรัน Suricata สามารถรันจาก command line ได้โดยตรง โดยกำหนดค่าคอนฟิกและอินเทอร์เฟซที่ต้องการ เช่น $ suricata -c /etc/suricata/suricata.yaml -i eth0 จะเป็นการกำหนดให้ Suricata อ่านข้อมูลที่วิ่งผ่านอินเทอร์เฟซ eth0 ทั้งหมด แต่ไม่สามารถตัดการเชื่อมต่อได้เนื่องจากเป็นการดักรับข้อมูลมาตรวจสอบเท่านั้น สำหรับการตัดการเชื่อมต่อ ต้องรัน Suricata ในโหมด IPS โดยรับข้อมูลผ่าน Netfilter Queue ที่เปิดให้ซอฟต์แวร์นอกเคอร์เนล (user space) โดยใช้คำสั่ง

nft add rule filter INPUT queue num 3 bypass
nft add rule filter OUTPUT queue num 3 bypass

![](https://suricata.readthedocs.io/en/latest/_images/iptables4.png)

การตั้ง Suricata สำหรับการใช้งานเป็นไฟร์วอลล์คั่นกลางระหว่างเน็ตเวิร์ค ต้องกรองใน FORWARD

การเพิ่มกฎสำหรับ INPUT/OUTPUT นั้นเป็นการใช้งาน filter เพื่อกรองข้อมูลที่เข้าและออกจากตัวเครื่องเองโดยตรง ในกรณีใช้งานลินุกซ์เป็นเราท์เตอร์ เช่นเซิร์ฟเวอร์ VPN จะต้องเปลี่ยนเป็น FORWARD แทน num 3 นั้นหมายถึงคิวหมายเลข 3 ซึ่งสามารถตั้งเป็นค่าอื่นๆ ได้ แต่ต้องตั้งให้ตรงกันเมื่อสั่งรัน Suricata และสุดท้ายคือ bypass เป็นการบอก netfilter ว่าหากไม่มีซอฟต์แวร์ใดมารับข้อมูลจากคิวหมายเลข 3 ให้ปล่อยผ่านข้อมูลไปได้เลย ป้องกันเน็ตเวิร์คล่มเมื่อ Suricata ไม่ได้รัน หรือแครชไป

จากนั้นให้รัน Suricata ให้รับข้อมูลจาก netfilter ในคิวหมายเลข 3 ด้วยคำสั่ง $ suricata -c /etc/suricata/suricata.yaml -q 3 หลังจากรันแล้วสามารถทดสอบด้วยคำสั่ง $ curl https://example.com เพื่อเชื่อมต่อแบบ TLS เข้าไปยัง example .com จะพบว่าเชื่อมต่อไม่ได้ และหากไปดูใน log ที่ /var/log/suricata/fast.log จะพบ log บันทึกว่า Suricata ตัดการเชื่อมต่อ

12/19/2021-08:07:50.785382  [Drop] [**] [1:2230031:1] BLOGNONE Drop example.com [**] [Classification: (null)] [Priority: 3] {TCP} xx.xx.xx.xx:48346 -> 93.184.216.34:443

หากต้องการบล็อคโดเมนทั้งหมดในรูปแบบเดียวกับ Pi-hole เราสามารถหารายชื่อโดเมนจากชุมชน Pi-hole มาสร้างกฎสำหรับ Suricata ได้ไม่ยากนัก นอกจากนี้ Suricata ยังมีฟีเจอร์ช่วยให้การตรวจจับครอบคลุมขึ้น เช่น การตรวจสอบ subdomain ด้วย dotprefix ในกรณีของ SNI นั้น IETF รับรู้ว่าผู้ให้บริการอินเทอร์เน็ตหลายรายตรวจสอบการเข้าเว็บด้วยข้อมูลนี้อยู่เช่นในบทความนี้ และกำลังพัฒนามาตรฐานเพื่อปิดบังข้อมูลนี้ ทั้ง ESNI ที่เคยเสมอเมื่อปี 2018 และ ECH เมื่อปี 2020 หากพัฒนาสำเร็จและมีการใช้งานเป็นวงกว้างก็น่าสนใจว่าในอนาคตระบบมอนิเตอร์เน็ตเวิร์คจะปรับตัวกันอย่างไร

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand