Return to Libc

버퍼 오버플로우 취약점을 이용한 공격 기법 중 하나이다. DEP(Data Execution Prevention)를 우회하는 방법으로, 스택이 아닌 libc 라이브러리 함수들을 호출하여 코드 실행을 조작하는 기법이다. DEP는 스택에 있는 쉘코드가 실행되지 않도록 보호하는 기법이다. Exploit Plan 취약한 프로그램에서 버퍼 오버플로우 발생 가능성 분석 프로그램이 사용하는 libc 라이브러리 내 system() 함수 주소 확보 /bin/sh 문자열이 메모리에 있는지 확인 (또는 주입) 스택을 조작해 리턴 주소를 system() 함수 주소로 설정 system("/bin/sh") 실행하여 쉘 확보 Proof of Concept #include <stdio....

February 9, 2025 · 3 min · Beomsu Lee

Template Method Pattern

알고리즘의 구조를 슈퍼클래스에서 정의하고, 세부적인 구현은 서브클래스에서 담당하도록 하는 디자인 패턴이다. 이 패턴은 코드의 중복성을 줄이고 알고리즘의 변하지 않는 부분과 변해야 하는 부분을 분리하는 데 유용하다. Motivation 온라인 교육 플랫폼에서 강의 과정의 진행 단계를 표준화하려고 한다. 모든 과정은 다음 단계를 따른다고 하자. 강의 자료 준비 강의 진행 과제 제출 성적 평가 하지만, 강의 유형에 따라 세부적인 구현이 다르다. 템플릿 메서드를 정의하여 강의 과정의 공통된 흐름을 유지하여, 알고리즘의 흐름을 변경하지 않고 세부 구현만 변경할 수 있으며, 중복 코드를 제거할 수 있다....

February 8, 2025 · 3 min · Beomsu Lee

Visitor Pattern

객체의 구조와 관계는 변경하지 않고, 객체에 대한 연산을 외부에서 추가하는 디자인 패턴이다. 이 패턴은 객체를 방문하여 각 객체에 대해 서로 다른 작업을 수행할 수 있게 해준다. Motivation 여러 종류의 도형 객체들을 가진 시스템을 관리한다고 하자. 각 도형 객체(Circle, Rectangle, Triangle)는 자체적인 속성과 고유한 그리기 로직을 가진다. 시스템에서 도형들에 대해 공통적으로 할 수 있는 연산들(예: 면적 계산, 그리기)을 추가해야 한다고 하자. 방문자 패턴을 사용하면 도형 객체의 확장(수정) 없이 연산을 추가할 수 있다....

February 8, 2025 · 6 min · Beomsu Lee

State Pattern

객체 내부 상태에 따라 객체의 행동을 변경할 수 있도록 하는 패턴이다. 이 패턴을 사용해 조건문 대신, 각 상태로 별도의 클래스로 분리하여 객체의 상태 변화에 따라 동적으로 행동을 변경할 수 있다. Motivation 게임 캐릭터가 여러 상태를 가질 수 있다고 하자. 예륻 들어, 캐릭터는 대기 상태, 공격 상태, 방어 상태 등 여러 상태가 있을 수 있다. 캐릭터의 행동은 현재 상태에 따라 달라지며, 상태가 바뀔 때마다 행동도 달라진다. 이 경우 상태 패턴을 도입하여 게임 캐릭터의 상태 변화에 따라 동적으로 행동을 변경할 수 있다....

February 2, 2025 · 5 min · Beomsu Lee

Strategy Pattern

전략 패턴은 문제 해결 방법(알고리즘)을 캡슐화하여 클라이언트 코드와 분리함으로써, 알고리즘의 교체를 동적으로 수행할 수 있게 해준다. Motivation 정렬 알고리즘을 사용하는 프로그램이 있다고 하자. 이 프로그램은 여러 가지 정렬 알고리즘(예: 버블 정렬, 퀵 정렬)을 지원해야 한다. 사용자는 상황에 따라 정렬 알고리즘을 선택할 수 있어야 한다고 하자. 이때 전략 패턴을 사용하면 클라이언트 코드는 정렬 방식에 의존하지 않으며 전략(정렬 알고리즘)을 동적으로 교체할 수 있다. Applicability 행동들이 조금씩 다를 뿐 개념적으로 관련된 많은 클래스들이 존재할 때 알고리즘의 변형이 필요할 때 사용자가 몰라야 하는 데이터를 사용하는 알고리즘이 있을 때 하나의 클래스가 많은 행동을 정의하고, 이런 행동들이 그 클래스 연산 안에서 복잡한 다중 조건문의 모습을 취할 때 Structure Strategy: 제공하는 모든 알고리즘에 대한 공통의 연산들을 인터페이스로 정의한다....

February 2, 2025 · 5 min · Beomsu Lee