Verificação de integridade de software embarcado através de análise de tempo de resposta
Resumo
Verificação de integridade de software embarcado é uma preocupação importante em diversas aplicações. É desafiador o problema de verificar a integridade do software em execução em um dispositivo sem que seja necessário ler o conteúdo da memória de código executável do dispositivo. No presente trabalho, propomos uma abordagem de verificação de integridade de software que dispensa o acesso externo às instruções do programa em execução. Nossa abordagem usa o conceito de “reflexão”, no qual o software deve responder a questões sobre ele mesmo. Demonstramos que, sob certas hipóteses bastante plausíveis, é possível construir um protocolo em que apenas o software íntegro será capaz de responder corretamente, e no tempo esperado, às perguntas a ele feitas.
Referências
Kennell, R. and Jamieson, L. H. (2003). Establishing the genuinity of remote computer systems. In Proceedings of the 11th USENIX Security Symposium.
Smith, S. W. and Weingart, S. H. (1999). Building a high-performance, programmable secure coprocessor. Computer Networks (Special Issue on Computer Network Security), 31, pages 831–960.
Smith, S. W., Perez, R., Weingart, S. H., and Austel, V. (1999). Validating a highperformance, programmable secure coprocessor. In 22nd National Information Systems Security Conference.
Smith, S. W., Palmer, E., and Weingart, S. H. (1998). Using a high-performance, programmable secure coprocessor. In 2nd International Conference on Financial Cryptography.
Arbaugh, W. A., Keromytis, A. D., Farber, D. J., and Smith, J. M. (1998). Automated recovery in a secure bootstrap process. In Proceedings of the Symposium on Network and Distributed Systems Security, pages 155–167.
Arbaugh, W. A., Farber, D. J., and Smith, J. M. (1997). A reliable bootstrap architecture. In Proceedings of the IEEE Symposium on Research in Security and Privacy, pages 65–71.
Douglas, F. (1993). The compression cache: using on-line compression to extend physical memory. In Proceedings of the Third USENIX Conference, pages 519–529. USENIX Assoc.
Rivest, R. (1992). The md5 message-digest algorithm. In RFC 1321. Internet Engineering Task Force.
Smith, B. C. (1982). Procedural reflection in programming languages. In Ph.D. Thesis. MIT Laboratory for Computer Science.
Spinnelis, D. (2000). Reflection as a mechanism for software integrity verification. In ACM Transactions on Information and System Security vol.3 n.1, pages 51–62.
Next-Generation Secure Computing Base. http://www.microsoft.com/resources/ngscb/default.mspx.
Trusted Computing Group. https://www.trustedcomputinggroup.org.