Як розробляти безпечні програми під Android. Семінар в Яндексі

    Частка користувачів, які застосовують у щоденному житті мобільні пристрої, неухильно зростає. Велика частина цих пристроїв — смартфони та планшети на базі iOS, Android і Windows. Мобільність, специфічні особливості взаємодії користувача з пристроєм і нові операційні системи — фактори, що призводять до появи незвичайних проблем, пов'язаних з інформаційною безпекою. Ми розглянемо частину з цих проблем, їх вирішення, і на практиці переконаємося, що розробка інструментів для аналізу мобільних додатків не так вже складна.
 
  
Почнемо з того, що перерахуємо кілька характерних для більшості мобільних пристроїв рис, які можуть впливати в тому числі і на безпеку:
 
     
  • мініатюрність;
  •  
  • масовість;
  •  
  • універсальність;
  •  
  • зберігання важливих для користувача даних;
  •  
  • постійне підключення до мережі (GPRS/3G/EDGE/WiFi).
  •  
Так які ж ризики породжують ці особливості. Мініатюрність призводить до того, що пристрій неважко втратити, після чого воно потенційно може опинитися в руках зловмисника. Масовість і простота монетизації робить пристрої привабливими для зловмисників. Просто змусивши телефон послати SMS на платний номер, можна отримати непогану вигоду. Велика кількість користувачів також означає, що і відсоток не дуже технічно грамотних користувачів досить великий. Універсальність мобільних пристроїв увазі, що в них може зберігатися практично весь спектр персональної інформації, яку можна використовувати: контакти, листування, фотографії, відео, паролі і токени від різних важливих сервісів аж до банківських клієнтів. Постійне підключення до мережі — це додатковий ризик, так як зловмисникам не потрібно вигадувати моменти для атаки.
 
На жаль, через те, що ринок мобільних пристроїв пережив такий вибухове зростання, безпечники трохи відстали від протилежної сторони, тому зараз між ними і зловмисниками йдуть практично гонки на виживання. Це непросто. Пристрої виробляють десятки різних вендорів, вони працюють під управлінням різних платформ, на них встановлюються величезна кількість додатків, в багатьох з яких є уразливості. Все це породжує величезну кількість проблем.
 
 

Безпека в Android

Звичайно, розробники мобільних платформ знають про всі ці ризики і намагаються передбачити захист від них. Розглянемо, які рівні захисту є в Android. По-перше, там є захист від фізичного доступу: PIN, паролі, біометрія, розчерки. Однак біометрія там дуже специфічна, а з паролями і розчерками є певні проблеми: при введенні на екрані можуть залишатися помітні сліди, за якими можна відновити, що саме було набрано.
 
 
 
Проте, захист є, і часто спрацьовує. Для додатків також є декілька рівнів захисту. По-перше, у майже завжди у програм є унікальні UID і запускаються вони окремими процесами і в ізольованій віртуальній машині. Цікава особливість Android — недінаміческіе привілеї додатків: всі доступи запитуються при установці. Тобто користувач відразу ознайомлений з тим, до чого можуть звертатися додатки. До питання безпеки файлової системи розробники Android підійшли досить строго. Системний розділ примонтовано в режимі read-only, розстановка привілеїв і прав у файлових системах зроблена практично вручну, починаючи з версії 3.0 з'явилося шифрування файлової системи. Наведу приклад скрипта init.rc для андроїдів версій 4.x:
 
 
...
	# create data/gps for GPS demon
		mkdir /data/gps 771 gps system
		chown gps system /data/gps
		chown gps root /sys/class/sec/gps/GPS_PWR_EN/value
		chmod 660 /sys/class/sec/gps/GPS_PWR_EN/value

	# for sensor control
		chown system input /sys/class/input/input0/enable
		chown system input /sys/class/input/input0/delay
		chown system input /sys/class/input/input0/wake
		chown system input /sys/class/input/input0/data
	...

 
Це лише невелика частина скрипта, але видно, що права на файли і папки для критично важливих ділянок системи розставляються дуже ретельно. Доступу до них у зловмисника бути не повинно.
 
Розробники також потурбувалися про можливість шифрування трафіку, впровадивши SSL. Однак тут є одна специфічна особливість. В Android є сховище кореневих сертифікатів, і якщо заглянути в дамп цього сховища, то можна виявити, цікаву штуку: окрім кореневих сертифікатів відомих центрів, що засвідчують, там є і досить дивні сертифікати. Наприклад, сертифікат японського уряду:
 
 
...

	Alias name: 123
	Creation date: 30.08.2011
	Entry type: trustedCertEntry

	Owner: C=JP,O=Japanese Government,OU=ApplicationCA
	Issuer: C=JP,O=Japanese Government,OU=ApplicationCA
	Serial number: 31
	Valid from: Wed Dec 12 18:00:00 MSK 2007 until: Tue Dec
	12 19:00:00 MSK 2017

	...

 
Такий же сертифікат є і від уряду Китаю. Так що, перебуваючи в Японії або Китаї, ви можете стати жертвою атаки типу man in the middle . На щастя, в четвертих андроїдах вбудоване сховище можна відключити.
 
Як я вже говорив вище, механізм привілеїв в Android досить хитромудрий. Розробники спочатку виділили API-виклики, які можуть надавати певні ризики і розділили на групи: доступ до камери, bluetooth, геолокації, повідомленнями, дзвінками, мережі. Щоб скористатися цими API додаток повинен при установці в явному вигляді запросити до них доступ. Механізм гнучкий і зручний, але не позбавлений деяких проблем, з якими іноді стикаються розробники. Справа в тому, що механізм цей не дуже добре документований, буквально кілька рядків описують кожний дозвіл. І розробники дуже часто стикаються з тим, що створюване програма не працює через нестачу дозволів. Багато хто не розбираються, а просто запитують якомога більше дозволів. Все починає працювати, але при цьому програма має доступ до абсолютно непотрібним речам, що вкрай негативно впливає на безпеку. Компанія Google, розуміючи цю проблему, виділила грант стороннім дослідникам на більш докладний опис API.
 
 

Користувачі та Android

Отже, ми прийшли до висновку, що операційна система все-таки відносно захищена. У чому ж може бути проблема? Часто проблеми виникають з вини самих користувачів. Є безліч способів зламати захист системи самостійно, без втручання зловмисників. Перший спосіб — jailbreaking. На андроиде він робиться на подив легко. Часто можна просто в завантажувачі вибрати, що завантажувати замість звичайного ядра операційної системи. Це дозволяє повністю вбити практично всі захисні механізми. Часто користувачі використовують занадто прості паролі, які без праці зламуються зловмисниками. Іноді користувачі ставлять дивні додатки з недовірених джерел. В принципі, троянського коня можна роздобути навіть в Google Play, але при установці з сторонніх магазинів або з піратських сайтів ймовірність такого результату зростає в рази. Часто користувачі забувають відключати на пристрої режим налагодження, який дозволяє не тільки швидко встановити jailbreak, але й швидко витягнути всі дані, отримавши фізичний доступ до пристрою. Втім, в сучасних версіях Android вже менше проблем з налагоджувальний режимом.
 
 

Розробники та Android

На жаль, проблеми виникають не лише з вини користувачів. Причиною можуть стати і розробники. У першу чергу проблеми виникають, коли розробники не до кінця розуміють, як їх додаток функціонує на мобільній платформі. Дуже часто можна бачити таке обмежене світогляд, коли розробник уявляє собі деякий абстрактне пристрій, на якому у вакуумі працює його сферичне додаток, з яким взаємодіє тільки користувач. Це занадто однобока картина. Наприклад, вона не враховує, що до пристрою може отримати фізичний доступ зловмисник. Значна частина додатків взаємодіє з серверним бекенда, про безпеку якого багато хто забуває. Часто не береться до уваги, що додаток може взаємодіяти з іншими встановленими програмами, які можуть виявитися шкідливими. Та й з пристроєм додатки взаємодіють не безпосередньо, а через фреймворки, середовище виконання, бібліотеки, ОС. У кожному з цих компонентів можуть бути уразливості. І уразливості ці можуть бути дуже низькорівневими: в ядрі, в драйверах, в оболонках вендорів.
 
У додатках також можуть виникати проблеми. Багато розробники дозволяють своїм додаткам зберігати дані не тільки у своєму ізольованому ділянці файлової системи, але і в загальнодоступному сховище (наприклад, на SD-карті). Дозволяючи зберігати таким чином конфіденційні дані користувача, розробник створює серйозну уразливість. Ще одна потенційна приманка для зловмисників — передача даних по відкритих каналах, або через SSL, але без перевірки сертифікатів. Для мобільних пристроїв також актуальний практично весь набір вразливостей їх великих братів. Багато хто про це забувають і не забезпечують санітізацію користувача введення. Використовуючи для відображення інформації WebView , також можна отримати весь букет атак. Специфічна для андроїда проблема — передача чутливих даних в лог-файли. Користувачі часто не звертають увагу на запит читання системних лог-файлів з боку додатки. А розробники часто забувають в релізних версіях мінімізувати отладочную інформацію, що потрапляє в логи. Через це туди може записуватися дуже важлива інформація. Наприклад, токени, якими можуть скористатися зловмисники.
 
Робота програми в сендбоксе — не панацея проти атак. Працювати в повній ізоляції додаток не може, у нього повинні бути точки взаємодії, як з іншими додатками, так і з операційною системою. Межпроцессное взаємодія в андроиде досить гнучке. Наприклад, ваш додаток може містити в собі таку функціональність, як контент-провайдери, що дозволяє стороннім додаткам отримати доступ до даних. Існують також сервіси, активності та бродкаст ресивери, які можуть отримувати доступ до повідомлень, що циркулюють всередині операційної системи. Фактично, якщо ці компоненти не захищені привілеями, як це часто буває, до них може звернутися якийсь сторонній код. У підсумку деякий додаток може проводити дії, які йому доступні бути не повинні. Припустимо, ваш додаток має доступ до читання і відправки SMS. Якщо ви забудете обмежити доступ до контент-провайдерам, хто завгодно зможе прочитати повідомлення користувача, не володіючи необхідними привілеями.
 
 

Аналіз контент-провайдерів

Перейдемо до практичної частини. Контент-провайдери дозволяють отримати доступ до інформації через універсальний інтерфейс, це така абстракція курсора баз даних. В якості контент-провайдера доступна, наприклад, адресна книга. Дозволи на доступ до них можуть бути не встановлені ні на читання, ні на запис, що дозволяє зловмисникові переглянути або внести якусь критичну інформацію. Для виявлення таких вразливостей є кілька програмних засобів. Як приклади я хотів би згадати Mercury , розробку компанії MWR, і свою standalone-утиліту CPA . Якщо задатися метою написати такий додаток самостійно, то можна зрозуміти наступне. Так як багато речей реєструються при установці програми, дані про контент-провайдерів витягти дуже легко. Вони прописуються в маніфесті додатка, контент-провайдери реєструються, відповідно, інформація про них доступна через стандартний менеджер пакетів андроїда. Там містяться відомості як про шляху, по якому доступний контент-провайдер, так і про привілеї. Відповідно, я своєю утилітою ці дані витягаю і даю можливість вибрати будь-який з контент-провайдерів. Природно, інтерес представляють саме незахищені. Далі можна спробувати передати контент-провайдеру дані, або змусити його прочитати небудь файл. Результати можна отримати досить несподівані. Наприклад, на смартфонах Samsung Galaxy S є біометрична блокування екрану, яка знімається, коли користувач підносить камеру до свого обличчя. Ця програма ставить разом із собою контент-провайдер com.sec.provider.facekey.
 
 
 
Привілеїв на читання і запис у нього немає. Якщо спробувати до цього провайдеру звернутися, використовуючи запит
* from sqlite_master--
, результат буде досить несподіваним. Вірніше, він буде несподіваним для тих, хто думає, що SQL-ін'єкції бувають тільки у веб-додатках. Цей запит дозволяє ознайомитися з усією базою даних, дам дійсно є SQL-ін'єкція. І ми бачимо там забавну таблицю з назвою facefeature, у якої є поля «особливості особи» та «зображення обличчя». Можна звернутися до них безпосередньо і отримати закодовані дані. Таким чином, не маючи ніяких привілеїв, ми отримуємо доступ до біометричних даних користувача.
 
 Найближчий науково-технічний семінар в Яндексі відбудеться 10 червня. Він буде присвячений темі рекомендаційних систем і розподілених алгоритмів .
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.