


Vol 43, No 5 (2017)
- Year: 2017
- Articles: 6
- URL: https://journal-vniispk.ru/0361-7688/issue/view/10844
Article
Using static symbolic execution to detect buffer overflows
Abstract
Buffer overrun remains one of the main sources of errors and vulnerabilities in the C/C++ source code. To detect such kind of defects, static analysis is widely used. In this paper, we propose a path-sensitive static analysis based on symbolic execution with state merging. For buffers with compile-time-known sizes, we present an interprocedural path- and context-sensitive overrun detection algorithm that finds program points satisfying a proposed error definition. The described approach was implemented in the Svace static analyzer without significant loss of performance. On Android 5.0.2, these detectors generated 351 warnings, 64% of which were true positives. In addition, we describe a prototype of an intraprocedural heap buffer overflow detector and present an example of a defect found by this detector.



Investigation of the restricted problem of three bodies of variable masses using computer algebra
Abstract
The classical restricted three-body problem for bodies with variable masses is discussed for the case when the masses of two bodies vary isotropically at different rates and their sum varies according to the joint Meshchersky law. Within the perturbation theory in Hills’s approximation, differential equations determining the secular perturbations of the orbital elements are obtained and it is shown that they are integrable under arbitrary laws governing the mass variations satisfying the joint Meshchersky law. The influence of the variations of the body masses on the evolution of the orbital parameters is comparable with the perturbations created by massive bodies. All symbolic computations are performed in Wolfram Mathematica.



Incompletely described objects in decision support
Abstract
Incompletely described objects can occur in different fields of knowledge and applications: from medicine to spacecraft control. A decision support system capable of working with such objects can be developed using different approaches. One of the two approaches considered in this paper is rule-based reasoning; such systems use preformulated production rules of the IF-THEN form. Another approach known as casebased reasoning assumes that there is a case base containing descriptions of real or artificial cases (models). This approach does not require generating sets of a priori rules, also being much more similar to the decision making model used by the human.



Local search gradient algorithm based on functional voxel modeling
Abstract
A principle of construction of search algorithms on local segments of a raster area with the use of graphic images of functional voxel modeling is discussed. An algorithm for constructing gradient lines to organize rules for local search of points is given. A principle of generation of M-images for graphical representation of search control parameters is presented. Examples of the work of the local search gradient algorithm to fill a bounded fragment of a raster area of a specified point are given.



A lightweight method for virtual machine introspection
Abstract
A method for the introspection of virtual machines is proposed. The main distinctive feature of this method is that it makes it possible to obtain information about the system operation using the minimum knowledge about its internal organization. The proposed approach uses rarely changing parts of the application binary interface, such as identifiers and parameters of system calls, calling conventions, and the formats of executable files. The lightweight property of the introspection method is due to the minimization of the knowledge about the system and by its high performance. The introspection infrastructure is based on the QEMU emulator, version 2.8. Presently, monitoring the file operations, processes, and API function calls are implemented. The available introspection tools (RTKDSM, Panda, and DECAF) get data for the analysis using kernel structures. All the data obtained (addresses of structures, etc.) is written to special profiles. Since the addresses and offsets strongly depend not only on the version of the operating system but also on the parameters of its assembly, these tools have to store a large number of profiles. We propose to use parts of the application binary interface because they are rarely modified and it is often possible to use one profile for a family of OSs. The main idea underlying the proposed method is to intercept the system and library function calls and read parameters and returned values. The processor provides special instructions for calling system and user defined functions. The capabilities of QEMU are extended by an instrumentation mechanism to enable one to track each executed instruction and find the instructions of interest among them. When a system call occurs, the control is passed to the system call detector that checks the number of the call and decides to which module the job should be forwarded. In the case of an API function call, the situation is similar, but the API function detector checks the function address. An introspection tool consisting of a set of modules is developed. These modules are dynamic libraries that are plugged in QEMU. The modules can interact by exchanging data.



Formal logical language to set requirements for secure code execution
Abstract
Presently, a special attention is paid to the problem of information security when designing and using objects of critical information infrastructure. One of the most common approaches used to secure the information processed on these objects is the creation of an isolated program environment (sandbox). The security of the environment is determined by its invariability. However, the evolutionary development of data processing systems makes it necessary to implement new components and software in this environment on the condition that the security requirements are met. In this case, the most important requirement is trust in a new program code. This paper is devoted to developing a formal logical language to describe functional requirements for program code that allows one to impose further constraints at the stage of static analysis, as well as to control their fulfillment in dynamics.


