210 likes | 479 Views
2. MOPS (MOdel checking Programs for Security properties). A static analysis tool that checks source programs for temporal safety properties. e.g. a setuid-root program must drop privilege before making risky system calls.AnalysisPushdown model checkingInter-proceduralControl flow centric. 3. Th
E N D
1. 1 Model Checking One Million Lines of C Code Hao Chen, UC Berkeley
Drew Dean, SRI International
David Wagner, UC Berkeley
2. 2 MOPS (MOdel checking Programs for Security properties) A static analysis tool that checks source programs for temporal safety properties.e.g. a setuid-root program must drop privilege before making risky system calls.
Analysis
Pushdown model checking
Inter-procedural
Control flow centric
3. 3 The MOPS process
4. 4 Is software model checking readyfor prime time? Can model checking be used by open source developers to find security vulnerabilities?
Criteria for a successful tool
It is useful
Can check many properties
Can check diverse, widely-deployed programs
Requires moderate computational resources
It is usable
Can be used easily by non-tool developers
Can generate comprehensible error reports
5. 5 Outline Experiment
Programs: 8 widely-deployed programs, with over 1 million LOC
Properties: 5 security-related properties
Findings
More than a dozen vulnerabilities and weaknesses
Usability improvements
Conclusion
6. 6 Programs Selection criteria
Security sensitive: servers, setuid-root programs
Widely deployed
In everyday use
Large
Selection criteria
Security sensitive: servers, setuid-root programs
Widely deployed
In everyday use
Large
7. 7 Security properties Drop privilege completely when needed
Avoid stderr vulnerability
Avoid race condition (TOCTTOU)
Create chroot-jail safely
chdir(“/”) must follow chroot() immediately
Create temporary files safely
Use only the safe function mkstemp()
Never reuse filename in mkstemp(filename)
8. 8 Property: drop privilege completely Setuid-root programs should drop root privilege completely
before executing an untrusted program via system(), popen(), execvp() and friends, or
when the program intends to do so
Otherwise, the remaining privilege may be exploited by
the untrusted program that is executed
malicious code injected via buffer overrun attacks A good secure programming practice is to drop root privilege completely as soon as it is no longer needed. As an approximation, …A good secure programming practice is to drop root privilege completely as soon as it is no longer needed. As an approximation, …
9. 9 Vulnerability: fail to drop privilege completely
10. 10 What is wrong?
11. 11 Potential Vulnerability Weaknesses
ssh: fails to drop privilege before executing a user program
ssh-keysign: fails to drop privilege before doing complex cryptographic operations
A buffer overrun would allow the attacker to regain root privilege in euid.
12. 12 Property: drop privilege completely
13. 13 Vulnerability: stderr exploits in at
14. 14 Property: stderr vulnerability
15. 15 Summary of Findings More than a dozen vulnerabilities and weaknesses in these mature packagesMore than a dozen vulnerabilities and weaknesses in these mature packages
16. 16 Outline Experiment
Programs: 8 widely-deployed programs, with over 1 million LOC
Properties: 5 security-related properties
Findings
More than a dozen vulnerabilities and weaknesses
Usability improvements
Conclusion
17. 17 Usability improvement 1:Make it really easy to run! Problems
Packages have different build processes
Tool has to be manually configured for each package
Solution
Provide a script that integrates model checking into the build processes of packages automatically
Result: allow the user to run the tool as simple asmops –m setuid.fsa openssh-3.5p1-6.src.rpm
18. 18 Integrating MOPS intoSoftware Build Processes 1st attempt: manually edit Makefiles
Too complicated; does not survive autoconf
2nd attempt: setenv GCC_EXEC_PREFIX to run MOPS instead of gcc
Build processes generate & run code
3rd attempt: build CFG & machine code
Dangling CFGs; links to object files broken
4th attempt: Put CFGs into ELF files
Solves all identified problems!
19. 19 Usability improvement 2:report comprehensible error messages Problem
One bug may trigger many error traces
The user has to review all the traces manually
Criteria for good error trace reporting
Reporting one error trace per bug
Reporting shortest error traces
20. 20 Algorithm Find the shortest error trace t and output it
Find the crucial statement s on t, i.e. the first statement that causes an error on t
Prune s from the program
If the program still has error traces, go to step 1
21. 21 Criteria for good tools: revisited It is useful
Can check many properties
Can check diverse, widely-deployed programs
Requires moderate computational resources
It is usable
Can be used easily by non-tool developers
Can generate comprehensible error reports
22. 22 Conclusion Model checking is ready for prime time use by open source developers to find security vulnerabilities!
We believe that our experience would transfer to other similar tools as well.
Work in progress: check all 839 RPM packages in RedHat Linux 9