[정보보안] OS command injection vs. Webshell attack(웹쉘 공격)

출처: https://www.acunetix.com/blog/web-security-zone/os-command-injection/
OS Command Injection과 Webshell Attack은 유사한 유형의 공격이지만 다른 방식으로 작동합니다.
- OS Command Injection:
- 특징
OS Command Injection은 애플리케이션의 입력 검증이 제대로 이루어지지 않아 공격자가 악의적인 명령을 애플리케이션에 삽입하여 실행하는 공격입니다. 주로 시스템 명령어를 실행하는 애플리케이션에서 발생하며, 공격자는 입력 필드에 OS 명령어를 삽입하여 웹 서버 또는 서버 측에서 명령을 실행할 수 있습니다. 이로써 시스템을 조작하거나 민감한 정보를 유출할 수 있습니다.(OS command Injection 공격에 취약한 API 함수: Perl의 system 함수, PHP의 exec 함수, JSP의 Runtime.exec() 함수, ASP의 eval 함수 등) - 예시
<?php // 사용자로부터 입력을 받아 시스템 명령어를 실행하는 코드 $user_input = $_GET['input']; $output = shell_exec('ping -c 1 ' . $user_input); echo "<pre>$output</pre>"; ?>
위 코드는 사용자로부터 입력받은 값으로 ping 명령어를 실행하여 결과를 출력합니다. 그러나 사용자의 입력에 대한 검증이 없기 때문에 공격자는 파이프(|, ||), 세미클론(;), && 등을 사용해서 입력 값 뒤에 운영체계 명령어를 삽입해서 임의의 명령어를 실행할 수 있습니다. 예를 들어, 공격자가 다음과 같은 URL을 통해 공격을 시도할 수 있습니다.http://example.com/?input=;ls%20-l
위 URL을 통해ls -l
명령어가 실행되어 해당 디렉토리의 파일 목록이 출력될 것입니다. - 방어 대책
- 사용자 입력을 검증하고 허용되지 않은 문자열을 제거 또는
escapeshellarg
내장함수로 입력값을 이스케이프하여 입력의 안전성을 보장합니다. - 가능하면 시스템 명령을 실행하는 대신 적절한 API를 사용하여 작업을 수행합니다. 이를 통해 직접 시스템 명령을 실행하지 않고도 원하는 작업을 수행할 수 있습니다.
- 사용자 입력을 검증하고 허용되지 않은 문자열을 제거 또는
- 특징
- Webshell Attack:
- 특징
Webshell Attack은 공격자가 웹 서버에 악성 스크립트를 업로드하여 웹 서버를 제어하거나 시스템에 액세스하는 공격으로 파일 업로드 취약점을 악용합니다. 웹 쉘은 공격자가 웹 애플리케이션을 통해 시스템에 원격으로 액세스하고 명령을 실행할 수 있도록 하는 악성 스크립트 또는 프로그램입니다. 공격자는 웹 쉘을 통해 시스템 파일에 접근하고 조작할 수 있으며, 시스템을 제어하거나 민감한 데이터를 유출할 수 있습니다. - 예시
- 방어 대책
- 웹 서버에서 사용자가 업로드한 파일을 제한하고 업로드된 파일에 대한 액세스 권한을 제한합니다.
- 파일 및 디렉터리에 대한 액세스 권한을 제한하고 권한을 최소한으로 유지합니다.
- 시스템 보안 업데이트를 수행하여 알려진 취약점을 해결하고, 웹 서버 및 응용 프로그램 소프트웨어를 최신 버전으로 유지합니다.
- KISA에서는 해커들이 웹서버를 해킹 할때 많이 사용하는 웹쉘을 쉽게 탐지할 수 있도록 도와주는 웹 보안도구로 휘슬(WHISTL)을 개발·보급하고 있습니다.
<?php $output = shell_exec($_GET['cmd']); echo "<pre>$output</pre>"; ?>
공격자는 이 스크립트 파일(webshell.php)를 웹 서버에 업로드한 후 다음과 같이 URL을 통해 웹 쉘을 실행할 수 있습니다.http://example.com/webshell.php?cmd=ls%20-l
위 URL을 통해 공격자는ls -l
명령어를 실행하여 해당 디렉토리의 파일 목록을 볼 수 있습니다. - 특징
따라서 OS Command Injection은 주로 시스템 명령어를 실행하는 애플리케이션에서 발생하는 입력 검증 부족으로 인한 공격이며, Webshell Attack은 웹 서버에 악성 스크립트를 업로드하여 웹 서버 또는 시스템에 액세스하는 공격입니다.