Security
น้องๆ เคยสงสัยไหมว่า เวลาเราเข้าเว็บ พิมพ์แชท ส่งรูป ไฟล์ต่างๆ มันเดินทางยังไงในสาย LAN หรือ Wi-Fi? Wireshark นี่แหละคือพระเอกของเรา มันเป็นโปรแกรมที่ดักจับข้อมูล (packet) ที่วิ่งไปมาใน network แล้วเอามาให้เราวิเคราะห์ได้ละเอียดสุดๆ
สมัยผมทำร้านเน็ต SiamCafe SiamCafe Blog ยุคแรกๆ Wireshark นี่แหละช่วยชีวิตไว้หลายครั้ง เคยเจอเด็กแอบใช้โปรแกรมโกงเกมออนไลน์ จับได้เพราะ Wireshark นี่แหละ เห็น packet แปลกๆ ส่งข้อมูลเยอะผิดปกติ ก็เลยตามไปจัดการได้ทัน
Wireshark ไม่ได้แค่เอาไว้จับผิดคนนะ แต่มันสำคัญกับ Network Administrator สุดๆ เพราะมันช่วย:
ง่ายๆ คือ มันเหมือนเรามีกล้องวงจรปิดที่มองเห็นทุกการเคลื่อนไหวใน network เลยล่ะ
ก่อนอื่นเลย น้องๆ ต้องดาวน์โหลด Wireshark มาติดตั้งก่อนนะ เข้าเว็บ official ของ Wireshark ได้เลย (www.wireshark.org) ติดตั้งเสร็จแล้ว มาเริ่มจับ packet กัน
เปิด Wireshark ขึ้นมา จะเห็นหน้าจอให้เลือก network interface (พวก Wi-Fi, Ethernet) เลือกอันที่เราใช้งานอยู่ ถ้าไม่แน่ใจ ให้ลองเลือกอันที่มี traffic วิ่งเยอะๆ
พอกดเลือก interface แล้ว Wireshark จะเริ่มดักจับ packet ทันที จะเห็น packet วิ่งๆๆๆ เต็มหน้าจอไปหมด อย่าเพิ่งตกใจนะ
Packet มันเยอะมากกกก วิธีจัดการคือใช้ filter ในช่อง "Apply a display filter..." ลองใส่ filter ง่ายๆ เช่น http เพื่อดูเฉพาะ HTTP traffic หรือ ip.addr == 192.168.1.100 เพื่อดู traffic ที่เกี่ยวข้องกับ IP address นั้นๆ
# ตัวอย่าง Filter ที่ใช้บ่อย
http # ดูเฉพาะ HTTP traffic
tcp.port == 80 # ดู traffic ที่ใช้ port 80 (HTTP)
ip.addr == 192.168.1.100 # ดู traffic ที่เกี่ยวข้องกับ IP address นี้
tcp.flags.syn == 1 # ดูเฉพาะ TCP SYN packets (ใช้ในการเริ่ม connection)
พอกรอง packet ได้แล้ว ลองคลิกที่ packet สักอัน จะเห็นรายละเอียดของ packet นั้นๆ แบ่งเป็นส่วนๆ เช่น Frame, Ethernet, IP, TCP/UDP, Data แต่ละส่วนก็จะมีข้อมูลต่างๆ ที่เราต้องทำความเข้าใจ
Wireshark ไม่ได้แค่จับ packet มาโชว์เฉยๆ แต่มันช่วยเราวิเคราะห์ข้อมูลใน packet ได้ละเอียดมากๆ
ลอง filter ด้วย tcp.flags.syn == 1 จะเห็น packet ที่เป็น TCP SYN packet พวกนี้คือ packet ที่ใช้ในการเริ่มต้น TCP connection (TCP Handshake) จะมี 3 ขั้นตอนคือ SYN, SYN-ACK, ACK
ถ้าเราเห็น packet SYN เยอะๆ แต่ไม่มี SYN-ACK ตอบกลับ อาจจะแปลว่ามีปัญหา network หรือ server ปลายทางไม่ตอบสนอง
ลอง filter ด้วย http แล้วดู packet ที่เป็น HTTP request (GET, POST) จะเห็นข้อมูลที่เราส่งไปให้ server เช่น URL, headers, cookies และ HTTP response (200 OK, 404 Not Found) จะเห็นข้อมูลที่ server ส่งกลับมาให้เรา เช่น HTML code, images
เคยเจอเคสที่เว็บโหลดช้า เพราะรูปภาพมีขนาดใหญ่เกินไป Wireshark ช่วยให้เห็นว่ารูปไหนขนาดใหญ่ผิดปกติ ก็เลยไป optimize รูปนั้นซะ
เวลาเราพิมพ์ชื่อเว็บ (เช่น www.google.com) คอมพิวเตอร์เราต้องไปถาม DNS server ก่อนว่า IP address ของเว็บนั้นคืออะไร ลอง filter ด้วย dns จะเห็น packet ที่เป็นการ query DNS server และ response ที่ได้กลับมา
ถ้า DNS lookup ช้า เว็บก็จะโหลดช้าไปด้วยนะ
| เครื่องมือ | ข้อดี | ข้อเสีย | เหมาะกับ |
|---|---|---|---|
| Wireshark | ละเอียดสุดๆ, Open Source, ฟรี | ซับซ้อน, ใช้ทรัพยากรเยอะ | วิเคราะห์ network เชิงลึก, security analysis |
| tcpdump | เบา, เร็ว, ใช้ใน command line | ไม่ user-friendly, ต้องใช้ command line | capture packet บน server, automation |
| Fiddler | เน้น HTTP/HTTPS, user-friendly | ไม่ละเอียดเท่า Wireshark | debugging web applications |
ดูวิดีโอเพิ่มเติมเกี่ยวกับWireshark จับ Packet ดูอะไรได้:
A: Wireshark เองปลอดภัยครับ แต่ต้องระวังเวลา capture packet บน network ที่ไม่น่าไว้ใจ เพราะเราอาจจะดักจับข้อมูลส่วนตัวของคนอื่นได้ (เช่น password) ต้องใช้ด้วยความระมัดระวัง
A: Wireshark มี features เยอะมาก น้องๆ ค่อยๆ เรียนรู้ไปทีละส่วน เริ่มจาก filter ง่ายๆ ก่อน แล้วค่อยๆ ศึกษา protocol ต่างๆ เพิ่มเติม มี tutorial บน YouTube เยอะแยะเลย SiamCafe Blog ก็อาจจะมีบทความเพิ่มเติมในอนาคตนะ
A: ถ้าเป็น HTTPS traffic เราจะไม่เห็นข้อมูลข้างใน packet ยกเว้นว่าเรามี private key ของ server นั้นๆ ซึ่งปกติเราจะไม่มี ทางแก้คือใช้เครื่องมืออื่นๆ เช่น Fiddler ที่สามารถ decrypt HTTPS traffic ได้
จากตอนที่แล้วที่เราคุยกันเรื่องพื้นฐาน Wireshark คราวนี้มาเจาะลึกเรื่อง Best Practices และคำถามที่พบบ่อยกันดีกว่า สมัยผมทำร้านเน็ตเจอปัญหาเยอะแยะ ต้องใช้ Wireshark นี่แหละช่วยชีวิตไว้หลายครั้ง
อย่าจับ packet แบบไม่เลือกเลย! ข้อมูลมันเยอะมาก อ่านไม่ไหวหรอก สมัยก่อนตอนเน็ตช้าๆ ยิ่งแล้วใหญ่ Wireshark ค้างไปเลยก็มี
ตัวอย่าง ถ้าอยากดูเฉพาะ HTTP traffic ให้ใส่ http ในช่อง Filter หรือถ้าอยากดูเฉพาะ traffic ที่คุยกับ server IP address 192.168.1.100 ก็ใส่ ip.addr == 192.168.1.100
http
ip.addr == 192.168.1.100
tcp.port == 80
พื้นฐาน Network สำคัญมาก! ถ้าไม่รู้ว่า HTTP, TCP, DNS ทำงานยังไง อ่าน packet ก็งงเปล่าๆ ไปศึกษาพื้นฐานพวกนี้ก่อนนะ
อย่าง DNS เนี่ย สมัยก่อนโดน Hack บ่อยมาก ต้องคอยเช็คว่า DNS Resolve ไป IP แปลกๆ รึเปล่า
ดู traffic เยอะๆ จะเริ่มเห็น pattern เอง อะไรที่มันแปลกๆ มักจะมีอะไรซ่อนอยู่ เช่น traffic ไป IP ที่ไม่รู้จัก หรือ packet ขนาดใหญ่ผิดปกติ
เคยเจอเคสเครื่องลูกในร้านติด Malware แล้วส่ง traffic ไป server ต่างประเทศตลอดเวลา Wireshark นี่แหละช่วยจับได้
Wireshark มี tools ช่วยวิเคราะห์ traffic เยอะแยะ เช่น Conversations, Endpoints, Protocol Hierarchy ลองเล่นดู จะเห็นภาพรวม traffic ได้ง่ายขึ้นเยอะ
ผมชอบดู Endpoints มาก มันจะบอกว่าเครื่องไหนคุยกับใครบ้าง แล้วคุยกันเยอะแค่ไหน
HTTPS มัน Encrypt ข้อมูลไง! ถ้าอยากเห็นข้อมูลข้างในต้องมี private key ของ server นั้นๆ ซึ่งปกติเราไม่มี (และไม่ควรมีด้วย!) แต่ถ้าเป็น traffic ที่เราควบคุมได้ เช่น พัฒนาเว็บเอง ก็สามารถ configure Wireshark ให้ decrypt HTTPS ได้ SiamCafe Blog มีบทความสอนเรื่องนี้อยู่ลองไปอ่านดูนะ
ถ้าจับ packet แบบไม่ Filter เลย กินเยอะแน่นอน! RAM นี่ขึ้นพรวดๆ เลย ทางที่ดี Filter ให้แคบที่สุดเท่าที่จะทำได้ แล้วก็ save ไฟล์ capture เป็นระยะๆ จะได้ไม่เปลือง resource
ได้ แต่ต้อง enable "Monitor Mode" บน WiFi adapter ก่อน (ถ้า adapter รองรับ) แล้วก็ต้องระวังเรื่อง Privacy ด้วยนะ อย่าไปจับ packet ของคนอื่นโดยไม่ได้รับอนุญาต
จริง! Wireshark เป็น Open Source Software ใช้ได้ฟรี ไม่มีค่าใช้จ่าย แต่ถ้าอยากสนับสนุน project ก็สามารถ donate ได้
Wireshark เป็น GUI (Graphical User Interface) ส่วน TShark เป็น CLI (Command Line Interface) TShark เหมาะสำหรับ automation หรือใช้บน server ที่ไม่มี GUI ผมใช้ TShark บ่อยเวลาต้องวิเคราะห์ traffic แบบ batch processing
Wireshark เป็นเครื่องมือที่ทรงพลังมาก ถ้าใช้เป็นจะช่วยแก้ปัญหา Network ได้เยอะแยะ ตั้งแต่ปัญหาเล็กๆ น้อยๆ อย่างเน็ตช้า ไปจนถึงปัญหาใหญ่ๆ อย่างโดน Hack ลองฝึกใช้บ่อยๆ แล้วจะเก่งเอง iCafeForex ก็มีทีมงานที่ใช้ Wireshark เก่งๆ หลายคน ถ้าสนใจเรื่อง Network Security ลองติดต่อดูได้
หวังว่าบทความนี้จะเป็นประโยชน์นะ เจอกันใหม่บทความหน้า!