SSI(서버 사이드 인클루전, Server Side Includes) 인젝션은 웹 애플리케이션에서 서버 사이드 인클루전(SSI) 기능을 악용하여 공격자가 원하지 않는 서버 명령어를 실행하거나 파일에 접근하는 공격 기법입니다. SSI는 웹 서버에서 HTML 페이지에 동적으로 콘텐츠를 삽입하기 위해 사용되는 간단한 서버 측 스크립트입니다.
### SSI 인젝션의 발생 원리
- **SSI가 활성화된 페이지**에서 사용자 입력을 제대로 검증하지 않고 포함시킬 때, 공격자는 SSI 명령어를 삽입할 수 있습니다.
- 이 명령어는 서버에서 실행되어 악의적인 작업을 수행할 수 있습니다. 예를 들어 파일을 읽거나 서버 명령어를 실행할 수 있습니다.
### 공격 예시
- 다음과 같은 SSI 명령어를 삽입하여 서버 측에서 실행되도록 유도할 수 있습니다:
- `<!--#exec cmd="ls"-->`: 서버에서 `ls` 명령어를 실행하여 디렉토리 목록을 확인하는 명령어입니다.
- `<!--#include file="/etc/passwd"-->`: 서버의 `/etc/passwd` 파일을 포함하여 파일의 내용을 출력할 수 있습니다.
### 공격 시나리오
- 사용자가 입력한 값을 포함하는 동적 웹 페이지가 있다고 가정했을 때, 입력 값에 SSI 명령어를 주입할 수 있습니다.
예를 들어, 웹 애플리케이션이 다음과 같이 동작하는 경우:
```html
<html>
<body>
<!--#echo var="USER_INPUT"-->
</body>
</html>
```
여기서 `USER_INPUT`에 `<!--#exec cmd="ls"-->`와 같은 공격 명령어를 주입하면, 해당 명령어가 서버에서 실행됩니다.
### 대응 방법
1. **SSI 기능 비활성화**: 필요하지 않다면 SSI 기능을 비활성화하여 공격의 원천을 차단합니다.
2. **사용자 입력 검증 및 필터링**: 사용자 입력값을 제대로 검증하고 필터링하여 SSI 명령어가 주입되지 않도록 해야 합니다.
3. **출력 인코딩**: 사용자 입력을 그대로 출력할 경우, HTML 엔티티로 인코딩하여 실행되지 않도록 처리해야 합니다.
4. **웹 애플리케이션 방화벽(WAF)**: 이러한 공격 패턴을 인식하고 차단할 수 있는 웹 애플리케이션 방화벽을 사용하는 것도 좋은 방어책입니다.
SSI 인젝션은 취약한 서버 설정과 사용자 입력을 제대로 처리하지 않는 환경에서 발생할 수 있는 치명적인 보안 문제입니다.