Aplicação Dinâmica de Políticas Estáticas de Fluxo
Abstract
Information flow analysis is today one of the most important techniques to find vulnerabilities in programs. Since its conception, this technique has evolved to achieve great precision and scalability. However, being static, information flow analysis has one shortcoming: to ensure soundness, it must conservatively refuse some programs which are well-known to be safe. Even exponential-time algorithms cannot change this scenario, as long as they remain static. To address this problem, in this paper we propose a combination of static analysis with dynamic checks to increase the precision of information flow techniques. Our dynamic checks let us rule out unsafe paths during the execution of the program while preserving secure flows of information. In this way, we can certify the safety of programs even in face of features which are difficult to analyze statically, such as subtyping polymorphism. To validate our ideas, we have materialized them into a tool, InspectorJ, which inserts instrumentation in a program to prevent the execution of unsafe paths.References
Balzarotti, D., Cova, M., Felmetsger, V., Jovanovic, N., Kirda, E., Kruegel, C., and Vigna, G. (2008). Saner: Composing static and dynamic analysis to validate sanitization in web applications. In SP, pages 387–401. IEEE Computer Society.
Bruno Rodrigues, D. A. e. F. M. Q. a. P. (2016). Sparse representation of implicit flows with applications to side-channel detection. In Compiler Construction, pages 1–20. ACM.
Chebaro, O., Kosmatov, N., Giorgetti, A., and Julliand, J. (2012). Program slicing enhances a verification technique combining static and dynamic analysis. In SAC, pages 1284–1291. ACM.
Clause, J., Li, W., and Orso, A. (2007). Dytan: A generic dynamic taint analysis framework. In ISSTA, pages 196–206. ACM.
Cytron, R., Ferrante, J., Rosen, B. K., Wegman, M. N., and Zadeck, F. K. (1991). Efficiently computing static single assignment form and the control dependence graph. TOPLAS, 13(4):451–490.
Denning, D. E. and Denning, P. J. (1977). Certification of programs for secure information flow. Commun. ACM, 20:504–513.
Huang, Y., Yu, F., Hang, C., Tsai, C., Lee, D., and Kuo, S. (2004). Securing web application code by static analysis and runtime protection. In WWW, pages 40–52. ACM.
Hunt, S. and Sands, D. (2006). On flow-sensitive security types. In POPL, pages 79–90. ACM.
Nethercote, N. and Seward, J. (2007). Valgrind: a framework for heavyweight dynamic binary instrumentation. In PLDI, pages 89–100. ACM.
Rimsa, A., Quint˜ao Pereira, F. M., and d’Amorim, M. (2011). Tainted flow analysis on e-ssa-form programs. In CC, pages 122 – 141, Heidelberg, Alemanha. Springer.
Russo, A. and Sabelfeld, A. (2010). Dynamic vs. static flow-sensitive security analysis. In CSF, pages 186–199. IEEE Computer Society.
Vallee-Rai, R., Co, P., Gagnon, E., Hendren, L., Lam, P., and Sundaresan, V. (1999). Soot - a java bytecode optimization framework. In CASCON. IBM Press.
Vogt, P., Nentwich, F., Jovanovic, N., Kirda, E., Krügel, C., and Vigna, G. (2007). Cross site scripting prevention with dynamic data tainting and static analysis. In NDSS.
Zhang, R., Huang, S., Qi, Z., and Guan, H. (2011). Combining static and dynamic analysis to discover software vulnerabilities. In IMIS, pages 175–181. IEEE Computer Society.
Bruno Rodrigues, D. A. e. F. M. Q. a. P. (2016). Sparse representation of implicit flows with applications to side-channel detection. In Compiler Construction, pages 1–20. ACM.
Chebaro, O., Kosmatov, N., Giorgetti, A., and Julliand, J. (2012). Program slicing enhances a verification technique combining static and dynamic analysis. In SAC, pages 1284–1291. ACM.
Clause, J., Li, W., and Orso, A. (2007). Dytan: A generic dynamic taint analysis framework. In ISSTA, pages 196–206. ACM.
Cytron, R., Ferrante, J., Rosen, B. K., Wegman, M. N., and Zadeck, F. K. (1991). Efficiently computing static single assignment form and the control dependence graph. TOPLAS, 13(4):451–490.
Denning, D. E. and Denning, P. J. (1977). Certification of programs for secure information flow. Commun. ACM, 20:504–513.
Huang, Y., Yu, F., Hang, C., Tsai, C., Lee, D., and Kuo, S. (2004). Securing web application code by static analysis and runtime protection. In WWW, pages 40–52. ACM.
Hunt, S. and Sands, D. (2006). On flow-sensitive security types. In POPL, pages 79–90. ACM.
Nethercote, N. and Seward, J. (2007). Valgrind: a framework for heavyweight dynamic binary instrumentation. In PLDI, pages 89–100. ACM.
Rimsa, A., Quint˜ao Pereira, F. M., and d’Amorim, M. (2011). Tainted flow analysis on e-ssa-form programs. In CC, pages 122 – 141, Heidelberg, Alemanha. Springer.
Russo, A. and Sabelfeld, A. (2010). Dynamic vs. static flow-sensitive security analysis. In CSF, pages 186–199. IEEE Computer Society.
Vallee-Rai, R., Co, P., Gagnon, E., Hendren, L., Lam, P., and Sundaresan, V. (1999). Soot - a java bytecode optimization framework. In CASCON. IBM Press.
Vogt, P., Nentwich, F., Jovanovic, N., Kirda, E., Krügel, C., and Vigna, G. (2007). Cross site scripting prevention with dynamic data tainting and static analysis. In NDSS.
Zhang, R., Huang, S., Qi, Z., and Guan, H. (2011). Combining static and dynamic analysis to discover software vulnerabilities. In IMIS, pages 175–181. IEEE Computer Society.
Published
2017-11-06
How to Cite
OLIVEIRA, Carina Capelão de; CARDOSO, Glauco Gonçalves; PEREIRA, Fernando Magno Quintão.
Aplicação Dinâmica de Políticas Estáticas de Fluxo. In: BRAZILIAN SYMPOSIUM ON CYBERSECURITY (SBSEG), 17. , 2017, Brasília.
Anais [...].
Porto Alegre: Sociedade Brasileira de Computação,
2017
.
p. 140-153.
DOI: https://doi.org/10.5753/sbseg.2017.19496.
