Lecture 13 Page 1 CS 136, Spring 2016 Secure Programming Computer Security Peter Reiher May 17, 2016.

Slides:



Advertisements
Similar presentations
Lecture 19 Page 1 CS 111 Online Protecting Operating Systems Resources How do we use these various tools to protect actual OS resources? Memory? Files?
Advertisements

VM: Chapter 5 Guiding Principles for Software Security.
Lecture 2 Page 1 CS 236, Spring 2008 Security Principles and Policies CS 236 On-Line MS Program Networks and Systems Security Peter Reiher Spring, 2008.
Web Security A how to guide on Keeping your Website Safe. By: Robert Black.
CMSC 414 Computer and Network Security Lecture 9 Jonathan Katz.
Building Secure Software Chapter 9 Race Conditions.
Computer Security and Penetration Testing
1 Security and Software Engineering Steven M. Bellovin AT&T Labs – Research
Lecture 7 Page 1 CS 236 Online Password Management Limit login attempts Encrypt your passwords Protecting the password file Forgotten passwords Generating.
Lecture 18 Page 1 CS 111 Online Design Principles for Secure Systems Economy Complete mediation Open design Separation of privileges Least privilege Least.
Lecture 19 Page 1 CS 111 Online Symmetric Cryptosystems C = E(K,P) P = D(K,C) E() and D() are not necessarily the same operations.
Lecture 18 Page 1 CS 111 Online Access Control Security could be easy – If we didn’t want anyone to get access to anything The trick is giving access to.
Lecture 13 Page 1 CS 136, Fall 2014 Secure Programming Computer Security Peter Reiher December 2, 2014.
Computer Security and Penetration Testing
Lecture 16 Page 1 CS 236 Online SQL Injection Attacks Many web servers have backing databases –Much of their information stored in a database Web pages.
Lecture 15 Page 1 Advanced Network Security Perimeter Defense in Networks: Firewalls Configuration and Management Advanced Network Security Peter Reiher.
Lecture 16 Page 1 Advanced Network Security Perimeter Defense in Networks: Virtual Private Networks Advanced Network Security Peter Reiher August, 2014.
OWASP Top Ten #1 Unvalidated Input. Agenda What is the OWASP Top 10? Where can I find it? What is Unvalidated Input? What environments are effected? How.
Lecture 13 Page 1 CS 236 Online Secure Programming CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Security - Why Bother? Your projects in this class are not likely to be used for some critical infrastructure or real-world sensitive data. Why should.
Lecture 17 Page 1 CS 236 Online Privacy CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Lecture 13 Page 1 Advanced Network Security Authentication and Authorization in Local Networks Advanced Network Security Peter Reiher August, 2014.
240-Current Research Easily Extensible Systems, Octave, Input Formats, SOA.
Lecture 12 Page 1 CS 236, Spring 2008 Virtual Private Networks VPNs What if your company has more than one office? And they’re far apart? –Like on opposite.
Lecture 16 Page 1 CS 236 Online Web Security CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Lecture 13 Page 1 CS 236 Online Principles for Secure Software Following these doesn’t guarantee security But they touch on the most commonly seen security.
Lecture 7 Page 1 CS 236 Online Authentication CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Lecture 14 Page 1 CS 236 Online Variable Initialization Some languages let you declare variables without specifying their initial values And let you use.
Lecture 13 Page 1 CS 236 Online Major Problem Areas for Secure Programming Certain areas of programming have proven to be particularly prone to problems.
Lecture 4 Page 1 CS 111 Online Modularity and Virtualization CS 111 On-Line MS Program Operating Systems Peter Reiher.
Lecture 5 Page 1 CS 236 Online Key Management Choosing long, random keys doesn’t do you any good if your clerk is selling them for $10 a pop at the back.
Security Attacks Tanenbaum & Bo, Modern Operating Systems:4th ed., (c) 2013 Prentice-Hall, Inc. All rights reserved.
Lecture 14 Page 1 CS 136, Fall 2012 Secure Programming CS 136 Computer Security Peter Reiher November 15, 2012.
Lecture 14 Page 1 CS 111 Summer 2013 Security in Operating Systems: Basics CS 111 Operating Systems Peter Reiher.
Lecture9 Page 1 CS 236 Online Operating System Security, Con’t CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Lecture 15 Page 1 CS 236 Online Evaluating Running Systems Evaluating system security requires knowing what’s going on Many steps are necessary for a full.
Lecture 5 Page 1 CS 236 Online More on Cryptography CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
VM: Chapter 7 Buffer Overflows. csci5233 computer security & integrity (VM: Ch. 7) 2 Outline Impact of buffer overflows What is a buffer overflow? Types.
Lecture 3 Page 1 CS 236 Online Security Mechanisms CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Lecture 15 Page 1 CS 236 Online Choosing Technologies Different technologies have different security properties –Operating systems –Languages –Object management.
Lecture 4 Page 1 CS 111 Online Modularity and Memory Clearly, programs must have access to memory We need abstractions that give them the required access.
Lecture 10 Page 1 CS 236 Online SSL and TLS SSL – Secure Socket Layer TLS – Transport Layer Security The common standards for securing network applications.
Lecture 12 Page 1 CS 136, Spring 2009 Network Security: Firewalls CS 136 Computer Security Peter Reiher May 12, 2009.
Lecture 5 Page 1 CS 111 Summer 2013 Bounded Buffers A higher level abstraction than shared domains or simple messages But not quite as high level as RPC.
Lecture 15 Page 1 CS 136, Fall 2011 Secure Programming CS 136 Computer Security Peter Reiher November 15, 2011.
Lecture 14 Page 1 CS 236 Online Secure Programming CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Lecture 9 Page 1 CS 236 Online Firewalls What is a firewall? A machine to protect a network from malicious external attacks Typically a machine that sits.
Secure Programming Dr. X
Secure Programming Computer Security Peter Reiher February 23, 2017
Major Problem Areas for Secure Programming
Modularity Most useful abstractions an OS wants to offer can’t be directly realized by hardware Modularity is one technique the OS uses to provide better.
Outline Basic concepts in computer security
Protecting Memory What is there to protect in memory?
Outline Properties of keys Key management Key servers Certificates.
Protecting Memory What is there to protect in memory?
Secure Programming Dr. X
Protecting Memory What is there to protect in memory?
Outline Introduction Principles for secure software
Password Management Limit login attempts Encrypt your passwords
Outline What does the OS protect? Authentication for operating systems
Choosing Technologies
Secure Programming CS 136 Computer Security Peter Reiher May 20, 2014
Outline Introduction Principles for secure software
Outline What does the OS protect? Authentication for operating systems
CMSC 414 Computer and Network Security Lecture 21
Outline Using cryptography in networks IPSec SSL and TLS.
Security Principles and Policies CS 236 On-Line MS Program Networks and Systems Security Peter Reiher.
Secure Programming CS 136 Computer Security Peter Reiher March 2, 2010
Outline Introduction Principles for secure software
Choosing Technologies
Presentation transcript:

Lecture 13 Page 1 CS 136, Spring 2016 Secure Programming Computer Security Peter Reiher May 17, 2016

Lecture 13 Page 2 CS 136, Spring 2016 Outline Introduction Principles for secure software Choosing technologies Major problem areas Evaluating program security

Lecture 13 Page 3 CS 136, Spring 2016 Introduction How do you write secure software? Basically, define security goals And use techniques that are likely to achieve them Ideally, part of the whole process of software development –Not just some tricks programmers use

Lecture 13 Page 4 CS 136, Spring 2016 Designing for Security Often developers design for functionality –“We’ll add security later” Security retrofits have a terrible reputation –Insecure designs offer too many attack opportunities Designing security from the beginning works better

Lecture 13 Page 5 CS 136, Spring 2016 For Example, Windows 95 and its descendants Not designed with security in mind Security professionals assume any networked Windows 95 machine can be hacked –Despite later security retrofits

Lecture 13 Page 6 CS 136, Spring 2016 Defining Security Goals Think about which security properties are relevant to your software –Does it need limited access? –Privacy issues? –Is availability important? And the way it interacts with your environment –Even if it doesn’t care about security, what about the system it runs on?

Lecture 13 Page 7 CS 136, Spring 2016 Security and Other Goals Security is never the only goal of a piece of software Usually not the primary goal Generally, secure software that doesn’t meet its other goals is a failure Consider the degree of security required as an issue of risk

Lecture 13 Page 8 CS 136, Spring 2016 Managing Software Security Risk How much risk can this software tolerate? What compromises can you make to minimize that risk? –Often other goals conflict with security –E.g., should my program be more usable or require strong authentication? Considering tradeoffs in terms of risks can clarify what you need to do

Lecture 13 Page 9 CS 136, Spring 2016 Risk Management and Software Development Should consider security risk as part of your software development model E.g., in spiral model, add security risk analysis phase to the area of spiral where you evaluate alternatives Considering security and risks early can avoid pitfalls later Returning to risk when refining is necessary

Lecture 13 Page 10 CS 136, Spring 2016 Incorporating Security Into Spiral Model of SW Development Include security in the risks you consider At all passes through the spiral

Lecture 13 Page 11 CS 136, Spring 2016 But How Do I Determine Risk? When you’re just thinking about a big new program, how can you know about its risks? Well, do the best you can –Apply your knowledge and experience –Really think about the issues and problems –Use a few principles and tools we’ll discuss That puts you ahead of 95% of all developers You can’t possibly get it all right, but any attention to risk is better than none

Lecture 13 Page 12 CS 136, Spring 2016 Design and Security Experts Someone on a software development team should understand security –The more they understand it, the better –Ideally, someone on team should have explicit security responsibility Experts should be involved in all phases –Starting from design

Lecture 13 Page 13 CS 136, Spring 2016 Principles for Secure Software Following these doesn’t guarantee security But they touch on the most commonly seen security problems Thinking about them is likely to lead to more secure code

Lecture 13 Page 14 CS 136, Spring Secure the Weakest Link Don’t consider only a single possible attack Look at all possible attacks you can think of Concentrate most attention on most vulnerable elements

Lecture 13 Page 15 CS 136, Spring 2016 For Example, Those attacking your web site are not likely to break transmission cryptography –Switching from DES to AES probably doesn’t address your weakest link Attackers are more likely to use a buffer overflow to break in –And read data before it’s encrypted –Prioritize preventing that

Lecture 13 Page 16 CS 136, Spring Practice Defense in Depth Try to avoid designing software so failure anywhere compromises everything Also try to protect data and applications from failures elsewhere in the system Don’t let one security breach give away everything

Lecture 13 Page 17 CS 136, Spring 2016 For Example, You write a routine that validates all input properly All other routines that are supposed to get input should use that routine Worthwhile to have those routines also do some validation –What if there’s a bug in your general routine? –What if someone changes your code so it doesn’t use that routine for input?

Lecture 13 Page 18 CS 136, Spring Fail Securely Security problems frequently arise when programs fail They often fail into modes that aren’t secure So attackers cause them to fail –To see if that helps them So make sure that when ordinary measures fail, the fallback is secure

Lecture 13 Page 19 CS 136, Spring 2016 For Example, A major security flaw in typical Java RMI implementations If server wants to use security protocol client doesn’t have, what happens? –Client downloads it from the server –Which it doesn’t trust yet... Malicious entity can force installation of compromised protocol

Lecture 13 Page 20 CS 136, Spring Use Principle of Least Privilege Give minimum access necessary For the minimum amount of time required Always possible that the privileges you give will be abused –Either directly or through finding a security flaw The less you give, the lower the risk

Lecture 13 Page 21 CS 136, Spring 2016 For Example, Say your web server interacts with a backend database It only needs to get certain information from the database –And uses access control to determine which remote users can get it Set access permissions for database so server can only get that data If web server hacked, only part of database is at risk

Lecture 13 Page 22 CS 136, Spring Compartmentalize Divide programs into pieces Ensure that compromise of one piece does not automatically compromise others Set up limited interfaces between pieces –Allowing only necessary interactions

Lecture 13 Page 23 CS 136, Spring 2016 For Example, Traditional Unix has terrible compartmentalization –Obtaining root privileges gives away the entire system Redesigns that allow root programs to run under other identities help –E.g., mail server and print server users Not just a problem for root programs –E.g., web servers that work for many clients Research systems like Asbestos allow finer granularity compartmentalization

Lecture 13 Page 24 CS 136, Spring Value Simplicity Complexity is the enemy of security Complex systems give more opportunities to screw up Also, harder to understand all “proper” behaviors of complex systems So favor simple designs over complex ones

Lecture 13 Page 25 CS 136, Spring 2016 For Example, Re-use components when you think they’re secure Use one implementation of encryption, not several –Especially if you use “tried and true” implementation Build code that only does what you need –Implementation of exactly what you need are safer than “Swiss army knife” approaches Choose simple algorithms over complex algorithms –Unless complex one offers necessary advantages –“It’s somewhat faster” usually isn’t a necessary advantage –And “it’s a neat new approach” definitely isn’t

Lecture 13 Page 26 CS 136, Spring 2016 Especially Important When Human Users Involved Users will not read documentation –So don’t rely on designs that require that Users are lazy –They’ll ignore pop-ups and warnings –They will prioritize getting the job done over security –So designs requiring complex user decisions usually fail

Lecture 13 Page 27 CS 136, Spring Promote Privacy Avoid doing things that will compromise user privacy Don’t ask for data you don’t need Avoid storing user data permanently –Especially unencrypted data There are strong legal issues related to this, nowadays

Lecture 13 Page 28 CS 136, Spring 2016 For Example, Google’s little war driving incident They drove around many parts of the world to get information on Wifi hotspots But they simultaneously were sniffing and storing packets from those networks And gathered a lot of private information They got into a good deal of trouble...

Lecture 13 Page 29 CS 136, Spring Remember That Hiding Secrets is Hard Assume anyone who has your program can learn everything about it “Hidden” keys, passwords, certificates in executables are invariably found Security based on obfusticated code is always broken Just because you’re not smart enough to crack it doesn’t mean the hacker isn’t, either

Lecture 13 Page 30 CS 136, Spring 2016 For Example, Passwords often “hidden” in executables –Zhuhai RaySharp surveillance DVRs had one hard coded password on all 46,000+ –Allowed Internet access to any of them Android apps containing private keys are in use (and are compromised) Ubiquitous in digital rights management –And it never works

Lecture 13 Page 31 CS 136, Spring Be Reluctant to Trust Don’t automatically trust things –Especially if you don’t have to Remember, you’re not just trusting the honesty of the other party –You’re also trusting their caution Avoid trusting users you don’t need to trust, too –Doing so makes you more open to social engineering attacks

Lecture 13 Page 32 CS 136, Spring 2016 For Example, Why do you trust that shrinkwrapped software? Or that open source library? Must you? Can you design the system so it’s secure even if that component fails? If so, do it

Lecture 13 Page 33 CS 136, Spring Use Your Community Resources Favor widely used and respected security software over untested stuff –Especially your own... Keep up to date on what’s going on –Not just patching –Also things like attack trends

Lecture 13 Page 34 CS 136, Spring 2016 For Example, Don’t implement your own AES code Rely on one of the widely used versions But also don’t be too trusting –E.g., just because it’s open source doesn’t mean it’s more secure

Lecture 13 Page 35 CS 136, Spring 2016 Choosing Technologies Different technologies have different security properties –Operating systems –Languages –Object management systems –Libraries Important to choose wisely –Understand the implications of the choice

Lecture 13 Page 36 CS 136, Spring 2016 Choices and Practicalities You usually don’t get to choose the OS The environment you’re writing for dictates the choice –E.g., commercial software often must be written for Windows –Or Linux is the platform in your company Might not get choice in other areas, either –But exercise it when you can

Lecture 13 Page 37 CS 136, Spring 2016 Operating System Choices Rarely an option, and does it matter anyway? Probably not, any more –All major choices have poor security histories No, Linux is not necessarily safer than Windows –All have exhibited lots of problems –In many cases, problems are in the apps, anyway Exception if you get to choose a really trusted platform –E.g., SE Linux or Trusted Solaris Not perfect, but better At a cost in various dimensions

Lecture 13 Page 38 CS 136, Spring 2016 Language Choices More likely to be possible –Though often hard to switch from what’s already being used If you do get the choice, what should it be?

Lecture 13 Page 39 CS 136, Spring 2016 C and C++ Probably the worst security choice Far more susceptible to buffer overflows than other choices Also prone to other reliability problems Often chosen for efficiency –But is efficiency that important for your application?

Lecture 13 Page 40 CS 136, Spring 2016 Java Less susceptible to buffer overflows Also better error handling than C/C++ Has special built-in security features –Which aren’t widely used But has its own set of problems –E.g., exception handling issues –And issues of inheritance 9 remotely exploitable security flaws in 2 nd quarter 2016 Oracle patches Multiple serious security problems in recent years

Lecture 13 Page 41 CS 136, Spring 2016 Scripting Languages Depends on language Many are type safe (or non-typed), limiting buffer overflow possibilities Javascript and CGIbin have awful security reputations Perl offers some useful security features But there are some general issues

Lecture 13 Page 42 CS 136, Spring 2016 Scripting Language Security Issues Might be security flaws in their interpreters –More likely than in compilers Scripts often easily examined by attackers –Obscurity of binary is no guarantee, but it is an obstacle Scripting languages often used to make system calls –Inherently dangerous, esp. things like eval() If they call libraries, there can be overflows there –E.g., Python buffer overflow in 2014 Many script programmers don’t think about security at all

Lecture 13 Page 43 CS 136, Spring 2016 Open Source vs. Closed Source Some argue open source software is inherently more secure The “many eyes” argument – –Since anyone can look at open source code, –More people will examine it –Finding more bugs –Increasing security

Lecture 13 Page 44 CS 136, Spring 2016 Is the “Many Eyes” Argument Correct? Probably not At least not in general Linux has security bug history similar to Windows Other open source projects even worse –In many cases, nobody really looks at the code –Which is no better than closed source

Lecture 13 Page 45 CS 136, Spring 2016 The Flip Side Argument “Hackers can examine open source software and find its flaws” Well, Windows’ security history is not a recommendation for this view Most commonly exploited flaws can be found via black-box approach –E.g., typical buffer overflows –

Lecture 13 Page 46 CS 136, Spring 2016 The Upshot? No solid evidence that open source or closed source produces better security Major exception is crypto –At least for crypto standards –Maybe widely used crypto packages –Criticality and limited scope means many eyeballs will really look at it

Lecture 13 Page 47 CS 136, Spring 2016 One More Consideration The Snowden leaks suggest some companies put trapdoors in software –Especially security-related software When it’s closed source, nobody else can check that When it’s open source, maybe they can –Emphasis on the “maybe,” though

Lecture 13 Page 48 CS 136, Spring 2016 Major Problem Areas for Secure Programming Certain areas of programming have proven to be particularly prone to problems What are they? How do you avoid falling into these traps?

Lecture 13 Page 49 CS 136, Spring 2016 Example Problem Areas Buffer overflows and other input verification issues Error handling Privilege escalation Race conditions Use of randomness Proper use of cryptography Trust Variable synchronization Variable initialization There are others...

Lecture 13 Page 50 CS 136, Spring 2016 Buffer Overflows The poster child of insecure programming One of the most commonly exploited types of programming error Technical details of how they occur discussed earlier Key problem is language does not check bounds of variables

Lecture 13 Page 51 CS 136, Spring 2016 Preventing Buffer Overflows Use a language with bounds checking –Most modern languages other than C and C++ (and assembler) –Not always a choice –Or the right choice –Not always entirely free of overflows Check bounds carefully yourself Avoid constructs that often cause trouble

Lecture 13 Page 52 CS 136, Spring 2016 Problematic Constructs for Buffer Overflows Most frequently C system calls: –gets(), strcpy(), strcat(), sprintf(), scanf(), sscanf(), fscanf(), vfscanf(), vsprintf(), vscanf(), vsscanf(), streadd(), strecpy() –There are others that are also risky

Lecture 13 Page 53 CS 136, Spring 2016 Why Are These Calls Risky? They copy data into a buffer Without checking if the length of the data copied is greater than the buffer Allowing overflow of that buffer Assumes attacker can put his own data into the buffer –Not always true –But why take the risk?

Lecture 13 Page 54 CS 136, Spring 2016 What Do You Do Instead? Many of the calls have variants that specify how much data is copied –If used properly, won’t allow the buffer to overflow Those without the variants allow precision specifiers –Which limit the amount of data handled

Lecture 13 Page 55 CS 136, Spring 2016 Is That All I Have To Do? No These are automated buffer overflows You can easily write your own Must carefully check the amount of data you copy if you do And beware of integer overflow problems

Lecture 13 Page 56 CS 136, Spring 2016 An Example Actual bug in OpenSSH server: u_int nresp;... nresp = packet_get_int(); If (nresp > 0) { response = xmalloc(nresp * sizeof(char *)); for (i=0; i<nresp;i++) response[i] = packet_get_string(NULL); } packet_check_eom();

Lecture 13 Page 57 CS 136, Spring 2016 Why Is This a Problem? nresp is provided by the user –nresp = packet_get_int(); But we allocate a buffer of nresp entries, right? –response = xmalloc(nresp * sizeof(char *)); So how can that buffer overflow? Due to integer overflow

Lecture 13 Page 58 CS 136, Spring 2016 How Does That Work? The argument to xmalloc() is an unsigned int Its maximum value is –4,294,967,295 sizeof(char *) is 4 What if the user sets nresp to 0x ? Multiplication is modulo –So 4 * 0x is 0x80

Lecture 13 Page 59 CS 136, Spring 2016 What Is the Result? There are 128 entries in response[] And the loop iterates hundreds of millions of times –Copying data into the “proper place” in the buffer each time A massive buffer overflow

Lecture 13 Page 60 CS 136, Spring 2016 Other Programming Tools for Buffer Overflow Prevention Software scanning tools that look for buffer overflows –Of varying sophistication Use a C compiler that includes bounds checking –Typically offered as an option Use integrity-checking programs –Stackguard, Rational’s Purity, etc.

Lecture 13 Page 61 CS 136, Spring 2016 Canary Values One method of detecting buffer overflows Akin to the “canary in the mine” Place random value at end of data structure If value is not there later, buffer overflow might have occurred Implemented in language or OS

Lecture 13 Page 62 CS 136, Spring 2016 Data Execution Prevention (DEP) Buffer overflows typically write executable code somewhere DEP prevents this –Page is either writable or executable So if overflow can write somewhere, can’t execute the code Present in Windows, Mac OS, etc. Doesn’t help against some advanced techniques

Lecture 13 Page 63 CS 136, Spring 2016 Randomizing Address Space (ASLR) Address Space Layout Randomization Randomly move around where things are stored –Base address, libraries, heaps, stack Making it hard for attacker to write working overflow code Used in Windows, Linux, MacOS Not always used, not totally effective –Several recent Windows problems from programs not using ASLR