Coding Secure with PHP – OWASP AppSec NYC 2008
This presentation was by Hans Zaunere, Managing Member, and it is entitled "PHundamental Security - Ecosystem Review, Coding Secure with PHP, and Best Practices". Take a look at http://www.nyphp.org/phundamentals/ for the ongoing guide and best practices. Guru Stefan Esser recently presented an excellent talk at Zendcon.
Security fundamentals are common across the board. Different environments have different requirements (desktop apps different from web/internet apps). Web/internet have a huge number of touch points. PHP isn't responsible for all of them, but the developer is. Different languages handle in different ways. PHP is no different except "More internet applications speak PHP than any other". PHP gets a bad rap. Low point of entry and great flexibility. There's been some mistakes like weak default configuration, too forgiving for amateurs, the infamous magic_* of PHP, PHP Group argues what's a security flaw.
It's easy to shoot yourself in the foot with C. In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg. - Bjarne Stroustrup, Inventor of C++
Three zones of responsibility. PHP is effectively a wrapper around libraries and data sources. Many external dependencies and touch points.
- Poorly written code by amateur developers with no programming background. Primary cause for the security ecosystem around PHP. Laziness - letting PHP do it's magic_*. "Program smart"
- Extensions and external libraries. PHP's greatest asset. Sometimes library binding is faulty. Sometimes the external library has faults, or behaves in an unforeseen way when in a web environment - possible in any environment. Know what extensions you're using, use the minimal number of extensions, and be aware of the environment they were originally designed for. "Know thy extensions"
- PHP Core - "PHP". Secunia says 19 advisories for PHP between 2003-2008. Java had 38+ and Ruby 11+. "The list goes on - PHP is not alone". One advisory in 2008. "More internet applications speak PHP than any other"
Best Practices
- Best practices are common to any well run enterprise environment. PHP is growing into this environment very quickly.
- Web security is largely about your data and less about exploits in the underlying platform. Buffer overflows aren't so much the hot-topic.
- Installation - Avoid prepackaged installs, including RPMs, .deb, etc. If you use them, review their default deployment. Installation touch points also typically include MySQL/Apache.
- Configuration - Use php.ini-recommended. Better yet, take the time to know what you're doing and tune configuration files yourself.
- Don't make PHP guess what you mean. Be explicit with variables and types. Don't abuse scope - know where your variables come from. Avoid magic_* and implicitness - BE EXPLICIT.
- Keep code small, organized, and maintainable. Use OOP techniques to enforce code execution paths. Use includes to keep things organized.
- Don't use super-globals directly - wrap for protection.
Be aggressive - B.E. aggressive
- It's always about data
- One of PHP's greatest strengths - loosely typed. Also it's biggest weakness. Don't make PHP guess what you mean.
- Cast variables, know their type and the data you expect. Let PHP do it's magic only when you want it to - not by chance.
- Keep tabs on your data's path, lifecycle and type. Know where it's come from, what it's doing, and where it's going. Filter/escape/cast and throw exceptions every step of the way.
- Input validation, output validation, CASTING.
- Don't be lazy, be explicit, use OOP.
Casting isn't just for movie producers
- No system has a single security pressure point
- Don't take the easy way out just because you can
- Put PHP in the same well managed enterprise environment as other technologies
- PHP/AMP respond very well to TLC
Conclusions
PHP is just part of the ecosystem and there is awareness and experience on the PHP side. The ying/yang of PHP's history overshadows reality. Stand by PHP and it'll stand by you. Web/internet applications are deep and complex. Users, interoperability, data, architecture, support, compliance. Phishing, hijacking, spam, sopcial engineering - BROWSERS!
PHP is the least of your worries
Enterprise Security API – OWASP AppSec NYC 2008
This presentation was by Jeff Williams, OWASP Chair, on the Enterprise Security API.
Vulnerabilities and Security Controls
- Missing - 35%
- Broken - 30%
- Ignored - 20%
- Misused - 15%
Goal is to enable developers. Need to give them hands-on training, a secure coding guideline, and an Enterprise Security API.
The problem with Security Libraries: overpowerful, incomplete, not integrated, broken, can't update, custom.
Enterprise Security API (ESAPI) includes authentication, user, AccessController, AccessReferenceMap, Validator, ENcoder, HTTPUtilities, Encryptor, EncryptedProperties, Randomizer, Exception Handling, Logger, IntrusionDetection, and SecurityConfiguration. Built on top of your existing enterprise services or libraries.
Some Examples
- Input Validation - validation engine and decoding engine that will take input and provide safe output for web pages
- Output Encoding - need to use the right encoding for the right place you are putting the encoding
- Authentication - creates a user object and functions to login() or logout(). Provides additional functionality for encrypted cookies, changing SESSIONID, remember me cookies, etc.
- Access Control - provides functionality to check if a user is authorized for URLs, functions, data, services, or files.
- Direct Object Reference Protection - use an access reference map that does an indirect translation between an object and it's reference. Use getDirectReference() and getIndirectReference() functions.
- Error, Logging, and Detection - Configurable thresholds. Responses are log intrusion, logout user, and disable account. User object is available anywhere in the application so the logger links the messages logged to a user. Exceptions sent to an intrusion detector which has thresholds set.
OWASP ESAPI Covers Majority of OWASP Top Ten
- A1. XSS - Validator, Encoder
- A2. Injection Flaws - Encoder
- A3. Malicious File Execution - HTTPUtilities (Safe Upload)
- A4. Insecure Direct Object Reference - AccessReferenceMap, AccessController
- A5. CSRF - User (CSRF TOken)
- A6. Leakage and Improper Error Handling - EnterpriseSecurityException, HTTPUtils
- A7. Broken Authenticationa nd Sessions - Authenticator, User, HTTPUtils
- A8. Insecure Cryptographic Storage - Encryptor
- A9. Insecure Communications - HTTPUtilities (Secure Cookie, Channel)
- A10. Failure to Restrict URL Access - AccessController
MITRE found that all application security tool vendors' claims put together cover only 45% of the known vulnerability types (695). They found very little overlap between tools, so to get 45% you need them all (assuming their claims are true). This means that at least 55% is not covered by tools.
Latest version released in September 2008 (1.3.1) and are holding a summit later this year to determine if they got everything right. In active development. Java, .NET, PHP, classic ASP. Rich client extensions. Web service extensions. Framework (Struts) integration.
Written under the BSD license so it should be very easy for you to use it in your applciations.
Project Home Page: http://www.owasp.org/index.php/ESAPI
Expert advisory/design/implementation team that has collectively reviewed over 100 million lines of code. ~600 JUnit test cases. FindBugs, PMD, Ounce, and Fortify clean. Code review by several Java security experts. Penetration test of sample applications. Full Javadoc for all functions.
Presentation will be posted on homepage. Includes a list of banned API's that ESAPI replaces. Has example of enterprise cost savings. All of ESAPI is only 5000 lines of code. Building a ESAPI swingset which has a demo of insecure (what can go wrong) and secure (using ESAPI) programming and good tutorial on how to use. Login module shows last successful login, last failed login, number of failed logins, enforces a strong password policy.