SlideShare a Scribd company logo
1 of 48
Download to read offline
Ï%"å“2*à
❖ Защита данных на устройстве
❖ iOS Data Protection
❖ Keychain
❖ Защита данных в сети
❖ TLS
❖ ATS
gà÷åì (, %2 *%ã%) ƒà?,?à2ü
äà……/å?
Ïð,ë%›å…,ÿì …3›…% õðà…,2ü
äà……/å
iOS Data Protection (1)
❖ Различные классы защиты
❖ Шифрование файлов
❖ Keychain для хранения паролей и ключей
❖ Шифрование может быть “привязано” к
пасскоду
❖ Шифрование резервных копий
jëà““ ƒà?,2/ %Cðåäåëÿå2
ä%“23C…%“2ü ƒà?,?àåì/õ äà……/õ
jëà““ ƒà?,2/ %Cðåäåëÿå2
ä%“23C…%“2ü ƒà?,?àåì/õ äà……/õ
jëà““/ ƒà?,2/: Keychain
❖ kSecAttrAccessibleAlways[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly]
❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
jëà““/ ƒà?,2/: Keychain
❖ kSecAttrAccessibleAlways[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly]
❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
jëà““/ ƒà?,2/: Keychain
❖ kSecAttrAccessibleAlways[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly]
❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
jëà““/ ƒà?,2/: Keychain
❖ kSecAttrAccessibleAlways[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly]
❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly]
❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
jëà““/ ƒà?,2/: ôàLë/
❖ NSFileProtectionNone
❖ NSFileProtectionComplete
❖ NSFileProtectionCompleteUntilFirstUserAuthentication
❖ NSFileProtectionCompleteUnlessOpen
jëà““/ ƒà?,2/: ôàLë/
❖ NSFileProtectionNone
❖ NSFileProtectionComplete
❖ NSFileProtectionCompleteUntilFirstUserAuthentication
❖ NSFileProtectionCompleteUnlessOpen
jëà““/ ƒà?,2/: ôàLë/
❖ NSFileProtectionNone
❖ NSFileProtectionComplete
❖ NSFileProtectionCompleteUntilFirstUserAuthentication
❖ NSFileProtectionCompleteUnlessOpen
jëà““/ ƒà?,2/: ôàLë/
❖ NSFileProtectionNone
❖ NSFileProtectionComplete
❖ NSFileProtectionCompleteUntilFirstUserAuthentication
❖ NSFileProtectionCompleteUnlessOpen
jà* %Cðåäåë,2ü ä%“23C…%“2ü?
1.Проверить свойство:
if UIApplication.shared.isProtectedDataAvailable {
<#code#>
}
2.Реализовать делегаты:
class AppDelegate: UIApplicationDelegate {
func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication)
{
<#code#>
}
func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication)
{
<#code#>
}
}
jà* 3“2à…%",2ü *ëà““ ƒà?,2/?
jà* 3“2à…%",2ü *ëà““ ƒà?,2/?
// Create a new file with a given protection class
FileManager.default.createFile(atPath: path,
contents: data,
attributes: [FileAttributeKey.protectionKey.rawValue:
FileProtectionType.complete])
// Change protection class on an existing file
FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete],
ofItemAtPath: path)
// Write Data object to a file and set given protection class
data.write(to: url,
options: .completeFileProtection)
jà* 3“2à…%",2ü *ëà““ ƒà?,2/?
let attributes = [
kSecAttrAccessible: kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
// ...
] as NSDictionary
SecItemAdd(attributes as CFDictionary, nil)
iOS Data Protection (2)
❖ Secure Enclave
❖ Touch ID
❖ LocalAuthentication
❖ Keychain ACLs
Secure Enclave
❖ Встроенный защищенный со-процессор
❖ Отдельная ОС, secure boot
❖ A7+(iPhone 5s и новее)
❖ Отвечает за Touch ID, проверку пасскода,
шифрование данных, Keychain ACL
Touch ID " bàøåì
Cð,ë%›å…,,?
LocalAuthentication
Framework
Keychain Access
Control Lists
LocalAuthentication
let context = LAContext()
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
error: nil)
{
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
localizedReason: <# Reason #>) {
(success, error) in
if success {
<# User authentication successful #>
}
}
}
Keychain ACL
Задаёт условия при которых данные из Keychain будут
возвращены:
❖ kSecAccessControlUserPresence
❖ kSecAccessControlTouchIDAny
❖ kSecAccessControlTouchIDCurrentSet
❖ kSecAccessControlDevicePasscode
❖ kSecAccessControlOr, kSecAccessControlAnd
Keychain ACL
let acl = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
.touchIDCurrentSet,
nil)
let attributes = [
kSecAttrAccessControl: acl!,
// ...
] as NSDictionary
SecItemAdd(attributes as CFDictionary, nil)
Keychain ACL
Задает дополнительный секрет без которого получение
данных из Keychain невозможно:
❖ kSecAccessControlApplicationPassword
Keychain ACL
let acl = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
[.touchIDCurrentSet, .applicationPassword],
nil)
let context = LAContext()
context.setCredential("my-secret-password".data(using: .utf8),
type: .applicationPassword)
let attributes = [
kSecAttrAccessControl: acl!,
kSecUseAuthenticationContext: context
// ...
] as NSDictionary
SecItemAdd(attributes as CFDictionary, nil)
Ò,C,÷…/å %ø,K*,
❖ Хранение паролей/конфиденциальной информации
в NSUserDefaults/UserDefaults, SQLite (например
через CoreData), и т.п.
❖ Использование NSFileProtectionNone/
kSecAttrAccessibleAlways
❖ “Утечка” паролей/конфиденциальной информации
в логи
❖ Пароли/конфиденциальная информация на
скриншотах
Data Protection ƒà?,?àå2
äà……/å …à 3“2ð%L“2"å
Data Protection …å C%ì%›å2 å“ë,
äà……/å C%*,äàþ2 3“2ð%L“2"%
(K.*àC,“,…õð%…,ƒàö,ÿ,, 2.C.)
œr2å÷*,B äà……/õ
iTunes Backup iCloud
File Sharing Джейлбрейк
iTunes Backup
❖ <app>/Documents включается в бэкап
❖ <app>/Library/Caches и <app>/tmp не включаются в
бэкап
❖ NSURLIsExcludedFromBackupKey исключает файл из
бэкапа
❖ Из зашифрованного бэкапа можно извлечь записи
Keychain, кроме тех, для которых установлен класс
…ThisDeviceOnly
File Sharing
❖ Доступ к “песочнице” приложения
❖ Был включен по умолчанию до iOS 8.3
❖ Все еще включен по умолчанию в бета-версиях iOS
❖ В iOS 8.4+ включен только для приложений с
UIFileSharingEnabled
jà* ƒà?,2,2ü äà……/å?
❖ Data Protection не поможет защитить данные вне
устройства
❖ Используйте дополнительный уровень шифрования
❖ Например, SQLCipher
❖ Или SQLite Encryption Extension
❖ Ключ/пароль от БД храните в Keychain с
надежным классом защиты
Ïð,ë%›å…,ÿì …3›…%
Cåðåäà"à2ü äà……/å
Transport Layer Security
❖ TLS (для TCP) и DTLS (для UDP) являются
стандартами для защиты данных при передаче по
сети
❖ Проблема: (D)TLS зависит от сертификатов
qåð2,ô,*à2/
❖ iOS 10 содержит 172 доверенных сертификата
❖ https://support.apple.com/en-us/HT207177
❖ iOS “верит” всем сертификатам, подписанным
любым из этих сертификатов
Certificate Pinning
❖ Ограничивает список доверенных сертификатов для
данного хоста/сервиса
❖ “Сертификат сервера abc.com имеет отпечаток 01 23
45 …”
❖ “Сертификат сервера def.com выпущен Let's
Encrypt”
❖ Требует аккуратного обращения — можно невзначай
“сломать” клиентов
Certificate Pinning
❖ Легко допустить ошибки
❖ Реализация в AFNetworking, например, случайно
отключила валидацию сертификатов
❖ https://datatheorem.github.io/TrustKit/
Certificate Transparency
❖ Журналирует выпущенные сертификаты
❖ Не позволяет удалить сертификат из журнала
❖ Клиент может проверить есть ли сертификат сервера
в CT
❖ https://www.certificate-transparency.org/
App Transport Security
В теории:
❖ Блокирует небезопасные соединения
❖ Позволяет создавать исключения
На практике:
App Transport Security
❖ С Января 2017 исключения потребуют обоснования и
дополнительного рассмотрения при подаче в
AppStore
❖ NSAllowsArbitraryLoads
❖ NSAllowsArbitraryLoadsForMedia
❖ NSAllowsArbitraryLoadsInWebContent
❖ NSExceptionAllowsInsecureHTTPLoads
❖ NSExceptionMinimumTLSVersion
❖ SFSafariViewController не требует исключений
App Transport Security
❖ Поддержка ATS требует изменений на сервере
❖ Действительный сертификат ключа RSA (2048 бит и
более) или ECC (256 бит и более), SHA-256
❖ TLS 1.2
❖ ECDHE
❖ https://developer.apple.com/
ATS +CT
Jailbreak
Ïð,ë%›å…,ÿ , Jailbreak
❖ Не полагайтесь на jailbreak detection на 100%
❖ Принимайте все критичные решения вне
приложения
XcodeGhost
qCà“,K%!
andrey.belenko@gmail.com
@abelenko

More Related Content

Viewers also liked

Nicholas Gustilo "Clean Android: building great mobile apps"
Nicholas Gustilo "Clean Android: building great mobile apps"Nicholas Gustilo "Clean Android: building great mobile apps"
Nicholas Gustilo "Clean Android: building great mobile apps"IT Event
 
Lei arbitragem +alteraçoe scomentarios
Lei arbitragem +alteraçoe scomentariosLei arbitragem +alteraçoe scomentarios
Lei arbitragem +alteraçoe scomentariosJane Cesca
 
D. civil vol. 3 -2014 - Tartuce, Flavio
D. civil   vol. 3 -2014 - Tartuce, FlavioD. civil   vol. 3 -2014 - Tartuce, Flavio
D. civil vol. 3 -2014 - Tartuce, FlavioJane Cesca
 
DeborahBuck_Portfolio
DeborahBuck_PortfolioDeborahBuck_Portfolio
DeborahBuck_PortfolioDeborah Buck
 
Como explicar o Bloco K e o eSocial para empresários
Como explicar o Bloco K e o eSocial para empresáriosComo explicar o Bloco K e o eSocial para empresários
Como explicar o Bloco K e o eSocial para empresáriosRoberto Dias Duarte
 
Promocion balonmano ceip_san_tesifon_octubre_2016
Promocion balonmano ceip_san_tesifon_octubre_2016Promocion balonmano ceip_san_tesifon_octubre_2016
Promocion balonmano ceip_san_tesifon_octubre_2016santesifon
 
Chapitre projection pour tronc commun bac international marocain
Chapitre projection pour tronc commun bac international marocainChapitre projection pour tronc commun bac international marocain
Chapitre projection pour tronc commun bac international marocainAHMED ENNAJI
 
Audit & Corporate Governance - Professional Scepticism
Audit & Corporate Governance - Professional Scepticism Audit & Corporate Governance - Professional Scepticism
Audit & Corporate Governance - Professional Scepticism David Kyson
 
Ahora si que no tengo dudas. los reyes magos existen
Ahora si que no tengo dudas. los reyes magos existenAhora si que no tengo dudas. los reyes magos existen
Ahora si que no tengo dudas. los reyes magos existenasunzapata3
 

Viewers also liked (17)

Nicholas Gustilo "Clean Android: building great mobile apps"
Nicholas Gustilo "Clean Android: building great mobile apps"Nicholas Gustilo "Clean Android: building great mobile apps"
Nicholas Gustilo "Clean Android: building great mobile apps"
 
140210111099
140210111099140210111099
140210111099
 
2.1 principios y aspectos básicos del aicle -clil
2.1 principios y aspectos básicos del aicle -clil2.1 principios y aspectos básicos del aicle -clil
2.1 principios y aspectos básicos del aicle -clil
 
Lei arbitragem +alteraçoe scomentarios
Lei arbitragem +alteraçoe scomentariosLei arbitragem +alteraçoe scomentarios
Lei arbitragem +alteraçoe scomentarios
 
3 diseño de actividades para el aula clil
3 diseño de actividades para el aula clil3 diseño de actividades para el aula clil
3 diseño de actividades para el aula clil
 
D. civil vol. 3 -2014 - Tartuce, Flavio
D. civil   vol. 3 -2014 - Tartuce, FlavioD. civil   vol. 3 -2014 - Tartuce, Flavio
D. civil vol. 3 -2014 - Tartuce, Flavio
 
DeborahBuck_Portfolio
DeborahBuck_PortfolioDeborahBuck_Portfolio
DeborahBuck_Portfolio
 
Petcomposteira
PetcomposteiraPetcomposteira
Petcomposteira
 
2 principios y aspectos básicos del aicle -clil
2 principios y aspectos básicos del aicle -clil2 principios y aspectos básicos del aicle -clil
2 principios y aspectos básicos del aicle -clil
 
Como explicar o Bloco K e o eSocial para empresários
Como explicar o Bloco K e o eSocial para empresáriosComo explicar o Bloco K e o eSocial para empresários
Como explicar o Bloco K e o eSocial para empresários
 
Impeachment Brasil 2016
Impeachment Brasil 2016Impeachment Brasil 2016
Impeachment Brasil 2016
 
Sal reduzaoconsumo
Sal reduzaoconsumoSal reduzaoconsumo
Sal reduzaoconsumo
 
Promocion balonmano ceip_san_tesifon_octubre_2016
Promocion balonmano ceip_san_tesifon_octubre_2016Promocion balonmano ceip_san_tesifon_octubre_2016
Promocion balonmano ceip_san_tesifon_octubre_2016
 
Photoshoot
PhotoshootPhotoshoot
Photoshoot
 
Chapitre projection pour tronc commun bac international marocain
Chapitre projection pour tronc commun bac international marocainChapitre projection pour tronc commun bac international marocain
Chapitre projection pour tronc commun bac international marocain
 
Audit & Corporate Governance - Professional Scepticism
Audit & Corporate Governance - Professional Scepticism Audit & Corporate Governance - Professional Scepticism
Audit & Corporate Governance - Professional Scepticism
 
Ahora si que no tengo dudas. los reyes magos existen
Ahora si que no tengo dudas. los reyes magos existenAhora si que no tengo dudas. los reyes magos existen
Ahora si que no tengo dudas. los reyes magos existen
 

Similar to Андрей Беленко "Безопасность мобильных приложений "

Андрей Беленко
Андрей БеленкоАндрей Беленко
Андрей БеленкоCodeFest
 
Dv w2k-sec-concepts
Dv w2k-sec-conceptsDv w2k-sec-concepts
Dv w2k-sec-conceptstrenders
 
Banking Security Misunderstanding
Banking Security MisunderstandingBanking Security Misunderstanding
Banking Security MisunderstandingAleksey Lukatskiy
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Решения ООО "Автор" - надежность и конфиденциальность
Решения ООО "Автор" - надежность и конфиденциальностьРешения ООО "Автор" - надежность и конфиденциальность
Решения ООО "Автор" - надежность и конфиденциальностьNick Turunov
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложенияMaxim Krentovskiy
 
Евгений Кутя - Информационная безопасность
Евгений Кутя - Информационная безопасностьЕвгений Кутя - Информационная безопасность
Евгений Кутя - Информационная безопасностьGAiN@ESD
 
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Ontico
 
Сеть как сенсор и средство контроля
Сеть как сенсор и средство контроляСеть как сенсор и средство контроля
Сеть как сенсор и средство контроляCisco Russia
 
Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)Cisco Russia
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)e-Legion
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?phpdevby
 
Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...
Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...
Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...Nick Turunov
 
Web весна 2012 лекция 11
Web весна 2012 лекция 11Web весна 2012 лекция 11
Web весна 2012 лекция 11Technopark
 
WAF наше все?!
WAF наше все?!WAF наше все?!
WAF наше все?!Dmitry Evteev
 
Защита мобильных пользователей
Защита мобильных пользователейЗащита мобильных пользователей
Защита мобильных пользователейCisco Russia
 
разработка безопасного кода
разработка безопасного кодаразработка безопасного кода
разработка безопасного кодаAndrey Somsikov
 

Similar to Андрей Беленко "Безопасность мобильных приложений " (20)

Андрей Беленко
Андрей БеленкоАндрей Беленко
Андрей Беленко
 
Dv w2k-sec-concepts
Dv w2k-sec-conceptsDv w2k-sec-concepts
Dv w2k-sec-concepts
 
Banking Security Misunderstanding
Banking Security MisunderstandingBanking Security Misunderstanding
Banking Security Misunderstanding
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Решения ООО "Автор" - надежность и конфиденциальность
Решения ООО "Автор" - надежность и конфиденциальностьРешения ООО "Автор" - надежность и конфиденциальность
Решения ООО "Автор" - надежность и конфиденциальность
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложения
 
Евгений Кутя - Информационная безопасность
Евгений Кутя - Информационная безопасностьЕвгений Кутя - Информационная безопасность
Евгений Кутя - Информационная безопасность
 
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
 
Сеть как сенсор и средство контроля
Сеть как сенсор и средство контроляСеть как сенсор и средство контроля
Сеть как сенсор и средство контроля
 
Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
 
Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...
Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...
Средства строгой аутентификации в новой парадигме: от защиты объекта - к защи...
 
Web весна 2012 лекция 11
Web весна 2012 лекция 11Web весна 2012 лекция 11
Web весна 2012 лекция 11
 
Safenet etoken 5100
Safenet etoken 5100Safenet etoken 5100
Safenet etoken 5100
 
WAF наше все?!
WAF наше все?!WAF наше все?!
WAF наше все?!
 
Защита мобильных пользователей
Защита мобильных пользователейЗащита мобильных пользователей
Защита мобильных пользователей
 
SafeNet etoken 5200
SafeNet etoken 5200SafeNet etoken 5200
SafeNet etoken 5200
 
разработка безопасного кода
разработка безопасного кодаразработка безопасного кода
разработка безопасного кода
 
Dekart logon ru
Dekart logon ruDekart logon ru
Dekart logon ru
 

More from IT Event

Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...IT Event
 
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"IT Event
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...IT Event
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "IT Event
 
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"IT Event
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"IT Event
 
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"IT Event
 
Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"IT Event
 
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"IT Event
 
Aleksey Bogachuk - "Offline Second"
Aleksey Bogachuk - "Offline Second"Aleksey Bogachuk - "Offline Second"
Aleksey Bogachuk - "Offline Second"IT Event
 
James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"IT Event
 
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...IT Event
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"IT Event
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"IT Event
 
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"IT Event
 
Наш ответ Uber’у
Наш ответ Uber’уНаш ответ Uber’у
Наш ответ Uber’уIT Event
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
 
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Leonid Vasilyev  "Building, deploying and running production code at Dropbox"Leonid Vasilyev  "Building, deploying and running production code at Dropbox"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"IT Event
 
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...IT Event
 
Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"IT Event
 

More from IT Event (20)

Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
 
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
 
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
 
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
 
Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"Vladimir Grinenko - "Dependencies in component web done right"
Vladimir Grinenko - "Dependencies in component web done right"
 
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"
 
Aleksey Bogachuk - "Offline Second"
Aleksey Bogachuk - "Offline Second"Aleksey Bogachuk - "Offline Second"
Aleksey Bogachuk - "Offline Second"
 
James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"James Allardice - "Building a better login with the credential management API"
James Allardice - "Building a better login with the credential management API"
 
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"
 
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
 
Наш ответ Uber’у
Наш ответ Uber’уНаш ответ Uber’у
Наш ответ Uber’у
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
 
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Leonid Vasilyev  "Building, deploying and running production code at Dropbox"Leonid Vasilyev  "Building, deploying and running production code at Dropbox"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
 
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
 
Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"Mete Atamel "Resilient microservices with kubernetes"
Mete Atamel "Resilient microservices with kubernetes"
 

Андрей Беленко "Безопасность мобильных приложений "

  • 1.
  • 2. Ï%"å“2*à ❖ Защита данных на устройстве ❖ iOS Data Protection ❖ Keychain ❖ Защита данных в сети ❖ TLS ❖ ATS
  • 3. gà÷åì (, %2 *%ã%) ƒà?,?à2ü äà……/å?
  • 5. iOS Data Protection (1) ❖ Различные классы защиты ❖ Шифрование файлов ❖ Keychain для хранения паролей и ключей ❖ Шифрование может быть “привязано” к пасскоду ❖ Шифрование резервных копий
  • 8. jëà““/ ƒà?,2/: Keychain ❖ kSecAttrAccessibleAlways[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly] ❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
  • 9. jëà““/ ƒà?,2/: Keychain ❖ kSecAttrAccessibleAlways[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly] ❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
  • 10. jëà““/ ƒà?,2/: Keychain ❖ kSecAttrAccessibleAlways[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly] ❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
  • 11. jëà““/ ƒà?,2/: Keychain ❖ kSecAttrAccessibleAlways[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenUnlocked[ThisDeviceOnly] ❖ kSecAttrAccessibleAfterFirstUnlock[ThisDeviceOnly] ❖ kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
  • 12. jëà““/ ƒà?,2/: ôàLë/ ❖ NSFileProtectionNone ❖ NSFileProtectionComplete ❖ NSFileProtectionCompleteUntilFirstUserAuthentication ❖ NSFileProtectionCompleteUnlessOpen
  • 13. jëà““/ ƒà?,2/: ôàLë/ ❖ NSFileProtectionNone ❖ NSFileProtectionComplete ❖ NSFileProtectionCompleteUntilFirstUserAuthentication ❖ NSFileProtectionCompleteUnlessOpen
  • 14. jëà““/ ƒà?,2/: ôàLë/ ❖ NSFileProtectionNone ❖ NSFileProtectionComplete ❖ NSFileProtectionCompleteUntilFirstUserAuthentication ❖ NSFileProtectionCompleteUnlessOpen
  • 15. jëà““/ ƒà?,2/: ôàLë/ ❖ NSFileProtectionNone ❖ NSFileProtectionComplete ❖ NSFileProtectionCompleteUntilFirstUserAuthentication ❖ NSFileProtectionCompleteUnlessOpen
  • 16. jà* %Cðåäåë,2ü ä%“23C…%“2ü? 1.Проверить свойство: if UIApplication.shared.isProtectedDataAvailable { <#code#> } 2.Реализовать делегаты: class AppDelegate: UIApplicationDelegate { func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication) { <#code#> } func applicationProtectedDataWillBecomeUnavailable(_ application: UIApplication) { <#code#> } }
  • 18. jà* 3“2à…%",2ü *ëà““ ƒà?,2/? // Create a new file with a given protection class FileManager.default.createFile(atPath: path, contents: data, attributes: [FileAttributeKey.protectionKey.rawValue: FileProtectionType.complete]) // Change protection class on an existing file FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: path) // Write Data object to a file and set given protection class data.write(to: url, options: .completeFileProtection)
  • 19. jà* 3“2à…%",2ü *ëà““ ƒà?,2/? let attributes = [ kSecAttrAccessible: kSecAttrAccessibleWhenUnlockedThisDeviceOnly, // ... ] as NSDictionary SecItemAdd(attributes as CFDictionary, nil)
  • 20. iOS Data Protection (2) ❖ Secure Enclave ❖ Touch ID ❖ LocalAuthentication ❖ Keychain ACLs
  • 21. Secure Enclave ❖ Встроенный защищенный со-процессор ❖ Отдельная ОС, secure boot ❖ A7+(iPhone 5s и новее) ❖ Отвечает за Touch ID, проверку пасскода, шифрование данных, Keychain ACL
  • 22. Touch ID " bàøåì Cð,ë%›å…,,? LocalAuthentication Framework Keychain Access Control Lists
  • 23. LocalAuthentication let context = LAContext() if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) { context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: <# Reason #>) { (success, error) in if success { <# User authentication successful #> } } }
  • 24. Keychain ACL Задаёт условия при которых данные из Keychain будут возвращены: ❖ kSecAccessControlUserPresence ❖ kSecAccessControlTouchIDAny ❖ kSecAccessControlTouchIDCurrentSet ❖ kSecAccessControlDevicePasscode ❖ kSecAccessControlOr, kSecAccessControlAnd
  • 25. Keychain ACL let acl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, .touchIDCurrentSet, nil) let attributes = [ kSecAttrAccessControl: acl!, // ... ] as NSDictionary SecItemAdd(attributes as CFDictionary, nil)
  • 26. Keychain ACL Задает дополнительный секрет без которого получение данных из Keychain невозможно: ❖ kSecAccessControlApplicationPassword
  • 27. Keychain ACL let acl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, [.touchIDCurrentSet, .applicationPassword], nil) let context = LAContext() context.setCredential("my-secret-password".data(using: .utf8), type: .applicationPassword) let attributes = [ kSecAttrAccessControl: acl!, kSecUseAuthenticationContext: context // ... ] as NSDictionary SecItemAdd(attributes as CFDictionary, nil)
  • 28. Ò,C,÷…/å %ø,K*, ❖ Хранение паролей/конфиденциальной информации в NSUserDefaults/UserDefaults, SQLite (например через CoreData), и т.п. ❖ Использование NSFileProtectionNone/ kSecAttrAccessibleAlways ❖ “Утечка” паролей/конфиденциальной информации в логи ❖ Пароли/конфиденциальная информация на скриншотах
  • 30. Data Protection …å C%ì%›å2 å“ë, äà……/å C%*,äàþ2 3“2ð%L“2"% (K.*àC,“,…õð%…,ƒàö,ÿ,, 2.C.)
  • 31. œr2å÷*,B äà……/õ iTunes Backup iCloud File Sharing Джейлбрейк
  • 32. iTunes Backup ❖ <app>/Documents включается в бэкап ❖ <app>/Library/Caches и <app>/tmp не включаются в бэкап ❖ NSURLIsExcludedFromBackupKey исключает файл из бэкапа ❖ Из зашифрованного бэкапа можно извлечь записи Keychain, кроме тех, для которых установлен класс …ThisDeviceOnly
  • 33. File Sharing ❖ Доступ к “песочнице” приложения ❖ Был включен по умолчанию до iOS 8.3 ❖ Все еще включен по умолчанию в бета-версиях iOS ❖ В iOS 8.4+ включен только для приложений с UIFileSharingEnabled
  • 34. jà* ƒà?,2,2ü äà……/å? ❖ Data Protection не поможет защитить данные вне устройства ❖ Используйте дополнительный уровень шифрования ❖ Например, SQLCipher ❖ Или SQLite Encryption Extension ❖ Ключ/пароль от БД храните в Keychain с надежным классом защиты
  • 36. Transport Layer Security ❖ TLS (для TCP) и DTLS (для UDP) являются стандартами для защиты данных при передаче по сети ❖ Проблема: (D)TLS зависит от сертификатов
  • 37. qåð2,ô,*à2/ ❖ iOS 10 содержит 172 доверенных сертификата ❖ https://support.apple.com/en-us/HT207177 ❖ iOS “верит” всем сертификатам, подписанным любым из этих сертификатов
  • 38. Certificate Pinning ❖ Ограничивает список доверенных сертификатов для данного хоста/сервиса ❖ “Сертификат сервера abc.com имеет отпечаток 01 23 45 …” ❖ “Сертификат сервера def.com выпущен Let's Encrypt” ❖ Требует аккуратного обращения — можно невзначай “сломать” клиентов
  • 39. Certificate Pinning ❖ Легко допустить ошибки ❖ Реализация в AFNetworking, например, случайно отключила валидацию сертификатов ❖ https://datatheorem.github.io/TrustKit/
  • 40. Certificate Transparency ❖ Журналирует выпущенные сертификаты ❖ Не позволяет удалить сертификат из журнала ❖ Клиент может проверить есть ли сертификат сервера в CT ❖ https://www.certificate-transparency.org/
  • 41. App Transport Security В теории: ❖ Блокирует небезопасные соединения ❖ Позволяет создавать исключения На практике:
  • 42. App Transport Security ❖ С Января 2017 исключения потребуют обоснования и дополнительного рассмотрения при подаче в AppStore ❖ NSAllowsArbitraryLoads ❖ NSAllowsArbitraryLoadsForMedia ❖ NSAllowsArbitraryLoadsInWebContent ❖ NSExceptionAllowsInsecureHTTPLoads ❖ NSExceptionMinimumTLSVersion ❖ SFSafariViewController не требует исключений
  • 43. App Transport Security ❖ Поддержка ATS требует изменений на сервере ❖ Действительный сертификат ключа RSA (2048 бит и более) или ECC (256 бит и более), SHA-256 ❖ TLS 1.2 ❖ ECDHE ❖ https://developer.apple.com/
  • 46. Ïð,ë%›å…,ÿ , Jailbreak ❖ Не полагайтесь на jailbreak detection на 100% ❖ Принимайте все критичные решения вне приложения