Secure Coding Education: Are We Making Progress?
Secure Coding Education: Are We Making Progress?
复制标题
安全编码教育:我们正在取得进展吗?
DOI:
--
复制
发表时间:
2012
期刊:
影响因子:
--
通讯作者:
M. Bishop
中科院分区:
文献类型:
--
作者:
K. Nance;Bria N Hay;M. Bishop
Proceedings of the 16 th Colloquium for Information Systems Security Education Orlando, FL June 11-13, 2012 Secure Coding Education: Are We Making Progress? Kara Nance, Brian Hay, University of Alaska Fairbanks, and Matt Bishop, University of California at Davis Abstract – While the necessity of ensuring that secure coding practices are universally taught and adopted is becoming increasingly apparent, there is still debate over whether we are making significant progress in this area. This paper recalls the accomplishments of the first Secure Coding Workshop in 2008 and discusses some of the outcomes, challenges, and findings from that workshop. It then discusses the 2011 Summit on Secure Education, which explored some of the issues raised at the Secure Coding Workshop. It also discusses some of the follow-on activities that the workshop helped to inspire or promote, and some remaining objectives that are still presenting challenges in the ongoing pursuit of secure coding. Index terms – Secure coding, computer security, computer education I. I NTRODUCTION While current computer science (CS) programs are adept at teaching programming skills including exposing students to languages commonly used in industry, the focus is often on “making programs work”. Students are typically given an assignment with a set of functional goals such as to create a program that reads records from a file, and then performs some calculation based on the values retrieved. In such cases little consideration is given to secure programming issues, and as such students do not learn how to write programs that would be resilient to accidentally or maliciously malformed input in real world conditions. For example, suppose that the number of records in the file is specified in the file header, and that the application must allocate sufficient space to load all records. Such an application is easy to write if programmer makes the assumptions that the header will always be accurate and well-formed. However, in reality these assumptions are probably not valid. Consider the implications for the program if the number of records value in the file header was very large, zero, negative, or any value not equal to the actual number of records in the file. It is far more challenging to write a program that can handle these cases. If practical lessons such as this are easy to incorporate into a general computer science education; and these skills increase the marketability of programmers; and help protect society against attacks that exploit vulnerabilities ISBN 1-933510-95-1/$15.00 2012 CISSE in code, why is the practice not included as a part of the required curriculum? A word about terminology will clarify much of the following discussion. Security per se has no definition; instead, a set of rules known as a security policy defines that term in a particular context. Thus, “secure programming” should refer to a style of programming that produces code satisfying stated security requirements. But in practice, the term is used to refer to programs that avoid generic problems like buffer overflows or failure to validate inputs properly. A more accurate term for this style of programming is robust programming or defensive programming. In this paper, though, we use the term “secure programming” for robust or defensive programming to conform to the more common usage. II. B ACKGROUND A group of educators and industry representatives met at the Secure Coding Workshop in April 2008, with the goal of addressing the issue of integrating secure coding practices into current academic curricula. The initial interactions at the workshop demonstrated how important it is to draw the distinction between programming security functionality and secure programming. The former involves activities such as writing cryptographic or auditing functionality, and is typically the domain of a relatively small number of programmers with extensive training and specialized knowledge. The later impacts all programmers and all code, and is the cause of many security vulnerabilities in programs. The industry representatives felt that it was imperative that all programmers have a knowledge of secure programming techniques, and were concerned about the amount of time and effort they currently spend training new CS graduates in what they considered to be elementary secure programming concepts. These concepts included the ability for programmers to “think like attackers” when writing code, how and why to validate input (and what constitutes “input”), and how to identify and address possible overflows and underflows in various data types (including arrays and numeric types). Some concern was raised that while these needs were being communicated at forums such as this, that little or no emphasis on these skills was evident in the industry job postings, which many students use as a guide for current industry requirements and many academic