Cyber 101 · บทที่ 5
เครื่องมือสาย Security (ใช้ในแล็บของเรา)
กล่องเครื่องมือของสายป้องกัน และกฎเหล็กก่อนจับเครื่องมือ
มาถึงบทที่หลายคนรอ นั่นคือ "เครื่องมือ" ที่มืออาชีพสายความปลอดภัยใช้กันจริง แต่ขอย้ำก่อนเลยว่าเครื่องมือเหล่านี้เป็นแค่ไขควงกับประแจ ตัวมันเองไม่ดีไม่ชั่ว สิ่งที่ตัดสินคือเราหันมันไปทางไหน ในบทนี้เราจะรู้จักสามเครื่องมือหลักที่ใช้ได้ตลอดชีวิตการทำงาน ได้แก่ proxy อย่าง Burp Suite เครื่องสแกนพอร์ตอย่าง nmap และการคุยกับเว็บด้วยมือผ่าน curl พร้อมชุดเครื่องมือสำเร็จรูปอย่าง Kali หรือ Parrot ทุกอย่างในบทนี้ให้ลองกับระบบของเราเองหรือแล็บที่เราตั้งขึ้นเท่านั้น
เครื่องมือคือส่วนขยายของความเข้าใจ ไม่ใช่ปุ่มเวทมนตร์
คนใหม่มักคิดว่าพอมีเครื่องมือแรง ๆ แล้วจะเก่งขึ้นทันที ความจริงคือเครื่องมือช่วยให้เรา "มองเห็น" สิ่งที่ปกติซ่อนอยู่ เช่น เห็นข้อมูลที่เบราว์เซอร์ส่งจริง ๆ เห็นว่าเครื่องเราเปิดบริการอะไรทิ้งไว้บ้าง แต่การตีความว่าสิ่งที่เห็นแปลว่าอะไร ต้องอาศัยความเข้าใจพื้นฐานจากบทก่อน ๆ เรื่องเว็บ เครือข่าย และช่องโหว่ เครื่องมือจึงขยายสมองเรา ไม่ได้แทนสมองเรา
Proxy ดักฟัง (Burp Suite)
นั่งคั่นกลางระหว่างเบราว์เซอร์กับแอป ทำให้เราอ่านและแก้คำขอ HTTP ของแอปตัวเองได้ทุกบรรทัด เหมาะกับการเข้าใจว่าแอปเราเชื่อข้อมูลจากฝั่งผู้ใช้มากเกินไปหรือเปล่า
Scanner สแกนพอร์ต (nmap)
ถามเครื่องปลายทางว่าเปิดประตูอะไรทิ้งไว้บ้าง ใช้สำรวจว่าแล็บหรือเซิร์ฟเวอร์ของเราเองมีบริการอะไรโผล่ออกมาเกินจำเป็น
HTTP client ด้วยมือ (curl)
ส่งคำขอเองทีละบรรทัดโดยไม่ต้องผ่านเบราว์เซอร์ ทำให้เห็นชัดว่า HTTP แท้จริงเป็นแค่ข้อความ และช่วยทดสอบว่า API ของเราตรวจสิทธิถูกต้องไหม
⚠️ จริยธรรมและกฎหมาย: เครื่องมือแรงไม่ใช่ใบอนุญาต
ทุกเครื่องมือในบทนี้ ใช้ได้เฉพาะกับระบบที่เราเป็นเจ้าของ หรือมีหนังสืออนุญาตเป็นลายลักษณ์อักษรพร้อมขอบเขตชัดเจนเท่านั้น การสแกนพอร์ต ดักคำขอ หรือยิงคำขอไปยังเว็บ เซิร์ฟเวอร์ หรือเครือข่ายของผู้อื่นโดยไม่ได้รับอนุญาต เข้าข่ายการเข้าถึงระบบคอมพิวเตอร์โดยมิชอบตาม พ.ร.บ.ว่าด้วยการกระทำผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ.2560 ซึ่งมีทั้งโทษปรับและจำคุก ข้อความนี้เป็นความรู้ทั่วไปเพื่อเตือนสติ ไม่ใช่คำแนะนำทางกฎหมาย ถ้าไม่แน่ใจว่าเป้าหมายได้รับอนุญาตหรือยัง คำตอบที่ปลอดภัยคือ "อย่าเพิ่ง"
Burp Suite และแนวคิด proxy ดักฟัง HTTP
Burp Suite คือเครื่องมือยอดนิยมของสายทดสอบเว็บ หัวใจของมันคือการทำตัวเป็น proxy หรือคนกลาง เมื่อเราตั้งให้เบราว์เซอร์ส่งทุกคำขอผ่าน Burp ก่อน เราจะหยุดคำขอนั้นไว้กลางทาง อ่านมันทั้งหมด และถ้าอยากลองก็แก้ก่อนปล่อยไปยังแอปของเราเองได้ นี่คือวิธีเข้าใจแบบเห็นกับตาว่า สิ่งที่ผู้ใช้ "ส่งจริง" กับสิ่งที่หน้าเว็บ "แสดงให้เห็น" เป็นคนละเรื่องกัน
proxy คั่นกลางทำงานอย่างไร
ปกติเบราว์เซอร์คุยกับเซิร์ฟเวอร์ตรง ๆ แต่เมื่อมี proxy คั่น เส้นทางจะกลายเป็น เบราว์เซอร์ → Burp → เซิร์ฟเวอร์ ทุกคำขอที่วิ่งผ่านจะโผล่ในหน้าต่างของ Burp ให้เราเห็นทั้ง method, path, headers, cookies และ body มีโหมด Intercept ที่หยุดคำขอไว้ให้เราดูทีละอัน กับ HTTP history ที่บันทึกทุกอย่างที่ผ่านไปแล้ว จุดสำคัญคือมันเผยให้เห็นว่าค่าที่หน้าเว็บ "ล็อกไว้ไม่ให้แก้" เช่นราคาสินค้าหรือรหัสผู้ใช้ จริง ๆ แล้วเป็นแค่ข้อความในคำขอที่แก้ได้ ถ้าแอปฝั่งเซิร์ฟเวอร์ไม่ตรวจซ้ำก็จะเชื่อค่าที่ถูกแก้นั้นทันที นี่คือบทเรียนล้ำค่าสำหรับคนเขียนโปรแกรม
🧪 ลองในแล็บของคุณ
ติดตั้ง OWASP Juice Shop ไว้บนเครื่องตัวเอง (รันบน localhost) ซึ่งเป็นเว็บที่จงใจสร้างมาให้ฝึกอย่างถูกกฎหมาย จากนั้น
1. เปิด Burp Suite เวอร์ชัน Community (ฟรี) แล้วตั้งเบราว์เซอร์ให้ส่งทราฟฟิกผ่าน proxy ของ Burp
2. เข้า Juice Shop ที่รันบนเครื่องเรา แล้วดูใน HTTP history ว่าเวลากดปุ่มต่าง ๆ เบราว์เซอร์ส่งคำขออะไรออกไปบ้าง
3. เปิดโหมด Intercept หยุดคำขอสักอันแล้วอ่านทีละบรรทัด สังเกตว่า cookie และ header หน้าตาเป็นอย่างไร
เป้าหมายของแล็บนี้คือ "อ่านให้ออก" ไม่ใช่ทำลายอะไร แค่เข้าใจว่าคำขอจริงหน้าตาเป็นอย่างไร ก็ถือว่าได้ครบแล้ว และทำเฉพาะกับ Juice Shop ของเราเองเท่านั้น
🛡️ วิธีป้องกัน
เมื่อเรารู้ว่าใคร ๆ ก็ดักและแก้คำขอได้ บทเรียนสำหรับฝั่งพัฒนาคือ อย่าไว้ใจข้อมูลจากฝั่งผู้ใช้เด็ดขาด
• ตรวจสอบและตัดสินใจสำคัญทุกอย่างที่ฝั่งเซิร์ฟเวอร์เสมอ เช่น ราคา สิทธิ์ และจำนวน ห้ามเชื่อค่าที่ส่งมาจากเบราว์เซอร์
• บังคับใช้ HTTPS ทั้งเว็บ เพื่อให้คนที่นั่งดักกลางทางในเครือข่ายจริงอ่านเนื้อหาไม่ได้ (proxy อ่านได้เพราะเราตั้งใจติดตั้งใบรับรองของมันบนเครื่องตัวเองเท่านั้น)
• สำหรับแอปมือถือที่อ่อนไหว พิจารณา certificate pinning เพื่อกันการดักด้วย proxy ปลอม
• ตรวจ input ทุกช่องตามชนิดข้อมูลที่คาดหวัง ไม่ใช่แค่ซ่อนช่องไว้ในหน้าเว็บ
nmap: มองเห็นประตูที่เปิดทิ้งไว้
nmap ย่อมาจาก Network Mapper เป็นเครื่องมือสแกนพอร์ตที่ใช้กันทั่วโลก หน้าที่ของมันคือถามเครื่องปลายทางว่า "เปิดประตูหมายเลขไหนไว้บ้าง และหลังประตูนั้นเป็นบริการอะไร" สำหรับสายป้องกัน nmap คือกระจกส่องตัวเอง ช่วยให้เราเห็นว่าเซิร์ฟเวอร์หรือแล็บของเราเผลอเปิดบริการอะไรทิ้งไว้เกินจำเป็น เพราะทุกพอร์ตที่เปิด คือประตูที่ต้องคอยดูแล
อ่านผลลัพธ์ของ nmap ให้เป็น
เวลาสแกน แต่ละพอร์ตจะถูกรายงานเป็นสามสถานะหลัก คือ open หมายถึงมีบริการรับการเชื่อมต่ออยู่ closed หมายถึงเครื่องตอบกลับแต่ไม่มีบริการฟังพอร์ตนั้น และ filtered หมายถึงมีไฟร์วอลล์บังไว้จน nmap ไม่แน่ใจ ตัวเลือก -sV ช่วยเดาเวอร์ชันของบริการหลังพอร์ต ซึ่งมีประโยชน์มากในแง่ป้องกัน เพราะถ้าเห็นว่าเราเปิดบริการเวอร์ชันเก่าที่มีช่องโหว่รู้กันแล้ว ก็จะได้รีบอัปเดตหรือปิด สิ่งที่ควรตกใจไม่ใช่การถูกสแกน แต่คือการที่เราเปิดพอร์ตไว้เยอะโดยไม่รู้ตัว
สแกนเครื่องของตัวเอง เพื่อดูว่าเราเปิดบริการอะไรทิ้งไว้ (รันบนเครื่องเราเอง)
nmap -sV 127.0.0.1
# ตัวอย่างผลลัพธ์
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9
3000/tcp open http Node.js Express
5432/tcp open postgres PostgreSQL 14
จากผลตัวอย่าง เราจะเห็นทันทีว่าฐานข้อมูล postgres เปิดออกมาให้มองเห็น ซึ่งโดยปกติไม่ควรเปิดสู่ภายนอก นี่คือสิ่งที่การสแกนตัวเองช่วยให้เราจับได้ก่อนคนอื่น
🧪 ลองในแล็บของคุณ
ในแล็บที่แยกออกจากเครือข่ายบ้าน (host-only ตามบทตั้งแล็บ) ให้ลอง
1. สแกนเครื่องตัวเองด้วย nmap 127.0.0.1 แล้วจดว่าเปิดพอร์ตอะไรบ้าง
2. ปิดบริการที่ไม่ได้ใช้ แล้วสแกนใหม่ ดูว่าพอร์ตหายไปจริงไหม
3. ลองใส่ -sV เพื่อดูเวอร์ชันบริการ แล้วฝึกตั้งคำถามว่าอันไหนควรอัปเดต
ทำเฉพาะกับเครื่องหรือ VM ของเราเองในแล็บเท่านั้น ห้ามสแกน IP ของเว็บไซต์ หน่วยงาน หรือเครือข่ายที่เราไม่ได้เป็นเจ้าของโดยเด็ดขาด
🛡️ วิธีป้องกัน
เมื่อเข้าใจว่าพอร์ตที่เปิดคือพื้นที่ให้ถูกโจมตี การป้องกันคือลดพื้นที่นั้นให้เหลือน้อยที่สุด
• ปิดทุกบริการที่ไม่ได้ใช้ เปิดเฉพาะพอร์ตที่จำเป็นจริง ๆ (หลัก least attack surface)
• ตั้งไฟร์วอลล์ให้ฐานข้อมูลและบริการภายใน มองเห็นได้เฉพาะจากเครื่องที่ควรเข้าถึง ไม่เปิดสู่อินเทอร์เน็ต
• อัปเดตเวอร์ชันบริการสม่ำเสมอ ปิดช่องโหว่ที่ประกาศแล้ว
• เฝ้าดู log การเชื่อมต่อผิดปกติ และพิจารณาเครื่องมืออย่าง fail2ban เพื่อชะลอการเดาซ้ำ ๆ
⚠️ จริยธรรมและกฎหมาย
การสแกนพอร์ตของระบบผู้อื่นโดยไม่ได้รับอนุญาต แม้จะไม่ได้เจาะเข้าไป ก็อาจถูกตีความว่าเป็นการสำรวจเพื่อเข้าถึงระบบโดยมิชอบ และหลายองค์กรถือเป็นสัญญาณเตือนภัยที่ต้องดำเนินคดี ถ้าอยากฝึกสแกนกับเป้าที่ยินยอม ให้ใช้เครื่องหรือแล็บของเราเอง หรือเป้าหมายที่แพลตฟอร์มฝึกจัดให้โดยเฉพาะ อย่าเอา IP สาธารณะขององค์กรใดมาลองเล่นเด็ดขาด
curl: คุยกับเว็บด้วยมือ
curl คือเครื่องมือบรรทัดคำสั่งสำหรับส่งคำขอ HTTP ด้วยตัวเอง ไม่ต้องผ่านหน้าเว็บสวย ๆ เลย พอเราส่งคำขอเองได้ เราจะเข้าใจความจริงข้อหนึ่งที่สำคัญมาก นั่นคือ HTTP แท้จริงเป็นแค่ข้อความไม่กี่บรรทัด ประกอบด้วย method, path, headers และ body เท่านั้น เบราว์เซอร์แค่ช่วยห่อข้อความนี้ให้สวยงาม แต่ใครก็สร้างข้อความนี้ขึ้นเองได้ ซึ่งเป็นทั้งพลังในการทดสอบและเป็นเหตุผลว่าทำไมเซิร์ฟเวอร์ห้ามไว้ใจฝั่งผู้ใช้
อ่านและเขียน HTTP ทีละบรรทัด
ด้วย curl เราเลือก method ได้ด้วย -X ใส่ header เองด้วย -H แนบข้อมูลด้วย -d และดู header ที่ตอบกลับมาด้วย -i ทั้งหมดนี้ทำให้เราทดสอบพฤติกรรมของ API ตัวเองได้ตรงจุด เช่น ลองเรียกหน้าที่ควรต้องล็อกอินก่อน แล้วดูว่าเซิร์ฟเวอร์ตอบ 401 หรือ 403 อย่างที่ควรไหม หรือลองส่งข้อมูลผิดชนิดเพื่อดูว่าระบบตรวจสอบและปฏิเสธถูกต้องหรือเปล่า
คุยกับแอปของเราเองบน localhost เพื่อดู header และสถานะที่ตอบกลับ
# ดู header และ status code ที่แอปเราตอบกลับ
curl -i http://localhost:3000/
# ส่งคำขอแบบมี header เอง ไปยัง API ของเราเอง
curl -X POST http://localhost:3000/api/login \
-H "Content-Type: application/json" \
-d '{"user":"test","pass":"test"}'
สังเกตว่าเราชี้ไปที่ localhost ซึ่งคือเครื่องของเราเอง การฝึก curl ที่ดีคือใช้ตรวจสอบว่าแอปที่เรากำลังพัฒนา ตอบสนองอย่างถูกต้องปลอดภัยในทุกกรณี ไม่ใช่การยิงคำขอไปหาเว็บของคนอื่น
🧪 ลองในแล็บของคุณ
รันเว็บแอปเล็ก ๆ ของตัวเอง หรือ Juice Shop บน localhost แล้ว
1. ใช้ curl -i เรียกหน้าแรก อ่าน status code และ header ด้านความปลอดภัย เช่น มี Content-Security-Policy หรือ Set-Cookie ตั้งค่าอย่างไร
2. ลองเรียก endpoint ที่ควรต้องล็อกอินก่อน โดยไม่แนบ token ดูว่าเซิร์ฟเวอร์ปฏิเสธถูกต้องไหม
3. เปรียบเทียบผลลัพธ์ที่ได้จาก curl กับที่เห็นในเบราว์เซอร์ เพื่อยืนยันว่าเข้าใจตรงกัน
ทุกคำสั่งชี้ไปที่ localhost หรือแล็บของเราเองเท่านั้น
🛡️ วิธีป้องกัน
เพราะใคร ๆ ก็ประดิษฐ์คำขอเองได้ด้วย curl การป้องกันจึงต้องอยู่ที่เซิร์ฟเวอร์เสมอ
• ตรวจสิทธิและ token ทุกครั้งที่ฝั่งเซิร์ฟเวอร์ ไม่ว่าคำขอจะมาจากเบราว์เซอร์หรือเครื่องมือใด
• ตรวจความถูกต้องของ input ตามชนิดและช่วงที่ยอมรับได้ แล้วปฏิเสธส่วนที่ผิด
• จำกัดอัตราคำขอ (rate limiting) เพื่อกันการยิงซ้ำจำนวนมาก
• ตั้ง security headers ให้ครบ และไม่เปิดเผยรายละเอียด error ที่มากเกินจำเป็นในคำตอบ
Kali และ Parrot: กล่องเครื่องมือสำเร็จรูปในแล็บ
แทนที่จะติดตั้งเครื่องมือทีละตัว มีระบบปฏิบัติการที่รวบรวมเครื่องมือสายความปลอดภัยมาให้พร้อมใช้ ที่นิยมที่สุดคือ Kali Linux และ Parrot OS วิธีใช้ที่ถูกต้องคือเอามันไปติดตั้งเป็น VM ในแล็บของเรา แล้วใช้เป็น "โต๊ะทำงาน" สำหรับฝึกกับเป้าหมายที่เราเป็นเจ้าของหรือได้รับอนุญาตเท่านั้น การมีกล่องเครื่องมือครบ ไม่ได้เปลี่ยนกติกาเรื่องเป้าหมายเลยแม้แต่น้อย
Kali Linux
distro ที่ได้รับความนิยมสูงสุด มีเครื่องมือครบและเอกสารเยอะ เหมาะกับผู้เริ่มที่อยากมีสภาพแวดล้อมมาตรฐานที่คนส่วนใหญ่ใช้กัน ติดตั้งเป็น VM แล้วทำ snapshot ไว้ย้อนกลับได้
Parrot OS
ทางเลือกที่เบากว่าเล็กน้อย มาพร้อมเครื่องมือคล้ายกันและเน้นเรื่องความเป็นส่วนตัว เหมาะกับเครื่องที่ทรัพยากรจำกัด ใช้แนวคิดเดียวกันคือรันในแล็บที่แยกออกมา
ติดตั้งเองบน distro ปกติ
ถ้าใช้ Ubuntu หรือ distro ที่ถนัดอยู่แล้ว ก็ติดตั้งเฉพาะเครื่องมือที่ต้องใช้ได้ วิธีนี้ช่วยให้เข้าใจว่าแต่ละเครื่องมือทำอะไร แทนที่จะได้มาทั้งกล่องโดยไม่รู้จัก
🧪 ลองในแล็บของคุณ
1. ติดตั้ง Kali หรือ Parrot เป็น VM ใน VirtualBox โดยตั้งเครือข่ายแบบ host-only เพื่อแยกออกจากเครือข่ายบ้าน
2. ทำ snapshot ทันทีหลังติดตั้งเสร็จ เพื่อให้ย้อนกลับสู่สภาพสะอาดได้เสมอ
3. ตั้ง VM เป้าหมายที่จงใจมีช่องโหว่ (เช่น Juice Shop หรือ DVWA) ไว้อีกเครื่องในแล็บเดียวกัน แล้วฝึก Burp, nmap และ curl กับเป้าหมายในแล็บของเราเองเท่านั้น
แล็บสองเครื่องที่คุยกันเองในเครือข่ายปิด คือสนามซ้อมที่ปลอดภัยและถูกกฎหมายที่สุด
⚠️ จริยธรรมและกฎหมาย
การติดตั้ง Kali หรือ Parrot ไม่ผิดกฎหมาย มันเป็นเพียงเครื่องมือ แต่การเอาเครื่องมือในนั้นไปใช้กับระบบของผู้อื่นโดยไม่ได้รับอนุญาต ผิดกฎหมายเต็มขั้นตาม พ.ร.บ.คอมพิวเตอร์ ขอย้ำหลักเดิมที่ใช้ได้กับทั้งบท คือ เป้าหมายต้องเป็นของเรา หรือได้รับอนุญาตเป็นลายลักษณ์อักษรพร้อมขอบเขตชัดเจน ถ้าอยากฝึกกับเป้าหมายจริงที่ยินยอม ให้ไปที่แพลตฟอร์มฝึกที่ถูกกฎหมายในบทสุดท้าย เช่น PortSwigger Web Security Academy หรือ picoCTF ซึ่งเปิดให้ลองได้อย่างสบายใจ
สรุปบทและคำถามทบทวน
เครื่องมือทั้งสามคือชุดพื้นฐานที่ใช้ได้ตลอดเส้นทาง Burp ช่วยให้เห็นว่าคำขอจริงเป็นอย่างไรและแก้ได้ nmap ช่วยให้เห็นว่าเราเปิดประตูอะไรทิ้งไว้ และ curl ช่วยให้คุยกับเว็บด้วยมือจนเข้าใจว่า HTTP เป็นแค่ข้อความ ทั้งหมดนี้มีคุณค่ามหาศาลเมื่อใช้เพื่อตรวจและอุดช่องโหว่ของระบบเราเอง และกลายเป็นเรื่องผิดกฎหมายทันทีเมื่อหันไปหาระบบของผู้อื่นโดยไม่ได้รับอนุญาต