Introdução e prática do mecanismo de segurança Android

Introdução e prática do mecanismo de segurança Android

Noções básicas da estrutura Android


A imagem acima é o conhecido diagrama de arquitetura do sistema Android, a estrutura em camadas conduz ao gerenciamento hierárquico de permissões e fornece uma certa garantia de segurança do sistema.
O sistema Android adota uma arquitetura em camadas, que consiste na camada do kernel Linux, camada HAL, camada Native Lib e Runtime lib, camada JNI, camada de estrutura e camada de aplicativo da camada inferior para a superior.
Os componentes do aplicativo Android são os componentes básicos dos aplicativos Android. Os tipos de componentes incluem atividade, serviço, receptor de transmissão, provedor de conteúdo, etc.
O kernel Android é essencialmente uma versão aprimorada do kernel LInux, gerenciamento de pouca memória LMK (Low Memory Killer), memória compartilhada anônima (Ashmem), mecanismo de comunicação Binder, etc. Essas melhorias do kernel permitem que o Android melhore ainda mais a segurança do gerenciamento de memória, comunicação de processos e outros aspectos, ao mesmo tempo que herda o mecanismo de segurança do kernel LInux.


A imagem acima é o fluxograma de inicialização do sistema Android. A descrição específica é a seguinte:
O sistema Android é executado no kernel Linux. O processo init é o primeiro processo iniciado pelo espaço do usuário. Suas principais responsabilidades são desembolsar a chave do sistema entradas (Daemons), servicemanager, zigoto, etc.; Fornece atributos do sistema de gerenciamento de serviços de atributos, etc.
Zygote é criado pelo processo init de acordo com os itens de configuração do arquivo init.rc.Zygote é um processo de máquina virtual e uma incubadora de máquina virtual. Responsável pela inicialização da máquina virtual, carregamento e inicialização de bibliotecas predefinidas, etc. Sempre que o sistema solicita a execução de um aplicativo Android, o Zygote cria um processo para executar o aplicativo.
SystemSever é o primeiro subprocesso do Zygote, é incubado pelo processo Zygote e, como núcleo da estrutura Android, é o principal responsável por inicializar o sistema Android e iniciar outros serviços para execução no espaço do processo.

Mecanismo de segurança Android


Atualmente, os dispositivos terminais inteligentes do sistema Android representam a maioria dos dispositivos terminais inteligentes do mundo, e há cada vez mais problemas de segurança.As questões de segurança são uma questão importante no desenvolvimento do Android.
Do ponto de vista da arquitetura técnica, o modelo de segurança do Android é baseado na segurança robusta do kernel do sistema operacional Linux, que é melhorada através do mecanismo de sandbox do processo, gerenciamento de memória exclusivo, mecanismo de comunicação de processo seguro e eficiente, mecanismo de assinatura de aplicativo, mecanismo de gerenciamento de permissão de aplicativo , etc. Segurança do sistema.

O mecanismo de segurança do sistema Android inclui principalmente os seguintes aspectos:

  1. Mecanismos de segurança de código.
  2. Mecanismo de sandbox de processo.
  3. Aplicar mecanismo de permissão.
  4. Aplicar mecanismo de assinatura.
  5. Mecanismo de controle de acesso a arquivos.
  6. Outros mecanismos de segurança.

mecanismo de segurança de código

Java é diferente de C/C++. Java é uma linguagem interpretada e há o risco de o código ser descompilado. O Android introduziu a tecnologia de ofuscação de código. O ofuscador padrão é o proguard. O Proguard também pode ser usado para compactar e otimizar bytecode java e excluir inúteis. classes. Campos, métodos, propriedades, anotações, etc.
Método de configuração:
Defina LOCAL_PROGUARD_FLAG_FILES em Android.mk:=
proguard.flags
include $(BUILD_PACKAGE)
Princípio
: Não confunda métodos nativos, métodos nativos e modelos relacionados à API do SDK, não confunda outras classes e métodos que não precisam ser confundidos.
sintaxe ofuscada

-keep class com.android.launcher3.CellLayout {
    
    
  public float getBackgroundAlpha();
  public void setBackgroundAlpha(float);
}
-keep class com.android.launcher3.DragLayer$LayoutParams {
    
    
  public void setWidth(int);
  public int getWidth();
  public void setHeight(int);
  public int getHeight();
  public void setX(int);
  public int getX();
  public void setY(int);
  public int getY();
}

O arquivo de classe obtido após descompilar o código após ofuscação

Mecanismo de isolamento de sandbox de processo

O Android aplica o mecanismo de isolamento multiusuário do Linux ao isolamento de aplicativos. Uma identificação de usuário (UID) identifica um determinado usuário e diferentes permissões de aplicativo permitem ou limitam o acesso do aplicativo aos recursos do dispositivo.
Configuração de permissões de aplicativos
ID de usuário compartilhado significa compartilhar um processo.
Os certificados do sistema transportados pela árvore de código-fonte do Android incluem "mídia", "plataforma", "compartilhado", "chave de teste" etc., entre os quais o certificado de "mídia" é usado em cenários de multimídia e download; O certificado "plataforma" é usado no cenário do sistema; o certificado "compartilhado" é usado nos cenários de inicialização e lista telefônica; o certificado "testkey" é usado no cenário de desenvolvimento, e esses certificados são localizado no diretório; os atributos "sharedUserId" atualmente suportados incluem " build/target/product/securityandroid.uid.system", "com.android.uid.test", "android.uid.calendar", "android.media", "com.android.framework .externalsharedpermstestapp", "android.uid.shared", "android .uid.phone" etc. Os comumente usados ​​​​incluem "android.uid.system", "android.media", "android.uid.shared", etc.

Mecanismo de permissão de aplicativo

As permissões são usadas principalmente para adicionar restrições às operações de aplicativos, evitar que aplicativos maliciosos executem operações ilegais e vazem dados confidenciais para usuários e controlem dispositivos ilegalmente e evitem cobranças maliciosas.
Os níveis de permissão são os seguintes: permissão normal, permissão perigosa, permissão subscriptionOrSystem e permissão de assinatura.
Local de definição de permissão da camada de estrutura

frameworks/base/core/res/AndroidManifest.xml


<!-- Allows app to write to internal media storage -->
    <permission android:name="android.permission.WRITE_MEDIA_STORAGE"
        android:permissionGroup="android.permission-group.STORAGE"
        android:label="@string/permlab_mediaStorageWrite"
        android:description="@string/permdesc_mediaStorageWrite"
        android:protectionLevel="signature|system" />

Definir permissões de aplicativos

<uses-permission android:name="android.permission.BLUETOOTH" /> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

Verificação de permissão
O Android oferece vários métodos que podem ser usados ​​para verificar se o chamador possui as permissões correspondentes.
Se o chamador tiver as permissões correspondentes, o valor de retorno da verificação de permissão será PackageManager. PERMISSION_GRANTEDretornado PackageManager.PERMISSION_DENIED.

Código de amostra

if (permission != null) {
    
    
    if (mContext.checkCallingOrSelfPermission(permission)
            != PackageManager.PERMISSION_GRANTED) {
    
    
        return WindowManagerGlobal.ADD_PERMISSION_DENIED;
    }
}

Segurança do banco de dados

O SQLite usado pelo Android atualmente usa texto simples para armazenar dados; a segurança envolve criptografia, leitura e escrita, pesquisa, etc.
Configurações de permissãoandroid:permission android:readPermission android:writePermission

<provider android:name="ContactsProvider2" 
            android:authorities="contacts;com.android.contacts" 
            android:label="@string/provider_label" 
            android:multiprocess="false" 
            android:exported="true" 
            android:readPermission="android.permission.READ_CONTACTS" 
            android:writePermission="android.permission.WRITE_CONTACTS"> 
            <path-permission  数据库安全--搜索 
                    android:pathPrefix="/search_suggest_query" 
                    android:readPermission="android.permission.GLOBAL_SEARCH" /> 
            <path-permission 
                    android:pathPrefix="/search_suggest_shortcut" 
                    android:readPermission="android.permission.GLOBAL_SEARCH" /> 
            <path-permission 
                    android:pathPattern="/contacts/.*/photo" 
                    android:readPermission="android.permission.GLOBAL_SEARCH" /> 
            <grant-uri-permission android:pathPattern=".*" /> 
 </provider> 

Mecanismo de assinatura de aplicativo

O mecanismo de assinatura do Android é, na verdade, um mecanismo de verificação da integridade do pacote APK e da exclusividade da organização editora.
Somente aplicativos com o mesmo nome de pacote e o mesmo certificado digital são considerados o mesmo aplicativo;
o maior uso de certificados digitais é em atualizações de aplicativos e configuração de permissões para comunicação entre aplicativos;

Mecanismo de controle de acesso a arquivos

O Android aplica o ACL(Access Control List)mecanismo de permissão do Linux no gerenciamento de permissões.
No nível da partição
, quando o sistema está em execução, a camada mais externa de proteção de segurança é fornecida pelo sistema Linux. A partição onde system.img está localizado é somente leitura e os usuários não têm permissão para gravar, enquanto a partição onde os dados estão localizados. img está localizado é legível e gravável. Usado para armazenar dados do usuário.
As permissões de usuário para uma partição init.rcsão definidas em .
Arquivos individuais
O controle de direitos de acesso a arquivos individuais é dividido em grupos, usuários e permissões.
As permissões são divididas em legíveis, graváveis ​​e executáveis.
Comando: chown\chgrp\chmod.

Outros mecanismos de segurança


Algoritmo de criptografia de segurança de rede
(dados confidenciais) DES (simétrico), 3DES (simétrico), RSA (assimétrico), MD5, RC2/RC4 (simétrico), IDEA, AES, BLOWFISH e outros
serviços Web (camada HTTP)
três métodos WS-Segurança , SSL, assinaturas digitais. Atualmente o ksoap não suporta
a camada WS-Security TCP
SSL e
a camada de enlace de dados TSL
WAPI

SEAndroid

SE Android(Security-Enhanced Android)É uma combinação de Android e SE Linux. É um conjunto de aprimoramento de segurança para sistemas operacionais Android lançado pela NSA dos EUA em 2012 para oferecer suporte ao SE Linux usado na plataforma Android. Controle de acesso discricionário
DAC e MAC Um processo teoricamente tem as mesmas permissões que o usuário que o executa. Por exemplo, se você iniciar o Navegador como usuário root, o Navegador terá as permissões do usuário root e poderá fazer qualquer coisa no sistema Linux.
DAC(Discretionary Access Control)

MAC(Mandatory Access Control)O controle de acesso obrigatório
significa que qualquer processo que queira fazer qualquer coisa no sistema SELinux deve primeiro receber permissões no arquivo de configuração da política de segurança. Quaisquer permissões que não apareçam no arquivo de configuração da política de segurança, o processo não terá as permissões.

Nota: Sob o controle de acesso MAC, os privilégios de root não podem ler ou gravar em nenhum arquivo; qualquer processo que acesse recursos específicos precisa seguir certas políticas de controle.

Contexto do arquivo após ativar o selinux
Contexto do processo após abrir o selinx

ferramenta de análise

Logcat da ferramenta de depuração
logcat 、adb 、 dumpsys

logcat [options] [filterspecs] #打印log

Introdução às opções

-b 查看日志类型,比如radio, main, events等,默认为main
-c 清空日志
-s 	#设置过滤器
logcat -s callMode:V #tag为callMode,级别为V的log
-f <filename> #输出到文件
-v <format> #设置log的打印格式,<format>是下面的一种:brief process tag thread raw time threadtime long
log format 形式如下:
-v process # D( 4816) volume state changed for /mnt/usbhost3 (unmounted -> removed)  (MountService)
-v brief #I/SystemServer( 4816): Entered the Android system server!....
-g #得到环形缓冲区的大小并退出
130|root@mars-200:/ # logcat -g
/dev/log/main: ring buffer is 256Kb (255Kb consumed), max entry is 5120b, max payload is 4076b
/dev/log/system: ring buffer is 256Kb (111Kb consumed), max entry is 5120b, max payload is 4076b


adb devices adb shell adb install / uninstall adb pull/push adb shell service list
A ferramenta de introdução dumpsys de comando adb comumente usada
dumpsys é usada para exibir informações detalhadas do sistema Android.É dumpsysuma poderosa ferramenta de análise do sistema que pode visualizar informações do dispositivo, processar informações de uso de memória, informações de pacote de aplicativos, informações de serviço, informações de configuração de permissão, gerenciamento de energia informações de status e informações de atividade.
Formato da ferramenta:dumpsys [option]

dumpsys | grep DUMP 获取dump支持的命令;
dumpsys activity: 显示activity的相关信息,包括任务栈等;
dumpsys window: 显示键盘,窗口和它们的关系;
dumpsys diskstats: 磁盘相关信息

Práticas relacionadas à segurança

Engenharia reversa do Android

No processo de aprendizagem do desenvolvimento Android, muitas vezes você aprende como os aplicativos de outras pessoas são desenvolvidos. Essas belas animações e layouts requintados podem fazer você desistir. Como desenvolvedor, você pode querer saber o que são essas interfaces de efeito. Como conseguir isso ?Neste momento, você pode descompilar e visualizar o APK do aplicativo modificado.

O objetivo da descompilação não é causar danos, o objetivo principal é promover o aprendizado dos desenvolvedores, aprender com um bom código e melhorar seu nível de autodesenvolvimento.

Ferramenta de descompilação
dex2jar apktool jd-gui

Proceda da seguinte forma:

  1. Renomeie o arquivo apk para um arquivo .zip e descompacte-o.
    classes.dex
  2. Converta o arquivo classes.dex em um pacote jar por meio da ferramenta dex2jar
    ./d2j-dex2jar.sh classes.dex
  3. apktool restaura arquivos de recursos apk
    ./apktool.sh -d test.apk

controle de permissão su

Permissões relevantes podem ser adicionadas ao controle de permissão de tempo de execução do Android e seu uso pode ser controlado com base em assinaturas, arquivos de configuração, etc.

Acho que você gosta

Origin blog.csdn.net/u011897062/article/details/132990240
Recomendado
Clasificación