• AI글쓰기 2.1 업데이트
HackerSchool FTZ 레벨별 상세 풀이 및 보안 공격 기법
본 내용은
"
HackerSchool FTZ 상세 풀이 및 분석
"
의 원문 자료에서 일부 인용된 것입니다.
2023.11.14
문서 내 토픽
  • 1. 버퍼 오버플로우(Buffer Overflow) 공격
    버퍼 오버플로우는 할당된 메모리 크기보다 큰 데이터를 입력하여 인접한 메모리를 덮어쓰는 공격 기법입니다. FTZ 레벨 9-19에서 주로 다루어지며, strcpy, gets, fgets 등의 위험한 함수를 통해 발생합니다. 공격자는 스택의 반환 주소(RET)를 조작하여 임의의 코드를 실행하거나 쉘을 획득할 수 있습니다. 메모리 구조 분석과 쉘 코드 삽입을 통해 권한 상승을 달성합니다.
  • 2. Return-to-Library(RTL) 공격 및 함수 체이닝
    RTL 공격은 버퍼 오버플로우 시 반환 주소를 라이브러리 함수(system, exit 등)의 주소로 덮어 함수를 호출하는 기법입니다. 함수 체이닝은 여러 함수를 연속적으로 호출하여 복잡한 작업을 수행합니다. FTZ 레벨 11-19에서 setreuid, system, exit 함수의 주소를 조합하여 권한 상승 후 쉘을 획득하는 방식으로 활용됩니다.
  • 3. 포맷 스트링 버그(Format String Bug, FSB)
    포맷 스트링 버그는 printf 함수에 사용자 입력을 직접 포맷 문자열로 전달할 때 발생합니다. %x를 통해 스택 메모리를 읽을 수 있고, %n을 통해 메모리에 값을 쓸 수 있습니다. FTZ 레벨 20에서 .dtors 섹션의 주소를 환경 변수의 쉘 코드 주소로 덮어 임의 코드 실행을 달성합니다.
  • 4. SetUID 바이너리와 권한 상승
    SetUID 비트가 설정된 실행 파일은 소유자의 권한으로 실행됩니다. FTZ 초반 레벨에서 find 명령으로 SetUID 바이너리를 찾아 실행하여 상위 레벨의 권한을 획득합니다. 각 레벨의 바이너리(ExecuteMe, editor, autodig 등)를 분석하여 취약점을 발견하고 권한 상승을 진행합니다.
Easy AI와 토픽 톺아보기
  • 1. 버퍼 오버플로우(Buffer Overflow) 공격
    버퍼 오버플로우는 메모리 안전성의 가장 기본적이면서도 심각한 취약점입니다. 프로그래머가 입력 데이터의 크기를 적절히 검증하지 않을 때 발생하며, 스택이나 힙 영역의 경계를 넘어 인접한 메모리를 덮어쓸 수 있습니다. 이를 통해 공격자는 반환 주소를 조작하여 임의의 코드를 실행하거나 시스템 권한을 탈취할 수 있습니다. 현대의 보호 메커니즘(ASLR, DEP, 스택 카나리 등)이 도입되었지만, 여전히 레거시 시스템이나 부주의한 코드에서 발견됩니다. 안전한 함수 사용과 입력 검증이 필수적입니다.
  • 2. Return-to-Library(RTL) 공격 및 함수 체이닝
    RTL 공격은 DEP(Data Execution Prevention) 같은 보호 기법을 우회하기 위해 개발된 고급 공격 기법입니다. 공격자는 기존 라이브러리 함수들의 주소를 연쇄적으로 연결하여 원하는 동작을 수행합니다. ROP(Return-Oriented Programming)의 기초가 되는 이 기법은 시스템 콜을 직접 실행하거나 쉘을 획득할 수 있게 합니다. 함수 체이닝을 통해 복잡한 공격 시나리오를 구성할 수 있으며, 이는 현대 보안 연구에서 중요한 주제입니다. 방어를 위해서는 ASLR 강화, CFI(Control Flow Integrity) 등의 기법이 필요합니다.
  • 3. 포맷 스트링 버그(Format String Bug, FSB)
    포맷 스트링 버그는 printf 계열 함수에서 포맷 문자열을 사용자 입력으로 받을 때 발생하는 취약점입니다. 공격자는 %x, %s, %n 같은 포맷 지정자를 조작하여 스택의 임의 위치를 읽거나 쓸 수 있습니다. 이를 통해 메모리 정보 유출, 변수 조작, 심지어 코드 실행까지 가능합니다. 비교적 간단한 취약점이지만 매우 강력한 공격 벡터이며, 많은 레거시 애플리케이션에서 여전히 발견됩니다. 방어는 포맷 문자열을 상수로 고정하고 사용자 입력을 데이터로만 취급하는 것이 핵심입니다.
  • 4. SetUID 바이너리와 권한 상승
    SetUID 바이너리는 실행 시 파일 소유자의 권한으로 실행되는 특수한 파일로, 일반 사용자가 관리자 권한이 필요한 작업을 수행할 수 있게 합니다. 그러나 이러한 메커니즘은 권한 상승 공격의 주요 대상이 됩니다. SetUID 바이너리에 버퍼 오버플로우나 포맷 스트링 버그 같은 취약점이 있으면, 공격자는 루트 권한을 획득할 수 있습니다. 보안을 위해서는 SetUID 바이너리의 개수를 최소화하고, 필요한 경우에만 사용하며, 철저한 입력 검증과 최소 권한 원칙을 적용해야 합니다.