Tags:
Node Thumbnail

กระบวนการรักษาความปลอดภัยในระบบคอมพิวเตอร์ที่สำคัญอีกอย่างหนึ่งคือการให้อำนาจ (Authorization) กระบวนการนี้เมื่อเทียบกับชีวิตประจำวันคือการที่เราเข้าถึงพื้นที่ในอาคารต่างๆ ได้จำกัด หลังร้านอาหารอาจจะจำกัดเฉพาะพนักงานเข้าได้เท่านั้นขณะที่ลูกค้าทั่วไปจะต้องอยู่ในบริเวณที่นั่งที่จัดไว้ หรือบริเวณชั้นผู้บริหารที่พนักงานทั่วไปไม่สามารถเข้าใช้งานได้

จำกัดทางภายภาพ: เข้าถึงไม่ได้ตั้งแต่ภายนอก

No Description

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

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

กระบวนการที่มีประสิทธิภาพกว่าคือการให้อำนาจการเข้าถึงตัวเครื่องคอมพิวเตอร์ตั้งแต่ทีแรก เราเห็นในภาพยนตร์เรื่อง Mission Impossible ภาคแรกที่มีกระบวนการตรวจสอบอย่างหนาแน่น เพื่อที่จะเข้าถึงตัวคอมพิวเตอร์ได้

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

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

เข้าไม่ได้แม้อยู่กับเราเอง

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

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

การให้อำนาจไม่ให้ผู้ถือข้อมูลสามารถอ่านข้อมูลได้เองทำได้ด้วยการป้องกันไม่ให้ผู้ใช้เข้าอ่านข้อมูลโดยตรงได้ แต่ต้องอ่านผ่าน "คอมพิวเตอร์" ที่รันซอฟต์แวร์ที่เท่านั้น ในกรณีของซิมการ์ด เนื่องจากการ์ดมีขนาดเล็กมาก ตัวสมาร์ตการ์ดเองเป็นเพียงชิปเดี่ยวที่มีซีพียู, แรม, และพื้นที่เก็บข้อมูลถาวร (non-volatile) อยู่ภายใน ชิปขนาดเล็กมากนี้โดยทั่วไปแล้วหากต้องการเชื่อมต่อวงจรเพื่ออ่านหน่วยความจำภายในโดยตรงต้องใช้เครื่องมือความละเอียดสูง ราคาแพง ทำให้เราสามารถอ่านข้อมูลภายในออกมาได้

อย่างไรก็ดีในปี 1999 ทีมวิจัยจากบริษัท Advanced Digital Security Research ร่วมกับห้องแล็บจากมหาวิทยาลัยเคมบริดจ์ก็สาธิตกระบวนการถอดแยกวงจรรวมออกมาเป็นส่วนๆ ทำให้สามารถอ่านค่าใน ROM ที่เป็นตัวเฟิร์มแวร์ของการ์ดออกมาได้ แม้กระบวนการอ่านข้อมูลในแรมจะทำได้ยากกว่าเพราะไม่สามารถอ่านจากลายวงจรได้โดยตรง

การป้องกันข้อมูลจากผู้ครอบครองมี เช่น เครื่องเกมคอนโซลทุกวันนี้ล้วนมีเฟิร์มแวร์ภายในเพื่อยืนยันซอฟต์แวร์อื่นๆ (อ่านเพิ่มเติมตอน Authentication) ความท้าทายสำคัญคือเฟิร์มแวร์ที่ใช้ยืนยันซอฟต์แวร์อื่นนั้นต้องไม่สามารถอ่านได้โดยผู้ใช้ทั่วไป เพื่อป้องกันการปลอมแปลงเฟิร์มแวร์นี้ ในสมัย Xbox นั้นวางเฟิร์มแวร์นี้ไว้ใน Northbridge ที่เชื่อมต่อกับซีพียูด้วยบัสสัญญาณนาฬิกา 700MHz โดยคาดว่าผู้ใช้ทั่วไปจะไม่มีเครื่องจับสัญญาณประสิทธิภาพสูงเช่นนี้ ทำให้ไม่สามารถอ่านเฟิร์มแวร์ออกไปได้ แต่ทีมวิจัยตามมหาวิทยาลัยก็ใช้เครื่องมือประสิทธิภาพสูงดักเฟิร์มแวร์ที่อ่านระหว่างบูตเครื่องแล้วปล่อยให้ดาวน์โหลดจนมีคนพบช่องโหว่มากมายในภายหลัง และ Xbox ก็ถูกแฮกจากช่องโหว่เหล่านั้นในเวลาต่อมา

POSIX: อ่าน, เขียน, รัน, ตัวเอง, พวกเราเอง, และใครก็ได้

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

สิทธิของผู้ใช้รูปแบบหนึ่งที่ได้รับความนิยมอย่างสูงทั่วโลก คือ สิทธิการเข้าถึงไฟล์คล้ายระบบยูนิกซ์ (Unix-like) โดยภายหลังผู้ผลิตยูนิกซ์หลายรายได้รวมตัวกันสร้างเป็นมาตรฐานกลางที่ชื่อว่า POSIX ขึ้นมาแทนที่ ระบบให้อำนาจนี้ระบุให้ทุกไฟล์และทุกโฟลเดอร์ในเครื่องจะต้องมีตัวเลขกำหนดสิทธิ์ไว้สามชุด สำหรับผู้ใช้ที่เป็นเจ้าของไฟล์, ผู้ใช้ที่เป็นกลุ่มเดียวกับเจ้าของไฟล์, และผู้ใช้ทุกคนในเครื่อง โดยแต่ละไฟล์จะต้องมีชื่อเจ้าของไฟล์ และกลุ่มผู้ใช้เจ้าของไฟล์กำกับอยู่เสมอ

ตัวเลขสามชุดของ POSIX นั้นแทนด้วยตัวอักษรได้แก่ สิทธิอ่านไฟล์ (read - r), สิทธิเขียนไฟล์ (write - w), และสิทธิรันไฟล์ (execute - x) เมื่อนำมาเรียงกันเป็นกลุ่มก็ได้สิทธิของแต่ละกลุ่มเช่น rwxrw-r-- เช่นนี้คือเจ้าของไฟล์สามารถรันไฟล์ อ่านไฟล์ หรือเขียนไฟล์ได้ กลุ่มผู้ใช้เจ้าของไฟล์ที่ระบุไว้จะสามารถอ่านและเขียนได้แต่รันไม่ได้ และผู้ใช้อื่นๆ ในระบบจะอ่านได้อย่างเดียวเท่านั้น ในกรณีที่เป็นโฟลเดอร์ หากไม่มีสิทธิรันไฟล์ จะแปลว่าไม่สามารถเข้าไปยังโฟลเดอร์นั้นได้

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

ระบบไฟล์สมัยใหม่มักมีกระบวนการควบคุมการเข้าใช้งานซับซ้อนกว่า POSIX มาก เช่น NTFS ของวินโดวส์นั้นสามารถให้สิทธิในการเขียนต่อท้ายไฟล์ (append) โดยไม่เข้าไปแก้เนื้อหาที่เขียนไปแล้วได้

กระบวนการให้สิทธิตามผู้ใช้เช่นนี้เรียกว่า discretionary access control (DAC) แม้จะใช้งานได้ดีแต่ยังมีปัญหาบางครั้งผู้ใช้ตั้งสิทธิอย่างละเลย เช่น เก็บกุญแจลับ (private key) เอาไว้ในไฟล์ที่ผู้ใช้ทุกคนในเครื่องเข้าถึงได้ ความละเลยนี้ทำให้ข้อมูลของผู้ใช้รั่วไหลได้โดยง่าย

sudo: ทำแทนกัน

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

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

myuser ALL = (root) NOPASSWD: /usr/bin/vim
youruser ALL = (root) /usr/bin/vim

ตัวอย่างการกำหนดสิทธิในระบบ sudo ข้างต้น เปิดให้ผู้ใช้ชื่อ myuser สามารถรันคำสั่ง vim เสมือนผู้ใช้ root เป็นผู้รัน โดยไม่ต้องถามรหัสผ่านซ้ำ เพียงแค่รันคำสั่ง sudo vim เท่านั้น ขณะที่ผู้ใช้ youruser จะเมื่อต้องการรันคำสั่ง vim ด้วยสิทธิ root ด้วยคำสั่งแบบเดียวกันจะถูกถามรหัสผ่านของ youruser เองเพื่อยืนยันซ้ำอีกครั้งก่อนจะให้รันในสิทธิ root

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

Mandatory Access Control: โปรดฟังอีกครั้งหนึ่ง

กระบวนการ DAC มีช่องโหว่ที่ความปลอดภัยไม่ดีไปกว่าความปลอดภัยที่ผู้ใช้เจ้าของไฟล์จะดูแลข้อมูลของตัวเอง รวมถึงแอพพลิเคชั่นเองที่บางครั้งมีช่องโหว่อาจจะถูกโจมตีจากภายนอกและเข้าไปเปลี่ยนระบบในส่วนที่ไม่เกี่ยวข้องได้

ตัวอย่างที่พบบ่อยเช่น เว็บเซิร์ฟเวอร์ไม่ว่าจะรันโดยผู้ใช้คนใดก็ตาม (รวมถึง root) ก็ไม่ควรเข้าไปแก้ข้อมูลของผู้ใช้ คนอื่นๆ ในระบบ การเปิดพอร์ตเชื่อมต่อไปยังภายนอกควรเชื่อมต่อเฉพาะ mysql ที่อยู่เซิร์ฟเวอร์อีกตัวหนึ่งเท่านั้น ขณะที่การโจมตีเว็บเซิร์ฟเวอร์บ่อยครั้งจะสร้างพรอกซี่ออกไปยังเซิร์ฟเวอร์อื่นๆ เพื่อซ่อนตัวแฮกเกอร์

ระบบปฎิบัติการสมัยใหม่มีการควบคุมที่มากกว่า DAC ขึ้นไปอีกขั้น โดยกำหนดสิทธิเฉพาะสำหรับแต่ละแอพพลิเคชั่นอย่างละเอียด เช่น เว็บเซิร์ฟเวอร์จะอ่านไฟล์ได้จาก /var/www/ เท่านั้นโดยไม่สามารถอ่านไฟล์จากโฟลเดอร์อื่นๆ ได้ เมื่อโค้ด php ที่รันอยู่ภายใต้เว็บเซิร์ฟเวอร์พยายามอ่านไฟล์จากโฟลเดอร์อื่นๆ ก็จะผิดพลาดและเตือนว่า access denied

ระบบควบคุมเพิ่มเติมนี้เรียกว่า mandatory access control (MAC) ระบบปฎิบัติการรุ่นใหม่ๆ เช่น ลินุกซ์ และวินโดวส์ ล้วนรองรับระบบเช่นนี้ทั้งสิ้น ในลินุกซ์นั้นระบบควบคุมเข่นนี้มีสองระบบที่ได้รับความนิยม ได้แก่ SELinux ที่เป็นโครงการวิจัยของ NSA (!!!!) และ AppArmor ที่ฝั่ง Ubuntu เลือกใช้งาน ขณะที่วินโดวส์เองตั้งแต่ Vista เป็นต้นมาก็มีระบบแบบเดียวกันนี้เช่นกันในชื่อว่า Mandatory Integrity Control (MIC)

#include 

/usr/sbin/tcpdump {
  #include 
  #include 
  #include 

  capability net_raw,
  capability setuid,
  capability setgid,
  capability dac_override,
  network raw,
  network packet,

  # for -D
  capability sys_module,
  @{PROC}/bus/usb/ r,
  @{PROC}/bus/usb/** r,

  # for -F and -w
  audit deny @{HOME}/.* mrwkl,
  audit deny @{HOME}/.*/ rw,
  audit deny @{HOME}/.*/** mrwkl,
  audit deny @{HOME}/bin/ rw,
  audit deny @{HOME}/bin/** mrwkl,
  @{HOME}/ r,
  @{HOME}/** rw,

  /usr/sbin/tcpdump r,
}

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

แต่ที่น่าสนใจ ในบรรทัดที่ขึ้นต้นด้วย audit ในช่วงล่าง เช่น audit deny @{HOME}/bin/ rw, กำหนดว่า tcpdump นั้น แม้จะสามารถเขียนไฟล์ได้ทุกที่ แต่ไม่สามารถเขียนไฟล์ในโฟลเดอร์ที่ชื่อ bin ใน home directory ของผู้ใช้ แม้เราจะสั่งด้วยสิทธิ root เช่น sudo tcpdump -i eth0 -w /home/myuser/bin/out.pcap เช่นนี้ซอฟต์แวร์ก็ยังคงแจ้งความผิดพลาดว่า Permission denied อยู่ดี เพราะ AppArmor ป้องกันเอาไว้อีกชั้นหนึ่งนอกจากสิทธิในการเขียนอ่านไฟล์ตามระบบ DAC ทั่วไป

ระบบ SELinux จะคล้ายกับ AppArmor พอสมควรแต่กระบวนการคอนฟิกจะซับซ้อนกว่ามาก จนถึงขั้นที่ว่าหากค้นหาข้อมูลเกี่ยวกับ SELinux แล้ว กูเกิลจะแนะนำหน้าเพจ "วิธีการปิด SELinux" อยู่ในหน้าแรกของผลค้นหาเสมอๆ

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

ฐานข้อมูล

ทุกวันนี้เมื่อเราใช้ระบบฐานข้อมูล เช่น MySQL นั้น เรามักใช้ผ่านเว็บ หรือบริการอื่นๆ มากกว่าจะเชื่อมต่อเข้ากับตัวฐานข้อมูลโดยตรง ทำให้มักไม่มีการจัดการสิทธิอะไรซับซ้อนนัก โดยเราอาจจะสร้างผู้ใช้ที่ดูแลฐานข้อมูลแต่ละฐานข้อมูล แยกออกจากผู้ดูแลเครื่องหรือระบบฐานข้อมูลทั้งหมด

ในกรณีของ MySQL เมื่อเราสร้างฐานข้อมูลใหม่ ด้วยคำสั่ง เช่น CREATE DATABASE example; แล้ว คำสั่งที่ตามมาเสมอในทุกวันนี้คือการสร้างผู้ใช้ขึ้นมาทำ "ทุกอย่าง" บนฐานข้อมูลนั้นได้ ด้วยคำสั่ง GRANT ALL ON example.* TO 'example_user'@'localhost' IDENTIFIED BY 'example_password;

กระบวนการนี้ทำให้ผู้ใช้ที่ดูแลฐานข้อมูลแต่ละฐานข้อมูลถูกแยกออกจากกันอย่างอิสระ ผู้ดูแลฐานข้อมูลแต่ละชุดไม่สามารถข้ามไปแก้ไขดัดแปลงข้อมูลบนฐานข้อมูลอื่นๆ ได้

นอกจากนี้เรายังสามารถกำหนดอำนาจเฉพาะบางอย่าง เช่น ผู้ใช้คนหนึ่งๆ อาจจะทำได้เพียงดูข้อมูลเท่านั้น แต่ไม่สามารถแก้ไขได้ ก็ทำได้ด้วยคำสั่ง GRANT SELECT ON example.user_table TO 'example_user'@'localhost'; กรณีนี้ผู้ใช้ example_user ก็จะเข้าไปดูข้อมูลในตาราง user_table ได้เพียงเท่านั้น ไม่สามารถดูข้อมูลอื่นได้ และไม่สามารถแก้ไขข้อมูลใดๆ ได้

Karma-based: ทำได้ตามกรรมที่ทำมา

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

ในสมัยหนึ่งแล้ว ระบบจัดการเนื้อหา (content management system - CMS) สองสายคือ Drupal และ Wordpress นั้นมีความต่างกันคือ Wordpress นั้นเลือกใช้ระบบการให้อำนาจแบบกรรมนี้

alt="upic.me"

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

Role-based: ต่างคน ต่างบทบาท

แม้ว่าเว็บในยุคแรกจะนิยมการให้สิทธิในระบบกรรมกันมาก แต่เว็บจำนวนมากมีผู้ใช้ที่สิทธิต่างกันออกไป เช่น ผู้ใช้ที่ได้รับอนุญาตให้ลบความเห็นอาจจะเป็นพนักงานโดยตรงที่มีสิทธิพิเศษทั้งที่ไม่ได้มีส่วนร่วมกับเว็บมากมายอะไร กระบวนการให้สิทธิตามบทบาท (role-based) จึงเหมาะกับการจัดการมากกว่า

alt="upic.me"

ตัวอย่างสิทธิบางส่วนของ Drupal เพื่อกำหนดให้กับบทบาทต่างๆ ในระบบ

กระบวนการให้อำนาจตามบทบาทแบ่งออกเป็นสามส่วนได้แก่

  1. สิทธิต่างๆ ในระบบ: ระบบจะต้องกำหนดสิทธิเอาไว้อย่างละเอียดเป็นต้นว่า สิทธิในการแก้ไขโพสของตัวเอง, สิทธิในการคอมเมนต์, สิทธิในการอ่านโพส, สิทธิการคอมเมนต์, หรือสิทธิในการลบคอมเมนต์
  2. สิทธิของแต่ละบทบาท: แต่ละบทบาทจะมีชุดของสิทธิที่กำหนดไว้ล่วงหน้า เช่น ผู้ดูแลความเห็นอาจจะมีสิทธิลบความเห็นผู้อื่น แต่ไม่มีสิทธิแก้ไขความเห็นของใครเลย หรือสิทธิผู้ดูแลระบบที่สามารถทำได้ทุกอย่าง สิทธิของผู้ดูแลโฆษณาที่สามารถเข้าจัดการกับโฆษณาของเว็บได้
  3. บทบาทของผู้ใช้แต่ละคน: ผู้ใช้แต่ละคนจะสามารถมีได้หลายบทบาทพร้อมกัน ผู้ใช้คนหนึ่งอาจจะเป็นผู้ใช้ทั่วไปที่มีสิทธิ์โพสความเห็น แก้ไขความเห็นของตัวเอง และลบความเห็นของตัวเองได้ ขณะเดียวกันเขาอาจจะมีบทบาทผู้ดูแลความเห็น (moderator) ทำให้สามารถลบความเห็นของผู้ใช้คนอื่นๆ ไปด้วย

กระบวนการจัดการสิทธิอย่างพื้นฐานนั้น คือ เมื่อผู้ใช้มีบทบาทมากขึ้น สิทธิที่ได้ตามบทบาทก็จะเพิ่มเติมไปเรื่อยๆ ด้วยเช่นกัน จนบางครั้งการเพิ่มบทบาทอาจจะไม่ได้เพิ่มสิทธิ์ใหม่ๆ แล้ว

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

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

Sandbox: เล่นได้ เลอะได้ แต่ไม่เดือดร้อนคนอื่น

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

No Description

กระบะทราย (sandbox) ภาพโดย Artaxerxes

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

การติดตั้งซอฟต์แวร์อาจจะยืนยันความถูกต้องและความน่าเชื่อถือของซอฟต์แวร์ได้ แต่การรับส่งข้อมูลเพื่อใช้งานจริงๆ นั้นเรากลับไม่สามารถตรวจสอบและรับเฉพาะข้อมูลที่น่าเชื่อถือได้เสมอไป

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

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

alt="upic.me"

ในระบบปฎิบัติการอุปกรณ์เคลื่อนที่รุ่นใหม่ๆ เช่น Android หรือ iOS ล้วนรันแอพพลิเคชั่นบน sandbox ของแต่ละแอพพลิเคชั่นทั้งสิ้น แต่ละแอพพลิเคชั่นจะสามารถเข้าถึงระบบปฎิบัติการได้อย่างจำกัดตามที่ขอสิทธิผู้ใช้ไว้ล่วงหน้าและจะไม่สามารถทำนอกเหนือจากสิทธิที่ขอไว้

ระบบปฎิบัติการรุ่นใหม่กว่านั้น เช่น Blackberry 10 เปิดให้ผู้ใช้เข้าจัดการสิทธิของแอพพลิเคชั่นได้ทุกเวลา เช่น เราอาจจะต้องการลงทะเบียน LINE ผ่านทาง SMS เมื่อติดตั้งครั้งแรก เราจึงต้องอนุญาตให้ LINE อ่าน SMS ในเครื่องได้ แต่เมื่อเวลาผ่านไป แอพพลิเคชั่น LINE กลับสามารถที่จะอ่าน SMS ของเราได้ตลอดเวลา การปิดสิทธิบางอย่างออกเมื่อต้องการจึงเพิ่มความปลอดภัยให้กับผู้ใช้

กูเกิลเองก็มีแผนที่จะเพิ่มความสามารถในการจัดการสิทธิของแอพพลิเคชั่นหลังจากติดตั้งไปแล้วในแอนดรอยด์ด้วยเช่นกัน

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

ส่งท้าย

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

ส่งท้ายรูปแบบการให้อำนาจที่ไม่เกี่ยวกับคอมพิวเตอร์ "friendzoned"

Get latest news from Blognone

Comments

By: hisoft
ContributorWindows PhoneWindows
on 30 January 2014 - 04:02 #675976
hisoft's picture

ส่งท้ายรูปแบบการจำกัดสิทธิที่ไม่เกี่ยวกับคอมพิวเตอร์ "friendzoned"

จบกัน (T^T)

By: Virusfowl
ContributorAndroidSymbianWindows
on 3 February 2014 - 11:30 #676780 Reply to:675976
  • จำกัดทางภายภาพ: << ภายภาพ > กายภาพ

@ Virusfowl

I'm not a dev. not yet a user.

By: Jaynarol
AndroidRed HatWindows
on 30 January 2014 - 04:03 #675978
Jaynarol's picture

ได้ความรู้มากมาย ขอบคุณมากครับ

// นอนดึงจังครับ :)

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 31 January 2014 - 12:24 #676326 Reply to:675978
PaPaSEK's picture

นอนดึงเลยนะครับ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 30 January 2014 - 04:04 #675979
mr_tawan's picture

Authorization นี่มันเป็นการมอบสิทธิ์ มากกว่าจะเป็นการจำกัดสิทธินะครับ คือตามความหมายมันคือการอนุญาตให้ทำอะไร มากกว่าการบอกว่าทำอะไรไม่ได้

อ้างอิง OALD

1.[uncountable, countable] official permission or power to do something; the act of giving permission
2.[countable] a document that gives somebody official permission to do something

อย่าง user ของ unix ถ้าไม่ได้ grant right อะไรเลย ไม่ได้เอาเข้า group เลย ก็จะมีความสามารถจำกัดมาก ต้องมอบสิทธิ์ให้กระทำการได้ถึงจะมีสิทธิ


  • 9tawan.net บล็อกส่วนตัวฮับ
By: Alios
iPhoneAndroidWindows
on 30 January 2014 - 09:59 #676043 Reply to:675979

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

By: Go-Kung
iPhoneWindows PhoneAndroidBlackberry
on 30 January 2014 - 11:52 #676072 Reply to:676043

เหมือนบัตรถูกต้องแล้วครับ

แต่เทียบเป็นบัตร Access ของงาน Event จะเหมาะกว่าครับ
คือใครที่ไม่ได้รับบัตร Access (No Autiority) ก็จะไม่สามารถเข้าพื้นที่ได้ตั้งแต่ประตูหน้าเลย
จากนั้นบัตรสีไหน แบบไหนเข้าอะไรได้บ้างก็ว่ากันไปตามที่ได้รับ grant มาครับ
เช่นบัตรผู้เข้าชมงานก็จะเข้าได้เฉพาะหน้างาน (Front-end) แบบ Read only
บัตรผู้จัดบูทก็จะเข้าหลังงาน (Back-end) ได้เฉพาะโซนที่เป็นของตนเอง
บัตรผู้ควบคุมงาน อาจจะเข้าได้ทุกส่วน ควบคุมได้ทุกอย่างเป็น Full authorization

อย่างเช่น SAP ก็ใช้ Role based ครับ
User ที่ถูกสร้างขึ้นมาตอนแรกจะ No Authorization คือไม่สามารถทำอะไรได้เลยนอกจาก Login เข้าไปเห็น Menu
จากนั้นจะเริ่มใช้งานคำสั่งต่างๆได้ ต้องได้รับการ grant role เข้าไปก่อนครับ
และก็จะสามารถใช้งานได้ "เท่าที่ได้รับสิทธิ์" ตาม role ครับ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 30 January 2014 - 14:59 #676109 Reply to:676072
mr_tawan's picture

แบบ Blognone ก็จะเป็น

  1. Guest คือ มีสิทธิอ่านเนื้อหาอย่างเดียว
  2. ROM (Read-only Member) ถูก Authorize ให้สามารถเห็น Upcoming ได้ Comment ได้ 10 ครั้งต่อวัน เขียนข่าวใหม่ได้
  3. Contributor ถูก Authorize ให้ Comment เท่าไหร่ก็ได้
  4. Writer ถูก Authorize ให้โหวตรับ Writer ได้ Approve ข่าวตัวเองได้
  5. Founder ถูก Authorize ให้ Approve ข่าวคนอื่นได้ ลบเนื้อหาได้ ปรับเปลี่ยนเวปได้ ฯลฯ

Authorization มันเป็นการเพิ่มสิทธิขึ้นทีละน้อยน่ะครับ อย่าง Contributor มีสิทธิเท่าเทียมกับ ROM ทุกประการ แต่เพิ่มเรื่องของการ Comment กี่ครั้งก็ได้ต่อวันเข้ามา

ผมเข้าใจว่า ตามบทความแล้ว เมื่อเทียบกับระบบที่ไม่มีการทำ Authorization เลยอย่าง DOS (ที่ไม่มีแม้กระทั่ง Authentication (ยืนยันบุคคล) ระบบที่มีจะมีการจำกัดสิทธิ/อำนาจของผู้ใช้ตามหน้าที่ของตัวเอง แต่ตามศัพท์แล้วคำนี้หมายถึงการให้อำนาจ ไม่ใช่การลดอำนาจน่ะครับ ผมเกรงว่าคนจะเข้าใจว่า Authorization หมายถึงการอนุญาตให้ทำอะไรก็ตราบเท่าที่ไม่ได้ถูกห้าม ซึ่งในระบบคอมพิวเตอร์มันก็แปลแบบนั้นได้ แต่ตามปรกติถ้าทำแบบนั้นอาจจะผิดนะ

เช่น การเลี้ยวซ้ายตามสี่แยกที่ไม่ได้ติดป้ายว่า "หยุดรอสัญญาณไฟก่อนเลี้ยวซ้าย" เนี่ย ตามหลักแล้วถึงไม่มีป้ายบอกก็ต้องรอสัญญาณไฟเลี้ยวซ้ายหรือสัญญาณไฟเขียวก่อน แต่พี่ไทยถือเอาเป็นเลี้ยวซ้ายผ่านตลอดเฉยเลย กลายเป็นการฝ่าไฟแดงไป ทั้ง ๆ ที่จริงเราไม่ได้ถูก authorize ให้ทำแบบนั้น แต่เจ้าหน้าที่บางกลุ่มสามารถทำได้ในกรณีที่จำเป็น ถือว่าเป็นอำนาจตามหน้าที่ (Authority) ตัวอย่างนี้อาจจะไม่ค่อยถูกเท่าไหร่แฮะ 555


  • 9tawan.net บล็อกส่วนตัวฮับ
By: panurat2000
ContributorSymbianUbuntuIn Love
on 30 January 2014 - 11:08 #676063 Reply to:675979
panurat2000's picture

การจำกัดสิทธิ์ในระบบคอมพิวเตอร์อาจจะเป็นการจำกัดการเข้าถึงคอมพิวเตอร์ตั่งแต่แรก

ตั่งแต่แรก => ตั้งแต่แรก

และเมื่อเข้าไปภายในแล้วก็ยังมีการตรวจสอบสิทธิหลายชั้นตอน

หลายชั้นตอน => หลายขั้นตอน

แต่ต้องอ่านผ่าน "คอมพิวเตอร์" ที่รันซอฟต์แวร์ที่เท่านั้น

ที่รันซอฟต์แวร์ที่เท่านั้น ?

ทีมวิจัยจากบริษัท Advanced Digital Security Research ร่วมกับห้องแลปจากมหาวิทยาลัยเคมบริดจ์

ห้องแลป => ห้องแล็บ

แต่ทีมวิจัยตามมหาวิทยาลัยก็ใช่เครื่องมือประสิทธิภาพสูงดักรเฟิร์มแวร์ที่อ่านระหว่างบูตเครื่อง

ก็ใช่เครื่องมือ => ก็ใช้เครื่องมือ

ดักรเฟิร์มแวร์ ?

สิทธิในการแก้ไขโพสของตัวเอง, สิทธิในการคอมเมนต์, สิทธิในการอ่านโพส, สิทธิการคอมเมนต์, หรือสิทธิในการลบคอมเมนต์

สิทธิในการคอมเมนต์ => สิทธิในการแก้ไขคอมเมนต์

ผู้ใช้แต่ละคนจะสามารถมีได้หลายบทบทพร้อมกัน

บทบท => บทบาท

กระบวนการจัดการสิทธิอย่างพื้นฐานนั้น คือ เมื่อผู้ใช้มีบทบาทมากขึัน

มากขึัน => มากขึ้น

รวมถึงเข้าแกไ้ขไฟล์คอนฟิกของเว็บเซิร์ฟเวอร์ได้โดยใช้สิทธิ root

แกไ้ข => แก้ไข

ผู้ใช้ได้ที่สามารถ sudo เข้ามารันคำสั่งเหล่านั้นได้ จะไม่สามารถรันคำสั่งอื่นๆ ได้

ผู้ใช้ได้ => ผู้ใช้

ทำให้สิทธิถูกจำกัดไว้ทอย่างละเอียด

ไว้ทอย่าง => ไว้อย่าง

เสมือนผู้ใช้ root เป็นผู้รัน โดนไม่ต้องถามรหัสผ่านซ้ำ

โดนไม่ต้อง => โดยไม่ต้อง

ตัวอย่างที่เราพบกันบ่อยครั้งอาจจะเป็นมัลแวร์ที่แพร่ผ่านไมโครซอฟท์เวิร์ค เพราะเวิร์คเองรองรับสคริปต์ภายในไฟล์

เวิร์ค => เวิร์ด

แต่เมื่อเวลาผ่านไป แอพพลิเคชั่น LINE กลับมีสามารถที่จะอ่าน SMS ของเราได้ตลอดเวลา

กลับมีสามารถ => กลับสามารถ

By: lew
FounderJusci&#039;s WriterMEconomicsAndroid
on 30 January 2014 - 17:17 #676155 Reply to:676063
lew's picture

แก้ไขแล้วครับ

แก้ "การจำกัดสิทธิ์" เป็น "การให้อำนาจ" ตามพจนานุกรมแล้วเช่นกัน


lewcpe.com, @wasonliw

By: mr_tawan
ContributoriPhoneAndroidWindows
on 30 January 2014 - 20:55 #676209
mr_tawan's picture

ผมให้อีกเพลงที่ไม่เกี่ยวกับบทความละกันนะครับ ...

ผมถูก Authorize แค่ให้...ทำได้เพียงแค่คิดถึงเธอ ... เท่านั้นล่ะครับ ...


  • 9tawan.net บล็อกส่วนตัวฮับ
By: HMage
AndroidWindows
on 31 January 2014 - 01:19 #676270 Reply to:676209

กรณีนี้คงไม่ต้องมี authorize เพราะเป็นสิทธิระดับ public user อยู่แล้ว
และอาจจะมี user มากมายหลายคนใช้สิทธินี้คิดถึงเธอพร้อมกันก็เป็นได้

By: lew
FounderJusci&#039;s WriterMEconomicsAndroid
on 31 January 2014 - 02:59 #676281 Reply to:676270
lew's picture

อย่างน้อยก็เป็น "authenticated user" ครับ ยังเข้าไปพูดคุยได้วันละ 10 คอมเมนต์เหมือน Blognone :/


lewcpe.com, @wasonliw

By: hisoft
ContributorWindows PhoneWindows
on 31 January 2014 - 03:37 #676286 Reply to:676281
hisoft's picture

"เจ็บ" :'(

By: neizod
ContributorTraineeIn Love
on 31 January 2014 - 03:53 #676288 Reply to:676281
neizod's picture

ก็ยังดีกว่า ping ไปไม่ติด แต่ public messege ไว้บน bbs แล้วดันรู้ตัวนะฮะ

By: diewland
AndroidWindows
on 3 February 2014 - 12:22 #676801
diewland's picture

ปิดได้เฉียบ