ไทยชนะเป็นความพยายามอย่างหนึ่งของรัฐบาลในการต่อสู่กับโรคระบาดโควิด19 โดยการที่เข้าไปใช้งานร้านค้าหรือบริการต่างๆ จะต้องทำการเชคอินด้วย QR code ของร้านที่ลงทะเบียนเอาไว้ ไปเปิดเว็บไทยชนะแล้วกรอกข้อมูลเบอร์โทรและเชคอินไป เวลาจะออกก็สแกนเพื่อเชคเอ้าท์กัน มีแบบประเมินเล็กน้อยจะไม่ทำก็ได้ไม่ว่ากัน ถ้าเกิดมีคนติดเชื้อ ก็หาได้ว่าเคยไปไหนมา ระบบก็จะแจ้งผู้มีความเสี่ยงอยู่ในที่เดียวกันเวลาเดียวกันกับผู้ติดเชื้อให้กักตัวหรือออกไปตรวจ ระบบก็ดูง่ายๆ ไม่ซับซ้อน ปัญหาอยู่ที่การใช้งานจริงมากกว่า วันนี้ผมจะมานั่งคิดว่าถ้าผมเป็นผู้ไม่หวังดีจะโจมตีระบบนี้มีอะไรที่จะโจมตีได้บ้าง โดยไม่มีการทดลองโจมตีจริงๆ นะครับ แค่คิดเฉยๆ เพื่อเป็นแนวทางในการปรับปรุงและป้องกัน (อย่ามาจับผมนะ)
1) คนโจมตีสามารถเก็บข้อมูลร้านค้าและบริการทั้งหมดได้ เพราะ QR code ที่ได้จากการสแกนจะได้เป็น URL แบบนี้ https://qr.thaichana.com/?appId=0001&shopId=S0000000001 จะเห็นได้ว่าเลข shopId จะเป็นเลขสวยๆ และที่สำคัญมันสามารถไล่เลขขึ้นไปเรื่อยๆ ได้ และเว็บจะเรียกไปที่ https://api-customer.thaichana.com/shop/0001/S0000000001/qr เพื่อดึงข้อมูลร้านค้ามาแสดง โดยข้อมูลที่ได้รับมีเป็นดังนี้
จะเห็นได้ว่าเป็นรายละเอียดร้านค้าเหมือนหน้าเว็บ คนที่โจมตีสามารถเก็บข้อมูลของทุกๆ ร้านค้าที่มีในระบบไปได้ทั้งหมดด้วยการไล่เลขแล้วยิงไปจนครบทุกร้าน อาจจะป้องกันแล้วด้วยการ limit จำนวนรีเควสต่อไอพีก็ได้ ก็อย่างว่าผมไม่ได้ลองโจมตีมันจริงๆ หรือวิธีป้องกันที่ดีกว่าก็คือสุ่มเลขไอดีของร้านออกไปเช่น https://qr.thaichana.com/?appId=0001&shopId=SpdJkwKadWI เพื่อให้ไล่เก็บข้อมูลไม่ได้
2) กลั่นแกล้งร้านค้าอื่นด้วยการเชคอินปลอม อาจจะมีร้านค้าที่มีคู่แข่งเข้ามาทำเชคอินปลอมเพราะไม่ได้มีการยืนยันหมายเลขโทรศัพท์ ทำให้ร้านคู่แข่งเต็ม งดเข้า แต่ยังเข้าได้อยู่ ร้านเล็กๆ อาจจะดูได้ว่ามันเต็มจริงหรือเปล่า ห้างใหญ่ๆ อาจจะไม่ให้เข้าเลย เพราะตรวจสอบไม่ได้ว่าคนข้างในจริงมีกี่คน ทำให้เกิดความเสียหายทางธุรกิจได้ ถามว่าทำเชคอินปลอมยังไง วิธีง่ายๆ โดยไม่ต้องอาศัยความสามารถอะไรเลยก็คือใช้ Hola VPN และเปิด Incognito ให้ได้ไอพีอื่นเแล้วเข้าเว็บเช็คอินร้านที่เราจะเช็คอินปลอมตามกระบวนการปรกติ จะทำเป็น Extension เพื่อช่วยกรอกเบอร์ก็ได้ วิธีที่ต้องใช้ความสามารถหน่อยก็คือการ Reverse Engineer เอา Public Key จากโค้ดที่หน้าเว็บไปเข้ารหัสเบอร์โทรปลอม ยิงลงทะเบียนเพื่อเอา Token และยิง checkin อีกที วิธีนี้สามารถเขียนโค้ดได้ง่าย แต่ถ้ายิงจากเครื่องเดิมซ้ำๆ ก็อาจจะน่าสงสัยและโดนจับได้
วิธีป้องกันการโจมตีแบบนี้ก็ง่ายๆ แค่เบอร์โทรศัพท์ต้องมีการตรวจสอบก่อนโดยส่ง SMS รหัสผ่านครั้งเดียวไปหาผู้ใช้ก่อนเท่านั้น แต่ถ้าพัฒนาไม่ดีก็อาจจะเป็นจุด single point of failure ได้เหมือนกัน
3) อาศัยประสบการณ์ของผู้ใช้เป็นช่องโหว่ในการทำ QR code ปลอมไปยังเว็บไม่ประสงค์ดี ถ้ามีคนใช้ระบบนี้ไปสักพักแล้ว จะเกิดเป็นอะไรที่ทำกันเป็นปรกติ จะเข้าใช้งานที่ไหนก็ต้องสแกน QR code กัน อาจจะมีผู้ไม่หวังดีทำเว็บไซต์ปลอมทำ QR Code ไทยชนะปลอม ไปวางหรือไปติดไว้มีจุดที่จะต้องมีการเชคอิน อาจจะทำเว็บปลอมที่เหมือนมากๆ ชื่อเว็บคล้ายๆ มากๆ เช่น thaichaana.com thaichana.co ผู้ใช้สังเกตไม่ทันหรอก อาจจะเข้าไปแล้วทำให้โหลดแอพเถื่อน เพื่อเอาข้อมูลทุกอย่างในเครื่องก็ได้ วิธีการป้องกันก็คือสื่อสารผู้ใช้ว่าสแกน QR Code แล้วจะเข้าเว็บอะไร วิธีการใช้งานจะเป็นอย่างไร ไม่ใช้ปล่อยให้ผู้ใช้สแกนแบบงงๆ แล้วทำตามขั้นตอนในเว็บทุกอย่าง ร้านค้าก็อาจจะต้องหมั่นตรวจสอบ QR code ของตัวเองว่าเป็นของจริงหรือเปล่าไม่ใช่มีคนเอามาปิดทับ
สรุป
ไทยชนะยังมีจุดอ่อนอยู่ อาจจะไม่ชนะใจผม แต่ก็พัฒนาต่อไปได้ เรื่องข้อมูลเก็บหลังบ้านแล้วโดนเอาไปใช้ทำอะไรนั้นผมไม่รู้
คำออกตัว
บทความนี้ไม่ได้มีการเข้าถึงข้อมูลเว็บไซต์ไทยชนะด้วยเครื่องมือพิเศษใดๆ นอกจากการใช้เว็บบราวเซอร์เปิดเว็บตามปกติ ยังไม่มีการโจมตีไดๆ ไปยังเว็บไทยชนะจริงๆ ทั้งหมดนี้เป็นแค่ข้อสันนิจฐานเท่านั้น