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
Vamos ao Nuget instalar Plugin.BreachDetector em todos os nossos projetos :
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 :
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!