블로그

코더를 위한 보안 정복: 공유 및 학습 시리즈 - OS 명령어 삽입

February 7, 2019
자프 카란 싱

OS 명령 주입 공격은 애플리케이션이 사용자로부터 셸 입력을 허용하면서 입력된 문자열이 유효한지 검증하지 않을 때 발생할 수 있습니다. 이를 통해 공격자는 애플리케이션이 호스팅되는 운영 체제에 직접 명령을 삽입할 수 있으며, 이때 공격자는 해당 애플리케이션에 설정된 권한 수준으로 명령을 실행하게 됩니다.  

OS 명령 주입 공격은 초보 수준의 해커도 수행할 수 있어 보안 팀이 가장 흔하게 겪는 취약점 중 하나입니다. 다행히도 이러한 공격을 효과적으로 차단할 수 있는 방법은 많이 있습니다. 이번 에피소드에서는 다음 내용을 다룹니다:

       공격 원리

       공격이 위험한 이유

       공격을 차단하기 위한 방어 체계 구축 방법

공격자는 어떻게 OS 명령 주입을 이용하는가?

공격자가 OS 명령 주입 공격을 시작하기 위해 가장 먼저 해야 할 일은 애플리케이션 내에서 사용자 입력 지점을 찾는 것입니다. 사용자가 작성하는 양식은 좋은 공격 시작점이 될 수 있습니다. 더 영리한 공격자는 거의 모든 애플리케이션이나 웹사이트에서 사용하는 쿠키나 HTTP 헤더 등을 공격의 발판으로 삼기도 합니다.

두 번째로 해야 할 일은 애플리케이션이 어떤 운영 체제에서 호스팅되는지 파악하는 것입니다. 선택지가 많지 않기 때문에 이 단계에서는 시행착오를 거치는 것만으로도 충분합니다. 대부분의 애플리케이션 서버는 Windows 기반(버전은 크게 중요하지 않음)이거나, 특정 유형의 Linux, 또는 Unix일 가능성이 높습니다.

그다음, 해커는 입력을 수정하여 평범해 보이는 입력값에 운영 체제 명령을 주입합니다. 이를 통해 호스팅 OS가 애플리케이션의 권한 수준에서 의도치 않은 명령을 실행하도록 속일 수 있습니다.

예를 들어, 애플리케이션 내에서 정당한 사용자가 파일 내용을 확인하기 위해 다음과 같은 명령을 사용할 수 있습니다. 이 경우 월간 이사회 회의록을 확인하는 상황입니다.

exec("cat " + filename)

이 예시에서는 다음 명령이 실행되어 사용자에게 회의록이 반환됩니다.

$ ./cat MeetingNotes.txt
7월 회의에는 집행위원회 위원 3명이 참석했습니다. 새로운 예산 프로젝트에 대해 논의했으나, 별도의 조치나 투표는 진행되지 않았습니다.

공격자가 입력값 끝에 Linux의 디렉터리 목록을 확인하는 명령과 같은 추가 명령을 덧붙이면 다음과 같은 일이 벌어집니다. 원래의 명령인 회의록 표시 기능은 그대로 작동하지만, 악의적인 사용자는 디렉터리에 있는 다른 모든 파일과 후속 OS 명령 주입 공격에 사용할 수 있는 다른 명령까지 확인하게 됩니다. 공격자는 다음과 같이 입력합니다:

$ ./cat MeetingNotes.txt && ls

대신 다음을 확인하세요:

7월 회의에는 집행위원회 위원 3명이 참석했습니다. 새로운 예산 프로젝트에 대해 논의했으나, 별도의 조치나 투표는 진행되지 않았습니다.

MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c

보시다시피 이 경우 해커는 디렉터리 내용을 확인했을 뿐만 아니라, 호스트 운영 체제에서 실행할 수 있는 다른 명령어 메뉴까지 제공받게 되었습니다.

OS 명령어 삽입 공격이 위험한 이유는 무엇일까요?

사용자가 대상 애플리케이션의 본래 목적을 우회하여 운영 체제 명령어를 실행하도록 허용하는 것은 매우 위험합니다. 공격자는 기밀 데이터 탈취나 서버 드라이브 전체 포맷과 같은 치명적인 작업을 쉽게 수행할 수 있습니다. 공격자가 사용할 수 있는 옵션은 운영 체제 내에서 허용된 명령어와 이를 활용하는 공격자의 창의성에 의해서만 제한됩니다.

OS 명령어는 애플리케이션과 동일한 권한 수준에서 실행됩니다. 관리자 권한으로 실행되는 애플리케이션이 해킹되면, 해커는 모든 OS 명령어를 실행할 수 있게 됩니다.

OS 명령어 삽입 공격 패턴은 잘 알려져 있으며 문서화되어 있습니다. 취약한 애플리케이션은 전문 해커뿐만 아니라 스크립트 키디(script kiddies)의 공격에도 취약합니다. 기술 수준이 낮은 공격자라도 OS 명령어를 복사하여 애플리케이션에 붙여넣는 방식으로 결과를 확인할 수 있습니다.

OS 명령어 삽입 공격으로부터 보안 확보하기

OS 명령어 삽입을 방지하는 몇 가지 효과적인 기술이 있습니다. 첫 번째 단계는 애플리케이션 기능을 수행하는 데 필요한 최소한의 권한만 부여하여 실행하는 것입니다. 이것이 공격을 완전히 막을 수는 없지만, 침해가 발생할 경우 피해를 최소화할 수 있습니다.

대부분의 프로그래밍 언어와 프레임워크는 디렉터리 목록 확인, 하드 디스크 파일 생성 또는 읽기와 같은 일반적인 OS 작업을 위한 API 호출을 제공합니다. 환경에서 OS 명령어 삽입을 제거하는 가장 좋은 방법은 애플리케이션이 OS 명령어를 직접 사용하는 대신 이러한 API 호출을 사용하도록 하는 것입니다.

이 방법이 불가능한 경우, OS 명령어에 사용하기 전에 사용자 입력을 검증하십시오. 화이트리스트를 사용하면 신뢰할 수 있는 소수의 값만 사용되도록 보장할 수 있습니다. 블랙리스트를 사용하는 것도 기술적으로 가능하지만, 허용된 명령어보다 차단해야 할 명령어가 훨씬 많으므로 화이트리스트 방식이 거의 항상 더 쉽습니다. 쿠키와 같이 간과하기 쉬운 사용자 입력 벡터뿐만 아니라 유효한 POST 및 GET 매개변수도 화이트리스트에 포함하는 것을 잊지 마십시오.

마지막으로, 프로그래밍 API를 사용할 수 없고 화이트리스트를 적용할 수 없는 경우, 사용자 입력에 포함된 특수 문자를 이스케이프 처리하는 살균(sanitization) 라이브러리를 사용하여 OS 명령어에 사용하십시오.

OS 명령어 삽입 공격에 대한 추가 정보

더 자세한 내용은 OWASP의 OS 명령어 삽입 공격 관련 문서를 참조하십시오. 또한 사이버 보안 팀을 최고의 사이버 전사로 훈련시키는 Secure Code Warrior 플랫폼의 무료 데모를 통해 새로 습득한 방어 지식을 테스트해 볼 수 있습니다. 이 취약점과 기타 다양한 위협을 물리치는 방법에 대해 자세히 알아보려면 를 방문하십시오.

태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.