본문 바로가기

[책이야기]/[파이썬 해킹프로그래밍 요약]

8장 퍼징

제네레이션 퍼저 : 새로운 데이터를 생성대 대상 어플에 전달

뮤테이션 퍼저 : 기존의 데이터를 이용하여 변경 후 대상 어플에 전달 

BOF : 버퍼오버플로우

힙 BOF : BOF가 발생한 곳과 인접한 힙블록에 메타데이터, 즉 공격자가 원하는 부분에 임의의 메모리 주소로 덮어쓰거나 코드를 덮어씌워서 공격

스택 BOF : 스탤에 데이터를 덮어써서 실행흐름 변경. 즉, 함수의 리턴주소를 덮어쓰거나, 포인터나 변수를 변경, 예외 핸들러의 체인을 변경

정수 OF : 부호가 있는 정수가 가질수 있는 값의 범위를 벗어난 값이 저장될 떄 ㅣ발생한다. 32비트의 부호 있는 정수다 저장할 수 있는 값보다 훨씬 큰값을 저장하려고 하면 프로세서는 값을 성공적으로 저장하기 위해 값의 상위 비트들을 제거하고 저장! 

EX)
명령
MOV EAX, [ESP + 0x8] #ESP에 0x8을 더한 곳에 값을 EAX에 저장
LEA EDI, [EAX + 0x24]  #EAX에 저장되어있는 값에 0x24를 하여 EDI에 저장
PUSH EDI # malloc 파라미터로 EDI에 있는 값을 사용
CALL msvcrt.malloc #malloc 함수 호출
===============================
스택 파라미터 -> 0xFFFFFFF5
산술연산 -> 0xFFFFFFF5 + 0x24
산술연산 결과 => 0x100000019(산술연산 결과가 32비트 값보다 크다)
프로세스의 의해서 산출된 최종값 -> 0x000000019


코드 커버리지 : 대상 어플에 대한 퍼징을 수행할 때 해당 어플의 전체코드 중 퍼저에 의해 수행되는 코드가 어느정도인지를 나타냄. 즉, 퍼징의 성능측정을 할때 코드커버리지를 보고 측정. 코드 커버리지에 대한 측정 방법은 여러가지가 있지만 디버거로 대상 어플의 실행파일에 있는 모든 함수에 소프트 브레이크 포인트를 설정하고 퍼징을 수행하는 동안에 단순히 얼마나 많은 함수가 호출되는지 카운팅하면 됨. 이를 통해 퍼저가 얼마나 효과적으로 대상 어플의 코드를 테스트 하는지 판단가능!

반응형