vides a method that refactors an existing program into
distinct modules with high and low security (Smith
and Thober, 2006). The proposed refactoring identi-
fies code which depends on high security inputs by
using program slicing based on information flow of
C programs, and extracts a new module including the
code. Although the detailed mechanics and target pro-
gramming languages are different between this work
and mine, these aims are almost the same.
5 CONCLUSION
Although many programmers want to easily remove
vulnerabilities from existing software programs, there
are still few systematic mechanisms which are in-
tended to be codified into automated tools. This paper
has proposed secure refactoring which improves the
security level of existing code without changing its
observable behavior. Two main issues will be tackled
in future work.
• For the proposed secure refactorings to be prac-
tically applied to realistic software development,
tool support is considered crucial. Moreover, a
running implementation is essential for demon-
strating the feasibility of automation of the se-
cure refactorings. The author is currently working
on integration of the proposed refactorings into
our developed tool, Jrbx (Java refactoring browser
with XML) (Maruyama and Yamamoto, 2005)
3
.
Moreover, the implementation of the refactorings
might require elaboration of the presented me-
chanics.
• It is not guaranteed that each transformation of the
proposed secure refactorings neither changes the
behavior of an existing code nor inserts new vul-
nerabilities into the code. In addition to a theoret-
ical proof, the author will make a large number of
experiments with various programs to check the
ability of the refactoring transformations.
REFERENCES
Bloch, J. (2001). Effective Java: Programming Language
Guide. Addison-Wesley.
Devanbu, P. T. and Stubblebine, S. (2000). Software engi-
neering for security: A roadmap. In ICSE ’00: The
Future of Softw. Eng., pages 227–239.
Ferrante, J., Ottenstein, K. J., and Warren, J. D. (1987). The
program dependence graph and its use in optimiza-
tion. ACM TOPLAS, 9(3):319–349.
3
Jrbx can be downloaded from http://www.jtool.org/.
Fowler, M. (1999). Refactoring: Improving the Design of
Existing Code. Addison-Wesley.
Gollmann, D. (2006). Computer Security, 2nd ed. John
Wiley & Sons.
Gosling, J., Joy, B., and Steele, G. (1996). The Java Lan-
guage Specification. Addison-Wesley.
Graff, M. G. and van Wyk, K. R. (2003). Secure Coding:
Principles and Practices. O’Reilly & Associates Inc.
Hoglund, G. and McGraw, G. (2004). Exploiting Software:
How to Break Code. Addison-Wesley.
Howard, M. and LeBlanc, D. (2002). Writing Secure Code,
Second Edition. Microsoft Press.
Kerievsky, J. (2004). Refactoring to Patterns. Addison-
Wesley.
Landwehr, C. E., Bull, A. R., McDermott, J. P., and Choi,
W. S. (1994). A taxonomy of computer program secu-
rity flaws, with examples. ACM Computing Surveys,
26(3):211–254.
Maruyama, K. and Yamamoto, S. (2005). Design and im-
plementation of an extensible and modifiable refactor-
ing tool. In Proc. IWPC’05, pages 195–204.
McGraw, G. (2006). Software Security: Building Security
in. Addison-Wesley.
McGraw, G. and Felten, E. (1998). Twelve rules
for developing more secure java code. Java-
world. http://www.javaworld.com/javaworld/jw-12-
1998/jw-12-securityrules.html.
Mens, T. and Tourw
´
e, T. (2004). A survey of software refac-
toring. IEEE Trans. Sofw. Eng., 30(2):126–139.
Oaks, S. (2001). Java Security, 2nd ed. Addison-Wesley.
Opdyke, W. F. (1992). Refactoring object-oriented frame-
works. Technical report, Ph.D. thesis, University of
Illinois, Urbana-Champaign.
Parnas, D. L. (1972). On the criteria to be used in de-
composing systems into modules. Comm. ACM,
15(12):1053–1058.
Smith, S. F. and Thober, M. (2006). Refactoring programs
to secure information flows. In Proc. PLAS’06, pages
75–84.
SunMicrosystems (2000). Security code guidelines.
http://java.sun.com/security/seccodeguide.html.
Viega, J. and McGraw, G. (2001). Building Secure Soft-
ware: How to Avoid Security Problems the Right Way.
Addison-Wesley.
Viega, J., McGraw, G., Mutdosch, T., and Felten, E. W.
(2000). Statically scanning java code: Finding secu-
rity vulnerabilities. IEEE Software, 17(5):68–74.
Viega, J. and Messier, M. (2003). Secure Programming
Cookbook for C and C++. O’Reilly & Associates Inc.
Wheeler, D. A. (1999). Secure Programming for Linux
and Unix HOWTO. http://www.dwheeler.com/secure-
programs/.
Whittaker, J. A. and Thompson, H. H. (2001). How to Break
Software Security. Addison Wesley.
SECURE REFACTORING - Improving the Security Level of Existing Code
229