jagomart
digital resources
picture1_Ccs19 Item Download 2023-02-03 03-10-23


 95x       Filetype PDF       File size 1.71 MB       Source: dingelish.com


File: Ccs19 Item Download 2023-02-03 03-10-23
session 10b tee ii ccs 19 november 11 15 2019 london united kingdom towardsmemorysafeenclaveprogrammingwithrust sgx huibowang 1 peiwang yuding mingshensun yimingjing randuan longli yulong zhang tao wei zhiqiang lin the ...

icon picture PDF Filetype PDF | Posted on 03 Feb 2023 | 2 years ago
Partial capture of text on file.
                     Session 10B: TEE II                                                                                        CCS ’19, November 11–15, 2019, London, United Kingdom
                          TowardsMemorySafeEnclaveProgrammingwithRust-SGX
                                  HuiboWang†1,PeiWang∗,YuDing∗,MingshenSun∗,YimingJing∗,RanDuan∗,LongLi∗,
                                                                              Yulong Zhang∗, Tao Wei∗, Zhiqiang Lin‡
                                                                                        †The University of Texas at Dallas
                                                                                                        ∗Baidu X-Lab
                                                                                              ‡The Ohio State University
                    ABSTRACT                                                                                          11ś15, 2019, London, United Kingdom. ACM, New York, NY, USA, 18 pages.
                    Intel Software Guard eXtension (SGX), a hardware supported                                        https://doi.org/10.1145/3319535.3354241
                    trustedexecutionenvironment(TEE),isdesignedtoprotectsecurity
                    critical applications. However, it does not terminate traditional                                 1 INTRODUCTION
                    memorycorruption vulnerabilities for the software running inside                                  Software developed with type unsafe languages such as C/C++ is
                    enclave, since enclave software is still developed with type unsafe                               subject to memory corruption, such as buffer overflow, integer
                    languages such as C/C++. This paper presents Rust-SGX, an                                         overflow, double free, and use after free. Memory corruption
                    efficient and layered approachtoexterminatingmemorycorruption                                     attacks have been one of the most severe cyber threats for over
                    for software running inside SGX enclaves. The key idea is to enable                               40 years. Numerous such attacks have occurred, including Morris
                    the development of enclave programs with an efficient memory                                      Worm[1],stacksmashing[26],return-into-libc[35],returnoriented
                    safe system language Rust with a Rust-SGX SDK by solving the                                      programming(ROP)[29](anditsvariants such as BROP [10] and
                    key challenges of how to (1) make the SGX software memory safe                                    JIT-ROP[31]),jumporientedprogramming(JOP)[11],calloriented
                    and (2) meanwhile run as efficiently as with the SDK provided                                     programming (COP) [27], and even data-oriented programming
                    byIntel. We therefore propose to build Rust-SGX atop Intel SGX                                    (DOP)[16]. It is likely that these attacks will continue to remain a
                    SDK,andtameunsafecomponentswithformallyprovenmemory                                               major cyber threat for years to come.
                    safety. We have implemented Rust-SGX and tested with a series of                                      Several years ago, Intel introduced Software Guard eXtensions
                    benchmarkprograms. Our evaluation results show that Rust-SGX                                      (SGX)initsSkylakeCPU,whichprovidesapplicationprogrammers
                    imposes little extra overhead (less than 5% with respect to the SGX                               the capability to execute code in a secure enclave, namely an
                    specific features and services compared to software developed by                                  isolated trusted execution environment (TEE) [24]. In particular,
                    Intel SGX SDK), and meanwhile have stronger memory safety.                                        SGXisolates sensitive code and data from the operating systems,
                    CCSCONCEPTS                                                                                       hypervisors, BIOS, and other applications. It guarantees confiden-
                    · Security and privacy → Formal methods and theory of                                             tiality and integrity of enclave programs even when the systems
                    security; Systems security;                                                                       software such as operating systems, hypervisors, and BIOS are
                                                                                                                      compromised. However, SGX hardware does not guarantee any
                    KEYWORDS                                                                                          memorysafetyfor the software running inside enclave, since they
                                                                                                                      are still developed with memory unsafe languages such as C/C++
                    SGX,RustProgrammingLanguage,MemorySafety,TypeSystem                                               or assembly today.
                    Soundness                                                                                             As a result, SGX programs still face the traditional memory
                    ACMReferenceFormat:                                                                               corruption vulnerabilities as does traditional software. This can
                                    †1              ∗           ∗                    ∗                ∗               seriously undermine the security guarantee provided by SGX, and
                    HuiboWang ,PeiWang ,YuDing ,MingshenSun ,YimingJing ,Ran                                          allowattackerstoviolatetheintegrityandconfidentialityofenclave
                           ∗           ∗                   ∗           ∗                  ‡
                    Duan , Long Li , Yulong Zhang , Tao Wei , Zhiqiang Lin . 2019. Towards                            programs.Forinstance,whentheenclavecodeisimplementedwith
                    MemorySafeEnclaveProgrammingwithRust-SGX.In2019ACMSIGSAC                                          memorycorruptionvulnerabilities,ithasbeenshownthatattackers
                    Conference on Computer and Communications Security (CCS ’19), November                            can leverage return-oriented programming (ROP) [29] to perform
                    1Thebulkofthis work was done while the first author was interning at Baidu X-Lab.                 memoryhijacking to leak secrets [9, 21]. Although randomization-
                    Permission to make digital or hard copies of all or part of this work for personal or             basedapproaches[28]havebeenproposedtomitigatesuchattacks,
                    classroom use is granted without fee provided that copies are not made or distributed             Biondoetal. [9] have also pointed out that SGX runtime inherently
                    for profit or commercial advantage and that copies bear this notice and the full citation         contains memory regions whose addresses are fixed, and it is
                    onthefirst page. Copyrights for components of this work owned by others than ACM                  therefore difficult to completely eradicate such threats.
                    mustbehonored.Abstractingwithcreditispermitted.Tocopyotherwise,orrepublish,                           Overthepastdecades, a large number of defense mechanisms
                    to post on servers or to redistribute to lists, requires prior specific permission and/or a
                    fee. Request permissions from permissions@acm.org.                                                have been proposed to defeat memory corruption attacks, such as
                    CCS’19, November 11ś15, 2019, London, United Kingdom                                              StackCanaries[13],DataExecutionPrevention(DEP)[34],Address
                    ©2019Association for Computing Machinery.                                                         Space Layout Randomization (ASLR) [18], Control Flow Integrity
                    ACMISBN978-1-4503-6747-9/19/11...$15.00                                                           (CFI) [6], so on and so forth. However, they all are imperfect for
                    https://doi.org/10.1145/3319535.3354241
                                                                                                               2333
               Session 10B: TEE II                                                             CCS ’19, November 11–15, 2019, London, United Kingdom
               various reasons such as the performance cost outweighing the             with Rust-SGX has indicated that programming with Rust-SGX is
               potential protection, incompatibility with legacy systems, relying       productive, efficient, and reliable.
               on changes in the compiler tool chain, or requiring the access           Contributions. To summarize, we make the following contribu-
               of program source-code. It is thus imperative to look for other          tions in this paper:
               alternatives to secure SGX enclaves programs.                                 • We present Rust-SGX, a practical and layered approach
                  Since SGX is a brand new platform, where not as many legacy                  to exterminating memory corruptions for SGX enclave
               applications need support, it provides a perfect opportunity of                 programs.
               using efficient memory safe system languages to develop enclave               • Weproposetheuseoftypesafetyandformalprooftohandle
               programs instead of relying on traditional defenses such as ASLR                theunsafecomponentswhendealingwithalayeredmemory
               or CFI. Today, there are a variety of programming languages                     safety model.
               with memory safe features including Rust, Go, Swift, JavaScript,              • We have implemented Rust-SGX and evaluated it with a
               Java, Python, and Solidity. Enabling the use of these programming               number of benchmark programs. Our evaluation results
               languages for SGX program development would be an appealing                     showthatRust-SGXfullypreserves the SGX functionality
               approach to terminate the memory corruptions inside enclave.                    andmeanwhiledoesnotimposeanysignificantperformance
                  However, there are still enormous challenges when enabling                   overhead.
               a memory safe language for enclave software development. In
               particular, memory safe programming languages often contain              Roadmap. The rest of this paper is organized as follows. In
               memory-unsafe components, such as Java’s JVM, Python’s C                 ğ2, we provide necessary background related to Intel SGX and
               libraries, Swift’s Object-C runtime, JavaScript’s garbage collection     Rust programming language. ğ3 describes the objectives, threat
               (GC) engine, Go’s assembly code, and Rust’s unsafe features.             modelandscope,challenges and architecture of Rust-SGX. Next,
               Second, not all components inside the enclave can be developed           we present how we perform secure binding between Rust and
               with memory safe languages, such as the SGX feature specific             C/C++ (ğ4), formalize and prove the memory safety (ğ5), with
               instructions (e.g., remote attestation) and also the performance         implementation (ğ6), evaluation (ğ7), and applications (ğ8) of Rust-
               critical cryptography operations, as they may have to be written in      SGX,respectively. In ğ9, we discuss the limitations and future work,
               assembly languages.                                                      followed by related work in ğ10. Finally, ğ11 concludes the paper.
                  Therefore, it is impractical to have every component inside SGX
               enclave to be memory safe. Practical memory safety inside enclave        2 BACKGROUND
               needs to be contained and layered. Rust-SGX, a new memory                2.1    Intel SGX
               safe SGX SDK proposed in this work, is designed based on this            Intel SGX is designed to provide applications the capability of
               observation. More specifically, we leverage Intel SGX SDK as the         executing code in a secure enclave while protecting secrets with
               foundation that provides a set of full fledged SGX development           their own execution environment [3, 24]. With SGX, application
               APIs, and add a Rust layer on top of it. With Rust-SGX, enclave          programmers can directly control the security of their applications
               programmerscandeveloptheir programs in pure Rust, and Rust-              without relying on any underlying system software such as the
               SGX will bridge the gap between the Rust world and Intel SGX             OSorhypervisor. Such a design significantly reduces the trusted
               interfaces. Compared to the enclave programs developed by Intel          computing base (TCB) to the smallest possible code (i.e., only the
               SGX SDK, the enclave programs developed with Rust-SGX are                code executed inside the enclave is trusted), and prevents various
               significantly more secure at the application layer thanks to the         software attacks even when the system software is compromised.
               memory-safe Rust language. Whereas at the library layer, they               TouseSGX,theapplications typically need to be implemented
               have equivalent security properties due to the same dependency           with two components: a trusted component and an untrusted
               onIntel SGX SDK.                                                         component. The trusted component is executed inside the enclave,
                  EnablingRustatopIntelSGXSDKisnon-trivial.Akeychallenge                whereas the untrusted component is executed outside. When data
               wemustsolveistomakesuretheforeignfunctioninterface (FFI)                 needs to be passed between trusted and untrusted components, it
               between memory-safe and memory-unsafe languages (i.e., Rust              has to be copied from and to the enclave because enclave memory
               andC/C++)issecure.Rust-SGXaddressesthisissueviaformalized                cannot be read directly outside of the enclave. Intel provides a
               modelingandproofofthememorysafetyoftheFFI.Atahighlevel,                  mechanismtocreatebridge functions by using its corresponding
               our formalization is inspired by both CCured [25] and the safe Java      SGXSDK.Abridgefunctionattheenclaveentrypointdispatches
               Native Interfaces (JNI) by Tan el al. [32], and we extend them to        calls to the corresponding functions inside the enclave. This allows
               secure the critical boundary code bridging the safe Rust world and       anenclavetorunonlycertainfunctionsspecifiedbythedevelopers.
               unsafe C/C++ world.                                                      These functions are called ECALLs, and they are called from the
                  WehaveimplementedRust-SGX,andtesteditwithanumberof                    untrusted component. There are also corresponding functions that
               benchmarkprograms. Our evaluation results show that Rust-SGX             resideintheuntrustedcomponentcalledOCALLs,whichareinvoked
               SDKonlyimposesimperceptible or modest overhead (less than 5%             inside the enclave to request services from the outside world.
               with respect to the SGX services compared to software developed
               by Intel SGX SDK). Rust-SGX has been released as an open source          2.2    TheRustProgrammingLanguage
               project. It has been widely employed by the community to develop
               memory-safe SGXenclaves since 2017. The community adoption               Rust [23] is a systems programming language, allowing developers
                                                                                        to have efficient implementation for systems software. It supports
                                                                                   2334
                Session 10B: TEE II                                                               CCS ’19, November 11–15, 2019, London, United Kingdom
                both functional and imperative-procedural programming. Rust is            abuse the łunsafež feature mentioned in ğ2.2 to produce Rust
                designed to be memory safe with zero-cost abstraction. Its unique         programs with exploitable memory bugs. To have a completely
                type system can statically guarantee the absence of uninitialized         secure development process, the enclave code should be audited
                variables, dangling pointers, race conditions, and other memory           (manually or automatically with machine checks) before being
                safety bugs. Meanwhile, Rust does not rely on any automated               deployed. Rust programs, by their nature, are significantly easier to
                garbage collection to reclaim memory resources, and instead most          audit than those written in memory unsafe languages, even with
                Rustobjectshavestaticallyknownlifetimeandtherestaremanaged                the presence of łunsafež code blocks. Nevertheless, how to audit
                through smart pointers. Rust does not allow null pointers, and the        the enclave code is also not within the scope of this work.
                data structures have to be acyclic.
                   AnimportantconceptinRusttogainstaticallyverifiablememory               3.2    Challenges
                safety is the memory ownership [23]. The basic rules of memory            Atahighlevel,therearetwodirectionstobuildmemorysafeRust-
                ownership dictate that each memory object has a single owner              SGX. The first one is to build it from scratch without relying on
                variable at each program point. When the owner variable goes out          anything, and the second is a layered approach in which Rust-SGX
                of scope, the value is automatically deallocated. Other variables         is built atop an existing full-fledged SDK (e.g., Intel SGX SDK).
                can temporarily łborrowž the object from its owner, but they have            To build Rust-SGX from scratch sounds very appealing. It
                to return it before the owner reaches the end of its lifetime. An         unfortunately faces erroneous challenges. First, SGX enclave
                object can be borrowed unlimited number of times when it is in an         programs heavily involve cryptographic computations (abstracted
                immutable state, whereas mutable borrows are exclusive. In this           as APIs), e.g., when communicating with outside enclave, the
                way, Rust ensures that no memory objects are both mutable and             messages needed to be encrypted or signed. It is challenging to
                aliased at the same time, eliminating memory errors.                      implement these cryptography APIs directly using Rust without
                   However,Rustdoesprovideamechanismtoallowprogrammers                    usingassemblycode,especiallyforperformancereasons.Ingeneral,
                to write code that bypasses its memory safety checks. This is a           cryptography algorithms get much better speedups from being
                necessary compromise when Rust needs to interact with other               written in assembly than most other programming languages. One
                languagesormanipulatethehardwaredirectly,sincethetypesafety               notable example is the Intel’s native AES-NI hardware implementa-
                ofRustisnotapplicabletocodeacrosstheseirregularprogramming                tion of the cipher, which can be directly invoked by the assembly
                boundary. An łunsafež keyword is introduced to mark unchecked             code.
                code for the convenience of additional security auditing.                    Second, now that Rust itself contains unsafe Rust and also
                3 OVERVIEW                                                                Rust-SGXinevitably has to include assembly code for the efficient
                3.1    Objectives, Threat model, and Scope                                cryptographic API implementations, we will not be able to develop
                                                                                          Rust-SGXpurelywithRust.Ontheotherhand,thereisalreadyfull-
                Thekeyobjective of Rust-SGX is to remove memory corruption                fledgedIntelSGXSDKavailablethatcontainsnotonlyperformance
                vulnerabilities inside SGX enclave by enabling the enclave software       efficient implementations for cryptography APIs, but also strong
                development with memory safe languages. Not all memory safe               supportofSGXfunctionalitysuchassealingandremoteattestation.
                languages (e.g., Python) are of our interest, and instead we have         There is no need to re-implement them in another language if we
                particular interest in the more efficient memory safe system              can still achieve the same performance. Therefore, we decide to
                languages. That is why we focus on Rust. However, we must ensure          build Rust-SGX atop Intel SGX SDK. This also leads to the second
                that our design and implementation will impose no significant             challenge we must solve: namely how to guarantee programs
                performance overhead when enabling Rust with SGX enclave                  developedwithRust-SGXstillhasefficientperformance,compared
                programming.                                                              to the enclave programs developed with traditional SGX SDKs.
                   Rust-SGX shares the same threat model as does Intel SGX;                  Third,withtheintegrationofIntelSGXSDKandalsotheoriginal
                namely, only the software running inside the enclave is trusted,          unsafe Rust, we must provide a safety guarantee in spite of these
                and the rest (e.g., operating systems and hypervisors) is untrusted.      unsafe components. With a layered approach, a practical way is
                Theparticular attacks Rust-SGX aims to defeat are those memory            to ensure the interfaces between layers are secure. For instance,
                corruptions that exploit the insecure memory operations inside            whenproviding APIs for Rust SGX programmers, we must ensure
                enclave programs. We do not provide any additional mechanisms             that the foreign function interface (FFI) is secure. That is, all the
                to defeat various side channel attacks (e.g., page [36], cache [15])      arguments and side effects of FFI function must be interposed and
                againstenclaveprograms,whichisorthogonaltothememorysafety                 verified.
                problem we aim to solve.                                                     Finally, there are also a number of engineering challenges
                   In this work, we only focus on enabling application layer              of implementing Rust-SGX, especially due to the discrepancies
                memory safety. The memory safety of the lower layer software              between the program execution model in enclave programs and
                such as the core SGX libraries (e.g., the cryptographic function          traditional Rust programs. For instance, static data can be easily
                implementations and SGX core service routines) are not within             initialized in Rust, but there is no such mechanisms in SGX enclave.
                our scope. Note that Rust-SGX only provides enclave developers            Also, unlike Rust thread, SGX thread does not have constructors
                with the support for building memory safe SGX applications;               nor destructors. In addition, Rust mutex is different compared to
                however,it does not enforce strict adherence to all rules of memory       SGXpthreadmutex,andwemustproperlyimplementRustmutex
                safe programming. For example, application developers can still           with SGX enclaves.
                                                                                     2335
               Session 10B: TEE II                                                             CCS ’19, November 11–15, 2019, London, United Kingdom
                                                                                        developed a scheme to safely call C functions inside a Java runtime
                       Enclave               Enclave               Enclave              environment via Java Native Interfaces (JNI). We face a similar
                      Application           Application          Application            situation in the design of Rust-SGX. Although the safety of Java
                                                                                        and Rust is enforced via different mechanisms, the details are
                 Rust-SGX Trusted APIs/Libs                                             independent of the approach of Tan et al. Therefore, we have to
                                                                                        modify and extend their techniques to securely binding the Rust
                   Trusted Runtime, Services
                  (sgx_trts,sgx_tservice,sgx
                                                   Standard Support Libs                language with the underlying Intel SGX SDK through carefully
                         _tseal,...)
                                                   (sgx_tstd,sgx_tdh,...)               designed foreign function interfaces (FFI).
                                                                      Rust World           Thecoreideais to regulate the behavior of unsafe C/C++ code
                                                                                        via a safe memory management scheme and an advanced type
                           Securely Binding Between C/C++ and Rust                      system (with certain run-time checks) that supports safe pointer
                                                                   C/C++ World          operations. In general, such a memory management scheme and
                                                                                        type system can restrict the expressiveness of the unsafe language
                  Trusted Runtime, Services
                                                  Standard Support Libs
                       (libsgx_trts.a,                                                  andaffect programmer’s productivity. For Rust-SGX, however, this
                                                     (libsgx_tstdc.a, 
                    libsgx_tservice.a,...)                                              is much less of a concern, since we only need to safely wrap a fixed
                                                    libsgx_tcxx.a,...)                  set of C/C++ APIs that are guaranteed to be stable by Intel. After a
                 Intel SGX Trusted APIs/Libs                                            thorough review of Intel SGX SDK, we found that the semantics of
                                                                                        theC/C++APIsareverysuitabletotheaforementionedsafetyregu-
                              Figure 1: Overview of Rust-SGX.                           lation. In the rest of this section, we show that it is feasible to design
                                                                                        a memory safe interpolation scheme between the Rust language
                                                                                        andIntel SGX SDK, with the safety properties formally proved.
               3.3    Architecture                                                         It is worth mentioning that our purpose is not to provide a
               Anoverviewof Rust-SGXispresentedinFigure1.Therearethree                  general memory safe Rust foreign function interface to C/C++, but
               layers inside Rust-SGX: (1) the bottom layer that is the Intel SGX       tosecurelyconnectRustwiththeC/C++interfaceofIntelSGXSDK.
               SDK(whichisimplementedinC/C++andalsoassembly),(2)the                     Therefore, we are allowed to exclude a considerable proportion of
               middle layer that is the Rust and Foreign function Interfaces (FFI)      C/C++semantics from our consideration. Many problems that are
               forC/C++,and(3)thetoplayerthatistheRustSGXSDK.Rust-SGX                   difficult to address for a general solution can be solved through
               provides memory safety by using Rust’s memory safe properties,           enumeration and a reasonable amount of manual checks, since the
               andmeanwhileensuringtheinterfaceofinteractingwiththelower                Intel SGX SDK only provides a finite set of C/C++ data structures
               Intel SGX SDK is memory safe.                                            andAPIsthatarenotextensible by enclave developers.
                  Notethat we cannot prove nor verify the memory safety of Intel
               SGXSDKduetoitslargecodebaseandheavyuseofC/C++,but                        4.1    Safe MemoryManagement
               if we can ensure the interaction between Rust world and C/C++            Bymanuallyauditing the semantics of all Intel SGX APIs, which
               world is secure and prove the Rust world can not be escaped, then        are clearly documented by an Intel-provided manual, we found that
               we can still ensure the memory safety of the Rust world. This            theseC/C++functionsareabletoensurehigh-degreeofsegregation
               is similar to the issues in which type safe language such as Java        betweentheheapsmanagedbytheRustworldandtheC/C++world.
               interactswiththeJavanativeinterface(JNI).However,therearestill           In particular, the C/C++ APIs never free, or hold references to, the
               substantial differences, e.g., Rust and Java are totally independent     memoryobjectsmanagedbycallers. Therefore, calling Intel APIs
               from language aspect, and meanwhile SGX SDK itself has a variety         preserves the safety invariant of the Rust heap without the need
               of data types. We must build a proper mapping between the Rust           of additional regulation.
               world and SGX world. The details of how we achieve this mapping             However, the Intel APIs do expose some objects allocated
               is presented in the next section.                                        on their private heap to the outside Rust world. One example
               4 SECUREBINDINGBETWEENRUSTAND                                            is sgx_sha256_init. This C/C++ API returns an allocated and
                                                                                        initialized SHA context state, which can later be reclaimed by the
                    C/C++                                                               Intel SDK through a pairing API, i.e., sgx_sha256_close. This
               Asourlayereddesignof Rust-SGXconsistsofcodewritteninboth                 opens a loophole that allows the Rust code to corrupt the C/C++
               C/C++ and Rust, it naturally raises the question of how we can           heap, which thus must be mitigated in the design of Rust-SGX.
               securely bind the two worlds together. Since the memory safety of           TherearetwopotentialproblemswhenaccessingC/C++heapvia
               C/C++andRustrelies on different security invariants, an arbitrary        Rustcodeifthebindingisinappropriatelydesigned.Thefirstisthat
               combinationofthetwoworldscannotbeguaranteedtobememory                    the Rust code may be able to manipulate the internal states of these
               safe. Therefore, we must add additional enforcement of how the           objects which are supposed to be hidden. We demonstrate that this
               twoworldsinteract with each other to assure that the two different       concern can be resolved by introducing type safety enforcement,
               language constructs are securely bound.                                  which will be explained in ğ4.2. The second problem is directly
                  Note that previous research has investigated how to achieve           relatedtothememorymanagement,i.e.,theRustcodemaycontinue
               memory safety in the context of the manner in which a safe               to operate on a C/C++ heap object after it has been freed, leading
               language interacts with an unsafe one. In particular, Tan et al. [32]    to memory errors such as use after free or double free. To deal
                                                                                  2336
The words contained in this file might help you see if this file matches what you are looking for:

...Session b tee ii ccs november london united kingdom towardsmemorysafeenclaveprogrammingwithrust sgx huibowang peiwang yuding mingshensun yimingjing randuan longli yulong zhang tao wei zhiqiang lin the university of texas at dallas baidu x lab ohio state abstract acm new york ny usa pages intel software guard extension a hardware supported https doi org trustedexecutionenvironment isdesignedtoprotectsecurity critical applications however it does not terminate traditional introduction memorycorruption vulnerabilities for running inside developed with type unsafe languages such as c is enclave since still subject to memory corruption buffer overflow integer this paper presents rust an double free and use after efficient layered approachtoexterminatingmemorycorruption attacks have been one most severe cyber threats over enclaves key idea enable years numerous occurred including morris development programs worm stacksmashing return into libc returnoriented safe system language sdk by solvin...

no reviews yet
Please Login to review.