분류 전체보기 12

[알고리즘] CDCL 알고리즘 구현

구현 코드def init(): # 할당값이 들어갈 딕셔너리 symbolic_exp = {} # CNF 저장 형식 [[cluase], [cluase], ...] 각 cluase는 [1, -2, 3]으로 저장. 내부 리스트끼리는 conjunctive로 연결되어있음 clauses = [] while True: line = input("절 입력 (1 -2 3 형식) 입력이 끝나면 아무것도 입력하지 않고 엔터\n> ") if not line: break clause = list(map(int, line.split())) symbolic_exp.update({abs(var): None for var in clause})..

알고리즘 2026.05.06

[논문 정리] SCASE: Automated Secret Recovery via Side-Channel-Assisted Symbolic Execution

서론심볼릭 실행을 공부하면서 이게 어떻게 사용되는지 좀 더 알고싶어 관련 논문을 찾아보았다. 그 중에 부 채널 공격시에 심볼릭 실행이 사용된다는걸 보고 "심볼릭 실행이 어떻게 부 채널 공격에서도 사용되는거지?" 하는 궁금증이 생겨 읽게 되었다. 시험기간이 걸쳐져서 좀 오래 걸리긴 했는데 이번에도 정리해서 올려보려고 한다.그럼 시작하겠다.원문Weber, Daniel, et al. "{SCASE}: Automated Secret Recovery via {Side-Channel-Assisted} Symbolic Execution." 34th USENIX Security Symposium (USENIX Security 25). 2025.https://www.usenix.org/conference/usenixse..

[논문 정리] FUZZOLIC: Mixing fuzzing and concolic execution

서론이번에 Fuzzolic을 공부하게 되었다. Fuzzolic은 Fuzzer와 Symbolic execution을 합친 hybrid concolic executor로 AFL++같은 퍼저의 방식을 일부 채용하면서 symbolic execution의 방법론을 따르는 기법이다. 이번 글에서는 Fuzzolic의 아키텍처, 구현 방식에 대해 정리해보았다. 참고 자료Borzacchiello, L., Coppa, E., & Demetrescu, C. (2021). FUZZOLIC: Mixing fuzzing and concolic execution. Computers & Security, 108, 102368. Introduction소프트웨어를 자동으로 분석하는 기법의 양극단에는 coverage-guided fuz..

[SE] Symbolic Execution & CDCL

서론정적 프로그램 분석 기법인 Symbolic Execution에 대해서 공부하게되었다. 코드 커버리지와 아웃풋 값 등 한정된 정보를 이용하는 grey-box 퍼저인 AFL++과는 다르게, symbolic execution은 white-box fuzzer에서 활용한다. SAT/SMT solver, CDCL에 대해 공부한 것을 간단하게 정리해보았다. 그럼 시작하겠다.참고자료Baldoni, R., Coppa, E., D'Elia, D. C., Demetrescu, C., & Finocchi, I. (2018). A Survey of Symbolic Execution Techniques.James C. King. 1976. Symbolic Execution and Program Testing. Commun...

보안 2026.04.14

[Dream hack] 셸 코드란?

서론이제 셸 코드를 학습한다.해킹 대회(CTF)를 보면 뭔가 어려워보이던데 한번 꼭 배워보고싶었던거다. 이 글은 그 중 아주 간단한 코드만 정리해놓았다. 그럼 시작하겠다.셸 코드란?먼저 Exploit이란 상대 시스템을 공격하는 것을 말하며, 셸 코드란 이런 exploit을 위한 어셈블리 코드를 말한다.일반적으로 셸을 획득하기 위해 셸 코드를 작성하는데 execve 셸 코드를 장악한다.ORW 셸 코드Open, Read, Write 동작을 수행하는 코드로 등정 파일을 읽고 터미널이나 다른 파일에 출력하는 코드이다. 해당 system call을 사용하기 위해 레지스터에 다음과 같은 값을 넣어 호출한다.구현 자체는 따로 다루지 않겠다. (어셈블리를 이해하면 바로 구현할 수 있기때문에) 레지스터의 rax에는 sy..

[Dream hack] GDB/PWN 정리

서론지금부터 정리할 툴들은 물론 깊이 들어가면 복잡하지만 지금은 GDB와 PWN을 겉핥기식으로 정리하도록 하려고한다.시간이 없어서 며칠간 공부하지 못했지만, 할 거 정리가 끝난 지금 조금이라도 많이 드림핵 강의를 공부해야겠다. 그럼 시작하겠다. https://dreamhack.io/lecture/paths/system-hacking-fundamentalGDBGDB(GNU Debugger)는 리눅스의 대표적인 Debugger이다.VS나 Eclipse처럼 메모리, 콜 스택 등을 cli상에서 볼 수 있는 도구이다. GDB에는 다양한 플러그인이 존재한다gef아키텍처에 독립적Heap분석이 가능하다peda가장 클래식한 도구이다. register, stack, code 흐름을 모두 보여줌pattern create로 ..

[Fuzzer] AFL/AFL++이란?

서론fuzzer의 전반적인 내용을 익혔기에 이번엔 AFL에 대해서 집중적으로 알아보고자 한다. 맨 처음에 잘 못 읽었던 논문 "AFL++: Combining Incremental Steps of Fuzzing Research"와 AFL의 Whitepaper을 읽으면서 배운 내용을 정리해보았다. 그럼 시작하겠다. 참고 자료Andrea Fioraldi, Dominik Maier, Heiko Eißfeldt, and Marc Heuse, "AFL++: Combining Incremental Steps of Fuzzing Research," in Proceedings of the 14th USENIX Workshop on Offensive Technologies (WOOT 20), 2020.Valentin J...

보안 2026.03.31

[논문 정리] The Art, Science, and Engineering of Fuzzing: A Survey

서론AFL/AFL++를 쓰면서도 용어가 헷갈리고, 어떤 알고리즘으로 퍼징이 돌아가는지 정확히는 모르고있었다. 그래서 AFL++의 공식 Document를 읽어봤는데 개념에 대해 생략된 부분이 많이 있어 이해하기가 어려웠다. 따라서 퍼징에 대한 용어와 전반적인 원리 이해를 위해 해당 논문을 읽고 정리해보았다. 논문을 제대로 읽는건 처음이라 초반에 논문 선택에 어려움이 좀 있었지만 어쨋든 다 읽어서 기분이 좋다. 그럼 시작하겠다.원문 : https://arxiv.org/abs/1812.00140 The Art, Science, and Engineering of Fuzzing: A SurveyAmong the many software vulnerability discovery techniques availabl..

[Fuzzing101] exercise 3 CVE-2017-13011 실습 기록

서론일단 이번 실습에서는 목표였던 CVE-2017-13028를 찾지 못했기에, 대신 CVE-2017-13011에 대해서 다루겠다.tcpdump는 Asan으로 디버깅 하는것부터 끝까지 많이 고생했던거같다. 저번과 마찬가지로 실습을 진행하면서 했던 삽질을 모두 적어보려고 한다. 그럼 시작하겠다.테스트 환경작년에 마련한 T9 미니PC를 서버로 사용중이다환경은 Ubuntu 서버 OS에 afl++ 공식 도커 이미지를 이용하여 실습을 진행할 예정이다.CVE-2017-13011해당 취약점은 NIC를 거치는 패킷들의 헤더를 출력해주는 tcpdump 프로그램에서 발생했다.util-print.c 파일의 bittok2str_internal() 함수에서 해당 취약점이 발견되었으며, OOB의 한 종류인 global-buffer..

보안/Fuzzing101 2026.03.19

[Dream hack] Linux 메모리 구조 & 어셈블리 정리

서론저번 글에서는 너무 배경설명이 길었다. 어차피 복습하는건데 이미 알고 있는 내용은 안적어도 될거같다. 이번에는 짧게 할거다. 그럼 시작하겠다. https://dreamhack.io/lecture/paths/system-hacking-fundamental리눅스의 메모리 구조리눅스뿐만 아니라 다른 대부분의 운영체제도 마찬가지겠지만, 프로그램을 실행하면 프로세스가 생성된다. 이 프로세스는 고유의 코드, 데이터를 가지고있는데, 데이터가 들어가는 구역을 세그먼트(Segment) 라고 한다. 보면 알겠지만 총 5개의 세그먼트가 있다. 코드 세그먼트: 프로그램의 기계어 코드가 저장된다. 해당 세그먼트에는 r, x 권한만 주어진다데이터 세그먼트: 초기화된 전역 변수 및 전역 상수가 해당 세그먼트에 저장된다. r, ..