Security

My Reading List Q2 2017

Some interesting stuffs (blogs/articles/papers and useful resources) that I’ve read in Q2 2017.

Continue reading

Advertisements
Security, Tech

เล่าประสบการณ์เสียว กับ Dropbox และ Google Authenticator

ประสบการณ์เสียววันนี้: ก่อนหน้านี้ตั้ง Dropbox ให้เวลาล็อกอินต้องใส่รหัสยืนยันจาก Google Authenticator ด้วย แต่วันก่อนไป Factory Reset มือถือแล้วดันลืมปิดระบบยืนยันของ Dropbox วันนี้พอจะล็อกอินมันก็เลยถามรหัสยืนยัน แต่พอเลือกให้มันส่งรหัสมาทาง SMS ปรากฏว่ามันไม่ส่ง!! เอาไงดีทีนี้? ก็เลยว่าจะล็อกอินด้วยรหัสสำรอง (Recovery Code) ปรากฏว่าทำรหัสหาย!!! ชิบ…

โชคดีที่ในคอมลงโปรแกรม Dropbox ไว้แล้วล็อกอินไว้แล้ว ก็เลยลองกดปุ่มที่มันบอกว่า Open Dropbox.com ดูว่ามันจะเข้าได้มั้ย ปรากฏว่ามันเปิดเบราว์เซอร์เข้าเว็บ Dropbox เห็นหน้าจัดการไฟล์ได้เลยโดยไม่ต้องล็อกอิน (เอ๊ะ?!) รวมถึงสามารถกดเข้ามาหน้า Settings เพื่อตั้งค่า Authenticator app ใหม่ได้ด้วย … รอดตายไปได้อีกหนึ่งงาน ;w;

บทเรียนจากเรื่องนี้
1. สำรองข้อมูลจาก Google Authenticator ไว้ซะก่อนที่จะ Factory Reset
2. ถ้าไม่ชัวร์ก็ปิด 2FA ของ Service ต่างๆ ก่อน ลงรอมเสร็จเมื่อไหร่ค่อยเปิดใหม่
3. การตั้งค่าให้ส่งรหัส OTP มาทาง SMS บางทีมันก็ไว้ใจไม่ค่อยได้
4. เก็บ Recovery Code ไว้ให้ดีๆ -_-”
5. เว็บ Dropbox เข้าได้โดยไม่ต้องล็อกอิน วิธีการคือคลิกขวาที่ไอคอน Dropbox แล้วกดไอคอนรูปโลก
6. เด๋วว่างๆ จะแกะไอ้ข้อ 5. นี่ออกมาดูว่ามันทำไงถึง Bypass Login + 2FA :v

open-dropbox

Programming, Security

[PHP] Password hashing & Input filtering

บทความนี้เป็นภาคต่อของบทความที่แล้วครับ คราวนี้จะมาว่ากันด้วยเรื่องของ Password hashing และ Input Filtering ซึ่งก็เป็นอีกเรื่องนึงที่สำคัญในการรักษาความปลอดภัยของระบบ Web Application

Password hashing

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

ก่อนอื่นมาว่าด้วยเรื่องของการ Hash กันก่อน

การ Hash คือการแปลงแปลงชิ้นส่วนของข้อมูล (ไม่ว่าข้อมูลจะมีขนาดเล็กหรือขนาดใหญ่) ให้เป็นข้อมูลชิ้นเล็กๆ ที่มีความสัมพันธ์กับข้อมูลเดิม โดยผลที่ได้จะอยู่ในรูปของ String หรือ Integer

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

Continue reading

Linux, Programming, Security

เจาะระบบ Web App PHP/MySQL และการป้องกัน

ชี้แจง

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

… เข้าเรื่อง

โดยทั่วไปแล้ว ระบบ Web Application ที่เขียนขึ้นมาไม่ดี มักจะมีช่องโหว่ให้ผู้ไม่หวังดีเข้ามาโจมตีระบบ ไม่ว่าจะเป็นการทำ SQL Injection, XSS, Buffer Overflow หรือเทคนิคอื่นๆ ซึ่งถ้าสังเกตจากข่าวการโจมตีเว็บไซต์ส่วนใหญ่ก็มักจะโดนในรูปแบบนี้ มาดูกันดีกว่าว่าปัญหาแต่ละแบบคืออะไร โจมตีอย่างไร และป้องกันอย่างไร

1. SQL Injection

คือการแทรกคำสั่ง SQL เข้าไปในส่วนของการสั่ง Query ของโปรแกรม เพื่อให้โปรแกรมทำงานผิดพลาดหรือทำงานนอกเหนือไปจากสิ่งที่ผู้เขียนโปรแกรมกำหนด

สมมุติหน้าจอ Login ของเว็บไซต์หนึ่งมีช่องให้ผู้ใช้กรอก Username และ Password ดังรูป

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

Continue reading