전체 글 (67) 썸네일형 리스트형 AFL++ 동작 원리 - 2 Evolving the input queueAFL은 새로운 상태 전환을 유도한 변형 테스트 케이스를 입력 큐에 추가하고, 이를 미래 퍼징 라운드의 시작점으로 활용한다. 이 테스트 케이스는 기존에 발견된 것들을 보완하지만, 자동으로 대체하지는 않는다. AFL의 이러한 접근 방식은 더 탐욕적인 유전 알고리즘과는 달리, 도구가 다양한 비연관적이고 상호 배타적인 특성을 점진적으로 탐색할 수 있게 해 준다. 이는 다음과 같은 방식으로 진행된다. 이 과정에서 생성되는 합성 코퍼스(synthetic corpus)는 "이 입력은 새로운 작업을 수행한다!"는 인사이트를 제공하는 입력 파일의 집합으로, 향후 다른 테스트 프로세스의 시드(seed)로 사용할 수 있다. 예를 들어, 리소스 집약적인 데스크톱 앱을 수동으로 st.. AFL++ 동작 원리 - 1 Design statementAmerican Fuzzy Lop(AFL)은 퍼저 도구로서, 특정한 이론이나 원칙에 얽매이지 않고 매우 실용적인 방법으로 설계되었다. 대부분의 퍼저 도구가 원리에 기반을 두거나, 개념 증명(proof-of-concept) 도구로 기능하는 반면, AFL은 그러한 틀에서 벗어나 다양한 해킹 기법들을 모은 하나의 컬렉션이라고 할 수 있다. 실제로 테스트를 통해 효과가 입증된 기법만을 사용하여 만들어졌다. AFL의 여러 기능은 경량화된 계측(instrumentation) 덕분에 가능해졌다. 이 계측은 프로그램을 실행하는 동안 발생하는 동작을 모니터링하고 분석하는 중요한 역할을 한다. 그러나 AFL에서 이러한 계측 기술은 목표를 달성하기 위한 하나의 수단일 뿐이다. 다시 말해, AFL.. CVE-2018-7573 분석 https://www.exploit-db.com/exploits/44596 FTPShell Client 6.7 - Buffer OverflowFTPShell Client 6.7 - Buffer Overflow EDB-ID: 44596 CVE: 2018-7573 Date: 2018-05-08www.exploit-db.com해당 CVE는 FTP에 접근하는 클라이언트에게 Buffer Overflow를 발생시키는 취약점이다. 필요한 환경은 Windows XP 버전과 FTP shell이며, 분석을 위해 Ollydbg도 필요하다. 위의 URL에 있는 PoC 코드를 약간 수정해서 분석해 보자.import socketimport sysport = 21try: s = socket.socket(socket.AF_I.. 반디집 API 후킹 Detours를 이용하여 반디집 API를 후킹 할 수 있다.Detours는 원본 함수의 시작 부분에 점프 명령을 삽입하여 사용자 정의 함수로 실행 흐름을 옮기고, Trampoline 함수를 통해 원본 함수의 나머지 부분을 호출할 수 있도록 하는 방식으로 작동한다.반디집에서 압축을 해제할 때 WinAPI인 WriteFile 함수를 사용할 것이라 추측해 볼 수 있다.확실하게 확인해 보기 위해 해당 함수가 호출될 때 printf를 통해서 메시지를 출력해 본다. // dllmain.cpp : DLL 애플리케이션의 진입점을 정의합니다.#include "pch.h"#include #include #include "C:\\~~~~~\\include\\detours.h"#pragma comment(lib, "C:\\~.. House of Force `malloc()`의 메모리 할당 과정/* finally, do the allocation */p = av->top;size = chunksize (p); /* check that one of the above allocation paths succeeded */if ((unsigned long) (size) >= (unsigned long) (nb + MINSIZE)) { remainder_size = size - nb; remainder = chunk_at_offset (p, nb); av->top = remainder; set_head (p, nb | PREV_INUSE | (av != &main_arena ? NON_MAIN_ARENA : 0)); set_head (r.. memcpy 분석 `memcpy`는 메모리 영역을 복사하는 C 언어의 표준 라이브러리 함수이다.#include #include #if !_ASM_MEMCPYtypedef long word;#define lsize sizeof(word)#define lmask (lsize - 1)void *memcpy(void *dest, const void *src, size_t count) { char *d = (char *)dest; const char *s = (const char *)src; int len; if (count == 0 || dest == src) return dest; if (((long)d | (long)s) & lmask) { // src and/or dest.. PLT/GOT 프로그램을 컴파일할 때 자주 사용하는 함수들은 라이브러리(library)에 따로 구현하여 사용한다. 이때 함수들을 사용하기 위해 오브젝트 파일과 해당 라이브러리를 연결해주는 과정이 필요하다. 이 과정을 링킹(Linking)이라고 한다.링크를 하는 방식에는 Static과 Dynamic이 있다.Static Link : 실행 파일 안에 모든 코드가 포함되기 때문에 라이브러리 연동 과정이 따로 필요 없고, 한 번 생성한 파일에 대해서 필요한 라이브러리를 따로 관리하지 않아도 된다. 따라서 해당 함수를 호출할 때, 라이브러리를 참조하는 것이 아니라, 자신의 함수를 호출하는 것처럼 호출한다.Dynamic Link : 실행 파일 안에 라이브러리 코드를 포함하지 않으므로, 함수를 호출하면 라이브러리에서 해당 함수의 주.. Byte Ordering 바이트 오더링(Byte Ordering) : 데이터를 저장하는 방식빅 엔디언(Big Endian)리틀 엔디언(Little Endian)BYTE b = 0x12;WORD w = 0x1234;DWORD dw = 0x12345678;char str[] = "abcde";TYPENameSIZE빅 엔디언 Style리틀 엔디언 StyleBYTEb1[12][12]WORDw2[12][34][34][12]DWORDdw4[12][34][56][78][78][56][34][12]char []str6[61][62][63][64][65][00][61][62][63][64][65][00] 바이트 타입의 b 변수를 저장할 때는 두 방식의 차이가 없지만, 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타난다. 빅 엔디.. 이전 1 ··· 5 6 7 8 9 다음