This post is from a low-reputation account and contains an unverified outbound link. Be cautious before clicking external links.

fuzzing theory

Words
380
Reading
2 min
Listen
Play
8y


퍼징(fuzzing)이란 무엇인가?

어플리케이션에 무작위 변수를 무차별 적으로 대입하여 시스템을 fuzz 시키는것

이를 통해 시스템의 취약점은 찾을 수 있다.

두가지의 fuzzing 방법

Mutation vs. Generation

Mutation의 경우 입력값을 순수하게 랜덤으로 돌려 무작위로 append하거나 replace 한다

Generation의 경우는 입력 값의 포맷을 이해하고 범위를 제한 해주는 대입

 |구분 | Mutation | Generation|

 |장점 | 이해 필요x  | 이해만 한다면 시간 절약 가능 |

 | 단점 | 경계값이 불 분명함 | 어려운 난이도|

따라서 상황에 따라 적절한 방법을 섞어 사용해야 할것이다(눕인 나는 mutation만..)

그렇다면 퍼징을 하는 방법은?

현재 퍼징을 할 수 있는 수 많은 파이썬 모듈들이 오픈소스로 풀려있다 따라서 깃허브를 뒤지다보면 쉽게 찾을  수 있다 

  • afl-python: enables American fuzzy lop fork server and instrumentation for pure-Python code
  • Sulley: fuzzer development and fuzz testing framework consisting of multiple extensible components
  • Peach Fuzzing Platform: extensible fuzzing framework for generation and mutation based fuzzing (v2 was written in Python)
  • antiparser: fuzz testing and fault injection API
  • TAOF, (The Art of Fuzzing) including ProxyFuzz, a man-in-the-middle non-deterministic network fuzzer
  • untidy: general purpose XML fuzzer
  • Powerfuzzer: highly automated and fully customizable web fuzzer (HTTP protocol based application fuzzer)
  • SMUDGE
  • Mistress: probe file formats on the fly and protocols with malformed data, based on pre-defined patterns
  • Fuzzbox: multi-codec media fuzzer
  • Forensic Fuzzing Tools: generate fuzzed files, fuzzed file systems, and file systems containing fuzzed files in order to test the robustness of forensics tools and examination systems
  • Windows IPC Fuzzing Tools: tools used to fuzz applications that use Windows Interprocess Communication mechanisms
  • WSBang: perform automated security testing of SOAP based web services
  • Construct: library for parsing and building of data structures (binary or textual). Define your data structures in a declarative manner
  • fuzzer.py (feliam): simple fuzzer by Felipe Andres Manzano
  • Fusil: Python library used to write fuzzing programs 

출처: https://github.com/dloss/python-pentest-tools

하지만 본격적으로 툴을 사용하기전에 간단한 코딩을 통해 원리를 파악하는 것이 더 중요하다고 생각한다

따라서 기본적인 예제를 통해 원리를 익힐 것이다

 https://www.slideshare.net/CodeEngn/2012-codeengn-conference-06-beist-everyone-has-his-or-her-own-fuzzer  

codeengn에서 발표된 fuzz에 대해 도움이 될 수 있는 자료를 찾았다

원리는 간단하지만 근본 적인 fuzz 알고리즘을 이해 시켜 줄 수 있는 예시이다

import os, sys, random

def go():
   return random.randrange(0, 0x100)
while 1:
    filesize = os.path.getsize("./fuz.bin")
    fp = open("./fuz.bin", "rb++")
    tmpoffset = random.randrange(0, filesize)
    fp.seek(tmpoffset, 0)
    fp.write("%c%c%c%c" % (go(), go(), go(), go()))#입력값 삽입
    fp.close()
    os.system("./fuz.bin")#실행

실제로 위의 10줄 짜리 코드가 크래쉬를 일으키는 것을 볼 수 있었다.

향후

Tool 을 사용하여 실제로 오류가 난 지점을 벡터로 활용해 원하는 작업을 실행하는 방법을 강구하고 실습 해볼 것

fuzzing theory | Ecency