Researchof Dynamic Fuzzing Methods
Researchof Dynamic Fuzzing Methods
net/publication/384959054
CITATIONS READS
0 10
4 authors, including:
All content following this page was uploaded by Maria Lapina on 23 October 2024.
1 Introducing
In the rapidly evolving field of software development, software code security is becoming
paramount. As software becomes an increasingly integral part of day-to-day operations in
various industries, identifying and addressing vulnerabilities in software code is critical
to ensuring reliability and security.
Along with the evolving field of software development, the methods and ways in
which vulnerabilities are exploited by hackers are evolving. This requires the develop-
ment of new methods for debugging software for vulnerabilities. Thus, in the 1990s
the concept of fuzzing appears in the paper “The Fuzz Generator” published by Barton
Miller [1]. In his work, the author presented a program “fuzzer”, the purpose of which
was to feed the program with random and incorrect data to search for situations when it
will not be able to process them. The efficiency of the method was and still is at a high
level, as it is possible not only to study the behavior of the program at the moment of its
direct execution, but also to determine the type of input data in advance.
The Linux kernel [2], which is the link between the computer hardware and its
processes, represents the basis for many computing systems, from servers to personal
computers. Given the importance of its role and its wide distribution, ensuring its relia-
bility and security is critical. One of the priority tasks in kernel development is to improve
the quality of program code, which directly affects the performance and security of the
entire system. Solving this task requires reliable testing tools capable of detecting errors
and vulnerabilities. This article discusses the use of Syzkaller, a well-known open-source
fuzzing testing system that uses system calls as input data.
Syzkaller has become one of the most popular tools used to find vulnerabilities
in the Linux kernel, mainly due to its ability to automatically generate input data and
fine-tune the configuration of the fuzzing process, identifying hard-to-detect bugs and
vulnerabilities. Syzkaller helps detect critical vulnerabilities in software that may go
undetected in traditional testing phases such as static analysis. This allows you to increase
kernel reliability and provide a more systematic approach to ensuring the quality of the
software under test.
Regular analysis of program code with the help of such tools as Syzkaller contributes
to earlier detection of vulnerabilities and as a consequence significantly saves time
and resources that could be spent on eliminating these vulnerabilities at later stages of
development.
The aim of the study is to classify program code from the point of view of fuzzing
and analyze the application of Syzkaller on the Linux kernel, study the obtained result
and classify the found errors by criticality level.
Fuzzing
On information
As required in By operations
on program By availability
source code on input data
structure
not feedback
Stupid binary-based Mutation
driven
Code classifications that are important when applying fuzzing were discussed earlier,
including aspects such as the need for source code, feedback from the application, and
the availability of information about the structure of the program as a whole. This link
between theory and practice will be illustrated through detailed comparison tables that
address specific problems that can be encountered when conducting fuzzing testing of
application and system software (Table 1).
The interface provides detailed information about the testing process, allowing you to
observe such parameters as number of virtual machines, assembled enclosure, coverage
volume, total uptime, number of crashes and types, as well as the number of system calls
and the total uptime log. It is also possible to examine the report for each crash found in
Research of Dynamic Fuzzing Methods to Identify Vulnerabilities in Program 179
detail. Syzkaller also tries to recreate the crash found to better understand its origin, but
this is not always possible.
Within the framework of the research, we analyzed the Linux kernel version 5.0 and
found more than 30 errors during 6 h of testing. We will analyze several errors, classify
them by severity and priority of fixing, and find out the reason for their occurrence.
Today, the vast majority of developers use a severity/priority classification system [21]
that helps to efficiently fix software defects. These classifications help to triage problems
and prioritize their fixes to maintain software quality and operability. Defect criticality
is the importance of the impact of a particular defect on the development or functioning
of a component or system. A factor such as the possibility of data loss or corruption is
also considered while assessing severity. The levels of severity are discussed below (see
Fig. 3).
Severity
• Maximum level
The presence of vulnerabilities of this level leads to complete system failure or data
loss. Example: system failure, security breach.
• High level
Causes tangible inconvenience to many users, performance degradation, but the
system remains functional. Example: paste from clipboard does not work, hotkeys do
not work.
• Moderate level
Affects some functions or performance, but the basic functionality works properly.
Example: dialogue box does not close after pressing a button.
• Minor level
Rarely detected by a small percentage of users and has little or no effect on their
work. Example: typos, formatting or user interface problems.
• Cosmetic level
180 M. Lapina et al.
Affects only the appearance or user interface, but not its operation. Example:
problems with paragraphs or fonts.
Priority is used to prioritize the defect and also has 3 levels of gradation shown in
the figure (see Fig. 4).
Priority
4 Conclusion
This paper is devoted to the key aspects of program code analysis, methods of vulner-
ability detection and classification. Code analysis technologies are relevant for cyber-
physical systems, for systems based on the Internet of Things, as well as for systems of
critical information infrastructure [22–25]. The paper consists of two chapters, each of
which covers different aspects of code analysis and application of specialized tools to
improve software security and reliability.
In the first chapter different approaches to fuzzing testing are considered: “black
box”, “white box” and “gray box” methods. Classification of program code from the
point of view of fuzzing allows you to determine the most vulnerable software sections
that require thorough testing.
Section 2 analyzes the practical application of the Syzkaller tool for finding vulnera-
bilities in the Linux kernel. Syzkaller is a powerful open-source fuzzing tool that allows
to identify bugs and vulnerabilities in various OS. The Linux kernel version 5.0 investi-
gation found more than 30 bugs in 6 h of testing. The tool demonstrated its effectiveness
in identifying critical vulnerabilities such as SLAB-OUT-OF-BOUNDS, BUFFER.C
and USE-AFTER-FREE. These bugs were ranked in terms of criticality and priority,
allowing developers to focus their efforts on fixing them immediately.
This study confirms the importance of using a variety of methods for analyzing
program code to ensure its quality and safety. Code classification and application of
fuzzing testing using tools such as Syzkaller allow to effectively detect vulnerabilities
and errors that may be missed during traditional testing.
In conclusion, a comprehensive approach to analyzing software code, including code
classification and fuzzing testing, is key to creating reliable and secure software. The
use of tools like Syzkaller has shown its effectiveness in finding complex errors, making
them indispensable for developers and software quality assurance engineers.
References
1. Miller, B.P., Fredriksen, L., So, B.: An empirical study of the reliability of UNIX utilities.
Commun. ACM 33(12), 32–44 (1990). https://doi.org/10.1145/96267.96279
2. Tanenbaum, A.S., Bos, H.: Modern operating system, 4th edn. Vrije Universiteit Amsterdam,
The Netherlands, Pearson Education (2023)
3. Manès, V., et al.: The art, science, and engineering of fuzzing: a survey. ACM Comput. Surv.
51(3), Article 65 (2019). https://doi.org/10.1145/3197978
4. Nagy, S., et al.: Breaking through binaries: compiler-quality instrumentation for better binary-
only fuzzing. In: 30th Usenix Security Symposium, August 2021
5. Fioraldi, A.: Program state abstraction for feedback-driven fuzz testing using likely invari-
ants (2020). https://www.researchgate.net/publication/347534809_Program_State_Abstrac
tion_for_Feedback-Driven_Fuzz_Testing_using_Likely_Invariants
6. Godefroid, P.: Automated vulnerability analysis using advanced fuzzing: generation based
and evolutionary fuzzers (2016). https://www.researchgate.net/publication/309464490_Aut
omated_Vulnerability_Analysis_using_Advanced_Fuzzing_Generation_Based_and_Evolut
ionary_Fuzzers
Research of Dynamic Fuzzing Methods to Identify Vulnerabilities in Program 183
7. Li, Y., et al.: Generation-based fuzzing? Don’t build a new generator, reuse!
(2023). https://www.researchgate.net/publication/369273562_Generation-based_fuzzing_D
on’t_build_a_new_generator_reuse
8. Verwer, S.: Complementing model learning with mutation-based fuzzing (2016). https://
www.researchgate.net/publication/309766175_Complementing_Model_Learning_with_
Mutation-Based_Fuzzing
9. Bhatkar, S., et al.: Mitigations for low-level coding vulnerabilities: incomparability and limita-
tions. https://www.researchgate.net/publication/242353098_Mitigations_for_low-level_cod
ing_vulnerabilities_incomparability_and_limitations
10. Collberg, C., Thomborson, C., Low, D.: A taxonomy of obfuscating transformations. Tech-
nical report, Department of Computer Science, University of Auckland, New Zealand
(1997)
11. Kolozsvari, B., et al.: Fuzzing the Internet of Things: a review on the techniques and
challenges for efficient vulnerability discovery in embedded systems (2021). https://www.
researchgate.net/publication/349001489_Fuzzing_the_Internet_of_Things_A_Review_on_
the_Techniques_and_Challenges_for_Efficient_Vulnerability_Discovery_in_Embedded_
Systems
12. Kawamoto, D., et al.: Is vulnerability report confidence redundant? pitfalls using temporal
risk scores (2024). https://www.researchgate.net/publication/353037856_Is_Vulnerability_R
eport_Confidence_Redundant_Pitfalls_Using_Temporal_Risk_Scores
13. Nabavi, S., et al.: The role of security updates and patches in addressing cyber security threats
and vulnerabilities: a case study of recent cyber security attacks (2022). https://www.resear
chgate.net/publication/357826952_The_Role_of_Security_Updates_and_Patches_in_Addr
essing_Cyber_Security_Threats_and_Vulnerabilities_A_Case_Study_of_Recent_Cyber_
Security_Attacks
14. Orso, A., et al.: Memory allocation vulnerability analysis and analysis optimization for
C programs based on formal methods. https://www.researchgate.net/publication/283196
026_Memory_Allocation_Vulnerability_Analysis_and_Analysis_Optimization_for_C_P
rograms_Based_on_Formal_Methods
15. Paltrow, S., Brown, J., Harris, M.: Software engineering challenges for parallel processing
systems (2017). https://apps.dtic.mil/sti/pdfs/AD1015670.pdf
16. Xie, T., et al.: A validation model of data input for web services. https://www.researchgate.net/
publication/256446757_A_Validation_Model_of_Data_Input_for_Web_Services_Slides
17. Chen, X., et al.: ECFuzz: effective configuration fuzzing for large-scale systems
(2024). https://www.researchgate.net/publication/378029535_ECFuzz_Effective_Configura
tion_Fuzzing_for_Large-Scale_Systems
18. Li, Y., et al.: Third-party library dependency for large-scale SCA in the C/C++ ecosystem:
how far are we (2024). https://www.researchgate.net/publication/372363030_Third-Party_
Library_Dependency_for_Large-Scale_SCA_in_the_CC_Ecosystem_How_Far_Are_We
19. Cottam, J.A., et al.: Crossing the Streams: Fuzz testing with user input (2017). https://www.
researchgate.net/publication/322513903_Crossing_the_Streams_Fuzz_testing_with_user_i
nput
20. Syzkaller—kernel fuzzer. GitHub. https://github.com/google/syzkaller
21. Shatnawi, M.Q., Alazzam, B.: An assessment of eclipse bugs’ priority and severity prediction
using machine learning (2022). https://www.researchgate.net/profile/Batool-Alazzam/public
ation/359910074_An_Assessment_of_Eclipse_Bugs’_Priority_and_Severity_Prediction_U
sing_Machine_Learning/links/62561438b0cee02d69682406/An-Assessment-of-Eclipse-
Bugs-Priority-and-Severity-Prediction-Using-Machine-Learning.pdf
184 M. Lapina et al.
22. Basan, E., Lapina, M., Lesnikov, A., Basyuk, A., Mogilny, A.: Trust monitoring in a cyber-
physical system for security analysis based on distributed computing. In: Alikhanov, A.,
Lyakhov, P., Samoylenko, I. (eds.) Current Problems in Applied Mathematics and Computer
Science and Systems, pp. 430–440. Springer Nature Switzerland, Cham (2023). https://doi.
org/10.1007/978-3-031-34127-4_42
23. Proshkin, N.A., Basan, E.S., Lapina, M.A., Klepikova, A.G., Lapin, V.G.: Developing models
of IoT infrastructures to identify vulnerabilities and analyse threats. IOP Conf. Ser. Mater.
Sci. Eng. 873(1), 012018 (2020). https://doi.org/10.1088/1757-899X/873/1/012018
24. Maksimova, E., Lapina, M., Lapin, V.: Synthesis of Models for Ensuring Information Secu-
rity of Subjects of Critical Information Infrastructure under Destructive Influences CEUR
Workshop Proceedings this, vol. 3094, pp. 108–117 (2022)
25. Maksimova, E.A., Lapina, M.A., Lapin, V.G., Rusakov, A.M.: Anthropomorphic Model of
States of Subjects of Critical Information Infrastructure Under Destructive Influences. Lecture
Notes in Networks and Systems, pp. 569–580 (2022). https://doi.org/10.1007/978-3-030-
97020-8_51