เมื่อสัปดาห์ที่แล้ว มีการโหมโปรโมทแอพฯตัวหนึ่งอย่างหนัก ชื่อว่า BeeBox หนึ่งในแอพฯตระกูล Bee ของ BeeTalk
ตอนแรกก็ไม่ได้สนใจอะไร จนมีคนตั้งข้อสงสัยว่ามีฟีเจอร์ที่ละเมิดกฎของ Google Play Store อยู่ อย่างการโหลด YouTube ลงเครื่องได้
เลยไปศึกษาข้อมูลของแอพฯตัวนี้ ปรากฏว่าไม่ใช่แค่นั้นแฮะ ได้รู้ข้อมูลเพิ่มเติมดังนี้
1) เวอร์ชั่นเต็มไม่มีให้โหลดใน Google Play Store ต้องโหลด apk จากเว็บไปลงเอง
2) ตัวที่มีให้โหลดใน Google Play Store เป็นเวอร์ชั่น Lite ตัดฟังก์ชั่นที่โดน Google แบนออกไป
3) เป็นแอพฯที่ขอ Permission เยอะมาก มาก มากก มากกกกก
4) แอพฯมีฟีเจอร์ที่ละเมิดข้อห้ามกูเกิ้ลหลายตัว เช่นการโหลดคลิป YouTube มาเก็บ และการทำตัวเป็น Store เอง ซึ่งตัวแรกเป็นเรื่องของธุรกิจ แต่ตัวหลังเป็นเรื่องของความปลอดภัย
5) แอพฯนี้ออกแบบมา "เพื่อคนไทย" โดยเฉพาะ
ด้วยเหตุผลต่างๆ แอพฯตัวนี้เลยเตะตาเราอย่างหนักเพราะแค่ Concept ที่ให้มา ก็ถือว่ามี Security Concern เยอะมาก ก็เลยใช้เวลาที่มีอันน้อยนิด แกะแงะเพื่อหาคำตอบใน Concern ที่มี แล้วก็พบอะไรที่น่ากังวลเยอะมาก เลยขอมาเขียนรายงานไว้
ปกติไม่ชอบเขียนอะไรแบบนี้เลย แต่อันนี้น่าจะเป็นเรื่อง Critical มาก ขอเขียนละกันครับ หลักๆเนื่องจากเป็นแอพฯที่มีการโปรโมทเยอะมาก ลงโฆษณาไว้หลายเว็บมาก แต่ยังไม่เคยมีใครตรวจสอบการทำงานเลย จึงยิ่งน่าเป็นห่วงเข้าไปใหญ่
Disclaimer: Blog นี้ไม่ได้เขียนมาเพื่อ Discredit ใคร แต่เป็นข้อมูลเชิงเทคนิคที่ยืนยันได้และมี Blueprint ชัดเจน ไม่มีการเสริมหรือเติมแต่ง เขียนในมุมเพื่อผลประโยชน์ของผู้ใช้ จุดประสงค์ทำมาเพื่อให้ทางทีม Product Owner ชี้แจงความโปร่งใส เพราะจริงๆแม้แต่ Path ที่ได้ Funding เป็นร้อยล้าน ยังเคยมี Issue ตรงนี้ เป็นเรื่องปกติครับ
Disclaimer 2: ความคาดหวังที่อยากได้กลับมาสู่สังคมคือการ Declare ว่า Concern ที่ Raise ไป ถูกควบคุมอย่างถูกต้องและจะไม่มีการละเมิดหรือจะไม่เกิด User Error จนทำให้เกิดความเสียหายต่อผู้ใช้ได้
Security Concern 1 : ขอ Permission เยอะและมีโค้ดที่เรียกใช้
Concern Level : Medium
นี่คือ Permission ที่แอพฯตัวนี้ขอ
หรือจะให้ Geek ขึ้นมาหน่อยก็ ...
จากที่เห็น แอพฯนี้ขอ Permission เยอะมาก ส่วนหนึ่งก็เกิดจากมีฟังก์ชั่นเยอะมาก และฟังก์ชั่นเหล่านั้นเข้าถึงข้อมูลส่วนตัวเราได้ทั้งหมดทั้งสิ้นไม่ว่าจะเป็น
android.permission.READ_CONTACTS - ขอการเข้าถึง Contact ในโค้ดมีการเรียกใช้ด้วย (ใช้แอพฯ smali/baksmali แกะ ภาษาที่เห็นจึงเป็นภาษาเกือบจะเป็นภาษาเครื่อง) ทั้งนี้ในแอพฯมีฟังก์ชั่น Backup Contact จึงมีการเลือกใช้ตรงนี้
Landroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
android.permission.INSTALL_SHORTCUT, android.permission.UNINSTALL_SHORTCUT - มีสิทธิ์เพิ่มและลด Shortcut บน Home Screen ใช้เพื่อติดตั้งและลบ Shortcut ให้โดยอัตโนมัติ (ไม่รู้ไปใช้ตอนไหน น่าจะตอน Backup แอพฯและตำแหน่ง Home Screen)
const-string v5, "com.android.launcher.action.UNINSTALL_SHORTCUT"invoke-direct {v4, v5}, Landroid/content/Intent;->(Ljava/lang/String;)V...invoke-virtual {p1, v7}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V
com.android.browser.permission.READ_HISTORY_BOOKMARKS, com.android.browser.permission.WRITE_HISTORY_BOOKMARKS - สามารถลบและสร้าง Bookmark ได้ตามใจชอบ น่าจะจากการ Backup เช่นกัน
sget-object v1, Landroid/provider/Browser;->BOOKMARKS_URI:Landroid/net/Uri;sget-object v2, Landroid/provider/Browser;->HISTORY_PROJECTION:[Ljava/lang/String;const-string v5, "_id"move-object v4, v3invoke-virtual/range {v0 .. v5}, Landroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
android.permission.SEND_SMS, android.permission.READ_SMS, android.permission.WRITE_SMS - สามารถเขียน ลบ หรือส่ง SMS ได้โดยเราไม่รู้ตัว (น่าจะจากการ Backup แต่ส่วนที่ดูอันตรายที่สุดคือ SEND_SMS ยังนึกไม่ออกว่ามีทำไม ถ้าเกิดมีการส่ง SMS ไปเก็บเงินโดยเราไม่รู้ตัวหละ?)
Landroid/telephony/SmsManager;->sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V
android.permission.READ_PHONE_STATE - อ่านข้อมูลต่างๆของมือถือคุณได้อย่างสบายใจ ไม่ว่าจะเป็น IMEI, IMSI หรือเบอร์โทร ...
Landroid/telephony/TelephonyManager;->getSimSerialNumber()Ljava/lang/String;Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;Landroid/telephony/TelephonyManager;->getSubscriberId()Ljava/lang/String;
android.permission.GET_ACCOUNTS - ลิสต์ Account ทั้งหมดที่คุณผูกไว้กับมือถือแอนดรอยด์ของคุณ
Landroid/accounts/AccountManager;->getAccounts()[Landroid/accounts/Account;
Permission ที่เหลือก็เข้าถึงอะไรเครื่องเราได้หลายอย่าง แต่ส่วนใหญ่ก็หยวนๆ เช่น READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE ก็ใช้เข้าถึง sdcard กันเป็นปกติ ไม่ค่อยมี Security Concern เท่าไหร่นัก เพราะตัว OS ของแอนดรอยด์ออกแบบมาป้องกันไว้อยู่แล้ว
อย่างไรก็ตาม ผลของการใช้ Permission ที่เราพูดถึงข้างบนนี้คือ แอพฯ BeeBox มีสิทธิ์ในการเข้าถึงข้อมูลส่วนตัวของคุณทุกส่วน เหมือนที่โปรแกรม Backup ต่างๆทำนั่นแหละ
แต่ทำไมถึงตั้ง Security Level ไว้ที่ Medium? เพราะถ้าถูกใช้ในทางที่ดี มันก็มีประโยชน์ แต่ถ้าใช้ในทางที่ผิด ข้อมูลทุกอย่างของท่าน ... โดนขโมยได้ง่ายๆ ซึ่งนี่คือ Concern แรก
ส่วน Concern ถัดไปคือ ถ้าโปรแกรมเขียนมาไม่ดี ข้อมูลทั้งหมดมีสิทธิ์หายได้เลยนะ a.k.a. หายนะ (ภาพของ Baidu PC Faster ลอยมาเลย) ถึงจะไม่ได้ตั้งใจ แต่ความเสียหายก็ไม่อาจชดใช้ได้อยู่ดี
อีก Concern คือ ถ้าตอนนี้ไม่ได้ละเมิดข้อมูลส่วนบุคคลอะไร แล้วอนาคตจะละเมิดมั้ย? เพราะขอ Permission ไปแล้ว จากนี้ถ้าลงเวอร์ชั่นใหม่ก็สามารถเข้าถึงอะไรก็ได้แล้วเช่นกัน
ดังนั้นคำตอบของ Security Concern ข้อนี้คือ เราไว้ใจ Product นี้ได้แค่ไหน?
โจทย์นี้ไม่มีใครตอบได้นอกจาก Product Owner ที่ควรจะออกมา Declare ความบริสุทธิ์ใจครับ
Security Concern 2 : โหลด apk นอก Store
Concern Level : High
มันมีสาเหตุอยู่ที่ทำไม Google ถึงไม่อนุญาตให้สร้าง 3rd Party App Store ไว้บน Play Store นั่นก็เพราะ Security Issue เต็มๆ
การทำ 3rd Party App Store นั่นแปลว่าจะต้องไปโหลด apk ที่ไหนก็ไม่รู้มาติดตั้งบนเครื่อง
ผลคือ หาก apk ตัวนั้นเป็นตัวที่ถูกปลอมแปลงมา ถึงจะมีชื่อคลาสเดียวกัน ก็สามารถล้วงข้อมูลคุณไปได้ทั้งหมด
เช่นผมสร้างแอพฯขึ้นมาเลียนแบบ Dropbox แล้วใส่ชื่อคลาสเลียนแบบกัน เขียนชื่อ Publisher ว่าเป็น Dropbox, Inc. ใส่ UI ไว้เนียนเลย คราวนี้ผมก็หลอกทำ Phishing ได้สบายๆ ขโมยพาสเวอร์ดมาง่ายมาก
อันนี้พอเห็นภาพแล้วใช่มั้ยครับว่า 3rd Party App Store นั้นอันตรายเพียงใด?
แต่นี่ดันเป็นฟีเจอร์ใหญ่ของ BeeBox คือโหลดแอพฯมาลงได้ ถึงแม้จะไม่มีใน Play Store ของไทย จากที่เนยได้ลอง BeeBox พบว่ามันใช้วิธีที่เรา Concern ตามด้านบน คือไปโหลด apk จากไหนมาไม่รู้
ถึงแม้แอพฯนั้นจะต้องผ่านการติดตั้งผ่าน Package Installer ของเครื่อง แต่ก็ไม่มีผลอะไร เพราะ (1) คนไม่อ่าน (2) ถึงจะอ่าน ทุกอย่างสามารถปลอมได้หมด คนนึกว่าของจริงก็กดติดตั้งไปเลย ก็เริ่ม Phishing ได้ทันที
อันนี้จึงเป็น Concern Level High ที่ดูอันตรายมาก หากวันดีคืนดีมี apk ที่ถูกปลอมแปลงหลุดเข้ามาแล้วคนติดตั้งไปโดยไม่รู้ตัว มันจะเป็นมหกรรมการโดนละเมิดครั้งใหญ่เลยทีเดียว
มีแอพฯ 3rd Party App Store อยู่มากมายที่ Host apk เป็นของตัวเอง ส่วนใหญ่เนยก็จะบอกว่าห้ามใช้ นอกจากได้รับการยืนยันแล้วว่าปลอดภัย ซึ่งมีไม่มากนัก
เช่นกัน ... เราจะมั่นใจได้แค่ไหนว่า BeeBox จะไม่เอาไฟล์ apk ผิดไฟล์มาให้?
Security Concern 3 : การอัพเดตแอพฯ
Concern Level: Low
เนื่องจาก Google Play Store มีการอัพเดตแอพฯได้ค่อนข้างเร็ว แค่ 1-2 ชั่วโมงก็ขึ้น Store ได้แล้ว แถมยังไม่มีการ Approve เรื่องฟังก์ชั่นก่อน ทำให้หลายครั้งหลายคราโปรแกรมทำแอพฯออกมาพลาด บางทีอาจจะเป็น Critical Bug ที่ทำให้ข้อมูลบางอย่างหายหรือเสียหายได้เลย (เคยมาละ) ทางนักพัฒนาก็เลยใช้เวลาแค่อีก 1 ชั่วโมงก็อัพตัวใหม่ขึ้นไปทันที เพื่อลดสเกลความเสียหาย แต่กับ BeeBox ที่ทำตัวเป็น 3rd Party App Store นี้ เกิดเป็นคำถามว่า แอพฯอัพเดตถี่แค่ไหน?
ที่แน่ๆ แอพฯ Feedly ที่มีการอัพเดตล่าสุดสองสามวันก่อนเป็นเวอร์ชั่น 23 ตอนนี้ก็ยังไม่ได้รับการอัพเดตบน BeeBox ยังคงเป็นเวอร์ชั่น 22 ซึ่งเป็นของต้นเดือนอยู่
ก็เอาเป็นว่าขอรอคำตอบอีกทีครับ
เปรียบเทียบกลไก Privacy Protection บน Android และ iOS
ทำไมปัญหาเหล่านี้ถึงเกิดกับแอนดรอยด์ง่ายกว่าบน iOS? สาเหตุก็เพราะระบบ Privacy Protection ที่ถูกออกแบบมาต่างกันนั่นเอง
บน iOS จะใช้ระบบควบคุมการเข้าถึงข้อมูลส่วนตัวแบบ Just-in-Time คือตอนติดตั้งไม่ต้องรู้อะไร จะเข้าถึงอะไรบ้างไม่ต้องรู้ แต่พอแอพฯมีการเรียกใช้ จะมี Privacy Prompt ให้เห็นกันทันทีว่ามีการเรียกใช้และมีการเข้าถึงอะไร โดยจะขึ้นมาเฉพาะครั้งแรกเท่านั้น และหากมีการเรียกใช้แปลกๆ Prompt ขึ้นผิดที่ผิดทาง ก็จะไม่ผ่าน Approve จาก Apple
ผลคือ แอพฯ iOS ก็จะสามารถใช้งานแบบบางส่วนได้ ถ้าส่วนไหนเราไม่อนุญาตให้เข้าถึง แอพฯก็แค่ใช้งานไม่ได้ในส่วนนั้น
ในขณะที่แอนดรอยด์จะเป็นระบบ Permission ตอนติดตั้งต้องดูว่าแอพฯนั้นจะเข้าถึงอะไร ถ้าคุณตกลงติดตั้งแล้ว แอพฯนั้นก็จะเข้าถึงตาม Permission ที่ตั้งไว้ได้ทันที โดยที่ผู้ใช้ไม่มีทางรู้ว่าถูกเรียกใช้ตอนไหน หรือถ้าสงสัยใน Permission อันใดอันหนึ่ง สิ่งเดียวที่ทำได้ก็คือไม่ติดตั้ง และไม่สามารถใช้งานได้เลยทั้งแอพฯ
ดังนั้นถือเป็นจุดอ่อนใหญ่โตของ Android ที่ทำให้เกิดมัลแวร์และมีการละเมิดข้อมูลส่วนบุคคลเกิดขึ้นบ่อยครั้ง (แต่ iOS ก็เจอเหมือนกันแหละ เพราะคนที่เป็น User จริงๆ เค้าก็ไม่สนหรอก กดอนุญาตรัวๆ แต่การป้องกันก็ทำมาหลายขั้นตอน ตั้งแต่ Approve แอพฯเลย จนปัญหาตรงนี้หลุดออกมายาก ... แต่ก็ยังมีอยู่)
ถึงตอนลงแอพฯแอนดรอยด์จะมีการบอก Permission แต่ถามจริง ถ้าคุณเป็น User
(1) คุณอ่านมั้ย
(2) คุณอ่านเข้าใจมั้ย?
วางพนันได้เลยว่า 96.75% ตอบว่าไม่ทั้งสองข้อ ...
สรุป
นาทีนี้ถ้ามีคนมาถามว่าจะใช้แอพฯ BeeBox ดีมั้ย คำตอบที่เราตอบคือ "ไว้ใจมั้ยหละ?"
ก็อย่างที่บอกใน Disclaimer ด้านบนว่าอยากให้ทีมออกมา Declare และให้คำตอบของคำถามนี้เป็น "ไว้ใจได้แน่นอน"
สารภาพว่าส่วนตัวตั้งกำแพงไว้ว่า "ห้ามใช้" เวลาคนถามว่าจะใช้ดีมั้ยก็จะตอบคำนั้นไป แต่ถ้าทีมตั้งใจทำออกมาด้วยประสงค์ดีก็พร้อมทำลายกำแพงครับ
ก็ฝากเป็นข้อมูลไว้ละกันครับ ที่เหลือให้ท่านตัดสินใจเอาเอง =)
ขอบคุณครับ สวัสดีครับ