Building Secure Software (tutorial)
Download
Report
Transcript Building Secure Software (tutorial)
Getting Past <THAT PROBLEM>
Why Architecture is the Key to
Software Security
Gary McGraw, Ph.D.
CTO, Cigital
http://www.cigital.com
SSI 2003
© 2003 Cigital
Old school security is reactive
SSI 2003
Defend the perimeter with a
firewall
To keep stuff out
Over-rely on crypto
“We use SSL”
“Review” products when
they’re done
Why your code is bad
Promulgate “penetrate and
patch”
Disallow advanced
technologies
Extensible systems (Java
and .NET) are dangerous
The “fat guy with keys” does
not really understand software
development.
© 2003 Cigital
Modern security is about managing risks
There is no such thing as
100% secure
Must make tradeoffs
Should be business
decisions
Proactive security is about
building things right
Design for security
Security analysis
Secure coding practice
Security testing
It’s all about the software
Most security problems
are caused by software
bugs and flaws
We must build secure
software
3000
2500
Software vulnerability
reports to CERT/CC
2000
1500
1000
500
0
1995
SSI 2003
1996
1997
1998
1999
2000
2001
© 2003 Cigital
Software Security Pitfalls
SSI 2003
© 2003 Cigital
Technology choices are glossed
Language (#1)
C/C++
Java, C#
Perl, python, PHP
Operating system
Windows 9X
Windows NT/XP
Unix flavors
The environment in
which software
operates is critical
SSI 2003
“Container” systems
CORBA
EJB
DCOM
Authentication mechanism
Biometrics
Password systems
Tokens
Smart cards
PCI keys
Network
802.11b (wireless)
© 2003 Cigital
Sociology problems
Most security organizations
are made up of network
security people
MIS, IT focus
CISSP
Network people do not often
understand software
development
Code reviews alone do
not cut it!
Most development shops
have good intentions, but
little security knowledge
Want to “build stuff”
No good knowledge
source
See security review as a
waste of time and a big
hassle
Software security is
currently nobody’s job.
SSI 2003
© 2003 Cigital
Security problems are complicated
SSI 2003
IMPLEMENTATION BUGS
THAT PROBLEM
String format
One-stage attacks
Race conditions
TOCTOU (time of check
to time of use)
Unsafe environment
variables
Unsafe system calls
System()
Untrusted input problems
ARCHITECTURAL FLAWS
Misuse of cryptography
Privileged block protection
failure
Catastrophic security failure
(fragility)
Type safety confusion error
Insecure auditing
Broken or illogical access
control
© 2003 Cigital
FLAW: Architectural problems with Java
Java’s classloading
architecture flawed
Separate instantiate class
from manage name spaces
Every release had
problems
March 96: JDK 1.0
March 97: JDK 1.0.7
July 98: JDK 1.2
What is “Java” anyway? (and
what is .NET?!)
JavaCard
J2EE
More
resources
TINI
SSI 2003
MicroChai
J2ME
J2SE
© 2003 Cigital
Principles and Guidelines for
Better Design
SSI 2003
© 2003 Cigital
Reaching for the brass ring
Design for security is critical
Teaching people HOW to do this is very hard
Apprenticeship is the state of the art today
Guidelines can help (but tend to be unsatisfyingly
high level)
Guidelines can help, but are no magic bullet
SSI 2003
© 2003 Cigital
Ten guiding principles for secure design
1.
2.
3.
4.
5.
SSI 2003
Secure the weakest link
Practice defense in depth
Fail securely
Follow the principle of least
privilege
Compartmentalize
6.
7.
8.
9.
10.
Keep it simple
Promote privacy
Remember that hiding
secrets is hard
Be reluctant to trust
Use your community
resources
© 2003 Cigital
Twelve guidelines for writing safer Java
1.
2.
3.
4.
5.
6.
7.
SSI 2003
don’t depend on initialization
limit access to entities
make everything final
don’t depend on package
scope
don’t use inner classes
avoid signing your code
put all signed code in one
archive
make classes uncloneable
9. make classes
unserializeable
10. make classes
undeserializeable
11. don’t compare classes by
name
12. don’t store secrets
8.
© 2003 Cigital
Problem: Serialization
SSI 2003
While serialized, objects aren’t protected by access controls
An attacker can read or modify the object in its serialized
form
An attacker can create a serialized representation from
scratch to insert into the system with bad data
Serialized data can be modified in several ways
Extending objects and overriding read/writeObject()
Extending ObjectInputStream/ObjectOutputStream
Capturing the data through network monitoring
© 2003 Cigital
Fix: Serialization
Declare sensitive fields as transient if possible
If class will be serialized
Implement final writeObject() and readObject() methods to
prevent subclasses overriding
Make sure readObject() was called - “initialized” set
If class should not be serialized
Prevent subclasses from overriding methods
private final void writeObject()(ObjectOutputStream out) throws java.io.IOException {
throw new java.io.IOException(“Object can not be serialized”);
}
private final void readObject()(ObjectOutputStream out) throws java.io.IOException {
throw new java.io.IOException(“Object can not be deserialized”);
}
SSI 2003
© 2003 Cigital
Fix: Serialization
Disallow permissions that allow modification to IO streams
SerializablePermission(“enableSubclassImplementation”)
SerializablePermission(“enableSubstitution”)
Encrypt serialized streams
At application level (key management is hard)
Through network mechanisms (SSL, IPSEC)
Consider using externalization as an alternative
Less data is transferred
Less ability for attacker to inject new classes
Guidelines: “Make your classes Unserializable,” “Make your
classes Undeserializable”
SSI 2003
© 2003 Cigital
Why Design?
SSI 2003
© 2003 Cigital
On Bricks and Walls
SSI 2003
Proper use of “dangerous” system calls is equivalent to using
solid bricks
Without an architecture, using all the right system calls won’t
help
© 2003 Cigital
On architectural analysis
SSI 2003
Designers should not do this
Build a one page white board
design model
(like that )
Use hypothesis testing to
categorize risks
Threat modeling/Attack
patterns
Rank risks
Tie to business context
Suggest fixes
Repeat
© 2003 Cigital
Defects at Each Stage of Software Development
Percentage of Defects
60
50
40
30
20
Requirements
Design
Coding
Testing
Maintenance
10
0
Source: TRW
SSI 2003
© 2003 Cigital
Cost of Fixing Defects at Each Stage
of Software Development
Cost Per Defect
$15,000
$12,000
Requirements
Design
$9,000
Coding
$6,000
Testing
$3,000
0
SSI 2003
Maintenance
Source: TRW
© 2003 Cigital
@stake: Security Defects
Security Defects by Category
Design
related
Serious
design
flaws*
Session replay/hijacking
Password controls
27%
31%
57%
36%
Buffer overflows
27%
Authentication/access control 62%
89%
64%
File/application enumeration
27%
Configuration management
42%
41%
16%
Weak encryption
24%
Cryptographic algorithms
33%
93%
61%
Information gathering
47%
51%
20%
Password sniffing
24%
Input validation
71%
50%
32%
Cookie manipulation
20%
Parameter manipulation
33%
81%
73%
Administrative channels
20%
Sensitive data handling
33%
70%
41%
Log storage/retrieval issues
20%
Session management
40%
94%
79%
Error codes
20%
Category
Engagements
where
observed
Top 10 Application Security Defects
Administrative interfaces
Total
45
70%
47%
*Scores of 3 or higher for exploit risk and business impact
SSI 2003
31%
Source: 2002 @stake - The Hoover Project (n=45)
Assessments where
encountered, percent
© 2003 Cigital
@stake: Early is Good
Although benefits can be found throughout the lifecycle, earlier
involvement is most beneficial
Vulnerabilities are harder to address post-design
Security ROI by Phase
System-wide changes
25%
may be required at
21%
later stages
20%
Enabling
15%
improvements
15%
can be made
Return on Security
Investment (NPV)
at design state
12%
10%
5%
Source: 2002 @stake - The Hoover Project
0%
Design
SSI 2003
Implementation
Testing
© 2003 Cigital
Microsoft’s software security process
Where we need new tools and techniques
Secure questions
during interviews
Concept
Learn &
Refine
External
review
Designs
Complete
Team member
training
Security
Review
SSI 2003
Security push/audit
Threat
analysis
Test plans
Complete
Data mutation
& Least Priv
Tests
Code
Complete
Ship
Review old defects
Check-ins checked
Secure coding guidelines
Use tools
Post
Ship
= on-going
© 2003 Cigital
Open Questions
SSI 2003
How is security best integrated into
a standard engineering-based
approach?
Do all engineers need to
understand security?
What kind of organization can
build secure software?
Is expertise and experience
necessary for good security
analysis?
Where does it come from?
How does auditing designs differ
from auditing source code?
What role should security testing
play in analysis?
© 2003 Cigital
Suggested research agenda
Quantify, analyze, and explain bug/flaw categories
Do more cost/benefit analysis proving that early is
good
Untangle security software from software security at
the requirements stage
Explain why the software security problem is
growing
Build tools for earlier in the lifecycle
Find out how to teach this stuff
Invent measures and metrics
3000
2500
2000
1500
1000
500
0
1995
SSI 2003
1996
1997
1998
1999
2000
2001
© 2003 Cigital
Pointers
Cigital’s Software Security Group invents and practices
Software Quality Management
Get Building Secure Software
Send e-mail:
[email protected]
“So now, when we face a choice between
adding features and resolving security issues,
we need to choose security.”
-Bill Gates
SSI 2003
© 2003 Cigital