개념 사전 · 개념

운영체제 명령 주입

OS Command Injection · 명령 삽입 · 명령 주입

은 외부 입력이 운영체제 명령의 구문이나 실행 인수 의미를 바꾸는 문제다. 셸을 제거해도 호출 프로그램의 옵션과 자원 접근 정책까지 자동으로 안전해지는 것은 아니다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 셸 문법과 데이터 인수를 분리한다.
  • 실행 파일·허용 옵션·대상 경로를 서버 정책으로 제한한다.
  • 시간·출력· 권한을 관리해 정상 호출의 피해 범위를 줄인다.

02어떤 순서로 동작하나

  1. 입력 의미 제한

    사용자에게 파일 경로·명령 구문 대신 허용된 자료의 ID를 받도록 설계한다.

  2. 서버 자료로 해석

    ID를 형식·길이·권한 기준으로 검증하고 서버가 관리하는 파일 목록에서 실제 대상을 선택한다.

  3. 실행 경계 선택

    가능하면 언어의 라이브러리로 처리한다. 외부 프로그램이 필요하면 고정 실행 파일과 인자를 분리해 해석을 피한다.

  4. 옵션·자원 통제

    , PATH·환경·작업 디렉터리, timeout·출력 크기·최소권한을 별도로 제한한다.

  5. 결과와 흔적 연결

    반환 코드·파일 변화·자식 를 원래 요청과 연결하고 예상한 자료 처리만 발생했는지 확인한다.

03먼저 알아둘 용어와 구성요소

명령 문자열을 해석해 를 실행하는 프로그램.
프로그램에 전달되는 인수 배열.
새 명령 없이도 옵션 값으로 기존 프로그램의 행동을 바꾸는 문제.
실행 작업에 필요한 권한만 부여하는 원칙.
LEARN THROUGH PRACTICE

웹의 Ping 기능을 입력·프로세스·출력으로 분해하기

입력 문자열이 셸 문법으로 해석되는 경계를 찾고 안전한 인자 전달 방식으로 바꾼다.

실습 구성과 전제

  • 격리된 교육용 Ping 폼과 폐기 가능한 만 사용한다.
  • 아래 웹 출력과 터미널 출력은 기능의 대응 관계를 비교하는 자료이며 지연 수치가 같은 연속 실행은 아니다.
  1. 웹 입력이 만드는 정상 프로세스를 추적한다

    • 폼의 주소 입력은 ping 프로그램에 전달되는 데이터여야 한다. 웹 서버가 주소를 셸 명령 문자열에 붙이면 데이터와 셸 구문이 같은 문맥에 놓인다.
    • 정상 주소 하나로 제한하고 응답에서 전송 수·수신 수·손실률을 읽는다.
    command injection · 실습·개념 참고 화면 5원본 크기로 보기 ↗
    • 웹 화면에는 Ping for FREE와 주소 입력칸이 있으며 3 packets transmitted, 3 received가 표시된다.
    • 0% packet loss는 해당 ICMP 시험 결과다. 입력 검증이나 명령 주입 방어가 구현됐다는 뜻은 아니다.
    확인 기준

    정상 기능이 실제로 어떤 실행 파일과 옵션을 사용하는지 코드에서 확인한다.

  2. 웹 결과와 프로그램 출력을 연결한다

    • 터미널 출력의 ping -c 3은 세 번의 요청 횟수를 지정한다. 웹이 이 출력을 그대로 반환한다면 서버 명령 결과가 응답 경로에 들어간 것이다.
    • 서버가 받은 입력을 안전한 인자 배열로 전달해도 실행 파일·옵션·시간 제한을 별도로 통제해야 한다.
    address = str(ipaddress.ip_address(user_input))
    result = subprocess.run(['ping', '-c', '3', address], shell=False,
                            capture_output=True, text=True, timeout=5)

    전용 비교 예시. ipaddress와 subprocess를 가져온 후 사용하며 실제 실행은 자신의 실습 장비로 제한한다.

    command injection · 명령·상태 출력 6원본 크기로 보기 ↗
    • 터미널 명령은 ping -c 3이며 결과에 세 개의 응답과 요약 통계가 있다.
    • 웹 화면과 출력 형식은 비슷하지만 RTT 값은 다르다. 이를 동일 실행의 앞뒤 증거로 합치지 않는다.
    확인 기준

    허용 주소 형식과 프로그램 옵션을 서버가 고정하는지 본다.

  3. 실행 전 거부와 실행 실패를 나누어 시험한다

    • 주소 형식 오류는 를 만들기 전에 거부한다. 정상 주소의 응답 없음·시간 초과는 실행 단계의 실패로 구분한다.
    • 출력 길이·동시 실행 수·권한도 제한한다. 셸을 쓰지 않는 것과 서비스 자원 소진 방지는 서로 다른 조건이다.
    확인 기준

    잘못된 입력에서 가 생성되지 않고, 타임아웃 뒤 작업이 정리돼야 한다.

실습에서 확인한 동작 원리

  • 의 경계는 데이터가 셸 문법으로 넘어가는 지점이다.
  • 정상 기능의 옵션·권한·시간·출력까지 제한해야 한다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 파일 크기를 구하는 작업은 외부 명령 문자열 대신 언어의 파일 API로 처리할 수 있다.
  • 인수 배열로 파일명을 넘기더라도 파일명 앞부분이 옵션으로 해석되는 도구라면 옵션 종료와 허용 값 검사가 필요하다.
  • 유효한 입력으로 시작한 도 무제한 출력이나 장시간 실행이 가능하므로 출력 크기와 마감 시간이 필요하다.

05혼동하기 쉬운 점과 확인 기준

  • 특정 셸 문자를 이스케이프하는 처리 하나를 모든 운영체제와 호출 API에 공통 적용할 수는 없다.
  • 명령 실행의 성공 종료코드는 결과의 업무상 적합성과 권한 검사를 대신하지 않는다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.