Page 384 -
P. 384

Chapter 14   Security engineering  367


                                       The widespread use of the Internet in the 1990s introduced a new challenge for soft-
                                       ware engineers—designing and implementing systems that were secure. As more
                                       and more systems were connected to the Internet, a variety of different external
                                       attacks were devised to threaten these systems. The problems of producing depend-
                                       able systems were hugely increased. Systems engineers had to consider threats from
                                       malicious and technically skilled attackers as well as problems resulting from acci-
                                       dental mistakes in the development process.
                                         It is now essential to design systems to withstand external attacks and to recover from
                                       such attacks. Without security precautions, it is almost inevitable that attackers will com-
                                       promise a networked system. They may misuse the system hardware, steal confidential
                                       data, or disrupt the services offered by the system. System security engineering is there-
                                       fore an increasingly important aspect of the systems engineering process.
                                         Security engineering is concerned with the development and evolution of systems
                                       that can resist malicious attacks, which are intended to damage the system or its data.
                                       Software security engineering is part of the more general field of computer security.
                                       This has become a priority for businesses and individuals as more and more crimi-
                                       nals try to exploit networked systems for illegal purposes. Software engineers should
                                       be aware of the security threats faced by systems and ways in which these threats can
                                       be neutralized.
                                         My intention in this chapter is to introduce security engineering to software engi-
                                       neers, with a focus on design issues that affect application security. The chapter is
                                       not about computer security as a whole and so doesn’t cover topics such as encryp-
                                       tion, access control, authorization mechanisms, viruses and Trojan horses, etc. These
                                       are described in detail in general texts on computer security (Anderson, 2008;
                                       Bishop, 2005; Pfleeger and Pfleeger, 2007).
                                         This chapter adds to the discussion of security elsewhere in the book. You should
                                       read the material here along with:
                                       • Section 10.1, where I explain how security and dependability are closely related;

                                       • Section 10.4, where I introduce security terminology;
                                       • Section 12.1, where I introduce the general notion of risk-driven specification;
                                       • Section 12.4, where I discuss general issues of security requirements specification;

                                       • Section 15.3, where I explain a number of approaches to security testing.
                                         When you consider security issues, you have to consider both the application
                                       software (the control system, the information system, etc.) and the infrastructure on
                                       which this system is built (Figure 14.1). The infrastructure for complex applications
                                       may include:

                                       • an operating system platform, such as Linux or Windows;
                                       • other generic applications that run on that system, such as web browsers and
                                         e-mail clients;

                                       • a database management system;
   379   380   381   382   383   384   385   386   387   388   389