Slide 1

Slide 1 text

“… An exploit that works against one iPhone is probably going to work against all iPhones (very broadly speaking). iPhones are a monoculture, once you pop one, you’ve popped them all.” Thaddeus E. Grugq, Security Researcher Via Twitter: bit.do/tweet-grugq

Slide 2

Slide 2 text

Indo além do Keychain: Boa práticas e técnicas modernas de segurança para aplicações iOS. Caio Mariano iOS Developer Walmyr Carvalho Mobile Technical Leader

Slide 3

Slide 3 text

Onboarding 100% digital. A idwall ajuda empresas a converter mais clientes, melhorar a experiência do usuário, reduzir fraudes e cumprir as exigências regulatórias. Nossas soluções de Background Check, OCR de documentos e Face Match garantem processos mais seguros e até 10 vezes mais rápidos. No mobile, temos duas frentes principais:

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

SDK Mobile Temos soluções de SDKs mobile para iOS e Android que facilitam a integração dos nossos serviços por parte dos clientes Uma das features do nosso SDK é o envio de documentos diversos, como CNH, RG e comprovante de residência, direto para a nossa base, com uma UX simples e ágil para os nossos clientes.

Slide 6

Slide 6 text

SDK Mobile Também temos no SDK um recurso de Face Liveness, onde clientes podem enviar informações de rosto, como confirmação de prova de vida. Dessa forma, é possível que clientes utilizem desse recurso para agilizar onboardings e aprovar usuários mais rapidamente, unindo todas as soluções da idwall em um lugar só!

Slide 7

Slide 7 text

MeuID O MeuID é uma solução de identidade digital voltada para empresas, que centraliza e valida de forma automática os documentos e dados pessoais de seus clientes! O objetivo é credenciar mais clientes de forma prática, segura, sem burocracias e atendendo compliances como KYC (Know Your Customer) e LGPD (Lei Geral de Proteção aos Dados) de forma simples!

Slide 8

Slide 8 text

Ou seja, a idwall tem um negócio que é 100% baseado em segurança e privacidade, de ponta a ponta.

Slide 9

Slide 9 text

E o que a Apple diz sobre segurança e privacidade no iOS? Vamos ver com mais detalhes?

Slide 10

Slide 10 text

iOS Security - Apple bit.do/ios-security-doc

Slide 11

Slide 11 text

Diagrama de Segurança do iOS Como podemos ver ao lado, grande parte do fluxo de segurança do sistema tem uma conexão forte com o hardware, o que aumenta a confiabilidade na segurança do OS. Existem diversos conceitos explicados no documento e como o sistema trabalha com todas essas tecnologias, mas vamos explorar dois pontos específicos hoje como exemplo:

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

FaceID e TouchID Curiosidade: Para o TouchID, a probabilidade de existirem digitais similares é de 1 em 50.000, para um único dedo registrado. Já para o FaceID, a possibilidade de uma pessoa aleatória desbloquear seu aparelho é 1 em 1.000.000 (para um único rosto registrado).

Slide 14

Slide 14 text

Secure Enclave Tanto os dados de impressão digital capturados pelo Touch ID quanto os dados de biometria facial capturados pelo Face ID são criptografados, armazenados em um dispositivo e protegidos com uma chave disponível a apenas para o Secure Enclave. Secure Enclave

Slide 15

Slide 15 text

E como o Keychain funciona na prática? A principal recomendação da empresa!

Slide 16

Slide 16 text

Accessing Keychain Items with Face ID or Touch ID - Apple bit.do/keychain-touchid-faceid-doc

Slide 17

Slide 17 text

// Criando um dicionário da query let key = <# a key #> let tag = "com.example.keys.mykey".data(using: .utf8)! let addquery: [String: Any] = [kSecClass as String: kSecClassKey, kSecAttrApplicationTag as String: tag, kSecValueRef as String: key] // Armazenando um item let status = SecItemAdd(addquery as CFDictionary, nil) guard status == errSecSuccess else { throw <# an error #> }

Slide 18

Slide 18 text

// Montando o dicionário da query let getquery: [String: Any] = [kSecClass as String: kSecClassKey, kSecAttrApplicationTag as String: tag, kSecAttrKeyType as String: kSecAttrKeyTypeRSA, kSecReturnRef as String: true] // Buscando seu item var item: CFTypeRef? let status = SecItemCopyMatching(query as CFDictionary, &item) guard status == errSecSuccess else { throw <# an error #> } let key = item as! SecKey

Slide 19

Slide 19 text

// Atualizando um item let status = SecItemUpdate(query as CFDictionary, attributes as CFDictionary) guard status != errSecItemNotFound else { throw KeychainError.noPassword } guard status == errSecSuccess else { throw KeychainError.unhandledError(status: status) } // Deletando um item let status = SecItemDelete(query as CFDictionary) guard status == errSecSuccess || status == errSecItemNotFound else { throw KeychainError.unhandledError(status: status) }

Slide 20

Slide 20 text

Esquisito, né? Geralmente todo esse código fica abstraído quando criamos um objeto do Keychain no Xcode (olar, KeychainItem)!

Slide 21

Slide 21 text

KeychainSwift - Cocoapods cocoapods.org/pods/KeychainSwift use_frameworks! target 'Your target name' pod 'KeychainSwift', '~> 18.0'

Slide 22

Slide 22 text

KeyChainSwift - Cocoapods cocoapods.org/pods/KeychainSwift import KeychainSwift // Strings let keychain = KeychainSwift() keychain.set("hello world", forKey: "my key") keychain.get("my key") // Booleans let keychain = KeychainSwift() keychain.set(true, forKey: "my key") keychain.getBool("my key")

Slide 23

Slide 23 text

KeyChainSwift - Cocoapods cocoapods.org/pods/KeychainSwift // Objects let keychain = KeychainSwift() keychain.set(dataObject, forKey: "my key") keychain.getData("my key") // Deleting items keychain.delete("my key") // Remove single key keychain.clear()

Slide 24

Slide 24 text

E além do Keychain, de quais outras formas podemos proteger nossas aplicações iOS? Algumas dicas comuns, porém importantes!

Slide 25

Slide 25 text

Detecção de screenshots Tecnicamente, você consegue saber quando um screenshot foi tirado, mas bloquear é mais “tricky”: NotificationCenter.default.addObserver( self, selector: #selector(screenshotTaken), name: UIApplication.userDidTakeScreenshotNotification, object: nil)

Slide 26

Slide 26 text

Outros cuidados importantes ⚠ • HTTPS + SSL Pinning • JWT, tokens expiráveis e renováveis • Cuidados na gravação de arquivos • Logs de debugging • Manipulação de textos ou dados sensíveis (como senhas/pincodes e informações pessoais) • E por último, porém não menos importante: Detecção de jailbreak

Slide 27

Slide 27 text

E falando em jailbreak… Um disclaimer importante:

Slide 28

Slide 28 text

O MINISTÉRIO DA NSBRAZIL ADVERTE: Tanto nós quanto a nossa empresa empregadora não incentivamos ninguém presente neste evento a se utilizar de técnicas de jailbreak ou exploração de aplicações iOS alheias com intenções de benefício próprio ou da empresa em que trabalha. Essa palestra foi pensada com fins educativos e é puramente voltada para o aprendizado e evolução coletiva das pessoas profissionais Apple presentes.

Slide 29

Slide 29 text

Hoje em dia a cultura do jailbreak, do ponto de vista de consumidor final, é menor se comparado aos tempos de ouro do jailbreaking, lá no começo!

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Mas, apesar de não tão popular como antes, o jailbreak ainda é bem comum e trás uma série de possibilidades, tanto pro uso ético quanto pro uso mal intencionado.

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

E qual é o tamanho desse buraco?

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

Radare2 radare.org • Ferramenta de engenharia reversa • Análise de binários • Exploiter de software • Suporte amplo para diversas plataformas

Slide 36

Slide 36 text

Frida frida.re • Injeção de scripts • Hooks de funções • Edição e save de novos recursos em tempo real É importante se levar em conta os aspectos legais antes de fazer esses experimentos. ⚠

Slide 37

Slide 37 text

Tô com medo! O que eu faço pra me prevenir de ataques via dispositivos jailbroken?

Slide 38

Slide 38 text

Ferramentas pagas para proteção de aplicações iOS • Arxan • Guardsquare (iXGuard, Dexguard, etc) • Features interessantes como code hardening, ofuscação de código sensível, proteções contra hooking, debugging e jailbreak. • Custo alto :(

Slide 39

Slide 39 text

Lembrando: mais importante do que fazer uso de ferramentas pagas é garantir que você está fazendo o uso de uma ou mais práticas mencionadas anteriormente.

Slide 40

Slide 40 text

Tá, mas o que um vazamento pode expor? Entendendo as consequências…

Slide 41

Slide 41 text

É importante entendermos quais são os impactos de um vazamento de dados para desenvolvedores, empresas e seus clientes.

Slide 42

Slide 42 text

Impacto de um vazamento de dados ⚠ Um vazamento de dados sensíveis pode acarretar em: • O vazamento de chaves sensíveis de APIs ou SDKs; • Informações particulares de usuários, grupos de usuários ou organizações, • Problemas legais e de integridade física, jurídica e social de usuários ou organizações diversas. • Problemas ligados a com LGPD/ GDPR;

Slide 43

Slide 43 text

LGPD, ou Lei Geral de Proteção aos Dados A Lei Geral de Proteção de Dados Pessoais, é a legislação brasileira que regula as atividades de tratamento de dados pessoais e que também altera os artigos 7º e 16 do Marco Civil da Internet. Em resumo: essa lei garante que o controle dos dados está na mão dos usuários. Na idwall temos bastante cuidado em estar sempre compliance com essa lei com os nossos produtos e clientes.

Slide 44

Slide 44 text

Vale lembrar que a comunidade de segurança é bem ativa no mobile e busca sempre se atualizar, pois é meio que uma corrida eterna de gato e rato.

Slide 45

Slide 45 text

Project Zero (Google) O Project Zero é um time de analistas de segurança do Google criado em 2014, que tem como objetivo de encontrar vulnerabilidades chamadas de “zero-day”, que costumam ser exploradas de forma maliciosa. Em agosto desse ano o Project Zero divulgou uma série de exploits para iOS, detalhados no blog do projeto.

Slide 46

Slide 46 text

Project Zero - In-the-wild iOS Exploit Chain bit.do/project-zero-ios-exploit

Slide 47

Slide 47 text

Project Zero - Implementing TeadDown bit.do/project-zero-teardown

Slide 48

Slide 48 text

Bug Reporting - Apple Developers developer.apple.com/bug-reporting

Slide 49

Slide 49 text

Portanto, resumindo…

Slide 50

Slide 50 text

Independente do que o futuro nos reserva, é importante que nós como profissionais iOS saibamos também como atacar os nossos próprios projetos, com o objetivo de aprender não só a nos defender melhor mas também a diagnosticar e tratar potenciais brechas de segurança de forma eficiente.

Slide 51

Slide 51 text

Muito obrigado! ❤✨ Esperamos que tenham gostado! Caio Mariano iOS Developer Walmyr Carvalho Mobile Technical Leader

Slide 52

Slide 52 text

Curtiu? Temos vagas! Saiba mais sobre as nossas vagas no link: idwall.gupy.io Também temos uma página interessante sobre a nossa cultura de tech em geral: tech.idwall.co

Slide 53

Slide 53 text

Um último recado: Precisamos contratar mais profissionais júniors e plenos! Não podemos buscar somente sêniors se não formamos esses profissionais pro mercado.