Mabel Technology Banner

Tuesday, October 7, 2014

יש לכם טלפון אנדרואיד - כדאי שתקראו


מעל 80 אחוז ממשתמשי הסמראטפונים בעולם עובדים עם אנדרואיד אולם לצד היתרונות והגמישות שמביאה איתה מערכת פתוחה יש לא מספר סכנות שכדאי להיות מודעים להם אז לפני שאתם מתקינים את האפליקציה הבאה כדאי לקרוא ובעיקר להפנים.

טלפון פרוץ - (rooted)
משתמשים רבים פורצים את המכשיר. יש לא מעט יתרונות שמקבלים כגון חסימת פרסומות במשחקים ואפליקציות, יכולת להוריד אפליקציות בחינם ועוד אפשרויות רבות שקשורות לשליטה מלאה על המכשיר. הבעיה היא שמי שאינו מבין יכול לגרום לעצמו נזק גדול. אפליקציה שמותקנת על טלפון כזה יכולה בפעולה פשוטה (מספר קטן של שורות קוד) לעשות כל דבר על המכשיר החל מגישה למידע רגיש דרך שינויים במרכיבי המערכת השונים ועד למחיקה והחלפה של כל ה ROM.
עוד נקודה חשובה היא שגוגל לא מונעת ממפתחים לפרסם בחנות הרשמית שלה אפליקציות שדורשות שהטלפון יהיה פרוץ והמגנון עובד בשיטת האמון במפתח כלומר עד שהם לא מקבלים תלונות על תוכנה זדונית, הם לא בודקים כלום

לסיכום: אם אין סיבה מיוחדת (וחיסכון של כמה דולרים בודדים בקניית תוכנות זו לא סיבה מוצדקת) לא כדאי לפרוץ את הטלפון. אם בכל זאת יש סיבה - למשל אם קניתם את הטלפון מספקי הסלולר השונים והוא מלא תוכנות מיותרות שלא ניתנות להסרה ורוצים להחליף את ה rom בד״כ תמצאו roms פרוצים, כדי לעדכן rom צריך קצת יותר מידע בסיסי ואז כדאי לחפש עוד קצת כדי להפוך את ה rom ל - unroooted. אם רוצים להשאיר את הטלפון פרוץ יש מספר צעדים חשובים לעשות (בפוסט אחר)
תוכנות ממקורות לא מוכרים
בתפריט security ניתן להגדיר את האופציה unknown sources:




המשמעות של סימון האופציה הזו היא שניתן להתקין כל תוכנה מכל מקור, כלומר לחיצה על קישור בדפדפן או מייל שהגיע עם קובץ התקנה מצורף יתקין את התוכנה בלי לשאול יותר מדי שאלות
אפליקציות כאלו יכולות לחייג למספרי פרימיום, לשלוח הודעות sms וכד׳
גם אפליקציה שנראית תקינה ומגיעה ממקורות לא ידועים יכולה להכיל קוד זדוני, יש מקרים שבהם האקרים מורידים תוכנות, ״מלבישים״ עליהם תוספת קוד זדוני ואורזים אותם שוב בחתימה דיגיטלית חדשה. המשתמש מוריד משחק פרוץ, אין מאושר ממנו כי הוא חסך דולר שלם, אך הוא לא יודע שתוך כדי המשחק רץ אצלו גם קוד זדוני נוסף

יש לשים לב שהאופציה לא מסומנת וגם אם מסמנים אותה לצורך התקנה נקודתית, לא לשכוח להוריד

מי היצרן ? כמה הורדות?
יש לכם חשבון בנק? התקנתם את האפליקציה של הבנק? לא בטוח שהיא שייכת באמת לבנק שלכם. אחת ההתקפות הנפוצות היום היא לזייף זהות (phishing) וע״י זה לגרום למשתמש להזין פרטים רגישים
גוגל לא בודקת שמי שעומד מאחורי האפליקציה של בנק לאומי למשל הוא אכן הבנק. כל אחד יכול לפתוח חשבון ולהזדהות איך שירצה ושוב - עד שלא תגיע תלונה שום דבר לא יבדק
המשתמש מתקין את האפליקציה שנראית ומתנהגת כמו אפליקצית הבנק ומתחבר דרכה לחשבון. בד״כ האפליקציה שומרת את פרטי הזיהוי בענן ומציגה לו הודעה שיש גרסה חדשה ושולחת אותו לחנות לאפליקציה האמיתית. למשתמש הטיפוסי כל המהלך נראה תקין אך הוא לא יודע שמידע הזיהוי שלו נמצא אצל גורם נוסף
לקוחות בנק מזרחי - טפחות היו לפני מספר חודשים מטרה להתקפה מסוג זה (חפשו בגוגל BankMirage) 

התגוננות: כניסה לאתר הבנק דרך הדפדפן תציג בד״כ הודעה שיש אפליקציה ייעודית ולחיצה על הלינק יביא את המשתמש לאפליקציה הנכונה בחנות (אתרי הבנקים מוגנים באמצעות ssl)



עוד אפשרות היא לשים לב כמה הורדות היו לאפליקציה - מידע שרשום בחנות של גוגל. אם רואים כמות הורדות גדולה, הסיכון קטן יותר שזו אפליקציה זדונית.

שימו לב להרשאות
כאשר מתקינים אפליקציה חדשה, בחנות של גוגל ניתן לראות את ההרשאות שהיא מבקשת. בין ההרשאות קיימות גם כאלו שבהחלט יכולות להיות מסוכנות.
אפליקציה למשל יכולה לבקש הרשאה לגשת לרשת ולמיקרופון - המשמעות היא שאפליקציה זו יכולה להקליט אתכם בלי שתדעו ולשלוח את ההקלטה דרך הרשת
הרשאות בעייתיות נוספות הינן: גישה לאנשי קשר, הוצאת שיחות, שליחת sms, שינויי הגדרות ועוד
משתמש טיפוסי בד״כ לא קורא אלא לוחץ על accept and download והמשמעות היא שאפליקציה כזו תוכל לפעול אוטומטית בהדלקה ולבצע פעולות שונות ללא שום התראה נוספת - אפליקציות רבות אוספות מידע על המשתמש ולרוב המשתמש לא יודע זאת

הבעיה היא שזה הכל או כלום - אם אתם רוצים להתקין את האפליקציה אתם צריכים לתת לה את כל ההרשאות, אי אפשר לסנן חלק מההרשאות (בהפצת אנדרואיד סטנדרטית)

ניקח לדוגמא משחק פופולרי מאד Subway Surfers. מטרת המשחק פשוטה מאד - לרוץ כל הזמן ולאסוף מטבעות. בתיאור המשחק לא כתוב שום דבר לגבי הפעילות שעושה התוכנה בזמן שהשחקן משחק. כאשר מסתכלים על ההרשאות שהמשחק מבקש מקבלים את הרשימה הבאה: (הייתי צריך לבצע שני צילומי מסך כי רשימת ההרשאות לא נכנסה במסך אחד !!!)








האפליקציה מבקשת לדעת איזה יישומים נוספים רצים, איזה חשבונות מוגדרים למשתמש, היא מבקשת אפשרות גישה לקבצים ותמונות כולל אפשרות שינוי ומחיקה,היא מבקשת גישה לרשתות האלחוטיות , מצב הטלפון, גישה מלאה לרשת ואפשרות הורדת קבצים למכשיר ועוד !!!!

נשאלת השאלה למה? והתשובה היא שהמשחק הזה כמו רבים אחרים הוא רק מעטפת לתוכנה שאוספת עליכם כל מידע אפשרי - חשבתם שמתי שאתם משחקים אתם אנונימים - תחשבו שוב

מה עושים? ראשית יש להסתכל על רשימת ההרשאות המבוקשות ולראות אם אין שם משהו ממש חשוד (שליחת הודעות sms למשל). שנית יש לשים לב לכמות ההורדות ואז להפעיל שיקול דעת אם להתקין את התוכנה
הפצות קהילתיות של אנדרואיד מאפשרות לאחר התקנה להוריד חלק מההרשאות אבל התקנה וטיפול בהפצות אלו היא פעולה מורכבת למשתמש הטיפוסי


זהירות ממקלדות 
אחת האפשרויות הפופולריות באנדרואיד היא להחליף מקלדת. יש עשרות מקלדות שנותנות אפשרויות רבות כגון השלמה אוטומטית, כתיבה מהירה ועוד. 
הבעיה היא שמקלדת היא service שרץ כל הזמן ונמצא בכל אפליקציה שהמשתמש מריץ. כמו כל אפליקציה גם לה יש הרשאות. מקלדת שמקבלת הרשאות אינטרנט יכולה להעביר את כל מה שאנו מקלידים לרשת

נסתכל לדוגמא על מקלדת פופולרית Swype Keyboard (נדרשו 3 צילומי מסך כדי לראות את כל ההרשאות)



 
רשימת ההרשאות כוללת גישה למידע על אנשי קשר, הודעות טקסט, מיקום gps , שיחות טלפון, קבצים, מצלמה, מיקרופון גישת רשת מלאה ועוד. האם מישהו יכול להתחייב שכאשר מקלידים את סיסמת ה gmail למשל המקלדת לא שולחת אותה לשרת מרוחק?

סיכום
לצד הרבה מאד יתרונות שיש לפלטפורמה פתוחה כמו אנדרואיד, יש גם חסרונות ובעיות רבות של פרטיות שכל מי שמחזיק טלפון כזה חייב לדעת. הורים לילדים חייבים לבדוק את הטלפונים של הילדים ולראות שלא התקינו כל מיני רכיבים בעייתים.












Saturday, August 9, 2014

Lab - character device driver

In this lab you'll create a character device driver
you'll change the clipboard driver to support 2 devices and to allocate major number statically

Test for the complete driver:

# mknod /dev/clip1 c 237 0
# mknod /dev/clip2 c 237 1


# insmod chardrvex.ko
# echo "abc" > /dev/clip1
# echo "xyz" > /dev/clip2
# cat /dev/clip1
value=abc
# cat /dev/clip2
value=xyz

Instructions

  • Start with charDrvEx module
  • change the init function:
    • allocate another buffer for the second instance
    • change the major number allocation to static (237,0) , (237,1)
  • change the read,write operations to use the correct buffer 
  • complete exit function implementation 
  • test your work
  • write a user space application to test your work

Lab - hardware access

RTC emulation in qemu:

Base address: 0x101e8000

Registers:


Offset Description Access
0 Value R
4 Match RW
8 Set W
... ... ...

continue with the proc interface lab, print the current RTC value  

Lab - proc interface

Start with module parameters lab

Add proc file:   /proc/driver/myfile with read operation

# insmod mymod.ko irq=8 debug=1 name=fpga channels=0x200,0x300

.....



# cat /proc/driver/myfile
irq:8
debug:1
name:fpga
channels:0x200,0x300


note that the user can change the parameters value after module load via sysfs interface so you need to generate the output dynamically

Lab - module parameters

in this lab you'll create a module with the following parameters:

# insmod mymodule.ko   irq=10 name=mydev debug=1 channels=0x100,0x200,0x300
  1. Create a new kernel module (can be based on mod1 source)  
  2. Create the parameters:
    1. irq - integer , default value = 6
    2. name - char pointer 
    3. debug - integer, default value = 0 (no debug)
    4. channels - integer array, size = 8 
  3. Add module init function
    1. if debug=1 write to the kernel log all parameters 
    2. if debug=0 write to kernel log "module init"
  4. Add module exit function
  5. Create files on /sys/module/ to access all parameters
  6. Test your work

Labs instructions

To run eclipse: 

# cd /opt
# ./run_eclipse &


To run qemu:

# cd /opt/armsystem/output
# ./run_qemu &


Copy user application to the target

# cp  [source app]   /opt/armsystem/output/rootfs


Copy kernel module to the target

# cp [source module]  /opt/armsystem/output/rootfs/lib/modules/2.6.32