2024 SWLUG/클라우드

Command Injection

un_plugged 2024. 10. 29. 00:49

Command Injection 공격

어플리케이션에 운영체제 명령어(Shell Script)를 실행하는 기능이 존재하는 경우, 외부 입력값을 검증, 제한하지 않고 운영체제 명령어 또는 운영체제 명령어의 일부로 사용하는 경우 발생한다. 이 경우 어플리케이션이 올라간 운영체제를 공격자가 직접적으로 제어할 수 있게 된다.

 

동작 방식

1단계

  • 악의적인 운영 체제 명령을 실행할 수 있는 애플리케이션 취약점 찾기

 
2단계

  • 응용 프로그램이 호스트 운영 체제에서 원하는 작업을 실행하도록 명령을 설계
  • 일반적으로 HTML 코드, 쿠키 등의 입력 매커니즘을 사용해 애플리케이션에 삽입

 
3단계

  • 브라우저는 명령을 해석하고 호스트의 운영체제 명령으로 변환
  • 위협 행위자는 호스트 시스템과 감염된 시스템의 네트워크에서 특정 명령 실행 가능

 

유형

1. 직접 명령 인젝션(Direct Command Injection)

  • 사용자가 입력한 데이터가 OS 명령의 인자로 직접 포함되는 경우

 

2. 간접 명령 인젝션(Indirect Command Injection)

  • 파일이나 환경변수를 통해 웹 애플리케이션의 시스템 셸로 OS 명령이 전달되는 경우
  • 보통 윈도우 시스템에서 나타남
  • Forfiles, pcalue.exe 등 CMD를 사용하지 않고 명령을 호출할 수 있도록 지원하는 유틸리티 사용 가능

 

3. 블라인드 명령 인젝션 (Blind Command Injection)

  • 사용자의 입력 데이터가 OS 명령에 포함돼 시스템 셸로 전달되는 것은 겉으나 HTTP 응답 메시지에 명령의 실행 결과가 표시되지 않는 경우

 

 

 

Command Injection 공격 실습 

Command Injection 공격 대상 페이지 확인 

DVWA 에 접속한 상태에서 좌측 메뉴 중 Command Injection에 들어가면 Enter an IP Address 부분에 1.1.1.1 을 입력한 후 Submit 버튼을 클릭한다.

그러면 아래와 같이 1.1.1.1 IP 주소에 대해 Ping 이 실행 결과를 확인할 수 있다.

 

Command Injection 공격

동일한 화면에서 Enter an IP Address 부분에 아래의 공격 코드를 입력한 후 Submit 버튼을 클릭한다.

이 코드는 서버의 /etc/passwd 파일 내용을 무단으로 열람하여 사용자 정보를 탈취할 수 있다. 

1.1.1.1 && cat /etc/passwd

 

이렇게 공격이 성공하였다면 아래와 같이 1.1.1.1 에 대한 Ping 실행 결과와 함께 /etc/passwd 파일에 대한 정보가 출력되는 것을 확인할 수 있다.

 

 

 

Command Injection 방어 실습 - 사용자 정의 규칙

Command Injection 공격 방어 규칙 생성

미리 생성해둔 MyWAF을 선택한 후 새로운 사용자 정의 규칙을 생성한다. 선택해야할게 꽤나 많으니까 참고 자료를 보면서 잘 선택한다!

위와 같이 Command_Injection 규칙이 정상적으로 생성되었다. 

 

Command Injection 공격 방어 확인

공격 단계에서 수행한 것과 마찬가지로 DVWA 의 Command Injection 메뉴의 Enter an IP Address 입력칸에 아래와 같은 Command Injection 코드를 입력한 후 Submit 버튼을 클릭한다.

1.1.1.1 && cat /etc/passwd

그러면 아래와 같이 사용자의 요청이 사용자 정의 차단 페이지와 함께 차단되는 것을 확인할 수 있다.

※방어 원리

 

  • 명령어 패턴 탐지: 주로 &&, |, ; 등과 같은 명령어 구분자나 cat, ls 같은 시스템 명령어가 포함된 요청을 통해 이루어지는 공격이므로 AWS WAF는 이러한 특정 명령어 패턴을 탐지하고 차단할 수 있도록 사전 정의된 규칙을 생성한다. 
  • 실시간 요청 필터링: AWS WAF는 웹 애플리케이션으로 들어오는 모든 요청을 실시간으로 검사하여, 공격 패턴이 포함된 요청을 식별하고 차단한다. 이렇게 함으로써, 서버에 도달하기 전에 Command Injection 공격을 차단할 수 있다. 

 

 

 

Command Injection 방어 실습 - 관리형 규칙

Command Injection 공격 방어 규칙 생성

이번에는 MyWAF에 새로운 AWS 관리형 규칙을 생성한다. Rules 탭을 선택한 후 Add managed rule groups를 클릭한다.

첫번째로 보이는 AWS managed rule groups를 선택하여 세부 메뉴 중 POSIX operating system 규칙 그룹을 선택한다.

위와 같이 AWS-AWSManagedRulesUnixRuleSet 규칙이 정상적으로 생성되었다.

 

Command Injection 공격 방어 확인 

공격 단계에서 수행한 것과 마찬가지로 DVWA 의 Command Injection 메뉴의 Enter an IP Address 입력칸에 아래와 같은 Command Injection 코드를 입력한 후 Submit 버튼을 클릭한다.

만약 사용자 정의 차단 페이지가 뜬다면 위에서 생성한 Command_Injection 규칙을 삭제하고 관리형 규칙만 남기면 된다. 

1.1.1.1 && cat /etc/passwd

아래 그림과 같이 사용자의 요청이 AWS 관리형 규칙에 의해 차단되어 403 Forbidden 페이지가 출력되는 것을 확인할 수 있다. 

 

※방어 원리

  • 관리형 규칙은 Command Injection에 자주 사용되는 명령어 구문과 특수 문자를 탐지하여 자동으로 차단한다. 
  • 이 규칙은 특정 키워드와 패턴을 자동으로 필터링하여, Command Injection 시도가 서버에 도달하기 전에 차단할 수 있도록 한다. 
  • 다수의 웹 애플리케이션이나 특정 경로에서 발생할 수 있는 다양한 Command Injection 공격을 폭넓게 방어할 수 있다.

 

 

 

Command Injection 대응 방안 

  1. 사용자 입력에서 시스템 명령 실행 금지( Ex. system(), exec() )2.
  2. 명령으로 전달되는 입력에 강한 입력 유효성 검사 사용(특정 명령 화이트리스트 추가)
  3. 최소 권한 사용
  4. 애플리케이션을 자주 업데이트하고 패치하기
  5. 동적 애플리케이션 보안 테스트(DAST) 도구로 애플리케이션 검사 (Ex. Bright)
  6. 운영체제 종류에 따른 특수문자 이스케이프 처리 또는 요청 차단
    • 윈도우: 특수문자 앞에 '^'를 추가해 이스케이프 요청 또는 차단
    • 리눅스/유닉스: 특수문자 앞에 '\'를 추가하여 이스케이프 요청 또는 차단

 

'2024 SWLUG > 클라우드' 카테고리의 다른 글

무차별 입력 공격  (0) 2024.11.05
Backdoor  (0) 2024.11.05
SQL Injection  (0) 2024.10.28
Stored XSS  (0) 2024.09.30
Reflected XSS  (0) 2024.09.30