103 research outputs found

    AppGuard ā€” fine-grained policy enforcement for untrusted android applications

    Get PDF
    Androidā€™s success makes it a prominent target for malicious software. However, the user has very limited control over security-relevant operations. This work presents AppGuard, a powerful and flexible security system that overcomes these deficiencies. It enforces user-defined security policies on untrusted Android applications without requiring any changes to a smartphoneā€™s firmware, root access, or the like. Finegrained and stateful security policies are expressed in a formal specification language, which also supports secrecy requirements. Our system offers complete mediation of security-relevant methods based on calleesite inline reference monitoring and supports widespread deployment. In the experimental analysis we demonstrate the removal of permissions for overly curious apps as well as how to defend against several recent real-world attacks on Android phones. Our technique exhibits very little space and runtime overhead. The utility of AppGuard has already been demonstrated by more than 1,000,000 downloads

    Interleaving coverage criteria oriented testing of multithreaded applications

    Get PDF
    Concurrent programs run several to thousands of processes or threads in parallel and the correctness of the outcome is critical. Successful tests for deterministic systems can not be applied to concurrent programs, because of their non-deterministic behavior. Exhaustive testing is not applicable because of the search space and testing costs. We have designed a testing algorithm that produces Sequence Covering Arrays of a concurrent program's execution segments, and tests these interleaving sequences. We provide a coverage metric that works as a measure to de ne the ratio of covered test possibilities. Our approach relies on the sequence covering arrays to cover all interleavings, while requiring least amount of testing. This thesis presents the Interleaving Coverage Criteria-oriented testing of multithreaded programs, it's utility programs to take over the control of applications to run tests and the case studies that we have done to show the efficiency of the system against exhaustive testing and its variants

    Applications of information sharing for code generation in process virtual machines

    Get PDF
    As the backbone of many computing environments today, it is important that process virtual machines be both performant and robust in mobile, personal desktop, and enterprise applications. This thesis focusses on code generation within these virtual machines, particularly addressing situations where redundant work is being performed. The goal is to exploit information sharing in order to improve the performance and robustness of virtual machines that are accelerated by native code generation. First, the thesis investigates the potential to share generated code between multiple threads in a dynamic binary translator used to perform instruction set simulation. This is done through a code generation design that allows native code to be executed by any simulated core and adding a mechanism to share native code regions between threads. This is shown to improve the average performance of multi-threaded benchmarks by 1.4x when simulating 128 cores on a quad-core host machine. Secondly, the ahead-of-time code generation system used for executing Android applications is improved through the use of profiling. The thesis investigates the potential for profiles produced by individual users of applications to be shared and merged together to produce a generic profile that still provides a lot of benefit for a new user who is then able to skip the expensive profiling phase. These profiles can not only be used for selective compilation to reduce code-size and installation time, but can also be used for focussed optimisation on vital code regions of an application in order to improve overall performance. With selective compilation applied to a set of popular Android applications, code-size can be reduced by 49.9% on average, while installation time can be reduced by 31.8%, with only an average 8.5% increase in the amount of sequential runtime required to execute the collected profiles. The thesis also shows that, among the tested users, the use of a crowd-sourced and merged profile does not significantly affect their estimated performance loss from selective compilation (0.90x-0.92x) in comparison to when they they perform selective compilation with their own unique profile (0.93x). Furthermore, by proposing a new, more powerful code generator for Androidā€™s virtual machine, these same profiles can be used to perform focussed optimisation, which preliminary results show to increase runtime performance across a set of common Android benchmarks by 1.46x-10.83x. Finally, in such a situation where a new code generator is being added to a virtual machine, it is also important to test the code generator for correctness and robustness. The methods of execution of a virtual machine, such as interpreters and code generators, must share a set of semantics about how programs must be executed, and this can be exploited in order to improve testing. This is done through the application of domain-aware binary fuzzing and differential testing within Androidā€™s virtual machine. The thesis highlights a series of actual code generation and verification bugs that were found in Androidā€™s virtual machine using this testing methodology, as well as comparing the proposed approach to other state-of-the-art fuzzing techniques

    Performance Improvement of Multithreaded Java Applications Execution on Multiprocessor Systems

    Get PDF
    El disseny del llenguatge Java, que inclou aspectes importants com sĆ³n la seva portabilitat i neutralitat envers l'arquitectura, les seves capacitats multithreading, la seva familiaritat (degut a la seva semblanƧa amb C/C++), la seva robustesa, les seves capacitats en seguretat i la seva naturalesa distribuĆÆda, fan que sigui un llenguatge potencialment interessant per ser utilitzat en entorns paralĀ·lels com sĆ³n els entorns de computaciĆ³ d'altes prestacions (HPC), on les aplicacions poden treure profit del suport que ofereix Java a l'execuciĆ³ multithreaded per realitzar cĆ lculs en paralĀ·lel, o en entorns e-business, on els servidors Java multithreaded (que segueixen l'especificaciĆ³ J2EE) poden treure profit de les capacitats multithreading de Java per atendre de manera concurrent un gran nombre de peticions.No obstant, l'Ćŗs de Java per la programaciĆ³ paralĀ·lela ha d'enfrontar-se a una sĆØrie de problemes que fĆ cilment poden neutralitzar el guany obtingut amb l'execuciĆ³ en paralĀ·lel. El primer problema Ć©s el gran overhead provocat pel suport de threads de la JVM quan s'utilitzen threads per executar feina de gra fi, quan es crea un gran nombre de threads per suportar l'execuciĆ³ d'una aplicaciĆ³ o quan els threads interaccionen estretament mitjanƧant mecanismes de sincronitzaciĆ³. El segon problema Ć©s la degradaciĆ³ en el rendiment produĆÆda quan aquestes aplicacions multithreaded s'executen en sistemes paralĀ·lels multiprogramats. La principal causa d'aquest problemes Ć©s la manca de comunicaciĆ³ entre l'entorn d'execuciĆ³ i les aplicacions, la qual pot induir a les aplicacions a fer un Ćŗs descoordinat dels recursos disponibles.Aquesta tesi contribueix amb la definiciĆ³ d'un entorn per analitzar i comprendre el comportament de les aplicacions Java multithreaded. La contribuciĆ³ principal d'aquest entorn Ć©s que la informaciĆ³ de tots els nivells involucrats en l'execuciĆ³ (aplicaciĆ³, servidor d'aplicacions, JVM i sistema operatiu) estĆ  correlada. Aquest fet Ć©s molt important per entendre com aquest tipus d'aplicacions es comporten quan s'executen en entorns que inclouen servidors i mĆ quines virtuals, donat que l'origen dels problemes de rendiment es pot trobar en qualsevol d'aquests nivells o en la seva interacciĆ³.Addicionalment, i basat en el coneixement adquirit mitjanƧant l'entorn d'anĆ lisis proposat, aquesta tesi contribueix amb mecanismes i polĆ­tiques de planificaciĆ³ orientats cap a l'execuciĆ³ eficient d'aplicacions Java multithreaded en sistemes multiprocessador considerant les interaccions i la coordinaciĆ³ dels mecanismes i les polĆ­tiques de planificaciĆ³ en els diferents nivells involucrats en l'execuciĆ³. La idea bĆ sica consisteix en permetre la cooperaciĆ³ entre les aplicacions i l'entorn d'execuciĆ³ en la gestiĆ³ de recursos establint una comunicaciĆ³ bi-direccional entre les aplicacions i el sistema. Per una banda, les aplicacions demanen a l'entorn d'execuciĆ³ la quantitat de recursos que necessiten. Per altra banda, l'entorn d'execuciĆ³ pot ser inquirit en qualsevol moment per les aplicacions ser informades sobre la seva assignaciĆ³ de recursos. Aquesta tesi proposa que les aplicacions utilitzin la informaciĆ³ proporcionada per l'entorn d'execuciĆ³ per adaptar el seu comportament a la quantitat de recursos que tenen assignats (aplicacions auto-adaptables). Aquesta adaptaciĆ³ s'assoleix en aquesta tesi per entorns HPC per mitjĆ  de la malĀ·leabilitat de les aplicacions, i per entorns e-business amb una proposta de control de congestiĆ³ que fa control d'admissiĆ³ basat en la diferenciaciĆ³ de connexions SSL per prevenir la degradaciĆ³ del rendiment i mantenir la Qualitat de Servei (QoS).Els resultats de l'avaluaciĆ³ demostren que subministrar recursos de manera dinĆ mica a les aplicacions auto-adaptables en funciĆ³ de la seva demanda millora el rendiment de les aplicacions Java multithreaded tant en entorns HPC com en entorns e-business. Mentre disposar d'aplicacions auto-adaptables evita la degradaciĆ³ del rendiment, el subministrament dinĆ mic de recursos permet satisfer els requeriments de les aplicacions en funciĆ³ de la seva demanda i adaptar-se a la variabilitat de les seves necessitats de recursos. D'aquesta manera s'aconsegueix una millor utilitzaciĆ³ dels recursos donat que els recursos que no utilitza una aplicaciĆ³ determinada poden ser distribuĆÆts entre les altres aplicacions.The design of the Java language, which includes important aspects such as its portability and architecture neutrality, its multithreading facilities, its familiarity (due to its resemblance with C/C++), its robustness, its security capabilities and its distributed nature, makes it a potentially interesting language to be used in parallel environments such as high performance computing (HPC) environments, where applications can benefit from the Java multithreading support for performing parallel calculations, or e-business environments, where multithreaded Java application servers (i.e. following the J2EE specification) can take profit of Java multithreading facilities to handle concurrently a large number of requests.However, the use of Java for parallel programming has to face a number of problems that can easily offset the gain due to parallel execution. The first problem is the large overhead incurred by the threading support available in the JVM when threads are used to execute fine-grained work, when a large number of threads are created to support the execution of the application or when threads closely interact through synchronization mechanisms. The second problem is the performance degradation occurred when these multithreaded applications are executed in multiprogrammed parallel systems. The main issue that causes these problems is the lack of communication between the execution environment and the applications, which can cause these applications to make an uncoordinated use of the available resources.This thesis contributes with the definition of an environment to analyze and understand the behavior of multithreaded Java applications. The main contribution of this environment is that all levels in the execution (application, application server, JVM and operating system) are correlated. This is very important to understand how this kind of applications behaves when executed on environments that include servers and virtual machines, because the origin of performance problems can reside in any of these levels or in their interaction.In addition, and based on the understanding gathered using the proposed analysis environment, this thesis contributes with scheduling mechanisms and policies oriented towards the efficient execution of multithreaded Java applications on multiprocessor systems considering the interactions and coordination between scheduling mechanisms and policies at the different levels involved in the execution. The basis idea consists of allowing the cooperation between the applications and the execution environment in the resource management by establishing a bi-directional communication path between the applications and the underlying system. On one side, the applications request to the execution environment the amount of resources they need. On the other side, the execution environment can be requested at any time by the applications to inform them about their resource assignments. This thesis proposes that applications use the information provided by the execution environment to adapt their behavior to the amount of resources allocated to them (self-adaptive applications). This adaptation is accomplished in this thesis for HPC environments through the malleability of the applications, and for e-business environments with an overload control approach that performs admission control based on SSL connections differentiation for preventing throughput degradation and maintaining Quality of Service (QoS).The evaluation results demonstrate that providing resources dynamically to self-adaptive applications on demand improves the performance of multithreaded Java applications as in HPC environments as in e-business environments. While having self-adaptive applications avoids performance degradation, dynamic provision of resources allows meeting the requirements of the applications on demand and adapting to their changing resource needs. In this way, better resource utilization is achieved because the resources not used by some application may be distributed among other applications

    Retrofitting privacy controls to stock Android

    Get PDF
    Android ist nicht nur das beliebteste Betriebssystem fĆ¼r mobile EndgerƤte, sondern auch ein ein attraktives Ziel fĆ¼r Angreifer. Um diesen zu begegnen, nutzt Androids Sicherheitskonzept App-Isolation und Zugangskontrolle zu kritischen Systemressourcen. Nutzer haben dabei aber nur wenige Optionen, App-Berechtigungen gemƤƟ ihrer BedĆ¼rfnisse einzuschrƤnken, sondern die Entwickler entscheiden Ć¼ber zu gewƤhrende Berechtigungen. Androids Sicherheitsmodell kann zudem nicht durch Dritte angepasst werden, so dass Nutzer zum Schutz ihrer PrivatsphƤre auf die GerƤtehersteller angewiesen sind. Diese Dissertation prƤsentiert einen Ansatz, Android mit umfassenden PrivatsphƤreeinstellungen nachzurĆ¼sten. Dabei geht es konkret um Techniken, die ohne Modifikationen des Betriebssystems oder Zugriff auf Root-Rechte auf regulƤren Android-GerƤten eingesetzt werden kƶnnen. Der erste Teil dieser Arbeit etabliert Techniken zur Durchsetzung von Sicherheitsrichtlinien fĆ¼r Apps mithilfe von inlined reference monitors. Dieser Ansatz wird durch eine neue Technik fĆ¼r dynamic method hook injection in Androids Java VM erweitert. SchlieƟlich wird ein System eingefĆ¼hrt, das prozessbasierte privilege separation nutzt, um eine virtualisierte App-Umgebung zu schaffen, um auch komplexe Sicherheitsrichtlinien durchzusetzen. Eine systematische Evaluation unseres Ansatzes konnte seine praktische Anwendbarkeit nachweisen und mehr als eine Million Downloads unserer Lƶsung zeigen den Bedarf an praxisgerechten Werkzeugen zum Schutz der PrivatsphƤre.Android is the most popular operating system for mobile devices, making it a prime target for attackers. To counter these, Androidā€™s security concept uses app isolation and access control to critical system resources. However, Android gives users only limited options to restrict app permissions according to their privacy preferences but instead lets developers dictate the permissions users must grant. Moreover, Androidā€™s security model is not designed to be customizable by third-party developers, forcing users to rely on device manufacturers to address their privacy concerns. This thesis presents a line of work that retrofits comprehensive privacy controls to the Android OS to put the user back in charge of their device. It focuses on developing techniques that can be deployed to stock Android devices without firmware modifications or root privileges. The first part of this dissertation establishes fundamental policy enforcement on thirdparty apps using inlined reference monitors to enhance Androidā€™s permission system. This approach is then refined by introducing a novel technique for dynamic method hook injection on Androidā€™s Java VM. Finally, we present a system that leverages process-based privilege separation to provide a virtualized application environment that supports the enforcement of complex security policies. A systematic evaluation of our approach demonstrates its practical applicability, and over one million downloads of our solution confirm user demand for privacy-enhancing tools

    Unwoven Aspect Analysis

    Get PDF
    Various languages and tools supporting advanced separation of concerns (such as aspect-oriented programming) provide a software developer with the ability to separate functional and non-functional programmatic intentions. Once these separate pieces of the software have been speciļ¬ed, the tools automatically handle interaction points between separate modules, relieving the developer of this chore and permitting more understandable, maintainable code. Many approaches have left traditional compiler analysis and optimization until after the composition has been performed; unfortunately, analyses performed after composition cannot make use of the logical separation present in the original program. Further, for modular systems that can be conļ¬gured with diļ¬€erent sets of features, testing under every possible combination of features may be necessary and time-consuming to avoid bugs in production software. To solve this testing problem, we investigate a feature-aware compiler analysis that runs during composition and discovers features strongly independent of each other. When the their independence can be judged, the number of feature combinations that must be separately tested can be reduced. We develop this approach and discuss our implementation. We look forward to future programming languages in two ways: we implement solutions to problems that are conceptually aspect-oriented but for which current aspect languages and tools fail. We study these cases and consider what language designs might provide even more information to a compiler. We describe some features that such a future language might have, based on our observations of current language deļ¬ciencies and our experience with compilers for these languages

    On the Security of Software Systems and Services

    Get PDF
    This work investigates new methods for facing the security issues and threats arising from the composition of software. This task has been carried out through the formal modelling of both the software composition scenarios and the security properties, i.e., policies, to be guaranteed. Our research moves across three different modalities of software composition which are of main interest for some of the most sensitive aspects of the modern information society. They are mobile applications, trust-based composition and service orchestration. Mobile applications are programs designed for being deployable on remote platforms. Basically, they are the main channel for the distribution and commercialisation of software for mobile devices, e.g., smart phones and tablets. Here we study the security threats that affect the application providers and the hosting platforms. In particular, we present a programming framework for the development of applications with a static and dynamic security support. Also, we implemented an enforcement mechanism for applying fine-grained security controls on the execution of possibly malicious applications. In addition to security, trust represents a pragmatic and intuitive way for managing the interactions among systems. Currently, trust is one of the main factors that human beings keep into account when deciding whether to accept a transaction or not. In our work we investigate the possibility of defining a fully integrated environment for security policies and trust including a runtime monitor. Finally, Service-Oriented Computing (SOC) is the leading technology for business applications distributed over a network. The security issues related to the service networks are many and multi-faceted. We mainly deal with the static verification of secure composition plans of web services. Moreover, we introduce the synthesis of dynamic security checks for protecting the services against illegal invocations

    OSCAR. A Noise Injection Framework for Testing Concurrent Software

    Get PDF
    ā€œMooreā€™s Lawā€ is a well-known observable phenomenon in computer science that describes a visible yearly pattern in processorā€™s die increase. Even though it has held true for the last 57 years, thermal limitations on how much a processorā€™s core frequencies can be increased, have led to physical limitations to their performance scaling. The industry has since then shifted towards multicore architectures, which offer much better and scalable performance, while in turn forcing programmers to adopt the concurrent programming paradigm when designing new software, if they wish to make use of this added performance. The use of this paradigm comes with the unfortunate downside of the sudden appearance of a plethora of additional errors in their programs, stemming directly from their (poor) use of concurrency techniques. Furthermore, these concurrent programs themselves are notoriously hard to design and to verify their correctness, with researchers continuously developing new, more effective and effi- cient methods of doing so. Noise injection, the theme of this dissertation, is one such method. It relies on the ā€œprobe effectā€ ā€” the observable shift in the behaviour of concurrent programs upon the introduction of noise into their routines. The abandonment of ConTest, a popular proprietary and closed-source noise injection framework, for testing concurrent software written using the Java programming language, has left a void in the availability of noise injection frameworks for this programming language. To mitigate this void, this dissertation proposes OSCAR ā€” a novel open-source noise injection framework for the Java programming language, relying on static bytecode instrumentation for injecting noise. OSCAR will provide a free and well-documented noise injection tool for research, pedagogical and industry usage. Additionally, we propose a novel taxonomy for categorizing new and existing noise injection heuristics, together with a new method for generating and analysing concurrent software traces, based on string comparison metrics. After noising programs from the IBM Concurrent Benchmark with different heuristics, we observed that OSCAR is highly effective in increasing the coverage of the interleaving space, and that the different heuristics provide diverse trade-offs on the cost and benefit (time/coverage) of the noise injection process.Resumo A ā€œLei de Mooreā€ Ć© um fenĆ³meno, bem conhecido na Ć”rea das ciĆŖncias da computaĆ§Ć£o, que descreve um padrĆ£o evidente no aumento anual da densidade de transĆ­stores num processador. Mesmo mantendo-se vĆ”lido nos Ćŗltimos 57 anos, o aumento do desempenho dos processadores continua garrotado pelas limitaƧƵes tĆ©rmicas inerentes `a subida da sua frequĆŖncia de funciona- mento. Desde entĆ£o, a industria transitou para arquiteturas multi nĆŗcleo, com significativamente melhor e mais escalĆ”vel desempenho, mas obrigando os programadores a adotar o paradigma de programaĆ§Ć£o concorrente ao desenhar os seus novos programas, para poderem aproveitar o desempenho adicional que advĆ©m do seu uso. O uso deste paradigma, no entanto, traz consigo, por consequĆŖncia, a introduĆ§Ć£o de uma panĆ³plia de novos erros nos programas, decorrentes diretamente da utilizaĆ§Ć£o (inadequada) de tĆ©cnicas de programaĆ§Ć£o concorrente. Adicionalmente, estes programas concorrentes sĆ£o conhecidos por serem consideravelmente mais difĆ­ceis de desenhar e de validar, quanto ao seu correto funcionamento, incentivando investi- gadores ao desenvolvimento de novos mĆ©todos mais eficientes e eficazes de o fazerem. A injeĆ§Ć£o de ruĆ­do, o tema principal desta dissertaĆ§Ć£o, Ć© um destes mĆ©todos. Esta baseia-se no ā€œefeito sondaā€ (do inglĆŖs ā€œprobe effectā€) ā€” caracterizado por uma mudanƧa de comportamento observĆ”vel em programas concorrentes, ao terem ruĆ­do introduzido nas suas rotinas. Com o abandono do Con- Test, uma framework popular, proprietĆ”ria e de cĆ³digo fechado, de anĆ”lise dinĆ¢mica de programas concorrentes atravĆ©s de injecĆ§Ć£o de ruĆ­do, escritos com recurso `a linguagem de programaĆ§Ć£o Java, viu-se surgir um vazio na oferta de framework de injeĆ§Ć£o de ruĆ­do, para esta mesma linguagem. Para mitigar este vazio, esta dissertaĆ§Ć£o propƵe o OSCAR ā€” uma nova framework de injeĆ§Ć£o de ruĆ­do, de cĆ³digo-aberto, para a linguagem de programaĆ§Ć£o Java, que utiliza manipulaĆ§Ć£o estĆ”tica de bytecode para realizar a introduĆ§Ć£o de ruĆ­do. O OSCAR pretende oferecer uma ferramenta livre e bem documentada de injeĆ§Ć£o de ruĆ­do para fins de investigaĆ§Ć£o, pedagĆ³gicos ou atĆ© para a indĆŗstria. Adicionalmente, a dissertaĆ§Ć£o propƵe uma nova taxonomia para categorizar os dife- rentes tipos de heurĆ­sticas de injecĆ§Ć£o de ruĆ­dos novos e existentes, juntamente com um mĆ©todo para gerar e analisar traces de programas concorrentes, com base em mĆ©tricas de comparaĆ§Ć£o de strings. ApĆ³s inserir ruĆ­do em programas do IBM Concurrent Benchmark, com diversas heurĆ­sticas, ob- servĆ”mos que o OSCAR consegue aumentar significativamente a dimensĆ£o da cobertura do espaƧo de estados de programas concorrentes. Adicionalmente, verificou-se que diferentes heurĆ­sticas produzem um leque variado de prĆ³s e contras, especialmente em termos de eficĆ”cia versus eficiĆŖncia
    • ā€¦
    corecore