บทความ Security
ไม่ว่าจะ ข่าวสาร บทสัมภาษณ์ และ Digital Skill บนสื่อ
มีให้คุณได้อ่านบทความดี ๆ มากมายแล้วที่นี่
โดย: สุวิชา บัวคอม
| 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
โดย: สุวิชา บัวคอม
| Security
Introduction to cryptography
คุณรู้ตัวหรือเปล่าว่าในชีวิตประจำวันคุณได้ใช้การเข้ารหัสโดยที่คุณไม่รู้ตัว หรืออาจจะรู้ตัวในบางเรื่องที่เราเข้าใจการทำงานของสิ่งนั้นแล้ว สาเหตุหลักที่ทำให้คุณไม่รู้ตัวว่าคุณได้ใช้การเข้ารหัสก็เพราะว่า ปัจจุบันมีสิ่งอำนวยความสะดวกมากมายโดยส่วนมากจะมาในรูปแบบของโปรแกรมประยุกต์ (Application) เช่น ตอนที่สมัครใช้งานระบบต่างๆบน application หรือ เว็บไซต์ (website) จะมีช่องให้กรอกรหัสผ่าน (password) เราก็ใส่รหัสผ่านของเราลงไปโดยไม่รู้เลยว่าปลายทางที่รับรหัสผ่านของเราไปเก็บจะมีการเข้ารหัสหรือไม่ ตอนที่เราส่งข้อความหาเพื่อนจริงๆแล้วมีหลายขั้นตอนมาก เริ่มจากที่เราสั่งงาน application ของเราให้ส่งข้อความไปหาเพื่อน ข้อความจะถูกส่งผ่านระบบ Internet ที่เราเชื่อมต่ออยู่ และเพื่อนของเราก็รับข้อความที่เราส่งโดยไม่รู้เลยว่าระหว่างทางที่ส่งมามีคนสามารถแอบอ่านข้อมูลของเราหรือไม่และข้อความของถูกเข้ารหัสไว้อย่างปลอดภัยหรือเปล่า ในบางครั้งเราก็อยากเก็บข้อมูลที่เป็นความลับไว้ในคอมพิวเตอร์ของเราไม่ให้คนอื่นมาเข้าถึงข้อมูลของเราได้ ถึงแม้ว่าขโมยเครื่องของเราไปแล้วแกะเอาฮาร์ดดิส (harddisk) ไปเปิดดูก็ตามถ้าเรารู้และเข้าใจการเข้ารหัสอย่างถูกวิธี เราก็เก็บข้อมูลลับหรือภาพลับไว้ในเครื่องเราได้อย่างสบายใจ ไม่ต้องกังวลอะไรตัวอย่างที่ยกมาด้านบนนี้กล่าวถึงการนำศาสตร์การเข้ารหัสไปช่วยในการทำให้ข้อมูล เป็นความลับ (confidentiality) นอกจากจะนำศาสตร์นี้ไปใช้ทำให้ข้อมูลเป็นความลับแล้วยังสามารถนำไปใช้ในเรื่องของความครบถ้วนสมบูรณ์ (integrity) ของข้อมูลเพื่อให้แน่ใจว่าข้อมูลไม่ถูกแก้ไขระหว่างทางที่ส่งมาหาเรา และการรับรองความถูกต้อง (authenticity) เพื่อยืนยันว่าข้อมูลที่เราได้รับมาเป็นของจริงที่ถูกส่งมาจากต้นทางตัวจริง ขอเกริ่นคร่าวๆไว้เท่านี้ ต่อไปจะเริ่มลงเนื้อหาเชิงวิชาการ

พบบทสัมภาษณ์ได้ที่นี่เร็ว ๆ นี้

พบDigital Skill บนสื่อ ได้ที่นี่เร็ว ๆ นี้