SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Using SMT solvers, concolic execution,
second-order logic and knot theory to identify bugs
in software a.k.a polish fuzzy lop
shm a.k.a.
@akat1 pl
SecurityBSides
October 2018
THANKS FOR ORGANIZING THIS EVENT
*APPLAUSE.wav*
$ whoami
pentester at LogicalTrust as $DAYJOB
blog: http://akat1.pl, twitter: @akat1 pl
open source committer:
NetBSD - libsaslc(3) & httpd(8) & security-team@ & random
things...
PHP - bug hunting/bug fixing
security:
PHP - CVE-2010-1868, CVE-2010-1917, CVE-2010-4150,
CVE-2010-4156, CVE-2011-1938, ...
stunnel - CVE-2013-1762
OpenSSH - CVE-2011-0539
Apache - CVE-2014-0117, CVE-2014-0226
FreeBSD - CVE-2015-1414
NetBSD - CVE-2015-8212
...
Short story behind this talk
July 2015 - we (me, s1m0n, n1x0n) gave a talk at AlligatorCon
→ we promised to release fuzzer for libraries soon (tm)
...AlligatorCon 2016 was a great opportunity to do so!
Minerva Fuzzers Family
no cutting-edge content here, mostly dumb fuzzing stuff
idea implemented in minerva php fuzzer released at Month of
PHP bugs (2010) - http://php-security.org/2010/05/11/
mops-submission-05-the-minerva-php-fuzzer/
previous talks on this subject:
Torturing the PHP interpreter - Confidence 2016 - http:
//www.slideshare.net/logicaltrust/torturing-the-php-interpreter
Fuzzing Challenges - AlligatorCon 2015 - http:
//www.slideshare.net/slajdszer/fuzzing-challenges-alligatorcon
Fuzzing interpretera PHP (pl) - local OWASP meeting 2011 -
http://www.slideshare.net/logicaltrust/
201105-owasp-fuzzing-interpretera-php
simple but effective, we applied it to many targets & protocols
...one day we realized that universal implementation could be
written...
Minerva Fuzzers Family - findings
Minerva Fuzzers Family - recent php findings
hhvm + php = 100+ unique crashes
So here we are with shiny (((((((
minerva lib polish fuzzy lop
implementation of dead simple algorithm
written in C & python (py-yacc) & makefile (GNU) & flex &
bison (few KLOCs)
fuzzing 
libraries APIs (((((
functions libraries
fuzz anything that can be linked with minerva piece of code
mostly to catch low hanging fruits (for now)
work in progress since 2012 - released (tm) under beerware
license
https://github.com/LogicalTrust/minerva lib
support for Linux, FreeBSD, NetBSD, OpenBSD, OS X...
MAKE DUMB FUZZING GREAT AGAIN
Minerva algorithm - the idea
1. script ← ””
2. X ← Initial set of variables with their types
3. G ← Fresh variable generator
4. F ← Function database
5. for i in 1..n:
5.1 f ← GET RANDOM(F, X)
5.2 v ← G()
5.3 script ← script . v . ” = ” . f call with random arguments from X
(but with proper types)
5.4 X ← X ∪ (v, f result type)
6. return script
*ekhm*, what?
Minerva algorithm - the idea - example
F = {int = A(), int = B(int, int), char∗ = C(int), char∗ =
D(int, char∗), ...}
X = ∅
x, y - simple types
1. v1 = A(); X = {int : {v1}}
2. v2 = B(v1, v1); X = {int : {v1, v2}}
3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}}
4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}}
5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}}
6. ...repeat it until crash
Minerva algorithm - the idea - example
F = {int = A(), int = B(int, int), char∗ = C(int), char∗ =
D(int, char∗), ...}
X = ∅
x, y - simple types
1. v1 = A(); X = {int : {v1}}
2. v2 = B(v1, v1); X = {int : {v1, v2}}
3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}}
4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}}
5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}}
6. ...repeat it until crash
Minerva algorithm - the idea - example
F = {int = A(), int = B(int, int), char∗ = C(int), char∗ =
D(int, char∗), ...}
X = ∅
x, y - simple types
1. v1 = A(); X = {int : {v1}}
2. v2 = B(v1, v1); X = {int : {v1, v2}}
3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}}
4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}}
5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}}
6. ...repeat it until crash
Minerva algorithm - the idea - example
F = {int = A(), int = B(int, int), char∗ = C(int), char∗ =
D(int, char∗), ...}
X = ∅
x, y - simple types
1. v1 = A(); X = {int : {v1}}
2. v2 = B(v1, v1); X = {int : {v1, v2}}
3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}}
4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}}
5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}}
6. ...repeat it until crash
Minerva algorithm - the idea - example
F = {int = A(), int = B(int, int), char∗ = C(int), char∗ =
D(int, char∗), ...}
X = ∅
x, y - simple types
1. v1 = A(); X = {int : {v1}}
2. v2 = B(v1, v1); X = {int : {v1, v2}}
3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}}
4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}}
5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}}
6. ...repeat it until crash
Minerva algorithm - the idea - example
F = {int = A(), int = B(int, int), char∗ = C(int), char∗ =
D(int, char∗), ...}
X = ∅
x, y - simple types
1. v1 = A(); X = {int : {v1}}
2. v2 = B(v1, v1); X = {int : {v1, v2}}
3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}}
4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}}
5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}}
6. ...repeat it until crash
Minerva algorithm - the idea - example
F = {int = A(), int = B(int, int), char∗ = C(int), char∗ =
D(int, char∗), ...}
X = ∅
x, y - simple types
1. v1 = A(); X = {int : {v1}}
2. v2 = B(v1, v1); X = {int : {v1, v2}}
3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}}
4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}}
5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}}
6. ...repeat it until crash
Minerva - the algorithm
pros:
rather simple algorithm
easy to implement
in some way similar to CFG fuzzing
quite universal
make dumb fuzzing great again (tm)
cons:
dumb fuzzer is dumb
by default it produces pretty flat call trees
(((((((((((
Fuzzing problems marketing
in perfect case you have to only provide API definition (C
function prototypes)
found minor bugs in:
LibreSSL
OpenSSL
OpenSSH
...
easy configuration
easy to add new target
shell mode
framework to manage test cases (traces)
Minerva - how does it work?
+-----------+ +----------------+
| target.mi |----------------| magic Makefile |
| (config) | +----------------+
+-----------+ |
| |
| (mi2c compiler) |
v v
+------------+ +--------------+
| target.[ch]|--------------| minerva core |
+------------+ +--------------+
| |
--------------+---------------/
|
v
+------------+
| target_bin | (your shiny fuzzer)
+------------+
Minerva - OpenSSL bn(3) man page
$ man 3 bn
#include openssl/bn.h
BIGNUM *BN_new(void);
void BN_free(BIGNUM *a);
void BN_init(BIGNUM *);
void BN_clear(BIGNUM *a);
void BN_clear_free(BIGNUM *a);
BN_CTX *BN_CTX_new(void);
void BN_CTX_init(BN_CTX *c);
void BN_CTX_free(BN_CTX *c);
BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b);
BIGNUM *BN_dup(const BIGNUM *a);
Minerva - OpenSSL bn(3) man page
$ man 3 bn
#include openssl/bn.h
BIGNUM *BN_new() = generic_not_zero;
void BN_free(BIGNUM *a {DESTROY}) = generic_void;
void BN_init(BIGNUM *) = generic_void;
void BN_clear(BIGNUM *a) = generic_void;
void BN_clear_free(BIGNUM *a {DESTROY} ) = generic_void;
BN_CTX *BN_CTX_new() = generic_not_zero;
void BN_CTX_init(BN_CTX *c) = generic_void;
void BN_CTX_free(BN_CTX *c {DESTROY}) = generic_void;
BIGNUM *BN_copy(BIGNUM *a, BIGNUM *b) = generic_void;
BIGNUM *BN_dup(BIGNUM *a) = generic_not_zero;
Minerva - configuration
target/openssl/bn.mi:
/* BUNCH OF INCLUDES */
#include openssl/bn.h
#include openssl/bio.h
#include minerva_generic.h
/* FUNCTION PROTOTYPE = FUNCTION CHECK */
BIGNUM *BN_new() = generic_not_zero;
/* {DESTROY} - CALL DESTROYS VARIABLE */
/* {UNIQUE} - VARIABLE HAS TO BE UNIQUE AMONG CALL ARGUMENTS */
void BN_free(BIGNUM *a {DESTROY}) = generic_void;
void BN_init(BIGNUM *) = generic_void;
void BN_clear(BIGNUM *a) = generic_void;
void BN_clear_free(BIGNUM *a {DESTROY} ) = generic_void;
BN_CTX *BN_CTX_new() = generic_not_zero;
void BN_CTX_init(BN_CTX *c) = generic_void;
void BN_CTX_free(BN_CTX *c {DESTROY}) = generic_void;
Minerva - target.c
target/openssl/bin/target/target.c (glue to call/register functions)
/* ... */
#include openssl/bn.h
#include openssl/bio.h
#include minerva_generic.h
int __minerva_wrap_call_minerva_BN_ULONG_new(minerva_var_t *new,
minerva_var_t **vars) {
new-val = xcalloc(1,sizeof(BN_ULONG));
new-flags |= F_VAR_ALLOC;
*((BN_ULONG*)new-val) = (BN_ULONG)minerva_BN_ULONG_new();
return 1;
}
/* ... */
void minerva_funcs_init(minerva_funcs_t *funcs) {
minerva_arg_t *x;
minerva_funcs_add(funcs, __minerva_BN_ULONG_t,
__minerva_wrap_call_minerva_BN_ULONG_new,
minerva_BN_ULONG_new, 0, generic_not_zero, 0);
x = xcalloc(2 ,sizeof(minerva_arg_t));
x[0] = (minerva_arg_t){__minerva_BN_BLINDING_ptr_t,0};
x[1] = (minerva_arg_t){__minerva_unsigned_t,0};
minerva_funcs_add(funcs, __minerva_void_t,
__minerva_wrap_call_BN_BLINDING_set_flags,
Minerva - target.h
target/openssl/bin/target/target.h (enum for types)
#ifndef _MINERVA_TARGET_H_
#define _MINERVA_TARGET_H_
typedef enum {
__minerva_BN_RECP_CTX_ptr_t,
__minerva_BN_MONT_CTX_ptr_t,
__minerva_unsigned_t,
__minerva_long_t,
__minerva_FILE_ptr_t,
__minerva_BN_CTX_ptr_t,
__minerva_BN_ULONG_t,
__minerva_int_t,
__minerva_BIGNUM_ptr_t,
__minerva_char_ptr_t,
__minerva_void_t,
__minerva_BIO_ptr_t,
__minerva_BN_BLINDING_ptr_t
,__minerva_types_no
} minerva_type_t;
#endif
Minerva - configuration - what we need?
set of functions’ prototypes
set of check functions (some are provided by default)
set of #includes
Minerva - building system
inspired by (Free/Net/Open)BSD ports
written in Makefile (GNU)
adding new target should be as easy as writing few lines of
Makefile
support for ASAN/DEBUG builds
example file:
TARGET=openssl
LOCAL_SRC= 
minerva_vars_init.c
LDFLAGS=-lssl -lcrypto
include ../../mk/minerva.mk
Minerva - the result
target/openssl$ make MICONFIG=bn.mi
####################################
# Generate  Build targets #
####################################
../../compiler/mi2c.py -m bn.mi -o bin//target//target
cc -I../../include/ -Wall -O0 -Ibin//target/ -I. -c -o bin//target//target.o bin//t
####################################
# Build local #
####################################
cc -I../../include/ -Wall -O0 -Ibin//target/ -I. -c -o bin//local//minerva_vars_ini
####################################
# Building core #
####################################
bison -d ../../core//minerva_parser.y -o bin//core/minerva_parser.tab.c
flex -o bin//core/minerva_lexer.c --header-file=bin//core/minerva_lexer.h ../../cor
cc -I../../include/ -Wall -O0 -Ibin//target/ -c -o bin//core/minerva_lexer.o bin/
cc -I../../include/ -Wall -O0 -Ibin//target/ -c -o bin//core/minerva_parser.tab.o
Minerva - the result
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb
####################################
# Linking #
####################################
cc -o bin//minerva-openssl-bn bin//core/main.o bin//core/minerva_dict.o
bin//core/minerva_call.o bin//core/minerva_func.o bin//core/minerva_generic.o
bin//core/minerva_var.o bin//core/xmalloc.o bin//core/minerva_repl.o
bin//core/minerva_loop.o bin//core/minerva_trace.o
bin//core/dict.o bin//core/minerva_lexer.o
bin//core/minerva_parser.tab.o bin//target//target.o
bin//local//minerva_vars_init.o -lssl -lcrypto
../../lib/progressbar/libprogressbar.a -lreadline -lcurses
Minerva - the result
target/openssl $ ./bin/minerva-openssl-bn
seed: 2813646763
o/ found crash *yay* o/
Minerva - (Libre—Open)SSL - off-by-one #1
Let’s take BIGNUM −0 and apply it to the BN bn2hex
crypto/bn/bn print.c:
char *BN_bn2hex(const BIGNUM *a)
{
char *buf;
char *p;
buf=(char *)OPENSSL_malloc(a-top*BN_BYTES*2+2);
[...]
p=buf;
if (a-neg) *(p++)=’-’;
if (BN_is_zero(a)) *(p++)=’0’;
for (i=a-top-1; i =0; i--)
[...]
*p=’0’;
How to get −0 in LibreSSL? It is a task for the listener
Minerva - (Libre—Open)SSL - off-by-one #2
Let’s call BN rand(BN, 1, 1, 0)- bnrand crypto/bn/bn rand.c:
static int
bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
{
unsigned char *buf = NULL;
[...]
bytes = (bits + 7) / 8;
bit = (bits - 1) % 8;
buf = OPENSSL_malloc(bytes);
if (top != -1) {
if (top) {
if (bit == 0) {
buf[0] = 1;
buf[1] |= 0x80;
[...]
Minerva - traces
target/openssl $ ./bin/minerva-openssl-bn -T tc1.trace
seed: 971111740
o/ found crash *yay* o/
target/openssl $ head -n 20 tc1.trace
0 = BN_CTX_new()
1 = BN_CTX_new()
2 = BN_new()
3 = BN_bn2dec(2)
4 = BN_RECP_CTX_new()
5 = BN_cmp(2, 2)
6 = BN_pseudo_rand_range(2, 2)
7 = BN_swap(2, 2)
8 = BN_copy(2, 2)
9 = BN_mask_bits(2, 6)
10 = BN_exp(2, 2, 2, 0)
...
Minerva - traces
target/openssl $ ./bin/minerva-openssl-bn -p tc1.trace
seed: 797555542
Segmentation fault (core dump)============================== |
o/
minerva - shell mode
$ ./bin/minerva-toy-toy -r
seed: 2102654505
pfl x = fuzz(3)
Fuzzing |===================================| ETA: 0h00m00s
pfl x = fuzz(3, x)
Fuzzing |===================================| ETA: 0h00m00s
pfl show(x)
0 = zero()
1 = crashme(0)
[...]
4 = add_one(1)
5 = crashme(3)
pfl x = fuzz(0, x)
o/ found crash *yay* o/
pfl show(x)
0 = zero()
1 = crashme(0)
[...]
7 = add_one(1)
8 = crashme(6)
minerva - shell mode
you can now be the fuzz operator
guide process where to go!
stats - func stat, var stat
fuzzing - fuzz (iterations, context)
var = func(arg1, ..., argn)
context = trace, vars, funcs 
test case (trace) management - restore, save
mutations, coverage, ...
minerva - minimize test case
$ ./bin/minerva-toy-toy -r
seed: 607440374
pfl x = fuzz()
o/ found crash *yay* o/
pfl m = min(x)
pfl show(m)
0 = zero()
16 = add_one(0)
23 = crashme(16)
26 = crashme(23)
88 = crashme(26)
pfl play(m)
Segmentation fault: 11======= | ETA: 0h00m00s
minerva - example
DEMO
minerva - tipstricks
automate things as much as you can
jenkins  Kibana  ... are your friends
cluster crashes (or be lost)
*sanitizers are more than useful
...for more check our presentation from AlligatorCon 2015
minerva - problems
I showed you perfect cases
... BN new() allocates and initializes a BIGNUM structure.
BN init() initializes an existing uninitialized BIGNUM. [...] →
BN new() + BN init() = bn new
you have to deal with many things on your own (e.g. I/O)
sometimes you have to take care of ”objects state” → you can do
it by introducing new wrappers and/or types
some APIs requires initialization
shell  fuzzing stuff in one process is not the best idea
Future work
work in progress:
(((((((((((
framework for mutations
framework for coverage (a.k.a. smart fuzzing)
framework for differential fuzzing
see the BN sqrt case in OpenSSL
diff(OpenSSL bn, libgcrypt) -
https://github.com/hannob/bignum-fuzz
diff between versions
framework for snapshoting
it’s PoC → slow, messy, ineffective
we’re open to any suggestions
better documentation
blend or steal ideas from libfuzzer or other fuzzers
NetBSD rump kernel fuzzing
when to expect the 1.0 release?
Credits
Large parts of this presentation or project were done in cooperation
with:
n1x0n
s1m0n
PSi
Zeru´s
THANKS!
Time for questions (and maybe answers)
QA
Minerva_lib - fuzzing tool

Weitere ähnliche Inhalte

Was ist angesagt?

C++totural file
C++totural fileC++totural file
C++totural filehalaisumit
 
The Vanishing Pattern: from iterators to generators in Python
The Vanishing Pattern: from iterators to generators in PythonThe Vanishing Pattern: from iterators to generators in Python
The Vanishing Pattern: from iterators to generators in PythonOSCON Byrum
 
Some examples of the 64-bit code errors
Some examples of the 64-bit code errorsSome examples of the 64-bit code errors
Some examples of the 64-bit code errorsPVS-Studio
 
Cursor implementation
Cursor implementationCursor implementation
Cursor implementationvicky201
 
Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...
Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...
Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...DevGAMM Conference
 
Objective-Cひとめぐり
Objective-CひとめぐりObjective-Cひとめぐり
Objective-CひとめぐりKenji Kinukawa
 
Arduino coding class
Arduino coding classArduino coding class
Arduino coding classJonah Marrs
 
Pydiomatic
PydiomaticPydiomatic
Pydiomaticrik0
 
Arduino coding class part ii
Arduino coding class part iiArduino coding class part ii
Arduino coding class part iiJonah Marrs
 
Let’s talk about microbenchmarking
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarkingAndrey Akinshin
 
Boost.Interfaces
Boost.InterfacesBoost.Interfaces
Boost.Interfacesmelpon
 
PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...Andrey Karpov
 
Welcome to Modern C++
Welcome to Modern C++Welcome to Modern C++
Welcome to Modern C++Seok-joon Yun
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptSeok-joon Yun
 
Advanced python
Advanced pythonAdvanced python
Advanced pythonEU Edge
 
Toonz code leaves much to be desired
Toonz code leaves much to be desiredToonz code leaves much to be desired
Toonz code leaves much to be desiredPVS-Studio
 

Was ist angesagt? (19)

C++totural file
C++totural fileC++totural file
C++totural file
 
The Vanishing Pattern: from iterators to generators in Python
The Vanishing Pattern: from iterators to generators in PythonThe Vanishing Pattern: from iterators to generators in Python
The Vanishing Pattern: from iterators to generators in Python
 
Some examples of the 64-bit code errors
Some examples of the 64-bit code errorsSome examples of the 64-bit code errors
Some examples of the 64-bit code errors
 
Cursor implementation
Cursor implementationCursor implementation
Cursor implementation
 
Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...
Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...
Самые вкусные баги из игрового кода: как ошибаются наши коллеги-программисты ...
 
C++ tutorial
C++ tutorialC++ tutorial
C++ tutorial
 
Objective-Cひとめぐり
Objective-CひとめぐりObjective-Cひとめぐり
Objective-Cひとめぐり
 
Smart pointers
Smart pointersSmart pointers
Smart pointers
 
Arduino coding class
Arduino coding classArduino coding class
Arduino coding class
 
Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
pointers 1
pointers 1pointers 1
pointers 1
 
Arduino coding class part ii
Arduino coding class part iiArduino coding class part ii
Arduino coding class part ii
 
Let’s talk about microbenchmarking
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarking
 
Boost.Interfaces
Boost.InterfacesBoost.Interfaces
Boost.Interfaces
 
PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...
 
Welcome to Modern C++
Welcome to Modern C++Welcome to Modern C++
Welcome to Modern C++
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScript
 
Advanced python
Advanced pythonAdvanced python
Advanced python
 
Toonz code leaves much to be desired
Toonz code leaves much to be desiredToonz code leaves much to be desired
Toonz code leaves much to be desired
 

Ähnlich wie Minerva_lib - fuzzing tool

[CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter
[CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter [CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter
[CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter PROIDEA
 
C# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewC# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewPaulo Morgado
 
#OOP_D_ITS - 3rd - Pointer And References
#OOP_D_ITS - 3rd - Pointer And References#OOP_D_ITS - 3rd - Pointer And References
#OOP_D_ITS - 3rd - Pointer And ReferencesHadziq Fabroyir
 
How to add an optimization for C# to RyuJIT
How to add an optimization for C# to RyuJITHow to add an optimization for C# to RyuJIT
How to add an optimization for C# to RyuJITEgor Bogatov
 
Stupid Awesome Python Tricks
Stupid Awesome Python TricksStupid Awesome Python Tricks
Stupid Awesome Python TricksBryan Helmig
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesAndrey Karpov
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeMicrosoft Tech Community
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeMicrosoft Tech Community
 
talk at Virginia Bioinformatics Institute, December 5, 2013
talk at Virginia Bioinformatics Institute, December 5, 2013talk at Virginia Bioinformatics Institute, December 5, 2013
talk at Virginia Bioinformatics Institute, December 5, 2013ericupnorth
 
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]Chris Adamson
 
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014PyData
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
Recursion - Computer Algorithms
Recursion - Computer AlgorithmsRecursion - Computer Algorithms
Recursion - Computer AlgorithmsAlaa Al-Makhzoomy
 
#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting StartedHadziq Fabroyir
 
Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021
Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021
Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021Peng Cheng
 
Python 2.5 reference card (2009)
Python 2.5 reference card (2009)Python 2.5 reference card (2009)
Python 2.5 reference card (2009)gekiaruj
 
C++ lectures all chapters in one slide.pptx
C++ lectures all chapters in one slide.pptxC++ lectures all chapters in one slide.pptx
C++ lectures all chapters in one slide.pptxssuser3cbb4c
 
Introduction to Python and Matplotlib
Introduction to Python and MatplotlibIntroduction to Python and Matplotlib
Introduction to Python and MatplotlibFrançois Bianco
 
Go Programming Language (Golang)
Go Programming Language (Golang)Go Programming Language (Golang)
Go Programming Language (Golang)Ishin Vin
 

Ähnlich wie Minerva_lib - fuzzing tool (20)

[CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter
[CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter [CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter
[CONFidence 2016] Mateusz Kocielski - Torturing the PHP interpreter
 
C# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewC# 6.0 - April 2014 preview
C# 6.0 - April 2014 preview
 
#OOP_D_ITS - 3rd - Pointer And References
#OOP_D_ITS - 3rd - Pointer And References#OOP_D_ITS - 3rd - Pointer And References
#OOP_D_ITS - 3rd - Pointer And References
 
Exploiting vectorization with ISPC
Exploiting vectorization with ISPCExploiting vectorization with ISPC
Exploiting vectorization with ISPC
 
How to add an optimization for C# to RyuJIT
How to add an optimization for C# to RyuJITHow to add an optimization for C# to RyuJIT
How to add an optimization for C# to RyuJIT
 
Stupid Awesome Python Tricks
Stupid Awesome Python TricksStupid Awesome Python Tricks
Stupid Awesome Python Tricks
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' Mistakes
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ Code
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ Code
 
talk at Virginia Bioinformatics Institute, December 5, 2013
talk at Virginia Bioinformatics Institute, December 5, 2013talk at Virginia Bioinformatics Institute, December 5, 2013
talk at Virginia Bioinformatics Institute, December 5, 2013
 
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
 
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Recursion - Computer Algorithms
Recursion - Computer AlgorithmsRecursion - Computer Algorithms
Recursion - Computer Algorithms
 
#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started#OOP_D_ITS - 2nd - C++ Getting Started
#OOP_D_ITS - 2nd - C++ Getting Started
 
Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021
Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021
Shape Safety in Tensor Programming is Easy for a Theorem Prover -SBTB 2021
 
Python 2.5 reference card (2009)
Python 2.5 reference card (2009)Python 2.5 reference card (2009)
Python 2.5 reference card (2009)
 
C++ lectures all chapters in one slide.pptx
C++ lectures all chapters in one slide.pptxC++ lectures all chapters in one slide.pptx
C++ lectures all chapters in one slide.pptx
 
Introduction to Python and Matplotlib
Introduction to Python and MatplotlibIntroduction to Python and Matplotlib
Introduction to Python and Matplotlib
 
Go Programming Language (Golang)
Go Programming Language (Golang)Go Programming Language (Golang)
Go Programming Language (Golang)
 

Mehr von Logicaltrust pl

Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24Logicaltrust pl
 
Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29Logicaltrust pl
 
8 zasad skutecznego security awareness
8 zasad skutecznego security awareness8 zasad skutecznego security awareness
8 zasad skutecznego security awarenessLogicaltrust pl
 
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019Logicaltrust pl
 
Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019Logicaltrust pl
 
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018Logicaltrust pl
 
Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018Logicaltrust pl
 
Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)Logicaltrust pl
 
Redteaming w Polsce - przykłady
Redteaming w Polsce - przykładyRedteaming w Polsce - przykłady
Redteaming w Polsce - przykładyLogicaltrust pl
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiLogicaltrust pl
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiLogicaltrust pl
 
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Logicaltrust pl
 
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?Logicaltrust pl
 
Socjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obronySocjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obronyLogicaltrust pl
 
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersWyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersLogicaltrust pl
 
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Logicaltrust pl
 
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...Logicaltrust pl
 
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...Logicaltrust pl
 

Mehr von Logicaltrust pl (20)

Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
 
Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29
 
8 zasad skutecznego security awareness
8 zasad skutecznego security awareness8 zasad skutecznego security awareness
8 zasad skutecznego security awareness
 
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
 
Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019
 
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
 
Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018
 
Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)
 
Redteaming w Polsce - przykłady
Redteaming w Polsce - przykładyRedteaming w Polsce - przykłady
Redteaming w Polsce - przykłady
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadki
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
 
Devops/Sysops security
Devops/Sysops securityDevops/Sysops security
Devops/Sysops security
 
Devops security
Devops securityDevops security
Devops security
 
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
 
Socjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obronySocjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obrony
 
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersWyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
 
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
 
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
 
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
 

Kürzlich hochgeladen

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...chiefasafspells
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 

Kürzlich hochgeladen (20)

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 

Minerva_lib - fuzzing tool

  • 1.
  • 2. Using SMT solvers, concolic execution, second-order logic and knot theory to identify bugs in software a.k.a polish fuzzy lop shm a.k.a. @akat1 pl SecurityBSides October 2018
  • 3. THANKS FOR ORGANIZING THIS EVENT *APPLAUSE.wav*
  • 4. $ whoami pentester at LogicalTrust as $DAYJOB blog: http://akat1.pl, twitter: @akat1 pl open source committer: NetBSD - libsaslc(3) & httpd(8) & security-team@ & random things... PHP - bug hunting/bug fixing security: PHP - CVE-2010-1868, CVE-2010-1917, CVE-2010-4150, CVE-2010-4156, CVE-2011-1938, ... stunnel - CVE-2013-1762 OpenSSH - CVE-2011-0539 Apache - CVE-2014-0117, CVE-2014-0226 FreeBSD - CVE-2015-1414 NetBSD - CVE-2015-8212 ...
  • 5. Short story behind this talk July 2015 - we (me, s1m0n, n1x0n) gave a talk at AlligatorCon → we promised to release fuzzer for libraries soon (tm) ...AlligatorCon 2016 was a great opportunity to do so!
  • 6. Minerva Fuzzers Family no cutting-edge content here, mostly dumb fuzzing stuff idea implemented in minerva php fuzzer released at Month of PHP bugs (2010) - http://php-security.org/2010/05/11/ mops-submission-05-the-minerva-php-fuzzer/ previous talks on this subject: Torturing the PHP interpreter - Confidence 2016 - http: //www.slideshare.net/logicaltrust/torturing-the-php-interpreter Fuzzing Challenges - AlligatorCon 2015 - http: //www.slideshare.net/slajdszer/fuzzing-challenges-alligatorcon Fuzzing interpretera PHP (pl) - local OWASP meeting 2011 - http://www.slideshare.net/logicaltrust/ 201105-owasp-fuzzing-interpretera-php simple but effective, we applied it to many targets & protocols ...one day we realized that universal implementation could be written...
  • 8. Minerva Fuzzers Family - recent php findings hhvm + php = 100+ unique crashes
  • 9. So here we are with shiny ((((((( minerva lib polish fuzzy lop implementation of dead simple algorithm written in C & python (py-yacc) & makefile (GNU) & flex & bison (few KLOCs) fuzzing libraries APIs ((((( functions libraries fuzz anything that can be linked with minerva piece of code mostly to catch low hanging fruits (for now) work in progress since 2012 - released (tm) under beerware license https://github.com/LogicalTrust/minerva lib support for Linux, FreeBSD, NetBSD, OpenBSD, OS X...
  • 10. MAKE DUMB FUZZING GREAT AGAIN
  • 11. Minerva algorithm - the idea 1. script ← ”” 2. X ← Initial set of variables with their types 3. G ← Fresh variable generator 4. F ← Function database 5. for i in 1..n: 5.1 f ← GET RANDOM(F, X) 5.2 v ← G() 5.3 script ← script . v . ” = ” . f call with random arguments from X (but with proper types) 5.4 X ← X ∪ (v, f result type) 6. return script *ekhm*, what?
  • 12. Minerva algorithm - the idea - example F = {int = A(), int = B(int, int), char∗ = C(int), char∗ = D(int, char∗), ...} X = ∅ x, y - simple types 1. v1 = A(); X = {int : {v1}} 2. v2 = B(v1, v1); X = {int : {v1, v2}} 3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}} 4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}} 5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}} 6. ...repeat it until crash
  • 13. Minerva algorithm - the idea - example F = {int = A(), int = B(int, int), char∗ = C(int), char∗ = D(int, char∗), ...} X = ∅ x, y - simple types 1. v1 = A(); X = {int : {v1}} 2. v2 = B(v1, v1); X = {int : {v1, v2}} 3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}} 4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}} 5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}} 6. ...repeat it until crash
  • 14. Minerva algorithm - the idea - example F = {int = A(), int = B(int, int), char∗ = C(int), char∗ = D(int, char∗), ...} X = ∅ x, y - simple types 1. v1 = A(); X = {int : {v1}} 2. v2 = B(v1, v1); X = {int : {v1, v2}} 3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}} 4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}} 5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}} 6. ...repeat it until crash
  • 15. Minerva algorithm - the idea - example F = {int = A(), int = B(int, int), char∗ = C(int), char∗ = D(int, char∗), ...} X = ∅ x, y - simple types 1. v1 = A(); X = {int : {v1}} 2. v2 = B(v1, v1); X = {int : {v1, v2}} 3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}} 4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}} 5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}} 6. ...repeat it until crash
  • 16. Minerva algorithm - the idea - example F = {int = A(), int = B(int, int), char∗ = C(int), char∗ = D(int, char∗), ...} X = ∅ x, y - simple types 1. v1 = A(); X = {int : {v1}} 2. v2 = B(v1, v1); X = {int : {v1, v2}} 3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}} 4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}} 5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}} 6. ...repeat it until crash
  • 17. Minerva algorithm - the idea - example F = {int = A(), int = B(int, int), char∗ = C(int), char∗ = D(int, char∗), ...} X = ∅ x, y - simple types 1. v1 = A(); X = {int : {v1}} 2. v2 = B(v1, v1); X = {int : {v1, v2}} 3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}} 4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}} 5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}} 6. ...repeat it until crash
  • 18. Minerva algorithm - the idea - example F = {int = A(), int = B(int, int), char∗ = C(int), char∗ = D(int, char∗), ...} X = ∅ x, y - simple types 1. v1 = A(); X = {int : {v1}} 2. v2 = B(v1, v1); X = {int : {v1, v2}} 3. v3 = C(v2); X = {int : {v1, v2}, char∗ : {v3}} 4. v4 = D(v1, v3); X = {int : {v1, v2}, char∗ : {v3, v4}} 5. v5 = A(); X = {int : {v1, v2, v5}, char∗ : {v3, v4}} 6. ...repeat it until crash
  • 19. Minerva - the algorithm pros: rather simple algorithm easy to implement in some way similar to CFG fuzzing quite universal make dumb fuzzing great again (tm) cons: dumb fuzzer is dumb by default it produces pretty flat call trees
  • 20. ((((((((((( Fuzzing problems marketing in perfect case you have to only provide API definition (C function prototypes) found minor bugs in: LibreSSL OpenSSL OpenSSH ... easy configuration easy to add new target shell mode framework to manage test cases (traces)
  • 21. Minerva - how does it work? +-----------+ +----------------+ | target.mi |----------------| magic Makefile | | (config) | +----------------+ +-----------+ | | | | (mi2c compiler) | v v +------------+ +--------------+ | target.[ch]|--------------| minerva core | +------------+ +--------------+ | | --------------+---------------/ | v +------------+ | target_bin | (your shiny fuzzer) +------------+
  • 22. Minerva - OpenSSL bn(3) man page $ man 3 bn #include openssl/bn.h BIGNUM *BN_new(void); void BN_free(BIGNUM *a); void BN_init(BIGNUM *); void BN_clear(BIGNUM *a); void BN_clear_free(BIGNUM *a); BN_CTX *BN_CTX_new(void); void BN_CTX_init(BN_CTX *c); void BN_CTX_free(BN_CTX *c); BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); BIGNUM *BN_dup(const BIGNUM *a);
  • 23. Minerva - OpenSSL bn(3) man page $ man 3 bn #include openssl/bn.h BIGNUM *BN_new() = generic_not_zero; void BN_free(BIGNUM *a {DESTROY}) = generic_void; void BN_init(BIGNUM *) = generic_void; void BN_clear(BIGNUM *a) = generic_void; void BN_clear_free(BIGNUM *a {DESTROY} ) = generic_void; BN_CTX *BN_CTX_new() = generic_not_zero; void BN_CTX_init(BN_CTX *c) = generic_void; void BN_CTX_free(BN_CTX *c {DESTROY}) = generic_void; BIGNUM *BN_copy(BIGNUM *a, BIGNUM *b) = generic_void; BIGNUM *BN_dup(BIGNUM *a) = generic_not_zero;
  • 24. Minerva - configuration target/openssl/bn.mi: /* BUNCH OF INCLUDES */ #include openssl/bn.h #include openssl/bio.h #include minerva_generic.h /* FUNCTION PROTOTYPE = FUNCTION CHECK */ BIGNUM *BN_new() = generic_not_zero; /* {DESTROY} - CALL DESTROYS VARIABLE */ /* {UNIQUE} - VARIABLE HAS TO BE UNIQUE AMONG CALL ARGUMENTS */ void BN_free(BIGNUM *a {DESTROY}) = generic_void; void BN_init(BIGNUM *) = generic_void; void BN_clear(BIGNUM *a) = generic_void; void BN_clear_free(BIGNUM *a {DESTROY} ) = generic_void; BN_CTX *BN_CTX_new() = generic_not_zero; void BN_CTX_init(BN_CTX *c) = generic_void; void BN_CTX_free(BN_CTX *c {DESTROY}) = generic_void;
  • 25. Minerva - target.c target/openssl/bin/target/target.c (glue to call/register functions) /* ... */ #include openssl/bn.h #include openssl/bio.h #include minerva_generic.h int __minerva_wrap_call_minerva_BN_ULONG_new(minerva_var_t *new, minerva_var_t **vars) { new-val = xcalloc(1,sizeof(BN_ULONG)); new-flags |= F_VAR_ALLOC; *((BN_ULONG*)new-val) = (BN_ULONG)minerva_BN_ULONG_new(); return 1; } /* ... */ void minerva_funcs_init(minerva_funcs_t *funcs) { minerva_arg_t *x; minerva_funcs_add(funcs, __minerva_BN_ULONG_t, __minerva_wrap_call_minerva_BN_ULONG_new, minerva_BN_ULONG_new, 0, generic_not_zero, 0); x = xcalloc(2 ,sizeof(minerva_arg_t)); x[0] = (minerva_arg_t){__minerva_BN_BLINDING_ptr_t,0}; x[1] = (minerva_arg_t){__minerva_unsigned_t,0}; minerva_funcs_add(funcs, __minerva_void_t, __minerva_wrap_call_BN_BLINDING_set_flags,
  • 26. Minerva - target.h target/openssl/bin/target/target.h (enum for types) #ifndef _MINERVA_TARGET_H_ #define _MINERVA_TARGET_H_ typedef enum { __minerva_BN_RECP_CTX_ptr_t, __minerva_BN_MONT_CTX_ptr_t, __minerva_unsigned_t, __minerva_long_t, __minerva_FILE_ptr_t, __minerva_BN_CTX_ptr_t, __minerva_BN_ULONG_t, __minerva_int_t, __minerva_BIGNUM_ptr_t, __minerva_char_ptr_t, __minerva_void_t, __minerva_BIO_ptr_t, __minerva_BN_BLINDING_ptr_t ,__minerva_types_no } minerva_type_t; #endif
  • 27. Minerva - configuration - what we need? set of functions’ prototypes set of check functions (some are provided by default) set of #includes
  • 28. Minerva - building system inspired by (Free/Net/Open)BSD ports written in Makefile (GNU) adding new target should be as easy as writing few lines of Makefile support for ASAN/DEBUG builds example file: TARGET=openssl LOCAL_SRC= minerva_vars_init.c LDFLAGS=-lssl -lcrypto include ../../mk/minerva.mk
  • 29. Minerva - the result target/openssl$ make MICONFIG=bn.mi #################################### # Generate Build targets # #################################### ../../compiler/mi2c.py -m bn.mi -o bin//target//target cc -I../../include/ -Wall -O0 -Ibin//target/ -I. -c -o bin//target//target.o bin//t #################################### # Build local # #################################### cc -I../../include/ -Wall -O0 -Ibin//target/ -I. -c -o bin//local//minerva_vars_ini #################################### # Building core # #################################### bison -d ../../core//minerva_parser.y -o bin//core/minerva_parser.tab.c flex -o bin//core/minerva_lexer.c --header-file=bin//core/minerva_lexer.h ../../cor cc -I../../include/ -Wall -O0 -Ibin//target/ -c -o bin//core/minerva_lexer.o bin/ cc -I../../include/ -Wall -O0 -Ibin//target/ -c -o bin//core/minerva_parser.tab.o
  • 30. Minerva - the result cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb cc -I../../include/ -Wall -O0 -Ibin//target/ -I../../include/ -I../../lib/progressb #################################### # Linking # #################################### cc -o bin//minerva-openssl-bn bin//core/main.o bin//core/minerva_dict.o bin//core/minerva_call.o bin//core/minerva_func.o bin//core/minerva_generic.o bin//core/minerva_var.o bin//core/xmalloc.o bin//core/minerva_repl.o bin//core/minerva_loop.o bin//core/minerva_trace.o bin//core/dict.o bin//core/minerva_lexer.o bin//core/minerva_parser.tab.o bin//target//target.o bin//local//minerva_vars_init.o -lssl -lcrypto ../../lib/progressbar/libprogressbar.a -lreadline -lcurses
  • 31. Minerva - the result target/openssl $ ./bin/minerva-openssl-bn seed: 2813646763 o/ found crash *yay* o/
  • 32. Minerva - (Libre—Open)SSL - off-by-one #1 Let’s take BIGNUM −0 and apply it to the BN bn2hex crypto/bn/bn print.c: char *BN_bn2hex(const BIGNUM *a) { char *buf; char *p; buf=(char *)OPENSSL_malloc(a-top*BN_BYTES*2+2); [...] p=buf; if (a-neg) *(p++)=’-’; if (BN_is_zero(a)) *(p++)=’0’; for (i=a-top-1; i =0; i--) [...] *p=’0’; How to get −0 in LibreSSL? It is a task for the listener
  • 33. Minerva - (Libre—Open)SSL - off-by-one #2 Let’s call BN rand(BN, 1, 1, 0)- bnrand crypto/bn/bn rand.c: static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) { unsigned char *buf = NULL; [...] bytes = (bits + 7) / 8; bit = (bits - 1) % 8; buf = OPENSSL_malloc(bytes); if (top != -1) { if (top) { if (bit == 0) { buf[0] = 1; buf[1] |= 0x80; [...]
  • 34. Minerva - traces target/openssl $ ./bin/minerva-openssl-bn -T tc1.trace seed: 971111740 o/ found crash *yay* o/ target/openssl $ head -n 20 tc1.trace 0 = BN_CTX_new() 1 = BN_CTX_new() 2 = BN_new() 3 = BN_bn2dec(2) 4 = BN_RECP_CTX_new() 5 = BN_cmp(2, 2) 6 = BN_pseudo_rand_range(2, 2) 7 = BN_swap(2, 2) 8 = BN_copy(2, 2) 9 = BN_mask_bits(2, 6) 10 = BN_exp(2, 2, 2, 0) ...
  • 35. Minerva - traces target/openssl $ ./bin/minerva-openssl-bn -p tc1.trace seed: 797555542 Segmentation fault (core dump)============================== | o/
  • 36. minerva - shell mode $ ./bin/minerva-toy-toy -r seed: 2102654505 pfl x = fuzz(3) Fuzzing |===================================| ETA: 0h00m00s pfl x = fuzz(3, x) Fuzzing |===================================| ETA: 0h00m00s pfl show(x) 0 = zero() 1 = crashme(0) [...] 4 = add_one(1) 5 = crashme(3) pfl x = fuzz(0, x) o/ found crash *yay* o/ pfl show(x) 0 = zero() 1 = crashme(0) [...] 7 = add_one(1) 8 = crashme(6)
  • 37. minerva - shell mode you can now be the fuzz operator guide process where to go! stats - func stat, var stat fuzzing - fuzz (iterations, context) var = func(arg1, ..., argn) context = trace, vars, funcs test case (trace) management - restore, save mutations, coverage, ...
  • 38. minerva - minimize test case $ ./bin/minerva-toy-toy -r seed: 607440374 pfl x = fuzz() o/ found crash *yay* o/ pfl m = min(x) pfl show(m) 0 = zero() 16 = add_one(0) 23 = crashme(16) 26 = crashme(23) 88 = crashme(26) pfl play(m) Segmentation fault: 11======= | ETA: 0h00m00s
  • 40. minerva - tipstricks automate things as much as you can jenkins Kibana ... are your friends cluster crashes (or be lost) *sanitizers are more than useful ...for more check our presentation from AlligatorCon 2015
  • 41. minerva - problems I showed you perfect cases ... BN new() allocates and initializes a BIGNUM structure. BN init() initializes an existing uninitialized BIGNUM. [...] → BN new() + BN init() = bn new you have to deal with many things on your own (e.g. I/O) sometimes you have to take care of ”objects state” → you can do it by introducing new wrappers and/or types some APIs requires initialization shell fuzzing stuff in one process is not the best idea
  • 42. Future work work in progress: ((((((((((( framework for mutations framework for coverage (a.k.a. smart fuzzing) framework for differential fuzzing see the BN sqrt case in OpenSSL diff(OpenSSL bn, libgcrypt) - https://github.com/hannob/bignum-fuzz diff between versions framework for snapshoting it’s PoC → slow, messy, ineffective we’re open to any suggestions better documentation blend or steal ideas from libfuzzer or other fuzzers NetBSD rump kernel fuzzing when to expect the 1.0 release?
  • 43. Credits Large parts of this presentation or project were done in cooperation with: n1x0n s1m0n PSi Zeru´s THANKS!
  • 44. Time for questions (and maybe answers) QA