• Software is full of bugs, and bugs can cause all kinds of problems
    • Examples:
    • Therac-25 medical accelerator
      • Race condition existed that killed at least 5 patients
    • Mars Climate Orbiter
      • Was destroyed due to a unit mismatch between software and hardware using it
    • AT&T long distance network
      • Switches crashed when they received a certain message
    • The iPhone message that would crash phones. Was a weird set of characters that could crash it
  • Software bugs can be very bad
    • Much worse things can happen if someone intentionally tries to exploit them
      • Force code into the worst possible state
      • Violate security of system
  • Common class of bugs: Buffer Overflows
  • Buffer overflow in Berkely Unix finger daemon
    • Exploited by the Morris Worm
    • Was the first time a buffer overflow was majorly used
    • Took advantage of known vulnerabilities in Unix sendmail, finger, and rsh/rexec, as well as weak passwords
    • Infected about 6000 computers
    • First significant worm
    • Morris claimed it was intended to gauge the size of the internet but it accidentally replicated itself soooooo
    • Morris is now a professor at MIT but was also the first (or one of the first) person’s caught by the Computer Abuse and Fraud Act
  • Software vulnerabilities are everywhere

What is software security?

  • System model - Software is used by several users simulatneouslay
  • Threat model - the adversary interacts with the API provided by the software
    • There is some way the adversary can interact with the software. Config files, input, API, etc.
    • We ignore physical access to the computer, if they have your computer you’re already done for
  • Properties - Confidentiality, integrity, and availability
  • Software bugs matter because they can be very bad
  • Even worse, when exploited, attackers can
    • Crash a program: compromises availability
    • Execute arbitrary code: compromises integrity
    • Obtain sensitive information: compromises confidentiality

Common software vulnerabilities

  • Buffer Overflows
  • Integer overflow
  • Format string
  • Input validation
  • Race conditions