Robust Programming

Author: Matt Bishop
Given at: UC Computer Security Conference
Date: June 16, 2011
First slide (slide 1)
Last slide (slide 130)

Slide 1: Robust Programming
Slide 2: Weinberg's Second Law
Slide 3: What We Will Talk About
Slide 4: Outline
Slide 5: Part 1: General Philosophy
Slide 6: Basic Rule: Find Assumptions!
Slide 7: An Obvious Place
Slide 8: General Thoughts
Slide 9: What Is Intended?
Slide 10: Policies and Procedures
Slide 11: Puzzle
Slide 12: Program Design
Slide 13: Watch Out For . . .
Slide 14: Check Implementation
Slide 15: Check Implementation
Slide 16: Where To Look
Slide 17: Network Servers
Slide 18: Local Servers
Slide 19: Setuid, Setgid Programs
Slide 20: Clients
Slide 21: Key Ideas
Slide 22: Puzzle
Slide 23: Part 2: Good Coding Practice
Slide 24: What Is Robust Code?
Slide 25: Example of Fragile Code
Slide 26: Queue Structure
Slide 27: Interfaces
Slide 28: How To Mess This Up
Slide 29: qmanage
Slide 30: Puzzle
Slide 31: Adding to a Queue
Slide 32: Puzzle
Slide 33: Taking from a Queue
Slide 34: Puzzle
Slide 35: Robust Programming
Slide 36: Queue Structure
Slide 37: Example Token
Slide 38: Error Handling
Slide 39: Error Handling
Slide 40: Cohesion
Slide 41: New Interfaces
Slide 42: Queue Structure
Slide 43: Token Generation
Slide 44: Token Generation
Slide 45: Token Generation
Slide 46: Checklist
Slide 47: Token Interpretation
Slide 48: Token Interpretation
Slide 49: Token Interpretation
Slide 50: Checklist
Slide 51: Creating a Queue
Slide 52: Creating a Queue
Slide 53: Creating a Queue
Slide 54: Checklist
Slide 55: Deleting a Queue
Slide 56: Checklist
Slide 57: Adding an Element to a Queue
Slide 58: Adding an Element to a Queue
Slide 59: Removing an Element from a Queue
Slide 60: Removing an Element from a Queue
Slide 61: Calling Removing Function
Slide 62: Summary of Problems
Slide 63: Summary of Problems
Slide 64: Non-Robust Programming
Slide 65: Key Ideas
Slide 66: Fun Problem
Slide 67: Part 3: Problems and Solutions
Slide 68: CWE/SANS Top 25 Errors
Slide 69: CWE/SANS Top 25 Errors
Slide 70: CWE/SANS Top 25 Errors
Slide 71: This Talk Discusses in Detail
Slide 72: Buffer Overflows
Slide 73: Process Memory Structure
Slide 74: Typical Stack Structure
Slide 75: Idea
Slide 76: In Pictures
Slide 77: In Words
Slide 78: Required
Slide 79: Also Required
Slide 80: Quick Test
Slide 81: Where to Put Shell Code
Slide 82: Data Segment Buffer Overflows
Slide 83: Example: login Problem
Slide 84: In Pictures
Slide 85: Requires
Slide 86: Selective Buffer Overflow
Slide 87: Sendmail Configuration File
Slide 88: In Pictures
Slide 89: Problems and Solutions
Slide 90: Attack: Whacking the Heap
Slide 91: Attack: Changing the Heap
Slide 92: Things To Alter
Slide 93: Requires
Slide 94: General Rule
Slide 95: Handling Arrays
Slide 96: Common Error
Slide 97: One Way to Fix Them
Slide 98: Canaries
Slide 99: Puzzle
Slide 100: Puzzle
Slide 101: Cross-Site Scripting
Slide 102: Reflected XSS
Slide 103: Stored, DOM Injection XSS
Slide 104: Another Example
Slide 105: The Attack
Slide 106: Filtering
Slide 107: Filtering
Slide 108: Filtering
Slide 109: Making It Worse
Slide 110: Prevention
Slide 111: SQL Injection Attacks
Slide 112: Puzzle
Slide 113: Error Handling
Slide 114: That Old su Bug (Apocryphal?)
Slide 115: Error Recovery
Slide 116: When to Recover
Slide 117: UNIX errno
Slide 118: In Fact . . .
Slide 119: Warning
Slide 120: Puzzle
Slide 121: Key Ideas
Slide 122: Part 6: Resources
Slide 123: Good Books
Slide 124: More Good Books
Slide 125: Mailing Lists
Slide 126: Useful Web Sites
Slide 127: More Useful Web Sites
Slide 128: Key Ideas
Slide 129: Conclusion
Slide 130: Author Information