34 research outputs found

    Towards Vulnerability Discovery Using Staged Program Analysis

    Full text link
    Eliminating vulnerabilities from low-level code is vital for securing software. Static analysis is a promising approach for discovering vulnerabilities since it can provide developers early feedback on the code they write. But, it presents multiple challenges not the least of which is understanding what makes a bug exploitable and conveying this information to the developer. In this paper, we present the design and implementation of a practical vulnerability assessment framework, called Melange. Melange performs data and control flow analysis to diagnose potential security bugs, and outputs well-formatted bug reports that help developers understand and fix security bugs. Based on the intuition that real-world vulnerabilities manifest themselves across multiple parts of a program, Melange performs both local and global analyses. To scale up to large programs, global analysis is demand-driven. Our prototype detects multiple vulnerability classes in C and C++ code including type confusion, and garbage memory reads. We have evaluated Melange extensively. Our case studies show that Melange scales up to large codebases such as Chromium, is easy-to-use, and most importantly, capable of discovering vulnerabilities in real-world code. Our findings indicate that static analysis is a viable reinforcement to the software testing tool set.Comment: A revised version to appear in the proceedings of the 13th conference on Detection of Intrusions and Malware & Vulnerability Assessment (DIMVA), July 201

    STATIC ANALYSIS OF SOURCE CODE MODELED FOR JAVA-PROGRAMS CONTAINING APPLICATIONS WITH ANDROID SECURITY

    Get PDF
    ЗдійснСно поєднання ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π² статичного Π°Π½Π°Π»Ρ–Π·Ρƒ Π· модСллю Π΄Π΅Π΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡ— ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠΈ ΠΉ використанням Ρ€Ρ–ΡˆΠ΅Π½ΡŒΡ‚Π΅ΠΎΡ€Ρ–Ρ— статичної ΠΌΠΎΠ΄Π΅Π»Ρ– (ВБМ) для створСння основи, яка, Π²Ρ€Π°Ρ…ΠΎΠ²ΡƒΡŽΡ‡ΠΈ аспСкт Π°Π½Π°Π»Ρ–Π·Ρƒ Π²ΠΈΡ…Ρ–Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Ρƒ,Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΡΡ‚Π²ΠΎΡ€ΡŽΡ”Ρ‚ΡŒΡΡ Π·Π° допомогою Π°Π½Π°Π»Ρ–Π·Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚Ρ€ΠΈΠΉ Π²ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΡ–Π½Ρ†Π΅Π²Ρƒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΡ€ΠΎ Ρ†Π΅ΠΉ аспСкт.Аналізатор Π³Π΅Π½Π΅Ρ€ΡƒΡ”Ρ‚ΡŒΡΡ ΡˆΠ»ΡΡ…ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ для Π·Π±ΠΎΡ€Ρƒ сСмантики Π· ΠΌΠ΅Ρ‚ΠΎΡŽ викладСння Ρ„ΠΎΡ€ΠΌΡƒΠ» Π² ΠΏΠ΅Ρ€ΡˆΠΎΠΌΡƒ Π½Π°Π±Π»ΠΈΠΆΠ΅Π½Π½Ρ– Π½Π° основі ΠΊΡ–Π»ΡŒΠΊΠΎΡ… прСдставлСних Ρ‚Π΅ΠΎΡ€Ρ–ΠΉ. ΠžΡΠΊΡ–Π»ΡŒΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π΄Ρ–ΠΉΡΠ½ΡŽΡ” Ρ–ΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ–Π² Ρ– використовує класові ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Ρ†ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Ρ–Π², Π²ΠΎΠ½Π° Ρ–ΠΌΠΏΠΎΡ€Ρ‚ΡƒΡ” сСмантику Π²ΠΈΠΊΠ»ΠΈΠΊΡ–Π² API Π² Π½Π°Π±Π»ΠΈΠΆΠ΅Π½Π½Ρ– ΠΏΠ΅Ρ€ΡˆΠΎΠ³ΠΎ порядку. Аналізатор, Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ Ρ†Ρ– наблиТСння як ΠΌΠΎΠ΄Π΅Π»Ρ– Ρ‚Π° Ρ—Ρ… Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈ ΠΏΠ΅Ρ€ΡˆΠΎΠ³ΠΎ порядку, Π·Π°Π»ΡƒΡ‡Π°Ρ” ΠΏΠΎΠ²Π΅Π΄Ρ–Π½ΠΊΡƒ спСцифікації (ΠΉΠΎΠ³ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ) описаної ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. Π Ρ–ΡˆΠ΅Π½Π½Ρ SMT-LIB Ρ„ΠΎΡ€ΠΌΡƒΠ» Ρ€ΠΎΠ·Π³Π»ΡΠ΄Π°Ρ”Ρ‚ΡŒΡΡ як ΠΊΠΎΠΌΠ±Ρ–Π½ΠΎΠ²Π°Π½Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‰ΠΎΠ± Ρ—Ρ… Β«ΠΎΠ±ΠΌΠ΅ΠΆΡƒΠ²Π°Ρ‚ΠΈΒ» Ρ‚Π° «розв’язувати». Π€ΠΎΡ€ΠΌΠ° «розв’язку» ΠΌΠΎΠΆΠ΅ використовуватися для Ρ–Π΄Π΅Π½Ρ‚ΠΈΡ„Ρ–ΠΊΠ°Ρ†Ρ–Ρ— Π»ΠΎΠ³Ρ–Ρ‡Π½ΠΈΡ… ΠΏΠΎΠΌΠΈΠ»ΠΎΠΊ (Π±Π΅Π·ΠΏΠ΅ΠΊΠΈ) Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Π½Π° Π±Π°Π·Ρ– Android. ВластивостібСзпСки Android прСдставлСно як ΠΎΠ±ΠΌΠ΅ΠΆΡƒΠ²Π°Π»ΡŒΠ½Ρ– Π°Π½Π°Π»Ρ–Ρ‚ΠΈΡ‡Π½Ρ– Ρ†Ρ–Π»Ρ–, Ρ‰ΠΎΠ± ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ Π²Π°ΠΆΠ»ΠΈΠ²Ρ–ΡΡ‚ΡŒ Ρ†ΠΈΡ… обмСТСнь.ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ сопоставлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² статичСского Π°Π½Π°Π»ΠΈΠ·Π° с модСлью Π΄Π΅Π΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ использования Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ статичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ (ВБМ) для создания основания, которая, учитывая аспСкт Π°Π½Π°Π»ΠΈΠ·Π° исходного ΠΊΠΎΠ΄Π°, автоматичСски создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, выводящСго ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этом аспСктС. Анализатор гСнСрируСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для сбора сСмантики с Ρ†Π΅Π»ΡŒΡŽ излоТСния Ρ„ΠΎΡ€ΠΌΡƒΠ» Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ Π½Π° основании Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… прСдставлСнных Ρ‚Π΅ΠΎΡ€ΠΈΠΉ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ классовыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ этих ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΠ½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ сСмантику Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² API Π² ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ порядка. Анализатор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти приблиТСния ΠΊΠ°ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚Π° ΠΈΡ… Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ порядка, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ спСцификации (Π΅Π³ΠΎ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ) описанной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. РСшСния SMT-LIB Ρ„ΠΎΡ€ΠΌΡƒΠ» рассматриваСтся ΠΊΠ°ΠΊ скомбинирована Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Β«ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΒ» ΠΈ Β«Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΒ». Π€ΠΎΡ€ΠΌΠ° Β«Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΒ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ логичСских ошибок (бСзопасности) Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Π±Π°Π·Π΅ Android. Бвойства бСзопасности Android прСдставлСны ΠΊΠ°ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ аналитичСскиС Ρ†Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ этих ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.A static analysis techniques were combined with model-based deductive verification using solvers of the static model theory (SMT) to create a framework that, given an aspect of analysis of the source code, automatically generated with an analyzer outputting a conclusion information about this aspect. The analyzer is generated by translating of a program collecting semantic to outlined formula in first order over a few multiple submitted theories. The underscore can be looked as some set of holes or contexts corresponding to the uninterpreted APIs invoked in the program. As the program makes an import of the packages and uses classes’ methods of these packages, it is importing the semantics of API invocations in first order assertion. The analyzer is using these assertions as models and their first logic order formula incorporates the specification behavior (its negation) of the described programs. A solver of SMTLIB formula is treated as the combined formula for β€œconstrain” and β€œsolve” it. The β€œsolved” form can be used forlogic errors (security) identification Android-based Java-programs. The properties of Android security are represented as constraint and analysis aims to show the respecting for these constraints

    Toward Intelligent Software Defect Detection

    Get PDF
    Source code level software defect detection has gone from state of the art to a software engineering best practice. Automated code analysis tools streamline many of the aspects of formal code inspections but have the drawback of being difficult to construct and either prone to false positives or severely limited in the set of defects that can be detected. Machine learning technology provides the promise of learning software defects by example, easing construction of detectors and broadening the range of defects that can be found. Pinpointing software defects with the same level of granularity as prominent source code analysis tools distinguishes this research from past efforts, which focused on analyzing software engineering metrics data with granularity limited to that of a particular function rather than a line of code

    Survival Techniques for Computer Programs

    Get PDF
    Programs developed with standard techniques often fail when they encounter any of a variety of internal errors. We present a set of techniques that prevent programs from failing and instead enable them to continue to execute even after they encounter otherwise fatal internal errors. Our results indicate that even though the techniques may take the program outside of its anticipated execution envelope, the continued execution often enables the program to provide acceptable results to their users. These techniques may therefore play an important role in making software systems more resilient and reliable in the face or errors.Singapore-MIT Alliance (SMA

    Benchmark and Framework for Encouraging Research on Multi-Threaded Testing Tools

    Get PDF
    A problem that has been getting prominence in testing is that of looking for intermittent bugs. Multi-threaded code is becoming very common, mostly on the server side. As there is no silver bullet solution, research focuses on a variety of partial solutions. In this paper (invited by PADTAD 2003) we outline a proposed project to facilitate research. The project goals are as follows. The first goal is to create a benchmark that can be used to evaluate different solutions. The benchmark, apart from containing programs with documented bugs, will include other artifacts, such as traces, that are useful for evaluating some of the technologies. The second goal is to create a set of tools with open API s that can be used to check ideas without building a large system. For example an instrumentor will be available, that could be used to test temporal noise making heuristics. The third goal is to create a focus for the research in this area around which a community of people who try to solve similar problems with different techniques, could congregate

    Investigating Security for Ubiquitous Sensor Networks

    Get PDF
    The availability of powerful and sensor-enabled mobile and Internet-connected devices have enabled the advent of the ubiquitous sensor network paradigm which is providing various types of solutions to the community and the individual user in various sectors including environmental monitoring, entertainment, transportation, security, and healthcare. We explore and compare the features of wireless sensor networks and ubiquitous sensor networks and based on the differences between these two types of systems, we classify the security-related challenges of ubiquitous sensor networks. We identify and discuss solutions available to address these challenges. Finally, we briefly discuss open challenges that need to be addressed to design more secure ubiquitous sensor networks in the future

    A path-precise analysis for property synthesis

    Get PDF
    technical reportRecent systems such as SLAM, Metal, and ESP help programmers by automating reasoning about the correctness of temporal program properties. This paper presents a technique called property synthesis, which can be viewed as the inverse of property checking. We show that the code for some program properties, such as proper lock acquisition, can be automatically inserted rather than automatically verified. Whereas property checking analyzes a program to verify that property code was inserted correctly, property synthesis analyzes a program to identify where property code should be inserted. This paper describes a path-sensitive analysis that is precise enough to synthesize property code effectively. Unlike other path-sensitive analyses, our intra-procedural path-precise analysis can describe behavior that occurs in loops without approximations. This precision is achieved by computing analysis results as a set of path machines. Each path machine describes assignment behavior of a boolean variable along all paths precisely. This paper explains how path machines work, are computed, and are used to synthesize code

    Event views and graph reductions for understanding system level C code

    Get PDF
    Concurrent processing, runtime bindings and an extensive use of aggregate data structures make system level C codes difficult to understand. We propose event views and graph reductions as techniques to facilitate program comprehension. Starting with some domain knowledge, a user can apply these techniques to quickly identify and analyze exactly those parts of the program that are relevant to a given concern. We have built a tool called CVision to demonstrate applicability of the proposed techniques. CVi-sion is an interactive tool that allows the user to: (a) quickly get to the relevant parts of the code, (b) graphically visualize relationships between program elements, (c) interactively apply different graph reductions to eliminate irrelevant relationships. Using these capabilities, the user can quickly distill a large body of code and extract meaningful views of runtime events that capture the user\u27s concern. The proposed program comprehension techniques are demonstrated through two case studies based on Linux and XINU operating systems
    corecore