Eindhoven University of Technology MASTER Automated Security

Total Page:16

File Type:pdf, Size:1020Kb

Eindhoven University of Technology MASTER Automated Security Eindhoven University of Technology MASTER Automated security review of Java card applets with static code analysis Lie, Roberto E.A. Award date: 2012 Link to publication Disclaimer This document contains a student thesis (bachelor's or master's), as authored by a student at Eindhoven University of Technology. Student theses are made available in the TU/e repository upon obtaining the required degree. The grade received is not published on the document as presented in the repository. The required complexity or quality of research of student theses may vary by program, and the required minimum study period may vary in duration. General rights Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain Automated Security Review of Java Card Applets with Static Code Analysis Roberto Eliantono Adiseputra Lie August 2012 Abstract Code review is a tedious and error-prone process that can be expensive when manually done. Various tools have been developed to aid this process, mainly by using static analysis. Specific application domains such as smartcards have different unique characteristics that are not yet handled by available tools. The main idea of this study is to bring the knowledge formalized in various knowledge catalogs into the static analysis tools. In order to do so, several static analysis tools have been evaluated and two knowledge catalogs have been analyzed. From the study it was found that in general it is feasible to utilize the knowledge from the catalogs for the tools. This can be done by either creating new rulesets and/or modifying the code of the tools, depending on the tools capabilities. For knowledge catalogs that are more abstract such as principles or guidelines, the knowledge has to be translated first into more concrete rules. iii Acknowledgements My heartfelt thanks to my supervisors: Alexander Serebrenik, Cees-Bart Breunesse, Erik Poll and Marc Witteman for all their support, guidance and feedback during the course of my master’s project. Also, to the other members of the assessment committee: Ruurd Kuiper and Sandro Etalle, for their time and effort to review this work. I would also like to thank Alec Moss, Joy Marie Forsythe and Matias Madou from HP Fortify; Dirk Giesen from Parasoft; and, Maty Siman, Moni Stern and Asaph Schulman from Checkmarx for helping me obtain the appropriate permissions to use their products. I am grateful of all the information I received from many researchers across the information security, program analysis and Java Card communities. Special thanks to Eric Vétillard and Jean-Louis Lanet who have kindly answered my questions about their projects. Last but not least, I would like to thank my friends and family, whose love and support have made it possible for me to come to this point. v Contents Contents vii List of Tables x List of Figures xi List of Listings xii 1 Introduction 1 1.1 Background and Problem Description . 1 1.2 Project Goal and Scope . 2 1.3 Methodology . 2 1.4 Related Work . 2 1.5 Organization of this Report . 3 2 Preliminaries 5 2.1 Information Security . 5 2.2 Software Security . 6 2.2.1 Bugs vs Flaws . 6 2.2.2 The Three Pillars of Software Security . 7 2.3 Program Verification and Analysis . 8 2.3.1 Theorem Proving . 10 2.3.2 Model Checking . 12 2.3.3 Static Code Analysis . 12 2.4 Bug Finding . 15 2.4.1 Bug Finding Tools . 16 2.5 Verification and Bug Finding in Software Security . 16 2.6 Smartcards . 17 2.6.1 Hardware . 17 2.6.2 Communication . 19 2.6.3 Software . 21 2.7 Java Card . 22 2.7.1 GlobalPlatform . 24 2.7.2 SIM Toolkit . 24 2.8 Attacks on Smartcards . 25 2.9 Knowledge Catalogs . 26 3 Survey of Static Code Analysis Tools 27 3.1 Commercial Tools . 28 3.1.1 HP Fortify Static Code Analyzer . 28 3.1.2 Parasoft Jtest . 30 vii viii CONTENTS 3.1.3 Checkmarx CxSuite . 30 3.1.4 Other Commercial Tools . 31 3.2 Open Source Tools . 32 3.2.1 PMD . 32 3.2.2 FindBugs . 32 3.2.3 JLint . 33 3.3 Discussion . 33 4 Analysis of AFSCM’s Rules 35 4.1 Overview . 35 4.2 Analysis of the Rules . 40 4.2.1 Management Rules . 40 4.2.2 Usage of APIs and SIM Toolkit Commands and Events . 42 4.2.3 Memory Management . 45 4.2.4 Handset Resources Management . 46 4.2.5 System Management . 48 4.2.6 Exception and Error Management . 50 4.2.7 Robustness and Interoperability . 50 4.2.8 Interactions . 51 4.2.9 Developments Rules . 51 4.3 Rules–Tools Capabilities Mapping . 53 5 Analysis of Riscure Secure Application Programming Patterns 55 5.1 Overview . 55 5.2 Basic Components . 55 5.2.1 Detecting Sensitive Data . 56 5.2.2 Detecting Sensitive Operations . 56 5.2.3 Putting Everything Together: An Example . 58 5.2.4 Sensitivity Propagation . 60 5.3 Analysis of the Patterns . 63 5.4 Pattern–Tools Capabilities Mapping . 65 6 Conclusions 67 6.1 Summary . 67 6.2 Result . 67 6.3 Future Work . 69 A Code Example 71 B Java Grammar 75 B.1 Grammar Notation . 75 B.2 Lexical Grammar . 78 B.3 Syntactic Grammar . 83 B.3.1 Types and Values . 83 B.3.2 Names . 84 B.3.3 Packages . 85 B.3.4 Classes . 85 B.3.5 Interfaces . 89 B.3.6 Arrays . 91 B.3.7 Blocks and statements . 92 B.3.8 Expressions . 95 CONTENTS ix Glossary 101 Abbreviations 107 Bibliography 109 List of Tables 2.1 Examples of Bugs and Flaws . 6 2.2 Function description of smartcard electrical contacts . 18 2.3 Summary of smartcard transmission protocols . 20 3.1 Overview of the surveyed SCA Tools . 28 4.1 Overview of AFSCM rules . ..
Recommended publications
  • Datalog Disassembly
    Datalog Disassembly Antonio Flores-Montoya Eric Schulte GrammaTech, Inc. GrammaTech, Inc. [email protected] [email protected] Abstract Instruction boundaries Recovering where instructions start and end can be challenging especially in architectures Disassembly is fundamental to binary analysis and rewrit- such as x64 that have variable length instructions, dense ing. We present a novel disassembly technique that takes a instruction sets1, and sometimes interleave code and data. stripped binary and produces reassembleable assembly code. This problem is also referred as content classification. The resulting assembly code has accurate symbolic informa- Symbolization information In binaries, there is no distinc- tion, providing cross-references for analysis and to enable ad- tion between a number that represents a literal and a justment of code and data pointers to accommodate rewriting. reference that points to a location in the code or data. If Our technique features multiple static analyses and heuris- we modify a binary—e.g., by moving a block of code— tics in a combined Datalog implementation. We argue that all references pointing to that block, and to all of the Datalog’s inference process is particularly well suited for dis- subsequently shifted blocks, have to be updated. On the assembly and the required analyses. Our implementation and other hand, literals, even if they coincide with the address experiments support this claim. We have implemented our ap- of a block, have to remain unchanged. This problem is proach into an open-source tool called Ddisasm. In extensive also referred to as Literal Reference Disambiguation. experiments in which we rewrite thousands of x64 binaries We have developed a disassembler that infers precise infor- we find Ddisasm is both faster and more accurate than the mation for both questions and thus generates reassembleable current state-of-the-art binary reassembling tool, Ramblr.
    [Show full text]
  • Grammatech Codesonar Product Datasheet
    GRAMMATECH CODESONAR PRODUCT DATASHEET Static Code Analysis and Static Application Security Testing Software Assurance Services Delivered by a senior software CodeSonar empowers teams to quickly analyze and validate the code – source and/or binary – engineer, the software assurance identifying serious defects or bugs that cause cyber vulnerabilities, system failures, poor services focus on automating reliability, or unsafe conditions. reporting on your software quality, creating an improvement plan and GrammaTech’s Software Assurance Services provide the benets of CodeSonar to your team in measuring your progress against that an accelerated timeline and ensures that you make the best use of SCA and SAST. plan. This provides your teams with reliable, fast, actionable data. GrammaTech will manage the static Enjoy the Benets of the Deepest Static Analysis analysis engine on your premises for you, such that your resources can Employ Sophisticated Algorithms Comply with Coding Standards focus on developing software. The following activities are covered: CodeSonar performs a unied dataow and CodeSonar supports compliance with standards symbolic execution analysis that examines the like MISRA C:2012, IS0-26262, DO-178B, Integration in your release process computation of the entire program. The US-CERT’s Build Security In, and MITRE’S CWE. Integration in check-in process approach does not rely on pattern matching or similar approximations. CodeSonar’s deeper Automatic assignment of defects analysis naturally nds defects with new or Reduction of parse errors unusual patterns. Review of warnings Analyze Millions of Lines of Code Optimization of conguration CodeSonar can perform a whole-program Improvement plan and tracking analysis on 10M+ lines of code.
    [Show full text]
  • Malware Detection Advances in Information Security
    Malware Detection Advances in Information Security Sushil Jajodia Consulting Editor Center for Secure Information Systems George Mason University Fairfax, VA 22030-4444 email: ja jodia @ smu.edu The goals of the Springer International Series on ADVANCES IN INFORMATION SECURITY are, one, to establish the state of the art of, and set the course for future research in information security and, two, to serve as a central reference source for advanced and timely topics in information security research and development. The scope of this series includes all aspects of computer and network security and related areas such as fault tolerance and software assurance. ADVANCES IN INFORMATION SECURITY aims to publish thorough and cohesive overviews of specific topics in information security, as well as works that are larger in scope or that contain more detailed background information than can be accommodated in shorter survey articles. The series also serves as a forum for topics that may not have reached a level of maturity to warrant a comprehensive textbook treatment. Researchers, as well as developers, are encouraged to contact Professor Sushil Jajodia with ideas for books under this series. Additional titles in the series: ELECTRONIC POSTAGE SYSTEMS: Technology, Security, Economics by Gerrit Bleumer; ISBN: 978-0-387-29313-2 MULTIVARIATE PUBLIC KEY CRYPTOSYSTEMS by Jintai Ding, Jason E. Gower and Dieter Schmidt; ISBN-13: 978-0-378-32229-2 UNDERSTANDING INTRUSION DETECTION THROUGH VISUALIZATION by Stefan Axelsson; ISBN-10: 0-387-27634-3 QUALITY OF PROTECTION: Security Measurements and Metrics by Dieter Gollmann, Fabio Massacci and Artsiom Yautsiukhin; ISBN-10; 0-387-29016-8 COMPUTER VIRUSES AND MALWARE by John Aycock; ISBN-10: 0-387-30236-0 HOP INTEGRITY IN THE INTERNET by Chin-Tser Huang and Mohamed G.
    [Show full text]
  • Product Datasheet Cyber Hardening
    PRODUCT CYBER HARDENING SERVICES DATASHEET Secure Your Systems in Today’s Connected World The cyber world is evolving rapidly. New threats are discovered every day and your existing systems are likely vulnerable against them. Fixing these threats is expensive in time and money as it involves going back and making changes to the software, re-testing and then re-delivering. This is not an option as the lead-time is too great, the original source code or build environment is not available, or because of a myriad of other reasons. Cyber Grand Challenge GrammaTech Cyber Hardening Services change the game and allow you to x GrammaTech’s Cyber Hardening cyber security vulnerabilities directly in the binary executable for your systems Services were demonstrated in the without having to go back to source code. DARPA Cyber Grand Challenge, a machine against machine hacking GrammaTech’s Cyber Hardening has been proven to protect from both common competition. GrammaTech took programming errors as well as control ow hijacking attacks. away the second price in this competition and had the highest Hardened defensive score. Application Application Binary Cyber Hardening Real-World Example: Binary Analysis Transformation Do you have a deployed system with OpenSSL version 1.0.1 prior to 1.0.1g? If so, your system is likely • Error amplication • Vulnerability discovery vulnerable to the Heartbleed bug • Generic hardening (CVE-2014-0160). GrammaTech’s • Exploitability • Point patching Cyber Hardening Services can secure your system against Heartbleed without making any changes to your software’s source code. Overview There is no one-size-ts-all approach to security.
    [Show full text]
  • CURRICULUM VITAE THOMAS REPS July 2021 J. Barkley Rosser Professor & Rajiv and Ritu Batra Chair
    CURRICULUM VITAE THOMAS REPS September 2021 J. BarkleyRosser Professor & Rajivand Ritu Batra Chair (608) 262-2091 (Office) Computer Sciences Department (608) 262-1204 (Secretary) University of Wisconsin [email protected] 1210 West Dayton Street http://pages.cs.wisc.edu/~reps/ Madison, Wisconsin 53706 Birth: May 28, 1956 (Ithaca, NY USA) Citizenship: United States EDUCATION 1982 Ph.D., Cornell University Computer Science 1982 M.S., Cornell University Computer Science 1977 B.A., cum laude,Harvard University Applied Mathematics POSITIONS 2007−08 Guest Professor,University of Paris 7, Paris, France 2000−01 Visiting Researcher,Consiglio Nazionale delle Ricerche (CNR), Pisa, Italy 1993−94 Guest Professor,Datalogisk Institut, University of Copenhagen, Copenhagen, Denmark 1990−93 Associate Chairman, Computer Sciences Department, University of Wisconsin 1988−2019 Co-founder and President, GrammaTech, Inc. 1985− Professor,Comp. Sci. Dept., Univ. ofWisconsin, (Asst.: 85−88; Assoc.: 88−94; Full: 94−) 1984−85 Research Associate, Department of Computer Science, Cornell University 1982−83 Visiting Researcher,INRIA, Rocquencourt, France 1982−84 Post-Doctoral Associate, Department of Computer Science, Cornell University AW ARDS AND HONORS 2017 ACM SIGPLAN Programming Languages Achievement Award 2015 WARF Named Professorship, University of Wisconsin 2014 #4 (field rating) and #7 (citations) on Microsoft Academic Search’slist of most-highly-cited authors in Programming Languages (as of 8/27/2014) 2014 #13 (field rating) and #19 (citations) on Microsoft Academic Search’slist of most-highly-cited authors in Software Engineering (as of 8/27/2014) 2013 Foreign member,Academia Europaea 2005 ACM Fellow 2003 Recognized as a “Highly Cited Researcher” in the field of Comp.
    [Show full text]
  • Product Datasheet Codesonar
    CODESONAR PRODUCT DATASHEET Static Analysis and Static Application Security Testing “CodeSonar does a better job of CodeSonar empowers teams to quickly analyze and validate the code – source and/or binary – finding the more serious problems, identifying serious vulnerabilities or bugs that cause system failures, poor reliability, system which are often buried deep in the breaches, or unsafe conditions. code and sometimes hidden by unusual programming constructs that CodeSonar finds more significant defects than other tools, through our innovations in are hard for other static-analysis tools concurrency analysis, tainted dataflow analysis, and comprehensive checkers. to parse.” – GE Aviation Enjoy the Benefits of the Deepest Static Analysis “We were impressed by the depth of Employ Sophisticated Algorithms Analyze Millions of Lines of Code CodeSonar’s analysis.” CodeSonar performs a unified dataflow and CodeSonar can perform a whole-program – Vivante symbolic execution analysis that examines the analysis on 10M+ lines of code. Once an initial computation of the entire program. The baseline analysis has been performed, approach does not rely on pattern matching or CodeSonar’s incremental analysis capability similar approximations. CodeSonar’s deeper makes it fast to analyze daily changes to your “The automated analysis provides a analysis naturally finds defects with new or codebase. The anlaysis can run in parallel to take huge amount of leverage in a unusual patterns. best advantage of multi-core environments. cost-effective way.” – Boston Scientific Comply with Coding Standards Analyze Third-Party Code CodeSonar supports compliance with standards CodeSonar’s Integrated Binary Analysis finds like MISRA C:2012, IS0-26262, DO-178B, security vulnerabilities from libraries or other US-CERT’s Build Security In, and MITRE’S CWE.
    [Show full text]
  • Intrusion Tolerance: Concepts and Design Principles
    Intrusion Tolerance: Concepts and Design Principles. A Tutorial Paulo Ver´ıssimo DI–FCUL TR–02–6 July 2002 Departamento de Inform´atica Faculdade de Ciˆenciasda Universidade de Lisboa Campo Grande, 1749–016 Lisboa Portugal Technical reports are available at http://www.di.fc.ul.pt/tech-reports. The files are stored in PDF, with the report number as filename. Alternatively, reports are available by post from the above address. DSN 2002 Tutorial Proposal Intrusion Tolerance: Concepts and Design Principles Paulo Veríssimo [email protected] University of Lisboa Faculty of Sciences Objective of Tutorial There is a significant body of research on distributed computing architectures, methodologies and algorithms, both in the fields of dependability and fault tolerance, and in security and information assurance. Whilst they have taken separate paths until recently, the problems to be solved are of similar nature: keeping systems working correctly, despite the occurrence of mishaps, which we could commonly call faults (accidental or malicious); ensure that, when systems do fail (again, on account of accidental or malicious faults), they do so in a non harmful/catastrophic way. In classical dependability, and mainly in distributed settings, fault tolerance has been the workhorse of the many solutions published over the years. Classical security-related work has on the other hand privileged, with few exceptions, intrusion prevention, or intrusion detection without systematic forms of processing the intrusion symptoms. A new approach has slowly emerged during the past decade, and gained impressive momentum recently: intrusion tolerance. That is, the notion of tolerance to a wide set of faults encompassing intentional and malicious faults (we may collectively call them intrusions), which may lead to failure of the system security properties if nothing is done to react, counteract, recover, mask, etc., the effect of intrusions on the system state.
    [Show full text]
  • Download/Acsl 1.4.Pdf
    SPEEDY: An Eclipse-based IDE for invariant inference David R. Cok Scott C. Johnson GrammaTech, Inc. GrammaTech, Inc. Ithaca, NY, USA Ithaca, NY, USA [email protected] [email protected] SPEEDY is an Eclipse-based IDE for exploring techniques that assist users in generating correct specifications, particularly including invariant inference algorithms and tools. It integrates with sev- eral back-end tools that propose invariants and will incorporate published algorithms for inferring object and loop invariants. Though the architecture is language-neutral, current SPEEDY targets C programs. Building and using SPEEDY has confirmed earlier experience demonstrating the impor- tance of showing and editing specifications in the IDEs that developers customarily use, automating as much of the production and checking of specifications as possible, and showing counterexam- ple information directly in the source code editing environment. As in previous work, automation of specification checking is provided by back-end SMT solvers. However, reducing the effort demanded of software developers using formal methods also requires a GUI design that guides users in writing, reviewing, and correcting specifications and automates specification inference. 1 Introduction 1.1 GUIs for software verification While theoretical work on software verification technology has proceeded rapidly in recent years, there has not been a corresponding increase in using software verification for day-to-day software develop- ment. Where applied to industrial software, formal methods have remained in the hands of experts in logic and formal software verification. A contributing cause of this problem is the lack of tools and automation that put verification tools where typical software developers need it - directly within the IDE used for other software development tasks.
    [Show full text]
  • Polymorphic Type Inference for Machine Code ∗
    Polymorphic Type Inference for Machine Code ∗ Matthew Noonan Alexey Loginov David Cok GrammaTech, Inc. Ithaca NY, USA {mnoonan,alexey,dcok}@grammatech.com Abstract such as reconstruction of pointer const annotations with 98% For many compiled languages, source-level types are erased recall. Retypd can operate on weaker program representations very early in the compilation process. As a result, further com- than the current state of the art, removing the need for high- piler passes may convert type-safe source into type-unsafe quality points-to information that may be impractical to machine code. Type-unsafe idioms in the original source and compute. type-unsafe optimizations mean that type information in a Categories and Subject Descriptors F.3.2 [Logics and stripped binary is essentially nonexistent. The problem of re- Meanings of Programs]: Semantics of Programming Lan- covering high-level types by performing type inference over guages; D.2.7 [Software Engineering]: Distribution, Mainte- stripped machine code is called type reconstruction, and of- nance, and Enhancement; D.3.3 [Programming Languages]: fers a useful capability in support of reverse engineering and Language Constructs and Features; F.4.3 [Mathematical decompilation. Logic and Formal Languages]: Formal Languages In this paper, we motivate and develop a novel type sys- Keywords Reverse Engineering, Type Systems, Polymor- tem and algorithm for machine-code type inference. The phism, Static Analysis, Binary Analysis, Pushdown Automata features of this type system were developed by surveying a wide collection of common source- and machine-code idioms, 1. Introduction building a catalog of challenging cases for type reconstruc- tion. We found that these idioms place a sophisticated set In this paper we introduce Retypd, a machine-code type- of requirements on the type system, inducing features such inference tool that finds regular types using pushdown sys- as recursively-constrained polymorphic types.
    [Show full text]
  • Product Datasheet Grammatech Codesonar
    GRAMMATECH CODESONAR PRODUCT DATASHEET Static Analysis and Static Application Security Testing Software Assurance Services Delivered by a senior software CodeSonar empowers teams to quickly analyze and validate the code – source and/or binary – engineer, the software assurance identifying serious defects or bugs that cause cyber vulnerabilities, system failures, poor services focus on automating reliability, or unsafe conditions. reporting on your software quality, creating an improvement plan and GrammaTech’s Software Assurance Services provide the benets of CodeSonar to your team in measuring your progress against that an accelerated timeline and ensures that you make the best use of static analysis. plan. This provides your teams with reliable, fast, actionable data. GrammaTech will manage the static analysis engine on your premises for you, such that your resources can Enjoy the Benets of the Deepest Static Analysis focus on developing software. The following activities are covered: Employ Sophisticated Algorithms Analyze Millions of Lines of Code CodeSonar performs a unied dataow and CodeSonar can perform a whole-program Integration in your release process symbolic execution analysis that examines the analysis on 10M+ lines of code. Once an initial Integration in check-in process computation of the entire program. The baseline analysis has been performed, Automatic assignment of defects approach does not rely on pattern matching or CodeSonar’s incremental analysis capability Reduction of parse errors similar approximations. CodeSonar’s deeper makes it fast to analyze daily changes to your analysis naturally nds defects with new or codebase. The anlaysis can run in parallel to take Review of warnings unusual patterns. best advantage of multi-core environments.
    [Show full text]
  • Software Inspection Using Codesurfer Paul Anderson, Tim Teitelbaum
    Software Inspection Using CodeSurfer Paul Anderson, Tim Teitelbaum I. Introduction techniques on the control-flow graph to reveal underlying flaws in the software. Section VI describes the ways in Software Inspection is a technique for detecting flaws in which CodeSurfer has been designed to be open and exten- software before deployment. It was introduced by Fagan sible. Section VII shows how this work relates to other work in 1976 [12], and since then its use has spread widely. in software inspection. Finally, Section VIII concludes with Despite the widespread adoption and success of software a brief description of future work planned. inspection, many software products continue to be released with large numbers of flaws. This can partly be attributed II. Dependence Graphs to the inherent complexity of software systems. The com- plexity of the software thwarts manual attempts to com- Dependence graphs have applications in a wide range of prehend it. activities, including parallelization [4], optimization [13], Furthermore, the ideal situation for conducting software reverse engineering, program testing [2], and software ass- inspections in the field may often not be feasible. Time, ge- urance [17]. ographical, or other constraints may mean that the original Figure 1 shows the dependence graph representation for author of the code is not available to explain the structure a simple program with two procedures. of the code or describe its intended properties. Documenta- A Program Dependence Graph (PDG) [13] is a direct- tion may be misleading or even missing. General-purpose ed graph for a single procedure in a program. The ver- program understanding tools are crucial if code is to be tices of the graph represent constructs such as expressions, inspected efficiently.
    [Show full text]
  • Refinement of Path Expressions for Static Analysis
    Refinement of Path Expressions for Static Analysis JOHN CYPHERT, University of Wisconsin, USA JASON BRECK, University of Wisconsin, USA ZACHARY KINCAID, Princeton University, USA THOMAS REPS, University of Wisconsin, USA and GrammaTech, Inc., USA Algebraic program analyses compute information about a program’s behavior by first (a) computing a valid path expressionÐi.e., a regular expression that recognizes all feasible execution paths (and usually more)Ðand then (b) interpreting the path expression in a semantic algebra that defines the analysis. There are an infinite number of different regular expressions that qualify as valid path expressions, which raises the question łWhich one should we choose?ž While any choice yields a sound result, for many analyses the choice can have a drastic effect on the precision of the results obtained. This paper investigates the following two questions: (1) What does it mean for one valid path expression to be łbetterž than another? (2) Can we compute a valid path expression that is łbetter,ž and if so, how? We show that it is not satisfactory to compare two path expressions E1 and E2 solely by means of the languages that they generate. Counter to one’s intuition, it is possible for L(E2) ( L(E1), yet for E2 to produce a less-precise analysis result than E1Ðand thus we would not want to perform the transformation E1 → E2. However, the exclusion of paths so as to analyze a smaller language of paths is exactly the refinement criterion used by some prior methods. In this paper, we develop an algorithm that takes as input a valid path expression E, and returns a valid path expression E′ that is guaranteed to yield analysis results that are at least as good as those obtained using E.
    [Show full text]