A Hardware Security-Monitoring Architecture Based on Data Integrity and Control Flow Integrity for Embedded Systems
Abstract
:1. Introduction
- We propose a hardware-based data integrity (DI) and control flow integrity (CFI) security-monitoring architecture. The architecture extracts the digest representing the DI information, and the label and bitmap representing the CFI information when the program is offline, and implements the integrity check of a variety of parameters through the hardware-monitoring module when the program is running, ensuring that malicious attacks on the data and control flow will be detected.
- The proposed CFI protection mechanism that takes into account indirect jumps can effectively resist attacks against the control flow of embedded systems, such as CRAs, with lower resource overhead. For direct-jump-type instructions, the mechanism connects the BBs containing these instructions into CFG, and assigns a label to each BB according to the specific HD. For indirect-jump-type instructions, this mechanism maps the legal target address into a bitmap, which reduces the required storage space and speeds up the search.
- We implemented the proposed architecture in hardware and evaluated the security capabilities, hardware implementation overhead, and performance overhead of the architecture based on the selected benchmarks. Experimental results show that the architecture can effectively resist tampering attacks on the data and control flow of embedded systems, and the performance overhead is about 6%.
2. Related Work
3. Preliminaries
3.1. Basic Block Extraction
3.2. Code Reuse Attacks
3.2.1. ROP Attacks
3.2.2. JOP Attacks
3.3. Threat Model
4. Proposed Method
4.1. Hybrid Information Integrity Monitoring Architecture
4.2. Data Integrity Protection Mechanism
4.3. Control Flow Integrity Protection Mechanism
4.3.1. Control Flow Graph
- A BB loops back to itself, such as BB2 in Figure 4. In this case, the HD between codes assigned will always be equal to zero, not the value selected by the user. This will cause false alarms.
- The jump address destination is duplicated. The jump destination addresses of BB1 and BB2 are both BB3. In this case, the HD between the CFIlabel of BB2 and BB3 will be 2, not the value selected by the user. However, in fact, it is possible for the program to execute BB2 first and then BB3.
Algorithm 1 Assigning Labels CFIlabels to BBs |
Input: Subgraph, HD and CodeRoot |
Output: CFIlabel and HDspecial |
1: CFIlabel(i) ← The label of the BBi in the Subgraph. |
2: HDspecial(i)(j) ← The jth special HD of the BBi in the Subgraph. |
3: CFIlabel(1) = CodeRoot; // CodeRoot has SIZElabel bits. |
4: for Subgraph still has BBs at the current level do // It has d levels. |
5: if BBi is the left child node of BBx then // BBi is in the bth level |
6: Generate a SIZElabel -bit binary number c, the Hamming distance between c and CFIlabel(x) is HD and c !⊆{CFIlabel(y)| 1≤ y ≤i}; //c is not among the existing labels |
7: CFIlabel(i) = c; |
8: else Jump to Step 6; |
9: end if |
10: Output CFIlabel(i); |
11: end for |
12: Retrieve the BBs of the next level in Subgraph and jump to Step 4; |
13: if BBi has M special cases |
14: for 1 ≤ j ≤ M do |
15: Calculate the HD of the jth cases and obtain HDspecial(i)(j); |
16: Output HDspecial(i)(j); |
17: end for |
18: end if |
4.3.2. Indirect Jump
- l.jalr rB. The target address of an indirect function call instruction must be the entry address of a function.
- l.jr r9. This instruction functions as a return instruction. Its target address can only be the start address of a BB.
- l.jr rB. The target address of an indirect jump instruction must also be the start address of a BB.
4.4. Hardware Monitoring Module
4.4.1. Basic Block Check
4.4.2. Data Integrity Check
4.4.3. Control Flow Integrity Check
4.4.4. Bitmap Search
5. Experiments and Results
5.1. Platform and Benchmarks
5.2. Performance Evaluation
5.2.1. Security Capability Evaluation
- To simulate the tampering of the program code by an attacker, we randomly select a parameter in the source file of each benchmark test program, such as input variables and static variables, and tamper with the value of the parameter. Then, we ran the tampered program on the test platform to observe whether HIIMA can detect the attack. Each experiment was repeated 1000 times.
- To simulate the attacker’s attack on the external memory, we designed a fault implant circuit on the Flash. When the binary code is loaded on the Flash, the binary code and address of the program can be tampered with. Each set of experiments randomly selected 1000 attack samples to launch attacks on corresponding locations.
- To simulate an attacker’s attack on dynamic data, we have implanted an attack circuit inside DDR2. When the embedded system is running the program, if too many dynamic data are generated, this part of the data will be stored in an off-chip memory, such as DDR2. When the data are needed, the embedded system reads the data from the off-chip memory. The attack circuit will randomly tamper with certain data written to DDR2. Each experiment will be repeated 1000 times.
- Modifications for direct jumps. The attackers can use the buffer overflow attack to overwrite the value of the general-purpose register, so that the target address of the direct jump instruction and the direct function call instruction becomes the value set by the attacker.
- Modifications for branch jumps. The attacker can attack the value of the register to change the target address of the branch instruction. In addition, the attacker can also change the judgment condition of the branch jump by changing the value of the flag.
- Modification for the return address. Using the ROP attack, the attacker can modify the return address of the program to hijack the control flow.
- Modifications for indirect jumps. For indirect jump instructions and indirect function call instructions, an attacker can use the JOP attack to modify the target address of the indirect jump and hijack the control flow.
5.2.2. Hardware Implementation Overhead
5.2.3. Performance Overhead Evaluation
- The LHash algorithm. After receiving all the instructions of a BB, it needs three clock cycles to calculate the digest (LHashDynamic). Therefore, the HMM requires more clock cycles to check the data integrity of each BB.
- The search for BB reference information. When the program is running, the HMM needs to search for the corresponding reference information in the Integrity Parameter Memory according to the start address of the currently executed BB. The larger the size of the HIREF, the longer the search time required.
5.3. Comparison with Other Integrity Protection Methods
6. Conclusions
Author Contributions
Funding
Institutional Review Board Statement
Informed Consent Statement
Data Availability Statement
Acknowledgments
Conflicts of Interest
References
- Zhang, Z.; Wang, X.; Hao, Q.; Xu, D.; Zhang, J.; Liu, J.; Ma, J. High-Efficiency Parallel Cryptographic Accelerator for Real-Time Guaranteeing Dynamic Data Security in Embedded Systems. Micromachines 2021, 12, 560. [Google Scholar] [CrossRef] [PubMed]
- Zhang, Z.; Wang, X.; Hao, Q.; Xu, D.; Wang, J.; Liu, J.; Ma, J.; Zhang, J. Hardware-Implemented Security Processing Unit for Program Execution Monitoring and Instruction Fault Self-Repairing on Embedded Systems. Appl. Sci. 2022, 12, 3584. [Google Scholar] [CrossRef]
- Wang, X.; Zhang, Z.; Hao, Q.; Xu, D.; Wang, J.; Jia, H.; Zhou, Z. Hardware-Assisted Security Monitoring Unit for Real-Time Ensuring Secure Instruction Execution and Data Processing in Embedded Systems. Micromachines 2021, 12, 1450. [Google Scholar] [CrossRef] [PubMed]
- Kaur, M.; Raj, M.; Lee, H.N. Cross Channel Scripting and Code Injection Attacks on Web and Cloud-Based Applications: A Comprehensive Review. Sensors 2022, 22, 1959. [Google Scholar]
- Salehi, M.; Danny, H.; Crispo, B. MicroGuard: Securing Bare-Metal Microcontrollers against Code-Reuse Attacks. In Proceedings of the IEEE Conference on Dependable and Secure Computing (DSC), Hangzhou, China, 18–20 November 2019; pp. 1–8. [Google Scholar]
- Yang, D.; Gao, C.; Huang, J. Quantitative Assessment and Grading of Hardware Trojan Threat Based on Rough Set Theory. Appl. Sci. 2022, 12, 5576. [Google Scholar] [CrossRef]
- Pedreira, V.; Barros, D.; Pinto, P. A Review of Attacks, Vulnerabilities, and Defenses in Industry 4.0 with New Challenges on Data Sovereignty Ahead. Sensors 2021, 21, 5189. [Google Scholar] [CrossRef] [PubMed]
- Mukhtar, N.; Mehrabi, M.A.; Kong, Y.; Anjum, A. Machine-Learning-Based Side-Channel Evaluation of Elliptic-Curve Cryptographic FPGA Processor. Appl. Sci. 2019, 9, 64. [Google Scholar] [CrossRef] [Green Version]
- Wang, W.; Liu, M.; Du, P.; Zhao, Z.; Tian, Y.; Hao, Q.; Wang, X. An Architectural-Enhanced Secure Embedded System with a Novel Hybrid Search Scheme. In Proceedings of the 2017 International Conference on Software Security and Assurance (ICSSA), Altoona, PA, USA, 24–25 July 2017; pp. 116–120. [Google Scholar]
- Wang, X.; Wang, W.; Xu, B.; Du, P. A fine-grained hardware security approach for runtime code integrity in embedded systems. J. Univers. Comput. Sci. 2018, 24, 515–536. [Google Scholar]
- Wang, W.; Zhang, X.; Hao, Q.; Zhang, Z.; Xu, B.; Dong, H.; Xia, T.; Wang, X. Hardware-enhanced protection for the runtime data security in embedded systems. Electronics 2019, 8, 52. [Google Scholar] [CrossRef] [Green Version]
- Wang, X.; Zhao, Z.; Xu, D.; Zhang, Z.; Hao, Q.; Liu, M. An M-Cache based security monitoring and fault recovery architecture for embedded processor. IEEE Trans. Large Scale Integr. Syst. 2020, 28, 2314–2327. [Google Scholar] [CrossRef]
- Du, P.; Wang, X.; Wang, W.; Li, L.; Xia, T.; Li, H. Hardware-assisted integrity monitor based on lightweight hash function. IEICE Electron. Express 2018, 15, 20180107. [Google Scholar] [CrossRef] [Green Version]
- Yan, C.; Englender, D.; Prvulovic, M.; Rogers, B.; Solihin, Y. Improving cost, performance, and security of memory encryption and authentication. In Proceedings of the 33rd Annual International Symposium on Computer Architecture, Boston, MA, USA, 17–21 June 2006; pp. 179–190. [Google Scholar]
- Gelbart, O.; Leontie, E.; Narahari, B.; Simha, R. Architectural support for securing application data in embedded systems. In Proceedings of the IEEE International Conference on Electro/Information Technology, Ames, IA, USA, 18–20 May 2008; pp. 19–24. [Google Scholar]
- Arora, D.; Ravi, S.; Raghunathan, A.; Jha, N.K. Architectural support for run-time validation of program data properties. IEEE Trans. Large Scale Integr. Syst. 2007, 15, 546–559. [Google Scholar] [CrossRef]
- Hong, M.; Guo, H.; Hu, S.X. A cost-effective tag design for memory data authentication in embedded systems. In Proceedings of the 2012 International Conference on Compilers, Architectures and Synthesis for Embedded Systems, Tampere, Finland, 7–12 October 2012; pp. 17–26. [Google Scholar]
- Liu, T.; Guo, H.; Parameswaran, S. iCETD: An Improved tag generation design for memory data authentication in embedded processor systems. IEEE Trans. Large Scale Integr. Syst. 2017, 56, 96–104. [Google Scholar] [CrossRef]
- Wang, X.; Zhou, C.; Pang, S.; Li, M. Hardware assisted protectin for data validation at run-time on embedded processors. In Proceedings of the Joint Conference on Information Science and Technology, Guilin, China, 8–9 August 2016; pp. 680–685. [Google Scholar]
- Fiskiran, A.M.; Lee, R.B. Runtime Execution Monitoring (REM) to Detect and Prevent Malicious Code Execution. In Proceedings of the IEEE International Conference on Computer Design: VLSI in Computers and Processors, San Jose, CA, USA, 11–13 October 2004; pp. 452–457. [Google Scholar]
- Arun, K.K.; Ramesh, K.; Gaston, O.; Sateesh, K.A. A High-Performance, Low-Overhead Microarchitecture for Secure Program Execution. In Proceedings of the 2012 IEEE 30th International Conference on Computer Design (ICCD), Montreal, QC, Canada, 30 September–3 October 2012; pp. 102–107. [Google Scholar]
- Stephen, C.; Lucas, D.; Alexandra, D.; Ahmad-Reza, S.; Hovav, S.; Marcel, W. Return-oriented programming without returns. In Proceedings of the 17th ACM Conference on Computer and Communications Security (CCS’10), Chicago, IL, USA, 4–8 October 2010; pp. 559–572. [Google Scholar]
- Nicolò, M.; Paolo, P.; Gianluca, R.; Antonio, V. A FPGA-based Control-Flow Integrity Solution for Securing Bare-Metal Embedded Systems. In Proceedings of the 15th Design & Technology of Integrated Systems in Nanoscale Era (DTIS), Marrakech, Morocco, 1–3 April 2020; pp. 1–10. [Google Scholar]
- Das, S.; Zhang, W.; Liu, Y. A fine-grained control flow integrity approach against runtime memory attacks for embedded systems. IEEE Trans. Large Scale Integr. Syst. 2016, 24, 3193–3207. [Google Scholar] [CrossRef]
- He, W.; Das, S.; Zhang, W.; Liu, Y. No-jump-into-basic-block: Enforce basic block CFI on the fly for real-world binaries. In Proceedings of the IEEE 2017 54th ACM/EDAC/IEEE Design Automation Conference (DAC), Austin, TX, USA, 18–22 June 2017; pp. 1–6. [Google Scholar]
- Davi, L.; Hanreich, M.; Paul, D.; Sadeghi, A.R.; Koeberl, P.; Sullivan, D.; Arias, O.; Jin, Y. HAFIX: Hardware-assisted flow integrity extension. In Proceedings of the IEEE 2015 52nd ACM/EDAC/IEEE Design Automation Conference (DAC), San Francisco, CA, USA, 8–12 June 2015; pp. 1–6. [Google Scholar]
- Christoulakis, N.; Christou, G.; Athanasopoulos, E.; Ioannidis, S. HCFI: Hardware-enforced control-flow integrity. In Proceedings of the Sixth ACM Conference on Data and Application Security and Privacy, New Orleans, LA, USA, 16–18 March 2016; pp. 38–49. [Google Scholar]
- Sullivan, D.; Arias, O.; Davi, L.; Larsen, P.; Sadeghi, A.R.; Jin, Y. Strategy without tactics: Policy-agnostic hardware-enhanced control-flow integrity. In Proceedings of the IEEE 2016 53nd ACM/EDAC/IEEE Design Automation Conference (DAC), Austin, TX, USA, 5–9 June 2016; pp. 1–6. [Google Scholar]
- Lee, J.; Heo, I.; Lee, Y.; Paek, Y. Efficient security monitoring with the core debug interface in an embedded processor. ACM Trans. Des. Autom. Electron. Syst. (TODAES) 2016, 22, 1–29. [Google Scholar] [CrossRef]
- Lee, Y.; Lee, J.; Heo, I.; Hwang, D.; Paek, Y. Integration of ROP/JOP monitoring IPs in an ARM-based SoC. In Proceedings of the IEEE 2016 Design, Automation & Test in Europe Conference & Exhibition (DATE), Dresden, Germany, 14–18 March 2016; pp. 331–336. [Google Scholar]
- Zhang, J.; Qi, B.; Qin, Z.; Qu, G. HCIC: Hardware-assisted Control-flow Integrity Checking. IEEE Internet Things J. 2018, 6, 458–471. [Google Scholar] [CrossRef] [Green Version]
- Arun, K.; Jeyavijayan, R.; Ramesh, K. Controlling your control flow graph. In Proceedings of the IEEE International Symposium on Hardware Oriented Security & Trust, McLean, VA, USA, 3–5 May 2016; pp. 43–48. [Google Scholar]
- Wu, W.; Wu, S.; Zhang, L.; Zou, J.; Dong, L. LHash: A lightweight hash function. In Proceedings of the Springer International Conference on Information Security and Cryptology, Guangzhou, China, 27–30 November 2013; pp. 291–308. [Google Scholar]
- Wang, D. An Open Source Library for Elliptic Curve Cryptosystem. Available online: https://github.com/wangdali/OpenECC (accessed on 10 April 2012).
Type | Target Address | |
---|---|---|
l.j EA | direct jump instruction | EA |
l.bf EA | direct branch instruction | If the flag is 1, Effective Address (EA) |
If the flag is 0, End Address + 0x4 | ||
l.bnf EA | direct branch instruction | If the flag is 0, effective address (EA) |
If the flag is 1, End Address + 0x4 | ||
l.jal EA | direct function call instruction | EA |
l.jalr rB | indirect function call instruction | The value of general register rB |
l.jr rb | indirect jump instruction | The value of general register rB |
l.rfe | interrupt return jump instruction | The state before exception handling |
Benchmarks | Total Instructions | Direct Jump and Branch and Call | Indirect Jump and Indirect Call | Total BB | Program Size (KB) |
---|---|---|---|---|---|
OpenECC | 56,313 | 5439 | 1295 | 6734 | 197 |
SHA1 | 20,455 | 2822 | 578 | 3400 | 86 |
FFT | 13,506 | 1818 | 325 | 2143 | 91 |
CRC16 | 18,941 | 2672 | 559 | 3231 | 79 |
BasicMath | 26,515 | 3667 | 660 | 4327 | 149 |
AES | 22,170 | 2926 | 609 | 3535 | 92 |
Bitcount | 19,684 | 2760 | 584 | 3344 | 83 |
Blowfish | 19,128 | 2685 | 562 | 3247 | 83 |
Patricia | 23,130 | 3288 | 565 | 3853 | 97 |
QuickSort | 6707 | 854 | 164 | 1018 | 79 |
Content | Specification |
---|---|
Processor Core | OR1200 (svn rev 853) |
Clock Frequency @100 MHz | |
The size of Data Cache: 4 KB | |
The size of Instruction Cache: 4 KB | |
Memory | The size of DDR2 SDRAM: 256 MB |
The size of Flash: 16 MB | |
Board | Digilent Genesys |
FPGA Chip | Xilinx Virtex 5, XC5VLX50T |
Benchmarks | Attacks on Code | Attacks on Memory | Attacks on Dyn. Data | |||
---|---|---|---|---|---|---|
DI Check | CFI Check | DI Check | CFI Check | DI Check | CFI Check | |
OpenECC | 100% | 72.3% | 98.7% | 59.2% | 100% | 83.4% |
SHA1 | 100% | 84.2% | 99.1% | 69.4% | 100% | 92.8% |
FFT | 100% | 77.5% | 99.6% | 65.7% | 100% | 85.4% |
CRC16 | 100% | 80.4% | 99.5% | 67.4% | 100% | 87.1% |
BasicMath | 100% | 76.3% | 98.1% | 63.1% | 100% | 88.3% |
AES | 100% | 81.7% | 98.9% | 68.9% | 100% | 86.7% |
Bitcount | 100% | 85.1% | 98.6% | 70.6% | 100% | 91.2% |
Blowfish | 100% | 75.8% | 98.2% | 60.3% | 100% | 81.3% |
Patricia | 100% | 74.5% | 98.8% | 64.5% | 100% | 83.7% |
QuickSort | 100% | 81.6% | 99.3% | 68.8% | 100% | 89.5% |
Average | 100% | 78.9% | 98.9% | 65.8% | 100% | 86.9% |
Benchmarks | Direct Jump | Branch Jump | Return Address | Indirect Jump | Indirect Call |
---|---|---|---|---|---|
OpenECC | 100% | 100% | 91.2% | 95.3% | 95.4% |
SHA1 | 100% | 100% | 92.3% | 96.5% | 96.1% |
FFT | 100% | 100% | 90.4% | 94.8% | 94.3% |
CRC16 | 100% | 100% | 93.6% | 95.6% | 95.2% |
BasicMath | 100% | 100% | 94.6% | 95.2% | 96.3% |
AES | 100% | 100% | 94.5% | 95.6% | 94.8% |
Bitcount | 100% | 100% | 93.7% | 94.3% | 95.6% |
Blowfish | 100% | 100% | 92.8% | 95.2% | 97.9% |
Patricia | 100% | 100% | 96.2% | 97.1% | 96.8% |
QuickSort | 100% | 100% | 95.1% | 96.8% | 96.5% |
Average | 100% | 100% | 93.4% | 95.6% | 95.9% |
Benchmarks | Size of CFIlabel (bits) | Size of HIREF (KB) | FEAddress Bitmap (KB) | BBAddress Bitmap (KB) | Total (KB) |
---|---|---|---|---|---|
OpenECC | 16 | 52.61 | 3.08 | 3.08 | 58.77 |
SHA1 | 13 | 26.56 | 1.34 | 1.34 | 29.24 |
FFT | 12 | 16.74 | 1.42 | 1.42 | 19.58 |
CRC16 | 12 | 25.24 | 1.23 | 1.23 | 27.7 |
BasicMath | 14 | 33.80 | 2.33 | 2.33 | 38.46 |
AES | 15 | 27.62 | 1.44 | 1.44 | 30.5 |
Bitcount | 12 | 26.12 | 1.30 | 1.30 | 28.72 |
Blowfish | 12 | 25.36 | 1.30 | 1.30 | 27.96 |
Patricia | 12 | 30.10 | 1.52 | 1.52 | 33.14 |
QuickSort | 11 | 7.96 | 1.23 | 1.23 | 10.42 |
Average | - | 27.21 | 1.62 | 1.62 | 30.45 |
Slice Logic Utilization | SoC | CPU Core | HMM |
---|---|---|---|
Slice Registers | 6584 | 2604 | 612 |
Slice LUTs | 14,259 | 7208 | 1374 |
Occupied Slices | 5213 | 3312 | 486 |
BlockRAM/FIFO | 52 | 13 | 48 |
BUFG/BUFGCTRLs | 7 | 1 | 2 |
Benchmarks | CPI without HMM | CPI with HMM | Performance Overhead |
---|---|---|---|
OpenECC | 2.94 | 3.07 | 9.52% |
SHA1 | 2.12 | 2.23 | 5.19% |
FFT | 2.32 | 2.41 | 6.03% |
CRC16 | 1.68 | 1.78 | 3.57% |
BasicMath | 2.41 | 2.53 | 8.71% |
AES | 3.46 | 3.59 | 6.36% |
Bitcount | 1.52 | 1.64 | 5.92% |
Blowfish | 3.54 | 3.87 | 4.80% |
Patricia | 1.52 | 1.65 | 7.89% |
QuickSort | 1.86 | 1.98 | 3.76% |
Average | 2.34 | 2.48 | 6.18% |
Integrity Protection Methods | Protect the DI | Protect the CFI | Resource Overhead | Performance Overhead |
---|---|---|---|---|
Parallel Cryptographic Accelerator [1] | Yes | No | The occupied slices for the proposed module are around 69.2% of the total SoC. | 2.65% |
Instruction Stream Integrity Checker [10] | Yes | No | The on-chip storage requirement is less than 26.30 KB. | <3.45% |
Hardware-Enhanced Protection [11] | Yes | No | The occupied slices for the proposed module are around 44.9% of the total SoC. | <2.25% |
MicroGuard [5] | No | Yes | Compared to the baseline, the increase in the code size is more than 181%. | >19% |
FPGA-based CFI Solution [23] | No | Yes | The increase in the number of instructions is less than 3.72%. | From 0.01% to 193% |
HCIC [31] | No | Yes | The increase in the binary size is 0.78%. | 0.95% |
Security Monitoring Unit (SMU) [12] | Yes | Yes | Compared to the baseline, the area increased by 20.99%. | 9.33% |
Dynamic Sequence Checker (DSC) [32] | Yes | Yes (Except for the indirect jumps) | The storage overhead incurred due to appending the Hamming code is 4.1% | 4.7% |
Our proposed HIIMA | Yes | Yes | The on-chip storage requirement is less than 58.77 KB, and the occupied slices for the HMM are 9.3%. | 6.18% |
Publisher’s Note: MDPI stays neutral with regard to jurisdictional claims in published maps and institutional affiliations. |
© 2022 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (https://creativecommons.org/licenses/by/4.0/).
Share and Cite
Hao, Q.; Zhang, Z.; Xu, D.; Wang, J.; Liu, J.; Zhang, J.; Ma, J.; Wang, X. A Hardware Security-Monitoring Architecture Based on Data Integrity and Control Flow Integrity for Embedded Systems. Appl. Sci. 2022, 12, 7750. https://doi.org/10.3390/app12157750
Hao Q, Zhang Z, Xu D, Wang J, Liu J, Zhang J, Ma J, Wang X. A Hardware Security-Monitoring Architecture Based on Data Integrity and Control Flow Integrity for Embedded Systems. Applied Sciences. 2022; 12(15):7750. https://doi.org/10.3390/app12157750
Chicago/Turabian StyleHao, Qiang, Zhun Zhang, Dongdong Xu, Jiqing Wang, Jiakang Liu, Jinlei Zhang, Jinhui Ma, and Xiang Wang. 2022. "A Hardware Security-Monitoring Architecture Based on Data Integrity and Control Flow Integrity for Embedded Systems" Applied Sciences 12, no. 15: 7750. https://doi.org/10.3390/app12157750
APA StyleHao, Q., Zhang, Z., Xu, D., Wang, J., Liu, J., Zhang, J., Ma, J., & Wang, X. (2022). A Hardware Security-Monitoring Architecture Based on Data Integrity and Control Flow Integrity for Embedded Systems. Applied Sciences, 12(15), 7750. https://doi.org/10.3390/app12157750