CS 78

Chapter 9: Heaps, Priority Queues, and Graphs

경희대학교 박제만 교수님의 자료구조 수업을 기반으로 정리한 글입니다.HeapA heap is a binary tree that satisfies these special SHAPE and ORDER properties:Shape: Heaps' shape must be a complete binary tree. (위쪽, 왼쪽부터 채움)Order: Parents value > Child values (MAX heap)▶ Heap ExampleLargest (Smallest) Value in a Heap -> root BST와 Heap은 비슷한 듯 다르니, 구분할 수 있어야 한다.Heap: 부모 >= 자식BST: 왼쪽 서브트리 ※ MAX heap MIN heap ▶ Array Representation o..

CS/자료구조 2025.12.14

9-1. 소프트웨어 퍼징의 개념과 기술

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. 1. 기본 개념Bug소프트웨어 개발자의 실수Software "Bug" e.g., 버퍼오버플로우 퍼징은 기본적으로 버그를 자동으로 찾고 싶은 것을 말한다. 이때 말하는 버그는 런타임 버그이다.버그는 컴파일 버그와 런타임 버그가 있는데, 컴파일 버그는 소스 코드 작성 시 문법같은 거 틀렸을 때 발생하는 버그로, 애당초 이 버그로 인해 프로그램이 만들어지지도 않기에 문제가 되지 않음런타임 버그: 소프트웨어 사용하는 시점에서 문제가 되는 버그 또한, 버그는 메모리 버그, 로직 버그 등 종류가 다양한데, 퍼저가 타겟하여 찾고자 하는 버그는 메모리 버그이다. (e.g. ,BOF)물론, 고도화된 연구를 통해 로직 버그도 퍼징하는 게 존재하긴 ..

7-2. BoF Exploit 2

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. 보호 기법 3가지 (보호 옵션)1. ASLRAddress Space Layout Randomization의 약자로, 실행 파일과 관련된 공유 라이브러리, 스택, 힙이 매핑되는 메모리 영역의 주소를 랜덤으로 배치하는 것을 말한다. ('영역' 단위로 랜덤화, e.g., stack, heap, libc) ASLR이 활성화되어 있으면 7-1의 실습 2 처럼 점프할 주소를 직접 입력하는 행위는 불가능하다.주소 leak을 통해 점프할 주소를 알아와야 하는 번거로움 발생리눅스 설치시 자동으로 켜지는 보호 기법브루트 포싱을 한다고 하더라도 같은 프로세스 안에서 계속해서 브루트 포싱을 하는 게 쉽지가 않음 11~15행: main, secret ..

7-1. BoF Exploit 1

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. BoF (Buffer Overflow)사용자의 입력 값에 대한 길일 검증을 하지 않아, 프로그래머가 할당한 크기의 버퍼보다 큰 데이터를 입력받아 메모리의 다른 영역을 오염시키는 취약점이다.버퍼: 문자열을 입력받거나 특정 스택에서 공간을 할당 받는 곳 ※ 버퍼는 임시 저장 곤간이고, 스택은 그 버퍼가 놓일 수 있는 여러 장소 중 하나이다. 1. 실습 준비예제 코드 작성 gets 함수는 사용자의 입력 값에 대한 길이 제한이 없기에, 사용자는 프로그래머가 지정한 buf의 사이즈인 16 바이트를 넘어, 더 큰 입력을 입력할 수 있게 된다. -> 스택에 할당된 16 바이트를 넘어서 return address까지 바꾸거나, 또는 그 이상의 ..

8. Toyransome

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. Ransomware 소개RansomwareRansom(몸값)과 software(소프트웨어)의 합성어시스템을 잠그거나 데이터를 암호화해 사용할 수 없도록 하고 이를 인질로 금전을 요구하는 악성 프로그램신뢰할 수 없는 사이트, 스팸메일, 파일공유 사이트 등을 통해 유포됨 이렇게 특정한 경로로 피해자 PC에 접근을 한 후, 바이러스를 통해 피해자가 가지고 있는 파일들을 암호화 함 ※ 실습과 달리, 현대의 암호화는 키 없이 복호화가 불가능하다. 랜섬웨어는 위와 같이 고유한 확장자와 함께 감염된 시스템 드라이브의 파일을 암호화한다. 암호화되면서 파일이 손상되어 정상적으로 실행하거나 읽을 수 없게 되고, 해커는 복호화 키에 대해 거액의 돈을..

6. Reversing

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. Reverse Engineering (Reversing, 역공학)Reverse Engineering이란 이미 만들어진 시스템이나 장치에 대한 해체나 분석을 통해 구조, 기능, 디자인 등을 알아내는 과정이다.즉, 완성품의 설계도 없이 구조와 동작 과정을 알아내는 모든 단계를 말한다.e.g., 소스코드가 없는 바이너리 파일(컴파일 된 파일)에 대해 프로그램의 로직을 분석하고 이해함 소프트웨어 분야에서의 Reverse Engineering은 소스코드 없이, 컴파일 된 소프트웨어의 구조를 다양한 방법으로 분석하는 과정을 말하며, 메모리 덤프와 같은 바이너리 분석 결과를 바탕으로 동작 원리와 내부 구조를 파악한 후, 원래의 코드가 어떻게 ..

5-2. 리눅스 사용

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. FD(File Descriptor)리눅스, 유닉스 등에서 프로세스가 파일, 소켓, 파이프 등 시스템 자원에 접근하기 위해 운영체제로부터 할당받는 정수값 표준0: 표준 입력(Standard Input, STDIN)1: 표준 출력(Standard Output, STDOUT02: 표준 오류(Standard Error, STDERR) 현재 쉘 FD 확인 -la: long format(자세히), all(모두)proc: 커널이 제공하는 가상 프로세스 정보 디렉토리$$: 현재 쉘의 프로세스 IDfd: 해당 프로세스의 파일 디스크립터 목록 리다이렉트리다이렉션 문법문법의미> 또는 1>표준 출력(stdout)을 파일로 보냄2>표준 에러(stder..

5-1. 소프트웨어 보안을 위한 리눅스 기초

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. 시스템콜 및 파일디스크립터의 이해시스템콜시스템콜이 보안상 중요한 이유는? 시스템콜은 응용프로그램에 커널(OS)이 제공하는 함수를 호출하는 인터페이스로,'높은 권한'이 요구되는 시스템 자원 접근의 통로이기 때문에 보안상 중요하다. OS가 제공하는 기능 -> 권한 상승이 요구됨H/W 접근File SystemNetwork... 커널운영체제를 구성하는 핵심 코드 시스템 콜 구현(권한 분리)의 보안상 의미타 애플리케이션으로부터의 메모리 접근, 하드웨어 손상, 시스템 마비 방지 시스템콜의 종류System Information Query: getpidProcess Management: execveMemory: mmap (not malloc)S..

4-3. 어셈블리 실습

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. Main 함수 분석pwndbg 실행CMD 열고 wsl -d khu-sw-seccd ~: home directory로 이동id / pw: user / userpwndbg ./gdb_lab 실행 Main 함수 어셈블리 출력 push rbp # 이전 함수의 rbp 저장 -> 이전 함수로 돌아가기 위한 정보mov rbp, rsp # 현재 스택 포인터(rsp)를 기준으로 새 프레임 설정 ※ rbp: 현재 함수의 스택 프레임의 기준 주소(base address)를 담는 레지스터이다. Main 함수 시작 주소 breakpoint 설정 및 실행 함수 프롤로그 (Prologue, 시작)함수 시작 시 스택프레임을 세팅하는 단계이다..

4-2. GDB 실습

경희대학교 장대희 교수님의 소프트웨어보안 수업을 기반으로 정리한 글입니다. 실습환경 구축WSL pwndbg GDB란?GDB는 GNU(그누) Debugger의 약자로, 표준 디버거이다. (동적 분석) 주요 기능Breakpoint: 원하는 코드 지점에서 실행을 멈추고 상태 확인단계 실행(Step/next): 코드 한 줄씩 실행해 흐름 추적메모리/레지스터 확인: 변수 값, 스택, 힙, CPU 레지스터 값 보기메모리 수정: 변수나 메모리 값을 임의로 바꾸기 가능코어덤프 분석: 프로그램이 크래시 났을 때 원인을 분석⭐ 브레이크 포인트란 디버거가 제공하는 기능으로, 프로그램을 일시적으로 멈추는 것을 말한다.이렇게 프로그램을 멈춰야 특정 시점의 메모리를 볼 수 있다. 때문에 브레이크 포인트를 거는 것은 매우 중요하다..