ช่วงนี้ผู้อ่านคงจะได้ยินข่าวคราวเกี่ยวกับแอปพลิเคชันตัวหนึ่งของหน่วยบัญชาการรักษาดินแดนที่ชื่อว่า “รักษาดินแดน” ซึ่งเป็นแอปพลิเคชันสำหรับนักศึกษาทหารและศูนย์ฝึกฯ ซึ่งมีเสียงเล่าเสียงลือมาว่าแอพตัวนี้รู้สึกได้ถึงพลังงานบางอย่าง เพราะ Permission ที่ขอนั้นเยอะมากจนน่ากลัวแถมข้อมูลยังอยู่ในการควบคุมของทหาร

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

      สำหรับแอพตัวนี้ก็พัฒนาขึ้นโดย บริษัท ธนพัฒน์ อินเตอร์ โซเชียล มีเดีย จำกัด ซึ่งดูแล้วน่าจะเป็นบริษัทที่รับงานมาพัฒนาเนื่องจากบริษัทนี้รับพัฒนา Software อยู่แล้ว แปลกใจนิดหน่อยก็ตรงที่แอพรักษาดินแดนเป็นตัวแรกที่โผล่อยู่ในรายชื่อแอพของทางบริษัท (ไม่เคยเห็นตัวอื่นๆมาก่อน)

      ตัวแอพเน้นการใช้งานเกี่ยวกับแชท แจ้งข้อมูลข่าวสาร รวมไปถึงวีดีโอคอล จะเรียกว่าเป็นแอพ Social สำหรับนักศึกษาวิชาทหารก็ว่าได้ มีทั้งแชทเดี่ยว แชทกลุ่ม ระบบสติ๊กเกอร์ วีดีโอคอล ดูข่าวสารในรูปแบบไทม์ไลน์ ฯลฯ

      ข้ามเรื่องรีวิวแอพไปเลยละกัน เพราะผมไม่ได้จะมารีวิวแอพตัวนี้อยู่แล้ว แต่จะมาดูว่าแอพตัวนี้มันไม่ปลอดภัยสำหรับผู้ใช้งานจริงๆหรือป่าว? เพราะหลายๆคนบอกว่าเห็น Permission แล้วรู้สึกว่ามันไม่ปลอดภัยเลย

      ถ้ายังจำกันได้ ผมเคยเขียนบทความเกี่ยวกับเรื่อง Permission ของแอนดรอยด์ไว้นานแล้วว่าจริงๆแล้วการดู Permission ก่อนติดตั้งแอพทุกครั้งมันก็ไม่ได้ช่วยอะไรเราซักเท่าไรนัก เพราะสุดท้ายเราก็ไม่รู้อยู่ดีกว่านักพัฒนาแอบเขียนอะไรไว้ข้างในโค้ด

 

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

        ก่อนอื่นมาดูก่อนว่า Permission ในแอพตัวนี้มีอะไรบ้าง แต่จะพูดในแบบฉบับของนักพัฒนานะครับ

      เอาเข้าจริงถ้าผมเป็นผู้ใช้ธรรมดาๆแล้วมาเห็นคำสั่งประกาศ Permission ในโค้ดแบบนี้ก็คงตกใจและกังวลไม่น้อยน่ะแหละ แต่สำหรับนักพัฒนาแล้วถือว่าเป็นเรื่องปกติครับ ขึ้นอยู่กับไลบรารี (โค้ดสำเร็จรูปจากนักพัฒนาคนอื่น/ที่อื่น) 

      ก่อนจะพูดถึงเรื่อง Permission เบื้องลึกของแอพตัวนี้ แนะนำว่าให้ดูว่าแอพตัวนี้ใช้ไลบรารีอะไรบ้างดีกว่าครับ ซึ่งผมก็ไปนั่งลิสมาให้ส่วนหนึ่งแล้วดังนี้

    • ButterKnife
    • Bolt
    • Facebook SDK
    • Parse
    • GCM
    • Glide
    • Jackson
    • Firebase
    • Ads
    • GSON
    • LoopJ
    • Oovoo SDK 
    • Otto
    • Google Analytic

      ซึ่งหลายๆตัวผู้ใช้ทั่วไปไม่ค่อยเข้าใจเท่าไรนัก (ซึ่งเป็นเรื่องปกติ) แต่สำหรับนักพัฒนาแอนดรอยด์ด้วยกันก็คงจะคุ้นเคยกันดี แล้วผมก็จะขอตัดไลบรารีที่ไม่ส่งผลกับ Permission ก่อน โดยใส่เส้นขีดคั่นไว้ให้แล้ว ดังนั้นไลบรารีที่เหลืออยู่แต่ละตัวก็จะมีหน้าที่ดังนี้

    • Bolt ตัวนี้มาพร้อมกับ Parse
    • Parse บริการเซิฟเวอร์หลังบ้าน
    • LoopJ ไลบรารีสำหรับรับส่งข้อมูลระหว่างเซิฟเวอร์ 
    • Glide โหลดภาพจากอินเตอร์เน็ตมาแสดง
    • Facebook SDK ไลบรารีสำหรับ Facebook
    • Google Analytic สำหรับเก็บสถิติผู้ใช้งานภายในแอพ
    • Oovoo SDK ไลบรารีสำหรับวีดีโอคอล

      สำหรับ Parse เป็นบริการฝั่งเซิฟเวอร์ที่ให้บริการต่างๆสำหรับแอพ ซึ่งที่แอพรักษาดินแดนใช้คือระบบผู้ใช้งาน ทั้งการสมัครและการล็อกอินเข้าใช้งาน แล้วก็ใช้สำหรับ Push Notification แต่ผมแอบแปลกใจเล็กน้อยที่ยังใช้ Parse อยู่ ถึงแม้จะสะดวกก็ตาม เพราะ Parse นั้นประกาศจะปิดให้บริการในอีกเร็วๆนี้ เลยเดาว่าน่าจะใช้งานก่อนอยู่แล้ว แล้วทาง Parse ประกาศจะปิดให้บริการทีหลัง ก็ต้องรอดูว่าเค้าจะย้ายผู้ใช้งานจาก Parse ไปไว้ที่อื่นยังไง

      Facebook SDK ถึงแม้ว่าจะเป็นไลบรารีสำหรับเชื่อมต่อกับ Facebook ก็จริง แต่ดูเหมือนว่าในแอพจะไม่ได้มีการเชื่อมต่อกับ Facebook เลย เท่าที่เห็นคือการทำให้แอพสามารถแชร์ Content จากในแอพขึ้นบน Facebook ได้

      Google Analytic ที่ใช้ภายในแอพก็แค่หน้าแรกเท่านั้น คงต้องการแค่เก็บสถิติคนที่เข้าแอพในแต่ละวันเฉยๆ ไม่ได้เก็บว่าผู้ใช้เข้าหน้าไหนบ้าง หรือกดปุ่มไหนบ้าง

      Oovoo SDK แอพส่วนใหญ่ที่มีระบบวีดีโอคอลผมบอกได้เลยว่าน้อยนักที่จะพัฒนาเอง เพราะมันทำไม่ได้ง่ายแล้วก็เสียเวลาด้วย ดังนั้นการมองหาไลบรารีสำหรับวีดีโอคอลจึงเป็นเรื่องปกติ เพราะแอพตัวนี้ก็มีวีดีโอคอลภายในแอพอยู่ด้วย

 

      ทีนี้ปัญหาส่วนใหญ่ที่นักพัฒนาเจอเวลาใช้ไลบรารีก็คือ ไลบรารีแต่ละตัวก็ต้องมี Permission ที่จะใช้งานด้วยเช่นกัน บางตัวก็จะประกาศให้โดยอัตโนมัติ หรือบางตัวเราก็ต้องประกาศเองเพื่อให้ใช้งานไลบรารีตัวนั้นๆได้ ซึ่งไลบรารีส่วนใหญ่ก็มักจะต้องการ Internet Permission ซะส่วนใหญ่

      แต่ทว่าเจ้า Oovoo SDK ที่ใช้ทำวีดีโอคอลนี่แหละที่เป็นต้นเหตุของการขอ Permission ที่เยอะแยะ เพราะถ้าลองไปดูวิธีเรียกใช้งาน Oovoo SDK ก็จะพบว่าไลบรารีตัวนี้บังคับให้ประกาศ Permission เยอะมาก 

      ดังนั้นจึงบอกได้เลยว่า Oovoo SDK นี่แหละที่ทำให้ต้องขอ Permission เยอะแยะมากมาย ซึ่งจริงๆก็ไม่ได้แปลกอะไรเนื่องจากตัวไลบรารีนั้นมีความสามารถที่ครอบคลุมทำได้หลายๆอย่าง จึงมีการบังคับให้ขอ Permission หลายๆตัว

      และเมื่อตัด Permission จากไลบรารีต่างๆออกไปก็จะเหลืออยู่ไม่กี่ตัวที่ผมก็ยังหาไม่เจอว่าเรียกใช้ตอนไหน

      VIBRATE ก็คงเอาไว้สั่นเตือนเวลามีข้อความหรืออะไรแจ้งเข้ามา

      GET_TASKS ดึงข้อมูลของแอพที่ทำงานอยู่ในขณะนั้น ซึ่งทำอะไรได้ไม่มากนัก และไม่ค่อยเป็นอันตรายต่อผู้ใช้ซักเท่าไร

      CLEAR_APP_CACHE สั่งเคลียร์ Cache ของแอพได้ ซึ่งก็ไม่มีอันตรายเช่นกัน เพราะเวลาพื้นที่ในเครื่องไม่พอ ผู้ใช้ส่วนใหญ่ก็พอไล่กด Clear Cache ในทุกๆแอพอยู่แล้ว และแอพบางตัวทำเพื่อไม่ให้ไฟล์ตกค้างอยู่ในเครื่องเยอะเกินไปก็มี

      GET_ACCOUNTS ดึงข้อมูลผู้ใช้งานจาก Google Account แต่ผู้ใช้ต้องมีการกดยืนยอมก่อน ถ้าไม่อนุญาตก็ไม่มีผลอะไร แต่ถ้าเข้าถึง Google Account ของเครื่องนั้นได้แล้ว ในแอพจะดึงข้อมูลอะไรไปบ้าง อันนี้ผมยังตอบให้ไม่ได้ครับ (ไม่ได้เช็คละเอียดขนาดนั้น)

       

      อีกเรื่องนึงที่อยากให้ดูกันหน่อยก็คือ Broadcast Receiver ครับ เป็นศัพท์เฉพาะทางสำหรับ Android Dev แต่ถ้าจะให้อธิบายง่ายๆก็คือความสามารถหนึ่งของแอพแอนดรอยด์ที่สามารถกำหนดได้ว่าจะให้แอพทำงานในช่วงเวลาที่ต้องการได้

      จะเห็นว่าแอพมีการทำงานเมื่อ BOOT_COMPLETED กับ USER_PRESENT ซึ่ง BOOT_COMPLETED คือคำสั่งจะทำงานเมื่อเครื่องเปิดเสร็จแล้ว ส่วน USER_PRESENT คือคำสั่งจะทำงานหลังจากผู้ใช้ปลดล็อคหน้าจอ (ทั้งคู่ใช้คำสั่งเดียวกัน)

      ปัญหาก็คือเงื่อนไขการทำงานของแอพทั้งสองอย่างนี้จะแสดงเป็นคำขออยู่ในตอนที่ผู้ใช้ติดตั้งแอพด้วย จึงทำให้ผู้ใช้รู้สึกกังวลมากขึ้นอีก แต่เมื่อดูจากโค้ดจะเห็นว่าไอ้ที่ทำงานตอนเปิดเครื่องเสร็จแล้ว คือไฟล์ที่ชื่อว่า ParsePushBroadcastReceiver ซึ่งข้างในเป็นคำสั่งสำหรับ Push Notification เฉยๆครับ เพื่อที่จะให้แอพสามารถรอรับ Notification ได้ตลอดเวลา ส่วน Broadcast Receiver ที่เหลืออีกสองตัวก็จะเป็นคำสั่งสำหรับ Push Notification ที่ไลบรารีของ Parse ต้องการเท่านั้นครับ 

 

      นอกเหนือจาก Permission กับ Broadcast Receiver แล้ว ผมก็ยังไม่เจออะไรแปลกๆภายในโค้ดนะ จากที่นั่งไล่ดูคร่าวๆ ส่วนใหญ่ก็เป็นพวกโค้ดธรรมดามีทั้งส่งไฟล์รูปหรือวีดีโอระหว่างคู่สนทนาได้เหมือนแอพแชททั่วๆไป 

      ที่รู้สึกว่าไม่ปลอดภัยก็คงจะเป็นเรื่องการสมัครเข้าใช้งานครั้งแรก เพราะต้องใช้เลขประจำตัวของ นศท. หรือเลขประจำตัวของเจ้าหน้าที่ซึ่งเลขประจำตัวของนศท.เดาได้ไม่ยากนักเพราะเป็นชุดเลข 10 ตัวที่มีรูปแบบอย่างง่ายๆ เพราะงั้นถ้าลองมั่วๆเลขจนถูกก็จะเข้าสู่หน้ากำหนดรหัสผ่าน, อีเมลล์ และเบอร์โทรศัพท์ได้ทันที และเห็นว่าพอเข้าไปข้างในก็ได้จะเห็นข้อมูลของ นศท. คนนั้นๆทันที 

 

      ส่วนฝั่งเซิฟเวอร์นั้นดูเหมือนว่าทางทีมพัฒนาก็ทำให้ด้วยเช่นกัน เพราะตัวแอพเชื่อมต่อกับเซิฟเวอร์ภายในของตัวเองทั้งหมดเลย (มี Parse ที่เป็นเซิฟเวอร์แยก) และการรับส่งข้อมูลระหว่างเซิฟเวอร์ก็ทำผ่าน HTTPS ทั้งหมดเช่นกัน

      แต่ที่รู้สึกแปลกๆก็คือแอพตัวนี้มีการติด Ads ด้วยนี่สิ….มีผู้ใช้บอกมาว่าเปิดแอพขึ้นมาปุปก็เจอ Ads เด้งเป็นบางครั้ง

 

      ส่วนข้อมูลบางอย่างที่แสดงในแอพก็ยังใช้ WebView อยู่ ซึ่งเข้าใจได้ เพราะส่วนใหญ่เว็ปทางการมักจะวางข้อมูลไว้บน Front-end ทั้งหมด ไม่ได้ทำเป็น Back-end ให้ยิงผ่าน API กัน อาจจะต้องรอดูซักพักว่าจะทำใหม่หรือไม่

 

สรุป 

      จากที่นั่งส่องดูคร่าวๆแล้วก็ไม่พบอะไรผิดปกติหรือแปลกๆ ดังนั้นที่ใครหลายๆคนรู้สึกว่าไม่ปลอดภัยเพราะขอ Permission ก็บอกได้เลยว่าหายห่วง ไม่ได้มีอะไรแปลกๆส่วนใหญ่ก็มาจากไลบรารีที่จำเป็นต้องใช้งาน ซึ่งเทียบกับแอพจีนหลายๆตัวที่ผู้ใช้ส่วนใหญ่ติดตั้งกันแล้ว ผมว่าแอพตัวนี้น่าเป็นห่วงน้อยกว่าอีกนะ อย่างน้อยก็ในเวอร์ชัน 1.6 นี่แหละ (เวอร์ชันที่ผมเอามาดูรายละเอียดข้างในแอพ)

      ส่วนเรื่องความกังวลว่าจะโดนดักข้อมูลจากการใช้งานแอพหรือป่าว อันนี้ก็หายห่วงครับ เพราะข้อมูลวิ่งผ่านเซิฟเวอร์ของเค้าอยู่แล้ว ถ้าเค้าจะเอาข้อมูลอะไรไปก็อยู่บนเซิฟเวอร์ของเค้าตั้งแต่แรกอยู่แล้ว เค้าไม่มานั่งดักจากในแอพหรอก ฮ่าๆ และผมก็ไม่พบเจอคำสั่งพวกแอบดึงข้อมูลในเครื่องแล้วส่งขึ้นเซิฟเวอร์นะครับ

      ที่ผมรู้สึกว่าไม่ค่อยโอเคในแอพตัวนี้ก็คงเป็นเรื่องการสมัครใช้งานครั้งแรกที่สามารถสุ่มรหัสมั่วๆแล้วเข้าไปสมัครได้ และแนะนำให้ใส่ Proguard หน่อย เพื่อให้ APK ปลอดภัยจากนักพัฒนาที่ไม่หวังดีซักหน่อย

      สุดท้ายตัวแอพผมว่าโดยรวมโอเคครับ ดูจากข้างในแล้วก็พอจะเดาได้ว่าเป็นแอพที่เน้นส่งเสริมด้าน Social ระหว่างกลุ่มเฉพาะทาง​ (ถึงแม้ว่าผมจะยังไม่ได้ลองใช้ดู) ซึ่งช่วยเพิ่มความสะดวกพอสมควรเลยนะ มีครบครันทั้งคุยเดี่ยว คุยกลุ่ม วีดีโอคอล, อัพเดทข่าวสารจากทางหน่วยงาน, มีระบบสติ๊กเกอร์ให้ดาวน์โหลด และสามารถพูดคุยกับทางหน่วยงานได้โดยตรง ก็ขอให้พัฒนาต่อไปเรื่อยๆให้ดีขึ้นครับ