Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Indo além do Keychain: boas práticas e técnicas modernas de segurança para aplicações iOS

Indo além do Keychain: boas práticas e técnicas modernas de segurança para aplicações iOS

This talk was held during NSBrazil Conference 2019, the biggest brazilian iOS conference, that happened on November 10th, in São Paulo, Brazil!

The talk was about going beyond Keychain when working with security on iOS. We've discussed about what a breach can cause to an app or a business, LGPD related content and how can you think as an attacker when you're trying to break your app.

The content is in pt-BR.
More info: https://nsbrazil.com/

B567f69eed037ed20536fc825305a38d?s=128

Walmyr Carvalho

November 10, 2019
Tweet

Transcript

  1. “… 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
  2. 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
  3. 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:
  4. None
  5. 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.
  6. 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ó!
  7. 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!
  8. Ou seja, a idwall tem um negócio que é 100%

    baseado em segurança e privacidade, de ponta a ponta.
  9. E o que a Apple diz sobre segurança e privacidade

    no iOS? Vamos ver com mais detalhes?
  10. iOS Security - Apple bit.do/ios-security-doc

  11. 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:
  12. None
  13. 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).
  14. 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
  15. E como o Keychain funciona na prática? A principal recomendação

    da empresa!
  16. Accessing Keychain Items with Face ID or Touch ID -

    Apple bit.do/keychain-touchid-faceid-doc
  17. // 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 #> }
  18. // 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
  19. // 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) }
  20. Esquisito, né? Geralmente todo esse código fica abstraído quando criamos

    um objeto do Keychain no Xcode (olar, KeychainItem)!
  21. KeychainSwift - Cocoapods cocoapods.org/pods/KeychainSwift use_frameworks! target 'Your target name' pod

    'KeychainSwift', '~> 18.0'
  22. 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")
  23. 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()
  24. E além do Keychain, de quais outras formas podemos proteger

    nossas aplicações iOS? Algumas dicas comuns, porém importantes!
  25. 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)
  26. 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
  27. E falando em jailbreak… Um disclaimer importante:

  28. 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.
  29. 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!
  30. None
  31. 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.
  32. None
  33. E qual é o tamanho desse buraco?

  34. None
  35. Radare2 radare.org • Ferramenta de engenharia reversa • Análise de

    binários • Exploiter de software • Suporte amplo para diversas plataformas
  36. 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. ⚠
  37. Tô com medo! O que eu faço pra me prevenir

    de ataques via dispositivos jailbroken?
  38. 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 :(
  39. 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.
  40. Tá, mas o que um vazamento pode expor? Entendendo as

    consequências…
  41. É importante entendermos quais são os impactos de um vazamento

    de dados para desenvolvedores, empresas e seus clientes.
  42. 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;
  43. 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.
  44. 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.
  45. 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.
  46. Project Zero - In-the-wild iOS Exploit Chain bit.do/project-zero-ios-exploit

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

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

  49. Portanto, resumindo…

  50. 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.
  51. Muito obrigado! ❤✨ Esperamos que tenham gostado! Caio Mariano iOS

    Developer Walmyr Carvalho Mobile Technical Leader
  52. 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
  53. 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.