วันศุกร์, 6 กุมภาพันธ์ 2569

Brute Force บน Linux ง่ายหรือยาก?

คำตอบคือ “ทางเทคนิคนั้นง่าย แต่ทางปฏิบัตินั้นขึ้นอยู่กับดวงและความสะเพร่า” ครับ

  • ทำไมถึงง่าย เพราะมีเครื่องมือสำเร็จรูปเยอะมาก (เช่น Hydra, Medusa หรือ Ncrack) แค่ป้อน IP เป้าหมายกับไฟล์รวมรหัสผ่าน (Wordlist) โปรแกรมก็จะรันให้เองอัตโนมัติ
  • ทำไมถึงยาก หากระบบมีการตั้งค่าความปลอดภัยพื้นฐาน เช่น การจำกัดจำนวนครั้งในการกรอกรหัส หรือใช้รหัสผ่านที่ซับซ้อน การ Brute Force อาจต้องใช้เวลาเป็นร้อยปีถึงจะสำเร็จ

👣 จะมีการทิ้งร่องรอยไว้ไหม?

ทิ้งไว้แน่นอนครับ และร่องรอยนั้น “ชัดเจนมาก” ด้วย เมื่อมีการพยายามล็อกอินเข้ามาในระบบ Linux ทุกๆ ครั้ง (ไม่ว่าจะสำเร็จหรือไม่) ระบบจะบันทึกไว้ในไฟล์ Log เสมอ หากคุณรัน Brute Force ใส่เซิร์ฟเวอร์สักแห่ง ผู้ดูแลระบบจะเห็นบรรทัด Log พุ่งขึ้นเป็นหมื่นเป็นแสนบรรทัดในพริบตา

แหล่งตรวจสอบร่องรอยหลัก:

  1. /var/log/auth.log (สำหรับ Debian/Ubuntu) หรือ /var/log/secure (สำหรับ RedHat/CentOS): เก็บประวัติการ Login ทั้งหมด
  2. คำสั่ง lastb: ใช้ดูรายการที่พยายามล็อกอินแต่ล้มเหลว (Failed login attempts)
  3. คำสั่ง last: ดูว่าใครล็อกอินสำเร็จเข้ามาบ้าง จาก IP ไหน เวลาเท่าไหร่

💡 ยกตัวอย่างสถานการณ์จริง

ลองจินตนาการว่ามีแฮกเกอร์คนหนึ่งชื่อ “นาย A” พยายามจะเจาะเข้าเซิร์ฟเวอร์ของบริษัทคุณ

1. ขั้นตอนการโจมตี (The Attack)

นาย A ใช้เครื่องมือที่ชื่อว่า Hydra โดยเล็งไปที่ช่องทาง SSH (พอร์ต 22) ของเซิร์ฟเวอร์: hydra -l root -P common_passwords.txt ssh://192.168.1.50

  • สิ่งที่เกิดขึ้น: โปรแกรมจะพ่นรหัสผ่านจากไฟล์ common_passwords.txt ใส่เซิร์ฟเวอร์รัวๆ เช่น 123456, password, admin123

2. สิ่งที่ระบบบันทึกไว้ (The Footprint)

ถ้าผู้ดูแลระบบเข้าไปเช็คไฟล์ Log จะเจอข้อความซ้ำๆ แบบนี้:

Jan 28 20:00:01 server sshd[1234]: Failed password for root from 1.2.3.4 port 5678 ssh2 Jan 28 20:00:02 server sshd[1234]: Failed password for root from 1.2.3.4 port 5679 ssh2 (มีแบบนี้อีก 5,000 บรรทัด)

3. ผลลัพธ์

  • ถ้าคุณใช้รหัสผ่านง่าย: นาย A จะเข้าถึงเครื่องได้ และทิ้งประวัติ IP ไว้ในไฟล์ last
  • ถ้าคุณใช้รหัสผ่านยาก: นาย A จะเสียเวลาฟรี และถูกระบบป้องกัน (เช่น Fail2Ban) เตะโด่งและแบน IP ทิ้งทันที

🛠️ วิธีป้องกันตัวเอง (ฉบับใช้งานได้จริง)

หากคุณเป็นเจ้าของเครื่อง Linux นี่คือสิ่งที่คุณควรทำเพื่อไม่ให้ใครมา Brute Force ได้ง่ายๆ:

  • เปลี่ยนพอร์ต SSH: เลิกใช้พอร์ต 22 แล้วไปใช้เลขอื่นที่คนนึกไม่ถึง (เช่น 2299)
  • ติดตั้ง Fail2Ban: โปรแกรมนี้จะคอยดู Log ถ้าใครพิมพ์รหัสผิดเกิน 3-5 ครั้ง มันจะแบน IP นั้นทันที 24 ชั่วโมง
  • ใช้ SSH Key แทนรหัสผ่าน: วิธีนี้ปลอดภัยที่สุด เพราะต่อให้แฮกเกอร์มีรหัสผ่าน แต่ถ้าไม่มีไฟล์ “กุญแจ” ในเครื่องเขาก็เข้าไม่ได้
  • ปิดการ Login ของ Root: ไม่ยอมให้ล็อกอินด้วยชื่อ root โดยตรง (เพราะแฮกเกอร์ทุกคนรู้ว่ามี User นี้)

สรุปสั้นๆ: การ Brute Force เหมือนการเอาหัวชนกำแพงครับ ถ้ากำแพงหนา (รหัสยาก) หัวคนชนก็แตกเอง แต่ถ้ากำแพงผุ (รหัสง่าย) แค่ผลักเบาๆ ก็พัง แต่ไม่ว่าจะทางไหน คุณทิ้งรอยเท้าไว้บนทรายหน้ากำแพงแน่นอน

🛡️ บทบาทของ Firewall ต่อการ Brute Force

หากไม่มี Firewall แฮกเกอร์สามารถยิงรหัสผ่านใส่เซิร์ฟเวอร์ได้แบบไม่จำกัดความเร็ว (Unthrottled) แต่เมื่อมี Firewall ขั้นตอนจะยากขึ้นดังนี้:

1. การตรวจจับความผิดปกติ (Rate Limiting)

Firewall สมัยใหม่ (เช่น iptables, nftables หรือ Hardware Firewall) สามารถตั้งค่าได้ว่า “ถ้า IP นี้เชื่อมต่อเข้ามาเกิน 10 ครั้งภายใน 1 นาที ให้บล็อกทันที”

  • ผลกระทบ: แฮกเกอร์ไม่สามารถใช้เครื่องมือรันรหัสผ่านรัวๆ ได้อีกต่อไป ต้องส่งรหัสผ่านช้าลงมาก (Slow Brute Force) ซึ่งอาจต้องใช้เวลาหลายปีถึงจะสุ่มเจอ

2. การบล็อกตามภูมิภาค (Geo-Blocking)

หากเซิร์ฟเวอร์ของคุณใช้งานเฉพาะในประเทศไทย คุณสามารถตั้ง Firewall ให้ ปฏิเสธ (Drop) ทุกการเชื่อมต่อที่มาจากต่างประเทศได้

  • ผลกระทบ: ต่อให้แฮกเกอร์มี Super Computer ในต่างประเทศ ก็ไม่สามารถแม้แต่จะ “เคาะประตู” พอร์ต SSH ของคุณได้เลย

🕵️ ร่องรอยที่ทิ้งไว้เมื่อมี Firewall

เมื่อมี Firewall ร่องรอยการโจมตีจะไม่ได้อยู่แค่ใน /var/log/auth.log ของ Linux อีกต่อไป แต่มันจะไปปรากฏใน Firewall Logs ด้วย:

  • Packet Drops: ใน Log ของ Firewall จะบันทึกไว้ว่ามีการ “Drop” หรือ “Reject” ข้อมูลจาก IP ไหน พยายามเข้าพอร์ตอะไร
  • IP Reputation: หากแฮกเกอร์ใช้ IP เดิมซ้ำๆ Firewall ที่มีความฉลาด (Next-Gen Firewall) จะขึ้นบัญชีดำ IP นั้นและแชร์ข้อมูลไปยังเครือข่ายความปลอดภัยทั่วโลก ทำให้แฮกเกอร์คนนั้นโจมตีที่ไหนไม่ได้อีก

💡 สถานการณ์จำลอง: การปะทะกันระหว่าง Hacker vs Firewall

เหตุการณ์: นาย A พยายามใช้บอทเน็ต (Botnet) สุ่มรหัสผ่านเข้าเซิร์ฟเวอร์ที่มี Firewall กั้น

  1. วินาทีที่ 1-5: บอทเน็ตส่งรหัสผ่าน 50 ชุดแรก -> Firewall ปล่อยผ่านเพราะคิดว่าเป็น User ปกติ
  2. วินาทีที่ 6: Firewall ตรวจพบพฤติกรรม “ผิดปกติ” (Connection per second สูงเกินค่าที่ตั้งไว้)
  3. วินาทีที่ 7: Firewall ทำการ “Blackhole” IP นั้นทันที (ตัดการเชื่อมต่อโดยไม่ตอบโต้อะไรเลย)
  4. ผลลัพธ์: นาย A จะเห็นหน้าจอโปรแกรมค้าง (Timeout) และไม่สามารถรู้ได้เลยว่ารหัสที่สุ่มไปนั้นถูกหรือผิด

🛠️ วิธีตั้งค่า Firewall บน Linux แบบง่าย (UFW)

สำหรับผู้ใช้งาน Ubuntu/Debian การป้องกัน Brute Force เบื้องต้นทำได้ง่ายมากด้วยคำสั่งเดียว

sudo ufw limit ssh

  • คำสั่งนี้ทำงานอย่างไร: มันจะอนุญาตให้เชื่อมต่อ SSH ได้ปกติ แต่ถ้ามีการพยายามเชื่อมต่อจาก IP เดิมซ้ำๆ เกินขีดจำกัด Firewall จะบล็อก IP นั้นโดยอัตโนมัติเป็นเวลาช่วงหนึ่ง

สรุป การมี Firewall ทำให้การ Brute Force “ยากขึ้นมหาศาล” และเพิ่มร่องรอยการโจมตีไปอยู่ในระดับ Network Layer ซึ่งผู้ดูแลระบบที่เก่งๆ จะตรวจเจอตั้งแต่ยังไม่ทันเริ่มสุ่มรหัสผ่านคำแรกด้วยซ้ำครับ