Toggle navigation
เส้นทางการเรียนรู้
บทเรียนออนไลน์
บทความ
ประกาศงาน
กิจกรรม
สมาชิก
ขั้นตอนการสมัคร
สิทธิประโยชน์
Login with Facebook
บทความ
ไม่ว่าจะ ข่าวสาร บทสัมภาษณ์ และ Digital Skill บนสื่อ
มีให้คุณได้อ่านบทความดี ๆ มากมายแล้วที่นี่
ข่าวสาร
บทสัมภาษณ์
Digital Skill บนสื่อ
18
ต.ค.
โดย: สุวิชา บัวคอม
| Security
Broken Access Control แหกกฎการควบคุมการเข้าถึงระบบ
Broken Access Control คือการควบคุมการเข้าถึงที่เราทำหรือจัดการไว้ถูกเข้าถึงได้จากแฮกเกอร์ที่มีสิทธิอยู่นอกเหนือจากที่เรากำหนดไว้ ผลที่เกิดอาจจะทำให้เปิดเผยข้อมูลที่ไม่ได้รับอนุญาตดัดแปลงหรือทำลายข้อมูลทั้งหมดหรือดำเนินการทางธุรกิจนอกขอบเขตของผู้ใช้ โดยช่องโหว่ Broken Access Control สามารถเกิดได้หลายช่องทางโดยมีจุดประสงค์หลักในการโจมตีคือการเข้าถึงระบบหรือข้อมูลที่อยู่นอกเหนือขอบเขตของผู้ใช้ที่ควรจะใช้ได้ โดยตัวอย่างการโจมตีมีดังต่อไปนี้ การ bypass การตรวจสอบการเข้าถึงระบบ หรือระบบไม่ได้มีการตรวจสอบ แฮกเกอร์จะโจมตีโดยวิธีการแก้ไข URL หรือดัดแปลง API สำหรับเข้าถึงข้อมูลหรือระบบการอนุญาตให้เปลี่ยนเปลี่ยนรหัสผ่านของผู้ใช้คนอื่นได้การยกระดับสิทธิ์ผู้ใช้ในระบบโดยไม่ต้อง login เข้าสู่ระบบ หรือ login เข้าสู่ระบบโดยมีระดับสิทธิ์เป็น admin โดยที่ login เป็นผู้ใช้ปกติปลอมแปลงหรือทำการ replay ข้อมูลจำพวก token ที่ใช้ควบคุมสิทธิ์ของผู้ใช้การอนุญาตให้ใช้ API ที่ผู้ใช้ทั่วไปไม่ควรมีสิทธิ์ใช้โดยไม่มีมาตรการจัดการการเข้าถึงการอนุญาตให้เข้าถึง API ที่มีสิทธิพิเศษโดยไม่มีมาตรการควบคุมการเข้าถึงและยังมีวิธีอื่นๆ อีกมากมายไปลองแล็บกันเลยดีกว่า โดยครั้งนี้จะใช้แล็บ Web For Pentester ที่ได้เคยเล่นกันไปแล้วใน EP1 และ EP4 โดยในหน้าเว็บจะมีเมนู Directory traversal แต่ไม่มีลิงค์ให้กดเข้า แต่เป็นรูปภาพแทนดังนั้นเราจึงต้อง Inspect เพื่อดูโค้ดเพื่อหาข้อมูลต่อไป โดยวิธีการ Inspect ถ้าใช้ Google Chrome Browser จะทำได้โดยการ คลิกขวาและเลือก Inspectจากนั้นจะได้หน้าต่างแบบนี้โผล่ขึ้นมาโดยส่วนมากหน้าต่างนี้จะอยู่ด้านล่าง ใครที่เปิดมาแล้วหน้าต่างไปอยู่ด้านอื่นไม่ต้องตกใจ เราสามารถเปลี่ยนได้ ตรงปุ่ม นี้เลยแล้วเลือกฝั่งที่อยากให้หน้าต่างนี้อยู่ เมื่อได้แล้วจะเห็น code หน้าตาแบบนี้เป็นการใช้คำสั่งเรียกไฟล์โดยหน้าเว็บที่เขียนด้วยภาษา php ลองเข้าไปดูกันhttp://192.168.56.104/dirtrav/example1.php?file=hacker.pngจะเห็นว่าไฟล์รูปภาพ ถูกเรียกมาที่หน้าเว็บอีกทีการเรียกไฟล์มาแสดงแบบนี้มีความเป็นไปได้ว่าแฮกเกอร์จะเข้ามาเปลี่ยนค่าของ parameter ที่ชื่อ file ให้ไปเรียกไฟล์อื่นๆ อาจมีบางคนสงสัยว่าเราจะรู้ได้อย่างไรว่าไฟล์อื่นๆชื่ออะไร มีไฟล์อะไรบ้าง ซึ่งถ้าให้เดาสุ่มทีละไฟล์คงยากที่จะเจอแต่ละไฟล์ ดังนั้นการแฮกเกอร์ส่วนมากจึงมักจะเข้าหาไฟล์ที่สำคัญที่มักจะเก็บอยู่ใน well-known path (ตำแหน่งไฟล์ที่มักจะรู้กันอยู่แล้วว่าอยู่ที่ไหน) ซึ่งตัวอย่างที่จะทำก็คือ ไฟล passwd ที่อยู่ใน /etc/passwd นั่นเองมาเริ่มหากันเลย ซึ่งการที่เราจะไปเรียกไฟล์นั้นไฟล์ /etc/passwd นั้นไม่สามารถเรียกได้โดยตรงเพราะว่าไฟล์ถูกเรียกจาก directory ที่เก็บรูปในเว็บ เราจึงต้องใช้ .. ช่วยโดย .. นี้คือการอ้างถึง directory ก่อนหน้าที่เราอยู่ เช่นเราอยู่ที่ /a/b/c/d ถ้าเราเรียกถึง .. จากตรงนี้ก็คือการที่เราเรียกถึง /a/b/c เราจะเรียกถึง directory ก่อนหน้าซ้อนทับกันหลายๆรอบเพื่อนให้ไปถึง root path (ตำแหน่งที่เก็บไฟล์ที่อยู่ลึกสุดของระบบ) โดยใช้ .. ที่ว่ามาด้านบน แล้วคั่นด้วย / เพื่อเรียกซ้อนทับกันหลายครั้งนำมาใส่ในค่าของ parameter ชื่อ file จะได้ลิงค์เป็นแบบนี้http://192.168.56.104/dirtrav/example1.php?file=../etc/passwdจะเจอหน้าว่างเปล่าแสดงว่ายังไม่เจอไฟล์ ให้เราเพิ่มจำนวน ../ เพื่อเรียกถึง directory ก่อนหน้าซ้อนทับกันไปเรื่อยๆจนเจอไฟล์ passwd จะได้ลิงค์มาแบบนี้http://192.168.56.104/dirtrav/example1.php?file=../../../etc/passwdโดยเรียกซ้อนทับกันทั้งหมด 3 ครั้ง จะเจอข้อมูลของไฟล์ passwd ที่หน้าเว็บเรียกมาแสดง
อ่านต่อ
14
ต.ค.
โดย: สุวิชา บัวคอม
| Security
XML External Entities (XXE) Processing แฝงคำสั่งเรียกทรัพยากรณ์มากับ XML
EP4 | XML External Entities (XXE) Processing แฝงคำสั่งเรียกทรัพยากรณ์มากับ XMLก่อนจะไปรู้จักช่องโหว่ XML External Entities Processing ผมจะพาไปรู้จักกับ XML อย่างคร่าวๆ กันก่อน XML ย่อมาจาก Extensible Markup Language เป็นการ encode (แปลงรหัส) เอกสารให้อยู่ในรูปแบบ ที่สามารถอ่านได้ทั้งคนแล้วก็เครื่อง รูปแบบของ XML จะคล้ายๆกับภาษา HTML ที่ใช้แท็ก <> และปิดด้วย </> ดังตัวอย่างนี้<message><from>Groot</from><subject>Message from Groot to Rocket</subject><body>I am Groot</body></message>โดยจะมี Document Type Definition (DTD) เป็นมาตรฐานในการตรวจสอบข้อมูลที่ได้รับมาจากภายนอก กำกับเอกสารไว้ กำกับไว้ด้านบนดังนี้<?xml version="1.0" ?><!DOCTYPE message [<!ELEMENT message (to,from,subject,body)><!ELEMENT from (#PCDATA) <!ELEMENT to (#PCDATA)<!ELEMENT subject (#PCDATA) <!ELEMENT body (#PCDATA)]><message><from>Groot</from><to>Rocket</to><subject>Message from Groot to Rocket</subject><body>I am groot</body></message>อธิบายจากโค้ดตามลำดับดังนี้!DOCTYPE message เป็น root element (element ใหญ่สุด) ของเอกสารนี้ ที่มี element !ELEMENT message บรรจุ element ไว้ 4 ตัว คือ to, from, subject, และ body!ELEMENT from, to, subject, และ body ที่มี (#PCDATA) เป็นการประกาศว่า แต่ละตัวเป็นข้อมูลประเภท Parsed Character Data การใช้ XML แล้วอาจจะมี หรือ ไม่มี DTD ก็ได้ โดยการใช้ DTD จะแบ่งออกเป็น 2 ประเภทคือ External และ Internalตัวอย่าง DTD แบบ External<?xml version="1.0"?><!DOCTYPE message SYSTEM "message.dtd"><message> <from>Groot</from><to>Rocket</to><subject>Message from Groot to Rocket</subject><body>I am groot</body></message>เป็นการ import ไฟล์ message.dtd จากภายนอกเข้ามาในเอกสาร XML ด้วยการกำหนดผ่าน keyword ที่ชื่อ SYSTEMปล. ตอนนี้อาจจะงง เดี๋ยวจะมีแล็บให้ลองตัวอย่าง DTD แบบ Internal<!ENTITY name "Groot"><!ENTITY author "I am &name;"><author>&author;</author>จากด้านบนเป็นการสร้าง entity สองตัวและเรียกใช้ซ้อนกันจะได้ผลลัพธ์ออกมาเป็น<author>I am Groot</author>เมื่อเราเข้าใจ XML อย่างคร่าวๆแล้วเราก็มาลองทำแล็บ กันเลยก่อนที่จะเริ่มผมไม่ได้ลืมบอกนะครับว่าช่องโหว่ XXE คืออะไรผมอยากให้ลองทำแล็บกันดูก่อนแล้วคิดดูเองว่า XXE ที่ทุกคนเข้าใจจากการได้ลองทำแล็บ จะเหมือนที่ผมเขียนไว้หรือเปล่าถ้าพร้อมแล้วเรามาเริ่มกันเลย ในครั้งนี้จะพาเล่นแล็บจาก Vulnhub
อ่านต่อ
11
ต.ค.
โดย: Laris
| IoT
IoT Connectivity
LPWAN — Low-Powered Wide Area Networkถ้าจะพูดถึงคำว่า IoT หรือ Internet of Things นะคะ หรือ การเอา Things มาเชื่อมต่อกัน เพื่อให้มีการแลกเปลี่ยนข้อมูลกัน จะเห็นว่าคำว่า IoT ไม่ได้หมายถึงแค่ device /sensor หรือ application เพียงอย่างเดียวนะคะ IoT Connectivity ก็เป็นส่วนผสมหลักในการทำให้ Things เหล่านี้ สามารถพูดคุยสื่อสารกันได้ด้วย Data Protocol อย่างเช่น MQTT ที่เราได้พูดถึงกันค่อยข้างละเอียดกันไปแต่ต้นแล้วนะคะ ซึ่งในปัจจุบัน มีการนำ IoT เข้ามาใช้งานจริงจัง ในหลายๆภาคอุตสาหกรรม ที่เห็นเป็นตัวอย่างได้ชัดเจนก็พวก IoT Application ต่างๆ ที่ขึ้นต้นด้วยคำว่า Smart นี่แหละค่ะ ไม่ว่าจะเป็น Smart City, Smart home, หรือ Smat Farmงาน IoT Application ส่วนใหญ่ก็จะมีลักษณะการใช้งานที่คล้ายกันค่ะ คือ ต้องตอบโจทย์หลักสำคัญๆเลยที่ว่า….ต้องใช้ พลังงานน้อยๆ (low enery consumption) ต้องส่งข้อมูลน้อยๆ (low data rate) ต้องสามารถส่งได้ในระยะทางที่ไกลๆ (long range) และที่สำคัญอีกอย่างนะคะ ต้องใช้งบน้อยๆค่ะ (cost effectiveness) และด้วยลักษณะเฉพาะตัวในการใช้งานของ IoT Application ข้างต้นนี้ Network Technology ที่มีอยู่ อาจจะไม่ตอบโจทย์ความต้องการของ IoT Application ได้ซะทั้งหมดทีเดียว เช่น Bluetooth ก็จะมีข้อเสียตรงที่ไม่ครอบคลุมพื้นที่ระยะไกลค่ะ (< 5km ) หรือ Cellular Communication เช่น 3G/4G สามารถให้การเชื่อมต่อครอบคลุมพื้นที่ได้ไกลกว่า 5 กิโลเมตร แต่ไม่ค่อยเป็นมิตรกับแบตเตอรี่ค่ะ (ไม่ตอบโจทย์เรื่อง battery consumption) และนี่ก็เป็นที่มาของ Wireless Technology อีกรูปแบบนึงค่ะ ที่เรียกว่า LPWAN หรือ Low-Powered Wide Area Network ค่ะ เพื่อให้เหมาะสมกับ IoT Application ค่ะ Figure -1 Network Technologies and Distancesที่จะได้ยินชื่อกันบ่อยๆ และค่อนข้างจะเป็น Standard หน่อย ก็จะมี Sigfox , LoRa, และ NB-IoT ค่ะ …ลองมาอ่านประวัติกันคร่าวๆค่ะ…SigfoxSigfox ถูกพัฒนาขึ้นมาโดยเน้นไปทาง LPWAN โดยบริษัท Sigfox ในฝรั่งเศสค่ะ ใช้ Standard และ Technology ของตัวเองค่ะ เช่น ใช้ modulation ที่ทำให้สามารถเพิ่มระยะในการรับส่งมากขึ้นLoRaแรกเริ่มเดิมทีถูกพัฒนาโดยบริษัท startup ในฝรั่งเศษ ชื่อ Cycleo ค่ะ หลังจากนั้นก็ถูกเปลี่ยนมือไปอยู่ภายใต้การดูแลโดย บริษัท Semtech ค่ะ LoRa ถูกกำหนดและควบคุมด้วย Standard ของ LoRa Alliance ค่ะNB-IoTหลังจากที่มี Sigfox และ LoRa บริษัทที่ทำเกี่ยวกับ cellular และ 3GPP เองก็อยากมีส่วนร่วมในตลาดของ LPWAN จึงได้เปิดตัว NB-IoT ขึ้นมาค่ะ และถูกควบคุมดูแล โดย 3GPP นั่นเองค่ะจากรูป Figure -1 Network Technologies and Distances จะเห็นว่า LPWAN มีทั้งแบบที่เป็น Licensed (NB-IoT) และ Unlicensed (Sigfox และ LoRa) ซึ่ง unlicensed band ก็จะมีข้อดีที่ว่าไม่ยุ่งยากค่ะ ไม่จำเป็น ต้องมี Service provider ช่วยลดต้นทุน แต่ก็จะมีปัญหาเรื่องสัญญาณรบกวนถ้าหากว่ามีการใช้คลื่นความถี่เดียวกัน ในพื้นที่เดียวกันค่ะ ด้วยความที่ว่าเป็น unlicensed band นะคะ ใครอยากจะใช้ก็ได้และในบทความถัดไป เราจะมาทำความเข้าใจ โดยละเอียดกับ LoRa กันค่ะอ้างอิงจากWhat is LPWAN and the LoRaWAN Open Standard?
อ่านต่อ
9
ต.ค.
โดย: Laris
| IoT
LPWAN Technologies
LoRa — LoRaWANจากบทความที่แล้ว เรื่อง IoT Connectivity ซึ่งก็จะพูดถึงซะเยอะในเรื่องของ LPWAN Technology นะคะ ทั้ง Sigfox, LoRa, และ NB-IoT เพราะความที่ LPWAN ค่อยข้างจะตอบโจทย์ความต้องการของ IoT application ได้ค่อนข้างดีเลยทีเดียวค่ะ ประหยัดพลังงานได้มากถึงขั้นที่ว่าใช้กันได้เป็นปีๆโดยไม่ต้องชาร์จหรือเปลี่ยนแบตเตอรีเลยค่ะ และใช้งานได้ในพื้นที่ห่างไกล(remote area)ในบทความนี้จะขออธิบายเพิ่มเติมเกี่ยวกับ LoRa ค่ะ ก่อนที่เราจะได้ลงมือทำกันค่ะLoRa หรือ LoRaWAN มักจะถูกเรียกแทนกันนะคะ(ผู้เขียนเองก็เคยสงสัยค่ะ ว่าต้องเรียกว่ายังไงกันแน่) แต่ความจริงแล้วในเชิงคำนิยามเค้ามีความหมายแตกต่างกันค่ะLoRaWAN Protocol (sources : Smart Makers, OpenIoT, )LoRa คือ Physical Layer Modulation ที่ถูกพัฒนาโดย Semtech ใน LoRaWAN protocol ซึ่งมีวิธีการ modulation มาจาก Chirp Spread Spectrum (CSS) modulation ที่ใช้ใน radar application ใน military และ space communication ค่ะ เพราะว่าสามารถใช้งานได้ในระยะทางไกล ใช้พลังงานน้อย และคลื่นถูกรบกวนได้น้อยค่ะ เพราะใช้คลื่น Sub 1GHZ ในแต่ละที่ก็จะใช้คลื่นความถี่ที่แตกต่างกันค่ะ เช่น ในอเมริกา ก็จะใช้ความถี่ที่ 915 MHZ ยุโรปก็จะใช้ความถี่ที่ 868 MHZ ในเอเชียว ก็จะใช้ความถี่ที่ 430 MHZ เป็นต้นค่ะmodulation คือการ modify คลื่นวิทยุ (radio signal)ธรรมดา ๆให้สามารถ carry ข้อมูลได้ค่ะส่วน LoRaWAN จัดว่าเป็น wireless communication standard เหมือนพวก Bluetooth, GSM, 4G, หรือ LTE และเพื่อให้เกิดความแตกต่างจาก LoRa , LoRa Alliance เลยใช้คำว่า LoRaWAN ในการอ้างอิงถึง architecture และ specification เวลาพูดถึง end-to-end LoRaWAN communications และ protocols ค่ะLoRaWAN ArchitectureLoRaWAN ประกอบด้วย End node (end device)Gateway (concentrator)Network serverApplication serverข้อมูลที่ถูกส่งจาก node มักจะถูกส่งไปยัง gateway หลายๆตัวค่ะ และ gateway เองก็จะส่งข้อมูลไปให้ network server ผ่าน cellular, Ethernet, Wi-Fi, หรือ satellite ข้อมูลที่ duplicate จะถูก de-duplicate ที่ network server และสุดท้ายแล้ว ข้อมูลจะถูกส่งไปที่ application server ซึ่งเป็น ข้อมูลที่ใช้ใน payload ของ LoRaWAN message ค่ะLoRaWAN TopologyLoRaWAN Star TopologyLoRaWAN topology จะเป็นแบบ “star of stars” topology ซึ่ง end node จะมีการแลกเปลี่ยนข้อมูลผ่าน gateway ที่ทำตัวคล้าย bridge และมี central LoRaWAN network serverLoRaWAN SecurityLoRaWAN Securityจากรูป LoRaWAN Security ค่ะ ในชั้นแรกที่เรียกว่า Network security ที่ MAC layer ค่ะ การันตี authentication ของ end node โดย network server และมีการ encrypt ข้อมูล โดยใช้ AES ค่ะแต่ละ end node ก็จะใช้ network session key (NwkSKey) ที่จะถูกใช้โดย ตัว end node เอง และ network server ค่ะ เพื่อให้มั่นใจเรื่อง data integrity ค่ะถัดไปในชั้นที่สองนะคะ application session key (AppSKey) จะถูกใช้ในการ encrypt/decrypt ระหว่าง end node และ application server ค่ะ เพื่อป้องกัน LoRaWAN service provider เข้าถึงตัว application payload หากไม่ได้รับอนุญาตค่ะอ้างจิงจากLoRaWAN simply explainedGonzalo Salgueiro; David Hanes; Rob Barton , IoT Fundamentals: Networking Technologies, Protocols, and Use Cases for the Internet of Things, 2017Pradeeka Seneviratne, Beginning LoRa Radio Networks with Arduino, 2019Perry Lea, Internet of Things for Architects, 2018
อ่านต่อ
7
ต.ค.
โดย: สุวิชา บัวคอม
| Security
Sensitive Data Exposure | ข้อมูลที่เป็นความลับถูกเปิดเผย
Sensitive Data Exposure ก็คือ ช่องโหว่ที่เป็นการเปิดเผยข้อมูลที่ควรเป็นความลับ อาจจะเปิดเผยโดยตั้งใจหรือไม่ตั้งใจ โดยมีวิธีการใดก็ตามที่ทำให้เกิดการเข้าถึงข้อมูลที่ควรเป็นความลับได้ จะถือว่าเป็นช่องโหว่ Sensitive Data Exposureโดยข้อมูลที่หลุดออกมานั้นอาจจะอยู่ในรูปแบบปกติ คือ คนทั่วไปสามารถอ่านเข้าใจได้ หรือ อาจจะต้องใช้ความรู้ในการเข้าหรัสหรือแปลงรหัสในการอ่าน เช่น ข้อมูลถูกแปลงด้วยการ ด้วยการเลื่อนตำแหน่งของตัวอักษรไป 13 ตำแหน่ง ดังตัวอย่างนี้จะแปลงอักษรของคำว่า ‘digitalskill’ ไป 13 ตำแหน่ง (วิธีการนี้เรียกว่า ROT13) ถ้าให้นับเลื่อนไป 13 ตำแหน่งทีละตัวอักษรก็จะทำให้ยุ่งยาก วิธีการที่ง่ายคือ ทำตารางของตัวอักษรมาทั้งหมด 26 ตัวอักษร จะเห็นได้ชัดว่า ตัวอักษรตัวไหนถูกแปลงไปเป็นตัวไหนPlain text (ตัวอักษรเดิมก่อนทำการแปลง)ROT13anbocpdqerfsgthuivjwkxlymznaobpcqdresftguhviwjxkylzmเมื่อเราแปลง ‘digitalskil’ ด้วยการใช้ ROT13 ก็จะได้เป็นคำว่า ‘qvtvgnyfxvyy’ ซึ่งอยู่ในรูปแบบที่คนทั่วไป อ่านไม่รู้เรื่อง ซึ่งข้อความที่พบจริงๆอาจจะเป็นพบเป็นการเลื่อนตัวอักษรที่จำนวนตำแหน่งไม่ใช่ 13 ก็ได้ นอกจากการแปลงข้อมูลแบบนี้ยังมีวิธีการแปลงข้อมูลแบบอื่นอีกมากมายที่เราจะมาเรียนรู้กันในแล็บ แล็บที่จะใช้ในหัวข้อ Sensitive Data Exposure นี้จะใช้แล็บ WebGoat ที่เคยสอนวิธีการติดตั้งและเรียกใช้งานไว้แล้วใน EP2 | Broken Authentication หากใครยังไม่ได้ติดตั้งสามารถเข้าไปดูได้เลย เปิดแล็บ WebGoat ขึ้นมาแล้วเข้าไปที่เมนู Insecure Storage → Encoding Basicsในแล็บจะเป็นพื้นฐานการแปลงข้อมูลโดยวิธีการแปลงข้อมูลเหล่านี้สามารถแปลงกลับมาให้อยู่ใน รูปแบบเดิมได้ ให้เราลองใส่คำว่า ‘digitalskill’ เข้าไป จากนั้นกดปุ่ม “Go!” แล้วดูผลลัพธ์แต่ละช่องซึ่งแบ่งเป็น 3 ส่วน Description (รายละเอียดของการแปลงรหัสแต่ละวิธี), Encoded (ข้อมูลหลังจากถูกแปลงแล้ว), และ Decoded (ข้อมูลเมื่อถูกแปลงกลับ) วิธีที่ 1 คือ Base64 จะเห็นว่าคำว่า ‘digitalskill’ ที่เราใส่ไปในช่อง Enter a string ถูกแปลงเป็น ‘ZGlnaXRhbHNraWxs’ เมื่อเรานำค่าที่ถูกแปลงแล้วไปใส่ในช่อง Enter a string จะได้ข้อมูลเดิมของเรากลับมาให้เห็นในช่อง Decoded วิธีที่ 2: Entity encodingเมื่อใส่ < เข้าไป จะถูกแปลงกลับเป็นเครื่องหมาย “<” ซึ่งเป็นการแปลงรหัส HTML Character Entities สามารถดู HTML Character Entities ตัวอื่นๆได้จากลิงก์นี้https://www.w3schools.com/html/html_entities.asp วิธีที่ 3: Password Based Encryption (PBE)เป็นการแปลงรหัสโดยมีใช้รหัสผ่านไปด้วย การที่จะแปลงรหัสกลับมาได้นั้นจะต้องมีรหัสผ่านที่ตั้งไว้ จึงจะสามารถแปลงกลับมาเป็นข้อความเดิมก่อนที่จะแปลงได้ในรูปแบบปกติ เราใส่คำว่า ‘digitalskill’ แบบไม่กำหนดรหัสผ่านสำหรับการแปลงจะได้คำว่า ‘EuQOKq5NtwBWN+x2RWnr2w==’ กลับมาเมื่อเราใส่คำว่า ‘EuQOKq5NtwBWN+x2RWnr2w==’ กลับเป็นก็จะเป็นข้อความที่ถูกแปลงกลับมาเป็นคำว่า ‘digitalskill’แต่ถ้าเราใส่รหัสผ่านเข้าไปด้วย ในที่นี้ผมใส่รหัสผ่าน ‘
[email protected]
’ และใช้ข้อความว่า ‘digitalskill’ ข้อความที่ได้หลังจากการแปลงคือ ‘igW0tz9kz7IlfxHZzcXOTA==’ เมื่อเรานำไปแล้วกลับโดยไม่รู้รหัสผ่าน จะไม่สามารถแปลงกลับเป็นข้อความเดิมได้และเมื่อเรารู้รหัสผ่านและใส่เข้าไปอย่างถูกวิธีก็จะสามารถแปลงกลับมาเป็นข้อความเดิมได้โดยวิธีการนี้จะมีความสัมพันธ์กับแล็บในบทความ Broken Authentication คือ ถ้าเราตั้งรหัสผ่านไว้ไม่ปลอดภัยจะถูกแกะรหัสได้ โดยความเร็วในการถูกแกะรหัสจะขึ้นอยู่กับความยาก-ง่าย ของรหัสผ่าน วิธีการอื่นๆ สามารถทดลองเล่นเองได้ตามในแล็บนี้เลยครับ
อ่านต่อ
4
ต.ค.
โดย: สุวิชา บัวคอม
| Security
Broken Authentication การรับรองตัวตนที่ไม่มั่นคงปลอดภัย
Broken Authentication คือการรับรองความความถูกต้องของการเข้าถึงระบบอย่างไม่ปลอดภัย การโจมตีช่องโหว่ Broken Authentication มีอยู่หลายรูปแบบ ในบางครั้งอาจจะง่ายมาก หรือบางครั้งอาจจะซับซ้อนมากเลยก็ว่าได้ โดยมีพื้นฐานของการเกิด Broken Authentication อยู่ที่การอนุญาติให้ผู้ใช้ใดๆก็ตามสามารถเข้าถึงไฟล์หรือฟังก์ชันในระบบที่ไม่ควรจะเข้าถึงได้โดยการใช้ประโยชน์จากการมีมาตรการการจัดการการเข้าถึงระบบได้อย่างไม่มั่นคงปลอดภัยหรือมั่นคงปลอดภัยไม่เพียงพอไปลองดูกันในแล็บดีกว่า โดยแล็บที่ผมจะใช้ก็คือ WebGoat เวอร์ชัน 7.1 โดยติดตั้งผ่าน Docker วิธีการติดตั้งแล็บ WebGoat โดยใช้ Dockerสำหรับผู้ที่ยังไม่มี Docker ในเครื่องสามารถดาวน์โหลดและติดตั้ง Docker ได้ที่ URL ด้านล่างนี้:https://www.docker.com/get-started เมื่อติดตั้ง Docker เสร็จแล้วให้ดาวน์โหลด Docker Image ของ WebGoat ผ่านคำสั่ง docker pull ดังนี้:docker pull webgoat/webgoat-7.1เมื่อได้ Docker Image มาแล้วให้สั่ง docker run เพิ่มเริ่มใช้งาน Docker Image โดยจะใช้ port ในการเข้าใช้งานเป็น port 8080docker run -p 8080:8080 -t webgoat/webgoat-7.1เมื่อ run ขึ้นมาสำเร็จแล้วเราจะสามารถเข้าแล็บของเราได้ผ่าน http://127.0.0.1:8080/WebGoatหรือhttp://localhost:8080/WebGoat เข้ามาแล้วจะเจอหน้า Login ให้เราเข้าผ่าน Username: guest และ Password: guestโดยจะมีเมนูเกี่ยวกับข้อผิดพลาดของ Authentication ให้เราเล่นอยู่ทั้งหมด 4 เมนูทางด้านซ้ายมือPassword Strengthเป็นโจทย์เกี่ยวกับความปลอดภัยของรหัสผ่าน โดยให้เราหาว่ารหัสที่ให้มาจะถูกแกะรหัส (crack) ได้ในเวลาเท่าไหร่โดยให้เรานำ password ไปเช็คในเว็บที่เค้าให้มาแล้วนำไปตอบในหน้าโจทย์https://howsecureismypassword.net/ เนื่องจากเป็นแล็บเวอร์ชันเก่า คำตอบที่เราเช็คในเว็บอาจจะไม่ตรง กับคำตอบที่ถูกต้อง ณ เวลานั้น ในปัจจุบันเทคโนโลยีได้พัฒนาให้ผู้โจมตีสามารถ crack รหัสผ่านได้เร็วขึ้น คำตอบตามที่ผมเช็ค ณ เวลาปัจจุบัน 29/4/2562 คือ0 seconds, 0.2 seconds, 2 seconds, 2 hours, 2 days, 36 quintillion years ตามลำกับคำตอบที่ถูกต้องคือ 0 seconds, 2 seconds, 19 seconds, 15 hours, 20 days, 364 quintillion yearsตามลำดับเมื่อเราตอบถูกทั้งหมดและผ่านแล้ว จะได้เครื่องหมายถูกสีเขียวด้านหลัง Password Strength ข้อที่เราผ่าน ตามภาพนี้สำหรับข้ออื่นๆ สามารถลองเล่นได้เองโดยมีคำใบ้จะได้เมื่อกดปุ่ม Show Hints แล้วมีเฉลยดูได้ ด้วยการกดปุ่ม Show Solution
อ่านต่อ
2
ต.ค.
โดย: สุวิชา บัวคอม
| Security
Injection แทรกคำสั่งเพื่อแฮกการทำงานของระบบ
Injection คือเทคนิคการแทรกคำสั่งเข้าไปใน code ภาษาต่างๆ ส่วนมากจะพบได้จากการรับ input มาจาก user โดยที่ server ไม่ได้มีมาตรการป้องกันหรือยอมรับให้นำคำสั่งที่ได้รับมา นำไปประมวลผลอย่างไม่ปลอดภัย โดยการ Injection นั้นมีหลายประเภท แต่ที่ร้ายแรงและพบบ่อยจะเป็น SQL Injection คือการแทรกคำสั่งเข้าไปใน code ภาษา SQL ที่ server เรียกใช้ก่อนจะทำการ SQL Injection ผมแนะนำให้ศึกษาพื้นฐานที่จำเป็นของภาษา SQL โดยคำสั่งที่จำเป็นจะต้องรู้หลักๆ ก็คือคำสั่ง SELECT ที่ใช้ในการเลือกข้อมูลจากฐานข้อมูลมาแสดง โดยคำสั่ง SELECT นั้นมีเงื่อนไขและการจัดเรียงหลายรูปแบบในการเลือกข้อมูล เช่น WHERE, ORDER BY, UNION เป็นต้น สามารถศึกษาได้จากเว็บนี้https://www.w3schools.com/sql/ เพื่อให้เห็นภาพจริงเรามาติดตั้งแล็บแล้วลองทำกันดูเลย โดยที่ต้องติดตั้งมี 2 อย่างหลักๆคือVirtualBox เป็นโปรแกรมจำลองเครื่อง และ Web for Penetration Tester Lab เป็นไฟล์ .iso ไว้ติดตั้งแล็บบน VirtualBoxVirtualBox https://www.virtualbox.org/wiki/Downloads Web for Penetration Tester Lab https://isos.pentesterlab.com/web_for_pentester_i386.iso วิธีติดตั้ง Web for Pentester Labเมื่อติดตั้ง VirtualBox เสร็จแล้วสร้างแล็บด้วยการกดเมนูด้านบน Machine->New…ตั้งชื่อและตั้งค่าให้เรียบร้อยใช้ RAM 1GB, พื้นที่ดิส 8GBเมื่อสร้างเครื่องมาแล้ว คลิกที่เครื่องจากนั้นตั้งค่าเครื่องโดยการกดเมนูด้านบน Machine->Settings...เลือกแถบ Network ตั้งค่าเป็น Host-only Adapter หรืออาจจะตั้งเป็นค่าอื่นก็ได้หากเข้าใจการทำงานของ Network โดยให้เครื่องของเราสามารถติดต่อกับเครื่องจำลองที่เราสร้างได้เลือกแถบ Storage คลิกที่รูป และเลือกไฟล์ Web for Pentest ที่เราโหลดมา จากนั้นกด OKเมื่อตั้งค่าทุกอย่างเสร็จแล้วให้ดับเบิลคลิกที่เครื่องเพื่อเปิดเครื่องของเราขึ้นมาจะได้หน้าตาแบบนี้พิมพ์คำสั่ง clear เพื่อเคลียหน้าจอเทอร์มินัล$ clearและพิมพ์คำสั่ง ifconfig เพื่อดู ip ของเครื่อง$ ifconfigจะเห็น IP ที่เราสามารถเข้าเว็บไซต์ผ่านเครื่องหลักของเราที่อยู่นอก VirtualBox ได้โดยการนำ IP ไปเข้าที่เว็บบราวเซอร์ ในที่นี้จะเป็น IP 192.168.56.104เมื่อเข้ามาที่หน้าเว็บได้แล้วให้เข้ามาที่ SQL Injection Example 1หรือเข้าผ่าน URL ด้านล่างนี้http://192.168.56.104/sqli/example1.php?name=root(เปลี่ยน IP ด้านหน้าให้เป็นเครื่อง Web for Pentester ใน VirtualBox โดยของแต่ละคนจะไม่เหมือนกัน)เมื่อเข้ามาจะเห็นว่าหน้าเว็บได้ทำการดึงข้อมูล id, name, และ age (ในฐานข้อมูลอาจจะเป็นชื่ออื่นก็ได้ แต่ในแอพพลิเคชัน) มาจาก ฐานข้อมูล ถ้าหากเราเข้าใจการใช้คำสั่ง SELECT ในภาษา SQL ที่มีเงื่อนไขตรงกับที่เว็บนี้ใช้ก็จะสามารถเดาคำสั่งได้ว่าเป็นคำสั่งดังนี้ (เราจะไม่รู้ชื่อฐานข้อมูล)SELECT id, name, age FROM [database name] WHERE name=rootคำสั่ง SQL ที่ใช้อาจจะเลือกข้อมูลอย่างอื่นมาด้วยหรือเลือกมาทั้งหมด (SELECT *) แต่นำมาแสดงให้เห็นแค่สามอย่าง เงื่อนไข WHERE จะนำข้อมูลที่ตรงกับเงื่อนไขมาแสดงในเว็บนี้จะนำข้อมูลของคนที่มี name เป็น root ออกมาแสดงโดยระบบจะไปเช็คทีละชุดข้อมูล (record) ว่าตรงตามเงื่อนไขหรือเปล่าถ้ามีจะถูกเลือกออกมาแสดง หากผู้โจมตีระบบต้องการจะนำข้อมูลของทุกคนในระบบมาแสดง ผู้โจมตีจะทำการ Injection โดยการทำให้เงื่อนไขที่ถูกนำไปเช็คเป็นจริงทั้งหมดโดยเว็บไซต์นี้มีการรับข้อมูลจากผู้ใช้ผ่านพารามิเตอร์ name ใน URL แล้วนำไปประมวลผลคำสั่ง SQLผู้โจมตีจะใส่ค่าที่ทำให้เงื่อนไขเป็นจริงโดยคาดเดาการเขียนโปรแกรมของโปรแกรมเมอร์ โดยส่วนมากการเขียนแบบที่ไม่มีการป้องกัน (นำค่าที่รับมาไปประมวลผลในคำสั่ง SQL เลย) เป็นแบบนี้$sql = "SELECT id, name, age FROM [database name] WHERE name='".[user input]."'";$result = mysql_query($sql);เมื่อใส่ค่า root เข้าไปโปรแกรมจะเห็นแบบนี้$sql = "SELECT id, name, age FROM [database name] WHERE name='root'"การโจมตีของผู้โจมตี จะใส่ค่า 'or'1'='1 หรือ 'or'2'='2 หรือ 'or'a'='a หรืออะไรก็ได้ ที่ได้ค่าเป็นจริงเข้าไปโดยด้านหน้าคำสั่งที่ใส่เข้าไปจะเป็นค่าอะไรก็ได้ที่ไม่ใช่ ' หรือ " หรือเครื่องหมายอื่นๆ ที่มีผลต่อการประมวลผลภาษา SQL ในที่นี้ใช้ test 'or'1'='1$sql = "SELECT id, name, age FROM [database name] WHERE name='test’or’1’=1'"ค่า name ใส่ไปจะถูกมองเป็น 'test' or '1' = '1' เป็นการโจมตีด้วยเงื่อนไขทางตรรกศาสตร์ โดยการนำค่าอะไรก็ได้ ไป or กับค่าที่เป็นจริงจะได้ค่าที่เป็นจริงเสมอ เมื่อระบบนำค่านี้ไปเช็คกับแต่ละชุดข้อมูลจะได้ผลลัพธ์เป็นจริงเสมอ จึงนำค่าทั้งหมดมาแสดงปล. %27 คือค่า ' ที่ถูกทำการ URL encode
อ่านต่อ
30
ก.ย.
โดย: Laris
| IoT
MQTT Security (3)
Payload EncryptionMQTT Payload Encryptionนอกจาก authentication แล้ว ใน Applicaiton level ยังสามารถทำการ encryption ได้ค่ะ โดยทำการ encrypte ตัว payload ค่ะ ซึ่งส่วนใหญ่ก็จะใช้กับ message ประเภท PUBLISH และ LWT ค่ะMQTT Payload Encryptionจะเห็นว่าในส่วนอื่นๆ (นอกจาก payload แล้ว ) จะไม่มีการ encrypt ค่ะ เช่น topic หรือ QoS ทั้งนี้ก็เพื่อเป็นการลดภาระที่ไม่จำเป็นให้กับ broker ค่ะ เพราะไม่ต้อง decrypt ข้อมูล meta พวกนี้Encryption Scenariosรูปแบบของ encryption ก็จะมีอยู่ด้วยกัน 2 แบบ นะคะEnd-to-end (E2E) encryption ( publisher — subscriber )Encrypted message จาก publisher จะไม่ถูก decrypt โดย broker ค่ะ เพราะ broker ใช้ข้อมูลจาก meta เท่านั้น สำหรับ routing /QoS และจะมีแต่ subscriber ที่มี decryption key เท่านั้น ที่สามารถ decrypt message ได้ค่ะ ถึงแม้ว่า attacker จะสามารถเข้าถึง message นี้ได้ อาจจะเพราะ ข้อผิดพลาด เรื่อง authentication/authorization หรือ TLS แต่ก็จะไม่สามารถ decrypt message ได้ค่ะEnd-to-end (E2E) encryption2. Client-to- Broker encryption ( publisher — broker )message จะถูก encrypt ระหว่าง publisher กับ broker เท่านั้นค่ะ broker จะทำการ decrypt (ซึ่งต้องอาศัย plugin สำหรับ decryption เพิ่มนะคะ) และ เฉพาะ trusted subscriber ที่เชื่อมต่อ กับ broker ด้วย TLS เท่านั้นที่จะได้รับ message ที่ decrypt แล้วจาก broker ค่ะถือเป็นอีกตัวเลือกนึง หากว่าไม่สามารถนำ TLS มาใช้ได้กับการเชื่อมต่อ ของ publisher และ broker ค่ะClient-to- Broker encryptionEncryption mechanismsที่นิยมใช้กันก็มีอยู่ 2 แบบค่ะ Asymmetric encryption (public/private key encryption)แบบนี้จะเหมาะกับระบบ ที่มี trusted subscriber ไม่เยอะมากค่ะ แต่มี untrusted publisher เยอะ และควรใช้ public/private key หนึ่งคู่ ต่อ topic ค่ะSymmetric encryptionแบบนี้ key ที่ใช้จะมีอันเดียวค่ะ และส่วนใหญ่ก็จะใช้ในรูปแบบของ password ซึ่งเป็นวิธีที่ง่ายกว่า Asymetric encryption เพราะไม่ต้องยุ่งยากกับการจัดสรร private key ให้ subscriber และแต่ละ topic ควรใช้ key (password) ของใครของมันนะคะ เผื่อหากว่ามีการขโมย password ไป topic อื่นๆจะได้ไม่ถูก decrypt ได้ค่ะการใช้ Payload encryption สามารถมั่นใจได้ว่า message ถูก encrypt ตั้งแต่ผู้ส่ง ถึง ผู้รับค่ะ แม้จะผ่าน broker ระหว่างทาง ก็ไม่มีการ decrypt ใดๆเกิดขึ้น ช่วยเพิ่มความปลอดภัยอีกระดับนึงถ้าหาก topic นั้นๆมีการส่งข้อมูลที่ค่อนข้างเป็น confidental information ค่ะ แต่จะมีความยุ่งยากในการจัดการเรื่อง key ให้กับ subscriber ค่ะ และ วิธีการ encrtypion ก็ไม่สามารถป้องกัน man-in-the-middle attack หรือว่า replay attack ได้ค่ะPayload encryption จะช่วยแก้ปัญหาการถูกดัก message ได้ค่ะ (หากไม่มีการใช้ authentication ใดๆ) แต่จะเห็นว่ามีเฉพาะ payload เท่านั้นที่จะถูก encrypt นั่นหมายความว่า ข้อมูล meta สามารถถูกเห็น และ แก้ไขได้ (เช่น topic) ซึ่งเราสามารถใช้ TLS เข้ามาช่วยเพิ่มความปลอดภัยให้ข้อมูลของเราตรงนี้ได้ค่ะ ถึงแม้ว่า TLS และ Payload encryption ถูกนำมาใช้คนละ level แต่เราสามารถใช้ควบคู่ เพื่อเสริมพลังกันได้ค่ะPayload encryption เป็นตัวเลือกที่ดีค่ะ ถ้าเราไม่ต้องการส่งข้อมูลแบบ plain text (unencrypted data)และระบบของเรามีข้อจำกัด ไม่สามารถที่จะใช้ TLS ได้ (ไม่ว่าจะด้วยข้อจำกัดของ bandwidth ของระบบ network หรือว่าข้อจำกัดของอุปกรณ์เอง) แต่ถึงยังไง encryption/decryption ก็ยังต้องใช้ processing power อยู่ดีนะคะ ต้องลองพิจารณาค่ะ ว่าจะใช้ algorithm แบบไหนเพิ่มความปลอดภัยให้กับระบบของเรา แต่ก็ไม่ได้ทำให้ประสิทธิภาพ และความเร็ว ของระบบ IoT เราลดลงค่ะอ้างอิงจาก MQTT Security Fundamentals: MQTT Payload Encryption
อ่านต่อ
27
ก.ย.
โดย: Laris
| IoT
MQTT Security (2)
Authentication & AuthorizationAuthenticationAuthentication ถือว่าเป็นส่วนหนึ่งของ MQTT Security ทั้งใน Transport level และ Application level ค่ะ ใน TLS (Transport Layer Security) ใช้ client certificate ในการยืนตัวตนของ client ต่อ server ส่วนใน Application level นั้น MQTT protocol จะมี built-in authentication ซึ่ง ใช้ username/password ในการยืนยันตัวตนซึ่ง username/password จะอยู่ใน CONNECT message เป็น optional ค่ะ ไม่ใส่ก็ได้ (สามารถใส่แต่ username โดยไม่มี password ยังได้ค่ะ แต่ไม่สามารถใส่ password โดยไม่มี username นะคะ)CONNECT Messageusername/password ใน CONNECT message จะถูกตรวจสอบโดย broker และ ส่ง return code กลับไปให้กับ client ตามนี้ค่ะ0 — Connection Accepted4 — Connection Refused, bad user name or password5 — Connection Refused, not authorizedCONNACK Messageถ้าหากว่าเราจะใช้ MQTT built-in authentication เราอาจจะต้องใช้ TLS เข้ามาเพิ่มนะคะ เพราะว่า username/password ไม่ถูก encrypt ให้ อาจจะถูก eavesdropping ได้ง่ายๆค่ะนอกจาก username/password แล้ว client สามารถใช้ข้อมูลอื่นสำหรับ authentication ได้ด้วยนะคะ อย่างเช่น Client IdMQTT client แต่ละตัวจะมี client Id ที่ไม่ซ้ำกันอยู่แล้วนะคะ ส่วนใหญ่ก็จะใช้ UUID ค่ะ เป็นตัวกำหนด id ให้กับ client ซึ่งจะถูกกำหนดไว้ใน CONNECT message นี่แหละค่ะ อาจจะใช้ id ร่วมกับ username/password ในการ authentication ได้ หรือจะใช้เพียง id ตัวเดียวก็ได้ค่ะX.509 Certificateclient สามารถใช้ X.509 client certificate เพื่อ authenticate กับ broker ระหว่าง TLS handshake ได้ค่ะ ซึ่ง broker ก็จะใช้ข้อมูลใน client certificate นี้ใน application level authentication ค่ะAuthorization in MQTTหลังจากที่ MQTT client ทำการเชื่อมต่อกับ broker เรียบร้อยแล้ว จะมีอยู่ 2 สิ่ง ที่ client สามารถทำได้ค่ะ คือ publish message และ subscribe กับ topic ที่สนใจ ถึงตรงนี้ authorization จะเข้ามามีส่วนในการดูแล ว่า client ไหน สามารถ publish message ไปที่ topic ไหนได้บ้าง หรือ subscribe กับ topic ไหนได้บ้าง ซึ่งสามารถทำได้ โดย กำหนด topic permission ที่ broker ค่ะ และ จะ มีค่า config ดังนี้ค่ะAllowed topic (exact topic or wild card topic)Allowed operation (publish, subscribe, both)Allowed quality of service level (0, 1, 2, all)แล้ว client จะรู้ได้อย่างไร ว่าไม่มีสิทธิ์ที่จะ publish /subscribe กับ topic ไหน สำหรับ publisher หากว่าไม่มีสิทธิ์ ในการ publish นะคะ broker จะทำการ disconnect การเชื่อมต่อไปเลยค่ะ (ตามที่ MQTT 3.1.1 version กำหนดไว้นะคะ) และ ถ้าหาก subscriber ไม่มีสิทธิ์ที่จะ subscribe ใน topic ไหน broker จะแจ้งด้วย return code ค่ะใน Application level นี้นอกจากจะมีการ authentication แล้ว เรายังสามารถเพิ่มระดับความปลอดภัยเข้าไปได้อีกด้วย การ encryption ค่ะ ตามมาอ่านกันได้ ในบทความถัดไปค่ะอ้างอิงจาก MQTT Security Fundamentals: AuthorizationMQTT Security Fundamentals: Authentication with Username and Password
อ่านต่อ
25
ก.ย.
โดย: Laris
| IoT
MQTT Security (1)
Is MQTT Secure?IoT ที่มีการเชื่อมต่ออุปกรณ์ที่หลากหลายเข้าด้วยกัน เพื่ออำนวยความสะดวกสบายให้เรา ไม่ว่าจะใน รถยนต์ หรือ บ้านทั้งหลัง เพียงแค่มีอุปกรณ์ที่สามารถตรวจจับความเคลื่อนไหว และ ระบุตำแหน่ง เราสามารถรู้ได้ทันทีว่าสมาชิกในบ้านอยู่ที่ตำแหน่งไหนของบ้าน แต่ถ้าหากไม่ได้มีเพียงแค่เรา ที่สามารถเข้าถึงข้อมูลเหล่านี้ หากข้อมูลนี้สามารถเข้าถึงได้ง่ายๆ โดยผู้ประสงค์ร้าย ข้อมูลเหล่านี้ก็อาจจะย้อนกลับมาทำความเสียหายให้เราได้ค่ะ อาจจะเล็กน้อยเพียงแค่ทรัพย์สินในบ้าน หรืออาจจะร้ายแรงถึงชีวิตของคนในบ้านดังนั้นเราจำเป็นต้องให้ความสำคัญกับเรื่องความปลอดภัยของข้อมูลเหล่านี้ค่ะ บางคนอาจจะคิดว่าแค่โดน Hack พวกอุปกรณ์ไม่ได้ร้ายแรงอะไรมั้ง ก็แค่สั่ง ON/OFF ไม่ได้เข้าถึงข้อมูลส่วนตัว หรือ ข้อมูลทางการเงิน แต่ถ้าอุปกรณ์เชื่อมต่อเหล่านี้มีผลกับความปลอดภัยของเรา ยังไง๊ ยังไง มันก็ต้องมีผลกระทบค่ะ ไม่ทางใดก็ทางหนึ่งค่ะ…. กันไว้ดีกว่าแก้นะคะ Better safe than sorry ค่ะในบทความนี้ ก็ไม่พลาดที่จะต้องพูดถึง Security ใน MQTT ค่ะ สำหรับนักพัฒนาแบบเราๆแล้ว เรื่องนี้สำคัญมาก จำเป็นต้องทำความเข้าใจและนำมาพิจารณา ตั้งแต่เริ่มดีไซน์ระบบ IoT กันเลยทีเดียวค่ะ มองข้ามไม่ได้นะคะ….. ซึ่งสามารถทำได้ตั้งแต่ protocol level ไปถึง application levelเดิมที MQTT ถูกออกแบบเพื่อให้ใช้งานง่าย และ lightweight เพื่อให้มีความเหมาะสมกับ IoT ดังนั้นตัว protocol จึงไม่ได้มีระบบ security ที่ดีนัก ก็จะใช้วิธีพึ่งพา security standards อื่นๆ เช่น ใช้ SSL/TLS ในการเพิ่มความปลอดภัยให้กับการเชื่อมต่อ ของ MQTT ค่ะ Security ใน MQTT จึงถูกแบ่งออกเป็นหลาย Layer ค่ะ ทั้งนี้ก็เพื่อเพิ่มความปลอดภัยจากผู้ประสงค์ร้ายที่มีมาหลากหลายรูปแบบ ได้มากขึ้น ซึ่งก็จะแบ่งตามนี้ค่ะ Network levelวิธีที่จะเพิ่มความปลอดภัยให้การเชื่อมต่อระหว่าง client และ broker ก็คือใช้ network ที่มีความปลอดภัยสูง หรือ VPN ค่ะ ซึ่งมีความเหมาะสมกับระบบที่ใช้ gateway โดยที่ gateway ฝั่งหนึ่งเชื่อมต่อกับเหล่าอุปกรณ์ และ อีกฝั่งนึงเชื่อมกับ broker ผ่าน VPN ค่ะTransport levelMQTT ใช้ Transport layer ใน TCP/IP ในการรับส่งข้อมูล ซึ่งปกติแล้วการเชื่อมต่อของ TCP จะไม่ใช่แบบที่มีการ encryption ใดๆค่ะ ดังนั้นถ้าอยากเพิ่มความปลอดภัย ให้กับการเชื่อมต่อ (encrypted communication) การใช้ TLS หรือ Transport Layer Security เป็นวิธีที่ค่อนข้างมั่นใจได้ว่าข้อมูล จะไม่ถูกอ่าน หรือ ถูกแก้ไข ระหว่างทางค่ะTLS เป็น cryptographic protocol ที่ใช้วิธี handshake ก่อนทำการเชื่อมต่อระหว่าง client และ broker ค่ะ ซึ่งการเชื่อมต่อแบบนี้สามารถรับประกันได้ว่าจะไม่มีการ eavesdropping เกิดขึ้น ใช้ x.509 certicate สำหรับยืนยันตัวตน ระหว่าง client กับ broker ข้อดีของการใช้ทั้ง server certicate และ client certificate ก็คือ สามารถทำ authentication ได้ในขั้นตอน handshake เลย ถ้า authenticate ไม่ผ่าน ก็ไม่จำเป็นต้องมีการเชื่อมต่อเกิดขึ้น (ไม่ต้องส่ง MQTT CONNECT message มาให้ broker ) เพื่อเป็นการลดภาระให้กับ broker อีกทางนึงค่ะ เพราะ broker ไม่ต้องทำการ authenticate ไม่ต้องไปเปิดหาใน database ว่ามี client นี้อยู่มั้ยแต่ทว่าการใช้ TLS ใน MQTT ต้องใช้ CPU ของอุปกรณ์ และ bandwidth ของ network ซึ่งก็ถือว่าเป็นข้อเสียนึงของ TLS เลยก็ว่าได้ ถ้าเกิดว่า อุปกรณ์ หรือ network ของเรามีข้อจำกัดในการใช้งาน ซึ่งอาจจะหันไปใช้วิธี authentication แทนได้ค่ะ (สามารถอ่านเนื้อหาเพิ่มเติมเกี่ยวกับ authentication ในบทความถัดไปค่ะ)Application LevelMQTT มี built-in authentication ที่ใช้ username/password สำหรับ authenticate อุปกรณ์ต่างๆ ส่วนเรื่องของ authorization จะถูกกำหนดขึ้นโดยเฉพาะ โดย broker ค่ะ นอกจากนี้ยังมี payload encryption เข้ามาช่วย หากว่าเราไม่สามารถใช้ TLS ใน Trasport level ได้ (สามารถอ่านเนื้อหาเพิ่มเติมเกี่ยวกับ payload encryption ในบทความถัดไปค่ะ)นอกจากการ secure ให้กับตัว protocol แล้ว ควรให้ความสำคัญกับ MQTT system ด้วยค่ะ ซึ่งก็รวมไปถึง infrastructure, OS, และ MQTT broker ค่ะในส่วนของ infrastructure ระบบ network ถือว่ามีความสำคัญกับเรื่อง security อย่างมาก การกำหนด rules บน. firewall มีส่วนช่วยอย่างมาก ในการเพิ่มความปลอดภัย เราสามารถกำหนดให้ firewall จำกัดการใช้แค่ port ที่จำเป็นสำหรับ MQTT เช่น 1883 (MQTT over TCP) และ 8883 (Secure MQTT) หรือ block ข้อมูลที่เป็น UDP datagram packet ออกให้หมด ( MQTT ใช้ TCP ) หรือหากเป็นไปได้ ถ้าเรารู้ IP ของ client ทุกตัว เราก็สามารถ กำหนด IP range ที่สามารถผ่าน firewall ได้ เพื่อเพิ่มความปลอดภัยให้กับ networkอ้างอิง: Introducing the MQTT Security Fundamentals
อ่านต่อ
1
2
3
4
5
6
7
8
พบบทสัมภาษณ์ได้ที่นี่เร็ว ๆ นี้
พบDigital Skill บนสื่อ ได้ที่นี่เร็ว ๆ นี้
บทความล่าสุด
Microsoft ร่วมกับสมาคมโปรแกรมเมอร์ไทย และ AiPEN Studio เปิดให้เรียนออนไลน์พัฒนาทักษะดิจิทัลฟรี! บนแพลตฟอร์ม Digital Skill
โดย:
|
30 มี.ค. 2564
เปิดตัวโครงการ สมาคมโปรแกรมเมอร์ไทย x ทนายแมน โครงการที่จะช่วยแก้ปัญหาด้านกฏหมายต่างๆ ให้กับคน IT
โดย: Digital Skill
|
14 ม.ค. 2563
แนวทางการพัฒนาตนเองในสายแฮกเกอร์
โดย: สุวิชา บัวคอม
|
4 ธ.ค. 2562
Insufficient Logging&Monitoring
โดย: สุวิชา บัวคอม
|
27 พ.ย. 2562
หมวดหมู่
Machine Learning
(24)
IoT
(26)
Security
(12)
Blockchain
(9)
Digital Skill
(3)
พบหมวดหมู่ ได้ที่นี่เร็ว ๆ นี้
พบหมวดหมู่ ได้ที่นี่เร็ว ๆ นี้
Tags
พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้
พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้
พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้