Detecção Automática de Vulnerabilidades em Código Protegido por Canários

  • Izabela Karennina Travizani Maffra UFMG
  • Fernando Magno Quintão Pereira UFMG
  • Leonardo Barbosa Oliveira UFMG

Resumo


O estouro de arranjos é um tipo de ataque que custa, todo ano, milhões de dólares aos usuários de software. Canários são uma das formas mais conhecidas de prevenção contra esse tipo de ataque. Apesar de serem muito efetivos na prática, canários não são a solução ideal. Em alguns casos, eles não impedem a sobrescrita das chamadas variáveis locais. Tal omissão pode permitir que um adversário tome o controle do programa, desde que haja escalares posicionados após um arranjo vulnerável. A detecção desse tipo de vulnerabilidade é difícil, pois demanda grande familiaridade com o código sob análise. O objetivo deste artigo é resolver esse problema de forma automática. Tal feito pode ser conseguido via análises estáticas de código, implementadas a nível do compilador. Nossa técnica não requer qualquer tipo de intervenção do usuário e é notavelmente precisa. Esses algoritmos, implementados no compilador LLVM, foram testados em benchmarks que juntos nos deram mais de 1,4 milhões de linhas de código C. Nossa análise é prática e eficiente. Por exemplo, detectamos 836 potenciais vulnerabilidades em 17 programas presentes em SPEC CPU 2006.

Referências

Andersen, L. O. (1994). Program Analysis and Specialization for the C Programming Language. PhD thesis, DIKU, University of Copenhagen.

Denning, D. E. and Denning, P. J. (1977). Certification of programs for secure information flow. Commun. ACM, 20:504–513.

Dor, N., Rodeh, M., and Sagiv, M. (2003). CSSV: Towards a realistic tool for statically detecting all buffer overflows in c. In PLDI, pages 155–167. ACM.

Evans, D. and Larochelle, D. (2002). Improving Security Using Extensible Lightweight Static Analysis. IEEE Software, 19:2002.

Ferrante, J., Ottenstein, K. J., and Warren, J. D. (1987). The program dependence graph and its use in optimization. TOPLAS, 9(3):319–349.

Hackett, B., Das, M., Wang, D., and Yang, Z. (2006). Modular Checking for Buffer Overflows in the Large. In ICSE, pages 232–241. ACM.

Hardekopf, B. and Lin, C. (2007). The ant and the grasshopper: fast and accurate pointer analysis for millions of lines of code. In PLDI, pages 290–299. ACM.

Jovanovic, N., Kruegel, C., and Kirda, E. (2006). Pixy: A static analysis tool for detecting web application vulnerabilities (short paper). In Symposium on Security and Privacy, pages 258–263. IEEE.

Lattner, C. and Adve, V. S. (2004). LLVM: A compilation framework for lifelong program analysis & transformation. In CGO, pages 75–88. IEEE.

Levy, E. (1996). Smashing the stack for fun and profit. Phrack, 7(49).

Quadros, G. S. and Pereira, F. M. Q. (2011). Static detection of address leaks. In SBSeg, pages 23–37.

Richarte, G. (2002). Four Different Tricks to Bypass StackShield and StackGuard Protection. World Wide Web, 1.

Rimsa, A. A., D’Amorim, M., and Pereira, F. M. Q. (2011). Tainted flow analysis on e-SSA-form programs. In CC, pages 124–143. Springer.

Shahriar, H. and Zulkernine, M. (2010). Classification of Static Analysis-Based Buffer Overflow Detectors. In SSIRI-C, pages 94–101. IEEE Computer Society.

Sotirov, A. (2005). Automatic Vulnerability Detection Using Static Source Code Analysis. Technical report.

Tevis, J.-E. J. and Hamilton, Jr., J. A. (2006). Static Analysis of Anomalies and Security Vulnerabilities in Executable Files. In ACM-SE 44, pages 560–565. ACM.

Tripp, O., Pistoia, M., Fink, S., Sridharan, M., and Weisman, O. (2009). TAJ: Effective taint analysis of web applications. In PLDI, pages 87–97. ACM.

Viega, J., Bloch, J. T., Kohno, T., and McGraw, G. (2002). Token-Based Scanning of Source Code for Security Problems. ACM Trans. Inf. Syst. Secur., 5(3):238–261.

Weber, M., Shah, V., and Ren, C. (2001). A Case Study in Detecting Software Security Vulnerabilities Using Constraint Optimization. In Workshop on Source Code Analysis and Manipulation, pages 1–11.
Publicado
11/11/2013
MAFFRA, Izabela Karennina Travizani; PEREIRA, Fernando Magno Quintão; OLIVEIRA, Leonardo Barbosa. Detecção Automática de Vulnerabilidades em Código Protegido por Canários. In: SIMPÓSIO BRASILEIRO DE SEGURANÇA DA INFORMAÇÃO E DE SISTEMAS COMPUTACIONAIS (SBSEG), 13. , 2013, Manaus. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2013 . p. 184-197. DOI: https://doi.org/10.5753/sbseg.2013.19545.