9.2.1 Secure development policy
Security rules for the development of
software and systems should be established and applied to developments within
the organization that cover the entire system development lifecycle.
- To build up a secure service,
architecture, software and system, ensure:
a) security of
the development environment;
b) security in
the software development methodology
c) secure
coding guidelines for each programming language used;
d) security
requirements in the design phase;
e) security
checkpoints within the project milestones;
f) secure
repositories;
g) security in
the version control;
h) required
application security knowledge;
i) developers’
capability of avoiding, finding and fixing vulnerabilities.
- A secure development environment
includes people, processes and technology associated with system development
and integration. When establishing secure development environment, consider:
a) sensitivity
of data to be processed, stored and transmitted by the system;
b) applicable
external and internal requirements, e.g. from regulations or policies;
c) security
controls already implemented by the organization that support system
development;
d)
trustworthiness of personnel working in the environment;
e) the degree
of outsourcing associated with system development;
f) the need
for segregation between different development environments;
g) control of
access to the development environment;
h) monitoring
of change to the environment and code stored therein;
i) backups are
stored at secure offsite locations;
j) control
over movement of data from and to the environment.
- Once the level of protection is
determined for a specific development environment, document corresponding
processes in secure development procedures and provide these to all individuals
who need them.
9.2.2 System change control
procedures
Changes to systems within the development lifecycle should be controlled by the use of formal change control procedures.
- Document and enforce formal
change control procedures to ensure the integrity of system, applications and
products. Changing software can impact the operational environment and vice
versa. Introduction of new systems and major changes to existing systems should
follow a formal process of documentation, specification, testing, quality
control and managed implementation.
- Formal change process ensures
that existing security and control procedures are not compromised and programmers
are given access only to those parts of the system necessary for their work and
that formal agreement and approval for any change is obtained.
- Formal change control ensures:
a) that changes
are submitted by authorized users following recorded authorization levels;
b) review of
controls and integrity procedures to ensure that they will not be compromised
by the changes;
c) identification
of all software, information, database entities and hardware that require
amendment;
d) identification
and checking of security critical code to minimize the likelihood of known
security weaknesses;
e) obtaining
of formal approval for proposals before work commences;
f) that authorized
users accept changes prior to implementation;
g) that the
system documentation is updated on the completion of each change;
h) maintainance
of a version control for all software updates;
i) maintainance
of an audit trail of all change requests;
j) that
operating documentation and user procedures are changed as necessary;
k) that the
implementation of changes takes place at the right time and disturbance of the
business processes involved is avoided.
- When operating platforms are changed, business critical applications
should be reviewed and tested to ensure there is no adverse impact on
organizational operations or security.
9.2.3 Restrictions on changes to
software packages
Modifications to software packages should be discouraged, limited to necessary changes and all changes should be strictly controlled.
- As far as possible and
practicable, vendor-supplied software packages should be used without
modification.
- Where a software package needs to
be modified, consider:
a) the risk of
built-in controls and integrity processes being compromised;
b) whether the
consent of the vendor should be obtained;
c) the
possibility of obtaining the required changes from the vendor as standard
program updates;
d) the impact
if the organization becomes responsible for the future maintenance of the
software as a result of changes;
e)
compatibility with other software in use.
- If changes are necessary, retain
the original software and the changes like patches and updates applied to a
designated copy. Test and document all changes, so that they can be reapplied,
if necessary, to future software upgrades.
9.2.4 Outsourced development
The organization should supervise and monitor the activity of outsourced system development.
- Obtain assurance that the
external party complies with rules for secure development (see 9.2.1) if development
is outsourced.
- Set contractual requirements for
secure design, coding and testing practices - developers should be trained in
the use of secure programming techniques and testing and code review should
verify their use;
- Conduct acceptance testing for
the quality and accuracy of the deliverables;
- Ask developer to provide evidence
that security thresholds were used to establish minimum acceptable levels of
security and privacy quality;
- Ask developer to provide evidence
that sufficient testing has been applied to guard against the presence of known
vulnerabilities and against the absence
of both intentional and unintentional malicious content upon delivery;
- Set contractual right to audit
development processes and controls, considering that the organization remains
responsible for compliance with applicable laws and control efficiency
verification;
- Set contractual
requirements for effective documentation of the build environment used to
create deliverables.
9.2.5 System security testing
Testing of security functionality should be carried out during development. Test data should be selected carefully, protected and controlled.
- New and updated IT systems
require thorough testing and verification during and after the development
processes, including:
a) the
preparation of a detailed schedule of activities and
b) the
preparation of test inputs and expected outputs under a range of conditions.
c) independent
acceptance testing should then be undertaken to ensure that the system works as
expected and only as expected.
- The extent of testing should be
in proportion to the importance and nature of the system. System and acceptance
testing usually requires substantial volumes of test data that are as close as
possible to operational data.
- Avoid the use of operational data
containing personally identifiable information or any other confidential
information. If it is necessary to use confidential data, remove or modify all
sensitive details and content.
- When using operational data for
testing purposes:
a) use the
same access control procedures, which apply to operational application systems;
b) use authorization each time operational information is copied to a
test environment;
c) erase
operational information from a test environment immediately after the testing;
d) log the
copying and use of operational information to provide an audit trail.
- Establish acceptance testing criteria
for new information systems, upgrades
and new versions and include information security requirements in system acceptance testing.
The testing should also be conducted on received components and integrated
systems. If applicable, use automated tools, such as code analysis tools or
vulnerability scanners, and verify the remediation of security-related defects.
- Perform acceptance tests in a
realistic test environment to ensure that the system will not introduce
vulnerabilities to the organization’s environment and that the tests are
reliable.