By Arnon Puitrakul - 02 กรกฎาคม 2021
เราอาจจะเคยได้ยิน หรือเจอ Malicious software ต่าง ๆ เช่น Virus และ Trojan Horse กันไปบ้างไม่มากก็น้อย หรือแม้กระทั่ง ตัวจี๊ดที่พึ่งเจอกันอย่างหนักในไม่กี่ปีก่อนหน้าคือ Ransomware นั่นเอง หลาย ๆ คนอาจจะสงสัยว่า เอ๊ะ ในแง่ของการศึกษาพวก Malicious software พวกนี้ไม่ว่าจะเป็นการไปแคะของที่เราเก็บมาได้ หรือ กำลังสร้าง เราทำยังไง ถึงจะทดลองรันโปรแกรมเหล่านี้ได้ โดยที่ไม่พังเครื่อง หรือ ระบบของเราซะเอง Sandbox คือคำตอบของเรื่องนี้ (ที่ไม่เกี่ยวอะไรกับ ปราสาททราย)
ก่อนเราจะไปคุยกันเรื่องของ Sandbox เราต้องมาทำความเข้าใจกันก่อนว่าเหล่า Malicious software ที่เราไม่ชอบ มันทำอะไรได้บ้าง
จริง ๆ แล้ว Malicious software เป็นคำเรียกรวม ๆ ของโปรแกรมไม่พึงประสงค์ต่าง ๆ ที่เราชอบพูดว่า คอมพิวเตอร์ติดไวรัส ใช่แล้ว Computer Virus ก็เป็น Malicious software ประเภทหนึ่งเช่นกัน ที่ทำงานเหมือนกับ Virus ตามธรรมชาติคือ ทำให้เหยื่อติดเชื้อ และแทรกตัวเองลงไปในโปรแกรม ทำให้ตัวมันแพร่กระจายไปในระบบได้ และอาจจะมี Payload ในการทำลายระบบ หรือทำให้ระบบทำงานไม่ปกตินั่นเอง
Malicious software อีกตัวที่เรายกตัวอย่างคือ Trojan Horse จริง ๆ ชื่อมันก็มาจาก Trojan Horse ที่ชาวกรีกใช้ยึดเมือง Troy ได้ตอนนั้นเลย คือการที่มันเป็นโปรแกรมบางอย่างที่พยายามเปิดทางให้เข้าไปในระบบได้ โดยมักจะมากับการบอกว่า ชั้นเป็นโปรแกรมที่ดี เลือกชั้นสิ ๆ เมื่อผู้ใช้เปิดโปรแกรมขึ้นมา ก็อาจจะมีการทำ Privillage Escalation เพื่อยกระดับสิทธิ์ในการเข้าถึงของตัวเองให้อยู่ในระดับ root หรือระดับสูงสุด เพื่อเรียกพวกอย่าง Computer Virus เข้ามาก่อกวน และสร้างความเสียหายในระบบได้
และ Malicious software ตัวสุดท้ายที่เราจะยกตัวอย่างคือ Spyware ก็ตามชื่อเลยคือโปรแกรมที่มีเป้าหมายในการจับตาแบบ TU48 (TU ที่ไม่ใช่ มธ ถถถถ) โดยที่มันอาจจะซ่อนตัวอยู่ในระบบของเราโดยที่เราไม่รู้ตัว และ เมื่อเราทำอะไรบางอย่าง มันก็จะทำการบันทึกการกระทำนั้น และส่งไปให้พ่อของมัน ตัวอย่างนึงที่ค่อนข้างชัดคือพวก Keylogger หรือโปรแกรมที่บันทึกการกดปุ่ม ตัวอย่างจากในหนังเรื่อง Hacker ที่เราเอามาให้ดู วิธีที่เขาใช้คือ การทำ Social Engineering และส่งเมล์ไปหลอกผู้ใช้ว่ามีความเสี่ยงในการโดน Hack แนะนำให้เปลี่ยนรหัสผ่าน พร้อมกับแนบไฟล์ PDF ที่เป็นวิธีในการเปลี่ยนรหัสผ่าน แต่หารู้มั้ยว่า ในไฟล์ PDF นั่นแอบใส่ Keylogger เอาไว้ เมื่อเปิดไฟล์ขึ้นมา Keylogger เริ่มทำงาน และดักทุกปุ่มที่คอมพิวเตอร์เครื่องนั้นกด ทำให้พระเอกในเรื่องได้ Username และ Password มาอย่างนิ่ม ๆ นั่นเอง
จากตัวอย่างที่เรายกขึ้นมา 3 รูปแบบ จะเห็นได้ว่า เป้าหมายของโปรแกรมที่ไม่พึงประสงค์เหล่านี้ มีเป้าหมายในการโจมตี ทำให้ระบบใช้งานไม่ได้ หรือจะเป็นการขโมยข้อมูลต่าง ๆ แต่โปรแกรมเหล่านี้ ไม่ได้เปิดแล้วมีหน้าจอขึ้นมาบอกว่า ชั้นกำลัง Hack แก เหมือนในหนังสักหน่อย (ไม่ได้มีเวลาว่างทำ Graphic ขนาดนั้น โทษที) เราแทบไม่มีทางรู้ได้เลยว่า เรากำลังโดนจับตามองอยู่รึเปล่า เครื่อง หรือ ระบบของเราอาจจะติดเชื้อ ได้โดยการคลิกแค่ 2 ครั้งเท่านั้น ทำให้เราจะต้องมีวิธีในการป้องกัน Sandboxing ก็เป็นเทคนิคนึงที่ทำให้เราสามารถเปิดโปรแกรมที่เราไม่ไว้วางใจ โดยที่เรายังปลอดภัยได้นั่นเอง
เป้าหมายของ Sandbox คือ การที่ทำให้เราสามารถรันโปรแกรมที่เราไม่ไว้ใจได้ โดยการแยกส่วนของโปรแกรมนั้น ออกจากระบบหลัก ทำให้ถึงมันจะเป็น Malicious software จริง ๆ เราก็สามารถเขี่ยทิ้งได้ ทำให้มันทำอะไรเราไม่ได้นั่นเอง การทำ Sandboxing จะต้องทำหลายอย่างมาก ๆ เพราะการที่โปรแกรมนึงจะทำงานได้มันต้องอาศัยหลาย ๆ ส่วนด้วยกัน วันนี้เราจะยกตัวอย่าง 3 ส่วนในการป้องกัน
เรื่องแรกคือ Process ที่จะเกิดขึ้นเมื่อเรารันโปรแกรมขึ้นมา ซึ่งในแต่ละ Process ก็จะถูกจัดสรร Computing Resource โดย OS อีกทีว่าจะให้รันที่ Core ไหน หรือจัดการ Memory ยังไง สมมุติว่า เราเกิดรัน Malware โดยที่เราไม่ได้ตั้งใจ มันก็จะเริ่มทำงานตามเป้าหมายที่มันวางไว้ได้เลย อาจจะเข้าไปจัดการอะไรได้หมด ถ้าเราไม่มีกลไกในการป้องกันเลย สิ่งที่ Sanboxing ทำกับ Process คือ จำลองส่วนหนึ่งของระบบขึ้นมาแล้วให้โปรแกรมนั้นแหละรันในระบบที่จำลองขึ้นมาอีกที ทำให้ถ้าเกิด Process นี้จะไปล่วงล้ำอธิปไตยของ Process อื่นอย่างการทำ Process Injection มันก็จะทำไม่ได้เลย
ตัวอย่างของการทำแบบนี้ ไม่ได้อยู่ที่ไหนไกลเลย หลาย ๆ คนที่กำลังอ่านบทความนี้ตอนนี้ก็กำลังใช้อยู่เช่นกัน คือ Web Browser เพราะเว็บสมัยนี้มันทำงานได้เยอะขึ้นกว่าเมื่อก่อนมาก เช่น Javascript ที่ทำอะไรได้เยอะมาก ๆ บางทีก็แหม่ เยอะไป๊ จริง ๆ ทำให้มันเสี่ยงต่อการถูกโจมตีจาก Web Browser มากขึ้นเป็นเงาตามตัว ดังนั้นใน Web Browser สมัยใหม่ ก็จะใช้วิธีในการแยก Process ในแต่ละหน้าเว็บไปเลย เพื่อลดความเสียหายเมื่อมีสัก 1 หน้าเว็บที่มี Malware มันก็จะอยู่ในนั้นแหละ และ เมื่อเราปิดมันก็จากไปเท่านั้นเอง อีกข้อดีของการทำแบบนี้นอกจากเรื่องความปลอดภัยคือ ถ้ามีสักหน้าที่อาจจะค้าง เพราะ Script ที่เขียนมาหรืออะไรก็ตาม หน้าอื่น ๆ ก็ยังสามารถทำงานได้ตามปกติ เพราะมันอยู่คนละ Process กันเท่านั้นเอง ก็ทำให้สบายใจมากขึ้นหน่อย
อีกส่วน ที่น่าสนใจมาก ๆ และเราพึ่งเจอกันไปเลย คือ Memory หรือหน่วยความจำ ในความเป็นจริงแล้ว หน่วยความจำที่เราเสียบ ๆ ลงไป เครื่องคอมพิวเตอร์จะเห็นเป็น Address ไปเรื่อย ๆ ส่วนนึงอาจจะแบ่งให้ Hardware (Hardware Reserved) หรือแบ่งให้กับส่วนต่าง ๆ อย่าง OS เพื่อให้ระบบสามารถทำงานได้ ส่วนที่เหลือ ก็จะเป็นก้อนใหญ่ ๆ แบ่งให้กับ Application ต่าง ๆ ที่ทำงานอยู่ภายใต้ OS ทำให้แต่ละส่วนของ Memory มันก็เหมือนมีเส้นบาง ๆ กั้นไว้ให้แต่ละ Application ใช้อยู่
แต่บาง Application มีนิสัยขี้เผือก มันก็จะเข้าไป Access ใน Memory ของ Application อื่น อาจจะทำด้วยการอ้างอิงถึง Address ได้เลยด้วยซ้ำ ทำให้โปรแกรมเหล่านี้ สามารถขโมยข้อมูลที่อยู่ใน Memory ของ Application อื่น ๆ ได้ ซึ่งแน่นอนว่าส่วนของ RAM ที่เก็บข้อมูลเหล่านี้ ก็ไม่ได้ฉลาดเลย เพราะมันถูกออกแบบมาให้ อ่านและเขียนข้อมูลเท่านั้น ใครสั่งอะไร ก็ทำหมด นางนกแก้วนกขุนทองหนึ่งงง ทำให้หน้าที่ยามเฝ้า Memory นี้เอง ก็จะถูกจัดการโดย CPU อีกที แต่เมื่อไม่กี่ปีก่อน เราอาจจะเคยได้ยินเรื่องของ Spectre และ Meltdown ก็ใช้ช่องโหว่ของยามเฝ้า Memory ใน CPU เข้าไปขโมยข้อมูลใน Memory ของเครื่องเราได้นั่นเอง
ออกนอกเรื่องละ จะว่าไป ถามว่าแล้ว Sandbox มันทำอะไรกับ Memory บ้าง ส่วนนึงในระบบสมัยใหม่ เราจะใช้สิ่งที่เรียกว่า Virtual Address ในการอ้างอิงถึงที่อยู่ใน Memory แทนที่จะเป็น Physical Address หรือก็คือแต่ละ Application เวลาจะใช้ข้อมูลใน Memory ก็จะต้องใช้ Address จำลอง และ CPU จะเอาไปแปลเป็น Address จริง ๆ แล้วเข้าถึงอีกที ทำใหเราสามารถจำกัดการเข้าถึง และ เขียน ข้อมูลบน Memory ได้โดยง่ายนั่นเอง
และสุดท้ายคือ File Directory หรือไฟล์ในเครื่องของเรา โดยปกติ Application ก็จะเข้าถึงไฟล์ได้ทั้งเครื่อง รวมถึงไฟล์ที่เกี่ยวกับ OS หรือส่วนที่สำคัญต่าง ๆ ของระบบได้ ใน OS สมัยใหม่ก็จะมีกลไกในการป้องกันปัญหาเหล่านี้ในหลายวิธีมาก ๆ เช่นการกำหนด Permission ของ File ต่าง ๆ หรือจะเป็น การทำ Sandbox ไปเลย กล่าวคือ ระบบจะแอบสร้าง Folder นึงขึ้นมาในระบบจริง ๆ และเมื่อโปรแกรมถามหาไฟล์ มันก็จะบอกว่า Folder ที่แอบสร้างขึ้นมาเป็นของจริงนะ ไม่ทิพย์ ทำให้ไม่ว่า Application พวกนี้ มันจะทำอะไร มันก็จะไม่สามารถเข้าถึงไฟล์ในเครื่องของเราได้นั่นเอง
อ่าน ๆ มาดูแล้ว การทำ Sandbox ดูจะเป็นประโยชน์มาก ๆ ทำให้เราสามารถรัน Application ไหนก็ได้ โดยที่เราไม่ต้องกลัวเลย เอาจริง ๆ รัน Ransomware ขึ้นมาเลยยังได้ เครื่องเราท้ังเครื่องก็ไม่เป็นอะไรเลย เป็นอย่างมากก็คือภายในสภาพแวดล้อมที่เราสร้างขึ้นมา ใช้เสร็จก็ลบออกไปก็จบแล้ว
แต่การทำพวก Sandbox ก็มีข้อเสียด้วยเช่นกัน ถ้าเราอ่าน ๆ วิธีของแต่ละกลไก ทุกกลไก มันจะใช้วิธีการจำลอง Resource ต่าง ๆ ขึ้นมา เพื่อหลอกให้ Application เข้าใจว่า อ่อ ทั้งเครื่องเรามีแค่นี้แหละ เพื่อเป็นการจำกัดวงความเสียหายให้แคบ ในระดับที่เราควบคุมได้ แต่การจำลองนี่แหละที่กลับกลายมาเป็นข้อเสีย เพราะมัน กิน Resource สูงมาก ๆ เมื่อเทียบกับเรารันบน OS ตรง ๆ เลย ทำให้ระบบที่มีความ Sandbox มาก ๆ ตั้งการ์ดสูง ๆ หน่อย มักจะอยู่ในระดับ Enterprise ซะเยอะ
ถ้าเราลองไปดู พวก Security Software ระดับ Enterprise จะเห็นเลยว่า มันทำ Sandbox กันหนักมาก มียันการเก็บ State ของระบบก่อนการทำงานของ Application และเอามาเทียบกับหลังรันด้วย คือ มันกัน ๆ สุด ๆ ไปเลย แต่แน่นอนว่า มันก็แลกมากับ Resource และ Performance นั่นเอง
ในปัจจุบัน การทำ Sandbox ไม่ได้จำกัดอยู่ในวงการวิจัยเรื่องของ Cyber Security แล้ว แต่ยังถูกพัฒนา เพื่อนำมาใช้ในการเสริมเกราะความปลอดภัยทาง Cyber ให้แข็งแกร่งมากขึ้นทั้งบนระบบระดับ Consumer และ Enterprise ตัวอย่างเช่น OS สมัยใหม่ก็มีการใช้ Sandbox ผสมกับกลไกอื่น ๆ เพื่อป้องกัน Ransomware หรือจะเป็น Web Browser ก็มีกลไลในการทำ Sandbox เพื่อป้องกันตัวเองด้วยเช่นกัน จะเห็นได้ว่ามันอยู่ใกล้ตัวมาก ๆ และ Sandbox ไม่ใช่ปราสาททรายแต่อย่างใดโว้ยยยย
เคยสงสัยกันมั้ยว่า Filter ที่เราใช้เบลอภาพ ไม่ว่าจะเพื่อความสวยงาม หรืออะไรก็ตาม แท้จริงแล้ว มันทำงานอย่างไร วันนี้เราจะพาไปดูคณิตศาสตร์และเทคนิคเบื้องหลังกันว่า กว่าที่รูปภาพจะถูกเบลอได้ มันเกิดจากอะไร...
หลังจากดูงาน Google I/O 2024 ที่ผ่านมา เรามาสะดุดเรื่องของการใส่ Watermark ลงไปใน Content ที่ Generate จาก AI วันนี้เราจะมาเล่าให้อ่านกันว่า วิธีการทำ Watermark ใน Content ทำอย่างไร...
ก่อนหน้านี้เราทำ Content เล่าความแตกต่างระหว่าง CPU, GPU และ NPU ทำให้เราเกิดคำถามขึ้นมาว่า เอาเข้าจริง เราจำเป็นต้องมี NPU อยู่ในตลาดจริง ๆ รึเปล่า หรือมันอาจจะเป็นแค่ Hardware ตัวนึงที่เข้ามาแล้วก็จากไปเท่านั้น วันนี้เราจะมาเล่าให้อ่านกัน...
บทความนี้ เราเขียนสำหรับมือใหม่ หรือคนที่ไม่ได้เรียนด้านนี้แต่อยากรู้ละกัน สำหรับวันนี้เรามาพูดถึงคำที่ถ้าเราทำงานกับพวก Developer เขาคุยกันบ่อย ๆ ใช้งานกันเยอะ ๆ อย่าง Database กันว่า มันคืออะไร ทำไมเราต้องใช้ และ เราจะมีตัวเลือกอะไรในการใช้งานบ้าง...