GTFOBins & Shell Breakout

Linux

0 views

1. 개요 및 정의

1.1 한 줄 요약

  • "스마트폰의 '긴급 전화' 기능을 이용해 잠금 화면을 뚫고 사진첩에 들어가는 것"과 같다.
    • 정상적인 도구를 비정상적인 경로로 사용하여 보안 벽을 넘는 행위다.

1.2 정의

  • GTFOBins
    • 시스템에 설치된 표준 바이너리(more, vi, tar 등)를 사용하여 제한된 쉘을 우회하거나 권한 상승시키는 기법 및 해당 바이너리 목록을 칭한다.
  • Restricted Shell Breakout
    • 사용자의 행동을 제한하는 쉘이나 스크립트 환경에서, 허용된 명령어의 부가 기능을 이용해 자유로운 쉘을 획득하는 공격이다.

2. more 예시

2.1 more의 동작 메커니즘

  1. 페이지 단위 출력
    1. more는 텍스트가 터미널 화면보다 길 경우 출력을 멈추고 사용자의 입력을 대기한다.
  2. 명령어 대기
    1. 이때 사용자는 스페이스바(다음 페이지), 엔터(한 줄), q(종료) 등의 키를 입력할 수 있다.
  3. 외부 에디터 호출 (v)
    1. more는 편의를 위해 현재 보고 있는 내용을 편집기에서 열 수 있는 기능을 제공한다.
    2. 이때 v 키를 누르면 환경 변수 $EDITOR 또는 기본값인 /usr/bin/vi를 실행한다.

2.2. vi의 보안 구멍

  • vi가 실행되는 순간, 제어권은 more에서 vi로 넘어간다.
    • vi는 단순한 편집기가 아니다.
  • 파일 탐색 (:e)
    • :e /경로/파일을 입력하면 권한이 허용하는 한 시스템 내 어떤 파일이든 열어서 읽을 수 있다.
  • 쉘 실행 (:!)
    • :!/bin/bash 또는 :!/bin/sh를 입력하면 vi 내부에서 새로운 쉘 프로세스를 생성한다.
    • 이것이 바로 Shell Breakout의 핵심이다.

2.3 예시

  1. 기본 시나리오
    1. 터미널 창을 일부러 작게 줄여서(Text가 한 화면에 다 안 나오게 유도) more가 멈추게 만든다.
--More--(15%)  <-- 여기서 멈췄을 때
  1. Vi 실행 및 파일 읽기
    • v 키 입력 -> vi 에디터 실행됨.
    • :e /etc/passwd 입력 -> 타겟 파일 열기.
  2. 쉘 얻기
    1. 파일을 읽는 것에서 멈추지 않고, 아예 쉘을 따내는 방법이다. vi 상태에서 다음을 입력한다.
    2. 이렇게 하면 vi를 실행시킨 사용자의 권한으로 완전한 쉘이 떨어진다.
:set shell=/bin/bash
:shell

Loading comments...