หากเคยดู authentication logs ของเซิร์ฟเวอร์ คุณจะรู้ว่าเซิร์ฟเวอร์ใดๆ ที่เชื่อมอินเทอร์เน็ต อยู่ภายใต้การโจมตีพยายามล็อกอินจากแฮกเกอร์ตลอดเวลา
แม้เซิร์ฟเวอร์จะเป็น hobby server ที่ไม่รู้จัก สคริปต์อัตโนมัติจะหามันเจอ และพยายาม brute force เข้าผ่าน SSH ตลอด แม้จะไม่น่าจะสำเร็จหากใช้รหัสผ่านซับซ้อนหรือมาตรการรักษาความปลอดภัยอื่นๆ แต่ยังมีโอกาสที่จะประสบความสำเร็จ
โชคดีที่มีวิธีที่มีประโยชน์และสนุกสนานในการกับักแฮกเกอร์ในเซิร์ฟเวอร์ และทำให้พวกเขาเบื่อเกินไปจนไม่ทำร้ายได้
SSH Honeypot คืออะไร?
ง่ายๆ คือ SSH honeypot คือ decoy (สิ่งปลอม) ที่ทำให้ดูเหมือน low-hanging fruit (เป้าหมายง่าย) เพื่อดึงดูด cybercriminals ให้มากัดกิน แต่จริงๆ แล้วมันไม่ใช่เป้าหมายจริง และแฮกเกอร์มักไม่รู้จนกว่าจะสายเกินไป
Honeypot สามารถเป็นรูปแบบต่างๆ และมีประโยชน์หลายอย่าง บางครั้งเป็นแค่การเบี่ยงเบน แต่บางครั้งใช้เก็บข้อมูลเกี่ยวกับผู้โจมตี
หน่วยงานรัฐหลายแห่งใช้ honeypots จับอาชญากร ดึงดูดให้โจมตี แล้วเก็บข้อมูลเพื่อจับกุมภายหลัง แต่ honeypots ก็สามารถใช้โดย system admins ของบริษัท หรือ hobbyists ที่รัน Linux server เพื่อความสนุกได้เช่นกัน
ทำไมต้องใช้ SSH Honeypot?
มีหลายเหตุผลที่อยาก implement SSH honeypot บนเซิร์ฟเวอร์ บางกรณีอยากบล็อกการเชื่อมต่อจากพวกเขาในอนาคต บางกรณีอยากหลอกล่อให้พวกเขาไม่อยู่เป้าหมายจริงในระบบ หรือเพื่อการศึกษา: เรียนรู้ว่าการโจมตีทำงานอย่างไร
สำหรับคู่มือนี้ ใช้ honeypot เป็นการเบี่ยงเบนหลัก โดยเฉพาะเบี่ยงเบนแฮกเกอร์จากการโจมตีส่วนที่เปราะบางของเซิร์ฟเวอร์ และทำให้พวกเขา忙เกินไปจนไม่โจมตีเซิร์ฟเวอร์ของคนอื่น
และในกรณีนี้ วิธีนี้ยังทำให้ได้หัวเราะอีกด้วย
การกับักใน SSH
เป้าหมายคือกับักแฮกเกอร์เมื่อพวกเขาพยายาม brute force SSH login มีหลายวิธี แต่ง่ายที่สุดคือส่ง SSH banner ที่ยาวมากๆ แบบช้าๆ
วิธีนี้ทำให้สคริปต์อัตโนมัติของแฮกเกอร์ค้างรอ banner นี้สามารถใช้เวลานานหลายชั่วโมง หากไม่ใช่วันหรือสัปดาห์ เนื่องจากสคริปต์เป็นอัตโนมัติ แฮกเกอร์มักไม่ใส่ใจ และจะไม่รู้ว่าค้างจนกว่าจะผ่านไปนานแล้ว
สิ่งนี้บางครั้งเรียกเล่นๆ ว่า "SSH tarpit" เพราะสคริปต์ของแฮกเกอร์ติดอยู่ในมันและไม่สามารถออกได้ด้วยตัวเอง
ต้องมีความรู้พื้นฐาน SSH หากไม่แน่ใจ อ่าน คู่มือ SSH สำหรับผู้เริ่มต้น
endlessh
โปรแกรมที่ใช้คือ endlessh โดย skeeto
หลังล็อกอินเข้าเซิร์ฟเวอร์ ให้ clone repository (ต้องมี git ติดตั้ง)
git clone https://github.com/skeeto/endlessh
เมื่อมี repository บนเซิร์ฟเวอร์แล้ว เข้าไดเรกทอรีและ compile
cd endlessh make
อาจมี error ระหว่าง compile หมายถึงขาด dependency ที่โปรแกรมต้องการ ตรวจสอบว่า dependency ไหนขาด แล้วติดตั้งด้วย package manager ของดิสทริบิวชัน
เมื่อ compile สำเร็จ ย้ายไปที่ bin directory เพื่อให้อยู่ใน path
sudo mv endlessh /usr/local/bin
ตรวจสอบว่าตรวจจับได้ใน path
which endless
ควรแสดง path /usr/local/bin/endlessh หากไม่ใช่ ตรวจสอบว่าย้ายไปไดเรกทอรีที่ถูกต้อง
ต่อไป ทำให้โปรแกรมเป็น service daemon เพื่อทำงานเป็น systemd service
sudo cp util/endlessh.service /etc/systemd/system/
เมื่อเสร็จ เปิดใช้งาน service เพื่อรันในพื้นหลัง
sudo systemctl enable endlessh
โดยค่าเริ่มต้น endlessh ทำงานบนพอร์ตเหนือ 1024 แต่เราต้องการให้ใช้พอร์ต SSH เริ่มต้น (22) เพื่อหลอกแฮกเกอร์ ต้องแก้ไข service file
ตัวอย่างใช้ nano แก้ไข config file แต่ใช้ text editor ใดก็ได้
sudo nano /etc/systemd/system/endlessh.service
เปิดไฟล์แล้ว uncomment บรรทัดนี้โดยลบ # ออก:
#AmbientCapabilities=CAP_NET_BIND_SERVICE
จากนั้นเพิ่ม # นำหน้าบรรทัดนี้:
PrivateUsers=true
บันทึกไฟล์ และรันคำสั่ง:
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
ต้องสร้างและตั้งค่า config file ให้ endlessh รู้ว่าควรทำงานบนพอร์ตไหน สร้างไดเรกทอรีใหม่ แล้วสร้าง config file
sudo mkdir -p /etc/endlessh sudo vim /etc/endlessh/config
Config file ต้องการแค่บรรทัดเดียว บอกให้ endlessh รันบนพอร์ต 22 (พอร์ต SSH เริ่มต้น) ทำให้เป็นเป้าหมายน่าสนใจสำหรับแฮกเกอร์ พวกเขาจะเห็นพอร์ต SSH เปิดอยู่ แล้วพยายามแฮก
ใส่ใน config file:
Port 22
เริ่ม service endlessh:
sudo systemctl start endlessh
เสร็จแล้ว! endlessh ทำงานบนพอร์ต SSH เริ่มต้น และกำลังกับักแฮกเกอร์อยู่แล้ว
ทดสอบการทำงาน
เพื่อให้แน่ใจว่า honeypot ทำงานตามที่ตั้งใจ ให้ลองทำเป็นแฮกเกอร์ดู โดยพยายามเข้าถึง SSH บนเซิร์ฟเวอร์ของคุณ
ssh root@<server-ip-address>
หากตั้งค่าถูกต้อง ควรเห็นคำสั่ง ssh ค้างอยู่ ไม่ทำอะไรเลย ลองดูว่าจริงๆ แล้วเกิดอะไรขึ้นเมื่อคุณ (หรือแฮกเกอร์จริง) ให้คำสั่งนี้
พิมพ์คำสั่งเดิมแต่เพิ่มฟลาก -vvv เพื่อใช้ verbose option
ssh -vvv root@<server-ip-address>
ตอนนี้ควรเห็นชัดเจนว่าเครื่องมือเล็กๆ นี้กับักคุณไว้และไม่ให้เข้าถึง SSH บนเซิร์ฟเวอร์ มันส่ง SSH banner ขนาดใหญ่ ทีละบรรทัด แบบช้าๆ
และแน่นอน เนื่องจากแฮกเกอร์ทำอัตโนมัติด้วยบอท พวกเขาจะไม่รู้ว่ากำลังเกิดขึ้นจนกว่าคุณจะเสียเวลาไปหลายชั่วโมง หากไม่ใช่วันๆ
คำถามที่พบบ่อย
1. จะป้องกันแฮกเกอร์ไม่ให้เข้าถึง SSH ได้ไหม?
แม้จะเป็น deterrent ที่ดี แต่ไม่รับประกันหยุดแฮกเกอร์หมด แฮกเกอร์ที่ระมัดระวังจะสังเกตในที่สุดว่าคุณสร้าง honeypot และอาจลองพอร์ตอื่นเพื่อเข้าถึง SSH
แต่ควรเพียงพอสำหรับแฮกเกอร์ที่หา low-hanging fruit เท่านั้น
2. ถ้าโปรแกรมนี้รันบนพอร์ตเริ่มต้น ใช้ SSH ยังไง?
ต้องเปลี่ยนพอร์ตที่ SSH รันอยู่ นี่เป็น best practice แม้ไม่มี honeypot เพราะแฮกเกอร์ลองพอร์ตเริ่มต้นก่อนเสมอ
3. มีตัวเลือกอื่นเพิ่มใน config file ได้ไหม?
ได้ มีการตั้งค่าอื่นๆ หลายอย่าง รวมถึงเปลี่ยนความเร็ว delay ดูรายการตัวเลือกใน sample configuration file บน Github repository
ข้อสรุป
ตอนนี้คุณเรียนรู้การตั้ง honeypot บนเซิร์ฟเวอร์เพื่อกับักแฮกเกอร์และทำให้เบื่อเกินไปจนไม่โจมตีอะไรต่อ แต่นี่ยังไกลจากวิธีเดียวในการรักษาความปลอดภัย SSH
ดู บทความการใช้ encryption keys ล็อกอิน SSH เพื่อรักษาความปลอดภัยเซิร์ฟเวอร์ให้มากขึ้น