2.2 Explain software assurance best practices
Platforms:
Mobile:
Web application
Client/server
Embedded
SoC
Firmware
SDLC integration: requirements/criteria definition; secure design; static analysis and peer code review; testing & analysis + user acceptance testing
DevSecOps: identify vulnerabilities; find & prioritise risk remediation; secure workflow
Software assessment methods:
User acceptance testing: ensures software users are satisfied with the functionalities
Stress test application: ensure application availability and scalability; maximum load
Security regression testing: ensure no new vulnerabilities/misconfigurations are introduced by patches/updates (e.g. change control, VCS, SCM)
Code review: pair programming; over-the-shoulder; pass-around; tool-assisted
Secure coding best practices:
Input validation: validate all untrusted data; specify character sets + data types/length; whitelist allowed characters; additional controls for hazardous characters
Output encoding: encode all unsafe characters; sanitise SQL, XML queries & OS cmds
Session management: short session inactivity timeout; new session identifier generation; logout available from any authorised page; secure session ID algorithms
Authentication: central, segregated authentication; POST requests; unspecific error codes; encrypted & securely stored (salted hash) credentials
Data protection: least privilege; protect/purge sensitive caches; secure encryption; no plaintext password storage; disable client-side caching; access controls for sensitive data
Parameterised queries: use placeholders to separate query and data => prevents SQL query altering (SQLi)
Static analysis tools: thorough white-box code review to identify programming errors
Dynamic analysis tools: test inputs during code execution for complex vulnerabilities
Formal methods for verification of critical software: Fagan inspection (planning -> overview -> preparation -> meeting -> rework -> follow-up)
Service-oriented architecture:
SAML: message confidentiality & integrity (TLS); validate protocol, signatures etc.
SOAP: exchange structured info for web services (extensibility [extensions] + neutrality [over any app/transport layer protocol] + independence [any programming model])
Token-based/digest authentication; validate digital signatures; encrypt data with keys
REST: access & manipulate textual representations of web resources with HTTP
HTTPS; access control; API keys; whitelist HTTP methods; input validation
Microservices: app is a collection of loosely coupled services; lightweight protocols
IAM with OAuth; defense in depth; use open source crypto libraries; automatic security updates; distributed monitoring/scanning; single point of entry (API gateway)
Last updated