Android Secure Coding

ไปนั่งฟังเรื่อง Android Secure Coding มาเลยอยากมาเล่าให้ฟัง  เนื้อหาที่ไปนั่งฟัง  http://www.thaicert.or.th/training/Java-Android_Secure_Coding.pdf

 

กำหนดคำนิยามกันก่อน

คำนิยาม

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

Vulnerability จุดอ่อน ช่องโหว่ ข้อบกพร่อง ของซอฟท์แวร์

Flaw ข้อบกพร่องของซอฟท์แวร์  (แล้วมันต่างอะไรกับ vulnerability?)

Android (อันนี้ต้องบอกไหม)

Vulnerability คือการเกิดของสามสิ่งร่วมกันคือ  (ดูรูปประกอบ)

๑. ข้อบกพร่องของระบบ (software)

๒. ความสามารถของผู้บุกรุกที่จะโจมตีระบบทางจุดอ่อน

๓. ผู้บุกรุกเข้าถึงข้อบกพร่อง

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

แล้วเราจะเรียนรู้กันไปทำไมเดี๋ยวค่อยมาว่ากัน

ในความจำเป็นของนักพัฒนา (App Developers) เกี่ยวข้องกับเรื่องการพัฒนาซอฟท์แวร์ เพื่อที่จะไม่ให้เกิดปัญหาแบบที่กล่าวมาข้างต้น เอาละก่อนจะไปดูว่าจะทำอย่างไร นักพัฒนาก็มาดูก่อนว่าพื้นฐานควรรู้อะไรบ้างก่อน

อย่างแรก คือเรื่องที่ควบคุมไม่ได้ ได้แก่ เรื่องความมั่นคงปลอดภัยของระบบ, Malware, Android App Market ซึ่งประกอบกันเป็นสิ่งที่เรียกว่า Ecosystem of Android ซึ่งเจ้าระบบนี้เป็นสิ่งที่เปลี่ยนแปลงอยู่ตลอดเวลาและก็อยู่เหนือสิ่งที่ผู้พัฒนาทั่วไปอย่างเรา จะไปควบคุมได้

ดังนั้นก็เหลือสิ่งที่เราสามารถควบคุมได้ (Controllable) ก็คือการเขียนโปรแกรม  (Coding) ของเราเอง หรือเราจะเรียกว่า Application Security หรือ vulnerability นั่นเอง

เรื่อง Reverse Engineering Malware Android http://www.sans.org/reading_room/whitepapers/pda/reverse-engineering-malware-android_33769 บทความดีมีประโยชน์ลองอ่านเพื่อหาความรู้เพิ่มเติม ในบทความนี้มีสถิติที่น่าสนใจหลายอย่าง

ความแตกต่างระหว่าง PC Malware และ Android Malware

……………..

สถิติที่น่าสนใจ

63% ของ malware บน android คือ spyware ซึ่งมักจะขโมยข้อมูลของผู้ใช้ ส่วนที่เหลือก็จะเป็น SMS Trojan ประมาณ 36% ซึ่งผู้ใช้ก็จะเจอปัญหาจากการส่ง sms ไปได้ไม่ได้ต้องการส่ง ทำให้เสียค่าใช้จ่ายเป็นจำนวนมากได้

เหตุผลที่ android ดึงดูดต่อการโจมตี

  • มีข้อมูลเกี่ยวกับ Android ที่มากมายให้สามารถค้นคว้า
  • มีข้อมูลจุดอ่อนจำนวนมากให้สามารถโจมตีได้ รวมถึงระบบ android เองที่ยังไม่มีความเสถียร

ข้อมูลส่วนตัวต่าง ต่าง ที่มีอยู่ในอุปกรณ์ที่ใช้ Android

  • ที่อยู่ ได้แก่ ชื่อ หมายเลขโทรศัพท์ หมายเลขการเรียกเข้า เรียกออก
  • ข้อมูลรหัสผ่าน เช่น ข้อมูลรหัสของ twitter, facebook
  • ข้อมูลเพลง หนังสือ ภาพยนตร์ รูป การบันทึกเสียง
  • ข้อมูลพิกัด
  • ข้อมูลจดหมายอิเล็กทรอนิกส์ SMS ข้อมูลการสนทนา
  • ข้อมูล web เช่น ประวัติ cookie bookmarks ข้อมูล auto-complete เช่น user, password

ส่วนแบ่งการตลาดของ android ข้อมูลจาก http://www.pcworld.com/article/226339/android_market_share_growth_accelerating_nielsen_finds.html

แน่นอนว่ายิ่งมีจำนวนการใช้งานที่มากก็ย่อมจะเป็นสิ่งที่ดึงดูดอย่างมากสำหรับการทำ malware เช่นเดียวกับเหตุผลที่มี malware จำนวนมากบน Windows PC นั่นเอง นอกจากนี้แล้วด้วยระบบ Open Marketplace ของ Android ก็เป็นสาเหตุที่ทำให้การกระจายตัวของ malware เนื่องจากรูปแบบของ Android Marketplace เป็นระบบเปิด ผู้ที่ทำ malware สามารถที่จะนำซอฟท์แวร์ขึ้นไปไว้ใน Market ได้โดยง่ายโดยไม่มีการตรวจสอบ ซอฟท์แวร์เหล่านี้สามารถที่จะ download ไปใช้ได้โดยง่ายและฟรี แม้ว่า Google สามารถที่จะลบ malware ออกจาก Marketplace ได้ก็ตามแต่นั้นก็อาจจะใช้เวลาหลายวันหลักจากที่มีการเผยแพร่ malware ดังกล่าวไปแล้ว

ปัญหาอีกเรื่องของ Android OS ก็คือ การที่ผู้ผลิต Hardware มีการปรับเปลี่ยนไปจากของเดิม ดังนั้นบางครั้ง Google OS patch ก็อาจจะไม่สามารถแก้ไขปัญหาที่เกิดขึ้นจากการที่ผู้ผลิตได้ปรับปรุงแก้ไข Android OS ดังกล่าวได้ หรือการที่ Google ออกความสามารถด้านระบบความปลอดภัยใหม่ออกมาก็อาจจะไม่มีผลต่ออุปกรณ์ของผู้ใช้รายนั้นได้เช่นกัน

ยัง ยังไม่หมด ปัญหายังมีอีก (มีเยอะขนาดนี้จะใช้ดีไหมเนี่ย) ถ้าดูจาก รุ่นหรือ Versions ของ Android http://developer.android.com/resources/dashboard/platform-versions.html

จะเห็นว่ามันมีรุ่นที่หลากหลายมาก การที่มีหลากหลายรุ่นก็หมายความถึงการมีหลากหลาย Hardware หลากหลาย OS ก็ยิ่งทำให้เรื่องระบบความปลอดภัยยุ่งยากวุ่นวานเพิ่มมากขึ้นไปอีก

รูปแบบการโจมตีในชีวิตจริงในโลกของ Android นั้นทำได้ง่ายยิ่งกว่าปลอกกล้วยเข้าปาก ง่ายอย่างไรง่ายตรงที่ผู้ใช้ไม่ต้องไปทำอะไรให้ยุ่งยากกับชีวิต (No user interaction)  ง่ายตรงที่ไม่ต้องหลอกล่ออะไรมากมาย (social engineering) แค่ผู้ใช้เข้า web site ที่สร้างขึ้นจากผู้ไม่ประสงค์ดี ยกตัวอย่างเช่น

  1. ผู้ใช้เข้าไปยัง malicious website ผ่านทาง Android’s web browser
  2. ใน website จะมีเนื้อหาที่อาศัยจุดอ่อนของ Webkit (Webkit vulnerability (CVE-2010-1807))
  3. จากนั้นมันก็จะฝังตัวเองเข้าไปในระบบพร้อมส่งการเชื่อมต่อกลับไปยังระบบของผู้บุกรุกผ่านทางเครือข่าย
  4. malware ก็จะหาบัญชีผู้ใช้งาน Skype ที่อยู่ในไฟล์ /data/data/com.skype.raider/files/shared.xml
  5. จากจุดอ่อนของ Skype (CVE-2011-1717) ซึ่งสามารถจะอ่านข้อมูลต่าง ๆ ของผู้ใช้งานไม่ว่าจะเป็นบัญชีรายชื่อเพื่อน, ข้อมูลการสนทนา,
  6. เมื่อผู้บุกรุกได้ข้อมูลดังกล่าวไป ก็นำไปวิเคราะห์หาวิธีเพื่อจะขยายผลการโจมตีต่อไป

สรุปประเด็นของสิ่งที่ควบคุมไม่ได้เนื่องจาก

  • กระจาย malware ได้ง่ายใน Market
  • สร้างซอฟท์แวร์สำหรับโจมตีได้ง่าย แค่ทำ code ฝังตัวไว้ใน web ทั่วไป
  • Android มีรุ่นของซอฟท์แวร์จำนวนมาก ทำให้ยากในการแก้ไขปรับปรุง

ดังนั้นที่เหลือที่พอจะทำกันได้ก็คือ เขียนโปรแกรมซะให้มันดี อย่าให้มันมีจุดอ่อน

จะทำอย่างไรได้บ้างก็ต้องมาดูแบบของภัยคุกคามกันก่อน ลองดูใน slide ที่ 6 ของเอกสาร https://buildsecurityin.us-cert.gov/swa/presentations_032011/DanCornell-MobileAppSecOverview.pdf

หรือดูจาก Android Threat Model ของ JPCERT/CC

ช่องโหว่หรือจุดอ่อนของ Applications มีอะไรบ้างจากข้อมูลสถิติที่รายงานต่อ JPCERT/CC ในรอบ ๑ ปีมีไม่น้อยกว่า 35 vulnerability โดยในนั้นก็มีเกี่ยวกับ Android platform ซึ่งจะเป็นเรื่องที่เกี่ยวกับ

  • Improper file (DB) permissions  หรือการกำหนดสิทธิในการเข้าถึงไฟล์ที่ไม่เหมาะสม
  • Webview
  • JSON hijacking

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

….. เรื่องนี้ยังไม่จบ ว่างเมื่อไหร่มาว่ากันต่อ

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s