====== Static Code Analysis ======
Next to protection mechanisms that are active during program execution, static code analysis tools can help to prevent memory corruptions((M. Alvares, T. Marwala and F. B. de Lima Neto, "Applications of computational intelligence for static software checking against memory corruption vulnerabilities," 2013 IEEE Symposium on Computational Intelligence in Cyber Security (CICS), Singapore, 2013, pp. 59-66.)). By analyzing the source code, dangerous function calls and control flow combinations can be discovered automatically and reported to the developer. Especially [[.stdlib|dangerous standard library functions]] are perfect candidates to be discovered by static code analysis. While there are multiple tools available(([[https://www.dwheeler.com/essays/static-analysis-tools.html|Static analysis tools for security]])), the usage of the open-source application Flawfinder(([[https://www.dwheeler.com/flawfinder/|Flawfinder]])) shall be demonstrated.
The very first buffer overflow example is used as an analysis target.
// gcc -g -O0 -m32 -std=c99 control.c
#include
Running Flawfinder on the source code file yields the following output.
$ flawfinder basic/control.c
Flawfinder version 1.31, (C) 2001-2014 David A. Wheeler.
Number of rules (primarily dangerous function names) in C/C++ ruleset: 169
Examining basic/control.c
FINAL RESULTS:
basic/control.c:17: [5] (buffer) gets:
Does not check for buffer overflows (CWE-120, CWE-20). Use fgets() instead.
basic/control.c:8: [2] (buffer) char:
Statically-sized arrays can be improperly restricted, leading to potential
overflows or other issues (CWE-119:CWE-120). Perform bounds checking, use
functions that limit length, or ensure that the size is larger than the
maximum possible length.
ANALYSIS SUMMARY:
Hits = 2
Lines analyzed = 27 in approximately 0.00 seconds (6493 lines/second)
Physical Source Lines of Code (SLOC) = 21
Hits@level = [0] 0 [1] 0 [2] 1 [3] 0 [4] 0 [5] 1
Hits@level+ = [0+] 2 [1+] 2 [2+] 2 [3+] 1 [4+] 1 [5+] 1
Hits/KSLOC@level+ = [0+] 95.2381 [1+] 95.2381 [2+] 95.2381 [3+] 47.619 [4+] 47.619 [5+] 47.619
Minimum risk level = 1
Not every hit is necessarily a security vulnerability.
There may be other security vulnerabilities; review your code!
See 'Secure Programming for Linux and Unix HOWTO'
(http://www.dwheeler.com/secure-programs) for more information.
Flawfinder reports the obviously dangerous usage of ''gets()''. Additionally, the tool recommends to check the bounds of the statically allocated array.
\\
----
[[.cfi|← Back to Control-flow Integrity (CFI)]] | [[..start|Overview]] |