System Security Hardening for Beginner

Sorawit Rujichoatpan
INCOGNITO LAB
Published in
4 min readJun 27, 2024

TL;DR

การทำ harden ของ system component (e.g. package, server, database, operating system, firewall, cloud service, etc.) เพื่อให้เป็นไปตาม security best practices ซึ่งช่วยลดช่องโหว่ ความเสี่ยงหรือโอกาสที่จะถูกโจมตีใน system component และช่วยลด Attack Surface ภายในระบบได้ อาจจะต้องมีการใช้ hardening guideline ในการอ้างอิงหรือเป็นแนวทางในการทำ harden ของ system component นั้น ๆ ซึ่งผู้เขียนได้แนะนำแหล่ง hardening guideline นั่นคือ CIS Workbench (https://workbench.cisecurity.org) ซึ่งผู้อ่านสามารถค้นหา system component ที่ต้องการทำ harden แล้วสามารถศึกษาหรืออ่านประกอบการทำ harden ได้ด้วยตนเอง

Introduction

https://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Three_little_pigs_1904_straw_house.jpg/800px-Three_little_pigs_1904_straw_house.jpg

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

หากเปรียบเรื่อง “ลูกหมูสามตัว” กับการกับใช้ system component ภายในระบบเช่น package, server, database, operating system, firewall เป็นต้น จะพบว่าลูกหมูตัวแรกและตัวที่สอง ใช้วัสดุในการสร้างบ้านซึ่งเปรียบเสมือน system component ที่ไม่มีความแข็งแรงหรือใช้ system component ที่มีช่องโหว่ ทำให้หมาป่าซึ่งเปรียบเป็นผู้โจมตี (attacker) สามารถเป่าหรือ exploit ช่องโหว่เพื่อทำให้บ้านพังได้นั่นเอง ซึ่งเหตุการณ์ดังกล่าวสามารถป้องกันได้โดยการใช้วัสดุที่มีความแข็งแรงทนทานเหมือนลูกหมูตัวที่สาม โดยการใช้วัสดุที่มีความแข็งแรงทนทานเป็นการ hardening นั่นเอง

What is Hardening?

การ hardening หมายถึงการใช้วิธี กระบวนการ หรือเครื่องมือต่าง ๆ ในการลดช่องโหว่ ความเสี่ยงหรือโอกาสที่จะถูกโจมตีใน system component ภายในระบบได้ โดยจุดประสงค์ของการ hardening คือการลดจุดหรือช่องทางในการโจมตีภายในระบบได้ (Attack Surface) ซึ่งการ hardening ที่เรามักจะพบเจออยู่บ่อย ๆ ประกอบไปด้วย

  • การเปิด feature/function ของ system component เท่าที่จำเป็นต้องใช้ ส่วนไหนไม่ใช้ก็ควรปิด หรือ uninstall ออกจากระบบ
  • ตั้งค่าการยืนยันตัวตนให้มีความแข็งแรงเหมาะสม (Authentication)
  • การกำหนดหรือการอนุญาตสิทธิให้กับผู้ใช้งานให้เหมาะสม (Authorization)
  • การตั้งค่า firewall ให้เหมาะสมอย่างเช่นการกำหนดหรือการคัดกรอง IP address และ port ที่อนุญาตให้เข้าถึง server, network service หรือระบบต่าง ๆ , การสร้างกฎในการเข้าถึงให้เป็นไปตามนโยบายขององค์กร เป็นต้น
  • การตั้งค่าการบันทึกข้อมูล log ว่าควรเก็บข้อมูลอะไรบ้าง เผื่อในกรณีที่มีการโจมตีขึ้นมาจะได้ใช้ในการวิเคราะห์หรือหาผู้โจมตีได้
  • การตั้งค่าในรายละเอียดของแต่ละ service ซึ่งจุดนี้จะแตกต่างกันในแต่ละ service
  • การ update system component ให้เป็น version ล่าสุดอยู่เสมอ

CIS Hardening Guideline

ความท้าทาย ของการ hardening นั้นน่าจะเป็นความหลากหลายของ platform ซึ่งผู้ดูแลระบบอาจจะไม่ได้มีความชำนาญทุก platform การทำความเข้าใจในรายละเอียดเองนั้นทำได้ยาก ซึ่งในจุดนี้เองเราสามารถอ้างอิง hardening guideline จากเอกสารของ CIS benchmarks ได้ โดยเอกสารนี้จัดทำโดย CIS (Center for Internet Security) ซึ่งเป็นองค์กรที่ไม่แสวงหากำไร และได้มีการจัดทำมาตรฐานหรือแนวทางในการควบคุมเรื่องต่าง ๆ ในหัวข้อที่เกี่ยวข้องกับความมั่นคงปลอดภัยไซเบอร์

เราสามารถ download เอกสาร CIS benchmarks ได้ฟรีจาก portal ของ CIS ที่เรียกว่า CIS Workbench (https://workbench.cisecurity.org) ซึ่งในนั้นจะมีเอกสารที่หลากหลายให้เลือกนำมาอ้างอิง ได้แก่ server, database, operating system, firewall, cloud และอื่น ๆ อีกทั้งยังมีการ update อย่างสม่ำเสมอ

ตัวอย่างจากเอกสาร CIS benchmarks ของ Microsoft Windows Server 2019 version 3.0.1 มา ดูกันว่าในการกำหนดค่า hardening 1 ข้อ นั้นมีรายละเอียดอะไรบ้าง

ซึ่งผู้เขียนได้เลือกหัวข้อ harden ข้อ 1.1.2 (L1) Ensure ‘Maximum password age’ is set to ‘365 or fewer days, but not 0’ สำหรับอธิบายรายละเอียดภายในหัวข้อ

โดยในรายละเอียดของหัวข้อ harden 1 ข้อ หลัก ๆ จะมีดังนี้

Profile Applicability — ความจำเป็นและความเหมาะสมในการทำ harden ในแต่ละหัวข้อ โดยมี level บ่งบอกถึงความจำเป็นในการทำ harden ได้แก่
- Level 1: เป็น level ที่จำเป็นต้อง harden เนื่องจากหัวข้อดังกล่าวสามารถทำได้ง่ายและไม่กระทบต่อการทำงานของ system component หลังจากทำแล้ว นอกจากนี้หัวข้อดังกล่าวมีความสำคัญต่อความปลอดภัยใน system component โดยหากมีการ harden ในหัวข้อนี้แล้วจะช่วยลด Attack Surface ได้อย่างชัดเจน
- Level 2: เป็น level ที่ต่อยอดมาจาก level 1 โดย level 2 จะเหมาะกับ environment ที่เรื่อง security มีความสำคัญเป็นอย่างยิ่ง แต่ทั้งนี้การ harden ใน level 2 นี้ หากทำแล้วจะมีโอกาสที่กระทบต่อการทำงานและประสิทธิภาพของ system component
ความแตกต่างของการ harden ในหัวข้อ level 1 และ level 2 คือ level 2 นั้นจะเน้นไปที่การช่วยเสริมการป้องกันในเชิงลึก (Defense in depth) แต่ level 1 จะช่วยลด Attack Surface ได้อย่างชัดเจน

นอกจากนี้ยังระบุว่าหัวข้อ นี้เหมาะสำหรับ harden กับ server หรืออุปกรณ์ในรูปแบบไหน โดยในหัวข้อนี้ก็บ่งบอกว่าจำเป็นต้องทำ harden และสามารถนำไปประยุกต์ใช้กับ server ที่เป็น Domain Controller หรือ Member Server ก็ได้

ซึ่งในตอนต้นของเอกสาร CIS Benchmark ในแต่ละเล่ม จะมีการอธิบายถึง Profile Definitions เพื่อให้เข้าใจว่าตอนนำไปใช้งานจะสามารถใช้งานกับเครื่องประเภทไหนได้บ้าง โดยส่วนของ Profile Definitions ของ CIS Benchmark เล่มนี้ จะมีตัวอย่างตามด้านล่าง

  • Description — รายละเอียดของหัวข้อแต่ละข้อว่า feature หรือ configuration นั้นทำหน้าที่อะไร โดยในหัวข้อนี้จะกล่าวถึงการตั้งค่าอายุของรหัสผ่านให้เหมาะสมนั่นเอง
  • Rationale — การตั้งค่าในหัวข้อนี้จะช่วยเพิ่มความปลอดภัยให้กับ system component อย่างไรหรือผลเสียหากไม่มีการตั้งค่าหรือตั้งค่าไม่เหมาะสม โดยในหัวข้อนี้ระบุว่าหากมีการตั้งค่าอายุรหัสผ่านให้นานขึ้น ย่อมมีโอกาสสูงที่ผู้โจมตีสามารถ Brute Force รหัสผ่านซึ่งเป็นการนำข้อมูลที่เกี่ยวข้องของผู้ใช้งานมาเป็นรหัสผ่านหรือนำรหัสผ่านที่ผู้ใช้งานส่วนใหญ่นิยมใช้ (wordlist) เพื่อมาคาดเดารหัสผ่านที่ถูกต้องได้สำเร็จและหากกำหนดอายุของรหัสผ่านเป็น 0 ซึ่งหมายความว่าอายุของรหัสผ่านไม่มีวันหมดอายุ ย่อมมีความเสี่ยงสูงที่ผู้โจมตีสามารถ Brute Force เพื่อหารหัสผ่านที่ถูกต้องได้สำเร็จเช่นเดียวกัน
  • Impact — ผลกระทบหลังจากการตั้งค่า โดยจะบอกผลกระทบของการตั้งค่าในแต่ละกรณีอย่างเช่นในหัวข้อนี้
    - หากมีการตั้งค่าอายุรหัสผ่านที่น้อยเกินไปก็จะทำให้ผู้ใช้งานอาจต้องจดรหัสผ่านใส่กระดาษเนื่องจากผู้ใช้งานจะต้องเปลี่ยนรหัสผ่านบ่อยขึ้น ซึ่งจะเป็นช่องโหว่ตามมาหากเก็บกระดาษที่ไม่มิดชิดหรือทำหาย ย่อมทำให้ผู้โจมตีสามารถค้นหากระดาษได้ง่ายและรู้รหัสผ่านได้ นอกจากนี้การตั้งค่าอายุรหัสผ่านที่น้อยเกินไปอาจทำให้คุณภาพรหัสผ่านต่ำลงเนื่องจากการเปลี่ยนรหัสผ่านที่บ่อยขึ้นก็มีโอกาสที่มีการใช้รหัสผ่านที่มีลักษณะคล้าย ๆ กันนั่นเอง ซึ่งหากผู้โจมตีทราบถึงรหัสผ่านก่อนหน้า อาจทำให้ผู้โจมตีสามารถคาดเดารหัสผ่านที่คล้าย ๆ กันได้
    - ในทางกลับกันหากมีการตั้งค่าอายุรหัสผ่านที่ยาวเกินไป ก็จะมีโอกาสสูงที่ผู้โจมตีสามารถ Brute Force Attack รหัสผ่านสำเร็จมากขึ้น
    - ในกรณีที่มีกำหนดอายุรหัสผ่านเป็น 0 ซึ่งหมายความว่าอายุของรหัสผ่านไม่มีวันหมดอายุ ย่อมมีความเสี่ยงสูงที่ผู้โจมตีสามารถ Brute Force เพื่อหารหัสผ่านที่ถูกต้องได้สำเร็จเช่นเดียวกัน
  • Audit — ขั้นตอนวิธีการตรวจสอบหัวข้อนี้ โดยขั้นตอนในการตรวจสอบก็จะไปตรวจสอบการตั้งค่าที่ Local Group Policy Editor และไปที่ path ตาม Remediation แล้วตรวจสอบค่าตามที่กำหนดนั่นคืออายุของรหัสผ่านจะต้องน้อยกว่าหรือเท่ากับ 365 วันแต่ไม่ใช่ 0 วันดังภาพ
  • Remediation — ขั้นตอนวิธีการในการ harden feature หรือ configuration ให้เหมาะสมและเป็นไปตาม security best practices หากค่าที่ตรวจสอบไม่เป็นไปตามที่กำหนด จะต้องมีการทำ harden โดยการทำ harden ในหัวข้อนี้จะมีขั้นตอนเหมือนกับตอน Audit เพียงแต่ไป double click ที่ Policy “Maximum password age” แล้วเปลี่ยนค่าให้เหมาะสมนั่นก็คือต้องตั้งค่าให้น้อยกว่าหรือเท่ากับ 365 วันแต่ไม่ใช่ 0 วัน ตามดังภาพ ก็จะถือว่าการทำ harden ในหัวข้อนี้สำเร็จแล้วนั่นเอง
  • CIS Controls — หัวข้อนี้จะถูกอ้างอิงใน CIS Controls ข้อไหน โดย CIS Controls จะเป็นแนวทางทั่วไปในการรักษาความปลอดภัย (security best practice) ที่องค์กรควรปฏิบัติตาม ซึ่งในตารางจะอ้างอิง version ของ CIS Control, ข้อไหนใน CIS Control และข้อนั้นอยู่ใน Implementation Group (IG) อะไรบ้าง โดย CIS Control แบ่งออกเป็น 3 ประเภทได้แก่ IG1 คือสำหรับองค์กรขนาดเล็ก, IG2 คือสำหรับองค์กรขนาดกลาง และ IG3 คือสำหรับองค์กรขนาดใหญ่ รายละเอียดสามารถอ่านเพิ่มได้จาก https://www.cisecurity.org/controls/implementation-groups หรือจากรูปภาพด้านล่าง

What to Refer to if No Hardening Guideline Exists on CIS?

ในกรณีที่ CIS นั้นไม่มี hardening guideline ของ system component นั้น ๆ ที่เราต้องการ เราสามารถหา hardening guideline จากช่องทาง official ของผู้พัฒนา (vendor) ของ system component นั้น ๆ ได้ หรืออาจหาจากแหล่งอื่น ๆ ที่มีกลุ่มบุคคล (community) ที่ช่วยกันร่าง hardening guideline ของ system component เอาไว้แทน หรือหากไม่พบ hardening guideline อีก อาจจะต้องใช้ CIS Control มาเป็น framework มาเป็นแนวทางในการ harden แทน ซึ่งการใช้ CIS Control อาจต้องพิจารณาหัวข้อที่ใช้เป็น hardening guideline สำหรับ system component ว่าจะ harden system component อะไรและมี feature หรือ function ใน system component ไหนบ้างที่ตรงกับ CIS Control เพื่อที่ใช้เป็น guideline

Hardening Consideration

การทำ harden อาจไม่จำเป็นต้องทำตามทุกข้อในเอกสารทั้งหมด แต่ควรคำนึงถึง

  • ผลกระทบต่อการใช้งานในระบบหลังจากได้ harden แล้ว ซึ่งทางผู้เขียนแนะนำว่าควร backup การตั้งค่าใด ๆ ที่เกี่ยวข้องกับ system component ที่จะทำการ hardening ก่อน เพื่อหากใช้งานไม่ได้หรือเกิดปัญหาใด ๆ หลังจากที่ทำ harden แล้วจะได้ restore กลับมาได้
  • นโยบายความปลอดภัยทางด้านไซเบอร์ขององค์กรในการตั้งค่าหรือการกำหนดค่าของแต่ละหัวข้อ ซึ่งสามารถนำนโยบายดังกล่าวไปประยุกต์ (apply) กับ CIS Benchmark ของ system component ที่ต้องการเพื่อให้สอดคล้องกันได้

นอกจากนี้การทำ harden ในองค์กรควรเริ่มจากการตรวจสอบว่ามี system component อะไรที่ใช้งานอยู่บ้าง เมื่อทราบถึง asset inventory แล้วค่อยวางแผนในการปรับปรุง โดยควรเริ่มจาก OS level ก่อน เนื่องจากมีผลกระทบต่อ application ที่ใช้งานน้อยกว่ากลุ่มที่ software เช่น web server, database server

[Advertorial] สุดท้ายนี้หากมีข้อสงสัยหรือสอบถามข้อมูลเพิ่มเติมเกี่ยวกับการทำ hardening หรือสนใจบริการ harden system component ภายในองค์กรจากทีมงานผู้เชี่ยวชาญ สามารถติดต่อทีมงาน Incognito Lab ได้เลยนะครับ

Reference

--

--