1 คะแนน โดย GN⁺ 2024-12-26 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Portspoof ทำให้พอร์ต TCP ทั้ง 65535 พอร์ตดูเหมือนเปิดอยู่ และจำลองลายเซ็นของบริการ เปลี่ยนขั้นตอน reconnaissance ของผู้โจมตีจากการสแกนที่รวดเร็วให้กลายเป็นงานที่ยาวนานและมีต้นทุนสูง
  • ส่งคืน SYN+ACK ต่อทุกความพยายามเชื่อมต่อ และใช้ ลายเซ็นบริการแบบไดนามิก ที่อิง regular expression มากกว่า 9000 รายการ เพื่อให้แต่ละพอร์ตตอบกลับเหมือนบริการจริงที่แตกต่างกัน
  • กำหนด โหมดส่งต่อแบบผสม เช่น banner ทันที, การตอบกลับแบบหน่วงเวลา, หรือคงสถานะไม่ตอบสนอง ให้แต่ละพอร์ตตั้งแต่เริ่มต้น และใส่ jitter ในเวลาคงการเชื่อมต่อ ทำให้การกรองด้วย timing ทำได้ยากขึ้น
  • ในการตั้งค่า tarpit เริ่มต้น การสแกนเวอร์ชันเต็ม nmap -sV -p- อาจใช้เวลา มากกว่า 10 ชั่วโมง และสร้างข้อมูลปลอมหลายร้อย MB ทำให้เวลาและ thread ของ scanner ฝั่งผู้โจมตีถูกใช้ไป
  • การใช้งานจริงใช้ event loop epoll แบบ thread เดียว ทำงานใน user space โดยไม่ต้องใช้สิทธิ์ root และ bind ได้เพียง หนึ่งพอร์ต TCP ต่อ instance ที่รัน

ปัญหาที่ Portspoof ต้องการแก้

  • เป้าหมายของ Portspoof คือทำให้ การ reconnaissance ของผู้โจมตีช้าลง แพงขึ้น และเชื่อถือได้ยากขึ้น
  • แทนที่การสแกน Nmap ปกติ 5 วินาทีจะ map บริการจริงของระบบ เมื่ออยู่หน้า Portspoof พอร์ตทั้ง 65535 พอร์ตจะดูเหมือนเปิดทั้งหมด
  • แต่ละพอร์ตดูเหมือนบริการจริงที่แตกต่างกัน และถูกออกแบบให้ไม่มีวิธีแยกได้อย่างรวดเร็วว่าพอร์ตใดคือบริการจริง

ฟีเจอร์หลัก

  • ตอบกลับเหมือนเปิดพอร์ต TCP ทั้ง 65535 พอร์ต

    • แทนที่จะบอกว่าพอร์ตเป็น CLOSED หรือ FILTERED จะส่งคืน SYN+ACK ต่อทุกความพยายามเชื่อมต่อ
  • การจำลองบริการ

    • ใช้ลายเซ็นบริการแบบไดนามิกที่อิง regular expression มากกว่า 9000 รายการ
    • แต่ละพอร์ตตอบ probe ของ scanner ด้วยตัวตนบริการที่น่าเชื่อถือและแตกต่างกัน
  • โหมดส่งต่อแบบผสม

    • แต่ละพอร์ตได้รับโปรไฟล์พฤติกรรมที่แตกต่างกันเมื่อเริ่มต้น
    • ผสมทั้งการส่ง banner ทันที, การตอบกลับแบบหน่วงเวลา, และโหมดคงสถานะไม่ตอบสนอง
    • เวลาคงการเชื่อมต่อถูกกระจายครอบคลุมช่วงกว้าง ทำให้การตรวจจับเวอร์ชันทั้งช่วง nmap -sV -p- เกินขีดจำกัดที่ใช้งานได้จริง
  • การป้องกันเชิงรุก

    • สามารถใช้เป็น “Exploitation Framework Frontend” เพื่อเล็งช่องโหว่ของเครื่องมือสแกนของผู้โจมตีเอง
  • โมเดลการรันที่เบา

    • ทำงานใน user space
    • ไม่ต้องใช้สิทธิ์ root
    • bind ได้เพียง หนึ่งพอร์ต TCP ต่อ instance ที่รัน
    • ใช้ CPU และหน่วยความจำน้อย

วิธีทำให้ scanner และการตรวจจับเวอร์ชันสับสน

  • ในการสแกนพอร์ตแบบง่าย แม้แต่ช่วงเล็ก ๆ เช่นพอร์ต 1~20 ก็จะปรากฏเป็น open ทั้งหมด
    • ตัวอย่าง output จะแสดงชื่อบริการปะปนกัน เช่น tcpmux, compressnet, echo, daytime, ftp-data
  • ในการสแกนเพื่อตรวจจับเวอร์ชัน จะส่งคืนลายเซ็นแบบไดนามิกที่ถูกต้องต่อ service probe
    • ในตัวอย่างพอร์ต 1~100 จะปรากฏบริการและสตริงเวอร์ชันหลากหลาย เช่น irc, http, pop3, ssh, ftp, smtp, telnet, tor-control
  • ผลคือผู้โจมตีระบุหมายเลขพอร์ตที่ระบบใช้งานจริงได้ยาก
  • การสแกนเวอร์ชันเต็ม nmap -sV -p- ในการตั้งค่า tarpit เริ่มต้นจะใช้เวลา มากกว่า 10 ชั่วโมง และสร้างข้อมูลปลอมหลายร้อย MB
  • scanner เสียเวลาและ thread ไปกับการเชื่อมต่อที่ไม่นำไปสู่ผลลัพธ์จริง

แนวทางออกแบบ: epoll tarpit แบบ thread เดียว

  • บริการจริงอย่าง SSH, SMTP, FTP, HTTP จะส่ง banner คงการเชื่อมต่อ และรอ input จาก client
  • การจำลองให้น่าเชื่อถือจึงต้องทำตาม flow แบบ accept, send, hold เช่นเดียวกัน
  • โมเดลที่ใช้ thread ต่อ client จะใช้หน่วยความจำและ CPU และด้วยต้นทุน context switching อาจทำให้ฝ่ายป้องกันใช้ทรัพยากรหมดก่อน
  • Portspoof ใช้ event loop epoll แบบ thread เดียว
    • แต่ละพอร์ตได้รับการกำหนดโหมดส่งต่อเมื่อเริ่มต้น
    • บางพอร์ตส่ง banner ทันที, บางพอร์ตตอบกลับหลังจากมีข้อมูลจาก client, และบางพอร์ตเงียบ
    • เวลาคงการเชื่อมต่อถูกกระจายตั้งแต่หลายสิบมิลลิวินาทีไปจนถึงหลายนาที ครอบคลุมหลายหลักของเวลา
    • ทุกการเชื่อมต่อมี jitter ทำให้แม้ตรวจจับพอร์ตเดิมซ้ำ ก็ไม่คืน timing เดิม
  • วิธีนี้ทำให้การโจมตีที่ส่งข้อมูลขยะไปทุกพอร์ตแล้ววัด timing การตอบกลับทำได้ยาก
    • tarpit แบบง่ายอาจยึดการเชื่อมต่อไว้ไม่กี่วินาที ขณะที่บริการจริงอาจปิดเร็วเมื่อเจอ protocol ที่ผิด
    • ในโหมดผสมและการกระจาย timing ที่กว้าง พอร์ตปลอมหลายพันพอร์ตก็ปิดในช่วงที่คล้ายกับบริการจริง
    • ไม่มี threshold ที่ชัดเจนให้ใช้กรอง

ความไม่สมมาตรของต้นทุน

  • ต้นทุนฝ่ายป้องกันอยู่ที่ประมาณ 1~2KB หน่วยความจำ kernel ต่อการเชื่อมต่อที่ว่างอยู่
  • loop epoll เป็น thread เดียว จึงไม่มี overhead จาก context switching
  • อุปกรณ์ระดับทั่วไปก็รองรับการเชื่อมต่อพร้อมกันมากกว่า 10,000 รายการได้
  • ต้นทุนของผู้โจมตีเปลี่ยนไปเป็นเวลาและความพยายาม
    • การสแกนพอร์ตเพียงอย่างเดียวทำให้ทุกพอร์ตดูเปิด จึงยากที่จะได้ข้อมูลที่มีความหมาย
    • หากต้องการหาบริการจริง จำเป็นต้องตรวจจับเวอร์ชันในพอร์ตทั้งหมด 65535 พอร์ต และตรวจระดับ protocol กับเป้าหมายที่ดูเป็นไปได้
    • การสแกน 5 วินาทีกลายเป็นงาน active มากกว่า 10 ชั่วโมง และผลลัพธ์ก็ยังเหมือนเข็มในกองฟาง

สิ่งที่เปลี่ยนใน v2.0

  • v2.0 ออกจากวิธีเดิมที่ส่ง banner แล้วปิดการเชื่อมต่อ
  • วิธีเดิมอ่อนแอต่อการเลี่ยงด้วยการปิดการเชื่อมต่อที่กล่าวถึงในบทความบล็อก Vicarius/Hored1971
  • เอนจิน tarpit ใหม่คงทุกการเชื่อมต่อไว้ในสถานะเปิดด้วย timing แบบผสม
  • วิธีนี้มีเป้าหมายเพื่อขัดขวางการกรองด้วยการปิดการเชื่อมต่อ, timing fingerprinting, การวิเคราะห์ banner, และการทำ statistical pattern modeling

การติดตั้งและการตั้งค่าพื้นฐาน

  • การ build ต้องใช้ C++ compiler และ CMake 3.10+
  • ขั้นตอน build จาก source มีดังนี้
mkdir build && cd build
cmake -DCMAKE_INSTALL_SYSCONFDIR=/etc ..
make
sudo make install
  • Portspoof ทำงานใน user space แต่หากต้องการดัก traffic ที่มุ่งไปยังพอร์ตอื่น ต้องใช้กฎ firewall ของระบบ
  • พอร์ตเริ่มต้นคือ 4444 และให้ยกเว้นพอร์ตบริการจริงก่อน จากนั้น redirect TCP traffic ที่เหลือไปยัง Portspoof
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j RETURN
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -j REDIRECT --to-ports 4444
  • ต้องเปลี่ยน eth0 เป็น network interface จริง
  • ต้องเพิ่มกฎ RETURN ให้ทุกพอร์ตที่กำลังรันบริการจริง
  • สำหรับการใช้งานถาวร สามารถบันทึกกฎ iptables หรือใช้ iptables-config ในไดเรกทอรี system_files
  • สำหรับสคริปต์เริ่มต้น สามารถใช้ตัวอย่างใน system_files/init.d/

โหมดการรัน

  • แนะนำให้ใช้ โหมดจำลองบริการ
    • สร้างและส่งลายเซ็นบริการปลอมให้ port scanner
portspoof -c /etc/portspoof.conf -s /etc/portspoof_signatures -D
  • ระบุ timing ของ tarpit แบบกำหนดเองได้ด้วย -t และ -T
    • ตัวอย่างนี้คงแต่ละการเชื่อมต่อไว้ 10~60 วินาที
portspoof -s /etc/portspoof_signatures -t 10 -T 60 -D
  • Open Port Mode ส่งคืนเฉพาะสถานะ OPEN ต่อทุกความพยายามเชื่อมต่อ โดยไม่มี service banner
    • การเชื่อมต่อยังคงถูกจัดการแบบ tarpit
portspoof -D
  • Fuzzing Mode ใช้ส่ง payload แบบสุ่มหรืออิง wordlist ไปยังเครื่องมือสแกนได้
portspoof -1 -v
portspoof -f payloads.txt -v

การเสริมความแข็งแกร่งด้วย iptables

  • แม้กฎ REDIRECT พื้นฐานจะทำงานได้ แต่ scanner เชิงรุกอาจกดดัน Portspoof ด้วยจำนวนการเชื่อมต่อ
  • กฎเสริมเพิ่ม rate limiting และการบล็อกอัตโนมัติ
    • ยกเว้นพอร์ตบริการจริงจากการ redirect
    • ในตัวอย่างยกเว้นพอร์ต SSH 22
    • กฎบล็อกแบบ global จะมีผลกับบริการจริงด้วย
  • ตัวอย่างกฎประกอบด้วยองค์ประกอบต่อไปนี้
    • อนุญาต loopback
    • drop IP ที่ถูกทำเครื่องหมายเป็น PORTSCAN เป็นเวลา 60 วินาที
    • drop เมื่อ SYN ใหม่ต่อ source IP เกิน 10 ครั้งต่อวินาที และ burst เกิน 30 ครั้ง
    • หาก IP เดียวคงการเชื่อมต่อไปยังพอร์ต Portspoof 4444 เกิน 100 รายการ ให้ทำเครื่องหมายแล้ว drop
    • อนุญาต traffic established/related และ SYN ใหม่ จากนั้น drop ที่เหลือ
  • ใน deployment ที่มี traffic สูง สามารถเพิ่มขนาดรายการ xt_recent ได้
echo "options xt_recent ip_list_tot=10000" > /etc/modprobe.d/xt_recent.conf
  • สามารถปรับการตั้งค่า kernel connection tracking และ backlog ได้เช่นกัน
sysctl -w net.netfilter.nf_conntrack_max=131072
sysctl -w net.core.somaxconn=4096

Portspoof Pro

  • Portspoof Pro ขยาย deception จากระดับโฮสต์เดียวไปเป็นระดับเครือข่ายทั้งหมด
  • sensor เดียวจำลองเครือข่าย /16 ทั้งเครือข่าย
    • ให้ IP หลายพันรายการ
    • แต่ละ IP มีบริการเฉพาะตัวในทุกพอร์ต
    • รักษาบทสนทนาหลายขั้นตอนแบบมี state
  • ให้ความสามารถ deception ทั่วทั้งเครือข่าย
    • เปลี่ยน dark IP space และ subnet ที่ไม่ได้ใช้ให้เป็น deception grid แบบ active
    • โฮสต์ที่จำลองแต่ละตัวนำเสนอบริการเฉพาะตัวที่มีบุคลิกต่างกันตาม source IP
    • tarpit แบบ active ทำให้ socket pool ของผู้โจมตีหมดและ throttle เครื่องมืออัตโนมัติ
  • รองรับการตรวจจับการสแกนและ tool fingerprinting
    • ตรวจจับเทคนิค SYN, FIN, NULL, XMAS, ACK scan
    • fingerprint Nmap, Masscan, ZMap และ scanner แบบ custom
    • stream telemetry แบบ JSON ที่มีโครงสร้างพร้อม MITRE ATT&CK mapping ไปยัง SIEM
  • คำนึงถึงการ deploy ในสภาพแวดล้อมปฏิบัติการจริง
    • ทำงานใน sandbox environment ข้าง production traffic
    • ส่ง deception traffic ไปยัง sensor ด้วย routing policy
    • ระบุว่าไม่มี inline tap และไม่มีความเสี่ยงต่อ workload จริง
  • รองรับ NIS2, DORA, ISO 27001, NIST CSF, CIS Controls

ไลเซนส์และการรายงาน issue

  • Portspoof ใช้ไลเซนส์ GNU GPLv2
  • สำหรับแอปพลิเคชันเชิงพาณิชย์และถูกกฎหมาย แนะนำให้ติดต่อผู้เขียนเพื่อหารือเรื่องไลเซนส์ที่เหมาะสม
  • รายงาน bug และคำขอฟีเจอร์ได้ที่ GitHub Issue Tracker หรือทางอีเมล

1 ความคิดเห็น

 
GN⁺ 2024-12-26
ความคิดเห็นจาก Hacker News
  • พอร์ตมี 65,536 พอร์ต และพอร์ต 0 ก็เป็นพอร์ตที่ในบางระบบปฏิบัติการสามารถเปิดบริการที่เข้าถึงได้จากอินเทอร์เน็ตได้ด้วย
    และถ้านักพัฒนา MariaDB เห็นเรื่องนี้ การตั้งค่าเริ่มต้นที่ให้ฐานข้อมูล listen ที่พอร์ต 0 เพื่อปิดกั้นการเข้าถึงจากอินเทอร์เน็ต จริง ๆ แล้วไม่ได้ปิดกั้นการเข้าถึง DB จากอินเทอร์เน็ตบนระบบจำนวนไม่น้อย

    • MariaDB ตรวจสอบอย่างชัดเจนว่าพอร์ตไม่ใช่ 0 ก่อนจะ listen บน TCP socket: https://github.com/MariaDB/server/blob/ae998c22b2ce4f1023a6c...
      if (mysqld_port) หมายถึงเมื่อ mysqld_port ไม่เท่ากับ 0 และดูเหมือนว่าจะเป็นพฤติกรรมที่มีมาตั้งแต่อย่างน้อย MariaDB 5.5
    • บน Linux ก็สามารถใช้พอร์ต 0 ได้ถ้าต้องการ แม้จะ bind โดยตรงไม่ได้ แต่สามารถใช้ไฟร์วอลล์ redirect พอร์ต 0 ไปยังพอร์ตอื่น ได้
  • ความปลอดภัยคอมพิวเตอร์ดูเหมือนสุดท้ายแล้วคงต้องวิวัฒน์ต่อไปเป็น การป้องกันเชิงรุก แบบข้างต้นอย่างหลีกเลี่ยงไม่ได้
    เมื่อดูว่าระบบภูมิคุ้มกันซับซ้อนและมีหลายชั้นแค่ไหน สักวันคอมพิวเตอร์หรือเครือข่ายก็น่าจะมีหน้าตาคล้ายกัน

    • แบบนี้ยังดูใกล้เคียงกับ ความปลอดภัยเชิงรับ ที่พึ่งพาการทำให้สับสนอยู่ดี ถ้าเป็นการป้องกันเชิงรุกน่าจะใกล้เคียงกับการส่ง zip bomb กลับไปยังผู้บุกรุกที่รู้จักเพื่อฆ่าโปรเซสมากกว่า
    • IT ก็ค่อย ๆ เติบโตขึ้นอยู่เหมือนกัน เราเพิ่งกังวลเรื่องความปลอดภัยมาแค่ไม่กี่สิบปี และผมก็ได้เห็นช่วงเวลาส่วนใหญ่นั้นด้วยตาตัวเอง
      สักวัน IT จะกลายเป็นสาขาที่ชำนาญเต็มที่ แต่วันนี้ยังไม่ใช่
    • ผมไม่ค่อยชอบอุปมานี้ เพราะระบบภูมิคุ้มกันก็มักทำงานผิดพลาดจนทำร้ายเจ้าของร่างกายเอง เช่น ภูมิแพ้หรือมะเร็ง
      แต่ถ้ารวมประเด็นนั้นเข้าไปด้วย ก็กลับเห็นเส้นขนานที่น่ากังวลอยู่เหมือนกัน
    • AI น่าจะทำให้สร้าง honeypot ที่มีคุณภาพดีและลึกได้ นี่เป็นการใช้งานที่พอดีกับความสามารถของ LLM ในปัจจุบัน และแค่ต้องดูน่าเชื่อก็พอ
    • ผิวหนังไม่ได้แกล้งทำตัวเป็นปากหรอกนะ
  • ผมเคยทำเว็บเพจที่สร้าง ที่อยู่อีเมลแบบสุ่มได้ไม่รู้จบ เพื่อกันสแปมบอตที่เก็บอีเมล: http://web.archive.org/web/20020610054821/http://www.sourtim...

  • ถ้ารันของแบบนี้ อาจมีคนสแกนเครื่องของผมแล้วส่งคำขอ bug bounty มาเป็นสิบ ๆ รายการ โดยบอกว่า “X เวอร์ชันที่รู้ว่ามีช่องโหว่ กำลังทำงานอยู่”

  • ช่วงกลางยุค 90 มีผลิตภัณฑ์ honeypot ชื่อ CyberCop Sting ซึ่งมาก่อน Ballista ของ Secure Networks
    CyberCop Sting สามารถจำลองบริการ TCP/UDP ของ implementation หลายแบบได้ และถ้าจำไม่ผิด ยังตั้งค่าพฤติกรรม TCP/IP stack ให้ดูเหมือนระบบปฏิบัติการต่าง ๆ ได้ด้วย สำหรับเกือบ 30 ปีก่อนถือว่าเป็นฟีเจอร์ที่ค่อนข้างล้ำ
    [1] https://theswissbay.ch/pdf/Gentoomen%20Library/Security/0321...
    [2] https://news.ycombinator.com/item?id=26440139

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

    • ถ้าบริการสุ่ม 3 ตัวดูเหมือนว่าไม่มีใครใช้แล้ว ก็อาจเผยได้อย่างรวดเร็วว่าเซิร์ฟเวอร์กำลังรัน portspoof
      แต่หลังจากรู้แล้วว่าโฮสต์ยังมีชีวิตอยู่ คำถามคือจะไปยุ่งกับพอร์ตไหน สมมติว่าต้นทุนในการสแกนหรือโจมตีแต่ละพอร์ตของแต่ละเซิร์ฟเวอร์ใกล้เคียงกัน ต่อให้แยกพอร์ตที่ถูกสปูฟออกได้ ก็ควรไปหาเครื่องอื่นที่มีโอกาสสำเร็จสูงกว่าดีกว่า อาจรัน portspoof บน 127.0.0.35 ในเครื่องตัวเองเพื่อเทียบข้อมูลตอบกลับหรือความต่างของ timing ได้ แต่พื้นที่ค้นหาจะใหญ่ขึ้นทันทีราว 5,000 เท่าเมื่อเทียบกับพอร์ตที่มักเปิดอยู่ไม่กี่พอร์ต และพอร์ตของเซิร์ฟเวอร์อื่นอาจดูมีโอกาสสำเร็จมากกว่า
    • การส่งแบนเนอร์ที่ดูน่าเชื่อกลับมาบนพอร์ตยอดนิยม มีแนวโน้มทำให้ถูกตรวจดูมากขึ้น ไม่ใช่น้อยลง
      เครื่องมือส่วนใหญ่ไม่ได้คำนึงถึงสถานการณ์ที่ทุกพอร์ตเปิดอยู่จนเกิด false positive นี่เป็นสถานการณ์ที่พบได้บ่อยในการทดสอบเจาะระบบและทำให้เสียเวลา แต่ผมไม่อยากให้เหตุผลกับผู้โจมตีในการมองเห็นอินฟราของผมมากขึ้น ผมชอบ port knocking ซึ่งแทบจะเป็นขั้วตรงข้ามของวิธีนี้มากกว่า
    • ผมไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัยเครือข่าย แต่ถ้าต้องใช้ทราฟฟิกระดับหนึ่งเพื่อแยกว่าอะไรเป็นของจริง กระบวนการนั้นก็น่าจะไปติด กลไกตรวจจับ อื่น ๆ ได้ง่าย
    • ถ้ากังวลเรื่องการสแกนอินเทอร์เน็ตขนาดใหญ่ ก็เห็นข้อเสียอยู่ แต่ถ้ากังวลกรณีที่ผู้โจมตีเฉพาะเจาะจงสแกนแค่ช่วง IP ขององค์กร ก็น่าจะรบกวนเขาได้พอสมควร
    • ลองคิดเร็ว ๆ แล้ว threat model ที่เครื่องมือนี้ช่วยได้ดูจะค่อนข้างจำกัด
      สำหรับการโจมตีวงกว้าง ต้องถูกติดตั้งบนโฮสต์หลายสิบล้านเครื่องถึงจะมีผลในระดับหนึ่ง และเมื่อนั้นผู้โจมตีจึงจะทำเพียงหา honeypot แล้วโต้ตอบกับมันอย่างเดียวได้ไม่คุ้ม ถ้าคุณถูกโจมตีแบบมีเป้าหมายชัดเจน พอร์ต honeypot อาจถ่วงเวลาเขาเล็กน้อยเพราะพยายาม exploit พอร์ตเหล่านั้น แต่ถ้าคุณรันบริการที่มีช่องโหว่ สุดท้ายก็จะถูกเจาะอยู่ดี อีกอย่าง ถ้าคุณเป็น vendor เมื่อทีมรักษาความปลอดภัยของลูกค้าเป้าหมายสแกนเจอ ก็อาจต้องตอบแบบสอบถามความปลอดภัยที่น่ารำคาญมาก ๆ
  • เว็บไซต์ของผมก็ทำคล้าย ๆ กัน https://bini.wales จะคืนค่า 200 ให้ทุก endpoint และบันทึกทุกความพยายาม จึงกลายเป็น honeypot ที่ใช้ได้ดีสำหรับการโจมตีอัตโนมัติ
    ส่วนใหญ่จับพวกที่สแกนจำนวนมากหา plugin WordPress ที่มีช่องโหว่ หรือ backdoor ที่ถูกทิ้งไว้ ในทำนองเดียวกัน https://varun.ch/login ก็เลียนแบบเว็บไซต์ WordPress ที่มีลูกเล่นพลิกนิดหน่อย

    • ไม่ว่าจะคืนค่าอะไร WordPress scan ก็เข้ามาอยู่ดี
  • ดีเลย ดีใจที่ไม่มีคำว่า “honeypot” โผล่มาสักครั้ง
    เมื่อก่อนผมเคยรับช่วงดูแล honeypot “ของจริง” พอตรวจดูพบว่าเปิด port ไว้ราว ๆ 30 port แล้วถึงกับพูดออกมาจริง ๆ ว่า “นี่มันขยะอะไรกัน”

    • ผมว่า นั่นแหละไม่ใช่สิ่งที่ honeypot ตั้งใจจะทำเหรอ
      เปิด port ไว้ให้ script kiddie คิดว่าเข้าถึงอะไรบางอย่างได้แล้วตื่นเต้น แต่จริง ๆ แล้วไม่มีอะไรเลย honeypot ที่ล็อกไว้ ณ จุดนั้นก็ดูไม่ค่อยเหมือน honeypot เท่าไร
    • อาจเป็นไปได้ว่าหนึ่งในเราสองคนเข้าใจคำว่า honeypot ผิด ซึ่งอาจเป็นผมก็ได้ แต่ถึงอย่างนั้น สิ่งนี้ก็ดูเหมือนเอาไปใช้สร้างระบบ honeypot ภายใน network ได้พอสมควร
      honeypot ใช้เพื่อล่อและตรวจจับผู้โจมตี โดยปกติจะบันทึกพฤติกรรมและ pattern ของพวกเขาไว้เพื่อวิเคราะห์หรือบล็อก เครื่องมือนี้น่าจะดีถ้ามี logging มากกว่าแค่ iptables และตัวมันเองไม่ใช่ honeypot ล้วน ๆ แต่แนวคิดก็ไม่ได้ห่างกันมากนัก อย่างไรก็ดี ที่หน้า GitHub บอกว่าสิ่งนี้ “เสริมความปลอดภัยของ OS” ผมไม่เชื่อเลยแม้แต่น้อย มันอาจช่วยพรางตาจากตัวสแกนบริการอัตโนมัติได้บ้าง แต่ถ้า MySQL server กำลัง listen อยู่ที่ 3306 และผู้โจมตีเชื่อมต่อไปที่ 3306 เขาก็ยังคุยกับ MySQL อยู่ดี จะมี port ที่เหลืออีก 65534 port ส่ง response ขยะออกมาหรือไม่ก็ไม่สำคัญ
  • เห็นบอกว่า “bind กับ TCP port ได้เพียง port เดียวต่อ instance ที่รันอยู่หนึ่งตัว” เลยสงสัยว่ามันทำงานอย่างไร
    ถ้าจะครอบคลุมทุก port ต้องรัน 65535 instance เลยไหม?

    • กฎ iptables จะ redirect port ทั้งหมดที่ปิดอยู่ของเครื่องไปยัง port เดียว ที่ portspoof กำลัง listen อยู่: https://github.com/drk1wi/portspoof/blob/c3f3c34531c59df229e...
      จากนั้นเรียก getsockopt เพื่อดูว่า port เดิมคืออะไร: https://github.com/drk1wi/portspoof/blob/c3f3c34531c59df229e...
    • เป็น NAT redirection
    • process เดียวสามารถ bind กับหลาย port ได้ ผมเลยไม่รู้ว่าทำไมจะไม่ได้
      ไม่รู้ hard limit จริง ๆ หรือปริมาณการใช้ memory แต่คาดว่า port redirect น่าจะเรียบง่ายกว่า
  • สิ่งนี้อาจกลายเป็น DoS amplifier ได้ไหม?
    ถ้าส่ง packet ที่ปลอมแปลงอย่างเหมาะสม จะทำให้มันส่ง packet จำนวนมากกลับไปยังต้นทางที่ดูเหมือนเป็นต้นทางได้หรือเปล่า?

    • ถ้าเป็นบริการ TCP มันจะไม่ส่ง packet ขนาดใหญ่ก่อนที่ “client” จะส่ง ACK packet ที่ถูกต้องเพื่อทำ 3-way handshake ให้เสร็จ
      ถ้าเป็น UDP นั่นอาจกลายเป็นเรื่องบ้าบอจริง ๆ ได้
    • amplification attack มักเป็นปัญหากับ UDP เป็นหลัก เพราะ UDP ไม่มีขั้นตอนตรวจสอบว่า return path ใช้งานได้จริงหรือไม่ แต่ TCP มี