ENSURING SAFE USAGE OF BUFFERS IN PROGRAMMING LANGUAGE C

Milena Vujosevic-Janicic

Abstract

We consider the problem of buffer overflows in C programs. This problem is very important because buffer overflows are suitable targets for security attacks and sources of serious programs’ misbehavior. Buffer overflow bugs can be detected at run-time by dynamic analysis, and before run-time by static analysis. In this paper we present a new static, modular approach for automated detection of buffer overflows. Our approach is flow-sensitive and inter-procedural, and it deals with both statically and dynamically allocated buffers. Its architecture is flexible and pluggable — for instance, for checking generated correctness and incorrectness conditions, it can use any external automated theorem prover that follows SMT-LIB standards. The system uses an external and easily extendable knowledge database that stores all the reasoning rules so they are not hard-coded within the system. We also report on our prototype implementation, the FA D O tool, and on its experimental results.

References

  1. P. Cousot and R. Cousot. (2004) Basic Concepts of Abstract Interpretation. In Building the Information Society. Kluwer, 2004.
  2. Cowan, C., Wagle, P., Pu, C., Beattie, S., and Walpole, J. (2000). Buffer overflows: Attacks and defenses for the vulnerability of the decade. In Proceedings of the DARPA Information Survivability Conf. and Expo.
  3. Dor, N., Rodeh, M., and Sagiv, M. (2003). Cssv: Towards a realistic tool for statically detecting all buffer overflows in c. In Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation. ACM Press.
  4. Dutertre, B. and De Moura, L. (2006). A fast lineararithmetic solver for dpll(t). In CAV 2006, vol. 4144 of LNCS. Springer.
  5. Ellenbogen, R. (2004). Fully automatic verification of absence of errors via interprocedural integer analysis. Master's thesis, University of Tel-Aviv, Israel.
  6. Fillitre, J.-C. and March, C. (2007). The why/- krakatoa/caduceus platform for deductive program verification. In CAV, vol. 4590 of LNCS. Springer.
  7. Holzmann, G. (2002). Static source code checking for userdefined properties. In Proceedings of 6th World Conference on Integrated Design and Process Technology.
  8. Kratkiewicz, K. and Lippmann, R. (2005). Using a diagnostic corpus of c programs to evaluate buffer overflow detection by static analysis tools. In Workshop on the Evaluation of Software Defect Detection Tools.
  9. Larochelle, D. and Evans, D. (2001). Statically detecting likely buffer overflow vulnerabilities. In USENIX Security Symposium.
  10. PolySpace Technologies (2003). Polyspace c verifier. Paris, France. http://www.polyspace.com.
  11. Ranise, S. and Tinelli, C. (2003). LIB Format: An Initial Proposal. http://goedel.cs.uiowa.edu/smt-lib/.
  12. Simon, A. and King, A. (2002). Analyzing String Buffers in C. In International Conference on Algebraic Methodology and Software Technology, volume 2422 of LNCS. Springer.
  13. Viega, J., Bloch, J., Kohno, Y., and McGraw, G. (2000). Its4: A static vulnerability scanner for c and c++ code. In 16th Annual Computer Security Applications Conference (ACSAC'00).
  14. Viega, J. and McGraw, G. (2002). Building Secure Software. Addison-Wesley.
  15. Wagner, D., Foster, J., Brewer, E., and Aiken, A. (2000). A first step towards automated detection of buffer overrun vulnerabilities. In Symposium on Network and Distributed System Security.
  16. Wilander, J. and Kamkar, M. (2002). A comparison of publicly available tools for static intrusion prevention. In Proceedings of the 7th Nordic Workshop on Secure IT Systems (Nordsec 2002).
  17. Wilander, J. and Kamkar, M. (2003). A comparison of publicly available tools for dynamic buffer overflow prevention. In Proceedings of the 10th Network and Distributed System Security Symposium.
  18. Xie, Y., Chou, A., and Engler, D. (2003). Archer: using symbolic, path-sensitive analysis to detect memory access errors. In Proceedings of the 9th European software engineering conference. ACM Press.
  19. Yorsh, G. and Dor, N. (2003). The Design of CoreC. on-line at: http://www.cs.tau.ac.il/ gretay/GFC.htm.
  20. Zhivich, M., Leek, T., and Lippmann, R. (2005). Dynamic buffer overflow detection. In Workshop on the Evaluation of Software Defect Detection Tools.
  21. Zitser, M., Lippmann, R., and Leek, T. (2004). Testing static analysis tools using exploitable buffer overflows from open source code. In Proceedings of the 12th ACM SIGSOFT international symposium on Foundations of software engineering. ACM.
Download


Paper Citation


in Harvard Style

Vujosevic-Janicic M. (2008). ENSURING SAFE USAGE OF BUFFERS IN PROGRAMMING LANGUAGE C . In Proceedings of the Third International Conference on Software and Data Technologies - Volume 1: ICSOFT, ISBN 978-989-8111-51-7, pages 29-36. DOI: 10.5220/0001891200290036


in Bibtex Style

@conference{icsoft08,
author={Milena Vujosevic-Janicic},
title={ENSURING SAFE USAGE OF BUFFERS IN PROGRAMMING LANGUAGE C},
booktitle={Proceedings of the Third International Conference on Software and Data Technologies - Volume 1: ICSOFT,},
year={2008},
pages={29-36},
publisher={SciTePress},
organization={INSTICC},
doi={10.5220/0001891200290036},
isbn={978-989-8111-51-7},
}


in EndNote Style

TY - CONF
JO - Proceedings of the Third International Conference on Software and Data Technologies - Volume 1: ICSOFT,
TI - ENSURING SAFE USAGE OF BUFFERS IN PROGRAMMING LANGUAGE C
SN - 978-989-8111-51-7
AU - Vujosevic-Janicic M.
PY - 2008
SP - 29
EP - 36
DO - 10.5220/0001891200290036