Static Detection of Malicious Code in Executable Programs

作者: N. Tawbi , M. Debbabi , J. Desharnais , Y. Lavoie , J. Bergeron

DOI:

关键词: Source codeStatic analysisAbstract syntax treePortable ExecutableComputer scienceExecutableCode segmentCompilerProgramming languageMachine code

摘要: In this paper, we propose a new approach for the static detection of malicious code in executable programs. Our rests on semantic analysis based behaviour that even makes possible unknown code. This is carried out directly binary Static offers techniques predicting properties programs without running them. The given achieved three major steps: construction an intermediate representation, flow-based catches securityoriented program behaviour, and verification critical behaviours against security policies (model checking). 1. Motivation Background With advent rising popularity networks, Internet, intranets distributed systems, becoming one focal points research. As matter fact, more people are concerned with could exist software products. A piece can affect secrecy, integrity, data control flow, functionality system. Therefore, ∗This research jointly funded by grant from Natural Sciences Engineering Research Council, NSERC, Canada also contract Defence Establishment, Valcartier (DREV), 2459, Pie XI Nord, Val-Belair, QC, Canada, G3J 1X5 their concern within computer science community as well user community. flow program, may naturally be helpful part process. address problem executables. primary objective initiative to elaborate practical methods tools robust theoretical foundations rest paper organized following way. Section 2 devoted comparison dynamic approaches. 3 presents our malices 4 discusses implementation approach. Finally, few remarks discussion future ultimately sketched conclusion 5. 2. vs There two main approaches : analysis. consists examining determine execution these technique has been used extensively past compiler developers carry various analyses transformations aiming at optimizing [10]. reverse engineering systems understanding [3, 4]. Its use fairly recent. Dynamic mainly monitoring detect behaviour. advantages over analysis: • permit make exhaustive They not bound specific give guarantees apply all executions program. contrast, only allow examination correspond selected test cases. verdict before execution, where it difficult proper action take presence malices. no run-time overhead. However, impossible certify statically certain hold (e.g., due undecidability). case, solution. Thus, complementary. first, cannot asserted monitored dynamically. mentioned introduction, techniques. Not much published about [8], authors method detecting C Their so-called tell-tale signs, which distinguish between benign combine sign slicing order produce small fragments large easily analyzed. 3. Description Approach generally operate source explained need them code, thus, had adapt evolve structured Firstly, translated into internal form (see 3.1) ; secondly, abstracted through flowbased relevant graphs (controlflow graph, data-flow call critical-API 1 etc.) (Section 3.2); third step checking 3.3). 3.1 Intermediate Representation machine version high-level or assembly compiled (or assembled) linked particular platform operating general format executables varies widely among systems. For example, Portable Executable (PE) Windows NT/98/95 PE includes comprehensive information different sections file, including segments: .text, contains entry point application, .data, type data, .idata .edata, contain respectively list imported exported APIs application Dynamic-Linking Library (DLL). segment (.text) constitutes file; section translate equivalent high-level-language disassembly tool IDA32 Pro [7], disassemble types files (ELF, EXE, PE, several processors (Windows 98, NT, etc.). Also, automatically recognizes calls standard libraries (i.e., API calls) long compilers. Statically analysing requires syntax tree called representation. abstract goal first then parse thus generated (Figure 1). API: Application Program Interface.

参考文章(8)
Ravi Sethi, Jeffrey D. Ullman, Alfred V. Aho, Compilers: Principles, Techniques, and Tools ,(1986)
Thomas Ball, Susan Horwitz, Slicing Programs with Arbitrary Control-flow AADEBUG '93 Proceedings of the First International Workshop on Automated and Algorithmic Debugging. ,vol. 749, pp. 206- 222 ,(1993) , 10.1007/BFB0019410
C. Cifuentes, A. Fraboulet, Intraprocedural static slicing of binary executables international conference on software maintenance. pp. 188- 195 ,(1997) , 10.1109/ICSM.1997.624245
Raymond W. Lo, Karl N. Levitt, Ronald A. Olsson, Refereed paper: MCF: a malicious code filter Computers & Security. ,vol. 14, pp. 541- 566 ,(1995) , 10.1016/0167-4048(95)00012-W
Fred B. Schneider, Enforceable security policies ACM Transactions on Information and System Security. ,vol. 3, pp. 30- 50 ,(2000) , 10.1145/353323.353382
Carl E. Landwehr, Alan R. Bull, John P. McDermott, William S. Choi, A taxonomy of computer program security flaws ACM Computing Surveys. ,vol. 26, pp. 211- 254 ,(1994) , 10.1145/185403.185412
E. M. Clarke, E. A. Emerson, A. P. Sistla, Automatic verification of finite-state concurrent systems using temporal logic specifications ACM Transactions on Programming Languages and Systems. ,vol. 8, pp. 244- 263 ,(1986) , 10.1145/5397.5399
Cristina Cifuentes, K. John Gough, Decompilation of Binary Programs Software - Practice and Experience. ,vol. 25, pp. 811- 829 ,(1995) , 10.1002/SPE.4380250706