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/

Walmyr Carvalho

November 10, 2019
Tweet

More Decks by Walmyr Carvalho

Other Decks in Technology

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

    View full-size slide

  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

    View full-size slide

  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:

    View full-size slide

  4. 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.

    View full-size slide

  5. 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ó!

    View full-size slide

  6. 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!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. 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:

    View full-size slide

  11. 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).

    View full-size slide

  12. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. // 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 #> }

    View full-size slide

  16. // 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

    View full-size slide

  17. // 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)
    }

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  20. 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")

    View full-size slide

  21. 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()

    View full-size slide

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

    View full-size slide

  23. 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)

    View full-size slide

  24. 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

    View full-size slide

  25. E falando em jailbreak…
    Um disclaimer importante:

    View full-size slide

  26. 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.

    View full-size slide

  27. 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!

    View full-size slide

  28. 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.

    View full-size slide

  29. E qual é o tamanho desse buraco?

    View full-size slide

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

    View full-size slide

  31. 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. ⚠

    View full-size slide

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

    View full-size slide

  33. 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 :(

    View full-size slide

  34. 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.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  37. 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;

    View full-size slide

  38. 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.

    View full-size slide

  39. 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.

    View full-size slide

  40. 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.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  44. Portanto, resumindo…

    View full-size slide

  45. 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.

    View full-size slide

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

    View full-size slide

  47. 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

    View full-size slide

  48. 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.

    View full-size slide