รูปปกบทความ

1. 🎯 ตอนที่ 2: User Mode vs Kernel Mode เส้นแบ่งเขตแดนแห่งอำนาจ

เจาะลึกโครงสร้างสถาปัตยกรรม CPU และกำแพงที่กั้นระหว่างโลกของแอปพลิเคชันกับแก่นของระบบปฏิบัติการ

2. 📖 เปิดฉาก (The Hook)

น้องๆ เคยสงสัยกันไหมครับว่า… ทำไมเวลาเราเขียนโปรแกรมแล้วเกิดบั๊ก บวกลบคูณหารพลาด หรือหน่วยความจำรั่ว (Memory Leak) อย่างมากโปรแกรมนั้นก็แค่เด้งแจ้งเตือน “Has stopped working” แล้วก็ปิดตัวเองไปโดยที่คอมพิวเตอร์ยังใช้งานต่อได้ปกติ? แต่ในทางกลับกัน แค่เราอัปเดตการ์ดจอหรือลง Antivirus ตัวใหม่แล้วมันทำงานผิดพลาดเพียงนิดเดียว ผลลัพธ์กลับกลายเป็นจอฟ้ามรณะ (Blue Screen of Death - BSOD) ที่ลากเอาทั้งระบบพังครืนลงมาทันที?

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

3. 🧠 แก่นวิชา (Core Concepts)

แนวคิดเรื่องการแบ่งแยกนี้ไม่ได้มาจากซอฟต์แวร์เพียงอย่างเดียว แต่ถูกฝังรากลึกในระดับสถาปัตยกรรมของ CPU เลยครับ เรียกว่า Privilege Rings

  • วงแหวนแห่งอำนาจ (Privilege Rings): CPU ในสถาปัตยกรรม x86 และ x64 ถูกออกแบบมาให้มีระดับสิทธิพิเศษ 4 ระดับ คือ Ring 0 ถึง Ring 3 โดย Ring 0 มีอำนาจสูงสุด และ Ring 3 มีอำนาจน้อยสุด แต่รู้หรือไม่ครับว่า Windows เลือกใช้งานแค่ 2 วงแหวนเท่านั้น คือ Ring 0 และ Ring 3 เหตุผลก็เพื่อความเข้ากันได้ (Portability) ข้ามสถาปัตยกรรม เพราะในอดีต CPU อย่าง MIPS หรือ Alpha ที่ Windows เคยรองรับ มันมีฮาร์ดแวร์แค่ 2 ระดับนั่นเอง

เปรียบเทียบ User Mode (Ring 3) และ Kernel Mode (Ring 0)

  • 🙋‍♂️ User Mode (Ring 3) - แดนประชาชน:
    • หน้าที่: เป็นที่อยู่ของแอปพลิเคชันที่เราใช้กันทั่วไป (Notepad, Chrome) รวมถึง System Services ย่อยๆ ของ Windows
    • ขอบเขต: ทำงานภายใต้กรอบจำกัด ไม่มีสิทธิ์สั่งการ Hardware โดยตรง และไม่สามารถเข้าถึงข้อมูลของระบบได้
    • ความปลอดภัย: โค้ดที่รันในโหมดนี้จะมีพื้นที่ส่วนตัวเรียกว่า Private Virtual Address Space หากโปรแกรมพัง มันก็จะตายไปแค่กระบวนการ (Process) เดียว ไม่กระทบคนอื่น (Process Isolation)
  • 👮‍♂️ Kernel Mode (Ring 0) - แดนพระเจ้า:
    • หน้าที่: เป็นที่อยู่ของแก่นระบบปฏิบัติการ (Kernel), Windows Executive (จัดการ Memory, I/O), Hardware Abstraction Layer (HAL), และ Device Drivers
    • ขอบเขต: มีอำนาจเบ็ดเสร็จ สั่งการ CPU ได้ทุกคำสั่ง (Instruction) เข้าถึง Hardware ได้ทุกชิ้น
    • ความปลอดภัย: โค้ดทั้งหมดในโหมดนี้จะใช้พื้นที่หน่วยความจำร่วมกันที่เรียกว่า System Space ข้อเสียที่น่ากลัวที่สุดคือ ไม่มีการป้องกันตัวเองจากคนในโหมดเดียวกัน หมายความว่าถ้ามี Device Driver จาก Third-party เขียนข้อมูลผิดพลาดไปทับ Memory ของ OS… ระบบจะจอฟ้า (BSOD) เพื่อป้องกันข้อมูลเสียหายทันที

แล้วประชาชนจะขอให้เจ้าหน้าที่รัฐทำงานให้ได้อย่างไร? คำตอบคือต้องผ่านช่องทางที่เรียกว่า System Call ครับ

รูปประกอบวงแหวน Privilege Rings และ System Call

4. 💻 ร่ายมนต์โค้ดและคำสั่ง (Show me the Code/Commands)

เวลาที่เราเขียนโค้ดอ่านไฟล์ด้วย ReadFile() ใน User Mode เบื้องหลังจะมีการส่งไม้ต่อเป็นทอดๆ ลงไปจนถึง Kernel Mode ลองมาดู Call Stack ผ่านเครื่องมือ WinDbg กันครับว่าหน้าตามันเป็นอย่างไร

// เปิด WinDbg แล้วดู Call Stack ของ Thread ที่กำลังทำการเขียนไฟล์
kd> k
ChildEBP RetAddr   
87d97d08 8285621a nt!NtWriteFile+0x3a       <-- [Kernel Mode] แก่นของ OS รับคำสั่งไปประมวลผลต่อใน Ring 0
97927d08 77c270b4 nt!KiFastCallEntry+0x12a  <-- [Transition] ด่านตรวจ! จัดการ Trap และเปลี่ยนโหมด
002fed20 77c26a74 ntdll!KiFastSystemCallRet <-- [User Mode] กลับออกมาสู่โลกเดิม
002fed24 75ee75d4 ntdll!NtWriteFile+0xc     <-- [User Mode] Native API หุ้มคำสั่งเพื่อเตรียมข้ามกำแพง
002fed88 77d8543c KERNELBASE!WriteFile+0x113<-- [User Mode] ไฟล์ DLL ของระบบที่แปลงคำสั่ง
002feda4 65071c8b KERNEL32!WriteFileImplementation+0x76
...

คอมเมนต์สไตล์คุยกัน: จะเห็นว่าจาก KERNEL32 ฝั่ง User Mode มันจะถูกส่งต่อมาที่ ntdll ซึ่งทำหน้าที่เป็นนายหน้า (Native API) จากนั้นจะเรียกใช้คำสั่งระดับ Assembly อย่าง sysenter หรือ syscall เพื่อสลับการทำงานของ CPU ข้ามมายัง nt!KiFastCallEntry ฝั่ง Kernel Mode พอทำงานเสร็จ ก็จะข้ามกลับไปให้โปรแกรมเราทำงานต่อครับ

5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)

มี 2 เรื่องที่ Developer และ System Admin มักเข้าใจผิดเกี่ยวกับสถาปัตยกรรมนี้ครับ:

  1. “Mode Transition ไม่ใช่ Context Switch” - การที่โปรแกรมของเราสลับจาก User Mode ไป Kernel Mode ผ่าน System Call ไม่ได้แปลว่ามันเปลี่ยน Thread หรือหยุดการทำงานของ Thread ไปให้คนอื่นทำนะครับ มันคือ Thread ตัวเดิมของเรานี่แหละ แค่ “สวมหมวก” ที่มีสิทธิพิเศษสูงขึ้นชั่วคราวเท่านั้น!
  2. “ทำไมมัลแวร์ถึงชอบฝังตัวเป็น Driver?” - อย่างที่บอกไปว่า Kernel Mode แทบไม่มีระบบป้องกันตัวเอง (Lack of protection) ถ้าแฮกเกอร์หรือมัลแวร์ (เช่น Rootkit) สามารถหลอกให้เราติดตั้งไฟล์ .sys ลงไปได้สำเร็จ มันจะได้สิทธิ์ระดับ Ring 0 ทันที! ทำให้มันสามารถซ่อนตัวเองจากการสแกนของ Antivirus ทั่วไปที่เป็นแค่โปรแกรมใน User Mode ได้อย่างแนบเนียน นี่คือเหตุผลที่ Windows ยุคใหม่ๆ ต้องบังคับใช้มาตรการ Driver Signature Enforcement (DSE) และ PatchGuard อย่างเข้มงวดครับ

6. 🏁 บทสรุป (To be continued…)

จะเห็นได้ว่าสถาปัตยกรรมของ Windows ถูกออกแบบมาอย่างแยบยลเพื่อรักษาสมดุลระหว่าง “เสถียรภาพ” และ “ประสิทธิภาพ” การทำความเข้าใจว่าโค้ดของเรากำลังวิ่งอยู่ที่ระดับไหน จะช่วยให้เราออกแบบระบบได้ปลอดภัยขึ้น และหาสาเหตุของปัญหา (Root Cause) ได้แม่นยำขึ้นมาก

ในตอนหน้า เราจะมาเจาะลึกสิ่งที่เรียกว่า “Process” และ “Thread” กันแบบหมดเปลือก ว่าเบื้องหลังที่ Kernel มองเห็น มันหน้าตาเป็นอย่างไร รอติดตามกันนะครับ!


ต้องการที่ปรึกษาและพัฒนาระบบ Automation หรือ Enterprise Infrastructure ให้กับธุรกิจของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p