본문 바로가기
Security/Web Hacking

[Web Hacking] OS Command Injection

by inyeong 2024. 8. 19.

OS Command Injection이란? 


    • OS Command Injection
      OS Command Injection은 운영체제 명령어 주입 또는 시스템 명령어 주입 공격을 의미한다.
      사용자 입력값에 시스템 명령어를 주입해서
      클라이언트가 서버에 원격으로 시스템 명령어를 실행할 수 있게 되는 공격이다.
    • 시스템 명령어 실행
      시스템 명령어 실행은 해킹에서 아주 강력한 행위로, 공격자는 서버를 제어할 수 있다.
      서버 강제 종료를 통해 가용성을 침해하거나, 랜섬웨어를 유포하는 등 모든 공격이 가능하다. 
      인근 데이터베이스나 내부망, 오피스망으로 침투하여 더 큰 피해가 이어질 수 있다. 

      따라서, OS Command Injection은 위험도가 매우 높은 취약점이라 할 수 있다. 
    • SQL Injection vs OS Command Injection
      Injection 공격은 기능에 따라 발생하는 취약점이 다르다. 

        공격 대상  공격 행위 
      SQL Injection DB와 연결된 Application SQL 구문 주입
      → 중요 데이터 탈취
      OS Command Injection 사용자 입력값을 통해
      시스템 명령을 실행하는 Application
      시스템 명령어 주입
      → 데이터 탈취,
      인접 네트워크 침투,
      서버 점령 등
      (위험도 높음)
    • OS Command Injection의 위험도가 높은데 SQL Injection이 더 주목 받는 이유
      OS command injection 취약점이 발생하려면, 사용자 입력 값을 받아서 시스템 명령을 실행하는 기능이 있어야 한다. 그런데 이러한 기능은 대부분 서버 사이드 스크립트로 구현 가능하기 때문에 일반적인 웹 서비스에서는 필요하지 않다. 웹 서비스 관리자 콘솔에 시스템 명령을 실행하는 부분이 존재하는 특수한 환경에서만 발생하는 취약점으로, 취약점 발생 확률이 굉장히 낮다. 하지만, 데이터베이스는 거의 모든 웹사이트에서 사용되기 때문에 SQL Injection 취약점이 많이 발생되어 더 주목 받게 된 것이다. 


공격 원리 


  • 공격 과정
    공격자가 사용자 입력 값에 시스템 명령어를 주입하면
    입력 값 검증 없이 구문이 조합되어 공격에 성공한다.

  • 취약점 발생 원인 : 입력 값 검증 부재 
  • 공격 예시
     
    정상 입력값 nslookup www.test.co.kr
    비정상 입력값 nslookup www.test.co.kr & ifconfig
    공격자는 한 줄의 명령어에 두 개 이상의 시스템 명령어를 입력할 수 있는 메타 문자 (&, &&, |, ||) 를 넣는다. 
    뒤에 있는 명령어를 통해 공격자가 원하는 기능을 수행할 수 있다. 


대응 방안


  1. 서버 사이드 스크립트로 기능 구현
  2. 사용자 입력 값 형식에 따른 정규 표현식 검증
  3. 악의적인 문자 검증