Back-End

24 set, 2020

O X do Xamarin Forms — Meu app esta seguro? — Parte 1

Publicidade

Segurança é um ponto muito importante e pouco abordado quando falamos em desenvolvimento de software. Por mais que seja um tema que deveria ser prioridade geralmente é tratado quando da m…Problema.

Em aplicativos eu diria que segurança é um ponto chave para se preocupar. Muitas pessoas podem ate dizer: “É realmente aquele Android la que pode instalar qualquer App de qualquer fonte.. preciso me preocupar “.

Certo mas o e o iOS? Ué os apps do iOS não tem que ser aprovados pela apple.. sandbox.. etc etc ? E se o dono fez jailbreak? … Ah é tem isso …

Muitos aplicativos (como os de banco) trafegam informações sensíveis , possuem compras internas e guardam diversos tipos de dados que você não gostaria que ninguém tivesse acesso…

É por esses motivos e outros que existem, que hoje vamos falar um pouco de como previnir que nossos Apps rodem em condições que podem ser consideradas inseguras e pra facilitar nossa vida o Nico Milcoff veio nos ajudar com o plugin BreachDetector !

Este plugin de fácil utilização consegue nos dizer se nosso app esta rodando em um celular Desbloqueado ( Root no Android / Jailbreak no iOS) , se o app foi instalado pela loja , se é um emulador.. etc etc etc. Com isso podemos inutilizar nosso APP evitando a perda ou uso de dados de forma indevida 🙂

Bora ver como funciona?

As Plataformas que o plugin suporte são :

  • iOS +10
  • Android API +21
  • UWP Build +10240

Instalando o Plugin

Image for post

Vamos ao Nuget instalar Plugin.BreachDetector em todos os nossos projetos :

Image for post

Agora no iOS precisamos adicionar algumas linhas no Info.plist (para verificar o jailbreak) :

<key>LSApplicationQueriesSchemes</key>
<array>
	<string>cydia</string>
	<string>undecimus</string>
	<string>sileo</string>
	<string>zbra</string>
</array>

Caso você queira utilizar a função para verificar o tipo de segurança/autenticação do iPhone que o app esta instalado e preciso adicionar também as seguintes configurações :

<key>NSFaceIDUsageDescription</key>
<string>Use a nice explanation here</string>

Pronto! Agora é só usar 😀

Utilizando o Plugin

Para exemplificar vamos criar uma tela simples com as funcionalidades :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Plugin.BreachDetector;

namespace XamarinFormsBreachDetector
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

            VerificarBrechasSeguranca();
        }

        private void VerificarBrechasSeguranca()
        {
            var isRootOrJailbreak = CrossBreachDetector.Current.IsRooted();
            var isVirtualDevice = CrossBreachDetector.Current.IsRunningOnVirtualDevice();
            var inDebug = CrossBreachDetector.Current.InDebugMode();
            var fromStore = CrossBreachDetector.Current.InstalledFromStore();
            var localAuthentication = CrossBreachDetector.Current.GetDeviceLocalSecurityType();

            var rootOrJailbreak = (Device.RuntimePlatform == Device.Android ? "Root" : "Jaibreak");
            if (isRootOrJailbreak.HasValue
                && isRootOrJailbreak.Value)
                lblRoot.Text = $"Este APP possui : {rootOrJailbreak}  ";
            else
                lblRoot.Text = $"Este APP  Não posusi : {rootOrJailbreak} ";

            var virtualDevice = (Device.RuntimePlatform == Device.Android ? "Emulador" : "Simulador");
            if (isVirtualDevice.HasValue
                && isVirtualDevice.Value)
                lblVirtual.Text = $"Este APP Esta Rodando no  : {virtualDevice}  ";
            else
                lblVirtual.Text = $"Este APP esta rodando em um celular ";

            if (inDebug.HasValue
               && inDebug.Value)
                lblDebug.Text = $"Este APP Esta Rodando em Debug  ";
            else
                lblDebug.Text = $"Este APP esta rodando em Release ";

            if (fromStore.HasValue
              && fromStore.Value)
                lblStore.Text = $"Este APP foi instalado da loja  ";
            else
                lblStore.Text = $"Este APP foi instalado de outra fonte ";

            switch(localAuthentication)
            {
                case DeviceSecurityLockScreenType.Biometric:
                    lblAutenticacao.Text = "Este Dispositivo possui Autenticação por Biometria";
                    break;
                case DeviceSecurityLockScreenType.Pass:
                    lblAutenticacao.Text = "Este Dispositivo possui Autenticação por Senha";
                    break;
                case DeviceSecurityLockScreenType.None:
                    lblAutenticacao.Text = "Este Dispositivo não possui Autenticação";
                    break;
                case DeviceSecurityLockScreenType.Unknown:
                    lblAutenticacao.Text = "Este Dispositivo possui Autenticação desconhecida";
                    break;

            }


        }
    }
}

E Rodar :

Image for post

Bem simples e uteis para garantirmos que nosso APP esta seguro não?

Existem mais dicas de segurança do Próprio Nico no repositório oficial.

E claro como vocês viram esta escrito Parte 1, pois ainda pretendo trazer mais coisas relacionadas ao tema :).

Caso queira ver um exemplo citado no artigo: Clique aqui.

Quer ver outros artigos sobre Xamarin ? Clique aqui.

Espero ter ajudado!

Aquele abraço!