当前位置:网站首页>Pratique de l'attaque et de la défense du réseau HUST | 6 Expérience de sécurité du microprogramme de l'équipement IOT | expérience 2 technologie d'atténuation des attaques de l'équipement IOT basée s
Pratique de l'attaque et de la défense du réseau HUST | 6 Expérience de sécurité du microprogramme de l'équipement IOT | expérience 2 technologie d'atténuation des attaques de l'équipement IOT basée s
2022-06-26 11:27:00 【Shandianchengzi】
Catalogue des articles
- Expérience 2 Basé sur MPU Technologie d'atténuation des attaques des appareils IOT
C'est écrit en haut:Attention au téléchargement de la dernière versionlib(6Mois2Mise à jour), Et de combiner leurs libAnalyse. Le processus d'analyse est un peu long , C'est pour aider les gens à trouver leur adresse. 、 Et comprendre .En fait,, Contenu à inclure dans le rapport Seulement les sous - tâches 2Alors.
L'expérience 2 est difficile. , J'ai déjà blogué. , Si tu veux écrire , S'il vous plaît, Arrangez - vous . L'expérience 3 est simple , L'expérience 2 est difficile et longue , Vous devriez écrire un rapport. , Je vais commencer l'expérience deux séparément .
Expérience 2 Basé sur MPU Technologie d'atténuation des attaques des appareils IOT
Exigences expérimentales
Expérimental lib Plusieurs éléments sont ouverts dans le Code de la Bibliothèque MPU Protection régionale
Veuillez reconfigurer en fonction des différentes sous - tâches MPU La zone est dégagée de la protection de la zone correspondante
- Sous - tâches 1 Décompresser le fragment de code non protégé par l'écriture changer le fragment de code spécifié en writable
- Sous - tâches 2 Désactiver une zone périphérique spécifique pour changer la zone périphérique spécifiée en lecture - écriture
Note::S'il vous plaît. Déclenchement par analyse inverse Memfault Directives, Afin de répondre aux exigences de la Mission tout en utilisant le plus possible Peu. MPU Configuration de la zone、Le plus petit MPU Champ d'application régional, Niveau de privilège minimal .
Tri privilégié :rwx(Lisible en écriture exécutable)> rw>rx>r>Pas de permission
Attention!:Mission2 Pour utiliser l'architecture mps2-an386.
Préparation de l'expérience
KeilInstallation et utilisation
Installer le processus de craquage :
- Installation
Keil5:Tout le cheminNextC'est tout., Nom boîte aux lettres remplie arbitrairement , Tous les pilotes d'installation sont , Il est préférable que le chemin d'installation ne contienne pas de chinois ,Ou par défaut direct. - Crack
Keil5: Ouvrir avec les privilèges d'administrateurKeil5, Fermez la fenêtre pop - up pour installer le paquet ,Puis cliquez surFile-License Management,CopierCIDPour craquer le logiciel . Logiciel de craquage rempliCID、ParamètresTargetPourARMAprès,Cliquez surGenerateGénérerLIC,Coller dansKeil5DeLICDans la zone d'entrée.Cliquez surAdd LICC'est tout.. - Installation
ARM CMSDK_CM4_FP: Le professeur a envoyéKeil5Par défaut, ce n'est pas ce que nous voulons.ARM CMSDK_CM4_FP. Mais le professeur en a envoyé deux autres.packDocumentation, Double - cliquez sur installer .Tout le cheminNext, Le chemin d'installation doit être compatible avec Keil5 Le répertoire d'installation pour .
Créer un nouveau projet et ajouter un fichier :
Project-New uVersion Project , Ensuite, configurez - le directement selon les instructions de l'expérience. , Suivez aussi directement les instructions . Ajouter un fichier peut être traîné directement dans .La compilation estProject-build.
Attention!: Si une autre version de
Keil, Et un nouveau projet , N'oubliez pas de supprimerListings、Objects、RTE, Sinon, il donnera automatiquement la priorité à la lecture de la configuration à partir de ces répertoires , La version n'est pas correcte .
Si l'élément de configuration est entièrement correct , Entièrement conforme aux instructions , L'exécution directe 0 Error.
L'exécutable est généré à Objects/En bas., Exécuter la commande suivante :
~/qemu-7.0.0/build/qemu-system-arm -M mps2-an386 -cpu cortex-m4 -m 16M -nographic -d in_asm,nochain -kernel ~/exp6/task2/task2.axf -D log.txt
Résultats de l'analyse.c/.h/.libContenu et rôle du document
Commençons par une brève analyse. task2.cLe contenu de.
mainFonctions:
① Définir des variables entières non signées a, Assigner la valeur à la fin du numéro d'étudiant 4Bits;
② AppelezprvSetupHardware(),Initialisation du matériel;
③ AppelezxTaskCreate,Créer une tâche, Le contenu de la tâche est vTaskStart, Le nom de la tâche est "Task2", Les permissions sont privilégiées ;
④ AppelezStartFreeRTOS(a);
⑤ Utiliserfor(;;) Pour que le programme ne s'arrête pas .
InvTaskStartDans la Mission,AppeléAttackTest().
Après analyse inverse , Peut être précisé :In
StartFreeRTOS(a)Contient le démarrage de la séquence des tâches .Quand ça a commencéTask2Après,Sera appeléAttackTest().SiAttackTestPas de déclenchementMemMange_HandlerAnomalie,Dans certaines conditions, Imprime avec succèsflag;QuandAttackTestAprès avoir déclenché l'exception, La tâche sera terminée .
MemMange_HandlerDélai de déclenchement anormal ,Donc les vieuxlib Toujours quand l'exception n'a pas été déclenchée , C'est déjà impriméflag, Le professeur a donc mis à jour la nouvelle édition libDocumentation.
En regardanttask2.h,Je vois.AttackTest、prvSetupHardware、StartFreeRTOSDéclaration de fonction pour, Et la mise en œuvre concrète de ces fonctions ,C'est exactement là.task2x_xx.libDans le document.
Quand la construction du projet sera terminée , Le contenu de tous les fichiers est lié à l'exécutable task2.axfMoyenne.
Sous - tâches1 Décompresser le fragment de code non protégé par l'écriture changer le fragment de code spécifié en writable
Dans cette tâche,Il fauttask2.c、task2.h、task2a_89.libAjouter àProjectMoyenne, Attention à télécharger la dernière version de .libDocumentation.
Analyse inverse AttackTest Fonctions
Tout d'abord,, Compiler le projet directement sans modification ,Je l'ai.task2.axf, Pour l'analyse inverse AttackTestFonctions.Les résultats de la compilation sont présentés ci - dessous:

InIDA ProOuvrir le fichier danstask2.axf, Les options choisies correspondent à l'expérience précédente .
Sur la base d'une analyse précédente de trois documents , On peut facilement trouver AttackTest La position de la fonction dans l'inverse , Ouvre - la un peu , Son contenu est illustré ci - dessous :
F5 Les résultats du démontage sont présentés ci - dessous. :

Et puis..., Assurez - vous d'entrer correctement dans la sortie flag Dans la branche conditionnelle de .
《ARM Cortex-M3AvecCortexGuide de l'Autorité》( Ci - après dénommé guide faisant autorité ),No11 Le chapitre est écrit avec MPU Registre local ,Parmi eux0xE000ED94C'est un registre.CTRL. Selon la correspondance entre l'adresse statique et le registre , Prédéfini comme suit :
#define MACRO_CTRL 0xE000ED94
#define MACRO_RNR 0xE000ED98
#define MACRO_RBAR 0xE000ED9C
#define MACRO_RASR 0xE000EDA0
Et puis,InvTaskStart Ajouter les lignes de code suivantes , Pour accéder au registre sous forme de pointeur , Et imprimer toutes les zones originales :
volatile unsigned int * pCTRL=(volatile unsigned int *)MACRO_CTRL;
volatile unsigned int * pRNR=(volatile unsigned int *)MACRO_RNR;
volatile unsigned int * pRBAR=(volatile unsigned int *)MACRO_RBAR;
volatile unsigned int * pRASR=(volatile unsigned int *)MACRO_RASR;
for(int i=0;i<8;i++){
*pRNR=i;
printf("%d,%d,%08x,%08x\n",*pRNR,*pCTRL,*pRBAR,*pRASR);
}
Le Registre a sa propre structure , La structure est définie ici. 、 Il serait plus approprié de redéfinir le pointeur de structure .Mais, Parce que la tâche expérimentale est simple , Il n'y a pas grand - chose à modifier , Donc je vais juste l'assigner directement à un entier non signé .
Pour s'assurer qu'au moins un MPUEst activé,Encore.vTaskStart Ajouter une ligne de code après le corps de la boucle dans :
*pCTRL=5;
Et puisRebuild Et l'exécuter directement , Voir où l'exception a été déclenchée , Les résultats de l'opération sont présentés ci - dessous :

Selon le professeur ,MemMange_Handler Cette exception a un délai , Donc la violation MPU La directive sur la protection des zones est la suivante: Les lignes de code ci - dessus de la partie qui a déclenché l'exception , Au lieu des autres codes qui suivent .C'est - à - dire::
0x000002c2: f44f 40e0 mov.w r0, #0x7000
0x000002c6: 490c ldr r1, [pc, #0x30]
0x000002c8: 6001 str r1, [r0]
0x000002ca: f8c0 1080 str.w r1, [r0, #0x80]
0x000002ce: e7ec b #0x2aa
CorrespondantAttackTestInIDA Pro Le Code d'assemblage est le suivant: :
LDRLe rôle de la directive: Adresse mémoire À l'adresse indiquée Continu4OctetsDonnéesTransfert au registre de destination.
MOV.W R0, #0x7000 ; Oui.0x7000Assigner une valeur àR0Registres
LDR R1, =0x12345678 ; Oui.0x12345678Assigner une valeur àR1Registres
STR R1, [R0] ; Oui.R1Continu4 Octets de données transférés à R0 Dans l'adresse indiquée par le registre
STR.W R1, [R0,#0x80] ; Oui.R1Continu4 Octets de données transférés à (R0Adresse à laquelle le registre pointe+0x80)Moyenne
B Judge ; Exécution du sautJudge
Apparemment.,J'ai visité#0x7000Et#0x7080Ces deux adresses, Et ils ont besoin de permissions d'écriture .
Analyser tous les paramètres du professeur MPUDeRASRDeAPPropriétés,Comme vous pouvez le voir,,Région0、1、3Tout est en lecture seule, Les autres zones sont lisibles et lisibles au niveau des privilèges ,Région6Et7 Pas de réglage pour le moment .AP Les droits d'accès correspondant au Code de domaine sont indiqués dans la figure ci - dessous. ( Extrait du Guide de l'autorité ):

Et combiner l'adresse de base RBAREtRASR Attributs de taille de zone dans ,Comme vous pouvez le voir,,#0x7000Et#0x7080 Les deux adresses sont dans la zone 0Et1Intérieur, Et ils ne sont pas écrits .
Mais, En plus de ces lignes de directives , Il n'y a pas d'autre accès. ?Continue de regarder en arrière.
Imprimerflag Les branches conditionnelles de la fonction sont les suivantes :

Où imprimer flag Le code correspondant à la branche conditionnelle de :
1 ldr R0, #0x20000038 ; Oui.0x20000038Assigner une valeur àR0Registres
2 ldr R1, [R0] ; Oui.R0 La valeur sur l'adresse à laquelle le registre pointe est lue et assignée à R1
3 adds R1, R1, #2 ; R1 = R1 + 2, Influence sur le BIT du drapeau de carrosserie C Plus d'opération
4 str R1, [R0] ; Oui.R1Continu4 Octets de données transférés à R0 Dans l'adresse indiquée par le registre
5 adr R0, aFlagU ; Assigner l'adresse de la chaîne formatée à R0
6 b.w __2printf ; Appelez__2printf
En dernier analyse,Judge L'adresse mémoire est également impliquée dans 0xE000ED94 Lire la permission de 0x20000038Permissions de lecture et d'écriture pour.Heureusement que,AdoptionMPULe message de,0x20000038 Bien que dans la région 2Intérieur,Mais la région2Lire et écrire.0xE000ED94 N'est pas lié .
Donc ces deux adresses ne sont pas des violations MPU Adresse protégée .
Violations MPU Directive sur la protection des zones
Synthèse de toutes les analyses ci - dessus ,C'est clair.,ViolationsMPU La directive sur la protection des zones est la suivante: AttackTestEn fonction:
STR R1, [R0] ; Oui.R1Continu4 Octets de données transférés à R0 Dans l'adresse indiquée par le registre
STR.W R1, [R0,#0x80] ; Oui.R1Continu4 Octets de données transférés à (R0Adresse à laquelle le registre pointe+0x80)Moyenne
Autorisation violée
C'est exact.0x7000Et0x7080 Permission d'écrire pour ces deux adresses .
Release AttackTest Nouvelle violation des règles par la fonction MPU Code de reconfiguration de la zone
En général, J'ai ajouté la libération AttackTestNouvelle violation des règles par la fonction MPU Le Code de reconfiguration de la zone est le suivant :

Courir et obtenir flagLes résultats sont présentés ci - dessous:

Description de la zone définie
CTRL
CTRL=5.Indique l'activation.
RNR
RNR=6,Zone de représentation6.
Pour ne pas écraser les paramètres du professeur , Je choisis la zone 6 Pour configurer le nouveau MPURégion.
RBSR
RBSRSet to0x7000.
RBSRLa structure est la suivante:( Extrait du Guide de l'autorité ):

Le tableau ci - dessus est très trompeur , Au début, je pensais ADDR Est indépendant , Comme quand l'adresse est 0x7000、La région est1Heure,Correspondant àADDREn partie0x7000,Correspondant àRBAR- Oui.0x70001. Heureusement qu'un camarade de classe m'a réveillée à temps , Regardez en arrière le Guide de l'autorité , Vous trouverez que la partie adresse est directement assignée , Les quatre derniers chiffres n'ont pas été pris en considération .
Pratique, Les conclusions sont les suivantes: :
D'un côté, Quand l'avant - dernier chiffre VALID- Oui.0Quand,REGION Le réglage du BIT n'affecte pas la modification MPU Registre des numéros de zone ,Le programme utiliseraMPU Zone sélectionnée par le registre des numéros de zone ,Donc, Les quatre derniers chiffres peuvent être n'importe quelle valeur ;
D'un autre côté,L'adresse doit êtreREGION Nombre entier de fois la taille du champ .Tout d'abord,,Nous devons savoir Chaque adresse BIT peut être indexée 8Bits de données.Pour une taille de32BC'est - à - dire:(32×8)bitsDonnées, En théorie, il faut l o g 2 ( 32 ) log_2(32) log2(32)Bits、C'est - à - dire5 L'adresse du BIT indique ,Et chaque4 Le nombre binaire de bits correspond à un 16Nombre décimal.Donc,,Utiliser(00~1f)C'est tout.32BDonnées,Et chaque32B Intervalle entre les données ,Ça devrait l'être.0x20.
REGION La taille minimale du champ est 32B,L'adresse estN×0x20,NEst un entier.Donc,, L'adresse non nulle minimale est 0x20. Même si l'ordre direct RBAR=0x20, Ça n'affecte pas le compte à rebours. 5 Réglage du nombre binaire de bits .(équivalent à,Compte à rebours.5 Les bits sont réservés. ,Juste pour la commodité, C'est plus défini VALIDDomaine etREGIONDomaine)
L'adresse correspond à la taille de la capacité du blog de référence :【 Fondation intégrée 】Pourquoi0x100- Oui.256Octets、0x400- Oui.1KB、0x800- Oui.2KB、0x1000- Oui.4KB?.
En dernier analyse,RBSR=0x7000,Ça veut dire...MPUL'adresse de base est0x7000.
RASR
RASR=0x0102EE0F, Les attributs correspondants sont les suivants :
- AP = 001, Seules les lectures privilégiées sont prises en charge pour la correspondance /Écris.;
- TEX S C B = 000 0 1 0,Correspondant àROM, Flash(Mémoire Programmable);
- SRD = 11101110, Sous - région correspondante 0Et4Activer,Autres désactivations;
- Taille de la zone = 00111, Taille de la zone correspondante 256B;
- Activer = 1, Fais - le MPUÇa marche.
Ensuite, expliquez ce que j'ai mis en place AP、SRD、Taille de la zone、 Pourquoi le type est le plus petit :
AP
AP La relation correspondante entre le Code et l'autorisation d'accès est la suivante: ( Extrait du Guide de l'autorité ):

Comme le montre le tableau ci - dessus, , Satisfaire notre mission privilégiée 、 Les droits d'accès minimaux requis pour les droits de lecture et d'écriture sont les suivants:
001.Taille de la zone
La taille de la zone est codée comme suit ( Extrait du Guide de l'autorité ):

Pour prendre le plus petit ,Alors prends32B,C'est - à - direb00100. Malheureusement, j'ai besoin d'une visite.
0x7000Et0x7080Ces deux adresses,Prends juste128BPas du tout.,Parce qu'on prend128B、 L'adresse de base est 0x7000Quand,MPU La zone correspondante n'est que0x7000~0x707F.Alors prends - le.256B,Correspondant àb00111.SRD
Lorsque la taille de la zone atteint 256BQuand,C'estMPUAssez gros.,Capable de définir8 Sous - zone .
Donc,, Je dois aussi considérer l'attribut d'interdiction de sous - zone SRDParamètres pour.( J'ai demandé à quelqu'un ,Les autreslib Une seule adresse a été consultée , Ou l'adresse n'est pas aussi grande .Donc,, Je suis dans une situation spéciale )
Ma sous - région 0 Et les sous - régions 4 Doit être activé , Tout le reste peut être désactivé .
Donc il est réglé à
11101110.Type
Juste une brève introduction aux grandes catégories ,NonTEX、S、C、BPour plus de détails.
Ce que cette expérience impliqueTEX、S、C、B Les paramètres de sont les suivants ( Extrait du Guide de l'autorité ):

Apparemment.,Set toROM,Flash Est le plus petit .
Sous - tâches 2 Désactiver une zone périphérique spécifique pour changer la zone périphérique spécifiée en lecture - écriture
Dans la Sous - tâche1 Sur la base de l'analyse de ,Pas besoin de beaucoup d'explications.
Plus de presets MPUÇa n'a pas changé., Donc en gros, il suffit de changer la plage d'adresses .
Les résultats expérimentaux sont les suivants:.
Analyse inverse AttackTest Fonctions

Violations MPU Directive sur la protection des zones
AttackTestDansSTR R0, [R1].
Autorisation violée
0x40010000Permissions d'écriture pour.
Release attackTest Nouvelle violation des règles par la fonction MPU Code de reconfiguration de la zone
Code, Et comparer les sous - tâches 1 Modifications clés de :

Résultats des opérations:
Description de la zone définie
RNR=6.
CTRL=5.
RBSRSet to0x40010000.
RASR=0x01020009, Les attributs correspondants sont les suivants :
- AP = 001, Seules les lectures privilégiées sont prises en charge pour la correspondance /Écris.;
- TEX S C B = 000 0 1 0,Correspondant àROM, Flash(Mémoire Programmable);
- SRD = 00000000, Taille de la zone non atteinte 256B, Cette propriété n'a donc pas besoin d'être configurée ;
- Taille de la zone = 00100, Taille de la zone correspondante 32B;
- Activer = 1, Fais - le MPUÇa marche.
边栏推荐
- laravel 使用 OSS时拼接 完整路径 及 laravel-admin 的多图片上传
- Work report (2)
- Nacos2.x.x start error creating bean with name 'grpcclusterserver';
- 深度理解STM32的串口實驗(寄存器)【保姆級教程】
- 即构「畅直播」上线!提供全链路升级的一站式直播服务
- 深圳市福田区支持文化创意产业发展若干措施
- Compréhension approfondie de l'expérience de port série stm32 (registre) [Tutoriel de niveau nounou]
- Flannel's host GW and calico
- Introduction to Dolby panoramic sound
- Code specification & explain in detail the functions and uses of husky, prettier, eslint and lint staged
猜你喜欢

Pre knowledge of hash table -- binary search tree

机器学习PCA——实验报告

leetcode 715. Range 模块 (hard)

Qixia housing and Urban Rural Development Bureau and fire rescue brigade carried out fire safety training

18: Chapter 3: development of pass service: 1: SMS login & registration process, introduction; (SMS verification code is used here)

机器学习聚类——实验报告

Cet article présente la moyenne mobile quadratique linéaire et le fonctionnement simple d'Excel pour réaliser la prédiction des séries chronologiques dans la modélisation.

FastRCNN

量化初级 -- akshare获得股票代码,最简策略

loggie 编码以及换行符测试
随机推荐
Laravel-admin 登录添加图形验证码
Re recognized! Know that Chuangyu has been selected as one of the first member units of the "business security promotion plan"
laravel 写原生SQL语句
统计遗传学:第一章,基因组基础概念
Solidworks渲染技巧如何不显示边线--显示样式设定
[Beiyou orchard microprocessor design] 10 serial communication serial communication notes
Easyx-----c语言实现2048
dd命令测试华为鲲鹏&宏衫固态存储磁盘读写速度
Is it safe for compass software to buy stocks for trading? How to open an account to buy shares
Redis best practices? If I don't feel excited after reading it, I will lose!!
loggie 编码以及换行符测试
HUST网络攻防实践|6_物联网设备固件安全实验|实验二 基于 MPU 的物联网设备攻击缓解技术
Prospering customs through science and technology, Ronglian and Tianjin Customs jointly build a genomic database and analysis platform
openresty 概述
Change calico network mode to host GW
机器学习LDA——实验报告
量化初级 -- akshare获得股票代码,最简策略
Machine learning LDA - Experimental Report
科技兴关,荣联与天津海关共建基因组数据库及分析平台
我想知道,十大劵商如何开户?在线开户安全么?