Authorization: เป็นได้แค่.....

by lew
29 January 2014 - 19:51

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

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

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

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

กระบวนการที่มีประสิทธิภาพกว่าคือการให้อำนาจการเข้าถึงตัวเครื่องคอมพิวเตอร์ตั้งแต่ทีแรก เราเห็นในภาพยนตร์เรื่อง 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 นั้นเลือกใช้ระบบการให้อำนาจแบบกรรมนี้

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ส่งท้าย

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

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

Blognone Jobs Premium