ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. 운영체제 명령 실행 취약점
    웹 취약점 분석 2019. 3. 2. 22:50
    운영체제 명령 실행 취약점이란?

    코드
    OC
    점검항목
    운영체제 명령실행 취약점
    개요

    웹 어플리케이션에서 system(), exec()와 같은 시스템 명령어를 실행 시킬 수 있는 함수를 제공하며 사용자 입력값에 대한 필터링이 제대로 이루어지지 않을 경우 공격자가 운영체제 시스템 명령어를 호출하여 백도어 설치나 관리자 권한 탈취 등 시스템 보안에 심각한 영향을 미칠수 있는 취약점


    웹 어플리 케이션에서 system(), exec()와 같은 시스템 명령어를 실행 시킬수 있는 함수를 제공 합니다.
    사용자 입력값에 대한 필터링이 잘 이루어 지지 않았을때 시스템 명령어 호출로 인한 백도어 설치 및 관리자 권한 탈취로 큰 영향을 미칠수 있는 취약점 입니다.
    또한 커맨드 인젝션 공격이라고도 불리는 운영체제 명령 실행 취약점은 SQL Injection공격 과 더불어 인젝션 리스크와 관련된 주요 공격 기법입니다.

    취약점 이름 만으로도 예측을 할수 있습니다.
    운영체제 관련된 명령을 실행했을때 생기는 취약점이라고 이야기 할수 있습니다.

    이러한 취약점이 발생되면 홈페이지를 열고 그 홈페이지에 명령어를 실행 할수 있습니다. 
    그렇게 되면 홈페이지에 저장된 파일을 강제로 지우거나, 바이러스를 삽입하고, 홈페이지 서버를 다운 시킬 수도 있습니다.


    예를 한번 들어보겠습니다.

    1. 사용자 A는 서버에 IP응답을 확인하기 위해서IP주소를 입력합니다.
    2. ping X.X.X.X 
    3. 그러면 서버는 ping 결과를 리턴해 줍니다.

    위의 과정이 정상적인 과정이지만

    운영체제 명령 실행 취약점을 이용하면 다음과 같은 과정이 눈에 보입니다.

    1. 사용자 A가 IP주소를 입력함과 동시에 ;(세미콜론)을 이용해서 다음과 같이 입력합니다.
    2. ping X.X.X.X; cat /etc/passwd
    3. 그러면 서버는 ping 결과를 리턴해 줍과 동시에 /etc/passwd를 cat 명령어로 인해 목록이 출력됩니다.

    ※ ;(세미 콜론)은 리눅스 에서 여러 명령어를 한번에 실행하고자 사용하는 특수문자 입니다.

    ↑ 웹 취약점 실습을 하기 위한 DVWA 메인 화면 입니다.

    ↑ 위의 DVWA Security 목록을 누르시면 보안 수준을 Low 부터 Impossible로 설정 할 수 있습니다.

    난이도의 차이에서 나타나는 소스코드의 차이를 비교하면 PHP 시큐어 코딩 과 관련해서 학습 하기에도 도움이 됩니다.

    ↑ 보안 수준을 Low 로 맞추고 Command Injection을 클릭한 모습입니다.

    아까 예제로 보여드린 예시를 실습해 보겠습니다.

    ↑ IP를 입력했더니 ping 명령어를 통해서 실행 되는 것을 확인 할 수 있습니다.

    그렇다면 ; 를 이용해서 /etc/passwd에 있는 파일을 확인해 보겠습니다.

    ↑ 위와 같이 ping 명령어 처리 후에 /etc/passwd의 내용이 확인 되었습니다.

    ↑ Low 보안 수준에서의 Command Injection의 소스 코드입니다.

    Low 레벨 이다 보니 아무런 필터링도 없네요

    저기의 shell_exec() 함수가 실행을 시켜주는 것을 볼수 있습니다.

    ↑ 위 코드는 Impossible 레벨의 소소코드입니다.
    VM의 창 크키가 작아서 어쩔수 없이 따로 코드를 적었습니다.

    URL을 통해서 GET방식으로 파라미터를 넣어주는 방식도 있습니다.

    <SK 인포섹 카페에서 가져온 운영체제 명령 실행 취약점-생성한 웹쉘 실행 결과 화면>

    URL에 입력해서 취약점 공격을 할 시에는 URL 인코딩을 고려 해야 합니다.

    그 이유는 URL에 사용가능한 문자가 제한 되어 있기 때문에 URL에서 허용하는 문자를 변환 해서 전달해야 하기 때문입니다.
    GET 요청의 파라미터로 값을 전달 할때 문제가 되기도 합니다.

    운영체제 명령실행 취약점의 대응 방안으로는 다음과 같습니다.

    1. 웹 서버의 권한을 관리자가 아닌 최소의 권한으로 설정하여 명령실행의 결과를 최소화 시킨다.$
    2. php.ini의 safe_mode=On을 해준다.
    3. java에서는 Runtime.exe를 사용해야한다면 파라미터 값에 대한 검정 절차가 필수 입니다.


     



    '웹 취약점 분석' 카테고리의 다른 글

    6. 악성컨텐츠 삽입 취약점  (0) 2019.04.13
    5. 정보노출 취약점  (0) 2019.04.13
    4. 디렉토리 인덱싱 취약점  (1) 2019.04.07
    3. XPath 인젝션 취약점  (2) 2019.04.06
    2. SQL 인젝션 취약점  (0) 2019.04.06

    댓글

Designed by Tistory.