towards more security in data exchange
play

Towards More Security in Data Exchange Defining Unparsers with - PowerPoint PPT Presentation

Towards More Security in Data Exchange Defining Unparsers with Context-Sensitive Encoders for Context-Free Grammars Lars Hermerschmidt, Stephan Kugelmann, Bernhard Rumpe Software Engineering RWTH Aachen http://www.se-rwth.de/ Lars


  1. Towards More Security in Data Exchange Defining Unparsers with Context-Sensitive Encoders for Context-Free Grammars Lars Hermerschmidt, Stephan Kugelmann, Bernhard Rumpe Software Engineering RWTH Aachen http://www.se-rwth.de/

  2. Lars Hermerschmidt Chair of Software Engineering About Me RWTH Aachen Slide 2 Background  Penetration Tester  Now Software Engineering Research Focus  Model-Driven Software Development • Textual Modeling Languages  Security Architecture Why is Cross Site Scripting (XSS) Protection so hard to get right?

  3. Lars Hermerschmidt Chair of Software Engineering Injection Attacks RWTH Aachen Slide 3 SQL Injection HTTP SQL Frontend Target Attacker XSS: plenty of different contexts where JavaScript can be used HTTP HTML, ... Attacker Frontend Target

  4. Lars Hermerschmidt Chair of Software Engineering Injection Attacks RWTH Aachen Slide 4 SQL Injection HTTP SQL Frontend Target Attacker XSS: plenty of different contexts where JavaScript can be used HTTP HTML, ... Attacker Frontend Target unparse parse Injection Attack Language1 Language2 Attacker Frontend Target

  5. Lars Hermerschmidt Chair of Software Engineering State of the art RWTH Aachen Slide 5 In general: Do not trust user data, sanitize or encode it SQL: Prepared Statements HTML, JavaScript, CSS • context aware encoding (HTML, <script>, JavaScript in HTML attribute, ...) • apply encoding automatically [Weinberger2011]  What about all the other languages? • Enterprise backend communication e.g. SAP systems • Cyber Physical Systems like cars, industrial control systems • new or custom formats

  6. Lars Hermerschmidt Chair of Software Engineering It happens during unparsing RWTH Aachen Slide 6 parse program logic's interface to the document String AST representation unparse Correct roundtrip   AST x : parse ( unparse ( x )) x Injection: malicious AST m containing control tokens within terminals   d : parse ( d ) m correct roundtrip for malicious AST m  parse ( unparse ( m )) m decode encode

  7. Lars Hermerschmidt Chair of Software Engineering Defining Context-sensitive encoding RWTH Aachen Slide 7 MontiCoder  Generate (un)parser with context-sensitive (en/de)coder  Define encoding per token in the grammar Element = "tags" LCURLY TagsToken RCURLY; MG token LCURLY = "{"; production rule token RCURLY = "}"; token TagsToken = (~('{' | '}' | ' '))+; encodeTable TagsToken = { "{" -> "&#x0123;", "}" -> "&#x0125;", "&" -> "&#x0038;", " " -> "&#x0020;" };

  8. Lars Hermerschmidt Chair of Software Engineering Language Composition RWTH Aachen Slide 8  One grammar per language (enables reuse, lowers complexity)  Replace terminal from super-language with start symbol of sub- language  enables embedding of JavaScript in HTML • Encoding specified separately for each language Unparsing  Start Encoding in the most nested language  Control characters from L 2 get encoded when used in L 4 L 1 Parsing  Start parsing super-language L L  Run decoder on tokens 2 3  Run subparser L 4

  9. Lars Hermerschmidt Chair of Software Engineering Reducing Language Features RWTH Aachen Slide 9 Use Case: Include rich user input e.g. HTML into output  Option 1: Reduce output language • Change production rules to match only tokens with special names, define encoding • not elegant, but more secure  Option 2: Reduce input language • Copy input into output AST • Program logic must not alter this input

  10. Lars Hermerschmidt Chair of Software Engineering Using MontiCoder RWTH Aachen Slide 10 Language Developer 1. Define output grammar and encoding table 2. Generate parser and unparser which include Context-Sensitive (de/en)coding Language user a.k.a. application developer 1. Construct an AST for the output document a) Create parsable template b) Parse template to preinitialized AST 2. Add untrusted user data to AST nodes 3. Run generated MontiCoder unparser

  11. Lars Hermerschmidt Chair of Software Engineering Case Study: HTML and JavaScript RWTH Aachen Slide 11  Implemented grammars and encoding tables for HTML and JavaScript  Web Application uses generated unparser  Performed XSS Scan with OWASP ZAP and FuzzDB • found no XSS  Manual penetration test • found error in one encoding table definition (<script> = <Script>) • added options: case-insensitive, ignore whitespaces

  12. Lars Hermerschmidt Chair of Software Engineering Conclusion RWTH Aachen Slide 12  Injection attacks arise from unparsing without encoding  Encoding is a language property • defined by encoding table per grammar token  MontiCoder: Derive context-sensitive encoder from it's definition within the grammar • NOT yet another HTML, JavaScript encoder  Templates considered harmful • Directly putting untrusted data into output • Context within the output is lost  Stop using IO APIs which have no idea of correct encoding • e.g. System.out.printl()

  13. Lars Hermerschmidt Chair of Software Engineering RWTH Aachen Slide 13 Thank You Comments? Questions?

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend