นับเป็นเรื่อง talk of the town ในวงการ IT ของบ้านเรา เมื่อแอพ “ดาวเหนือ” ของ กกต. ที่ถูกสร้างขึ้นมาใช้นำทางประชาชนไปยังคูหาเลือกตั้ง และตรวจสอบรายชื่อผู้มีสิทธิเลือกตั้ง มีความบกพร่องในเรื่องของการปกป้องข้อมูลที่ควรจะเป็นความลับ ทำให้ใครก็ตามที่มีความสามารถทางด้าน IT ซักเล็กน้อยก็สามารถค้นหาข้อมูลและที่อยู่ของใครก็ได้ผ่านการสุ่มหมายเลขบัตรประชาชนทันที
รู้จักกับ “ดาวเหนือ”
แอพดาวเหนือ ถูกสร้างขึ้นมาโดยบริษัท Pheonec Co.,Ltd. ซึ่งน่าจะถูกว่าจ้างโดย กกต. (สำนักงานคณะกรรมการการเลือกตั้ง) ให้ทำขึ้นมา โดยใช้เวลาในการพัฒนาราว 1 ปี และงบประมาณราว 150,000 บาท (ข้อมูลจากเดลินิวส์จริงๆเขียน 1.5 แสนล้านบาท ซึ่งไม่น่าจะใช่) สามารถให้ผู้ใช้กรอกข้อมูลเลขบัตรประชาชนลงไป 13 หลัก แล้วตัวแอพจะแจ้งข้อมูลที่เกี่ยวกับการเลือกตั้งของผู้ใช้ ทั้งหน่วยเลือกตั้ง ที่ตั้งหน่วย ลำดับการใช้สิทธิ์ และแผนที่นำทางไปยังหน่วยเลือกตั้งนั่นเอง
จะมีทำไมในเมื่อเลือกตั้งยังไม่รู้จะมีเมื่อไหร่?
อย่าเพิ่งเข้าใจผิดว่าการใช้สิทธิ์เลือกตั้งนั้นต้องมีแต่การเลือก ส.ส. แต่ว่ายังมีการเลือกตั้งใช้สิทธิ์อื่นๆด้วย ซึ่งตัวที่กำลังจะจัดขึ้นเร็วๆ นี้ได้แต่การออกเสียงประชามติร่างรัฐธรรมนูญที่จะมีขึ้นช่วงปลายเดือน ก.ค. นี้
ฟังดูดีอยากโหลดเลยล่ะสิ อ่ะขอเชิญจิ้มไปโหลดมาลองกันได้
ค้นหาข้อมูลตามเลขบัตรประชาชน ความสามารถเดียว แต่ภัยมหันต์
Tips: เลขบัตรประจำตัว 13 หลักของเรานั้น แต่ละหลักมีความหมายนะ มีที่มาที่ไปนะ ขอเข้าไปอ่าน ข้อกำหนดหมายเลขบัตรประชาชน กันได้
อย่างที่บอกไปข้างต้นว่า “ใครก็ตามที่มีความสามารถทางด้าน IT ซักเล็กน้อยก็สามารถค้นหาข้อมูลและที่อยู่ของใครก็ได้ผ่านการสุ่มหมายเลขบัตรประชาชน” โดยคำจำกัดความของ ใครก็ตามที่มีความรู้ด้าน IT ซักเล็กน้อย (สำหรับผม) อาจจะเป็นเพียงแค่กลุ่มผู้ใช้แอนดรอยด์สายฮาร์ดคอ (super user) ที่มีความรู้ความสามารถในการ root เครื่องแอนดรอยด์ผ่านคำสั่ง command line ได้ แค่ลองค้นหาข้อมูลเพิ่มเติมนิดหน่อยก็สามารถแอบเข้าไปล้วงลึกเพื่อหาวิธีดึงข้อมูลส่วนตัวจากแอพ “ดาวเหนือ” ในระบบ “แอนดรอยด์” ได้แล้ว
วิธีการเจาะข้อมูล
ที่เน้นย้ำว่าในระบบ “แอนดรอยด์” เป็นเพราะวิธีการหาช่องโหว่บนแอพดาวเหนือนั้น สามารถทำได้ง่ายผ่านแอพในระบบแอนดรอยด์ ส่วนแอพในระบบ iOS นั้นก็สามารถทำได้เช่นกันแต่อาจจะยากกว่าในระบบแอนดรอยด์อยู่หลายขั้น ส่วนวิธีการนั้นสามารถทำได้โดยใช้กระบวนการวิศวะกรรมย้อนกลับ (decompile) ที่จะแปลงตัวไฟล์ติดตั้งในระบบแอนดรอยด์ (apk) ย้อนกลับไปเป็นรหัสต้นฉบับ ทำให้คุณปฏิญญาผู้ที่พบช่องโหว่ สามารถเข้าไปดูวิธีการดึงข้อมูลที่ทางแอพดาวเหนือเอามาแสดงในหน้าแอพได้ผ่านรหัสต้นฉบับ
@lewcpe ขออนุญาตถมดำจำนวนมาก (HID น่าจะเป็นเลขบ้านตามทะเบียน, HNO คือบ้านเลขที่)
— Patinya S. (@ipats) 8:09 AM – 21 Jan 2016
ยกตัวอย่างโค๊ดจากแอพดาวเหนือที่จะเห็นได้ว่าเนื้อโค๊ดค่อนข้างสมบูรณ์มาก (แต่เนื้อโค๊ดในภาพตัวอย่างนี้ยกส่วนที่เป็นโค๊ดธรรมดาๆมาให้ดูเท่านั้น)
ส่วนการดึงข้อมูลของประชาชนออกมาแสดงในแอพดาวเหนือนั้น ทางแอพดึงข้อมูลผ่านระบบเว็บเซอร์วิสที่ตั้งอยู่บนเว็บของกรมการปกครอง โดยเว็บเซอร์วิสที่ว่านี้เป็นการถ่ายโอนข้อมูลผ่านโปรโตคอล http แบบไม่มีการเข้ารหัสเพื่อปกป้องความลับของข้อมูลที่รับส่งและไม่มีระบบการตรวจสอบสิทธิการเรียกใช้เว็บเซอร์วิส ทำให้ใครก็ตามที่มี url ของระบบเว็บเซอร์วิสนี้ ก็สามารถเรียกใช้ได้โดยแค่สุ่มตัวเลขของหมายเลขบัตรประชาชนในฐานข้อมูลถูก ก็สามารถดึงข้อมูลชื่อและที่อยู่ได้แล้ว
วิธีการแก้ไขของผู้พัฒนาแอพ
หลังจากที่คุณปฏิญญาได้เผยแพร่ปัญหาออกไป ทางผู้พัฒนาแอพได้ทำการตัดตอนแอพดาวเหนือโดยการอัพเดตแอพเวอร์ชัน 5.0 ทำให้เกิด force close เมื่อเปิดใช้งาน เพื่อป้องกันไม่ให้ผู้ที่โหลดแอพไม่สามารถใช้งานได้ชั่วคราวเพื่อเป็นการซื้อเวลาในการแก้ไขปัญหา :stare:
หลังจากที่แก้ปัญหาได้เสร็จแล้วทางผู้พัฒนาได้อัพเดตแอพเป็นเวอร์ชัน 6.0 ทำให้แอพสามารถกลับมาใช้งานได้เหมือนเดิม โดยสิ่งที่แก้เพิ่มเติมในแอพคือ การใส่คำเตือนไปถึงผู้ที่ชี้ถึงช่องโหว่….
[quote=มาตรา6]ผู้ใดล่วงรู้มาตรการป้องกันการเข้าถึงระบบคอมพิวเตอร์ที่ผู้อื่นจัดทำขึ้นเป็นการเฉพาะถ้านำมาตรการดังกล่าวไปเปิดเผยโดยมิชอบ ในประการที่น่าจะเกิดความเสียหายแก่ผู้อื่น ต้องระวางโทษจำคุกไม่เกินหนึ่งปี หรือปรับไม่เกินสองหมื่นบาทหรือทั้งจำทั้งปรับ
ซึ่งจากที่ผมได้ลองไปตรวจสอบดูพบว่าตัวแอพดาวเหนือยังคงดึงข้อมูลผ่านเว็บเซอร์วิสตัวเดิมเป๊ะ และยังไม่มีการเข้ารหัสรักษาความปลอดภัยของข้อมูลหรือว่าการกำหนดสิทธิการเข้าถึงระบบเว็บเซอร์วิส แต่แก้ไขโดยการส่งข้อมูลที่จำเป็นต้องแสดงในแอพเท่านั้น โดยตัดข้อมูลหลายๆ อย่าง เช่น นามสกุล บ้านเลขที่ ถนน ซอย ตรอก เหลือเพียงแค่ ตำบล อำเภอ และจังหวัดเท่านั้น ทำให้คนที่ประสงค์ร้ายได้ข้อมูลไปไม่ครบถ้วน
สรุป
เหตุการณ์ครั้งนี้ถือว่าเป็นบรรทัดฐานให้กับวงการของนักพัฒนาไทย ที่ควรให้ความสำคัญกับการปกป้องข้อมูลที่มีความสำคัญเวลารับส่งข้อมูลผ่านโปรโตคอลอินเตอร์เน็ต และควรป้องกันการทำวิศวกรรมย้อนกลับผ่านไฟล์ติดตั้งบนระบบแอนดรอยด์โดยการใช้ทูลช่วยอย่าง ProGuard ที่ทำให้การทำวิศวกรรมย้อนกลับ (Decompile) เป็นได้ยากขึ้น เพราะตอนนี้ APK ของแอพตัวนี้ไม่ได้มีการป้องกันอะไรเลย ทำให้สามารถดูมาแล้วแงะส่องโค๊ดกันเป็นว่าเล่นแล้ว
อัพเดตใหม่ สุดยอดมาก
ตัดรายละเอียดนิดหน่อย แต่เน้นคำขู่ ไม่เน้นป้องกัน
พลังหมัดดาวเหนือ…..โจมตีเป้าหมายจากการสุ่มเลขบัตรไปเรื่อย ๆ
ในแง่ของความเป็นส่วนตัว คงไม่ค่อยมีใครชอบเท่าไร
แต่ถึงไม่มีโปรแกรมนี้ เราก็ยังสามารถค้าหาที่อยู่เป้าหมายได้อยู่ดี
ไม่แน่ใจว่าตอนนี้เว็บนั้นมีการปรับปรุงไปหรือยัง
ปัญหามันไม่ได้อยู่ที่ประชาชนหาคูหาเลือกตั้งไม่เจอ แต่ปัญหาอยู่ที่จะมีการเลือกตั้งหรือไม่? แล้วเมื่อไหร่?จะมีใครมาขัดขวางการมาลงคะแนนอีกไหม?
ผมกลับมองว่าจริงๆ webservice ของ dopa ตะหากนะครับที่ปล่อยให้มีช่องโหว่ ที่ service ที่เปิดให้ mobile เรียกใช้
ไม่รู้ว่าไม่ได้คิดเรื่องนี้ไว้ หรือคิดแล้วแต่อาจจะคิดอีก shot ไปแล้วว่า ป้องกันไป decompile มาก็เห็นอยู่ดีว่าจะเรียกยังไงให้ใช้งานได้ สุดท้ายเลยได้แต่ขู่คนเปิดเผยข้อมูลแบบนี้
ทางแก้จริงๆ เท่าที่รู้ service ทุกทางของ dopa มี logs ไว้อยู่แล้วว่าดึงไรบ้าง กรณีเอามาใช้กับ mobile ก็ควรเพิ่มการลงทะเบียนด้วยเบอร์มือถือเพื่อยืนยันตัวตนก่อนให้ได้ token ตามเบอร์ไปใช้เวลาเรียก decompile แล้วเรียกเองได้ ก็ต้องมี token ที่ได้จากเบอร์อ้างอิงในการเรียกอยู่ดี แล้วไปไล่จัดการกรณีมีการดึงข้อมูลผิดปรกติทีหลังตามเบอร์ที่ลงทะเบียนไว้ได้เต็มๆ
ผมมองว่าถ้านักพัฒนารู้ว่า webservices ของ dopa เปิดขนาดนี้แล้ว และเปลี่ยนอะไรไม่ได้ ทางนักพัฒนาควรที่จะเขียนอะไรมาครอบเพื่อหลีกเลี่ยงและปิดบังไม่ให้เห็นการเรียก webservices ของ dopa โดยตรง
ฮาดดดดเช่ย..
ว่าแต่ไม่เรียกถนน กับ ซอย มาดู มันจะหาเขตเลือกตั้งได้เหรอเนี่ย – -.
ขนาดซอยเดียวกัน ต้นซอย ท้ายซอย ยังไปคนละหน่วยเลือกตั้งได้เลย
แต่จริง ๆ ถ้ามีฐานข้อมูลลิงค์เลขบัตรประชาชน กับหน่วยเลือกตั้งไว้
ก็ไม่ต้องหาข้อมูลอะไรจาก dopa เลยนะ – -.
หรือถ้าข้อมูลอยู่ที่ dopa ส่งกลับมาแค่ชื่อ สกุล กับหน่วยเลือกตั้งก็พอมั๊ง – -.
กกต.ชุดนี้จะรับผิดชอบอะไรมั้ย ทำข้อมูลผู้มีบัตรประชาชนหลุดทั้งประเทศนี้