Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Cloak

This requires understanding the following design principles, including the 8 principles from Saltzer and Schroeder:

This requires understanding the secure design principles, including the 8 principles from Saltzer and Schroeder:

  • economy of mechanism (keep the design as simple and small as practical, e.g., by adopting sweeping simplifications)
  • fail-safe defaults (access decisions should deny by default, and projects' installation should be secure by default)
  • complete mediation (every access that might be limited must be checked for authority and be non-bypassable)
  • open design (security mechanisms should not depend on attacker ignorance of its design, but instead on more easily protected and changed information like keys and passwords)
  • separation of privilege (ideally, access to important objects should depend on more than one condition, so that defeating one protection system won't enable complete access. E.G., multi-factor authentication, such as requiring both a password and a hardware token, is stronger than single-factor authentication)
  • least privilege (processes should operate with the least privilege necessary)
  • least common mechanism (the design should minimize the mechanisms common to more than one user and depended on by all users, e.g., directories for temporary files)
  • psychological acceptability (the human interface must be designed for ease of use - designing for 'least astonishment' can help)
  • limited attack surface (the attack surface - the set of the different points where an attacker can try to enter or extract data - should be limited)
  • input validation with whitelists (inputs should typically be checked to determine if they are valid before they are accepted; this validation should use whitelists (which only accept known-good values), not blacklists (which attempt to list known-bad values).

This document highlights a core set of high-level secure software development practices: 

https://outlook.office365.com/mail/inbox/id/AAQkADg3NmY0NTkwLTgzYWYtNGQyYy1iN2JjLTJjZDc2YmQyMTFmYwAQAHzgQwaOjkWovDr0XZgjQOk%3D#:~:text=https%3A//nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800%2D218.pdf%20%2B%20https%3A//csrc.nist.gov/publications/detail/sp/800%2D218800-218/final%C2%A0

For example, for their

final

  • Please review the “Produce Well-Secured Software”
, they bring up the suggestion of
  • section.  Suggests using forms of risk modeling for assessing the security risk and using standardized security features and services
instead of creating proprietary implementation. 
  • for implementations.


Your Answers-Please Explain

...

Cloak

The project must implement secure design principles (from 'know secure design').

For example, the project results should have fail-safe defaults (access decisions should deny by default, and projects' installation should be secure by default). They should also have complete mediation (every access that might be limited must be checked for authority and be non-bypassable). Note that in some cases principles will conflict, in which case a choice must be made (e.g., many mechanisms can make things more complex, contravening 'economy of mechanism' / keep it simple).

Implement secure design builds on the question above of "know secure design". For ONAP, the committers must all know the secure design principles and reviewing the code must always includes looking at it from the point of review of the security principles.

It's crucial to document the secure design practices and software design/coding standards and code review. This NIST  SSDF document provides additional details: 

https://csrc.nist.gov/publications/detail/sp/800-218/final


Your Answer-Please Explain

...

Cloak

A software architecture explains a program's fundamental structures, i.e., the program's major components, the relationships among them, and the key properties of these components and relationships.

The architecture would often be part of the documents that describe what the software does and its interfaces.


Your Answer-Please describeDescribe

Documentation Security

Does your project have a description of what a user of your project can and cannot expect in terms of security from the software produced by the project, (In other words, what are its 'security requirements'?)

...

Cloak

These are the security requirements that the software is intended to meet.

There needs to be:

  • a description of the threat model,
  • clear identification of trust boundaries,
  • how the software expects to deal with the threat model and trust boundaries


Your Answer-Please describeDescribe

Assurance Case

Does your project actually meet its documented security requirements?

...

Cloak

For ONAP, somewhere in the project's description, there needs to be (as indicated above):

  • a description of how the project met the threat model,
  • a description of how the project maintains the trust boundaries,
  • an argument that secure design principles have been applied, and
  • an argument that common implementation security weaknesses have been countered.

This may be combined with the "documentation security" document.


Your Answer-Please ExplainDescribe

Vulnerability Mitigation

Vulnerabilities Critical Fixed

...

Cloak

If you compile code into binary executables, do you use

  • compiler flags to mitigate attacks (such as -fstack-protector)?
  • compiler flags to eliminate undefined behavior?
  • special build features like Address Sanitizer (ASAN) (if available)?

If your project provides a web user interface:

  • Does it require the hardening headers: Content Security Policy (CSP), HTTP Strict Transport Security (HSTS), X-Content-Type-Options (as 'nosniff'), and X-Frame-Options?
  • If your web site were to be passed to a website such as <securityheaders.com>, would you get a grade of A or B?
  • Are administrative web pages shown or listed only if the logged in user is an administrator?
  • Are your JavaScript and CSS served from separate files?
  • Do you use HTTP to HTTPS redirects?
  • Do you use HSTS?
  • If appropriated, do you do rate limiting to prevent DOS attacks?
  • Do you employ measures to resist Cross Site Request Forgeries (CSRFs)?
  • Do your cookies use settings to counter Javascript-based attacks, set secure=true, and counter CSRF using a SameSite value?
  • Do you protect use of target='_blank' with rel="noopener noreferrer"?

If your project generates email:

  • Do you take measures for rate limiting?
  • Do you encrypt the email addresses that might be stored in a database?

If your project uses a database:

  • Do you encrypt values that are sensitive?


Your Answer-Please Explain


Cryptographic-specific Software Questions

...

Cloak

If the software produced by the project is an application or library, and its primary purpose is not to implement cryptography, then it SHOULD only call on software specifically designed to implement cryptographic functions; it SHOULD NOT re-implement its own.


Your Answer-Please Explain

Crypto Random - Generic

Does your software use random information? If so, does it use a cryptographically secure random number generator?

...

Cloak

The security mechanisms within the software produced by the project MUST generate all cryptographic keys and nonces using a cryptographically secure random number generator, and MUST NOT do so using generators that are cryptographically insecure.

A cryptographically secure random number generator may be a hardware random number generator (/dev/random), or it may be a cryptographically secure pseudo-random number generator (CSPRNG) using an algorithm such as Hash_DRBG, HMAC_DRBG, CTR_DRBG, Yarrow, or Fortuna. Examples of calls to secure random number generators include Java's java.security.SecureRandom and JavaScript's window.crypto.getRandomValues. Examples of calls to insecure random number generators include Java's java.util.Random and JavaScript's Math.random.

For additional guidance and examples about what kind of specifications to rate a random bit generator (RBG) please review: https://csrc.nist.gov/publications/detail/sp/800-90c/draft 



Your Answers-Please Explain

Crypto Weaknesses

Does your software depend on any cryptographic algorithms or modes that have known serious weaknesses?

...

Cloak

The default security mechanisms within the software produced by the project SHOULD NOT depend on cryptographic algorithms or modes with known serious weaknesses (e.g., the SHA-1 cryptographic hash algorithms, or the CBC mode in SSH).
Concerns about CBC mode in SSH are discussed in CERT: SSH CBC vulnerability.


Your Answer-Please Explain

Crypto Working

Does your software depend on any cryptographic algorithms that are known to be broken?

...

Cloak

The default security mechanisms within the software produced by the project MUST NOT depend on broken cryptographic algorithms (e.g., MD4, MD5, single DES, RC4, Dual_EC_DRBG), or use cipher modes that are inappropriate to the context, unless they are necessary to implement an interoperable protocol (where the protocol implemented is the most recent version of that standard broadly supported by the network ecosystem, that ecosystem requires the use of such an algorithm or mode, and that ecosystem does not offer any more secure alternative). The documentation MUST describe any relevant security risks and any known mitigations if these broken algorithms or modes are necessary for an interoperable protocol.
ECB mode is almost never appropriate because it reveals identical blocks within the ciphertext as demonstrated by the ECB Penguin, and CTR mode is often inappropriate because it does not perform authentication and causes duplicates if the input state is repeated. In many cases it's best to choose a block cipher algorithm mode designed to combine secrecy and authentication, e.g., Galois/Counter Mode (GCM) and EAX. Projects MAY allow users to enable broken mechanisms (e.g., during configuration) where necessary for compatibility, but then users know they're doing it.


Your Answer-Please Explain

Crypto Keylength

Does your software generate any keys? If so, do they use any default key-lengths that are considered insecure?

...

Cloak

The security mechanisms within the software produced by the project MUST use default key-lengths that at least meet the NIST minimum requirements through the year 2030 (as stated in 2012). It MUST be possible to configure the software so that smaller key-lengths are completely disabled.
These minimum bit-lengths are: symmetric key 112, factoring modulus 2048, discrete logarithm key 224, discrete logarithmic group 2048, elliptic curve 224, and hash 224 (password hashing is not covered by this bit-length, more information on password hashing can be found in the Crypto Password Storage question). See <www.keylength.com> for a comparison of key-length recommendations from various organizations. The software MAY allow smaller key-lengths in some configurations (ideally it would not, since this allows downgrade attacks, but shorter key-lengths are sometimes necessary for interoperability).


Your Answers-Please Explain

Crypto Algorithm Agility

Does your software use cryptographic algorithms? If so, can a user of ONAP switch the algorithm if one is found to be broken?

...

Cloak

The project SHOULD support multiple cryptographic algorithms, so users can quickly switch if one is broken. Common symmetric key algorithms include AES, Twofish, and Serpent. Common cryptographic hash algorithm alternatives include SHA-2 (including SHA-224, SHA-256, SHA-384 AND SHA-512) and SHA-3.


Your Answers-Please Explain


Crypto Certificate Verification

...